예제 #1
0
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)))
예제 #2
0
    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)
예제 #3
0
    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."
            )
예제 #5
0
    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."
            )
예제 #6
0
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)