From 7f98fd1fe9af744039170bfe51d6a3f867c079e3 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Date: Wed, 20 May 2026 09:50:45 -0400 Subject: [PATCH] autonat & config default --- apps/chat2disco/chat2disco.nim | 26 +++++++++++- apps/chat2disco/config_chat2disco.nim | 57 +-------------------------- waku/node/waku_switch.nim | 10 +---- 3 files changed, 28 insertions(+), 65 deletions(-) diff --git a/apps/chat2disco/chat2disco.nim b/apps/chat2disco/chat2disco.nim index b97ae91d1..eca0f4fb5 100644 --- a/apps/chat2disco/chat2disco.nim +++ b/apps/chat2disco/chat2disco.nim @@ -28,12 +28,16 @@ import protobuf/minprotobuf, extended_peer_record, nameresolving/dnsresolver, + protocols/connectivity/relay/client, + services/autorelayservice, + services/hpservice, ] import waku/[ waku_core, waku_enr, discovery/waku_kademlia, + discovery/autonat_service, waku_node, node/waku_metrics, node/peer_manager, @@ -314,6 +318,8 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = error "failed to create enr record", error quit(QuitFailure) + let circuitRelay = RelayClient.new() + let node = block: var builder = WakuNodeBuilder.init() builder.withNodeKey(nodeKey) @@ -330,12 +336,30 @@ proc processInput(rfd: AsyncFD, rng: crypto.Rng) {.async.} = quit(QuitFailure) let nameResolver = - DnsResolver.new(conf.dnsAddrsNameServers.mapIt(initTAddress(it, Port(53)))) + DnsResolver.new(netConf.dnsNameServers.mapIt(initTAddress(it, Port(53)))) builder.withNetworkConfiguration(netConf) builder.withSwitchConfiguration(nameResolver = nameResolver) + builder.withCircuitRelay(circuitRelay) builder.build().tryGet() + proc onReservation(addresses: seq[MultiAddress]) {.gcsafe, raises: [].} = + info "circuit relay handler new reserve event", + addrs_before = $(node.announcedAddresses), addrs = $addresses + + node.announcedAddresses.setLen(0) ## remove previous addresses + node.announcedAddresses.add(addresses) + + info "chat2disco node announced addresses updated", + announcedAddresses = node.announcedAddresses + + let + autonatService = getAutonatService(rng) + autoRelayService = AutoRelayService.new(2, circuitRelay, onReservation, rng) + holePunchService = HPService.new(autonatService, autoRelayService) + + node.switch.services = @[Service(holePunchService)] + if conf.relay: (await node.mountRelay()).isOkOr: error "failed to mount relay", error diff --git a/apps/chat2disco/config_chat2disco.nim b/apps/chat2disco/config_chat2disco.nim index 19dde4437..844cc8a6b 100644 --- a/apps/chat2disco/config_chat2disco.nim +++ b/apps/chat2disco/config_chat2disco.nim @@ -15,7 +15,7 @@ const defaultMetricsAddress* = parseIpAddress("127.0.0.1") type Chat2DiscoConf* = object ## General node config logLevel* {. - desc: "Sets the log level.", defaultValue: LogLevel.INFO, name: "log-level" + desc: "Sets the log level.", defaultValue: LogLevel.DEBUG, name: "log-level" .}: LogLevel nodekey* {.desc: "P2P node private key as 64 char hex string.", name: "nodekey".}: @@ -47,26 +47,6 @@ type Chat2DiscoConf* = object ## General node config desc: "Enable relay protocol: true|false", defaultValue: true, name: "relay" .}: bool - keepAlive* {. - desc: "Enable keep-alive for idle connections: true|false", - defaultValue: false, - name: "keep-alive" - .}: bool - - clusterId* {. - desc: - "Cluster id that the node is running in. Node in a different cluster id is disconnected.", - defaultValue: 0, - name: "cluster-id" - .}: uint16 - - shards* {. - desc: - "Shards index to subscribe to [0..NUM_SHARDS_IN_NETWORK-1]. Argument may be repeated.", - defaultValue: @[uint16(0)], - name: "shard" - .}: seq[uint16] - ## Metrics config metricsServer* {. desc: "Enable the metrics server: true|false", @@ -92,41 +72,6 @@ type Chat2DiscoConf* = object ## General node config name: "metrics-logging" .}: bool - ## Chat2 configuration - contentTopic* {. - desc: "Content topic for chat messages.", - defaultValue: "/chat2disco/1/default/proto", - name: "content-topic" - .}: string - - ## Websocket Configuration - websocketSupport* {. - desc: "Enable websocket: true|false", - defaultValue: false, - name: "websocket-support" - .}: bool - - websocketPort* {. - desc: "WebSocket listening port.", defaultValue: 8000, name: "websocket-port" - .}: Port - - websocketSecureSupport* {. - desc: "WebSocket Secure Support.", - defaultValue: false, - name: "websocket-secure-support" - .}: bool - - ## DNS Resolution config - dnsAddrsNameServers* {. - desc: - "DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated.", - defaultValue: @[ - IpAddress(family: IpAddressFamily.IPv4, address_v4: [1'u8, 1, 1, 1]), - IpAddress(family: IpAddressFamily.IPv4, address_v4: [1'u8, 0, 0, 1]), - ], - name: "dns-addrs-name-server" - .}: seq[IpAddress] - ## Kademlia Discovery config kadBootstrapNodes* {. desc: diff --git a/waku/node/waku_switch.nim b/waku/node/waku_switch.nim index dda378030..b043ccedf 100644 --- a/waku/node/waku_switch.nim +++ b/waku/node/waku_switch.nim @@ -82,11 +82,6 @@ proc newWakuSwitch*( circuitRelay: Relay, maxNumRelays: int = 5, ): Switch {.raises: [Defect, IOError, LPError].} = - let - autonatService = AutonatService.new(AutonatClient(), rng) - autoRelayService = AutoRelayService.new(maxNumRelays, RelayClient.new(), nil, rng) - hpService: Service = HPService.new(autonatService, autoRelayService) - var b = SwitchBuilder .new() .withRng(rng) @@ -99,9 +94,8 @@ proc newWakuSwitch*( .withTcpTransport(transportFlags) .withNameResolver(nameResolver) .withSignedPeerRecord(sendSignedPeerRecord) - #.withAddressPolicy(publicRoutableAddressPolicy) - #.withCircuitRelay(circuitRelay) - #.withServices(@[hpService]) + .withAddressPolicy(publicRoutableAddressPolicy) + .withCircuitRelay(circuitRelay) if peerStoreCapacity.isSome(): b = b.withPeerStore(peerStoreCapacity.get())