p2pool/tests/src/stratum_dummy.py

93 lines
2.0 KiB
Python
Raw Normal View History

2023-05-17 07:12:48 -06:00
import socket
import time
import sys
import json
2023-05-17 07:12:48 -06:00
f = open('stratum_dummy' + sys.argv[1] + '.log', 'wb')
2023-05-17 07:12:48 -06:00
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
sock.setblocking(True)
f.write(b'Connecting')
2023-05-17 07:12:48 -06:00
time.sleep(5)
while sock.connect_ex(('127.0.0.1', 3333)) != 0:
f.write(b'.')
2023-05-17 07:12:48 -06:00
print('.')
time.sleep(1)
f.write(b'\n')
diff = ''
if (sys.argv[1] == '2'):
diff = '+1000'
if (sys.argv[1] == '3'):
diff = '+10000000'
msg_id = 1
request = '{"id":' + str(msg_id) + ',"method":"login","params":{"login":"x' + diff + '"}}\n'
msg_id += 1
s = '-> ' + request
print(s, end='')
sock.sendall(request.encode('utf-8'))
2023-05-17 07:12:48 -06:00
f.write(s.encode('utf-8'))
f.flush()
rpc_id = ''
2023-05-17 07:12:48 -06:00
while True:
data = sock.recv(1024)
if len(data) == 0:
break
s = '<- ' + data.decode('utf-8')
print(s, end='')
f.write(s.encode('utf-8'))
2023-05-17 07:12:48 -06:00
f.flush()
obj = json.loads(data)
job_id = ''
if ('method' in obj) and ('params' in obj) and (obj['method'] == 'job'):
job_id = obj['params']['job_id']
target = obj['params']['target']
2023-08-14 13:57:38 -06:00
elif ('result' in obj) and ('job' in obj['result']):
if ('id' in obj['result']):
rpc_id = obj['result']['id']
job_id = obj['result']['job']['job_id']
target = obj['result']['job']['target']
if (job_id != ''):
if (msg_id < 4):
result = ('f' if (msg_id == 2) else '0') * 64
request = '{"id":' + str(msg_id) + ',"method":"submit","params":{"id":"' + rpc_id + '","job_id":"' + job_id + '","nonce":"ffffffff","result":"' + result + '"}}\n'
2023-08-14 13:57:38 -06:00
elif (msg_id == 4):
request = '{"id":' + str(msg_id) + ',"method":"keepalived"}\n'
2023-08-14 13:57:38 -06:00
else:
t = bytearray.fromhex(target)
for i in range(len(t)):
if (t[i] > 0):
t[i] -= 1
break
else:
t[i] = 255
2023-08-15 00:00:11 -06:00
result = ('f' * (64 - len(target))) + t.hex()
2023-08-14 13:57:38 -06:00
request = '{"id":' + str(msg_id) + ',"method":"submit","params":{"id":"' + rpc_id + '","job_id":"' + job_id + '","nonce":"ffffffff","result":"' + result + '"}}\n'
msg_id += 1
s = '-> ' + request
print(s, end='')
sock.sendall(request.encode('utf-8'))
f.write(s.encode('utf-8'))
f.flush()
2023-05-17 07:12:48 -06:00
sock.close()
f.close()