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:
parent
3d09a9f3a0
commit
d0bb321da1
1 changed files with 35 additions and 24 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue