You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
#!/usr/bin/env python
|
|
|
|
import util, json
|
|
from collections import defaultdict
|
|
|
|
|
|
def analyze(results):
|
|
out = {}
|
|
dd = {}
|
|
for k, v in results.items():
|
|
height = v.get('block_height')
|
|
merkle = v.get('merkle_root')
|
|
utxo = v.get('utxo_root')
|
|
d = dd.get(merkle, defaultdict(int))
|
|
d[utxo] += 1
|
|
dd[merkle] = d
|
|
refs = {}
|
|
for merkle, d in dd.items():
|
|
v = d.values()
|
|
m = max(v)
|
|
ref = d.keys()[v.index(m)]
|
|
refs[merkle] = ref, m
|
|
for k, v in results.items():
|
|
height = v.get('block_height')
|
|
merkle = v.get('merkle_root')
|
|
utxo = v.get('utxo_root')
|
|
ref_utxo, num = refs.get(merkle)
|
|
if ref_utxo != utxo and num > 1:
|
|
out[k] = height, merkle, utxo
|
|
return out
|
|
|
|
|
|
peers = util.get_peers()
|
|
results = util.send_request(peers, 'blockchain.headers.subscribe', [])
|
|
|
|
errors = analyze(results).keys()
|
|
|
|
for n,v in sorted(results.items(), key=lambda x:x[1].get('block_height')):
|
|
print "%40s"%n, v.get('block_height'), v.get('utxo_root'), "error" if n in errors else "ok"
|
|
|