waku conf tests pass

# Conflicts:
#	waku/node/waku_node.nim
This commit is contained in:
fryorcraken 2025-04-11 21:34:31 +10:00
parent 19dd011711
commit 708bb7214d
4 changed files with 195 additions and 257 deletions

View File

@ -27,35 +27,33 @@ suite "Waku Conf - build with cluster conf":
builder.rlnRelayConf.withEthClientAddress("https://my_eth_rpc_url/")
builder.withClusterConf(clusterConf)
builder.withRelay(true)
builder.rlnRelayConf.withTreePath("/tmp/test-tree-path")
## When
let res = builder.build()
assert res.isOk(), $res.error
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
let conf = res.get()
assert conf.validate().isOk()
assert conf.clusterId == clusterConf.clusterId
assert conf.numShardsInNetwork == clusterConf.numShardsInNetwork
assert conf.shards == expectedShards
assert conf.maxMessageSizeBytes ==
int(parseCorrectMsgSize(clusterConf.maxMessageSize))
assert conf.discv5Conf.get().bootstrapNodes.map(
proc(e: TextEnr): string =
e.string
) == clusterConf.discv5BootstrapNodes
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
check conf.clusterId == clusterConf.clusterId
check conf.numShardsInNetwork == clusterConf.numShardsInNetwork
check conf.shards == expectedShards
check conf.maxMessageSizeBytes ==
uint64(parseCorrectMsgSize(clusterConf.maxMessageSize))
check conf.discv5Conf.get().bootstrapNodes == clusterConf.discv5BootstrapNodes
if clusterConf.rlnRelay:
assert conf.rlnRelayConf.isSome
assert conf.rlnRelayConf.isSome(), "RLN Relay conf is disabled"
let rlnRelayConf = conf.rlnRelayConf.get()
assert rlnRelayConf.ethContractAddress.string ==
check rlnRelayConf.ethContractAddress.string ==
clusterConf.rlnRelayEthContractAddress
assert rlnRelayConf.dynamic == clusterConf.rlnRelayDynamic
assert rlnRelayConf.chainId == clusterConf.rlnRelayChainId
assert rlnRelayConf.epochSizeSec == clusterConf.rlnEpochSizeSec
assert rlnRelayConf.userMessageLimit == clusterConf.rlnRelayUserMessageLimit
check rlnRelayConf.dynamic == clusterConf.rlnRelayDynamic
check rlnRelayConf.chainId == clusterConf.rlnRelayChainId
check rlnRelayConf.epochSizeSec == clusterConf.rlnEpochSizeSec
check rlnRelayConf.userMessageLimit == clusterConf.rlnRelayUserMessageLimit
test "Cluster Conf is passed, but relay is disabled":
## Setup
@ -72,21 +70,19 @@ suite "Waku Conf - build with cluster conf":
builder.withRelay(false)
## When
let res = builder.build()
assert res.isOk(), $res.error
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
let conf = res.get()
assert conf.validate().isOk()
assert conf.clusterId == clusterConf.clusterId
assert conf.numShardsInNetwork == clusterConf.numShardsInNetwork
assert conf.shards == expectedShards
assert conf.maxMessageSizeBytes ==
int(parseCorrectMsgSize(clusterConf.maxMessageSize))
assert conf.discv5Conf.get().bootstrapNodes.map(
proc(e: TextEnr): string =
e.string
) == clusterConf.discv5BootstrapNodes
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
check conf.clusterId == clusterConf.clusterId
check conf.numShardsInNetwork == clusterConf.numShardsInNetwork
check conf.shards == expectedShards
check conf.maxMessageSizeBytes ==
uint64(parseCorrectMsgSize(clusterConf.maxMessageSize))
check conf.discv5Conf.get().bootstrapNodes == clusterConf.discv5BootstrapNodes
assert conf.rlnRelayConf.isNone
@ -94,8 +90,6 @@ suite "Waku Conf - build with cluster conf":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.withRelayServiceRatio("50:50")
builder.discv5Conf.withUdpPort(9000)
let # Mount all shards in network
expectedShards = toSeq[0.uint16 .. 7.uint16]
@ -103,33 +97,28 @@ suite "Waku Conf - build with cluster conf":
## Given
builder.rlnRelayConf.withEthClientAddress("https://my_eth_rpc_url/")
builder.withClusterConf(clusterConf)
builder.rlnRelayConf.withRlnRelay(false)
builder.rlnRelayConf.withEnabled(false)
## When
let res = builder.build()
assert res.isOk(), $res.error
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
let conf = res.get()
assert conf.validate().isOk()
assert conf.clusterId == clusterConf.clusterId
assert conf.numShardsInNetwork == clusterConf.numShardsInNetwork
assert conf.shards == expectedShards
assert conf.maxMessageSizeBytes ==
int(parseCorrectMsgSize(clusterConf.maxMessageSize))
assert conf.discv5Conf.get().bootstrapNodes.map(
proc(e: TextEnr): string =
e.string
) == clusterConf.discv5BootstrapNodes
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
check conf.clusterId == clusterConf.clusterId
check conf.numShardsInNetwork == clusterConf.numShardsInNetwork
check conf.shards == expectedShards
check conf.maxMessageSizeBytes ==
uint64(parseCorrectMsgSize(clusterConf.maxMessageSize))
check conf.discv5Conf.get().bootstrapNodes == clusterConf.discv5BootstrapNodes
assert conf.rlnRelayConf.isNone
test "Cluster Conf is passed and valid shards are specified":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.discv5Conf.withUdpPort(9000)
builder.withRelayServiceRatio("50:50")
let shards = @[2.uint16, 3.uint16]
## Given
@ -138,28 +127,24 @@ suite "Waku Conf - build with cluster conf":
builder.withShards(shards)
## When
let res = builder.build()
assert res.isOk(), $res.error
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
let conf = res.get()
assert conf.validate().isOk()
assert conf.clusterId == clusterConf.clusterId
assert conf.numShardsInNetwork == clusterConf.numShardsInNetwork
assert conf.shards == shards
assert conf.maxMessageSizeBytes ==
int(parseCorrectMsgSize(clusterConf.maxMessageSize))
assert conf.discv5Conf.get().bootstrapNodes.map(
proc(e: TextEnr): string =
e.string
) == clusterConf.discv5BootstrapNodes
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
check conf.clusterId == clusterConf.clusterId
check conf.numShardsInNetwork == clusterConf.numShardsInNetwork
check conf.shards == shards
check conf.maxMessageSizeBytes ==
uint64(parseCorrectMsgSize(clusterConf.maxMessageSize))
check conf.discv5Conf.get().bootstrapNodes == clusterConf.discv5BootstrapNodes
test "Cluster Conf is passed and invalid shards are specified":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.discv5Conf.withUdpPort(9000)
builder.withRelayServiceRatio("50:50")
let shards = @[2.uint16, 10.uint16]
## Given
@ -168,20 +153,16 @@ suite "Waku Conf - build with cluster conf":
builder.withShards(shards)
## When
let res = builder.build()
assert res.isOk(), $res.error
let resConf = builder.build()
## Then
let conf = res.get()
assert conf.validate().isErr(), "Invalid shard was accepted"
assert resConf.isErr(), "Invalid shard was accepted"
test "Cluster Conf is passed and RLN contract is overridden":
## Setup
let clusterConf = ClusterConf.TheWakuNetworkConf()
var builder = WakuConfBuilder.init()
builder.discv5Conf.withUdpPort(9000)
builder.rlnRelayConf.withEthClientAddress("https://my_eth_rpc_url/")
builder.withRelayServiceRatio("50:50")
# Mount all shards in network
let expectedShards = toSeq[0.uint16 .. 7.uint16]
@ -191,52 +172,50 @@ suite "Waku Conf - build with cluster conf":
builder.rlnRelayConf.withEthContractAddress(contractAddress)
builder.withClusterConf(clusterConf)
builder.withRelay(true)
builder.rlnRelayConf.withTreePath("/tmp/test")
## When
let res = builder.build()
assert res.isOk(), $res.error
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
let conf = res.get()
assert conf.validate().isOk()
assert conf.clusterId == clusterConf.clusterId
assert conf.numShardsInNetwork == clusterConf.numShardsInNetwork
assert conf.shards == expectedShards
assert conf.maxMessageSizeBytes ==
int(parseCorrectMsgSize(clusterConf.maxMessageSize))
assert conf.discv5Conf.get().bootstrapNodes.map(
proc(e: TextEnr): string =
e.string
) == clusterConf.discv5BootstrapNodes
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
check conf.clusterId == clusterConf.clusterId
check conf.numShardsInNetwork == clusterConf.numShardsInNetwork
check conf.shards == expectedShards
check conf.maxMessageSizeBytes ==
uint64(parseCorrectMsgSize(clusterConf.maxMessageSize))
check conf.discv5Conf.isSome == clusterConf.discv5Discovery
check conf.discv5Conf.get().bootstrapNodes == clusterConf.discv5BootstrapNodes
if clusterConf.rlnRelay:
assert conf.rlnRelayConf.isSome
let rlnRelayConf = conf.rlnRelayConf.get()
assert rlnRelayConf.ethContractAddress.string == contractAddress
assert rlnRelayConf.dynamic == clusterConf.rlnRelayDynamic
assert rlnRelayConf.chainId == clusterConf.rlnRelayChainId
assert rlnRelayConf.epochSizeSec == clusterConf.rlnEpochSizeSec
assert rlnRelayConf.userMessageLimit == clusterConf.rlnRelayUserMessageLimit
check rlnRelayConf.ethContractAddress.string == contractAddress
check rlnRelayConf.dynamic == clusterConf.rlnRelayDynamic
check rlnRelayConf.chainId == clusterConf.rlnRelayChainId
check rlnRelayConf.epochSizeSec == clusterConf.rlnEpochSizeSec
check rlnRelayConf.userMessageLimit == clusterConf.rlnRelayUserMessageLimit
suite "Waku Conf - node key":
test "Node key is generated":
## Setup
var builder = WakuConfBuilder.init()
builder.withClusterId(1)
builder.discv5Conf.withUdpPort(9000)
builder.withRelayServiceRatio("50:50")
## Given
## When
let res = builder.build()
assert res.isOk(), $res.error
let conf = res.get()
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
assert conf.validate().isOk()
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
let pubkey = getPublicKey(conf.nodeKey)
assert pubkey.isOk()
@ -249,19 +228,18 @@ suite "Waku Conf - node key":
crypto.PrivateKey(scheme: Secp256k1, skkey: key)
var builder = WakuConfBuilder.init()
builder.withClusterId(1)
builder.discv5Conf.withUdpPort(9000)
builder.withRelayServiceRatio("50:50")
## Given
builder.withNodeKey(nodeKey)
## When
let res = builder.build()
assert res.isOk(), $res.error
let conf = res.get()
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
assert conf.validate().isOk()
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
assert utils.toHex(conf.nodeKey.getRawBytes().get()) ==
utils.toHex(nodeKey.getRawBytes().get()),
"Passed node key isn't in config:" & $nodeKey & $conf.nodeKey
@ -271,26 +249,24 @@ suite "Waku Conf - extMultiaddrs":
## Setup
var builder = WakuConfBuilder.init()
builder.withClusterId(1)
builder.discv5Conf.withUdpPort(9000)
builder.withRelayServiceRatio("50:50")
## Given
let multiaddrs =
@["/ip4/127.0.0.1/udp/9090/quic", "/ip6/::1/tcp/3217", "/dns4/foo.com/tcp/80"]
for m in multiaddrs:
builder.withExtMultiAddr(m)
builder.withExtMultiAddrs(multiaddrs)
## When
let res = builder.build()
assert res.isOk(), $res.error
let conf = res.get()
let resConf = builder.build()
assert resConf.isOk(), $resConf.error
let conf = resConf.get()
## Then
assert conf.validate().isOk()
assert multiaddrs.len == conf.extMultiaddrs.len
let resMultiaddrs = conf.extMultiaddrs.map(
let resValidate = conf.validate()
assert resValidate.isOk(), $resValidate.error
check multiaddrs.len == conf.networkConf.extMultiAddrs.len
let resMultiaddrs = conf.networkConf.extMultiAddrs.map(
proc(m: MultiAddress): string =
$m
)
for m in multiaddrs:
assert m in resMultiaddrs
check m in resMultiaddrs

View File

@ -36,7 +36,6 @@ import
../node/peer_manager/peer_store/waku_peer_storage,
../node/peer_manager/peer_store/migrations as peer_store_sqlite_migrations,
../waku_lightpush_legacy/common,
../common/utils/parse_size_units,
../common/rate_limit/setting,
../common/databases/dburl

View File

@ -12,7 +12,6 @@ import
../discovery/waku_discv5,
../node/waku_metrics,
../common/logging,
./networks_config,
../waku_enr/capabilities
export RlnRelayConf, RlnRelayCreds, RestServerConf, Discv5Conf, MetricsServerConf
@ -171,7 +170,8 @@ proc log*(conf: WakuConf) =
rlnRelayEthClientAddress = string(rlnRelayConf.ethClientAddress)
proc validateNodeKey(wakuConf: WakuConf): Result[void, string] =
# TODO
wakuConf.nodeKey.getPublicKey().isOkOr:
return err("Node key is invalid")
return ok()
proc validateShards(wakuConf: WakuConf): Result[void, string] =
@ -249,3 +249,4 @@ proc validate*(wakuConf: WakuConf): Result[void, string] =
?wakuConf.validateNodeKey()
?wakuConf.validateShards()
?wakuConf.validateNoEmptyStrings()
return ok()

View File

@ -64,7 +64,7 @@ macro with(builderType: untyped, argName: untyped, argType: untyped) =
## Generates
##
## ```
## proc withp2pPort*(builder: var WakuConfBuilder, p2pPort: uint16) =
## proc withp2pPort*(builder: var WakuConfBuilStoreServder, p2pPort: uint16) =
## builder.p2pPort = some(p2pPort.Port)
## ```
macro with(
@ -169,22 +169,15 @@ with(FilterServiceConfBuilder, subscriptionTimeout, uint16)
with(FilterServiceConfBuilder, maxCriteria, uint32)
proc build(b: FilterServiceConfBuilder): Result[Option[FilterServiceConf], string] =
if b.enabled.get(false):
if not b.enabled.get(false):
return ok(none(FilterServiceConf))
if b.maxPeersToServe.isNone():
return err("filter.maxPeersToServe is not specified")
if b.subscriptionTimeout.isNone():
return err("filter.subscriptionTimeout is not specified")
if b.maxCriteria.isNone():
return err("filter.maxCriteria is not specified")
return ok(
some(
FilterServiceConf(
maxPeersToServe: b.maxPeersToServe.get(),
subscriptionTimeout: b.subscriptionTimeout.get(),
maxCriteria: b.maxCriteria.get(),
maxPeersToServe: b.maxPeersToServe.get(500),
subscriptionTimeout: b.subscriptionTimeout.get(300),
maxCriteria: b.maxCriteria.get(1000),
)
)
)
@ -208,7 +201,7 @@ with(StoreSyncConfBuilder, intervalSec, uint32)
with(StoreSyncConfBuilder, relayJitterSec, uint32)
proc build(b: StoreSyncConfBuilder): Result[Option[StoreSyncConf], string] =
if b.enabled.get(false):
if not b.enabled.get(false):
return ok(none(StoreSyncConf))
if b.rangeSec.isNone():
@ -256,7 +249,7 @@ with(StoreServiceConfBuilder, retentionPolicy, string)
with(StoreServiceConfBuilder, resume, bool)
proc build(b: StoreServiceConfBuilder): Result[Option[StoreServiceConf], string] =
if b.enabled.get(false):
if not b.enabled.get(false):
return ok(none(StoreServiceConf))
if b.dbMigration.isNone():
@ -317,7 +310,7 @@ with(RestServerConfBuilder, admin, bool)
with(RestServerConfBuilder, relayCacheCapacity, uint32)
proc build(b: RestServerConfBuilder): Result[Option[RestServerConf], string] =
if b.enabled.get(false):
if not b.enabled.get(false):
return ok(none(RestServerConf))
if b.listenAddress.isNone():
@ -406,27 +399,17 @@ proc build(b: Discv5ConfBuilder): Result[Option[Discv5Conf], string] =
# Discv5 is useless without bootstrap nodes
if b.bootstrapNodes.len == 0:
return err("dicv5.bootstrapNodes is not specified")
if b.bitsPerHop.isNone():
return err("discv5.bitsPerHop is not specified")
if b.bucketIpLimit.isNone():
return err("discv5.bucketIpLimit is not specified")
if b.enrAutoUpdate.isNone():
return err("discv5.enrAutoUpdate is not specified")
if b.tableIpLimit.isNone():
return err("discv5.tableIpLimit is not specified")
if b.udpPort.isNone():
return err("discv5.udpPort is not specified")
return ok(
some(
Discv5Conf(
bootstrapNodes: b.bootstrapNodes,
bitsPerHop: b.bitsPerHop.get(),
bucketIpLimit: b.bucketIpLimit.get(),
bitsPerHop: b.bitsPerHop.get(1),
bucketIpLimit: b.bucketIpLimit.get(2),
discv5Only: b.discv5Only.get(false),
enrAutoUpdate: b.enrAutoUpdate.get(),
tableIpLimit: b.tableIpLimit.get(),
udpPort: b.udpPort.get(),
enrAutoUpdate: b.enrAutoUpdate.get(true),
tableIpLimit: b.tableIpLimit.get(10),
udpPort: b.udpPort.get(9000.Port),
)
)
)
@ -502,22 +485,15 @@ with(MetricsServerConfBuilder, httpPort, Port, uint16)
with(MetricsServerConfBuilder, logging, bool)
proc build(b: MetricsServerConfBuilder): Result[Option[MetricsServerConf], string] =
if b.enabled.get(false):
if not b.enabled.get(false):
return ok(none(MetricsServerConf))
if b.httpAddress.isNone():
return err("metricsServer.httpAddress is not specified")
if b.httpPort.isNone():
return err("metricsServer.httpPort is not specified")
if b.logging.isNone():
return err("metricsServer.logging is not specified")
return ok(
some(
MetricsServerConf(
httpAddress: b.httpAddress.get(),
httpPort: b.httpPort.get(),
logging: b.logging.get(),
httpAddress: b.httpAddress.get(parseIpAddress("127.0.0.1")),
httpPort: b.httpPort.get(8008.Port),
logging: b.logging.get(false),
)
)
)
@ -711,44 +687,45 @@ proc applyClusterConf(builder: var WakuConfBuilder) =
# Apply relay parameters
if builder.relay.get(false) and clusterConf.rlnRelay:
var rlnRelayConf = builder.rlnRelayConf
if rlnRelayConf.enabled.isNone:
rlnRelayConf.withEnabled(true)
if builder.rlnRelayConf.enabled.isNone:
builder.rlnRelayConf.withEnabled(true)
else:
warn "RLN Relay was manually provided alongside a cluster conf",
used = rlnRelayConf.enabled, discarded = clusterConf.rlnRelay
used = builder.rlnRelayConf.enabled, discarded = clusterConf.rlnRelay
if rlnRelayConf.ethContractAddress.isNone:
rlnRelayConf.withEthContractAddress(clusterConf.rlnRelayEthContractAddress)
if builder.rlnRelayConf.ethContractAddress.isNone:
builder.rlnRelayConf.withEthContractAddress(
clusterConf.rlnRelayEthContractAddress
)
else:
warn "RLN Relay ETH Contract Address was manually provided alongside a cluster conf",
used = rlnRelayConf.ethContractAddress.get().string,
used = builder.rlnRelayConf.ethContractAddress.get().string,
discarded = clusterConf.rlnRelayEthContractAddress.string
if rlnRelayConf.chainId.isNone:
rlnRelayConf.withChainId(clusterConf.rlnRelayChainId)
if builder.rlnRelayConf.chainId.isNone:
builder.rlnRelayConf.withChainId(clusterConf.rlnRelayChainId)
else:
warn "RLN Relay Chain Id was manually provided alongside a cluster conf",
used = rlnRelayConf.chainId, discarded = clusterConf.rlnRelayChainId
used = builder.rlnRelayConf.chainId, discarded = clusterConf.rlnRelayChainId
if rlnRelayConf.dynamic.isNone:
rlnRelayConf.withDynamic(clusterConf.rlnRelayDynamic)
if builder.rlnRelayConf.dynamic.isNone:
builder.rlnRelayConf.withDynamic(clusterConf.rlnRelayDynamic)
else:
warn "RLN Relay Dynamic was manually provided alongside a cluster conf",
used = rlnRelayConf.dynamic, discarded = clusterConf.rlnRelayDynamic
used = builder.rlnRelayConf.dynamic, discarded = clusterConf.rlnRelayDynamic
if rlnRelayConf.epochSizeSec.isNone:
rlnRelayConf.withEpochSizeSec(clusterConf.rlnEpochSizeSec)
if builder.rlnRelayConf.epochSizeSec.isNone:
builder.rlnRelayConf.withEpochSizeSec(clusterConf.rlnEpochSizeSec)
else:
warn "RLN Epoch Size in Seconds was manually provided alongside a cluster conf",
used = rlnRelayConf.epochSizeSec, discarded = clusterConf.rlnEpochSizeSec
used = builder.rlnRelayConf.epochSizeSec,
discarded = clusterConf.rlnEpochSizeSec
if rlnRelayConf.userMessageLimit.isNone:
rlnRelayConf.withUserMessageLimit(clusterConf.rlnRelayUserMessageLimit)
if builder.rlnRelayConf.userMessageLimit.isNone:
builder.rlnRelayConf.withUserMessageLimit(clusterConf.rlnRelayUserMessageLimit)
else:
warn "RLN Relay Dynamic was manually provided alongside a cluster conf",
used = rlnRelayConf.userMessageLimit,
used = builder.rlnRelayConf.userMessageLimit,
discarded = clusterConf.rlnRelayUserMessageLimit
# End Apply relay parameters
@ -766,14 +743,12 @@ proc applyClusterConf(builder: var WakuConfBuilder) =
used = builder.numShardsInNetwork, discarded = clusterConf.numShardsInNetwork
if clusterConf.discv5Discovery:
var discv5ConfBuilder = builder.discv5Conf
if builder.discv5Conf.enabled.isNone:
builder.discv5Conf.withEnabled(clusterConf.discv5Discovery)
if discv5ConfBuilder.enabled.isNone:
discv5ConfBuilder.withEnabled(clusterConf.discv5Discovery)
if discv5ConfBuilder.bootstrapNodes.len == 0 and
if builder.discv5Conf.bootstrapNodes.len == 0 and
clusterConf.discv5BootstrapNodes.len > 0:
discv5ConfBuilder.withBootstrapNodes(clusterConf.discv5BootstrapNodes)
builder.discv5Conf.withBootstrapNodes(clusterConf.discv5BootstrapNodes)
proc build*(
builder: var WakuConfBuilder, rng: ref HmacDrbgContext = crypto.newRng()
@ -976,12 +951,6 @@ proc build*(
warn "Max Connections was not specified, defaulting to 300"
300
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")
@ -993,15 +962,6 @@ proc build*(
# TODO: is there a strategy for experimental features? delete vs promote
let relayShardedPeerManagement = builder.relayShardedPeerManagement.get(false)
if builder.circuitRelayClient.isNone():
return err("circuitRelayClient is not specified")
if builder.keepAlive.isNone():
return err("keepAlive is not specified")
if builder.p2pReliability.isNone():
return err("p2pReliability is not specified")
let wakuFlags = CapabilitiesBitfield.init(
lightpush = lightPush,
filter = filterServiceConf.isSome,
@ -1010,61 +970,63 @@ proc build*(
sync = storeServiceConf.isSome() and storeServiceConf.get().storeSyncConf.isSome,
)
return ok(
WakuConf(
# confs
storeServiceConf: storeServiceConf,
filterServiceConf: filterServiceConf,
discv5Conf: discv5Conf,
rlnRelayConf: rlnRelayConf,
metricsServerConf: metricsServerConf,
restServerConf: restServerConf,
dnsDiscoveryConf: dnsDiscoveryConf,
# end confs
nodeKey: nodeKey,
clusterId: builder.clusterId.get(),
numShardsInNetwork: numShardsInNetwork,
contentTopics: contentTopics,
shards: shards,
protectedShards: protectedShards,
relay: relay,
lightPush: lightPush,
peerExchange: peerExchange,
rendezvous: rendezvous,
remoteStoreNode: builder.remoteStoreNode,
remoteLightPushNode: builder.remoteLightPushNode,
remoteFilterNode: builder.remoteFilterNode,
remotePeerExchangeNode: builder.remotePeerExchangeNode,
relayPeerExchange: relayPeerExchange,
maxMessageSizeBytes: maxMessageSizeBytes,
logLevel: logLevel,
logFormat: logFormat,
# TODO: Separate builders
networkConf: NetworkConfig(
natStrategy: natStrategy,
p2pTcpPort: p2pTcpPort,
dns4DomainName: dns4DomainName,
p2pListenAddress: p2pListenAddress,
extMultiAddrs: extMultiAddrs,
extMultiAddrsOnly: extMultiAddrsOnly,
),
portsShift: portsShift,
webSocketConf: webSocketConf,
dnsAddrs: dnsAddrs,
dnsAddrsNameServers: dnsAddrsNameServers,
peerPersistence: peerPersistence,
peerStoreCapacity: builder.peerStoreCapacity,
maxConnections: maxConnections,
agentString: agentString,
colocationLimit: colocationLimit,
maxRelayPeers: builder.maxRelayPeers,
relayServiceRatio: relayServiceRatio,
rateLimits: rateLimits,
circuitRelayClient: builder.circuitRelayClient.get(),
keepAlive: builder.keepAlive.get(),
staticNodes: builder.staticNodes,
relayShardedPeerManagement: relayShardedPeerManagement,
p2pReliability: builder.p2pReliability.get(),
wakuFlags: wakuFlags,
)
let wakuConf = WakuConf(
# confs
storeServiceConf: storeServiceConf,
filterServiceConf: filterServiceConf,
discv5Conf: discv5Conf,
rlnRelayConf: rlnRelayConf,
metricsServerConf: metricsServerConf,
restServerConf: restServerConf,
dnsDiscoveryConf: dnsDiscoveryConf,
# end confs
nodeKey: nodeKey,
clusterId: builder.clusterId.get(),
numShardsInNetwork: numShardsInNetwork,
contentTopics: contentTopics,
shards: shards,
protectedShards: protectedShards,
relay: relay,
lightPush: lightPush,
peerExchange: peerExchange,
rendezvous: rendezvous,
remoteStoreNode: builder.remoteStoreNode,
remoteLightPushNode: builder.remoteLightPushNode,
remoteFilterNode: builder.remoteFilterNode,
remotePeerExchangeNode: builder.remotePeerExchangeNode,
relayPeerExchange: relayPeerExchange,
maxMessageSizeBytes: maxMessageSizeBytes,
logLevel: logLevel,
logFormat: logFormat,
# TODO: Separate builders
networkConf: NetworkConfig(
natStrategy: natStrategy,
p2pTcpPort: p2pTcpPort,
dns4DomainName: dns4DomainName,
p2pListenAddress: p2pListenAddress,
extMultiAddrs: extMultiAddrs,
extMultiAddrsOnly: extMultiAddrsOnly,
),
portsShift: portsShift,
webSocketConf: webSocketConf,
dnsAddrs: dnsAddrs,
dnsAddrsNameServers: dnsAddrsNameServers,
peerPersistence: peerPersistence,
peerStoreCapacity: builder.peerStoreCapacity,
maxConnections: maxConnections,
agentString: agentString,
colocationLimit: colocationLimit,
maxRelayPeers: builder.maxRelayPeers,
relayServiceRatio: builder.relayServiceRatio.get("60:40"),
rateLimits: rateLimits,
circuitRelayClient: builder.circuitRelayClient.get(false),
keepAlive: builder.keepAlive.get(true),
staticNodes: builder.staticNodes,
relayShardedPeerManagement: relayShardedPeerManagement,
p2pReliability: builder.p2pReliability.get(false),
wakuFlags: wakuFlags,
)
?wakuConf.validate()
return ok(wakuConf)