diff --git a/.gitmodules b/.gitmodules index 45137a686..c3f337a53 100644 --- a/.gitmodules +++ b/.gitmodules @@ -151,4 +151,5 @@ [submodule "vendor/zerokit"] path = vendor/zerokit url = https://github.com/vacp2p/zerokit.git + ignore = dirty branch = master diff --git a/apps/wakubridge/wakubridge.nim b/apps/wakubridge/wakubridge.nim index 69fd65653..abac1b608 100644 --- a/apps/wakubridge/wakubridge.nim +++ b/apps/wakubridge/wakubridge.nim @@ -236,7 +236,7 @@ proc new*(T: type WakuBridge, # Setup Waku v1 node var nodev1 = newEthereumNode(keys = nodev1Key, address = nodev1Address, - networkId = NetworkId(1), chain = nil, clientId = ClientIdV1, + networkId = NetworkId(1), clientId = ClientIdV1, addAllCapabilities = false, bindUdpPort = nodev1Address.udpPort, bindTcpPort = nodev1Address.tcpPort, rng = rng) nodev1.addCapability Waku # Always enable Waku protocol diff --git a/examples/v1/example.nim b/examples/v1/example.nim index f82e3ebe8..ebb83f7e2 100644 --- a/examples/v1/example.nim +++ b/examples/v1/example.nim @@ -30,7 +30,6 @@ proc run(config: WakuNodeConf, rng: ref HmacDrbgContext) = var node = newEthereumNode(config.nodekey, # Node identifier address, # Address reachable for incoming requests NetworkId(1), # Network Id, only applicable for ETH protocol - nil, # Database, not required for Waku clientId, # Client id string addAllCapabilities = false, # Disable default all RLPx capabilities bindUdpPort = address.udpPort, # Assume same as external diff --git a/tests/test_helpers.nim b/tests/test_helpers.nim index aa5492ea8..a4d2fd286 100644 --- a/tests/test_helpers.nim +++ b/tests/test_helpers.nim @@ -17,7 +17,7 @@ proc setupTestNode*( let keys1 = keys.KeyPair.random(rng[]) address = localAddress(nextPort) - result = newEthereumNode(keys1, address, NetworkId(1), nil, + result = newEthereumNode(keys1, address, NetworkId(1), addAllCapabilities = false, bindUdpPort = address.udpPort, # Assume same as external bindTcpPort = address.tcpPort, # Assume same as external diff --git a/tests/v1/test_rpc_waku.nim b/tests/v1/test_rpc_waku.nim index cae2e6021..b535adfb7 100644 --- a/tests/v1/test_rpc_waku.nim +++ b/tests/v1/test_rpc_waku.nim @@ -20,7 +20,7 @@ proc setupNode(capabilities: varargs[ProtocolInfo, `protocolInfo`], srvAddress = Address(ip: parseIpAddress("0.0.0.0"), tcpPort: Port(30303), udpPort: Port(30303)) - result = newEthereumNode(keypair, srvAddress, NetworkId(1), nil, "waku test rpc", + result = newEthereumNode(keypair, srvAddress, NetworkId(1), "waku test rpc", addAllCapabilities = false, bindUdpPort = srvAddress.udpPort, bindTcpPort = srvAddress.tcpPort, rng = rng) for capability in capabilities: result.addCapability capability diff --git a/tests/v1/test_waku_mail.nim b/tests/v1/test_waku_mail.nim index e53c6b850..3119ba236 100644 --- a/tests/v1/test_waku_mail.nim +++ b/tests/v1/test_waku_mail.nim @@ -46,7 +46,7 @@ procSuite "Waku Mail Client": # Simple mailserver part let peer = simpleServer.peerPool.connectedNodes[clientNode] - var f = peer.nextMsg(Waku.p2pRequest) + var f: Future[Waku.p2pRequest] = peer.nextMsg(Waku.p2pRequest) require await f.withTimeout(transmissionTimeout) let response = f.read() let decoded = decode(response.envelope.data, symKey = some(symKey)) diff --git a/tests/v2/test_rest_debug_api.nim b/tests/v2/test_rest_debug_api.nim index d4f9810d2..a671be122 100644 --- a/tests/v2/test_rest_debug_api.nim +++ b/tests/v2/test_rest_debug_api.nim @@ -4,8 +4,8 @@ import stew/shims/net, chronicles, testutils/unittests, - presto, - libp2p/peerid, + presto, presto/client as presto_client, + libp2p/peerinfo, libp2p/multiaddress, libp2p/crypto/crypto import @@ -46,7 +46,7 @@ suite "REST API - Debug": # Then check: response.status == 200 - response.contentType == $MIMETYPE_JSON + $response.contentType == $MIMETYPE_JSON response.data.listenAddresses == @[$node.switch.peerInfo.addrs[^1] & "/p2p/" & $node.switch.peerInfo.peerId] await restServer.stop() diff --git a/tests/v2/test_rest_relay_api.nim b/tests/v2/test_rest_relay_api.nim index 07c3138e6..351a3372b 100644 --- a/tests/v2/test_rest_relay_api.nim +++ b/tests/v2/test_rest_relay_api.nim @@ -6,7 +6,7 @@ import stew/shims/net, chronicles, testutils/unittests, - presto, + presto, presto/client as presto_client, libp2p/crypto/crypto, libp2p/protocols/pubsub/pubsub import @@ -59,7 +59,7 @@ suite "REST API - Relay": # Then check: response.status == 200 - response.contentType == $MIMETYPE_TEXT + $response.contentType == $MIMETYPE_TEXT response.data == "OK" check: @@ -109,7 +109,7 @@ suite "REST API - Relay": # Then check: response.status == 200 - response.contentType == $MIMETYPE_TEXT + $response.contentType == $MIMETYPE_TEXT response.data == "OK" check: @@ -156,7 +156,7 @@ suite "REST API - Relay": # Then check: response.status == 200 - response.contentType == $MIMETYPE_JSON + $response.contentType == $MIMETYPE_JSON response.data.len == 3 response.data.all do (msg: RelayWakuMessage) -> bool: msg.payload == Base64String.encode("TEST-1") and @@ -214,7 +214,7 @@ suite "REST API - Relay": # Then check: response.status == 200 - response.contentType == $MIMETYPE_TEXT + $response.contentType == $MIMETYPE_TEXT response.data == "OK" # TODO: Check for the message to be published to the topic diff --git a/tests/v2/test_wakunode.nim b/tests/v2/test_wakunode.nim index ca71e7002..41ede0d62 100644 --- a/tests/v2/test_wakunode.nim +++ b/tests/v2/test_wakunode.nim @@ -170,8 +170,10 @@ procSuite "WakuNode": check: # Check that underlying peer info contains only bindIp before starting - node.switch.peerInfo.addrs.len == 1 - node.switch.peerInfo.addrs.contains(bindEndpoint) + node.switch.peerInfo.listenAddrs.len == 1 + node.switch.peerInfo.listenAddrs.contains(bindEndpoint) + # Underlying peer info has not updated addrs before starting + node.switch.peerInfo.addrs.len == 0 node.announcedAddresses.len == 1 node.announcedAddresses.contains(announcedEndpoint) @@ -179,8 +181,11 @@ procSuite "WakuNode": await node.start() check: - # Check that underlying peer info is updated with announced address node.started + # Underlying peer info listenAddrs has not changed + node.switch.peerInfo.listenAddrs.len == 1 + node.switch.peerInfo.listenAddrs.contains(bindEndpoint) + # Check that underlying peer info is updated with announced address node.switch.peerInfo.addrs.len == 1 node.switch.peerInfo.addrs.contains(announcedEndpoint) diff --git a/tests/v2/test_wakunode_relay.nim b/tests/v2/test_wakunode_relay.nim index eb1a6ce7b..11ddcde9e 100644 --- a/tests/v2/test_wakunode_relay.nim +++ b/tests/v2/test_wakunode_relay.nim @@ -318,7 +318,7 @@ procSuite "WakuNode - Relay": #delete websocket peer address # TODO: a better way to find the index - this is too brittle - node2.switch.peerInfo.addrs.delete(0) + node2.switch.peerInfo.listenAddrs.delete(0) await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()]) diff --git a/tools/simulation/start_network2.nim b/tools/simulation/start_network2.nim index 9958cd29f..905ccb804 100644 --- a/tools/simulation/start_network2.nim +++ b/tools/simulation/start_network2.nim @@ -78,11 +78,11 @@ proc initNodeCmd(shift: int, staticNodes: seq[string] = @[], master = false, lab info "Address", address # TODO: Need to port shift - peerInfo.addrs.add(hostAddress) + peerInfo.listenAddrs.add(hostAddress) let id = $peerInfo.peerId - info "PeerInfo", id = id, addrs = peerInfo.addrs - let listenStr = $peerInfo.addrs[0] & "/p2p/" & id + info "PeerInfo", id = id, addrs = peerInfo.listenAddrs + let listenStr = $peerInfo.listenAddrs[0] & "/p2p/" & id result.cmd = wakuNodeBin & " " & defaults & " " result.cmd &= "--nodekey:" & hkey & " " diff --git a/vendor/dnsclient.nim b/vendor/dnsclient.nim index 4960de2b3..fcd744363 160000 --- a/vendor/dnsclient.nim +++ b/vendor/dnsclient.nim @@ -1 +1 @@ -Subproject commit 4960de2b345f567b12f09a08e9967af104ab39a3 +Subproject commit fcd7443634b950eaea574e5eaa00a628ae029823 diff --git a/vendor/nim-chronos b/vendor/nim-chronos index 1334cdfeb..266e2c0ed 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit 1334cdfebdc6182ff752e7d20796d9936cc8faa3 +Subproject commit 266e2c0ed26b455872bccb3ddbd316815a283659 diff --git a/vendor/nim-confutils b/vendor/nim-confutils index 40c6f0b37..a26bfab7e 160000 --- a/vendor/nim-confutils +++ b/vendor/nim-confutils @@ -1 +1 @@ -Subproject commit 40c6f0b378a34d4812e410e9d6762e21f059de4c +Subproject commit a26bfab7e5fb2f9fc018e5d778c169bc05772ee6 diff --git a/vendor/nim-eth b/vendor/nim-eth index b057057e6..43b29fdb1 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit b057057e64cc041d797e894a728963b10fbfac69 +Subproject commit 43b29fdb1a3c5e15167ce7a477ae447b1df3a8bb diff --git a/vendor/nim-faststreams b/vendor/nim-faststreams index 682b9c654..6112432b3 160000 --- a/vendor/nim-faststreams +++ b/vendor/nim-faststreams @@ -1 +1 @@ -Subproject commit 682b9c6541bbb82b09e415fbe9ef944570b62f76 +Subproject commit 6112432b3a81d9db116cd5d64c39648881cfff29 diff --git a/vendor/nim-json-rpc b/vendor/nim-json-rpc index 335f292a5..64dbf122d 160000 --- a/vendor/nim-json-rpc +++ b/vendor/nim-json-rpc @@ -1 +1 @@ -Subproject commit 335f292a5816910aebf215e3a88db8a665133e0e +Subproject commit 64dbf122d7457ceabdacfb26131e929f26f15581 diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index abbeaab68..a69301f39 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit abbeaab684c500f4c6ff5881797bb8f184b41ccc +Subproject commit a69301f39292c6bd012427e3a172a7687222fa89 diff --git a/vendor/nim-nat-traversal b/vendor/nim-nat-traversal index 48f94ebd1..27d314d65 160000 --- a/vendor/nim-nat-traversal +++ b/vendor/nim-nat-traversal @@ -1 +1 @@ -Subproject commit 48f94ebd194874d98da14a2494e89fc3a619a7ae +Subproject commit 27d314d65c9078924b3239fe4e2f5af0c512b28c diff --git a/vendor/nim-presto b/vendor/nim-presto index d298b0ba3..8bc34dd6f 160000 --- a/vendor/nim-presto +++ b/vendor/nim-presto @@ -1 +1 @@ -Subproject commit d298b0ba307023f2664757cee92ec94dde6acd18 +Subproject commit 8bc34dd6f60b6bfe22049323100355671e4137a2 diff --git a/vendor/nim-stew b/vendor/nim-stew index 018760954..f2e58ba4c 160000 --- a/vendor/nim-stew +++ b/vendor/nim-stew @@ -1 +1 @@ -Subproject commit 018760954a1530b7336aed7133393908875d860f +Subproject commit f2e58ba4c8da65548c824e4fa8732db9739f6505 diff --git a/vendor/nim-toml-serialization b/vendor/nim-toml-serialization index 1043942d3..4879c8893 160000 --- a/vendor/nim-toml-serialization +++ b/vendor/nim-toml-serialization @@ -1 +1 @@ -Subproject commit 1043942d3479ba931437b371834de0d19218e621 +Subproject commit 4879c8893c1d89495f088b9e2488417935d235d4 diff --git a/vendor/nim-web3 b/vendor/nim-web3 index 06ef3497d..78a9e5d09 160000 --- a/vendor/nim-web3 +++ b/vendor/nim-web3 @@ -1 +1 @@ -Subproject commit 06ef3497d4017f0f85edcadb6f743452566a2448 +Subproject commit 78a9e5d097c755e16ddbccbfc488e7117b04ec3b diff --git a/vendor/nim-websock b/vendor/nim-websock index af8779d9d..acbe30e9c 160000 --- a/vendor/nim-websock +++ b/vendor/nim-websock @@ -1 +1 @@ -Subproject commit af8779d9d95e488ec9fd2d584b6328bd506c702b +Subproject commit acbe30e9ca1e51dcbbfe4c552ee6f16c7eede538 diff --git a/vendor/nimbus-build-system b/vendor/nimbus-build-system index 07e37730c..dc535cd46 160000 --- a/vendor/nimbus-build-system +++ b/vendor/nimbus-build-system @@ -1 +1 @@ -Subproject commit 07e37730c627c19848e8662352976afe7e15bb1f +Subproject commit dc535cd4627e6c1ec023ee6d6d0c3e5d66d414e5 diff --git a/vendor/rln b/vendor/rln index 7ac74183f..cb615731d 160000 --- a/vendor/rln +++ b/vendor/rln @@ -1 +1 @@ -Subproject commit 7ac74183f8b69b399e3bc96c1ae8ab61c026dc43 +Subproject commit cb615731d7b04fb7882845db95474cf11700cc02 diff --git a/waku/v1/node/wakunode1.nim b/waku/v1/node/wakunode1.nim index c831f559a..9f212fd31 100644 --- a/waku/v1/node/wakunode1.nim +++ b/waku/v1/node/wakunode1.nim @@ -39,7 +39,7 @@ proc run(config: WakuNodeConf, rng: ref HmacDrbgContext) else: @[] # Set-up node - var node = newEthereumNode(config.nodekey, address, NetworkId(1), nil, clientId, + var node = newEthereumNode(config.nodekey, address, NetworkId(1), clientId, addAllCapabilities = false, bootstrapNodes = bootnodes, bindUdpPort = address.udpPort, bindTcpPort = address.tcpPort, rng = rng) if not config.bootnodeOnly: node.addCapability Waku # Always enable Waku protocol diff --git a/waku/v1/protocol/waku_mail.nim b/waku/v1/protocol/waku_mail.nim index 3bad0d2b4..40358db60 100644 --- a/waku/v1/protocol/waku_mail.nim +++ b/waku/v1/protocol/waku_mail.nim @@ -62,7 +62,7 @@ proc requestMail*(node: EthereumNode, peerId: NodeId, request: MailRequest, traceAsyncErrors peer.get().p2pRequest(env) # Wait for the Request Complete packet - var f = peer.get().nextMsg(Waku.p2pRequestComplete) + var f: Future[Waku.p2pRequestComplete] = peer.get().nextMsg(Waku.p2pRequestComplete) if await f.withTimeout(requestCompleteTimeout): let response = f.read() # TODO: I guess the idea is to check requestId (Hash) also? diff --git a/waku/v2/node/jsonrpc/admin_api.nim b/waku/v2/node/jsonrpc/admin_api.nim index 89d1a8cdb..982534c87 100644 --- a/waku/v2/node/jsonrpc/admin_api.nim +++ b/waku/v2/node/jsonrpc/admin_api.nim @@ -27,7 +27,7 @@ proc constructMultiaddrStr*(wireaddr: MultiAddress, peerId: PeerId): string = proc constructMultiaddrStr*(peerInfo: PeerInfo): string = # Constructs a multiaddress with both location (wire) address and p2p identity - constructMultiaddrStr(peerInfo.addrs[0], peerInfo.peerId) + constructMultiaddrStr(peerInfo.listenAddrs[0], peerInfo.peerId) proc constructMultiaddrStr*(remotePeerInfo: RemotePeerInfo): string = # Constructs a multiaddress with both location (wire) address and p2p identity diff --git a/waku/v2/node/rest/debug/debug_api.nim b/waku/v2/node/rest/debug/debug_api.nim index 3810feb43..cda28c595 100644 --- a/waku/v2/node/rest/debug/debug_api.nim +++ b/waku/v2/node/rest/debug/debug_api.nim @@ -33,8 +33,8 @@ proc installDebugApiHandlers*(router: var RestRouter, node: WakuNode) = #### Client -proc decodeBytes*(t: typedesc[DebugWakuInfo], data: openArray[byte], contentType: string): RestResult[DebugWakuInfo] = - if MediaType.init(contentType) != MIMETYPE_JSON: +proc decodeBytes*(t: typedesc[DebugWakuInfo], data: openArray[byte], contentType: Opt[ContentTypeData]): RestResult[DebugWakuInfo] = + if MediaType.init($contentType) != MIMETYPE_JSON: error "Unsupported respose contentType value", contentType = contentType return err("Unsupported response contentType") diff --git a/waku/v2/node/rest/relay/relay_api.nim b/waku/v2/node/rest/relay/relay_api.nim index 3c81d862f..4c94455c3 100644 --- a/waku/v2/node/rest/relay/relay_api.nim +++ b/waku/v2/node/rest/relay/relay_api.nim @@ -163,8 +163,8 @@ proc encodeBytes*(value: seq[PubSubTopicString], return ok(encoded) proc decodeBytes*(t: typedesc[string], value: openarray[byte], - contentType: string): RestResult[string] = - if MediaType.init(contentType) != MIMETYPE_TEXT: + contentType: Opt[ContentTypeData]): RestResult[string] = + if MediaType.init($contentType) != MIMETYPE_TEXT: error "Unsupported contentType value", contentType = contentType return err("Unsupported contentType") @@ -181,8 +181,8 @@ proc relayPostSubscriptionsV1*(body: RelayPostSubscriptionsRequest): RestRespons proc relayDeleteSubscriptionsV1*(body: RelayDeleteSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodDelete.} -proc decodeBytes*(t: typedesc[RelayGetMessagesResponse], data: openArray[byte], contentType: string): RestResult[RelayGetMessagesResponse] = - if MediaType.init(contentType) != MIMETYPE_JSON: +proc decodeBytes*(t: typedesc[RelayGetMessagesResponse], data: openArray[byte], contentType: Opt[ContentTypeData]): RestResult[RelayGetMessagesResponse] = + if MediaType.init($contentType) != MIMETYPE_JSON: error "Unsupported respose contentType value", contentType = contentType return err("Unsupported response contentType") diff --git a/waku/v2/node/waku_node.nim b/waku/v2/node/waku_node.nim index 93cfc817d..1c9e0c3c6 100644 --- a/waku/v2/node/waku_node.nim +++ b/waku/v2/node/waku_node.nim @@ -96,22 +96,6 @@ proc protocolMatcher(codec: string): Matcher = return match -proc updateSwitchPeerInfo(node: WakuNode) = - ## TODO: remove this when supported upstream - ## - ## nim-libp2p does not yet support announcing addrs - ## different from bound addrs. - ## - ## This is a temporary workaround to replace - ## peer info addrs in switch to announced - ## addresses. - ## - ## WARNING: this should only be called once the switch - ## has already been started. - - if node.announcedAddresses.len > 0: - node.switch.peerInfo.addrs = node.announcedAddresses - template ip4TcpEndPoint(address, port): MultiAddress = MultiAddress.init(address, tcpProtocol, port) @@ -807,10 +791,6 @@ proc start*(node: WakuNode) {.async.} = waku_version.set(1, labelValues=[git_version]) - ## NB: careful when moving this. We need to start the switch with the bind address - ## BEFORE updating with announced addresses for the sake of identify. - await node.switch.start() - let peerInfo = node.switch.peerInfo info "PeerInfo", peerId = peerInfo.peerId, addrs = peerInfo.addrs var listenStr = "" @@ -826,8 +806,15 @@ proc start*(node: WakuNode) {.async.} = if not node.wakuRelay.isNil(): await node.startRelay() - ## Update switch peer info with announced addrs - node.updateSwitchPeerInfo() + ## The switch uses this mapper to update peer info addrs + ## with announced addrs after start + let addressMapper = + proc (listenAddrs: seq[MultiAddress]): Future[seq[MultiAddress]] {.async.} = + return node.announcedAddresses + node.switch.peerInfo.addressMappers.add(addressMapper) + + ## The switch will update addresses after start using the addressMapper + await node.switch.start() node.started = true diff --git a/waku/v2/node/wakuswitch.nim b/waku/v2/node/wakuswitch.nim index 682810303..17d78281b 100644 --- a/waku/v2/node/wakuswitch.nim +++ b/waku/v2/node/wakuswitch.nim @@ -1,5 +1,9 @@ # Waku Switch utils. -{.push raises: [TLSStreamProtocolError, IOError, Defect].} +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + import std/options, chronos, chronicles, @@ -14,9 +18,10 @@ proc withWsTransport*(b: SwitchBuilder): SwitchBuilder = b.withTransport(proc(upgr: Upgrade): Transport = WsTransport.new(upgr)) proc getSecureKey(path : string): TLSPrivateKey - {.raises: [Defect,TLSStreamProtocolError, IOError].} = + {.raises: [Defect, IOError].} = + trace "Key path is.", path=path - var stringkey: string = readFile(path) + let stringkey: string = readFile(path) try: let key = TLSPrivateKey.init(stringkey) return key @@ -24,9 +29,10 @@ proc getSecureKey(path : string): TLSPrivateKey debug "exception raised from getSecureKey", msg=exc.msg proc getSecureCert(path : string): TLSCertificate - {.raises: [Defect,TLSStreamProtocolError, IOError].} = + {.raises: [Defect, IOError].} = + trace "Certificate path is.", path=path - var stringCert: string = readFile(path) + let stringCert: string = readFile(path) try: let cert = TLSCertificate.init(stringCert) return cert @@ -35,7 +41,9 @@ proc getSecureCert(path : string): TLSCertificate proc withWssTransport*(b: SwitchBuilder, secureKeyPath: string, - secureCertPath: string): SwitchBuilder = + secureCertPath: string): SwitchBuilder + {.raises: [Defect, IOError].} = + let key : TLSPrivateKey = getSecureKey(secureKeyPath) let cert : TLSCertificate = getSecureCert(secureCertPath) b.withTransport(proc(upgr: Upgrade): Transport = WsTransport.new(upgr, @@ -63,7 +71,7 @@ proc newWakuSwitch*( wssEnabled: bool = false, secureKeyPath: string = "", secureCertPath: string = ""): Switch - {.raises: [Defect,TLSStreamProtocolError,IOError, LPError].} = + {.raises: [Defect, IOError, LPError].} = var b = SwitchBuilder .new() diff --git a/waku/v2/protocol/waku_relay.nim b/waku/v2/protocol/waku_relay.nim index b9e9c12a8..73ee6d08a 100644 --- a/waku/v2/protocol/waku_relay.nim +++ b/waku/v2/protocol/waku_relay.nim @@ -2,7 +2,10 @@ ## ## See https://github.com/vacp2p/specs/blob/master/specs/waku/v2/waku-relay.md ## for spec. -{.push raises: [Defect].} +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} import std/[tables, sets], diff --git a/waku/v2/protocol/waku_store/client.nim b/waku/v2/protocol/waku_store/client.nim index a75522650..b10819156 100644 --- a/waku/v2/protocol/waku_store/client.nim +++ b/waku/v2/protocol/waku_store/client.nim @@ -98,11 +98,15 @@ proc queryLoop*(w: WakuStoreClient, req: HistoryQuery, peers: seq[RemotePeerInfo let messagesList = queryFuturesList .map(proc (fut: Future[WakuStoreResult[seq[WakuMessage]]]): seq[WakuMessage] = - # These futures have been awaited before using allFutures(). Call completed() just as a sanity check. - if not fut.completed() or fut.read().isErr(): - return @[] + try: + # fut.read() can raise a CatchableError + # These futures have been awaited before using allFutures(). Call completed() just as a sanity check. + if not fut.completed() or fut.read().isErr(): + return @[] - fut.read().value + fut.read().value + except CatchableError: + return @[] ) .concat() .deduplicate() diff --git a/waku/v2/protocol/waku_store/protocol.nim b/waku/v2/protocol/waku_store/protocol.nim index 0c6d67bef..b39993665 100644 --- a/waku/v2/protocol/waku_store/protocol.nim +++ b/waku/v2/protocol/waku_store/protocol.nim @@ -366,11 +366,15 @@ proc queryLoop(w: WakuStore, req: HistoryQuery, candidateList: seq[RemotePeerInf let messagesList = queriesList .map(proc (fut: Future[WakuStoreResult[seq[WakuMessage]]]): seq[WakuMessage] = - # These futures have been awaited before using allFutures(). Call completed() just as a sanity check. - if not fut.completed() or fut.read().isErr(): - return @[] + try: + # fut.read() can raise a CatchableError + # These futures have been awaited before using allFutures(). Call completed() just as a sanity check. + if not fut.completed() or fut.read().isErr(): + return @[] - fut.read().value + fut.read().value + except CatchableError: + return @[] ) .concat() .deduplicate() diff --git a/waku/v2/utils/peers.nim b/waku/v2/utils/peers.nim index c91b6222d..2ae8b68bd 100644 --- a/waku/v2/utils/peers.nim +++ b/waku/v2/utils/peers.nim @@ -163,6 +163,6 @@ proc toRemotePeerInfo*(peerRecord: PeerRecord): RemotePeerInfo = ## Useful for testing or internal connections proc toRemotePeerInfo*(peerInfo: PeerInfo): RemotePeerInfo = RemotePeerInfo.init(peerInfo.peerId, - peerInfo.addrs, + peerInfo.listenAddrs, none(enr.Record), # we could generate an ENR from PeerInfo peerInfo.protocols) diff --git a/waku/v2/utils/time.nim b/waku/v2/utils/time.nim index 117b7eeeb..704b6d1c7 100644 --- a/waku/v2/utils/time.nim +++ b/waku/v2/utils/time.nim @@ -34,6 +34,6 @@ template nanosecondTime*(collector: Gauge, body: untyped) = when defined(metrics): let start = nowInUnixFloat() body - collector.set(nowInUnixFloat() - start) + metrics.set(collector, nowInUnixFloat() - start) else: body \ No newline at end of file