Пример #1
0
 async def get_nodes_to_connect(self) -> List[Node]:
     # TODO: This should use the Discovery service to lookup nodes to connect to, but our
     # current implementation only supports v4 and with that it takes an insane amount of time
     # to find any LES nodes with the same network ID as us, so for now we hard-code some nodes
     # that seem to have a good uptime.
     from evm.chains.ropsten import RopstenChain
     from evm.chains.mainnet import MainnetChain
     if self.network_id == MainnetChain.network_id:
         return [
             Node(
                 keys.PublicKey(decode_hex("1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082")),  # noqa: E501
                 Address("52.74.57.123", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("78de8a0916848093c73790ead81d1928bec737d565119932b98c6b100d944b7a95e94f847f689fc723399d2e31129d182f7ef3863f2b4c820abbf3ab2722344d")),  # noqa: E501
                 Address("191.235.84.50", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("ddd81193df80128880232fc1deb45f72746019839589eeb642d3d44efbb8b2dda2c1a46a348349964a6066f8afb016eb2a8c0f3c66f32fadf4370a236a4b5286")),  # noqa: E501
                 Address("52.231.202.145", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("3f1d12044546b76342d59d4a05532c14b85aa669704bfe1f864fe079415aa2c02d743e03218e57a33fb94523adb54032871a6c51b2cc5514cb7c7e35b3ed0a99")),  # noqa: E501
                 Address("13.93.211.84", 30303, 30303)),
         ]
     elif self.network_id == RopstenChain.network_id:
         return [
             Node(
                 keys.PublicKey(decode_hex("88c2b24429a6f7683fbfd06874ae3f1e7c8b4a5ffb846e77c705ba02e2543789d66fc032b6606a8d8888eb6239a2abe5897ce83f78dcdcfcb027d6ea69aa6fe9")),  # noqa: E501
                 Address("163.172.157.61", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("a1ef9ba5550d5fac27f7cbd4e8d20a643ad75596f307c91cd6e7f85b548b8a6bf215cca436d6ee436d6135f9fe51398f8dd4c0bd6c6a0c332ccb41880f33ec12")),  # noqa: E501
                 Address("51.15.218.125", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("e80276aabb7682a4a659f4341c1199de79d91a2e500a6ee9bed16ed4ce927ba8d32ba5dea357739ffdf2c5bcc848d3064bb6f149f0b4249c1f7e53f8bf02bfc8")),  # noqa: E501
                 Address("51.15.39.57", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("584c0db89b00719e9e7b1b5c32a4a8942f379f4d5d66bb69f9c7fa97fa42f64974e7b057b35eb5a63fd7973af063f9a1d32d8c60dbb4854c64cb8ab385470258")),  # noqa: E501
                 Address("51.15.35.2", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("d40871fc3e11b2649700978e06acd68a24af54e603d4333faecb70926ca7df93baa0b7bf4e927fcad9a7c1c07f9b325b22f6d1730e728314d0e4e6523e5cebc2")),  # noqa: E501
                 Address("51.15.132.235", 30303, 30303)),
             Node(
                 keys.PublicKey(decode_hex("482484b9198530ee2e00db89791823244ca41dcd372242e2e1297dd06f6d8dd357603960c5ad9cc8dc15fcdf0e4edd06b7ad7db590e67a0b54f798c26581ebd7")),  # noqa: E501
                 Address("51.15.75.138", 30303, 30303)),
         ]
     else:
         raise ValueError("Unknown network_id: {}".format(self.network_id))
Пример #2
0
                        format='%(levelname)s: %(message)s')

    # The default remoteid can be used if you pass nodekeyhex as above to geth.
    nodekey = keys.PrivateKey(
        decode_hex(
            "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8")
    )
    remoteid = nodekey.public_key.to_hex()
    parser = argparse.ArgumentParser()
    parser.add_argument('-remoteid', type=str, default=remoteid)
    parser.add_argument('-db', type=str)
    parser.add_argument('-mainnet', action="store_true")
    args = parser.parse_args()

    remote = Node(keys.PublicKey(decode_hex(args.remoteid)),
                  Address('127.0.0.1', 30303, 30303))

    if args.db is not None:
        chaindb = BaseChainDB(LevelDB(args.db))
    else:
        chaindb = BaseChainDB(MemoryDB())

    genesis_header = ROPSTEN_GENESIS_HEADER
    chain_class = RopstenChain
    if args.mainnet:
        genesis_header = MAINNET_GENESIS_HEADER
        chain_class = MainnetChain

    try:
        chaindb.get_canonical_head()
    except CanonicalHeadNotFound:
Пример #3
0
def _test():
    """
    Create a Peer instance connected to a local geth instance and log messages exchanged with it.

    Use the following command line to run geth:

        ./build/bin/geth -vmodule p2p=4,p2p/discv5=0,eth/*=0 \
          -nodekeyhex 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 \
          -testnet -lightserv 90
    """
    import argparse
    from evm.chains.ropsten import RopstenChain, ROPSTEN_GENESIS_HEADER
    from evm.db.backends.memory import MemoryDB
    logging.basicConfig(level=logging.DEBUG,
                        format='%(levelname)s: %(message)s')

    # The default remoteid can be used if you pass nodekeyhex as above to geth.
    nodekey = keys.PrivateKey(
        decode_hex(
            "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8")
    )
    remoteid = nodekey.public_key.to_hex()
    parser = argparse.ArgumentParser()
    parser.add_argument('-remoteid', type=str, default=remoteid)
    parser.add_argument('-light',
                        action='store_true',
                        help="Connect as a light node")
    args = parser.parse_args()

    peer_class = ETHPeer  # type: ignore
    if args.light:
        peer_class = LESPeer  # type: ignore
    remote = Node(keys.PublicKey(decode_hex(args.remoteid)),
                  Address('127.0.0.1', 30303, 30303))
    chaindb = ChainDB(MemoryDB())
    chaindb.persist_header_to_db(ROPSTEN_GENESIS_HEADER)
    network_id = RopstenChain.network_id
    loop = asyncio.get_event_loop()
    try:
        peer = loop.run_until_complete(
            asyncio.wait_for(
                handshake(remote, ecies.generate_privkey(), peer_class,
                          chaindb, network_id), HANDSHAKE_TIMEOUT))

        async def request_stuff():
            # Request some stuff from ropsten's block 2440319
            # (https://ropsten.etherscan.io/block/2440319), just as a basic test.
            nonlocal peer
            block_hash = decode_hex(
                '0x59af08ab31822c992bb3dad92ddb68d820aa4c69e9560f07081fa53f1009b152'
            )
            if peer_class == ETHPeer:
                peer = cast(ETHPeer, peer)
                peer.sub_proto.send_get_block_headers(block_hash, 1)
                peer.sub_proto.send_get_block_bodies([block_hash])
                peer.sub_proto.send_get_receipts([block_hash])
            else:
                peer = cast(LESPeer, peer)
                request_id = 1
                peer.sub_proto.send_get_block_headers(block_hash, 1,
                                                      request_id)
                peer.sub_proto.send_get_block_bodies([block_hash],
                                                     request_id + 1)
                peer.sub_proto.send_get_receipts(block_hash, request_id + 2)

        asyncio.ensure_future(request_stuff())
        loop.run_until_complete(peer.run())
    except KeyboardInterrupt:
        pass

    loop.run_until_complete(peer.stop())
    loop.close()