Skip to content

Commit

Permalink
Fix nim-waku config inconsistencies (#543)
Browse files Browse the repository at this point in the history
* Fix nim-waku config inconsistencies

* Revert staticnode to singular form

* Fix reference to deprecated config item

* Revert nodekey config item to be consistent with Waku v1
  • Loading branch information
jm-clius authored May 11, 2021
1 parent 4f132a1 commit 50f2235
Show file tree
Hide file tree
Showing 6 changed files with 154 additions and 73 deletions.
8 changes: 4 additions & 4 deletions examples/v2/chat2.nim
Original file line number Diff line number Diff line change
Expand Up @@ -242,15 +242,15 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
(extIp, extTcpPort, extUdpPort) = setupNat(conf.nat, clientId,
Port(uint16(conf.tcpPort) + conf.portsShift),
Port(uint16(conf.udpPort) + conf.portsShift))
node = WakuNode.init(conf.nodeKey, conf.listenAddress,
node = WakuNode.init(conf.nodekey, conf.listenAddress,
Port(uint16(conf.tcpPort) + conf.portsShift), extIp, extTcpPort)

await node.start()

if conf.filternode != "":
node.mountRelay(conf.topics.split(" "), rlnRelayEnabled = conf.rlnrelay, keepAlive = conf.keepAlive)
node.mountRelay(conf.topics.split(" "), rlnRelayEnabled = (conf.rlnrelay_depr or conf.rlnRelay), keepAlive = conf.keepAlive) # @TODO remove deprecated config item
else:
node.mountRelay(@[], rlnRelayEnabled = conf.rlnrelay, keepAlive = conf.keepAlive)
node.mountRelay(@[], rlnRelayEnabled = (conf.rlnrelay_depr or conf.rlnRelay), keepAlive = conf.keepAlive) # @TODO remove deprecated config item

let nick = await readNick(transp)
echo "Welcome, " & nick & "!"
Expand All @@ -277,7 +277,7 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
node.mountSwap()

if (conf.storenode != "") or (conf.store == true):
node.mountStore(persistMessages = conf.persistmessages)
node.mountStore(persistMessages = conf.persistMessages)

var storenode: string

Expand Down
1 change: 1 addition & 0 deletions examples/v2/matterbridge/config_chat2bridge.nim
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ type
name: "metrics-server-port" .}: uint16

### Waku v2 options

staticnodes* {.
desc: "Multiaddr of peer to directly connect with. Argument may be repeated"
name: "staticnode" }: seq[string]
Expand Down
44 changes: 34 additions & 10 deletions waku/common/config_bridge.nim
Original file line number Diff line number Diff line change
Expand Up @@ -77,35 +77,64 @@ type
name: "metrics-server-port" .}: uint16

### Waku v1 options
fleetv1* {.
# @TODO: deprecate this item. Name changed from `fleetv1` -> `fleet-v1`
fleetv1_depr* {.
desc: "Select the Waku v1 fleet to connect to"
defaultValue: FleetV1.none
name: "fleetv1" .}: FleetV1

fleetV1* {.
desc: "Select the Waku v1 fleet to connect to"
defaultValue: FleetV1.none
name: "fleet-v1" .}: FleetV1

staticnodesv1* {.
# @TODO: deprecate this item. Name changed from `staticnodev1` -> `staticnodes-v1`
staticnodesv1_depr* {.
desc: "Enode URL to directly connect with. Argument may be repeated"
name: "staticnodev1" .}: seq[string]

staticnodesV1* {.
desc: "Enode URL to directly connect with. Argument may be repeated"
name: "staticnode-v1" .}: seq[string]

nodekeyv1* {.
# @TODO: deprecate this item. Name changed from `nodekeyv1` -> `node-key-v1`
nodekeyv1_depr* {.
desc: "DevP2P node private key as hex",
# TODO: can the rng be passed in somehow via Load?
defaultValue: keys.KeyPair.random(keys.newRng()[])
name: "nodekeyv1" .}: keys.KeyPair

nodekeyV1* {.
desc: "DevP2P node private key as hex",
# TODO: can the rng be passed in somehow via Load?
defaultValue: keys.KeyPair.random(keys.newRng()[])
name: "nodekey-v1" .}: keys.KeyPair

wakuPow* {.
desc: "PoW requirement of Waku node.",
defaultValue: 0.002
name: "waku-pow" .}: float64

### Waku v2 options
staticnodesv2* {.
# @TODO: deprecate this item. Name changed from `staticnodev2` -> `staticnodes-v2`
staticnodesv2_depr* {.
desc: "Multiaddr of peer to directly connect with. Argument may be repeated"
name: "staticnodev2" }: seq[string]

staticnodesV2* {.
desc: "Multiaddr of peer to directly connect with. Argument may be repeated"
name: "staticnode-v2" }: seq[string]

nodekeyv2* {.
# @TODO: deprecate this item. Name changed from `nodekeyv2` -> `node-key-v2`
nodekeyv2_depr* {.
desc: "P2P node private key as hex"
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
name: "nodekeyv2" }: crypto.PrivateKey

nodekeyV2* {.
desc: "P2P node private key as hex"
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
name: "nodekey-v2" }: crypto.PrivateKey

topics* {.
desc: "Default topics to subscribe to (space separated list)"
Expand All @@ -116,11 +145,6 @@ type
desc: "Flag whether to start store protocol",
defaultValue: true
name: "store" }: bool

persistmessages* {.
desc: "Enable message persistence: true|false",
defaultValue: false
name: "persist-messages" }: bool

filter* {.
desc: "Flag whether to start filter protocol",
Expand Down
26 changes: 17 additions & 9 deletions waku/common/wakubridge.nim
Original file line number Diff line number Diff line change
Expand Up @@ -200,32 +200,40 @@ when isMainModule:
Port(uint16(conf.udpPort) + conf.portsShift))

let
bridge = WakuBridge.new(nodev1Key = conf.nodekeyv1,
bridge = WakuBridge.new(nodev1Key = conf.nodekeyv1_depr, # @TODO remove deprecated config item
nodev1Address = nodev1Address,
powRequirement = conf.wakuPow,
rng = rng,
nodev2Key = conf.nodeKeyv2,
nodev2Key = conf.nodekeyv2_depr, # @TODO remove deprecated config item
nodev2BindIp = conf.listenAddress, nodev2BindPort = Port(uint16(conf.libp2pTcpPort) + conf.portsShift),
nodev2ExtIp = nodev2ExtIp, nodev2ExtPort = nodev2ExtPort)

waitFor bridge.start()

# Now load rest of config
# Optionally direct connect nodev1 with a set of nodes
if conf.staticnodesv1.len > 0: connectToNodes(bridge.nodev1, conf.staticnodesv1)
elif conf.fleetv1 == prod: connectToNodes(bridge.nodev1, WhisperNodes)
elif conf.fleetv1 == staging: connectToNodes(bridge.nodev1, WhisperNodesStaging)
elif conf.fleetv1 == test: connectToNodes(bridge.nodev1, WhisperNodesTest)
# @TODO remove deprecated config items
if conf.staticnodesv1_depr.len > 0: connectToNodes(bridge.nodev1, conf.staticnodesv1_depr)
elif conf.fleetv1_depr == prod: connectToNodes(bridge.nodev1, WhisperNodes)
elif conf.fleetv1_depr == staging: connectToNodes(bridge.nodev1, WhisperNodesStaging)
elif conf.fleetv1_depr == test: connectToNodes(bridge.nodev1, WhisperNodesTest)

if conf.staticnodesV1.len > 0: connectToNodes(bridge.nodev1, conf.staticnodesV1)
elif conf.fleetV1 == prod: connectToNodes(bridge.nodev1, WhisperNodes)
elif conf.fleetV1 == staging: connectToNodes(bridge.nodev1, WhisperNodesStaging)
elif conf.fleetV1 == test: connectToNodes(bridge.nodev1, WhisperNodesTest)

# Mount configured Waku v2 protocols
if conf.store:
mountStore(bridge.nodev2, persistMessages = conf.persistmessages)
mountStore(bridge.nodev2, persistMessages = false) # Bridge does not persist messages

if conf.filter:
mountFilter(bridge.nodev2)

if conf.staticnodesv2.len > 0:
waitFor connectToNodes(bridge.nodev2, conf.staticnodesv2)
if conf.staticnodesv2_depr.len > 0: # @TODO remove deprecated config item
waitFor connectToNodes(bridge.nodev2, conf.staticnodesv2_depr)
elif conf.staticnodesV2.len > 0:
waitFor connectToNodes(bridge.nodev2, conf.staticnodesV2)

if conf.storenode != "":
setStorePeer(bridge.nodev2, conf.storenode)
Expand Down
125 changes: 83 additions & 42 deletions waku/v2/node/config.nim
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,17 @@ import

type
WakuNodeConf* = object
## General node config

logLevel* {.
desc: "Sets the log level."
defaultValue: LogLevel.INFO
name: "log-level" }: LogLevel

nodekey* {.
desc: "P2P node private key as 64 char hex string.",
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
name: "nodekey" }: crypto.PrivateKey

listenAddress* {.
defaultValue: defaultListenAddress(config)
Expand All @@ -38,81 +45,107 @@ type
desc: "Specify method to use for determining public address. " &
"Must be one of: any, none, upnp, pmp, extip:<IP>."
defaultValue: "any" }: string

## Persistence config

staticnodes* {.
desc: "Peer multiaddr to directly connect with. Argument may be repeated."
name: "staticnode" }: seq[string]
# @TODO: deprecate this item. Name changed from `dbpath` -> `db-path`
dbpath_depr* {.
desc: "The database path for peristent storage",
defaultValue: ""
name: "dbpath" }: string

peerpersist* {.
dbPath* {.
desc: "The database path for peristent storage",
defaultValue: ""
name: "db-path" }: string

# @TODO: deprecate this item. Name changed from `peerpersist` -> `persist-peers`
peerpersist_depr* {.
desc: "Enable peer persistence: true|false",
defaultValue: false
name: "peerpersist" }: bool

storenode* {.
desc: "Peer multiaddr to query for storage.",
defaultValue: ""
name: "storenode" }: string

persistmessages* {.
persistPeers* {.
desc: "Enable peer persistence: true|false",
defaultValue: false
name: "persist-peers" }: bool
persistMessages* {.
desc: "Enable message persistence: true|false",
defaultValue: false
name: "persist-messages" }: bool

store* {.
desc: "Enable store protocol: true|false",
defaultValue: true
name: "store" }: bool

filter* {.
desc: "Enable filter protocol: true|false",
defaultValue: false
name: "filter" }: bool
## Relay config

relay* {.
desc: "Enable relay protocol: true|false",
defaultValue: true
name: "relay" }: bool

rlnrelay* {.
# @TODO: deprecate this item. Name changed from `rlnrelay` -> `rln-relay`
rlnrelay_depr* {.
desc: "Enable spam protection through rln-relay: true|false",
defaultValue: false
name: "rlnrelay" }: bool

rlnRelay* {.
desc: "Enable spam protection through rln-relay: true|false",
defaultValue: false
name: "rln-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
name: "keep-alive" }: bool

topics* {.
desc: "Default topics to subscribe to (space separated list)."
defaultValue: "/waku/2/default-waku/proto"
name: "topics" .}: string

## 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

## Filter config

filter* {.
desc: "Enable filter protocol: true|false",
defaultValue: false
name: "filter" }: bool

filternode* {.
desc: "Peer multiaddr to request content filtering of messages.",
defaultValue: ""
name: "filternode" }: string

## Swap config

swap* {.
desc: "Enable swap protocol: true|false",
defaultValue: false
name: "swap" }: bool

## Lightpush config

lightpush* {.
desc: "Enable lightpush protocol: true|false",
defaultValue: false
name: "lightpush" }: bool

filternode* {.
desc: "Peer multiaddr to request content filtering of messages.",
defaultValue: ""
name: "filternode" }: string

dbpath* {.
desc: "The database path for the store protocol.",
defaultValue: ""
name: "dbpath" }: string

topics* {.
desc: "Default topics to subscribe to (space separated list)."
defaultValue: "/waku/2/default-waku/proto"
name: "topics" .}: string

# NOTE: Signature is different here, we return PrivateKey and not KeyPair
nodekey* {.
desc: "P2P node private key as 64 char hex string.",
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
name: "nodekey" }: crypto.PrivateKey
## JSON-RPC config

rpc* {.
desc: "Enable Waku JSON-RPC server: true|false",
Expand All @@ -138,6 +171,8 @@ type
desc: "Enable access to JSON-RPC Private API: true|false",
defaultValue: false
name: "rpc-private" }: bool

## Metrics config

metricsServer* {.
desc: "Enable the metrics server: true|false"
Expand All @@ -154,11 +189,17 @@ type
defaultValue: 8008
name: "metrics-server-port" }: uint16

logMetrics* {.
# @TODO: deprecate this item. Name changed from `log-metrics` -> `metrics-logging`
logMetrics_depr* {.
desc: "Enable metrics logging: true|false"
defaultValue: false
name: "log-metrics" }: bool

metricsLogging* {.
desc: "Enable metrics logging: true|false"
defaultValue: false
name: "metrics-logging" }: bool

# NOTE: Keys are different in nim-libp2p
proc parseCmdArg*(T: type crypto.PrivateKey, p: TaintedString): T =
try:
Expand Down
Loading

0 comments on commit 50f2235

Please sign in to comment.