1
0
Fork 0
mirror of https://github.com/romanz/electrs.git synced 2025-02-24 15:02:21 +01:00

Refactor mempool visualization tool

This commit is contained in:
Roman Zeyde 2018-07-17 10:11:28 +03:00
parent 3d09a9f3a0
commit d0bb321da1
No known key found for this signature in database
GPG key ID: 87CAE5FA46917CBB

View file

@ -1,44 +1,55 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import binascii import binascii
import json import json
import os
import socket import socket
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
s = socket.create_connection(('localhost', 8332)) class Daemon:
r = s.makefile() def __init__(self):
cookie = binascii.b2a_base64(open('/home/roman/.bitcoin/.cookie', 'rb').read()) self.sock = socket.create_connection(('localhost', 8332))
cookie = cookie.decode('ascii').strip() self.fd = self.sock.makefile()
path = os.path.expanduser('~/.bitcoin/.cookie')
cookie = binascii.b2a_base64(open(path, 'rb').read())
self.cookie = cookie.decode('ascii').strip()
self.index = 0
def request(method, params_list): def request(self, method, params_list):
obj = [{"method": method, "params": params} for params in params_list] obj = [{"method": method, "params": params, "id": self.index}
request = json.dumps(obj) for params in params_list]
request = json.dumps(obj)
msg = ('POST / HTTP/1.1\nAuthorization: Basic {}\nContent-Length: {}\n\n' msg = ('POST / HTTP/1.1\n'
'{}'.format(cookie, len(request), request)) 'Authorization: Basic {}\n'
s.sendall(msg.encode('ascii')) 'Content-Length: {}\n\n'
'{}'.format(self.cookie, len(request), request))
self.sock.sendall(msg.encode('ascii'))
status = r.readline().strip() status = self.fd.readline().strip()
headers = [] while True:
while True: if self.fd.readline().strip():
line = r.readline().strip() continue # skip headers
if line: else:
headers.append(line) break # next line will contain the response
else:
break
data = r.readline().strip() data = self.fd.readline().strip()
replies = json.loads(data) replies = json.loads(data)
assert all(r['error'] is None for r in replies), replies for reply in replies:
return [d['result'] for d in replies] assert reply['error'] is None
assert reply['id'] == self.index
self.index += 1
return [d['result'] for d in replies]
def main(): def main():
txids, = request('getrawmempool', [[False]]) d = Daemon()
txids, = d.request('getrawmempool', [[False]])
txids = list(map(lambda a: [a], txids)) txids = list(map(lambda a: [a], txids))
entries = request('getmempoolentry', txids) entries = d.request('getmempoolentry', txids)
entries = [{'fee': e['fee']*1e8, 'vsize': e['size']} for e in entries] entries = [{'fee': e['fee']*1e8, 'vsize': e['size']} for e in entries]
for e in entries: for e in entries:
e['rate'] = e['fee'] / e['vsize'] # sat/vbyte e['rate'] = e['fee'] / e['vsize'] # sat/vbyte