From 942fff1236a9bd7872a8efe8bf3fd307836bf2e3 Mon Sep 17 00:00:00 2001 From: fryorcraken Date: Tue, 8 Apr 2025 15:49:12 +1000 Subject: [PATCH] more parameters --- waku/factory/node_factory.nim | 11 ++++----- waku/factory/waku_conf.nim | 11 +++++++++ waku/factory/waku_conf_builder.nim | 36 ++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim index efa166481..32078ffb6 100644 --- a/waku/factory/node_factory.nim +++ b/waku/factory/node_factory.nim @@ -60,7 +60,6 @@ proc initNode( conf: WakuConf, netConfig: NetConfig, rng: ref HmacDrbgContext, - nodeKey: crypto.PrivateKey, record: enr.Record, peerStore: Option[WakuPeerStorage], relay: Relay, @@ -97,7 +96,7 @@ proc initNode( # Build waku node instance var builder = WakuNodeBuilder.init() builder.withRng(rng) - builder.withNodeKey(nodeKey) + builder.withNodeKey(conf.nodeKey) builder.withRecord(record) builder.withNetworkConfiguration(netConfig) builder.withPeerStorage(pStorage, capacity = conf.peerStoreCapacity) @@ -156,7 +155,7 @@ proc getAutoshards*( return ok(autoshards) proc setupProtocols( - node: WakuNode, conf: WakuNodeConf, nodeKey: crypto.PrivateKey + node: WakuNode, conf: WakuConf, nodeKey: crypto.PrivateKey ): Future[Result[void, string]] {.async.} = ## Setup configured protocols on an existing Waku v2 node. ## Optionally include persistent message storage. @@ -483,7 +482,9 @@ proc startNode*( return ok() -proc setupNode*(wakuConf: WakuConf, relay: Relay): Result[WakuNode, string] = +proc setupNode*( + wakuConf: WakuConf, rng: ref HmacDrbgContext = crypto.newRng(), relay: Relay +): Result[WakuNode, string] = let netConfig = networkConfiguration(wakuConf, clientId).valueOr: error "failed to create internal config", error = error return err("failed to create internal config: " & error) @@ -514,7 +515,7 @@ proc setupNode*(wakuConf: WakuConf, relay: Relay): Result[WakuNode, string] = debug "Mounting protocols" try: - (waitFor node.setupProtocols(conf, key)).isOkOr: + (waitFor node.setupProtocols(wakuConf, key)).isOkOr: error "Mounting protocols failed", error = error return err("Mounting protocols failed: " & error) except CatchableError: diff --git a/waku/factory/waku_conf.nim b/waku/factory/waku_conf.nim index da3fa7594..a1d5f78e5 100644 --- a/waku/factory/waku_conf.nim +++ b/waku/factory/waku_conf.nim @@ -87,6 +87,17 @@ type WakuConf* = ref object # TODO: should clearly be a uint maxConnections*: int + agentString*: string + + colocationLimit*: int + + rateLimits*: seq[string] + + # TODO: those could be in a relay conf object + maxRelayPeers*: Option[int] + relayShardedPeerManagement*: bool + relayServiceRatio*: string + proc log*(conf: WakuConf) = info "Configuration: Enabled protocols", relay = conf.relay, diff --git a/waku/factory/waku_conf_builder.nim b/waku/factory/waku_conf_builder.nim index a2fde11e9..32eb5aac7 100644 --- a/waku/factory/waku_conf_builder.nim +++ b/waku/factory/waku_conf_builder.nim @@ -268,6 +268,15 @@ type WakuConfBuilder* = ref object peerStoreCapacity: Option[int] maxConnections: Option[int] + agentString: Option[string] + + rateLimits: Option[seq[string]] + + maxRelayPeers: Option[int] + relayShardedPeerManagement: Option[bool] + relayServiceRatio: Option[string] + + proc init*(T: type WakuConfBuilder): WakuConfBuilder = WakuConfBuilder( rlnRelayConf: RlnRelayConfBuilder.init(), @@ -290,6 +299,11 @@ with(WakuConfbuilder, shards, seq[uint16]) with(WakuConfbuilder, dnsAddrsNameServers, seq[IpAddress]) with(WakuConfbuilder, p2pTcpPort, uint16, Port) with(WakuConfbuilder, dns4DomainName, string, DomainName) +with(WakuConfbuilder, agentString, string) +with(WakuConfBuilder, colocationLimit, int) +with(WakuConfBuilder, rateLimits, seq[string]) +with(WakuConfBuilder, maxRelayPeers, int) +with(WakuConfBuilder, relayServiceRatio, string) proc withExtMultiAddr*(builder: var WakuConfBuilder, extMultiAddr: string) = builder.extMultiAddrs.add(extMultiAddr) @@ -572,6 +586,23 @@ proc build*( else: return err "Max Connections was not specified" + let relayServiceRatio = + if builder.relayServiceRatio.isSome: + builder.relayServiceRatio.get() + else: + return err "Relay Service Ratio was not specified" + + # TODO: Do the git version thing here + let agentString = builder.agentString.get("nwaku") + + # TODO: use `DefaultColocationLimit`. the user of this value should + # probably be defining a config object + let colocationLimit = builder.colocationLimit.get(5) + let rateLimits = builder.rateLimits.get(newSeq[string](0)) + + # TODO: is there a strategy for experimental features? delete vs promote + let relayShardedPeerManagement = builder.relayShardedPeerManagement.get(false) + return ok( WakuConf( nodeKey: nodeKey, @@ -602,5 +633,10 @@ proc build*( peerPersistence: peerPersistence, peerStoreCapacity: builder.peerStoreCapacity, maxConnections: maxConnections, + agentString: agentString, + colocationLimit: colocationLimit, + maxRelayPeers: builder.maxRelayPeers, + relayServiceRatio: relayServiceRatio + rateLimits: rateLimits ) )