|
30 | 30 | protobuf/minprotobuf, # message serialisation/deserialisation from and to protobufs |
31 | 31 | nameresolving/dnsresolver, |
32 | 32 | protocols/mix/curve25519, |
| 33 | + protocols/mix/mix_protocol, |
33 | 34 | ] # define DNS resolution |
34 | 35 | import |
35 | 36 | waku/[ |
|
38 | 39 | waku_lightpush/rpc, |
39 | 40 | waku_enr, |
40 | 41 | discovery/waku_dnsdisc, |
| 42 | + discovery/waku_kademlia, |
41 | 43 | waku_node, |
42 | 44 | node/waku_metrics, |
43 | 45 | node/peer_manager, |
@@ -453,14 +455,48 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = |
453 | 455 | (await node.mountMix(conf.clusterId, mixPrivKey, conf.mixnodes)).isOkOr: |
454 | 456 | error "failed to mount waku mix protocol: ", error = $error |
455 | 457 | quit(QuitFailure) |
456 | | - await node.mountRendezvousClient(conf.clusterId) |
| 458 | + |
| 459 | + # Setup extended kademlia discovery if bootstrap nodes are provided |
| 460 | + if conf.kadBootstrapNodes.len > 0: |
| 461 | + var kadBootstrapPeers: seq[(PeerId, seq[MultiAddress])] |
| 462 | + for nodeStr in conf.kadBootstrapNodes: |
| 463 | + let (peerId, ma) = parseFullAddress(nodeStr).valueOr: |
| 464 | + error "Failed to parse kademlia bootstrap node", node = nodeStr, error = error |
| 465 | + continue |
| 466 | + kadBootstrapPeers.add((peerId, @[ma])) |
| 467 | + |
| 468 | + if kadBootstrapPeers.len > 0: |
| 469 | + node.wakuKademlia = WakuKademlia.new( |
| 470 | + node.switch, |
| 471 | + ExtendedKademliaDiscoveryParams( |
| 472 | + bootstrapNodes: kadBootstrapPeers, |
| 473 | + mixPubKey: some(mixPubKey), |
| 474 | + advertiseMix: false, |
| 475 | + ), |
| 476 | + node.peerManager, |
| 477 | + getMixNodePoolSize = proc(): int {.gcsafe, raises: [].} = |
| 478 | + if node.wakuMix.isNil(): |
| 479 | + 0 |
| 480 | + else: |
| 481 | + node.getMixNodePoolSize(), |
| 482 | + isNodeStarted = proc(): bool {.gcsafe, raises: [].} = |
| 483 | + node.started, |
| 484 | + ).valueOr: |
| 485 | + error "failed to setup kademlia discovery", error = error |
| 486 | + quit(QuitFailure) |
| 487 | + |
| 488 | + #await node.mountRendezvousClient(conf.clusterId) |
457 | 489 |
|
458 | 490 | await node.start() |
459 | 491 |
|
460 | 492 | node.peerManager.start() |
| 493 | + if not node.wakuKademlia.isNil(): |
| 494 | + (await node.wakuKademlia.start(minMixPeers = MinMixNodePoolSize)).isOkOr: |
| 495 | + error "failed to start kademlia discovery", error = error |
| 496 | + quit(QuitFailure) |
461 | 497 |
|
462 | 498 | await node.mountLibp2pPing() |
463 | | - await node.mountPeerExchangeClient() |
| 499 | + #await node.mountPeerExchangeClient() |
464 | 500 | let pubsubTopic = conf.getPubsubTopic(node, conf.contentTopic) |
465 | 501 | echo "pubsub topic is: " & pubsubTopic |
466 | 502 | let nick = await readNick(transp) |
@@ -601,11 +637,6 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = |
601 | 637 | node, pubsubTopic, conf.contentTopic, servicePeerInfo, false |
602 | 638 | ) |
603 | 639 | echo "waiting for mix nodes to be discovered..." |
604 | | - while true: |
605 | | - if node.getMixNodePoolSize() >= MinMixNodePoolSize: |
606 | | - break |
607 | | - discard await node.fetchPeerExchangePeers() |
608 | | - await sleepAsync(1000) |
609 | 640 |
|
610 | 641 | while node.getMixNodePoolSize() < MinMixNodePoolSize: |
611 | 642 | info "waiting for mix nodes to be discovered", |
|
0 commit comments