#!/usr/bin/env python
-import time, electrum, Queue
-from electrum import Interface, SimpleConfig
-from electrum.network import filter_protocol, parse_servers
+import time, electrum_nvc, Queue
+from electrum_nvc import Interface, SimpleConfig
+from electrum_nvc.network import filter_protocol, parse_servers
from collections import defaultdict
# 1. start interface and wait for connection
-interface = electrum.Interface('ecdsa.net:50002:s')
+interface = electrum.Interface('127.0.0.1:50002:s')
interface.start(wait = True)
if not interface.is_connected:
print "not connected"
peers = parse_servers(r.get('result'))
peers = filter_protocol(peers,'s')
+print "Contacting %d servers"%len(peers)
# start interfaces
config = SimpleConfig()
interfaces = map ( lambda server: Interface(server, config), peers )
reached_servers = []
for i in interfaces: i.start(q)
+t0 = time.time()
while peers:
- i = q.get(timeout=1)
+ try:
+ i = q.get(timeout=1)
+ except:
+ if time.time() - t0 > 10:
+ print "timeout"
+ break
+ else:
+ continue
peers.remove(i.server)
if i.is_connected:
i.send([('blockchain.headers.subscribe',[])], lambda i,x: results_queue.put((i,x)))
reached_servers.append(i.server)
+ else:
+ print "Connection failed:", i.server
+
+print "%d servers could be reached"%len(reached_servers)
def analyze(results):
out = {}
results[i.server] = r.get('result')
reached_servers.remove(i.server)
-electrum.print_json(results)
-out = analyze(results)
-if out:
- print "faulty servers:"
- electrum.print_json(out)
-else:
- print "ok"
+errors = analyze(results).keys()
+
+for n,v in sorted(results.items(), key=lambda x:x[1]['block_height']):
+ print "%40s"%n, v['block_height'], v['utxo_root'], "error" if n in errors else "ok"
+
+