import chronos, nimcrypto, strutils import ../../libp2p/daemon/daemonapi import ../hexdump const PubSubTopic = "test-net" proc dumpSubscribedPeers(api: DaemonAPI) {.async.} = var peers = await api.pubsubListPeers(PubSubTopic) echo "= List of connected and subscribed peers:" for item in peers: echo item.pretty() proc dumpAllPeers(api: DaemonAPI) {.async.} = var peers = await api.listPeers() echo "Current connected peers count = ", len(peers) for item in peers: echo item.peer.pretty() proc monitor(api: DaemonAPI) {.async.} = while true: echo "Dumping all peers" await dumpAllPeers(api) await sleepAsync(5000) proc main() {.async.} = echo "= Starting P2P bootnode" var api = await newDaemonApi({DHTFull, PSGossipSub}) var id = await api.identity() echo "= P2P bootnode ", id.peer.pretty(), " started." let mcip4 = multiCodec("ip4") let mcip6 = multiCodec("ip6") echo "= You can use one of this addresses to bootstrap your nodes:" for item in id.addresses: if item.protoCode() == mcip4 or item.protoCode() == mcip6: echo $item & "/ipfs/" & id.peer.pretty() asyncSpawn monitor(api) proc pubsubLogger( api: DaemonAPI, ticket: PubsubTicket, message: PubSubMessage ): Future[bool] {.async.} = let msglen = len(message.data) echo "= Recieved pubsub message with length ", msglen, " bytes from peer ", message.peer.pretty() echo dumpHex(message.data) await api.dumpSubscribedPeers() result = true var ticket = await api.pubsubSubscribe(PubSubTopic, pubsubLogger) when isMainModule: waitFor(main()) while true: poll()