From 5418deb7aca08f372fe033526246ccc027b2774d Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Fri, 27 Feb 2026 10:18:17 +0000 Subject: [PATCH] feat: use logos.dev fleet --- src/chat/delivery/waku_client.nim | 68 +++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/src/chat/delivery/waku_client.nim b/src/chat/delivery/waku_client.nim index 70f59a2..84a49b0 100644 --- a/src/chat/delivery/waku_client.nim +++ b/src/chat/delivery/waku_client.nim @@ -2,7 +2,7 @@ import chronicles, chronos, confutils, - eth/p2p/discoveryv5/enr, + eth/p2p/discoveryv5/enr as eth_enr, libp2p/crypto/crypto, libp2p/peerid, std/random, @@ -10,6 +10,7 @@ import strformat, waku/[ common/logging, + common/enr as common_enr, node/peer_manager, waku_core, waku_node, @@ -40,6 +41,24 @@ const # Placeholder FilterContentTopic = ContentTopic("/chatsdk/test/proto") + # Logos.dev Fleet ENRs + LogosDevDelivery01DoAms3 = "enr:-MG4QNjpXNETi50MXYSQNZyzd7YVi5UDmy53GjC7i9y1rmuRWd_rGhizRXV4YKLrb8G_ezIrE1gVkiuY_GzFGk6lfikBgmlkgnY0gmlwhIpEeomKbXVsdGlhZGRyc4wACgSKRHqJBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhA9w1_W3QN9zZw8FcFQT5XWJ7I_qBGXFCxeO5iOBgeWXkg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv" + LogosDevDelivery02DoAms3 = "enr:-MG4QO7X4HJ8BfAkbSbtG4uDvX1t4HIjEMTbdh4aYR4EV00cMrpa1NYejjVIGD0SXJGqbrRs2YYf59Me9K92iyyi_X4BgmlkgnY0gmlwhK6KavSKbXVsdGlhZGRyc4wACgSuimr0Bh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhA4ChhnJvGLCZgYfCAn6zGi0_lump80dOnTXuwEdMqnveg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv" + LogosDevDelivery01GcUsCentral1a = "enr:-MG4QIiRL2QYsAMJuofnJ2ketbMf_vq448kZxa0DGzu_Wj8PW7YdeIFEJbEJapA2K-b_UMC-TdEaQ2LukC9ynyegRQ4BgmlkgnY0gmlwhIh3nFeKbXVsdGlhZGRyc4wACgSId5xXBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAoXPCAUveBrCoOScJxl_jdLrPu4xyzbCmwP_ovGsqNkGg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv" + LogosDevDelivery02GcUsCentral1a = "enr:-MG4QJ2n_Hkl0_ZaGxK4ye_lmXPCHi8qXISESIucQyrPd0oCOFXZf9ws5gjN3hovMw08GTJSAptX2q0GrrjQS9wOpb8BgmlkgnY0gmlwhCJ7yRmKbXVsdGlhZGRyc4wACgQie8kZBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAsLQ0aIXN3XPEkZiqfPGU8aQp-Q8Vx8GoEipJx-uf4Dig3RjcIJ2X4N1ZHCCIyiFd2FrdTIv" + LogosDevDelivery01AcCnHongkongC = "enr:-MG4QFQc9ULfGsloUceZk2i1XiFDuZ4zDoMWIkfOrQQ2rlW_ZLIN7CAzw67W7oGSQ4-sJ3Ehat6-tKxJ3Vj428TlWyABgmlkgnY0gmlwhC_ygr2KbXVsdGlhZGRyc4wACgQv8oK9Bh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAsL7yU6Z4_I47DAMN8zTlJxl1DF0GVeBtFXj8uQM5vpog3RjcIJ2X4N1ZHCCIyiFd2FrdTIv" + LogosDevDelivery02AcCnHongkongC = "enr:-MG4QDnRm93660fPMd0MAwhYIYS1I6YzNI8lYGZP-IoDy6NYSsmgE-m4aIThWuiveMquo8uZz7f4-jpxjYM48kuZONgBgmlkgnY0gmlwhCtjZwqKbXVsdGlhZGRyc4wACgQrY2cKBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAhaMkDdziqKJqwaxdMWwq9A21gF7Wp5eCfDA6VmJkccDg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv" + + # Logos.dev fleet static peers + LogosDevStaticPeers* = @[ + LogosDevDelivery01DoAms3, + LogosDevDelivery02DoAms3, + LogosDevDelivery01GcUsCentral1a, + LogosDevDelivery02GcUsCentral1a, + LogosDevDelivery01AcCnHongkongC, + LogosDevDelivery02AcCnHongkongC, + ] + type QueueRef* = ref object queue*: AsyncQueue[ChatPayload] @@ -58,18 +77,18 @@ type cfg*: WakuConfig node*: WakuNode dispatchQueues: seq[QueueRef] - staticPeerList: seq[string] + staticPeerList: seq[RemotePeerInfo] proc DefaultConfig*(): WakuConfig = let nodeKey = crypto.PrivateKey.random(Secp256k1, crypto.newRng()[])[] - let clusterId = 42'u16 - let shardId = 2'u16 + let clusterId = 2'u16 + let shardId = 1'u16 var port: uint16 = 50000'u16 + uint16(rand(200)) result = WakuConfig(nodeKey: nodeKey, port: port, clusterId: clusterId, shardId: @[shardId], pubsubTopic: &"/waku/2/rs/{clusterId}/{shardId}", - staticPeers: @[]) + staticPeers: LogosDevStaticPeers) proc sendBytes*(client: WakuClient, contentTopic: string, @@ -116,19 +135,17 @@ proc buildWakuNode(cfg: WakuConfig): WakuNode = proc taskKeepAlive(client: WakuClient) {.async.} = while true: - for peerStr in client.staticPeerList: - let peer = parsePeerInfo(peerStr).get() - - debug "maintaining subscription", peer = peerStr + for peerInfo in client.staticPeerList: + debug "maintaining subscription", peerId = $peerInfo.peerId # First use filter-ping to check if we have an active subscription - let pingRes = await client.node.wakuFilterClient.ping(peer) + let pingRes = await client.node.wakuFilterClient.ping(peerInfo) if pingRes.isErr(): # No subscription found. Let's subscribe. warn "no subscription found. Sending subscribe request" # TODO: Use filter. Removing this stops relay from working so keeping for now let subscribeRes = await client.node.wakuFilterClient.subscribe( - peer, client.cfg.pubsubTopic, @[FilterContentTopic] + peerInfo, client.cfg.pubsubTopic, @[FilterContentTopic] ) if subscribeRes.isErr(): @@ -153,16 +170,12 @@ proc start*(client: WakuClient) {.async.} = client.node.peerManager.start() - let dnsDiscoveryUrl = "enrtree://AKHMR2NCDFW5GI7TQIET3Y4SOKAZPDOMIHQACRKNILMGUBER4XW6K@logos-chat.nodes.status.im" - let nameServer = parseIpAddress("1.1.1.1") - let discoveredPeers = await retrieveDynamicBootstrapNodes(dnsDiscoveryUrl, @[nameServer]) - if discoveredPeers.isOk: - info "Connecting to discovered peers" - let remotePeers = discoveredPeers.get() - info "Discovered and connecting to peers", peerCount = remotePeers.len - asyncSpawn client.node.connectToNodes(remotePeers) + # Connect to all configured static peers + if client.staticPeerList.len > 0: + info "Connecting to static peers", peerCount = client.staticPeerList.len + asyncSpawn client.node.connectToNodes(client.staticPeerList) else: - warn "Failed to find peers via DNS discovery", error = discoveredPeers.error + warn "No valid static peers configured" let subscription: SubscriptionEvent = (kind: PubsubSub, topic: client.cfg.pubsubTopic) @@ -185,8 +198,21 @@ proc start*(client: WakuClient) {.async.} = await allFutures(taskKeepAlive(client)) proc initWakuClient*(cfg: WakuConfig): WakuClient = + # Parse ENRs from static peers configuration + var peerInfos: seq[RemotePeerInfo] = @[] + for enrStr in cfg.staticPeers: + let enrRecord = eth_enr.Record.fromURI(enrStr).valueOr: + error "Failed to parse ENR in initWakuClient", enr = enrStr, err = error + continue + + let peerInfo = enrRecord.toRemotePeerInfo().valueOr: + error "Failed to convert ENR to PeerInfo in initWakuClient", enr = enrStr, err = error + continue + + peerInfos.add(peerInfo) + result = WakuClient(cfg: cfg, node: buildWakuNode(cfg), dispatchQueues: @[], - staticPeerList: cfg.staticPeers) + staticPeerList: peerInfos) proc addDispatchQueue*(client: var WakuClient, queue: QueueRef) = client.dispatchQueues.add(queue)