Beispiel #1
0
 def highest_td_peer(self) -> BaseChainPeer:
     peers = tuple(self.connected_nodes.values())
     if not peers:
         raise NoConnectedPeers()
     peers_by_td = groupby(operator.attrgetter('head_td'), peers)
     max_td = max(peers_by_td.keys())
     return random.choice(peers_by_td[max_td])
Beispiel #2
0
 def _request_block_parts(
         self, headers: List[BlockHeader],
         request_func: Callable[[ETHPeer, List[BlockHeader]], None]) -> int:
     if not self.peer_pool.peers:
         raise NoConnectedPeers()
     length = math.ceil(len(headers) / len(self.peer_pool.peers))
     batches = list(partition_all(length, headers))
     for peer, batch in zip(self.peer_pool.peers, batches):
         request_func(cast(ETHPeer, peer), batch)
     return len(batches)
Beispiel #3
0
    def highest_td_peer(self) -> BaseChainPeer:
        peers = tuple(self.connected_nodes.values())
        if not peers:
            raise NoConnectedPeers("No connected peers")

        td_getter = excepts(UnknownAPI,
                            operator.attrgetter('head_info.head_td'),
                            lambda _: 0)
        peers_by_td = groupby(td_getter, peers)
        max_td = max(peers_by_td.keys())
        return random.choice(peers_by_td[max_td])
Beispiel #4
0
 def highest_td_peer(self) -> BasePeer:
     if not self.connected_nodes:
         raise NoConnectedPeers()
     peers_by_td = groupby(operator.attrgetter('head_td'), self.peers)
     max_td = max(peers_by_td.keys())
     return random.choice(peers_by_td[max_td])
Beispiel #5
0
 def get_peers(self, min_td: int) -> List[BasePeer]:
     if not self.connected_nodes:
         raise NoConnectedPeers()
     return [peer for peer in self.peers if peer.head_td >= min_td]