From 70af22c9e47df39b987d170ad0a5b2fd13e42ce8 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 7 Sep 2017 09:41:21 +0200 Subject: [PATCH] update scripts/servers to display server version --- lib/network.py | 21 ++++++++++++--------- scripts/peers | 34 +++++----------------------------- scripts/servers | 16 ++-------------- scripts/util.py | 3 +-- 4 files changed, 20 insertions(+), 54 deletions(-) diff --git a/lib/network.py b/lib/network.py index 578fc1c9..cd038800 100644 --- a/lib/network.py +++ b/lib/network.py @@ -120,18 +120,21 @@ def parse_servers(result): elif re.match("p\d*", v): pruning_level = v[1:] if pruning_level == '': pruning_level = '0' - try: - is_recent = util.normalize_version(version) >= util.normalize_version(PROTOCOL_VERSION) - except Exception as e: - print_error(e) - is_recent = False - - if out and is_recent: + if out: out['pruning'] = pruning_level + out['version'] = version servers[host] = out - return servers +def filter_version(servers): + def is_recent(version): + try: + return util.normalize_version(version) >= util.normalize_version(PROTOCOL_VERSION) + except Exception as e: + return False + return {k: v for k, v in servers.items() if is_recent(v.get('version'))} + + def filter_protocol(hostmap, protocol = 's'): '''Filters the hostmap for those implementing protocol. The result is a list in serialized form.''' @@ -574,7 +577,7 @@ class Network(util.DaemonThread): self.on_notify_header(interface, result) elif method == 'server.peers.subscribe': if error is None: - self.irc_servers = parse_servers(result) + self.irc_servers = filter_version(parse_servers(result)) self.notify('servers') elif method == 'server.banner': if error is None: diff --git a/scripts/peers b/scripts/peers index 3f961040..de1f6641 100755 --- a/scripts/peers +++ b/scripts/peers @@ -3,37 +3,13 @@ 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 = list(d.values()) - m = max(v) - dkeys = list(d.keys()) - ref = dkeys[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 - +from electrum.network import filter_protocol +from electrum.blockchain import hash_header peers = util.get_peers() +peers = filter_protocol(peers, 's') + 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") + print("%60s"%n, v.get('block_height'), hash_header(v)) diff --git a/scripts/servers b/scripts/servers index 288850ba..1b625d54 100755 --- a/scripts/servers +++ b/scripts/servers @@ -2,25 +2,13 @@ from electrum import set_verbosity from electrum.network import filter_protocol -from collections import defaultdict import util, json set_verbosity(False) servers = util.get_peers() -results = util.send_request(servers, 'blockchain.headers.subscribe', []) -d = defaultdict(int) +for k, v in sorted(servers.items(), key=lambda x:x[1].get('version')): + print("%40s"%k, v.get('version')) -for k, r in results.items(): - blocks = r.get('block_height') - d[blocks] += 1 - -for k, v in results.items(): - print(k, v.get('block_height')) - -v = list(d.values()) -k = list(d.keys()) -numblocks = k[v.index(max(v))] -print("blocks:", numblocks) diff --git a/scripts/util.py b/scripts/util.py index 4d4fe9f8..8c87f933 100644 --- a/scripts/util.py +++ b/scripts/util.py @@ -1,5 +1,6 @@ import select, time, electrum, queue from electrum import Connection, Interface, SimpleConfig + from electrum.network import filter_protocol, parse_servers from collections import defaultdict @@ -60,8 +61,6 @@ def get_peers(): if responses: response = responses[0][1] # One response, (req, response) tuple peers = parse_servers(response.get('result')) - peers = filter_protocol(peers,'s') - #print(response) return peers