diff --git a/apps/chat2mix/config_chat2mix.nim b/apps/chat2mix/config_chat2mix.nim index 1875beaa2..46cd481d7 100644 --- a/apps/chat2mix/config_chat2mix.nim +++ b/apps/chat2mix/config_chat2mix.nim @@ -209,7 +209,7 @@ type contentTopic* {. desc: "Content topic for chat messages.", - defaultValue: "/toy-chat-mix/2/huilong/proto", + defaultValue: "/toy-chat/2/baixa-chiado/proto", name: "content-topic" .}: string diff --git a/waku/discovery/waku_ext_kademlia.nim b/waku/discovery/waku_ext_kademlia.nim index 27eb503d2..f72c46fda 100644 --- a/waku/discovery/waku_ext_kademlia.nim +++ b/waku/discovery/waku_ext_kademlia.nim @@ -73,14 +73,18 @@ proc setupExtendedKademliaDiscovery*( proc extractMixPubKey(service: ServiceInfo): Option[Curve25519Key] = if service.id != MixProtocolID: - trace "service is not mix protocol", serviceId = service.id, mixProtocolId = MixProtocolID + trace "service is not mix protocol", + serviceId = service.id, mixProtocolId = MixProtocolID return none(Curve25519Key) - debug "found mix protocol service", dataLen = service.data.len, expectedLen = Curve25519KeySize + debug "found mix protocol service", + dataLen = service.data.len, expectedLen = Curve25519KeySize if service.data.len != Curve25519KeySize: warn "invalid mix pub key length from kademlia record", - expected = Curve25519KeySize, actual = service.data.len, dataHex = service.data.toHex() + expected = Curve25519KeySize, + actual = service.data.len, + dataHex = service.data.toHex() return none(Curve25519Key) let key = intoCurve25519Key(service.data) @@ -107,7 +111,8 @@ proc remotePeerInfoFrom(record: ExtendedPeerRecord): Option[RemotePeerInfo] = var mixPubKey = none(Curve25519Key) for service in record.services: - debug "checking service", peerId = record.peerId, serviceId = service.id, dataLen = service.data.len + debug "checking service", + peerId = record.peerId, serviceId = service.id, dataLen = service.data.len mixPubKey = extractMixPubKey(service) if mixPubKey.isSome(): debug "extracted mix public key from service", peerId = record.peerId @@ -115,8 +120,7 @@ proc remotePeerInfoFrom(record: ExtendedPeerRecord): Option[RemotePeerInfo] = if record.services.len > 0 and mixPubKey.isNone(): debug "record has services but no valid mix key", - peerId = record.peerId, - services = record.services.mapIt(it.id) + peerId = record.peerId, services = record.services.mapIt(it.id) some( RemotePeerInfo.init( @@ -133,44 +137,49 @@ proc runExtendedKademliaDiscoveryLoop*( ): Future[void] {.async.} = info "extended kademlia discovery loop started", interval = interval - while true: - if node.wakuKademlia.isNil(): - info "extended kademlia discovery loop stopping: protocol disabled" - return + try: + while true: + if node.wakuKademlia.isNil(): + info "extended kademlia discovery loop stopping: protocol disabled" + return - if not node.started: - await sleepAsync(ExtendedKademliaDiscoveryStartupDelay) - continue - - var records: seq[ExtendedPeerRecord] - try: - records = await node.wakuKademlia.randomRecords() - except CatchableError: - warn "extended kademlia discovery failed", error = getCurrentExceptionMsg() - await sleepAsync(interval) - continue - - debug "received random records from kademlia", numRecords = records.len - - var added = 0 - for record in records: - let peerOpt = remotePeerInfoFrom(record) - if peerOpt.isNone(): + if not node.started: + await sleepAsync(ExtendedKademliaDiscoveryStartupDelay) continue - let peerInfo = peerOpt.get() - node.peerManager.addPeer(peerInfo, PeerOrigin.Kademlia) - debug "peer added via extended kademlia discovery", - peerId = $peerInfo.peerId, - addresses = peerInfo.addrs.mapIt($it), - protocols = peerInfo.protocols, - hasMixPubKey = peerInfo.mixPubKey.isSome() - added.inc() + var records: seq[ExtendedPeerRecord] + try: + records = await node.wakuKademlia.randomRecords() + except CatchableError: + warn "extended kademlia discovery failed", error = getCurrentExceptionMsg() + await sleepAsync(interval) + continue - if added > 0: - info "added peers from extended kademlia discovery", count = added + debug "received random records from kademlia", numRecords = records.len - await sleepAsync(interval) + var added = 0 + for record in records: + let peerOpt = remotePeerInfoFrom(record) + if peerOpt.isNone(): + continue + + let peerInfo = peerOpt.get() + node.peerManager.addPeer(peerInfo, PeerOrigin.Kademlia) + debug "peer added via extended kademlia discovery", + peerId = $peerInfo.peerId, + addresses = peerInfo.addrs.mapIt($it), + protocols = peerInfo.protocols, + hasMixPubKey = peerInfo.mixPubKey.isSome() + added.inc() + + if added > 0: + info "added peers from extended kademlia discovery", count = added + + await sleepAsync(interval) + except CancelledError: + debug "extended kademlia discovery loop cancelled" + except CatchableError as e: + error "extended kademlia discovery loop failed", error = e.msg proc startExtendedKademliaDiscoveryLoop*( node: WakuNode, interval = DefaultExtendedKademliaDiscoveryInterval @@ -185,9 +194,7 @@ proc startExtendedKademliaDiscoveryLoop*( node.kademliaDiscoveryLoop = node.runExtendedKademliaDiscoveryLoop(interval) -proc lookupMixPeers*( - node: WakuNode -): Future[int] {.async.} = +proc lookupMixPeers*(node: WakuNode): Future[int] {.async.} = ## Lookup mix peers via kademlia and add them to the peer store. ## Returns the number of mix peers found and added. if node.wakuKademlia.isNil(): @@ -216,8 +223,7 @@ proc lookupMixPeers*( node.peerManager.addPeer(peerInfo, PeerOrigin.Kademlia) info "mix peer added via kademlia lookup", - peerId = $peerInfo.peerId, - mixPubKey = peerInfo.mixPubKey.get().toHex() + peerId = $peerInfo.peerId, mixPubKey = peerInfo.mixPubKey.get().toHex() added.inc() info "mix peer lookup complete", found = added