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