12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import time
- from argparse import ArgumentParser
- from hivemind.dht import DHT, DHTNode
- from hivemind.utils.logging import get_logger, use_hivemind_log_handler
- from hivemind.utils.networking import log_visible_maddrs
- use_hivemind_log_handler("in_root_logger")
- logger = get_logger(__name__)
- async def report_status(dht: DHT, node: DHTNode):
- logger.info(
- f"{len(node.protocol.routing_table.uid_to_peer_id) + 1} DHT nodes (including this one) "
- f"are in the local routing table "
- )
- logger.debug(f"Routing table contents: {node.protocol.routing_table}")
- logger.info(f"Local storage contains {len(node.protocol.storage)} keys")
- logger.debug(f"Local storage contents: {node.protocol.storage}")
- def main():
- parser = ArgumentParser()
- parser.add_argument(
- "--initial_peers",
- nargs="*",
- help="Multiaddrs of the peers that will welcome you into the existing DHT. "
- "Example: /ip4/203.0.113.1/tcp/31337/p2p/XXXX /ip4/203.0.113.2/tcp/7777/p2p/YYYY",
- )
- parser.add_argument(
- "--host_maddrs",
- nargs="*",
- default=["/ip4/0.0.0.0/tcp/0"],
- help="Multiaddrs to listen for external connections from other DHT instances. "
- "Defaults to all IPv4 interfaces and the TCP protocol: /ip4/0.0.0.0/tcp/0",
- )
- parser.add_argument(
- "--announce_maddrs",
- nargs="*",
- help="Visible multiaddrs the host announces for external connections from other DHT instances",
- )
- parser.add_argument(
- "--use_ipfs",
- action="store_true",
- help='Use IPFS to find initial_peers. If enabled, you only need to provide the "/p2p/XXXX" '
- "part of the multiaddrs for the initial_peers "
- "(no need to specify a particular IPv4/IPv6 host and port)",
- )
- parser.add_argument(
- "--identity_path",
- help="Path to a private key file. If defined, makes the peer ID deterministic. "
- "If the file does not exist, writes a new private key to this file.",
- )
- parser.add_argument(
- "--refresh_period", type=int, default=30, help="Period (in seconds) for fetching the keys from DHT"
- )
- args = parser.parse_args()
- dht = DHT(
- start=True,
- initial_peers=args.initial_peers,
- host_maddrs=args.host_maddrs,
- announce_maddrs=args.announce_maddrs,
- use_ipfs=args.use_ipfs,
- identity_path=args.identity_path,
- )
- log_visible_maddrs(dht.get_visible_maddrs(), only_p2p=args.use_ipfs)
- while True:
- dht.run_coroutine(report_status, return_future=False)
- time.sleep(args.refresh_period)
- if __name__ == "__main__":
- main()
|