1
0
Fork 0
mirror of https://github.com/romanz/electrs.git synced 2025-02-24 06:57:53 +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
import binascii
import json
import os
import socket
import numpy as np
import matplotlib.pyplot as plt
s = socket.create_connection(('localhost', 8332))
r = s.makefile()
cookie = binascii.b2a_base64(open('/home/roman/.bitcoin/.cookie', 'rb').read())
cookie = cookie.decode('ascii').strip()
class Daemon:
def __init__(self):
self.sock = socket.create_connection(('localhost', 8332))
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):
obj = [{"method": method, "params": params} for params in params_list]
request = json.dumps(obj)
def request(self, method, params_list):
obj = [{"method": method, "params": params, "id": self.index}
for params in params_list]
request = json.dumps(obj)
msg = ('POST / HTTP/1.1\nAuthorization: Basic {}\nContent-Length: {}\n\n'
'{}'.format(cookie, len(request), request))
s.sendall(msg.encode('ascii'))
msg = ('POST / HTTP/1.1\n'
'Authorization: Basic {}\n'
'Content-Length: {}\n\n'
'{}'.format(self.cookie, len(request), request))
self.sock.sendall(msg.encode('ascii'))
status = r.readline().strip()
headers = []
while True:
line = r.readline().strip()
if line:
headers.append(line)
else:
break
status = self.fd.readline().strip()
while True:
if self.fd.readline().strip():
continue # skip headers
else:
break # next line will contain the response
data = r.readline().strip()
replies = json.loads(data)
assert all(r['error'] is None for r in replies), replies
return [d['result'] for d in replies]
data = self.fd.readline().strip()
replies = json.loads(data)
for reply in replies:
assert reply['error'] is None
assert reply['id'] == self.index
self.index += 1
return [d['result'] for d in replies]
def main():
txids, = request('getrawmempool', [[False]])
d = Daemon()
txids, = d.request('getrawmempool', [[False]])
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]
for e in entries:
e['rate'] = e['fee'] / e['vsize'] # sat/vbyte