mirror of https://github.com/waku-org/nwaku.git
chore: move code from wakunode2 to a more generic place, waku (#2670)
* testlib/wakunode.nim: not use cluster-id == 1 to avoid test rln by default
This commit is contained in:
parent
6c3ad50455
commit
840e012294
|
@ -17,7 +17,6 @@ import
|
||||||
../../tools/rln_db_inspector/rln_db_inspector,
|
../../tools/rln_db_inspector/rln_db_inspector,
|
||||||
../../waku/common/logging,
|
../../waku/common/logging,
|
||||||
../../waku/factory/external_config,
|
../../waku/factory/external_config,
|
||||||
../../waku/factory/networks_config,
|
|
||||||
../../waku/factory/waku,
|
../../waku/factory/waku,
|
||||||
../../waku/node/health_monitor,
|
../../waku/node/health_monitor,
|
||||||
../../waku/node/waku_metrics,
|
../../waku/node/waku_metrics,
|
||||||
|
@ -26,31 +25,7 @@ import
|
||||||
logScope:
|
logScope:
|
||||||
topics = "wakunode main"
|
topics = "wakunode main"
|
||||||
|
|
||||||
proc logConfig(conf: WakuNodeConf) =
|
const git_version* {.strdefine.} = "n/a"
|
||||||
info "Configuration: Enabled protocols",
|
|
||||||
relay = conf.relay,
|
|
||||||
rlnRelay = conf.rlnRelay,
|
|
||||||
store = conf.store,
|
|
||||||
filter = conf.filter,
|
|
||||||
lightpush = conf.lightpush,
|
|
||||||
peerExchange = conf.peerExchange
|
|
||||||
|
|
||||||
info "Configuration. Network", cluster = conf.clusterId, maxPeers = conf.maxRelayPeers
|
|
||||||
|
|
||||||
for shard in conf.pubsubTopics:
|
|
||||||
info "Configuration. Shards", shard = shard
|
|
||||||
|
|
||||||
for i in conf.discv5BootstrapNodes:
|
|
||||||
info "Configuration. Bootstrap nodes", node = i
|
|
||||||
|
|
||||||
if conf.rlnRelay and conf.rlnRelayDynamic:
|
|
||||||
info "Configuration. Validation",
|
|
||||||
mechanism = "onchain rln",
|
|
||||||
contract = conf.rlnRelayEthContractAddress,
|
|
||||||
maxMessageSize = conf.maxMessageSize,
|
|
||||||
rlnEpochSizeSec = conf.rlnEpochSizeSec,
|
|
||||||
rlnRelayUserMessageLimit = conf.rlnRelayUserMessageLimit,
|
|
||||||
rlnRelayEthClientAddress = string(conf.rlnRelayEthClientAddress)
|
|
||||||
|
|
||||||
{.pop.}
|
{.pop.}
|
||||||
# @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
# @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
||||||
|
@ -65,15 +40,11 @@ when isMainModule:
|
||||||
|
|
||||||
const versionString = "version / git commit hash: " & waku.git_version
|
const versionString = "version / git commit hash: " & waku.git_version
|
||||||
|
|
||||||
let confRes = WakuNodeConf.load(version = versionString)
|
var conf = WakuNodeConf.load(version = versionString).valueOr:
|
||||||
if confRes.isErr():
|
error "failure while loading the configuration", error = error
|
||||||
error "failure while loading the configuration", error = confRes.error
|
|
||||||
quit(QuitFailure)
|
quit(QuitFailure)
|
||||||
|
|
||||||
var conf = confRes.get()
|
|
||||||
|
|
||||||
## Logging setup
|
## Logging setup
|
||||||
|
|
||||||
# Adhere to NO_COLOR initiative: https://no-color.org/
|
# Adhere to NO_COLOR initiative: https://no-color.org/
|
||||||
let color =
|
let color =
|
||||||
try:
|
try:
|
||||||
|
@ -90,38 +61,6 @@ when isMainModule:
|
||||||
of inspectRlnDb:
|
of inspectRlnDb:
|
||||||
doInspectRlnDb(conf)
|
doInspectRlnDb(conf)
|
||||||
of noCommand:
|
of noCommand:
|
||||||
case conf.clusterId
|
|
||||||
# cluster-id=0
|
|
||||||
of 0:
|
|
||||||
let clusterZeroConf = ClusterConf.ClusterZeroConf()
|
|
||||||
conf.pubsubTopics = clusterZeroConf.pubsubTopics
|
|
||||||
# TODO: Write some template to "merge" the configs
|
|
||||||
# cluster-id=1 (aka The Waku Network)
|
|
||||||
of 1:
|
|
||||||
let twnClusterConf = ClusterConf.TheWakuNetworkConf()
|
|
||||||
if len(conf.shards) != 0:
|
|
||||||
conf.pubsubTopics = conf.shards.mapIt(twnClusterConf.pubsubTopics[it.uint16])
|
|
||||||
else:
|
|
||||||
conf.pubsubTopics = twnClusterConf.pubsubTopics
|
|
||||||
|
|
||||||
# Override configuration
|
|
||||||
conf.maxMessageSize = twnClusterConf.maxMessageSize
|
|
||||||
conf.clusterId = twnClusterConf.clusterId
|
|
||||||
conf.rlnRelay = twnClusterConf.rlnRelay
|
|
||||||
conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress
|
|
||||||
conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic
|
|
||||||
conf.rlnRelayBandwidthThreshold = twnClusterConf.rlnRelayBandwidthThreshold
|
|
||||||
conf.discv5Discovery = twnClusterConf.discv5Discovery
|
|
||||||
conf.discv5BootstrapNodes =
|
|
||||||
conf.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes
|
|
||||||
conf.rlnEpochSizeSec = twnClusterConf.rlnEpochSizeSec
|
|
||||||
conf.rlnRelayUserMessageLimit = twnClusterConf.rlnRelayUserMessageLimit
|
|
||||||
else:
|
|
||||||
discard
|
|
||||||
|
|
||||||
info "Running nwaku node", version = waku.git_version
|
|
||||||
logConfig(conf)
|
|
||||||
|
|
||||||
# NOTE: {.threadvar.} is used to make the global variable GC safe for the closure uses it
|
# NOTE: {.threadvar.} is used to make the global variable GC safe for the closure uses it
|
||||||
# It will always be called from main thread anyway.
|
# It will always be called from main thread anyway.
|
||||||
# Ref: https://nim-lang.org/docs/manual.html#threads-gc-safety
|
# Ref: https://nim-lang.org/docs/manual.html#threads-gc-safety
|
||||||
|
|
|
@ -26,6 +26,9 @@ type Context* = object
|
||||||
eventCallback*: pointer
|
eventCallback*: pointer
|
||||||
eventUserdata*: pointer
|
eventUserdata*: pointer
|
||||||
|
|
||||||
|
const git_version* {.strdefine.} = "n/a"
|
||||||
|
const versionString = "version / git commit hash: " & waku.git_version
|
||||||
|
|
||||||
# To control when the thread is running
|
# To control when the thread is running
|
||||||
var running: Atomic[bool]
|
var running: Atomic[bool]
|
||||||
|
|
||||||
|
@ -47,6 +50,7 @@ proc waku_init() =
|
||||||
proc run(ctx: ptr Context) {.thread.} =
|
proc run(ctx: ptr Context) {.thread.} =
|
||||||
## This is the worker thread body. This thread runs the Waku node
|
## This is the worker thread body. This thread runs the Waku node
|
||||||
## and attends library user requests (stop, connect_to, etc.)
|
## and attends library user requests (stop, connect_to, etc.)
|
||||||
|
info "Starting Waku", version = versionString
|
||||||
|
|
||||||
var waku: Waku
|
var waku: Waku
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,8 @@ import
|
||||||
# Waku node
|
# Waku node
|
||||||
|
|
||||||
proc defaultTestWakuNodeConf*(): WakuNodeConf =
|
proc defaultTestWakuNodeConf*(): WakuNodeConf =
|
||||||
|
## set cluster-id == 0 to not use TWN as that needs a background blockchain (e.g. anvil)
|
||||||
|
## running because RLN is mounted if TWN (cluster-id == 1) is configured.
|
||||||
WakuNodeConf(
|
WakuNodeConf(
|
||||||
cmd: noCommand,
|
cmd: noCommand,
|
||||||
tcpPort: Port(60000),
|
tcpPort: Port(60000),
|
||||||
|
@ -33,7 +35,7 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf =
|
||||||
nat: "any",
|
nat: "any",
|
||||||
maxConnections: 50,
|
maxConnections: 50,
|
||||||
maxMessageSize: "1024 KiB",
|
maxMessageSize: "1024 KiB",
|
||||||
clusterId: 1.uint32,
|
clusterId: 0.uint32,
|
||||||
pubsubTopics: @["/waku/2/rs/1/0"],
|
pubsubTopics: @["/waku/2/rs/1/0"],
|
||||||
relay: true,
|
relay: true,
|
||||||
storeMessageDbUrl: "sqlite://store.sqlite3",
|
storeMessageDbUrl: "sqlite://store.sqlite3",
|
||||||
|
|
|
@ -18,6 +18,7 @@ import
|
||||||
metrics,
|
metrics,
|
||||||
metrics/chronos_httpserver
|
metrics/chronos_httpserver
|
||||||
import
|
import
|
||||||
|
../../waku/common/logging,
|
||||||
../../waku/waku_core,
|
../../waku/waku_core,
|
||||||
../../waku/waku_node,
|
../../waku/waku_node,
|
||||||
../../waku/node/waku_metrics,
|
../../waku/node/waku_metrics,
|
||||||
|
@ -41,6 +42,7 @@ import
|
||||||
../../waku/waku_rln_relay,
|
../../waku/waku_rln_relay,
|
||||||
../../waku/waku_store,
|
../../waku/waku_store,
|
||||||
../../waku/waku_filter_v2,
|
../../waku/waku_filter_v2,
|
||||||
|
../../waku/factory/networks_config,
|
||||||
../../waku/factory/node_factory,
|
../../waku/factory/node_factory,
|
||||||
../../waku/factory/internal_config,
|
../../waku/factory/internal_config,
|
||||||
../../waku/factory/external_config
|
../../waku/factory/external_config
|
||||||
|
@ -65,6 +67,32 @@ type Waku* = object
|
||||||
restServer*: WakuRestServerRef
|
restServer*: WakuRestServerRef
|
||||||
metricsServer*: MetricsHttpServerRef
|
metricsServer*: MetricsHttpServerRef
|
||||||
|
|
||||||
|
proc logConfig(conf: WakuNodeConf) =
|
||||||
|
info "Configuration: Enabled protocols",
|
||||||
|
relay = conf.relay,
|
||||||
|
rlnRelay = conf.rlnRelay,
|
||||||
|
store = conf.store,
|
||||||
|
filter = conf.filter,
|
||||||
|
lightpush = conf.lightpush,
|
||||||
|
peerExchange = conf.peerExchange
|
||||||
|
|
||||||
|
info "Configuration. Network", cluster = conf.clusterId, maxPeers = conf.maxRelayPeers
|
||||||
|
|
||||||
|
for shard in conf.pubsubTopics:
|
||||||
|
info "Configuration. Shards", shard = shard
|
||||||
|
|
||||||
|
for i in conf.discv5BootstrapNodes:
|
||||||
|
info "Configuration. Bootstrap nodes", node = i
|
||||||
|
|
||||||
|
if conf.rlnRelay and conf.rlnRelayDynamic:
|
||||||
|
info "Configuration. Validation",
|
||||||
|
mechanism = "onchain rln",
|
||||||
|
contract = conf.rlnRelayEthContractAddress,
|
||||||
|
maxMessageSize = conf.maxMessageSize,
|
||||||
|
rlnEpochSizeSec = conf.rlnEpochSizeSec,
|
||||||
|
rlnRelayUserMessageLimit = conf.rlnRelayUserMessageLimit,
|
||||||
|
rlnRelayEthClientAddress = string(conf.rlnRelayEthClientAddress)
|
||||||
|
|
||||||
func version*(waku: Waku): string =
|
func version*(waku: Waku): string =
|
||||||
waku.version
|
waku.version
|
||||||
|
|
||||||
|
@ -74,6 +102,43 @@ proc init*(T: type Waku, conf: WakuNodeConf): Result[Waku, string] =
|
||||||
var confCopy = conf
|
var confCopy = conf
|
||||||
let rng = crypto.newRng()
|
let rng = crypto.newRng()
|
||||||
|
|
||||||
|
logging.setupLogLevel(confCopy.logLevel)
|
||||||
|
|
||||||
|
case confCopy.clusterId
|
||||||
|
|
||||||
|
# cluster-id=0
|
||||||
|
of 0:
|
||||||
|
let clusterZeroConf = ClusterConf.ClusterZeroConf()
|
||||||
|
confCopy.pubsubTopics = clusterZeroConf.pubsubTopics
|
||||||
|
# TODO: Write some template to "merge" the configs
|
||||||
|
|
||||||
|
# cluster-id=1 (aka The Waku Network)
|
||||||
|
of 1:
|
||||||
|
let twnClusterConf = ClusterConf.TheWakuNetworkConf()
|
||||||
|
if len(confCopy.shards) != 0:
|
||||||
|
confCopy.pubsubTopics =
|
||||||
|
confCopy.shards.mapIt(twnClusterConf.pubsubTopics[it.uint16])
|
||||||
|
else:
|
||||||
|
confCopy.pubsubTopics = twnClusterConf.pubsubTopics
|
||||||
|
|
||||||
|
# Override configuration
|
||||||
|
confCopy.maxMessageSize = twnClusterConf.maxMessageSize
|
||||||
|
confCopy.clusterId = twnClusterConf.clusterId
|
||||||
|
confCopy.rlnRelay = twnClusterConf.rlnRelay
|
||||||
|
confCopy.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress
|
||||||
|
confCopy.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic
|
||||||
|
confCopy.rlnRelayBandwidthThreshold = twnClusterConf.rlnRelayBandwidthThreshold
|
||||||
|
confCopy.discv5Discovery = twnClusterConf.discv5Discovery
|
||||||
|
confCopy.discv5BootstrapNodes =
|
||||||
|
confCopy.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes
|
||||||
|
confCopy.rlnEpochSizeSec = twnClusterConf.rlnEpochSizeSec
|
||||||
|
confCopy.rlnRelayUserMessageLimit = twnClusterConf.rlnRelayUserMessageLimit
|
||||||
|
else:
|
||||||
|
discard
|
||||||
|
|
||||||
|
info "Running nwaku node", version = git_version
|
||||||
|
logConfig(confCopy)
|
||||||
|
|
||||||
if not confCopy.nodekey.isSome():
|
if not confCopy.nodekey.isSome():
|
||||||
let keyRes = crypto.PrivateKey.random(Secp256k1, rng[])
|
let keyRes = crypto.PrivateKey.random(Secp256k1, rng[])
|
||||||
if keyRes.isErr():
|
if keyRes.isErr():
|
||||||
|
|
Loading…
Reference in New Issue