Exemple #1
0
def handshake_peers(peer1, peer2, peer_info_1={}, peer_info_2={}):
    msg1 = version_data_for_peer(peer1, **peer_info_1)
    msg2 = version_data_for_peer(peer2, **peer_info_2)
    asyncio.get_event_loop().run_until_complete(
        asyncio.wait(
            [initial_handshake(peer1, msg1),
             initial_handshake(peer2, msg2)]))
    return peer1, peer2
Exemple #2
0
    def loop_connect_to_superpeer(superpeer_ip_queue):
        while 1:
            try:
                pair = yield from superpeer_ip_queue.get()
                if pair is None:
                    break
                peer_name = "%s:%d" % pair
                host, port = pair
                logging.debug("connecting to superpeer at %s", peer_name)
                transport, peer = yield from asyncio.get_event_loop(
                ).create_connection(lambda: BitcoinPeerProtocol(magic_header),
                                    host=host,
                                    port=port)

                logging.debug("connected to superpeer at %s", peer_name)
                yield from initial_handshake(peer, version_data_for_peer(peer))
                logging.debug("handshake complete on %s", peer_name)

                date_address_tuples = yield from get_date_address_tuples(peer)

                logging.debug("got addresses from %s", peer_name)
                for da in date_address_tuples:
                    timestamp_peeraddress_tuple_queue.put_nowait(
                        (-da[0], da[1]))
                logging.debug("closing connection to %s", peer_name)
                transport.close()
            except Exception:
                logging.exception("failed during connect to %s", peer_name)
Exemple #3
0
 def run_peer(peer, fetcher, getheaders_add_peer, blockfetcher,
              inv_collector):
     yield from asyncio.wait_for(peer.connection_made_future,
                                 timeout=None)
     last_block_index = max(0, self.blockchain_view.last_block_index())
     version_parameters = version_data_for_peer(
         peer,
         local_port=0,
         last_block_index=last_block_index,
         nonce=self.nonce,
         subversion=self.subversion)
     version_data = yield from initial_handshake(
         peer, version_parameters)
     if self.bloom_filter:
         filter_bytes, hash_function_count, tweak = self.bloom_filter.filter_load_params(
         )
         # TODO: figure out flags
         flags = 0
         peer.send_msg("filterload",
                       filter=filter_bytes,
                       hash_function_count=hash_function_count,
                       tweak=tweak,
                       flags=flags)
     last_block_index = version_data["last_block_index"]
     getheaders_add_peer(peer, last_block_index)
     blockfetcher.add_peer(peer, fetcher, last_block_index)
     inv_collector.add_peer(peer)
    def loop_connect_to_superpeer(superpeer_ip_queue):
        while 1:
            try:
                pair = yield from superpeer_ip_queue.get()
                if pair is None:
                    break
                peer_name = "%s:%d" % pair
                host, port = pair
                logging.debug("connecting to superpeer at %s", peer_name)
                transport, peer = yield from asyncio.get_event_loop().create_connection(
                    lambda: BitcoinPeerProtocol(magic_header), host=host, port=port)

                logging.debug("connected to superpeer at %s", peer_name)
                yield from initial_handshake(peer, version_data_for_peer(peer))
                logging.debug("handshake complete on %s", peer_name)

                date_address_tuples = yield from get_date_address_tuples(peer)

                logging.debug("got addresses from %s", peer_name)
                for da in date_address_tuples:
                    timestamp_peeraddress_tuple_queue.put_nowait((-da[0], da[1]))
                logging.debug("closing connection to %s", peer_name)
                transport.close()
            except Exception:
                logging.exception("failed during connect to %s", peer_name)
Exemple #5
0
def run_peer(peer, fetcher, fast_forward_add_peer, blockfetcher, inv_collector, blockhandler):
    yield from asyncio.wait_for(peer.connection_made_future, timeout=None)
    version_parameters = version_data_for_peer(peer)
    version_data = yield from initial_handshake(peer, version_parameters)
    last_block_index = version_data["last_block_index"]
    fast_forward_add_peer(peer, last_block_index)
    blockfetcher.add_peer(peer, fetcher, last_block_index)
    inv_collector.add_peer(peer)
    blockhandler.add_peer(peer)
Exemple #6
0
 def run_peer(peer, fetcher, fast_forward_add_peer, blockfetcher, inv_collector, blockhandler):
     yield from asyncio.wait_for(peer.connection_made_future, timeout=None)
     version_parameters = version_data_for_peer(
         peer, local_port=(server_port or 0), last_block_index=block_chain.length(),
         nonce=self.nonce, subversion=self.subversion)
     version_data = yield from initial_handshake(peer, version_parameters)
     last_block_index = version_data["last_block_index"]
     fast_forward_add_peer(peer, last_block_index)
     blockfetcher.add_peer(peer, fetcher, last_block_index)
     inv_collector.add_peer(peer)
     blockhandler.add_peer(peer)
Exemple #7
0
 def run_peer(peer, fetcher, fast_forward_add_peer, blockfetcher, inv_collector, blockhandler):
     yield from asyncio.wait_for(peer.connection_made_future, timeout=None)
     version_parameters = version_data_for_peer(
         peer, local_port=(server_port or 0), last_block_index=block_chain.length(),
         nonce=self.nonce, subversion=self.subversion)
     version_data = yield from initial_handshake(peer, version_parameters)
     last_block_index = version_data["last_block_index"]
     fast_forward_add_peer(peer, last_block_index)
     blockfetcher.add_peer(peer, fetcher, last_block_index)
     inv_collector.add_peer(peer)
     blockhandler.add_peer(peer)
Exemple #8
0
 def run_peer(peer, fetcher, getheaders_add_peer, blockfetcher, inv_collector):
     yield from asyncio.wait_for(peer.connection_made_future, timeout=None)
     last_block_index = max(0, self.blockchain_view.last_block_index())
     version_parameters = version_data_for_peer(
         peer, local_port=0, last_block_index=last_block_index, nonce=self.nonce,
         subversion=self.subversion)
     version_data = yield from initial_handshake(peer, version_parameters)
     filter_bytes, hash_function_count, tweak = self.bloom_filter.filter_load_params()
     # TODO: figure out flags
     flags = 0
     peer.send_msg(
         "filterload", filter=filter_bytes, hash_function_count=hash_function_count,
         tweak=tweak, flags=flags)
     last_block_index = version_data["last_block_index"]
     getheaders_add_peer(peer, last_block_index)
     blockfetcher.add_peer(peer, fetcher, last_block_index)
     inv_collector.add_peer(peer)
Exemple #9
0
def connect_to_remote(event_loop, magic_header, address_db, connections):
    host, port = address_db.next_address()
    logging.info("connecting to %s port %d", host, port)
    try:
        transport, peer = yield from event_loop.create_connection(
            lambda: BitcoinPeerProtocol(magic_header),
            host=host, port=port)
    except Exception:
        logging.exception("failed to connect to %s:%d", host, port)
        address_db.remove_address(host, port)
        address_db.save()
        return

    try:
        logging.info("connected to %s:%d", host, port)
        yield from asyncio.wait_for(peer.connection_made_future, timeout=None)
        version_parameters = version_data_for_peer(peer)
        yield from initial_handshake(peer, version_parameters)
        AddressKeeper(peer, address_db)
        address_db.add_address(host, port, int(time.time()))
        connections.add(peer)
    except Exception:
        logging.exception("exception talking to %s:%d", host, port)
    logging.info("done talking to %s:%d", host, port)
Exemple #10
0
def handshake_peers(peer1, peer2, peer_info_1={}, peer_info_2={}):
    msg1 = version_data_for_peer(peer1, **peer_info_1)
    msg2 = version_data_for_peer(peer2, **peer_info_2)
    asyncio.get_event_loop().run_until_complete(asyncio.wait([initial_handshake(peer1, msg1), initial_handshake(peer2, msg2)]))
    return peer1, peer2