makefile chat2disco update

This commit is contained in:
SionoiS 2026-05-01 09:40:41 -04:00
parent 36a4715ca3
commit 8ef769e4fd
No known key found for this signature in database
GPG Key ID: C9458A8CB1852951
6 changed files with 27 additions and 138 deletions

View File

@ -240,6 +240,10 @@ chat2mix: | $(NIMBLEDEPS_STAMP) build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble chat2mix
chat2disco: | $(NIMBLEDEPS_STAMP) build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble chat2disco
rln-db-inspector: | $(NIMBLEDEPS_STAMP) build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble rln_db_inspector

View File

@ -7,7 +7,7 @@ when not (compileOption("threads")):
{.push raises: [].}
import std/[strformat, strutils, times, options, random, sequtils, tables]
import std/[strformat, strutils, times, options, sequtils, tables]
import
confutils,
chronicles,
@ -27,14 +27,12 @@ import
peerinfo,
peerid,
protobuf/minprotobuf,
nameresolving/dnsresolver,
extended_peer_record,
]
import
waku/[
waku_core,
waku_enr,
discovery/waku_dnsdisc,
discovery/waku_kademlia,
waku_node,
node/waku_metrics,
@ -42,7 +40,6 @@ import
factory/builder,
common/utils/nat,
waku_relay,
waku_store/common,
],
./config_chat2disco
@ -314,7 +311,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
var enrBuilder = EnrBuilder.init(nodeKey)
let record = enrBuilder.build().valueOr:
error "failed to create enr record", error = error
error "failed to create enr record", error
quit(QuitFailure)
let node = block:
@ -337,36 +334,31 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
if conf.relay:
(await node.mountRelay()).isOkOr:
echo "failed to mount relay: " & error
return
error "failed to mount relay", error
quit(QuitFailure)
await node.mountLibp2pPing()
# Setup kademlia discovery if bootstrap nodes are provided
var providedServices: seq[ServiceInfo] = @[]
var kadBootstrapPeers: seq[(PeerId, seq[MultiAddress])] = @[]
if conf.kadBootstrapNodes.len > 0:
var kadBootstrapPeers: seq[(PeerId, seq[MultiAddress])]
for nodeStr in conf.kadBootstrapNodes:
let (peerId, ma) = parseFullAddress(nodeStr).valueOr:
error "Failed to parse kademlia bootstrap node", node = nodeStr, error = error
continue
kadBootstrapPeers.add((peerId, @[ma]))
if kadBootstrapPeers.len > 0:
node.wakuKademlia = WakuKademlia.new(
node.switch, node.peerManager, kadBootstrapPeers, providedServices
)
else:
# Create as seed node (no bootstrap) so we can still advertise services
node.wakuKademlia =
WakuKademlia.new(node.switch, node.peerManager, @[], providedServices)
node.wakuKademlia = WakuKademlia.new(node.switch, node.peerManager, kadBootstrapPeers)
let catchRes = catch:
node.switch.mount(node.wakuKademlia.protocol)
if catchRes.isErr():
error "failed to mount kademlia discovery", error = catchRes.error.msg
quit(QuitFailure)
# node start include kademlia
await node.start()
if not node.wakuKademlia.isNil():
node.wakuKademlia.start()
let nick = await readNick(transp)
echo "Welcome, " & nick & "!"
@ -379,79 +371,10 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
prompt: false,
)
if conf.staticnodes.len > 0:
echo "Connecting to static peers..."
await node.connectToNodes(conf.staticnodes)
var dnsDiscoveryUrl = none(string)
if conf.fleet != Fleet.none:
echo "Connecting to " & $conf.fleet & " fleet using DNS discovery..."
if conf.fleet == Fleet.test:
dnsDiscoveryUrl = some(
"enrtree://AOGYWMBYOUIMOENHXCHILPKY3ZRFEULMFI4DOM442QSZ73TT2A7VI@test.waku.nodes.status.im"
)
else:
dnsDiscoveryUrl = some(
"enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im"
)
elif conf.dnsDiscoveryUrl != "":
info "Discovering nodes using Waku DNS discovery", url = conf.dnsDiscoveryUrl
dnsDiscoveryUrl = some(conf.dnsDiscoveryUrl)
var discoveredNodes: seq[RemotePeerInfo]
if dnsDiscoveryUrl.isSome:
var nameServers: seq[TransportAddress]
for ip in conf.dnsAddrsNameServers:
nameServers.add(initTAddress(ip, Port(53)))
let dnsResolver = DnsResolver.new(nameServers)
proc resolver(domain: string): Future[string] {.async, gcsafe.} =
trace "resolving", domain = domain
let resolved = await dnsResolver.resolveTxt(domain)
return resolved[0]
let wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl.get(), resolver)
if wakuDnsDiscovery.isOk:
let discoveredPeers = await wakuDnsDiscovery.get().findPeers()
if discoveredPeers.isOk:
info "Connecting to discovered peers"
discoveredNodes = discoveredPeers.get()
echo "Discovered and connecting to " & $discoveredNodes
waitFor chat.node.connectToNodes(discoveredNodes)
else:
warn "Failed to find peers via DNS discovery", error = discoveredPeers.error
else:
warn "Failed to init Waku DNS discovery", error = wakuDnsDiscovery.error
let peerInfo = node.switch.peerInfo
let listenStr = $peerInfo.addrs[0] & "/p2p/" & $peerInfo.peerId
echo &"Listening on\n {listenStr}"
if (conf.storenode != "") or (conf.store == true):
await node.mountStore()
var storenode: Option[RemotePeerInfo]
if conf.storenode != "":
let peerInfo = parsePeerInfo(conf.storenode)
if peerInfo.isOk():
storenode = some(peerInfo.value)
else:
error "Incorrect conf.storenode", error = peerInfo.error
elif discoveredNodes.len > 0:
echo "Store enabled, but no store nodes configured. Choosing one at random from discovered peers"
storenode = some(discoveredNodes[rand(0 .. len(discoveredNodes) - 1)])
if storenode.isSome():
echo "Connecting to storenode: " & $(storenode.get())
node.mountStoreClient()
node.peerManager.addServicePeer(storenode.get(), WakuStoreCodec)
# Subscribe to relay topic
if conf.relay:
proc handler(topic: PubsubTopic, msg: WakuMessage): Future[void] {.async, gcsafe.} =

View File

@ -13,15 +13,8 @@ import waku/waku_core
const
defaultMetricsAddress* = parseIpAddress("127.0.0.1")
defaultDnsResolver1* = parseIpAddress("1.1.1.1")
defaultDnsResolver2* = parseIpAddress("1.0.0.1")
type
Fleet* = enum
none
prod
test
Chat2DiscoConf* = object ## General node config
logLevel* {.
desc: "Sets the log level.", defaultValue: LogLevel.INFO, name: "log-level"
@ -58,11 +51,6 @@ type
desc: "Enable relay protocol: true|false", defaultValue: true, name: "relay"
.}: bool
staticnodes* {.
desc: "Peer multiaddr to directly connect with. Argument may be repeated.",
name: "staticnode"
.}: seq[string]
keepAlive* {.
desc: "Enable keep-alive for idle connections: true|false",
defaultValue: false,
@ -83,15 +71,6 @@ type
name: "shard"
.}: seq[uint16]
## Store config
store* {.
desc: "Enable store protocol: true|false", defaultValue: true, name: "store"
.}: bool
storenode* {.
desc: "Peer multiaddr to query for storage.", defaultValue: "", name: "storenode"
.}: string
## Metrics config
metricsServer* {.
desc: "Enable the metrics server: true|false",
@ -117,28 +96,7 @@ type
name: "metrics-logging"
.}: bool
## DNS discovery config
dnsDiscoveryUrl* {.
desc: "URL for DNS node list in format 'enrtree://<key>@<fqdn>'",
defaultValue: "",
name: "dns-discovery-url"
.}: string
dnsAddrsNameServers* {.
desc:
"DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated.",
defaultValue: @[defaultDnsResolver1, defaultDnsResolver2],
name: "dns-addrs-name-server"
.}: seq[IpAddress]
## Chat2 configuration
fleet* {.
desc:
"Select the fleet to connect to. This sets the DNS discovery URL to the selected fleet.",
defaultValue: Fleet.prod,
name: "fleet"
.}: Fleet
contentTopic* {.
desc: "Content topic for chat messages.",
defaultValue: "/chat2disco/1/default/proto",

View File

@ -120,7 +120,7 @@ if defined(android):
switch("passL", "--sysroot=" & sysRoot)
switch("cincludes", sysRoot & "/usr/include/")
# begin Nimble config (version 2)
--noNimblePath
when withDir(thisDir(), system.fileExists("nimble.paths")):
--noNimblePath
include "nimble.paths"
# end Nimble config

View File

@ -433,10 +433,14 @@ task chat2mix, "Build example Waku chat mix usage":
# -d:ssl - cause unlisted exception error in libp2p/utility...
task chat2disco, "Build example Waku chat with service discovery":
# NOTE For debugging, set debug level. For chat usage we want minimal log
# output to STDOUT. Can be fixed by redirecting logs to file (e.g.)
#buildBinary name, "examples/", "-d:chronicles_log_level=WARN"
let name = "chat2disco"
buildBinary name,
"apps/chat2disco/",
"-d:chronicles_sinks=textlines[file] -d:chronicles_log_level=DEBUG "
"-d:chronicles_sinks=textlines -d:chronicles_log_level=DEBUG "
task chat2bridge, "Build chat2bridge":
let name = "chat2bridge"

View File

@ -126,7 +126,7 @@ proc lookup*(
proc registerLookupService*(self: WakuKademlia, serviceId: string) =
if serviceId notin self.discoveredServices:
self.protocol.startDiscovering(serviceId)
discard self.protocol.startDiscovering(serviceId)
self.discoveredServices.add(serviceId)
proc advertiseService*(self: WakuKademlia, service: ServiceInfo) =
@ -163,8 +163,8 @@ proc new*(
T: type WakuKademlia,
switch: Switch,
peerManager: PeerManager,
bootstrapNodes: seq[(PeerId, seq[MultiAddress])],
providedServices: var seq[ServiceInfo],
bootstrapNodes: seq[(PeerId, seq[MultiAddress])] = @[],
providedServices: seq[ServiceInfo] = @[],
loopInterval: Duration = DefaultKademliaDiscoveryInterval,
xprPublishing: bool = false,
): T =