def node_by_uri(uri): scheme = 'enode://' assert uri.startswith(scheme) and '@' in uri and ':' in uri pubkey, ip_port = uri[len(scheme):].split('@') ip, port = ip_port.split(':') return discovery.Node(pubkey.decode('hex'), discovery.Address(ip, int(port)))
def __init__(self, host, port, seed): self.address = discovery.Address(host, port) config = dict(discovery=dict(), node=dict(privkey_hex=crypto.sha3(seed).encode('hex'))) config_discovery = config['discovery'] config_discovery['listen_host'] = host config_discovery['listen_port'] = port app = AppMock() app.config = config self.protocol = discovery.DiscoveryProtocol(app=app, transport=self)
def __init__(self, host, port, seed): self.address = discovery.Address(host, port) config = ConfigParser.ConfigParser() config.add_section('p2p') config.set('p2p', 'listen_host', host) config.set('p2p', 'listen_port', str(port)) config.set('p2p', 'privkey_hex', crypto.sha3(seed).encode('hex')) app = AppMock() app.config = config self.protocol = discovery.DiscoveryProtocol(app=app, transport=self)
def load_routing_table(self): nodes = [] try: #routing = self.app.services.discovery.protocol.kademlia.routing current_time = "{:%y%m%d-%H%M%S}".format(datetime.datetime.now()) filename = "{}/{}".format(self.result_dir, self.prev_routing_table) log.info('loading previous routing table', file=filename, timestamp=current_time) greenlets = [] # HARDCODED winterfell node if 1: pubkey = "77154628bb8658313705f1117457aa29b5141d4520c94d87e446a277a4ea6d360521e791bdfa0b5032c2caa0b07692440bdce700947420e1cc46bcac87b4b054".decode( 'hex') ip = '54.157.204.171' tcp_port = 30303 greenlets.append( gevent.spawn(self.connect, (ip, tcp_port), pubkey)) if 0: with open(filename, "r") as file_obj: csvfile = csv.reader(file_obj, delimiter=',') for row in list(csvfile)[:10]: if len(row) != 6: continue pubkey = row[0].decode('hex') ip = row[1] tcp_port = int(row[2]) udp_port = int(row[3]) reputation = row[4] rlpx_version = row[5] address = discovery.Address(ip, udp_port, tcp_port=tcp_port) node = discovery.Node(pubkey, address=address) node.reputation = reputation node.rlpx_version = rlpx_version #routing.add_node(node) nodes.append(node) log.info('add_node: ' + str(node)) greenlets.append( gevent.spawn(self.connect, (ip, tcp_port), pubkey)) gevent.joinall(greenlets) gevent.sleep(self.connect_loop_delay) log.info('previous routing table loaded', num_nodes=len(nodes)) except AttributeError: # TODO: Is this the correct thing to do here? log.error( "Discovery service not available. Failed to load routing table." )
def load_routing_table(self): try: routing = self.app.services.discovery.protocol.kademlia.routing current_time = "{:%y%m%d-%H%M%S}".format(datetime.datetime.now()) filename = "{}/{}".format(self.result_dir, self.prev_routing_table) log.info('loading previous routing table', file=filename, timestamp=current_time) greenlets = [] with open(filename, "r") as file_obj: csvfile = csv.reader(file_obj, delimiter=',') for row in csvfile: if len(row) != 6: continue pubkey = row[0].decode('hex') ip = row[1] tcp_port = int(row[2]) udp_port = int(row[3]) reputation = row[4] rlpx_version = row[5] address = discovery.Address(ip, udp_port, tcp_port=tcp_port) node = discovery.Node(pubkey, address=address) node.reputation = reputation node.rlpx_version = rlpx_version routing.add_node(node) greenlets.append( gevent.spawn(self.connect, (ip, tcp_port), pubkey)) gevent.joinall(greenlets) gevent.sleep(self.connect_loop_delay) log.info('previous routing table loaded', num_nodes=len(routing)) except AttributeError: # TODO: Is this the correct thing to do here? log.error( "Discovery service not available. Failed to load routing table." )
def test_eip8_packets(): disc = NodeDiscoveryMock(host='127.0.0.1', port=1, seed='bob').protocol fromaddr = discovery.Address("127.0.0.1", 9999) for packet in eip8_packets.itervalues(): disc.unpack(packet)