예제 #1
0
 async def update_cached_harvesters(self) -> bool:
     # First remove outdated cache entries
     self.log.debug(
         f"update_cached_harvesters cache entries: {len(self.harvester_cache)}"
     )
     remove_hosts = []
     for host, host_cache in self.harvester_cache.items():
         remove_peers = []
         for peer_id, peer_cache in host_cache.items():
             # If the peer cache is expired it means the harvester didn't respond for too long
             if peer_cache.expired():
                 remove_peers.append(peer_id)
         for key in remove_peers:
             del host_cache[key]
         if len(host_cache) == 0:
             self.log.debug(f"update_cached_harvesters remove host: {host}")
             remove_hosts.append(host)
     for key in remove_hosts:
         del self.harvester_cache[key]
     # Now query each harvester and update caches
     updated = False
     for connection in self.server.get_connections(NodeType.HARVESTER):
         cache_entry = await self.get_cached_harvesters(connection)
         if cache_entry.needs_update():
             self.log.debug(
                 f"update_cached_harvesters update harvester: {connection.peer_node_id}"
             )
             cache_entry.bump_last_update()
             response = await connection.request_plots(
                 harvester_protocol.RequestPlots(),
                 timeout=UPDATE_HARVESTER_CACHE_INTERVAL)
             if response is not None:
                 if isinstance(response, harvester_protocol.RespondPlots):
                     new_data: Dict = response.to_json_dict()
                     if cache_entry.data != new_data:
                         updated = True
                         self.log.debug(
                             f"update_cached_harvesters cache updated: {connection.peer_node_id}"
                         )
                     else:
                         self.log.debug(
                             f"update_cached_harvesters no changes for: {connection.peer_node_id}"
                         )
                     cache_entry.set_data(new_data)
                 else:
                     self.log.error(
                         f"Invalid response from harvester:"
                         f"peer_host {connection.peer_host}, peer_node_id {connection.peer_node_id}"
                     )
             else:
                 self.log.error(
                     "Harvester did not respond. You might need to update harvester to the latest version"
                 )
     return updated
예제 #2
0
 async def get_plots(self) -> Dict:
     rpc_response = {}
     for connection in self.server.get_connections():
         if connection.connection_type == NodeType.HARVESTER:
             peer_host = connection.peer_host
             peer_port = connection.peer_port
             peer_full = f"{peer_host}:{peer_port}"
             response = await connection.request_plots(
                 harvester_protocol.RequestPlots(), timeout=5)
             if response is None:
                 self.log.error(
                     "Harvester did not respond. You might need to update harvester to the latest version"
                 )
                 continue
             if not isinstance(response, harvester_protocol.RespondPlots):
                 self.log.error(
                     f"Invalid response from harvester: {peer_host}:{peer_port}"
                 )
                 continue
             rpc_response[peer_full] = response.to_json_dict()
     return rpc_response
        bytes.fromhex(
            "a04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c"
        ), ),
    bytes32(
        bytes.fromhex(
            "1c96d26def7be696f12e7ebb91d50211e6217ce5d9087c9cd1b84782d5d4b237")
    ),
    G1Element(
        bytes.fromhex(
            "a04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c"
        ), ),
    uint64(3368414292564311420),
    uint64(2573238947935295522),
)

request_plots = harvester_protocol.RequestPlots()

respond_plots = harvester_protocol.RespondPlots(
    [plot],
    ["str"],
    ["str"],
)

### INTRODUCER PROTOCOL
request_peers_introducer = introducer_protocol.RequestPeersIntroducer()

respond_peers_introducer = introducer_protocol.RespondPeersIntroducer([
    TimestampedPeerInfo(
        "127.0.0.1",
        uint16(49878),
        uint64(15079028934557257795),