More parameters, more macros

This commit is contained in:
fryorcraken 2025-04-08 11:01:39 +10:00
parent 23abf3466b
commit 298e0a0fe3
6 changed files with 269 additions and 121 deletions

View File

@ -18,7 +18,8 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.withMaxConnections(10)
builder.discv5Conf.withUdpPort(9000)
# Mount all shards in network
let expectedShards = toSeq[0.uint16 .. 7.uint16]
@ -62,7 +63,8 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.withMaxConnections(10)
builder.discv5Conf.withUdpPort(9000)
# Mount all shards in network
let expectedShards = toSeq[0.uint16 .. 7.uint16]
@ -95,7 +97,8 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.withMaxConnections(10)
builder.discv5Conf.withUdpPort(9000)
let # Mount all shards in network
@ -129,8 +132,9 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.discv5Conf.withUdpPort(9000)
builder.withMaxConnections(10)
let shards = @[2.uint16, 3.uint16]
## Given
@ -159,8 +163,9 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.discv5Conf.withUdpPort(9000)
builder.withMaxConnections(10)
let shards = @[2.uint16, 10.uint16]
## Given
@ -180,8 +185,9 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.discv5Conf.withUdpPort(9000)
builder.withMaxConnections(10)
builder.rlnRelayConf.withEthClientAddress("https://my_eth_rpc_url/")
# Mount all shards in network
@ -228,8 +234,9 @@ suite "Waku Conf - node key":
var builder = WakuConfBuilder.init()
builder.withClusterId(1)
builder.withMaxMessageSizeBytes(1)
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.discv5Conf.withUdpPort(9000)
builder.withMaxConnections(10)
## Given
@ -253,7 +260,8 @@ suite "Waku Conf - node key":
var builder = WakuConfBuilder.init()
builder.withClusterId(1)
builder.withMaxMessageSizeBytes(1)
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.withMaxConnections(10)
builder.discv5Conf.withUdpPort(9000)
## Given
@ -276,8 +284,9 @@ suite "Waku Conf - extMultiaddrs":
var builder = WakuConfBuilder.init()
builder.withClusterId(1)
builder.withMaxMessageSizeBytes(1)
builder.withTcpPort(60000)
builder.withP2pTcpPort(60000)
builder.discv5Conf.withUdpPort(9000)
builder.withMaxConnections(10)
## Given
let multiaddrs =

View File

@ -17,9 +17,9 @@ import
./waku_conf
proc enrConfiguration*(
conf: WakuNodeConf, netConfig: NetConfig, key: crypto.PrivateKey
conf: WakuConf, netConfig: NetConfig
): Result[enr.Record, string] =
var enrBuilder = EnrBuilder.init(key)
var enrBuilder = EnrBuilder.init(conf.nodeKey)
enrBuilder.withIpAddressAndPorts(
netConfig.enrIp, netConfig.enrPort, netConfig.discv5UdpPort
@ -46,7 +46,7 @@ proc enrConfiguration*(
return ok(record)
proc dnsResolve*(
domain: string, conf: WakuNodeConf
domain: DomainName, conf: WakuConf
): Future[Result[string, string]] {.async.} =
# Use conf's DNS servers
var nameServers: seq[TransportAddress]
@ -56,7 +56,7 @@ proc dnsResolve*(
let dnsResolver = DnsResolver.new(nameServers)
# Resolve domain IP
let resolved = await dnsResolver.resolveIp(domain, 0.Port, Domain.AF_UNSPEC)
let resolved = await dnsResolver.resolveIp(domain.string, 0.Port, Domain.AF_UNSPEC)
if resolved.len > 0:
return ok(resolved[0].host) # Use only first answer
@ -69,8 +69,8 @@ proc networkConfiguration*(conf: WakuConf, clientId: string): NetConfigResult =
let natRes = setupNat(
conf.natStrategy.string,
clientId,
Port(uint16(conf.tcpPort) + conf.portsShift),
Port(uint16(conf.tcpPort) + conf.portsShift),
Port(uint16(conf.p2pTcpPort) + conf.portsShift),
Port(uint16(conf.p2pTcpPort) + conf.portsShift),
)
if natRes.isErr():
return err("failed to setup NAT: " & $natRes.error)
@ -90,7 +90,7 @@ proc networkConfiguration*(conf: WakuConf, clientId: string): NetConfigResult =
## manual config, the external port is the same as the bind port.
extPort =
if (extIp.isSome() or conf.dns4DomainName.isSome()) and extTcpPort.isNone():
some(Port(uint16(conf.tcpPort) + conf.portsShift))
some(Port(uint16(conf.p2pTcpPort) + conf.portsShift))
else:
extTcpPort
@ -120,40 +120,44 @@ proc networkConfiguration*(conf: WakuConf, clientId: string): NetConfigResult =
# than IpAddress, which doesn't allow default construction
let netConfigRes = NetConfig.init(
clusterId = conf.clusterId,
bindIp = conf.listenAddress,
bindPort = Port(uint16(conf.tcpPort) + conf.portsShift),
bindIp = conf.p2pListenAddress,
bindPort = Port(uint16(conf.p2pTcpPort) + conf.portsShift),
extIp = extIp,
extPort = extPort,
extMultiAddrs = conf.extMultiAddrs,
extMultiAddrsOnly = conf.extMultiAddrsOnly,
wsBindPort = Port(uint16(conf.websocketPort) + conf.portsShift),
wsEnabled = conf.websocketSupport,
wssEnabled = conf.websocketSecureSupport,
dns4DomainName = conf.dns4DomainName,
wsBindPort = Port(uint16(conf.webSocketConf.webSocketPort) + conf.portsShift),
wsEnabled = conf.webSocketConf.webSocketSupport,
wssEnabled = conf.webSocketConf.webSocketSecureSupport,
dns4DomainName = conf.dns4DomainName.map(
proc(dn: DomainName): string =
dn.string
),
discv5UdpPort = discv5UdpPort,
wakuFlags = some(wakuFlags),
)
return netConfigRes
proc applyPresetConfiguration*(
srcConf: WakuNodeConf, wakuConfBuilder: var WakuConfBuilder
): void =
var preset = srcConf.preset
# TODO: redefine in the right place
# proc applyPresetConfiguration*(
# srcConf: WakuNodeConf, wakuConfBuilder: var WakuConfBuilder
# ): void =
# var preset = srcConf.preset
if srcConf.clusterId == 1:
warn(
"TWN - The Waku Network configuration will not be applied when `--cluster-id=1` is passed in future releases. Use `--preset=twn` instead."
)
preset = "twn"
# if srcConf.clusterId == 1:
# warn(
# "TWN - The Waku Network configuration will not be applied when `--cluster-id=1` is passed in future releases. Use `--preset=twn` instead."
# )
# preset = "twn"
case toLowerAscii(preset)
of "twn":
let twnClusterConf = ClusterConf.TheWakuNetworkConf()
# case toLowerAscii(preset)
# of "twn":
# let twnClusterConf = ClusterConf.TheWakuNetworkConf()
wakuConfBuilder.withClusterConf(twnClusterConf)
else:
discard
# wakuConfBuilder.withClusterConf(twnClusterConf)
# else:
# discard
# TODO: numShardsInNetwork should be mandatory with autosharding, and unneeded otherwise
proc getNumShardsInNetwork*(conf: WakuNodeConf): uint32 =

View File

@ -10,6 +10,7 @@ import
import
./internal_config,
./waku_conf,
./external_config,
./builder,
./validator_signed,
@ -56,7 +57,7 @@ proc setupPeerStorage(): Result[Option[WakuPeerStorage], string] =
## Init waku node instance
proc initNode(
conf: WakuNodeConf,
conf: WakuConf,
netConfig: NetConfig,
rng: ref HmacDrbgContext,
nodeKey: crypto.PrivateKey,
@ -89,14 +90,14 @@ proc initNode(
# Build waku node instance
var builder = WakuNodeBuilder.init()
builder.withRng(rng)
builder.withNodeKey(nodekey)
builder.withNodeKey(nodeKey)
builder.withRecord(record)
builder.withNetworkConfiguration(netConfig)
builder.withPeerStorage(pStorage, capacity = conf.peerStoreCapacity)
builder.withSwitchConfiguration(
maxConnections = some(conf.maxConnections.int),
secureKey = some(conf.websocketSecureKeyPath),
secureCert = some(conf.websocketSecureCertPath),
secureKey = some(conf.webSocketSecureKeyPath),
secureCert = some(conf.webSocketSecureCertPath),
nameResolver = dnsResolver,
sendSignedPeerRecord = conf.relayPeerExchange,
# We send our own signed peer record when peer exchange enabled
@ -480,7 +481,7 @@ proc setupNode*(wakuConf: WakuConf, relay: Relay): Result[WakuNode, string] =
error "failed to create internal config", error = error
return err("failed to create internal config: " & error)
let record = enrConfiguration(wakuConf, netConfig, key).valueOr:
let record = enrConfiguration(wakuConf, netConfig).valueOr:
error "failed to create record", error = error
return err("failed to create record: " & error)
@ -492,14 +493,14 @@ proc setupNode*(wakuConf: WakuConf, relay: Relay): Result[WakuNode, string] =
## Peer persistence
var peerStore: Option[WakuPeerStorage]
if conf.peerPersistence:
if wakuConf.peerPersistence:
peerStore = setupPeerStorage().valueOr:
error "Setting up storage failed", error = "failed to setup peer store " & error
return err("Setting up storage failed: " & error)
debug "Initializing node"
let node = initNode(conf, netConfig, rng, key, record, peerStore, relay).valueOr:
let node = initNode(wakuConf, netConfig, rng, record, peerStore, relay).valueOr:
error "Initializing node failed", error = error
return err("Initializing node failed: " & error)

View File

@ -155,9 +155,9 @@ proc new*(
info "Running nwaku node", version = git_version
var relay = newCircuitRelay(confCopy.isRelayClient)
var relay = newCircuitRelay(wakuConf.isRelayClient)
let nodeRes = setupNode(confCopy, rng, relay)
let nodeRes = setupNode(wakuConf, rng, relay)
if nodeRes.isErr():
error "Failed setting up node", error = nodeRes.error
return err("Failed setting up node: " & nodeRes.error)

View File

@ -32,6 +32,14 @@ type RlnRelayConf* = ref object
userMessageLimit*: uint64
ethClientAddress*: EthRpcUrl
type WebSocketSecureConf* = ref object
webSocketSecureKeyPath*: string
webSocketSecureCertPath*: string
type WebSocketConf* = ref object
webSocketPort*: Port
webSocketSecureConf*: Option[WebSocketSecureConf]
## `WakuConf` is a valid configuration for a Waku node
## All information needed by a waku node should be contained
## In this object. A convenient `validate` method enables doing
@ -61,10 +69,21 @@ type WakuConf* = ref object
natStrategy*: NatStrategy
tcpPort*: Port
p2pTcpPort*: Port
p2pListenAddress*: IpAddress
portsShift*: uint16
dns4DomainName*: Option[DomainName]
extMultiAddrs*: seq[MultiAddress]
extMultiAddrsOnly*: bool
webSocketConf*: Option[WebSocketConf]
dnsAddrs*: bool
dnsAddrsNameServers*: seq[IpAddress]
peerPersistence*: bool
# TODO: should clearly be a uint
peerStoreCapacity*: Option[int]
# TODO: should clearly be a uint
maxConnections*: int
proc log*(conf: WakuConf) =
info "Configuration: Enabled protocols",

View File

@ -11,6 +11,35 @@ import
logScope:
topics = "waku conf builder"
proc generateWithProc(builderType, argName, argType, targetType: NimNode): NimNode =
builderType.expectKind nnkIdent
argName.expectKind nnkIdent
result = newStmtList()
let procName = ident("with" & capitalizeAscii($argName))
let builderIdent = ident("builder")
let builderVar = newDotExpr(builderIdent, ident($argName))
let resVar = ident($argName)
if argType == targetType:
result.add quote do:
proc `procName`*(`builderIdent`: var `builderType`, `resVar`: `argType`) =
`builderVar` = some(`argName`)
else:
result.add quote do:
proc `procName`*(`builderIdent`: var `builderType`, `resVar`: `argType`) =
`builderVar` = some(`argName`.`targetType`)
macro with(
builderType: untyped, argName: untyped, argType: untyped, targetType: untyped
) =
result = generateWithProc(builderType, argName, argType, targetType)
macro with(builderType: untyped, argName: untyped, argType: untyped) =
result = generateWithProc(builderType, argName, argType, argType)
##############################
## RLN Relay Config Builder ##
##############################
@ -27,33 +56,14 @@ type RlnRelayConfBuilder = ref object
proc init*(T: type RlnRelayConfBuilder): RlnRelayConfBuilder =
RlnRelayConfBuilder()
proc withRlnRelay*(builder: var RlnRelayConfBuilder, rlnRelay: bool) =
builder.rlnRelay = some(rlnRelay)
proc withEthContractAddress*(
builder: var RlnRelayConfBuilder, ethContractAddress: string
) =
builder.ethContractAddress = some(ethContractAddress.ContractAddress)
proc withChainId*(builder: var RlnRelayConfBuilder, chainId: uint) =
builder.chainId = some(chainId)
proc withDynamic*(builder: var RlnRelayConfBuilder, dynamic: bool) =
builder.dynamic = some(dynamic)
proc withBandwidthThreshold*(
builder: var RlnRelayConfBuilder, bandwidthThreshold: int
) =
builder.bandwidthThreshold = some(bandwidthThreshold)
proc withEpochSizeSec*(builder: var RlnRelayConfBuilder, epochSizeSec: uint64) =
builder.epochSizeSec = some(epochSizeSec)
proc withUserMessageLimit*(builder: var RlnRelayConfBuilder, userMessageLimit: uint64) =
builder.userMessageLimit = some(userMessageLimit)
proc withEthClientAddress*(builder: var RlnRelayConfBuilder, ethClientAddress: string) =
builder.ethClientAddress = some(ethClientAddress.EthRpcUrl)
with(RlnRelayConfbuilder, rlnRelay, bool)
with(RlnRelayConfBuilder, chainId, uint)
with(RlnRelayConfBuilder, dynamic, bool)
with(RlnRelayConfBuilder, bandwidthThreshold, int)
with(RlnRelayConfBuilder, epochSizeSec, uint64)
with(RlnRelayConfBuilder, userMessageLimit, uint64)
with(RlnRelayConfBuilder, ethContractAddress, string, ContractAddress)
with(RlnRelayConfBuilder, ethClientAddress, string, EthRpcUrl)
proc build*(builder: RlnRelayConfBuilder): Result[Option[RlnRelayConf], string] =
if builder.rlnRelay.isNone or not builder.rlnRelay.get():
@ -126,8 +136,8 @@ type Discv5ConfBuilder = ref object
proc init(T: type Discv5ConfBuilder): Discv5ConfBuilder =
Discv5ConfBuilder()
proc withDiscv5(builder: var Discv5ConfBuilder, discv5: bool) =
builder.discv5 = some(discv5)
with(Discv5ConfBuilder, discv5, bool)
with(Discv5ConfBuilder, udpPort, uint16, Port)
proc withBootstrapNodes(builder: var Discv5ConfBuilder, bootstrapNodes: seq[string]) =
# TODO: validate ENRs?
@ -138,9 +148,6 @@ proc withBootstrapNodes(builder: var Discv5ConfBuilder, bootstrapNodes: seq[stri
)
)
proc withUdpPort*(builder: var Discv5ConfBuilder, udpPort: uint16) =
builder.udpPort = some (udpPort.Port)
proc build(builder: Discv5ConfBuilder): Result[Option[Discv5Conf], string] =
if builder.discv5.isNone or not builder.discv5.get():
return ok(none(Discv5Conf))
@ -158,12 +165,73 @@ proc build(builder: Discv5ConfBuilder): Result[Option[Discv5Conf], string] =
return ok(some(Discv5Conf(bootstrapNodes: bootstrapNodes, udpPort: udpPort)))
##############################
## WebSocket Config Builder ##
##############################
type WebSocketConfBuilder* = ref object
webSocketSupport: Option[bool]
webSocketPort: Option[Port]
webSocketSecureSupport: Option[bool]
webSocketSecureKeyPath: Option[string]
webSocketSecureCertPath: Option[string]
proc init*(T: type WebSocketConfBuilder): WebSocketConfBuilder =
WebSocketConfBuilder()
with(WebSocketConfBuilder, webSocketSupport, bool)
with(WebSocketConfBuilder, webSocketSecureSupport, bool)
with(WebSocketConfBuilder, webSocketPort, Port)
with(WebSocketConfBuilder, webSocketSecureKeyPath, string)
with(WebSocketConfBuilder, webSocketSecureCertPath, string)
proc build(builder: WebSocketConfBuilder): Result[Option[WebSocketConf], string] =
if not builder.webSocketSupport.get(false):
return ok(none(WebSocketConf))
let webSocketPort =
if builder.webSocketPort.isSome:
builder.webSocketPort.get()
else:
warn "WebSocket Port is not specified, defaulting to 8000"
8000.Port
if not builder.webSocketSecureSupport.get(false):
return ok(
some(
WebSocketConf(
webSocketPort: websocketPort, webSocketSecureConf: none(WebSocketSecureConf)
)
)
)
let webSocketSecureKeyPath = builder.webSocketSecureKeyPath.get("")
if webSocketSecureKeyPath == "":
return err("WebSocketSecure enabled but key path is not specified")
let webSocketSecureCertPath = builder.webSocketSecureCertPath.get("")
if webSocketSecureCertPath == "":
return err("WebSocketSecure enabled but cert path is not specified")
return ok(
some(
WebSocketConf(
webSocketPort: webSocketPort,
webSocketSecureConf: some(
WebSocketSecureConf(
webSocketSecureKeyPath: webSocketSecureKeyPath,
webSocketSecureCertPath: webSocketSecureCertPath,
)
),
)
)
)
## `WakuConfBuilder` is a convenient tool to accumulate
## Config parameters to build a `WakuConfig`.
## It provides some type conversion, as well as applying
## defaults in an agnostic manner (for any usage of Waku node)
type WakuConfBuilder* = ref object
nodeKey*: Option[PrivateKey]
nodeKey: Option[PrivateKey]
clusterId: Option[uint16]
numShardsInNetwork: Option[uint32]
@ -189,48 +257,42 @@ type WakuConfBuilder* = ref object
natStrategy: Option[NatStrategy]
tcpPort: Option[Port]
p2pTcpPort: Option[Port]
p2pListenAddress: Option[IpAddress]
portsShift: Option[uint16]
dns4DomainName: Option[DomainName]
extMultiAddrs: seq[string]
extMultiAddrsOnly: Option[bool]
webSocketConf*: WebSocketConfBuilder
dnsAddrs*: Option[bool]
dnsAddrsNameServers: Option[seq[IpAddress]]
peerPersistence: Option[bool]
peerStoreCapacity: Option[int]
maxConnections: Option[int]
proc init*(T: type WakuConfBuilder): WakuConfBuilder =
WakuConfBuilder(
rlnRelayConf: RlnRelayConfBuilder.init(), discv5Conf: Discv5ConfBuilder.init()
rlnRelayConf: RlnRelayConfBuilder.init(),
discv5Conf: Discv5ConfBuilder.init(),
webSocketConf: WebSocketConfBuilder.init(),
)
macro confWith(argName: untyped, argType: untyped) =
argName.expectKind nnkIdent
argType.expectKind nnkIdent
result = newStmtList()
let procName = ident("with" & capitalizeAscii($argName))
let builderIdent = ident("builder")
let builderVar = newDotExpr(builderIdent, ident($argName))
let resVar = ident($argName)
result.add quote do:
proc `procName`*(`builderIdent`: var WakuConfBuilder, `resVar`: `argType`) =
`builderVar` = some(`argName`)
confWith(clusterConf, ClusterConf)
confWith(nodeKey, PrivateKey)
confWith(clusterId, uint16)
confWith(shards, seq[uint16])
confWith(relay, bool)
confWith(filter, bool)
confWith(storeSync, bool)
confWith(maxMessageSizeBytes, int)
proc withDiscv5*(builder: var WakuConfBuilder, discv5: bool) =
builder.discv5Conf.withDiscv5(discv5)
proc withTcpPort*(builder: var WakuConfBuilder, tcpPort: uint16) =
builder.tcpPort = some(tcpPort.Port)
proc withDns4DomainName*(builder: var WakuConfBuilder, dns4DomainName: string) =
builder.dns4DomainName = some(dns4DomainName.DomainName)
with(WakuConfBuilder, clusterConf, ClusterConf)
with(WakuConfBuilder, nodeKey, PrivateKey)
with(WakuConfBuilder, clusterId, uint16)
with(WakuConfBuilder, relay, bool)
with(WakuConfBuilder, filter, bool)
with(WakuConfBuilder, storeSync, bool)
with(WakuConfBuilder, maxMessageSizeBytes, int)
with(WakuConfBuilder, dnsAddrs, bool)
with(WakuConfbuilder, peerPersistence, bool)
with(WakuConfbuilder, maxConnections, int)
with(WakuConfbuilder, shards, seq[uint16])
with(WakuConfbuilder, dnsAddrsNameServers, seq[IpAddress])
with(WakuConfbuilder, p2pTcpPort, uint16, Port)
with(WakuConfbuilder, dns4DomainName, string, DomainName)
proc withExtMultiAddr*(builder: var WakuConfBuilder, extMultiAddr: string) =
builder.extMultiAddrs.add(extMultiAddr)
@ -386,7 +448,7 @@ proc build*(
if builder.clusterId.isSome:
builder.clusterId.get()
else:
return err("Cluster Id is missing")
return err("Cluster Id was not specified")
let numShardsInNetwork =
if builder.numShardsInNetwork.isSome:
@ -410,11 +472,14 @@ proc build*(
let rlnRelayConf = builder.rlnRelayConf.build().valueOr:
return err("RLN Relay Conf building failed: " & $error)
let webSocketConf = builder.webSocketConf.build().valueOr:
return err("WebSocket Conf building failed: " & $error)
let maxMessageSizeBytes =
if builder.maxMessageSizeBytes.isSome:
builder.maxMessageSizeBytes.get()
else:
return err("Max Message Size is missing")
return err("Max Message Size was not specified")
let logLevel =
if builder.logLevel.isSome:
@ -437,11 +502,19 @@ proc build*(
warn "Nat Strategy is not specified, defaulting to none"
"none".NatStrategy
let tcpPort =
if builder.tcpPort.isSome:
builder.tcpPort.get()
let p2pTcpPort =
if builder.p2pTcpPort.isSome:
builder.p2pTcpPort.get()
else:
return err("TCP Port is missing")
warn "P2P Listening TCP Port is not specified, listening on 60000"
6000.Port
let p2pListenAddress =
if builder.p2pListenAddress.isSome:
builder.p2pListenAddress.get()
else:
warn "P2P listening address not specified, listening on 0.0.0.0"
(static parseIpAddress("0.0.0.0"))
let portsShift =
if builder.portsShift.isSome:
@ -466,6 +539,40 @@ proc build*(
return err("Invalid multiaddress provided: " & s)
extMultiAddrs.add(m)
let extMultiAddrsOnly =
if builder.extMultiAddrsOnly.isSome:
builder.extMultiAddrsOnly.get()
else:
warn "Whether to only announce external multiaddresses is not specified, defaulting to false"
false
let dnsAddrs =
if builder.dnsAddrs.isSome:
builder.dnsAddrs.get()
else:
warn "Whether to resolve DNS multiaddresses was not specified, defaulting to false."
false
let dnsAddrsNameServers =
if builder.dnsAddrsNameServers.isSome:
builder.dnsAddrsNameServers.get()
else:
warn "DNS name servers IPs not provided, defaulting to Cloudflare's."
@[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")]
let peerPersistence =
if builder.peerPersistence.isSome:
builder.peerPersistence.get()
else:
warn "Peer persistence not specified, defaulting to false"
false
let maxConnections =
if builder.maxConnections.isSome:
builder.maxConnections.get()
else:
return err "Max Connections was not specified"
return ok(
WakuConf(
nodeKey: nodeKey,
@ -483,9 +590,17 @@ proc build*(
logLevel: logLevel,
logFormat: logFormat,
natStrategy: natStrategy,
tcpPort: tcpPort,
p2pTcpPort: p2pTcpPort,
p2pListenAddress: p2pListenAddress,
portsShift: portsShift,
dns4DomainName: dns4DomainName,
extMultiAddrs: extMultiAddrs,
extMultiAddrsOnly: extMultiAddrsOnly,
webSocketConf: webSocketConf,
dnsAddrs: dnsAddrs,
dnsAddrsNameServers: dnsAddrsNameServers,
peerPersistence: peerPersistence,
peerStoreCapacity: builder.peerStoreCapacity,
maxConnections: maxConnections,
)
)