Exemplo n.º 1
0
    def Dispatch(self):

        for i in range(len(beacons.beacon_ips[constants.MainnetID])):

            beacon_hp = beacons.beacon_ips[constants.MainnetID][i]
            beacon_id = beacons.beacon_ids[constants.MainnetID][i]

            host_addr, host_port = beacon_hp.split(":")

            p = Peer(self.Net,
                     conn=None,
                     ip=IPDesc(host_addr, int(host_port)),
                     port=int(host_port),
                     node=self,
                     my_staking_ip=self.Config.StakingIP)

            self.Config.BootstrapPeers.append(p)

        random.shuffle(self.Config.BootstrapPeers)
        for peer in self.Config.BootstrapPeers:
            if peer.ip.IP != self.Config.StakingIP.IP:
                self.Net.track(peer)
            else:
                self.Log.Error("can't add self as a bootstrapper")

        self.Net.Dispatch()

        # If the P2P server isn't running, shut down the node.
        # If node is already shutting down, this does nothing.
        self.Shutdown()

        # Wait until the node is done shutting down before returning
        self.doneShuttingDown.Wait()
Exemplo n.º 2
0
 def __init__(self) -> None:
     # the peer, if it wasn't a peer when we cloned the list this value will be
     # nil
     self.peer = Peer()
     # this is the validator id for the peer, we pass back to the caller for
     # logging purposes
     self.id = ShortID()
Exemplo n.º 3
0
    def attempt_connect(self, peer: Peer):
        """Returns None if a connection was able to be established, or the network is closed."""
        self.Log.debug(f"Attempting to connect to {peer.ip}")

        conn = self.dialer.Dial(peer.ip)

        if conn is None:
            raise RuntimeError(f"Cannot connect to {peer.ip}")

        peer.conn = conn
        peer.connected = True

        sid = Network.id_from_ip(peer.ip)
        peer.id = str(sid)

        self.tryAddPeer(peer)

        return conn
Exemplo n.º 4
0
    def handle_msg(self, msg: bytes, peer: Peer):
        now = time.time()
        peer.lastReceived = int(now)
        peer.net.lastMsgReceivedTime = int(now)

        parsed_msg = Codec.Parse(msg)

        self.Log.debug(parsed_msg)
        oph = self.__op_handlers[parsed_msg.op]

        if not oph:
            err_str = f"No handler for op {parsed_msg.op} received from peer {peer}: Msg {parsed_msg}"
            avaxpython.config().logger().error(err_str)
            raise ValueError(err_str)

        oph(parsed_msg, peer)
Exemplo n.º 5
0
    def handle_msg(self, msg: bytes, peer: Peer):
        opcode = msg[0]

        self.avaxpython.config().logger().debug(
            "handle_msg called opcode {} with {} bytes from peer {}".format(
                opcode, len(msg), peer))
        fn = "{}/{}.bin".format(self.data_dir, str(time.time()))
        with open(fn, "wb") as f:
            f.write(msg)

        now = time.time()
        peer.lastReceived = int(now)
        peer.net.lastMsgReceivedTime = int(now)

        parsed_msg = Codec.Parse(msg)
        oph = self.__op_handlers[parsed_msg.op]

        if not oph:
            err_str = f"No handler for op {parsed_msg.op} received from peer {peer}: Msg {parsed_msg}"
            self.avaxpython.config().logger().error(err_str)
            raise Exception(err_str)

        oph(parsed_msg, peer)
Exemplo n.º 6
0
 def get_peerlist(self, msg: Msg, peer: Peer):
     """Returns a list of connected Peer objects."""
     avaxpython.config().logger().debug("Handling get_peerlist : Msg {} Peer {}".format(msg, peer))    
     peers = self.peer_state.list_connected()
     peer.PeerList(peers)
Exemplo n.º 7
0
 def get_version(self, msg: Msg, peer: Peer):
     avaxpython.config().logger().debug("Handling get_version : Msg {} Peer {}".format(msg, peer))
     peer.Version()
Exemplo n.º 8
0
 def ping(self, msg: Msg, peer: Peer):
     avaxpython.config().logger().debug("Handling ping : Msg {} Peer {}".format(msg, peer))    
     peer.Pong()
Exemplo n.º 9
0
 def ping(self, msg: Msg, peer: Peer):
     self.avaxpython.config().logger().debug("Responding ping")
     peer.Pong()
Exemplo n.º 10
0
 def get_peerlist(self, msg: Msg, peer: Peer):
     """Returns a list of connected Peer objects."""
     self.avaxpython.config().logger().debug("Responding get_peerlist")
     peers = self.peer_state.list_connected()
     peer.PeerList(peers)
Exemplo n.º 11
0
 def get_version(self, msg: Msg, peer: Peer):
     self.avaxpython.config().logger().debug("Responding get_version")
     peer.Version()
Exemplo n.º 12
0

signal.signal(signal.SIGINT, sigint_handler)

params.parseCmdLine()
node_config = params.Config

avaxpython.config().set("handler", DefaultHandler())

avax_handler = AVAXHandler()
network = Network(router=ChainRouter())
network.nodeID = random.randint(9999, 4294967295)
peer = Peer(network,
            DummyConnection(),
            IPDesc('127.0.0.1', 9651),
            None,
            0,
            None,
            None,
            my_staking_ip=IPDesc('127.0.0.1', 9651))

chainManager = ChainManager()
dummy_node_id = ShortID()

vmManager = VMManager()
chain_configs.VMManager = vmManager

vdrs = ValidatorsManager()

chainManager = ChainManager()
chainManager.config.VMManager = vmManager
chainManager.config.Validators = vdrs