mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-03 22:43:09 +00:00
chore: update nwaku submodules (#1123)
* chore: update submodules * fix: SIGTERM ambiguity * fix: ambiguous RNGs * fix: ContentType is no longer a string * fix: more fixes related to ambiguous RNGs * fix: start all protocols * chore: also update nim-eth * chore: important new fixes in nim-libp2p * fix: more changes related to RNG. Some reversion to reflect nim-eth update * fix: breaking changes in nim-eth submodule * fix: start protocols in tests * fix: chat2bridge protocols async mounting * fix: v1 test compilation * fix: rln test compilation * fix: remove confusing keys qualifier for the same HmacDrbgContext
This commit is contained in:
parent
9af4676939
commit
73a93ed0d2
@ -10,7 +10,7 @@ import
|
|||||||
|
|
||||||
const clientId = "Waku example v1"
|
const clientId = "Waku example v1"
|
||||||
|
|
||||||
proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext) =
|
proc run(config: WakuNodeConf, rng: ref HmacDrbgContext) =
|
||||||
# Set up the address according to NAT information.
|
# Set up the address according to NAT information.
|
||||||
let (ipExt, tcpPortExt, udpPortExt) = setupNat(config.nat, clientId,
|
let (ipExt, tcpPortExt, udpPortExt) = setupNat(config.nat, clientId,
|
||||||
Port(config.tcpPort + config.portsShift),
|
Port(config.tcpPort + config.portsShift),
|
||||||
@ -33,6 +33,8 @@ proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext) =
|
|||||||
nil, # Database, not required for Waku
|
nil, # Database, not required for Waku
|
||||||
clientId, # Client id string
|
clientId, # Client id string
|
||||||
addAllCapabilities = false, # Disable default all RLPx capabilities
|
addAllCapabilities = false, # Disable default all RLPx capabilities
|
||||||
|
bindUdpPort = address.udpPort, # Assume same as external
|
||||||
|
bindTcpPort = address.tcpPort, # Assume same as external
|
||||||
rng = rng)
|
rng = rng)
|
||||||
|
|
||||||
node.addCapability Waku # Enable only the Waku protocol.
|
node.addCapability Waku # Enable only the Waku protocol.
|
||||||
@ -57,7 +59,7 @@ proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext) =
|
|||||||
# connection occurs, which is why we use a callback to exit on errors instead of
|
# connection occurs, which is why we use a callback to exit on errors instead of
|
||||||
# using `await`.
|
# using `await`.
|
||||||
# TODO: This looks a bit awkward and the API should perhaps be altered here.
|
# TODO: This looks a bit awkward and the API should perhaps be altered here.
|
||||||
let connectedFut = node.connectToNetwork(@[],
|
let connectedFut = node.connectToNetwork(
|
||||||
true, # Enable listening
|
true, # Enable listening
|
||||||
false # Disable discovery (only discovery v4 is currently supported)
|
false # Disable discovery (only discovery v4 is currently supported)
|
||||||
)
|
)
|
||||||
|
|||||||
@ -25,7 +25,7 @@ proc runBackground() {.async.} =
|
|||||||
Port(uint16(conf.tcpPort) + conf.portsShift), extIp, extTcpPort)
|
Port(uint16(conf.tcpPort) + conf.portsShift), extIp, extTcpPort)
|
||||||
|
|
||||||
await node.start()
|
await node.start()
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
# Subscribe to a topic
|
# Subscribe to a topic
|
||||||
let topic = cast[Topic]("foobar")
|
let topic = cast[Topic]("foobar")
|
||||||
|
|||||||
@ -214,9 +214,10 @@ proc publish(c: Chat, line: string) =
|
|||||||
when PayloadV1:
|
when PayloadV1:
|
||||||
# Use Waku v1 payload encoding/encryption
|
# Use Waku v1 payload encoding/encryption
|
||||||
let
|
let
|
||||||
|
rng = keys.newRng()
|
||||||
payload = Payload(payload: chat2pb.buffer, symKey: some(c.symKey))
|
payload = Payload(payload: chat2pb.buffer, symKey: some(c.symKey))
|
||||||
version = 1'u32
|
version = 1'u32
|
||||||
encodedPayload = payload.encode(version, c.node.rng[])
|
encodedPayload = payload.encode(version, rng[])
|
||||||
if encodedPayload.isOk():
|
if encodedPayload.isOk():
|
||||||
var message = WakuMessage(payload: encodedPayload.get(),
|
var message = WakuMessage(payload: encodedPayload.get(),
|
||||||
contentTopic: c.contentTopic, version: version, timestamp: getNanosecondTime(time))
|
contentTopic: c.contentTopic, version: version, timestamp: getNanosecondTime(time))
|
||||||
@ -359,7 +360,7 @@ proc readInput(wfd: AsyncFD) {.thread, raises: [Defect, CatchableError].} =
|
|||||||
discard waitFor transp.write(line & "\r\n")
|
discard waitFor transp.write(line & "\r\n")
|
||||||
|
|
||||||
{.pop.} # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
{.pop.} # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
||||||
proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
|
proc processInput(rfd: AsyncFD) {.async.} =
|
||||||
let transp = fromPipe(rfd)
|
let transp = fromPipe(rfd)
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -375,10 +376,10 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
|
|||||||
wssEnabled = conf.websocketSecureSupport)
|
wssEnabled = conf.websocketSecureSupport)
|
||||||
await node.start()
|
await node.start()
|
||||||
|
|
||||||
node.mountRelay(conf.topics.split(" "),
|
if conf.relay:
|
||||||
relayMessages = conf.relay) # Indicates if node is capable to relay messages
|
await node.mountRelay(conf.topics.split(" "))
|
||||||
|
|
||||||
node.mountLibp2pPing()
|
await node.mountLibp2pPing()
|
||||||
|
|
||||||
let nick = await readNick(transp)
|
let nick = await readNick(transp)
|
||||||
echo "Welcome, " & nick & "!"
|
echo "Welcome, " & nick & "!"
|
||||||
@ -445,10 +446,10 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
|
|||||||
echo &"Listening on\n {listenStr}"
|
echo &"Listening on\n {listenStr}"
|
||||||
|
|
||||||
if conf.swap:
|
if conf.swap:
|
||||||
node.mountSwap()
|
await node.mountSwap()
|
||||||
|
|
||||||
if (conf.storenode != "") or (conf.store == true):
|
if (conf.storenode != "") or (conf.store == true):
|
||||||
node.mountStore(persistMessages = conf.persistMessages)
|
await node.mountStore(persistMessages = conf.persistMessages)
|
||||||
|
|
||||||
var storenode: Option[RemotePeerInfo]
|
var storenode: Option[RemotePeerInfo]
|
||||||
|
|
||||||
@ -477,12 +478,12 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
|
|||||||
|
|
||||||
# NOTE Must be mounted after relay
|
# NOTE Must be mounted after relay
|
||||||
if conf.lightpushnode != "":
|
if conf.lightpushnode != "":
|
||||||
mountLightPush(node)
|
await mountLightPush(node)
|
||||||
|
|
||||||
node.wakuLightPush.setPeer(parseRemotePeerInfo(conf.lightpushnode))
|
node.wakuLightPush.setPeer(parseRemotePeerInfo(conf.lightpushnode))
|
||||||
|
|
||||||
if conf.filternode != "":
|
if conf.filternode != "":
|
||||||
node.mountFilter()
|
await node.mountFilter()
|
||||||
|
|
||||||
node.wakuFilter.setPeer(parseRemotePeerInfo(conf.filternode))
|
node.wakuFilter.setPeer(parseRemotePeerInfo(conf.filternode))
|
||||||
|
|
||||||
@ -545,7 +546,6 @@ proc processInput(rfd: AsyncFD, rng: ref BrHmacDrbgContext) {.async.} =
|
|||||||
runForever()
|
runForever()
|
||||||
|
|
||||||
proc main() {.async.} =
|
proc main() {.async.} =
|
||||||
let rng = crypto.newRng() # Singe random number source for the whole application
|
|
||||||
let (rfd, wfd) = createAsyncPipe()
|
let (rfd, wfd) = createAsyncPipe()
|
||||||
if rfd == asyncInvalidPipe or wfd == asyncInvalidPipe:
|
if rfd == asyncInvalidPipe or wfd == asyncInvalidPipe:
|
||||||
raise newException(ValueError, "Could not initialize pipe!")
|
raise newException(ValueError, "Could not initialize pipe!")
|
||||||
@ -553,7 +553,7 @@ proc main() {.async.} =
|
|||||||
var thread: Thread[AsyncFD]
|
var thread: Thread[AsyncFD]
|
||||||
thread.createThread(readInput, wfd)
|
thread.createThread(readInput, wfd)
|
||||||
|
|
||||||
await processInput(rfd, rng)
|
await processInput(rfd)
|
||||||
|
|
||||||
when isMainModule: # isMainModule = true when the module is compiled as the main file
|
when isMainModule: # isMainModule = true when the module is compiled as the main file
|
||||||
waitFor(main())
|
waitFor(main())
|
||||||
|
|||||||
@ -24,7 +24,7 @@ type
|
|||||||
|
|
||||||
nodekey* {.
|
nodekey* {.
|
||||||
desc: "P2P node private key as 64 char hex string.",
|
desc: "P2P node private key as 64 char hex string.",
|
||||||
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
|
defaultValue: crypto.PrivateKey.random(Secp256k1, crypto.newRng()[]).tryGet()
|
||||||
name: "nodekey" }: crypto.PrivateKey
|
name: "nodekey" }: crypto.PrivateKey
|
||||||
|
|
||||||
listenAddress* {.
|
listenAddress* {.
|
||||||
|
|||||||
@ -186,7 +186,7 @@ proc start*(cmb: Chat2MatterBridge) {.async.} =
|
|||||||
|
|
||||||
# Always mount relay for bridge
|
# Always mount relay for bridge
|
||||||
# `triggerSelf` is false on a `bridge` to avoid duplicates
|
# `triggerSelf` is false on a `bridge` to avoid duplicates
|
||||||
cmb.nodev2.mountRelay(triggerSelf = false)
|
await cmb.nodev2.mountRelay(triggerSelf = false)
|
||||||
|
|
||||||
# Bridging
|
# Bridging
|
||||||
# Handle messages on Waku v2 and bridge to Matterbridge
|
# Handle messages on Waku v2 and bridge to Matterbridge
|
||||||
@ -263,13 +263,13 @@ when isMainModule:
|
|||||||
|
|
||||||
# Now load rest of config
|
# Now load rest of config
|
||||||
# Mount configured Waku v2 protocols
|
# Mount configured Waku v2 protocols
|
||||||
mountLibp2pPing(bridge.nodev2)
|
waitFor mountLibp2pPing(bridge.nodev2)
|
||||||
|
|
||||||
if conf.store:
|
if conf.store:
|
||||||
mountStore(bridge.nodev2)
|
waitFor mountStore(bridge.nodev2)
|
||||||
|
|
||||||
if conf.filter:
|
if conf.filter:
|
||||||
mountFilter(bridge.nodev2)
|
waitFor mountFilter(bridge.nodev2)
|
||||||
|
|
||||||
if conf.staticnodes.len > 0:
|
if conf.staticnodes.len > 0:
|
||||||
waitFor connectToNodes(bridge.nodev2, conf.staticnodes)
|
waitFor connectToNodes(bridge.nodev2, conf.staticnodes)
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import
|
import
|
||||||
chronos, bearssl,
|
chronos, bearssl/rand,
|
||||||
eth/[keys, p2p]
|
eth/[keys, p2p]
|
||||||
|
|
||||||
import libp2p/crypto/crypto
|
import libp2p/crypto/crypto
|
||||||
@ -12,22 +12,27 @@ proc localAddress*(port: int): Address =
|
|||||||
ip: parseIpAddress("127.0.0.1"))
|
ip: parseIpAddress("127.0.0.1"))
|
||||||
|
|
||||||
proc setupTestNode*(
|
proc setupTestNode*(
|
||||||
rng: ref BrHmacDrbgContext,
|
rng: ref HmacDrbgContext,
|
||||||
capabilities: varargs[ProtocolInfo, `protocolInfo`]): EthereumNode =
|
capabilities: varargs[ProtocolInfo, `protocolInfo`]): EthereumNode =
|
||||||
let keys1 = keys.KeyPair.random(rng[])
|
let
|
||||||
result = newEthereumNode(keys1, localAddress(nextPort), NetworkId(1), nil,
|
keys1 = keys.KeyPair.random(rng[])
|
||||||
addAllCapabilities = false, rng = rng)
|
address = localAddress(nextPort)
|
||||||
|
result = newEthereumNode(keys1, address, NetworkId(1), nil,
|
||||||
|
addAllCapabilities = false,
|
||||||
|
bindUdpPort = address.udpPort, # Assume same as external
|
||||||
|
bindTcpPort = address.tcpPort, # Assume same as external
|
||||||
|
rng = rng)
|
||||||
nextPort.inc
|
nextPort.inc
|
||||||
for capability in capabilities:
|
for capability in capabilities:
|
||||||
result.addCapability capability
|
result.addCapability capability
|
||||||
|
|
||||||
# Copied from here: https://github.com/status-im/nim-libp2p/blob/d522537b19a532bc4af94fcd146f779c1f23bad0/tests/helpers.nim#L28
|
# Copied from here: https://github.com/status-im/nim-libp2p/blob/d522537b19a532bc4af94fcd146f779c1f23bad0/tests/helpers.nim#L28
|
||||||
type RngWrap = object
|
type RngWrap = object
|
||||||
rng: ref BrHmacDrbgContext
|
rng: ref rand.HmacDrbgContext
|
||||||
|
|
||||||
var rngVar: RngWrap
|
var rngVar: RngWrap
|
||||||
|
|
||||||
proc getRng(): ref BrHmacDrbgContext =
|
proc getRng(): ref rand.HmacDrbgContext =
|
||||||
# TODO if `rngVar` is a threadvar like it should be, there are random and
|
# TODO if `rngVar` is a threadvar like it should be, there are random and
|
||||||
# spurious compile failures on mac - this is not gcsafe but for the
|
# spurious compile failures on mac - this is not gcsafe but for the
|
||||||
# purpose of the tests, it's ok as long as we only use a single thread
|
# purpose of the tests, it's ok as long as we only use a single thread
|
||||||
@ -36,5 +41,5 @@ proc getRng(): ref BrHmacDrbgContext =
|
|||||||
rngVar.rng = crypto.newRng()
|
rngVar.rng = crypto.newRng()
|
||||||
rngVar.rng
|
rngVar.rng
|
||||||
|
|
||||||
template rng*(): ref BrHmacDrbgContext =
|
template rng*(): ref rand.HmacDrbgContext =
|
||||||
getRng()
|
getRng()
|
||||||
|
|||||||
@ -14,14 +14,14 @@ const sigPath = sourceDir / ParDir / ParDir / "waku" / "v1" / "node" / "rpc" / "
|
|||||||
createRpcSigs(RpcSocketClient, sigPath)
|
createRpcSigs(RpcSocketClient, sigPath)
|
||||||
|
|
||||||
proc setupNode(capabilities: varargs[ProtocolInfo, `protocolInfo`],
|
proc setupNode(capabilities: varargs[ProtocolInfo, `protocolInfo`],
|
||||||
rng: ref BrHmacDrbgContext, ): EthereumNode =
|
rng: ref HmacDrbgContext, ): EthereumNode =
|
||||||
let
|
let
|
||||||
keypair = KeyPair.random(rng[])
|
keypair = KeyPair.random(rng[])
|
||||||
srvAddress = Address(ip: parseIpAddress("0.0.0.0"), tcpPort: Port(30303),
|
srvAddress = Address(ip: parseIpAddress("0.0.0.0"), tcpPort: Port(30303),
|
||||||
udpPort: Port(30303))
|
udpPort: Port(30303))
|
||||||
|
|
||||||
result = newEthereumNode(keypair, srvAddress, NetworkId(1), nil, "waku test rpc",
|
result = newEthereumNode(keypair, srvAddress, NetworkId(1), nil, "waku test rpc",
|
||||||
addAllCapabilities = false, rng = rng)
|
addAllCapabilities = false, bindUdpPort = srvAddress.udpPort, bindTcpPort = srvAddress.tcpPort, rng = rng)
|
||||||
for capability in capabilities:
|
for capability in capabilities:
|
||||||
result.addCapability capability
|
result.addCapability capability
|
||||||
|
|
||||||
|
|||||||
@ -44,11 +44,11 @@ procSuite "Waku connections":
|
|||||||
n3 = setupTestNode(rng, Waku)
|
n3 = setupTestNode(rng, Waku)
|
||||||
n4 = setupTestNode(rng, Waku)
|
n4 = setupTestNode(rng, Waku)
|
||||||
|
|
||||||
var topics: seq[Topic]
|
var topics: seq[waku_protocol.Topic]
|
||||||
n1.protocolState(Waku).config.topics = some(topics)
|
n1.protocolState(Waku).config.topics = some(topics)
|
||||||
n2.protocolState(Waku).config.topics = some(topics)
|
n2.protocolState(Waku).config.topics = some(topics)
|
||||||
n3.protocolState(Waku).config.topics = none(seq[Topic])
|
n3.protocolState(Waku).config.topics = none(seq[waku_protocol.Topic])
|
||||||
n4.protocolState(Waku).config.topics = none(seq[Topic])
|
n4.protocolState(Waku).config.topics = none(seq[waku_protocol.Topic])
|
||||||
|
|
||||||
n1.startListening()
|
n1.startListening()
|
||||||
n3.startListening()
|
n3.startListening()
|
||||||
@ -499,7 +499,7 @@ procSuite "Waku connections":
|
|||||||
let bloomFilterUpdatedCondition = proc(): bool =
|
let bloomFilterUpdatedCondition = proc(): bool =
|
||||||
for peer in wakuNode.peerPool.peers:
|
for peer in wakuNode.peerPool.peers:
|
||||||
return peer.state(Waku).bloom == bloom and
|
return peer.state(Waku).bloom == bloom and
|
||||||
peer.state(Waku).topics == none(seq[Topic])
|
peer.state(Waku).topics == none(seq[waku_protocol.Topic])
|
||||||
|
|
||||||
let bloomFilterUpdated =
|
let bloomFilterUpdated =
|
||||||
await eventually(conditionTimeoutMs, bloomFilterUpdatedCondition)
|
await eventually(conditionTimeoutMs, bloomFilterUpdatedCondition)
|
||||||
|
|||||||
@ -47,7 +47,7 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
asyncTest "Debug API: get node info":
|
asyncTest "Debug API: get node info":
|
||||||
waitFor node.start()
|
waitFor node.start()
|
||||||
|
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
# RPC server setup
|
# RPC server setup
|
||||||
let
|
let
|
||||||
@ -74,7 +74,7 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
asyncTest "Relay API: publish and subscribe/unsubscribe":
|
asyncTest "Relay API: publish and subscribe/unsubscribe":
|
||||||
waitFor node.start()
|
waitFor node.start()
|
||||||
|
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
# RPC server setup
|
# RPC server setup
|
||||||
let
|
let
|
||||||
@ -137,13 +137,13 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
message2 = WakuMessage(payload: payload2, contentTopic: contentTopic)
|
message2 = WakuMessage(payload: payload2, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay(@[pubSubTopic])
|
await node3.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
@ -215,7 +215,7 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
asyncTest "Store API: retrieve historical messages":
|
asyncTest "Store API: retrieve historical messages":
|
||||||
waitFor node.start()
|
waitFor node.start()
|
||||||
|
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
# RPC server setup
|
# RPC server setup
|
||||||
let
|
let
|
||||||
@ -231,7 +231,7 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
key = wakunode2.PrivateKey.random(ECDSA, rng[]).get()
|
key = wakunode2.PrivateKey.random(ECDSA, rng[]).get()
|
||||||
peer = PeerInfo.new(key)
|
peer = PeerInfo.new(key)
|
||||||
|
|
||||||
node.mountStore(persistMessages = true)
|
await node.mountStore(persistMessages = true)
|
||||||
|
|
||||||
var listenSwitch = newStandardSwitch(some(key))
|
var listenSwitch = newStandardSwitch(some(key))
|
||||||
waitFor listenSwitch.start()
|
waitFor listenSwitch.start()
|
||||||
@ -273,9 +273,9 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
asyncTest "Filter API: subscribe/unsubscribe":
|
asyncTest "Filter API: subscribe/unsubscribe":
|
||||||
waitFor node.start()
|
waitFor node.start()
|
||||||
|
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
node.mountFilter()
|
await node.mountFilter()
|
||||||
|
|
||||||
# RPC server setup
|
# RPC server setup
|
||||||
let
|
let
|
||||||
@ -329,7 +329,7 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
installFilterApiHandlers(node, server, newTable[ContentTopic, seq[WakuMessage]]())
|
installFilterApiHandlers(node, server, newTable[ContentTopic, seq[WakuMessage]]())
|
||||||
server.start()
|
server.start()
|
||||||
|
|
||||||
node.mountFilter()
|
await node.mountFilter()
|
||||||
|
|
||||||
let client = newRpcHttpClient()
|
let client = newRpcHttpClient()
|
||||||
await client.connect("127.0.0.1", rpcPort, false)
|
await client.connect("127.0.0.1", rpcPort, false)
|
||||||
@ -412,9 +412,9 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
|
|
||||||
await allFutures([node1.start(), node2.start(), node3.start()])
|
await allFutures([node1.start(), node2.start(), node3.start()])
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node3.mountRelay()
|
await node3.mountRelay()
|
||||||
|
|
||||||
# RPC server setup
|
# RPC server setup
|
||||||
let
|
let
|
||||||
@ -469,9 +469,9 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
|
|
||||||
await allFutures([node1.start(), node2.start(), node3.start()])
|
await allFutures([node1.start(), node2.start(), node3.start()])
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node3.mountRelay()
|
await node3.mountRelay()
|
||||||
|
|
||||||
# Dial nodes 2 and 3 from node1
|
# Dial nodes 2 and 3 from node1
|
||||||
await node1.connectToNodes(@[constructMultiaddrStr(peerInfo2)])
|
await node1.connectToNodes(@[constructMultiaddrStr(peerInfo2)])
|
||||||
@ -525,9 +525,9 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
let client = newRpcHttpClient()
|
let client = newRpcHttpClient()
|
||||||
await client.connect("127.0.0.1", rpcPort, false)
|
await client.connect("127.0.0.1", rpcPort, false)
|
||||||
|
|
||||||
node.mountFilter()
|
await node.mountFilter()
|
||||||
node.mountSwap()
|
await node.mountSwap()
|
||||||
node.mountStore(persistMessages = true)
|
await node.mountStore(persistMessages = true)
|
||||||
|
|
||||||
# Create and set some peers
|
# Create and set some peers
|
||||||
let
|
let
|
||||||
@ -577,13 +577,13 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
topicCache = newTable[string, seq[WakuMessage]]()
|
topicCache = newTable[string, seq[WakuMessage]]()
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay(@[pubSubTopic])
|
await node3.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
@ -598,8 +598,8 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
server3 = newRpcHttpServer([ta3])
|
server3 = newRpcHttpServer([ta3])
|
||||||
|
|
||||||
# Let's connect to nodes 1 and 3 via the API
|
# Let's connect to nodes 1 and 3 via the API
|
||||||
installPrivateApiHandlers(node1, server1, rng, newTable[string, seq[WakuMessage]]())
|
installPrivateApiHandlers(node1, server1, newTable[string, seq[WakuMessage]]())
|
||||||
installPrivateApiHandlers(node3, server3, rng, topicCache)
|
installPrivateApiHandlers(node3, server3, topicCache)
|
||||||
installRelayApiHandlers(node3, server3, topicCache)
|
installRelayApiHandlers(node3, server3, topicCache)
|
||||||
server1.start()
|
server1.start()
|
||||||
server3.start()
|
server3.start()
|
||||||
@ -668,13 +668,13 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
topicCache = newTable[string, seq[WakuMessage]]()
|
topicCache = newTable[string, seq[WakuMessage]]()
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay(@[pubSubTopic])
|
await node3.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
@ -689,8 +689,8 @@ procSuite "Waku v2 JSON-RPC API":
|
|||||||
server3 = newRpcHttpServer([ta3])
|
server3 = newRpcHttpServer([ta3])
|
||||||
|
|
||||||
# Let's connect to nodes 1 and 3 via the API
|
# Let's connect to nodes 1 and 3 via the API
|
||||||
installPrivateApiHandlers(node1, server1, rng, newTable[string, seq[WakuMessage]]())
|
installPrivateApiHandlers(node1, server1, newTable[string, seq[WakuMessage]]())
|
||||||
installPrivateApiHandlers(node3, server3, rng, topicCache)
|
installPrivateApiHandlers(node3, server3, topicCache)
|
||||||
installRelayApiHandlers(node3, server3, topicCache)
|
installRelayApiHandlers(node3, server3, topicCache)
|
||||||
server1.start()
|
server1.start()
|
||||||
server3.start()
|
server3.start()
|
||||||
|
|||||||
@ -52,9 +52,9 @@ procSuite "Peer Exchange":
|
|||||||
peerExchangeHandler = handlePeerExchange
|
peerExchangeHandler = handlePeerExchange
|
||||||
emptyHandler = ignorePeerExchange
|
emptyHandler = ignorePeerExchange
|
||||||
|
|
||||||
node1.mountRelay(peerExchangeHandler = some(emptyHandler))
|
await node1.mountRelay(peerExchangeHandler = some(emptyHandler))
|
||||||
node2.mountRelay(peerExchangeHandler = some(emptyHandler))
|
await node2.mountRelay(peerExchangeHandler = some(emptyHandler))
|
||||||
node3.mountRelay(peerExchangeHandler = some(peerExchangeHandler))
|
await node3.mountRelay(peerExchangeHandler = some(peerExchangeHandler))
|
||||||
|
|
||||||
# Ensure that node1 prunes all peers after the first connection
|
# Ensure that node1 prunes all peers after the first connection
|
||||||
node1.wakuRelay.parameters.dHigh = 1
|
node1.wakuRelay.parameters.dHigh = 1
|
||||||
|
|||||||
@ -34,8 +34,8 @@ procSuite "Peer Manager":
|
|||||||
|
|
||||||
await allFutures([node1.start(), node2.start()])
|
await allFutures([node1.start(), node2.start()])
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
# Dial node2 from node1
|
# Dial node2 from node1
|
||||||
let conn = (await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec)).get()
|
let conn = (await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec)).get()
|
||||||
@ -68,8 +68,8 @@ procSuite "Peer Manager":
|
|||||||
await node1.start()
|
await node1.start()
|
||||||
# Purposefully don't start node2
|
# Purposefully don't start node2
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
# Dial node2 from node1
|
# Dial node2 from node1
|
||||||
let connOpt = await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec, 2.seconds)
|
let connOpt = await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec, 2.seconds)
|
||||||
@ -100,9 +100,9 @@ procSuite "Peer Manager":
|
|||||||
|
|
||||||
await node.start()
|
await node.start()
|
||||||
|
|
||||||
node.mountFilter()
|
await node.mountFilter()
|
||||||
node.mountSwap()
|
await node.mountSwap()
|
||||||
node.mountStore(persistMessages = true)
|
await node.mountStore(persistMessages = true)
|
||||||
|
|
||||||
node.wakuFilter.setPeer(filterPeer.toRemotePeerInfo())
|
node.wakuFilter.setPeer(filterPeer.toRemotePeerInfo())
|
||||||
node.wakuSwap.setPeer(swapPeer.toRemotePeerInfo())
|
node.wakuSwap.setPeer(swapPeer.toRemotePeerInfo())
|
||||||
@ -136,8 +136,8 @@ procSuite "Peer Manager":
|
|||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
# Test default connectedness for new peers
|
# Test default connectedness for new peers
|
||||||
node1.peerManager.addPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec)
|
node1.peerManager.addPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec)
|
||||||
@ -182,8 +182,8 @@ procSuite "Peer Manager":
|
|||||||
await node1.start()
|
await node1.start()
|
||||||
await node2.start()
|
await node2.start()
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
discard await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec, 2.seconds)
|
discard await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), WakuRelayCodec, 2.seconds)
|
||||||
check:
|
check:
|
||||||
@ -205,7 +205,7 @@ procSuite "Peer Manager":
|
|||||||
node3.peerManager.peers().anyIt(it.peerId == peerInfo2.peerId)
|
node3.peerManager.peers().anyIt(it.peerId == peerInfo2.peerId)
|
||||||
node3.peerManager.connectedness(peerInfo2.peerId) == NotConnected
|
node3.peerManager.connectedness(peerInfo2.peerId) == NotConnected
|
||||||
|
|
||||||
node3.mountRelay() # This should trigger a reconnect
|
await node3.mountRelay() # This should trigger a reconnect
|
||||||
|
|
||||||
check:
|
check:
|
||||||
# Reconnected to node2 after "restart"
|
# Reconnected to node2 after "restart"
|
||||||
@ -232,9 +232,9 @@ asyncTest "Peer manager support multiple protocol IDs when reconnecting to peers
|
|||||||
await node1.start()
|
await node1.start()
|
||||||
await node2.start()
|
await node2.start()
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node1.wakuRelay.codec = betaCodec
|
node1.wakuRelay.codec = betaCodec
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node2.wakuRelay.codec = betaCodec
|
node2.wakuRelay.codec = betaCodec
|
||||||
|
|
||||||
discard await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), node2.wakuRelay.codec, 2.seconds)
|
discard await node1.peerManager.dialPeer(peerInfo2.toRemotePeerInfo(), node2.wakuRelay.codec, 2.seconds)
|
||||||
@ -251,7 +251,7 @@ asyncTest "Peer manager support multiple protocol IDs when reconnecting to peers
|
|||||||
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"),
|
node3 = WakuNode.new(nodeKey3, ValidIpAddress.init("0.0.0.0"),
|
||||||
Port(60004), peerStorage = storage)
|
Port(60004), peerStorage = storage)
|
||||||
|
|
||||||
node3.mountRelay()
|
await node3.mountRelay()
|
||||||
node3.wakuRelay.codec = stableCodec
|
node3.wakuRelay.codec = stableCodec
|
||||||
check:
|
check:
|
||||||
# Node 2 and 3 have differing codecs
|
# Node 2 and 3 have differing codecs
|
||||||
|
|||||||
@ -28,7 +28,7 @@ suite "REST API - Debug":
|
|||||||
# Given
|
# Given
|
||||||
let node = testWakuNode()
|
let node = testWakuNode()
|
||||||
await node.start()
|
await node.start()
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
let restPort = Port(8546)
|
let restPort = Port(8546)
|
||||||
let restAddress = ValidIpAddress.init("0.0.0.0")
|
let restAddress = ValidIpAddress.init("0.0.0.0")
|
||||||
|
|||||||
@ -39,7 +39,7 @@ suite "REST API - Relay":
|
|||||||
# Given
|
# Given
|
||||||
let node = testWakuNode()
|
let node = testWakuNode()
|
||||||
await node.start()
|
await node.start()
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
let restPort = Port(8546)
|
let restPort = Port(8546)
|
||||||
let restAddress = ValidIpAddress.init("0.0.0.0")
|
let restAddress = ValidIpAddress.init("0.0.0.0")
|
||||||
@ -84,7 +84,7 @@ suite "REST API - Relay":
|
|||||||
# Given
|
# Given
|
||||||
let node = testWakuNode()
|
let node = testWakuNode()
|
||||||
await node.start()
|
await node.start()
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
let restPort = Port(8546)
|
let restPort = Port(8546)
|
||||||
let restAddress = ValidIpAddress.init("0.0.0.0")
|
let restAddress = ValidIpAddress.init("0.0.0.0")
|
||||||
@ -132,7 +132,7 @@ suite "REST API - Relay":
|
|||||||
# Given
|
# Given
|
||||||
let node = testWakuNode()
|
let node = testWakuNode()
|
||||||
await node.start()
|
await node.start()
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
let restPort = Port(8546)
|
let restPort = Port(8546)
|
||||||
let restAddress = ValidIpAddress.init("0.0.0.0")
|
let restAddress = ValidIpAddress.init("0.0.0.0")
|
||||||
@ -183,7 +183,7 @@ suite "REST API - Relay":
|
|||||||
# Given
|
# Given
|
||||||
let node = testWakuNode()
|
let node = testWakuNode()
|
||||||
await node.start()
|
await node.start()
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
# RPC server setup
|
# RPC server setup
|
||||||
let restPort = Port(8546)
|
let restPort = Port(8546)
|
||||||
|
|||||||
@ -85,7 +85,7 @@ procSuite "FloodSub":
|
|||||||
)
|
)
|
||||||
|
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
await subscribeNodes(nodes)
|
await subscribeNodes(nodes)
|
||||||
|
|
||||||
|
|||||||
@ -31,10 +31,11 @@ procSuite "WakuBridge":
|
|||||||
|
|
||||||
let
|
let
|
||||||
rng = keys.newRng()
|
rng = keys.newRng()
|
||||||
|
cryptoRng = crypto.newRng()
|
||||||
|
|
||||||
# Bridge
|
# Bridge
|
||||||
nodev1Key = keys.KeyPair.random(rng[])
|
nodev1Key = keys.KeyPair.random(rng[])
|
||||||
nodev2Key = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
nodev2Key = crypto.PrivateKey.random(Secp256k1, cryptoRng[])[]
|
||||||
bridge = WakuBridge.new(
|
bridge = WakuBridge.new(
|
||||||
nodev1Key= nodev1Key,
|
nodev1Key= nodev1Key,
|
||||||
nodev1Address = localAddress(30302),
|
nodev1Address = localAddress(30302),
|
||||||
@ -48,7 +49,7 @@ procSuite "WakuBridge":
|
|||||||
v1Node = setupTestNode(rng, Waku)
|
v1Node = setupTestNode(rng, Waku)
|
||||||
|
|
||||||
# Waku v2 node
|
# Waku v2 node
|
||||||
v2NodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
v2NodeKey = crypto.PrivateKey.random(Secp256k1, cryptoRng[])[]
|
||||||
v2Node = WakuNode.new(v2NodeKey, ValidIpAddress.init("0.0.0.0"), Port(60002))
|
v2Node = WakuNode.new(v2NodeKey, ValidIpAddress.init("0.0.0.0"), Port(60002))
|
||||||
|
|
||||||
contentTopic = ContentTopic("/waku/1/0x1a2b3c4d/rfc26")
|
contentTopic = ContentTopic("/waku/1/0x1a2b3c4d/rfc26")
|
||||||
@ -118,7 +119,7 @@ procSuite "WakuBridge":
|
|||||||
waitFor bridge.start()
|
waitFor bridge.start()
|
||||||
|
|
||||||
waitFor v2Node.start()
|
waitFor v2Node.start()
|
||||||
v2Node.mountRelay(@[DefaultBridgeTopic], triggerSelf = false)
|
await v2Node.mountRelay(@[DefaultBridgeTopic], triggerSelf = false)
|
||||||
|
|
||||||
discard waitFor v1Node.rlpxConnect(newNode(bridge.nodev1.toENode()))
|
discard waitFor v1Node.rlpxConnect(newNode(bridge.nodev1.toENode()))
|
||||||
waitFor v2Node.connectToNodes(@[bridge.nodev2.switch.peerInfo.toRemotePeerInfo()])
|
waitFor v2Node.connectToNodes(@[bridge.nodev2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
|
|||||||
@ -84,9 +84,9 @@ procSuite "Waku Discovery v5":
|
|||||||
node3.rng
|
node3.rng
|
||||||
)
|
)
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node3.mountRelay()
|
await node3.mountRelay()
|
||||||
|
|
||||||
await allFutures([node1.start(), node2.start(), node3.start()])
|
await allFutures([node1.start(), node2.start(), node3.start()])
|
||||||
|
|
||||||
|
|||||||
@ -34,9 +34,9 @@ procSuite "Waku DNS Discovery":
|
|||||||
node3 = WakuNode.new(nodeKey3, bindIp, Port(60003))
|
node3 = WakuNode.new(nodeKey3, bindIp, Port(60003))
|
||||||
enr3 = node3.enr
|
enr3 = node3.enr
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node3.mountRelay()
|
await node3.mountRelay()
|
||||||
await allFutures([node1.start(), node2.start(), node3.start()])
|
await allFutures([node1.start(), node2.start(), node3.start()])
|
||||||
|
|
||||||
# Build and sign tree
|
# Build and sign tree
|
||||||
@ -44,7 +44,7 @@ procSuite "Waku DNS Discovery":
|
|||||||
@[enr1, enr2, enr3], # ENR entries
|
@[enr1, enr2, enr3], # ENR entries
|
||||||
@[]).get() # No link entries
|
@[]).get() # No link entries
|
||||||
|
|
||||||
let treeKeys = keys.KeyPair.random(rng[])
|
let treeKeys = keys.KeyPair.random(keys.newRng()[])
|
||||||
|
|
||||||
# Sign tree
|
# Sign tree
|
||||||
check:
|
check:
|
||||||
@ -68,7 +68,7 @@ procSuite "Waku DNS Discovery":
|
|||||||
nodeKey4 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
nodeKey4 = crypto.PrivateKey.random(Secp256k1, rng[])[]
|
||||||
node4 = WakuNode.new(nodeKey4, bindIp, Port(60004))
|
node4 = WakuNode.new(nodeKey4, bindIp, Port(60004))
|
||||||
|
|
||||||
node4.mountRelay()
|
await node4.mountRelay()
|
||||||
await node4.start()
|
await node4.start()
|
||||||
|
|
||||||
var wakuDnsDisc = WakuDnsDiscovery.init(location, resolver).get()
|
var wakuDnsDisc = WakuDnsDiscovery.init(location, resolver).get()
|
||||||
|
|||||||
@ -45,6 +45,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
serverPeerManager = PeerManager.new(serverSwitch)
|
serverPeerManager = PeerManager.new(serverSwitch)
|
||||||
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler)
|
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler)
|
||||||
|
await serverProto.start()
|
||||||
serverSwitch.mount(serverProto)
|
serverSwitch.mount(serverProto)
|
||||||
|
|
||||||
# Client
|
# Client
|
||||||
@ -55,6 +56,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
clientPeerManager = PeerManager.new(clientSwitch)
|
clientPeerManager = PeerManager.new(clientSwitch)
|
||||||
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
||||||
|
await clientProto.start()
|
||||||
clientSwitch.mount(clientProto)
|
clientSwitch.mount(clientProto)
|
||||||
|
|
||||||
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
||||||
@ -93,6 +95,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
serverPeerManager = PeerManager.new(serverSwitch)
|
serverPeerManager = PeerManager.new(serverSwitch)
|
||||||
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler)
|
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler)
|
||||||
|
await serverProto.start()
|
||||||
serverSwitch.mount(serverProto)
|
serverSwitch.mount(serverProto)
|
||||||
|
|
||||||
# Client
|
# Client
|
||||||
@ -103,6 +106,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
clientPeerManager = PeerManager.new(clientSwitch)
|
clientPeerManager = PeerManager.new(clientSwitch)
|
||||||
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
||||||
|
await clientProto.start()
|
||||||
clientSwitch.mount(clientProto)
|
clientSwitch.mount(clientProto)
|
||||||
|
|
||||||
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
||||||
@ -144,6 +148,7 @@ procSuite "Waku Filter":
|
|||||||
|
|
||||||
## Given
|
## Given
|
||||||
let clientProto = WakuFilter.init(PeerManager.new(clientSwitch), crypto.newRng(), dummyHandler)
|
let clientProto = WakuFilter.init(PeerManager.new(clientSwitch), crypto.newRng(), dummyHandler)
|
||||||
|
await clientProto.start()
|
||||||
clientSwitch.mount(clientProto)
|
clientSwitch.mount(clientProto)
|
||||||
|
|
||||||
## When
|
## When
|
||||||
@ -168,6 +173,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
serverPeerManager = PeerManager.new(serverSwitch)
|
serverPeerManager = PeerManager.new(serverSwitch)
|
||||||
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler, timeout=1.seconds)
|
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler, timeout=1.seconds)
|
||||||
|
await serverProto.start()
|
||||||
serverSwitch.mount(serverProto)
|
serverSwitch.mount(serverProto)
|
||||||
|
|
||||||
# Client
|
# Client
|
||||||
@ -178,6 +184,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
clientPeerManager = PeerManager.new(clientSwitch)
|
clientPeerManager = PeerManager.new(clientSwitch)
|
||||||
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
||||||
|
await clientProto.start()
|
||||||
clientSwitch.mount(clientProto)
|
clientSwitch.mount(clientProto)
|
||||||
|
|
||||||
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
||||||
@ -242,6 +249,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
serverPeerManager = PeerManager.new(serverSwitch)
|
serverPeerManager = PeerManager.new(serverSwitch)
|
||||||
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler, timeout=2.seconds)
|
serverProto = WakuFilter.init(serverPeerManager, rng, dummyHandler, timeout=2.seconds)
|
||||||
|
await serverProto.start()
|
||||||
serverSwitch.mount(serverProto)
|
serverSwitch.mount(serverProto)
|
||||||
|
|
||||||
# Client
|
# Client
|
||||||
@ -252,6 +260,7 @@ procSuite "Waku Filter":
|
|||||||
let
|
let
|
||||||
clientPeerManager = PeerManager.new(clientSwitch)
|
clientPeerManager = PeerManager.new(clientSwitch)
|
||||||
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
clientProto = WakuFilter.init(clientPeerManager, rng, handler)
|
||||||
|
await clientProto.start()
|
||||||
clientSwitch.mount(clientProto)
|
clientSwitch.mount(clientProto)
|
||||||
|
|
||||||
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
clientProto.setPeer(serverSwitch.peerInfo.toRemotePeerInfo())
|
||||||
@ -289,6 +298,7 @@ procSuite "Waku Filter":
|
|||||||
# Start switch with same key as before
|
# Start switch with same key as before
|
||||||
var clientSwitch2 = newTestSwitch(some(clientKey), some(clientAddress))
|
var clientSwitch2 = newTestSwitch(some(clientKey), some(clientAddress))
|
||||||
await clientSwitch2.start()
|
await clientSwitch2.start()
|
||||||
|
await clientProto.start()
|
||||||
clientSwitch2.mount(clientProto)
|
clientSwitch2.mount(clientProto)
|
||||||
|
|
||||||
# If push succeeds after failure, the peer should removed from failed peers list
|
# If push succeeds after failure, the peer should removed from failed peers list
|
||||||
|
|||||||
@ -34,12 +34,15 @@ procSuite "Waku Keepalive":
|
|||||||
completionFut.complete(true)
|
completionFut.complete(true)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node1.mountLibp2pPing()
|
await node1.mountLibp2pPing()
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node2.switch.mount(Ping.new(handler = pingHandler))
|
|
||||||
|
let pingProto = Ping.new(handler = pingHandler)
|
||||||
|
await pingProto.start()
|
||||||
|
node2.switch.mount(pingProto)
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
|
|
||||||
|
|||||||
@ -49,6 +49,7 @@ procSuite "Waku Lightpush":
|
|||||||
proto = WakuLightPush.init(peerManager, rng, requestHandler)
|
proto = WakuLightPush.init(peerManager, rng, requestHandler)
|
||||||
|
|
||||||
proto.setPeer(listenSwitch.peerInfo.toRemotePeerInfo())
|
proto.setPeer(listenSwitch.peerInfo.toRemotePeerInfo())
|
||||||
|
waitFor proto.start()
|
||||||
dialSwitch.mount(proto)
|
dialSwitch.mount(proto)
|
||||||
|
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ procSuite "Waku Lightpush":
|
|||||||
peerManager2 = PeerManager.new(listenSwitch)
|
peerManager2 = PeerManager.new(listenSwitch)
|
||||||
rng2 = crypto.newRng()
|
rng2 = crypto.newRng()
|
||||||
proto2 = WakuLightPush.init(peerManager2, rng2, requestHandler2)
|
proto2 = WakuLightPush.init(peerManager2, rng2, requestHandler2)
|
||||||
|
waitFor proto2.start()
|
||||||
listenSwitch.mount(proto2)
|
listenSwitch.mount(proto2)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ procSuite "Waku rln relay":
|
|||||||
let index = MembershipIndex(5)
|
let index = MembershipIndex(5)
|
||||||
|
|
||||||
# -------- mount rln-relay in the off-chain mode
|
# -------- mount rln-relay in the off-chain mode
|
||||||
node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
await node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
||||||
node.mountRlnRelayStatic(group = groupIDCommitments,
|
node.mountRlnRelayStatic(group = groupIDCommitments,
|
||||||
memKeyPair = groupKeyPairs[index],
|
memKeyPair = groupKeyPairs[index],
|
||||||
memIndex = index,
|
memIndex = index,
|
||||||
|
|||||||
@ -346,7 +346,7 @@ procSuite "Waku-rln-relay":
|
|||||||
|
|
||||||
# test ------------------------------
|
# test ------------------------------
|
||||||
# start rln-relay
|
# start rln-relay
|
||||||
node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
await node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
||||||
node.mountRlnRelayStatic(group = group,
|
node.mountRlnRelayStatic(group = group,
|
||||||
memKeyPair = keypair.get(),
|
memKeyPair = keypair.get(),
|
||||||
memIndex = index,
|
memIndex = index,
|
||||||
@ -427,7 +427,7 @@ procSuite "Waku-rln-relay":
|
|||||||
|
|
||||||
# test ------------------------------
|
# test ------------------------------
|
||||||
# start rln-relay
|
# start rln-relay
|
||||||
node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
await node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
||||||
discard await node.mountRlnRelayDynamic(ethClientAddr = EthClient,
|
discard await node.mountRlnRelayDynamic(ethClientAddr = EthClient,
|
||||||
ethAccAddr = ethacc,
|
ethAccAddr = ethacc,
|
||||||
ethAccountPrivKeyOpt = some(ethPrivKey),
|
ethAccountPrivKeyOpt = some(ethPrivKey),
|
||||||
@ -480,7 +480,7 @@ procSuite "Waku-rln-relay":
|
|||||||
let (ethPrivKey, ethacc) = await createEthAccount()
|
let (ethPrivKey, ethacc) = await createEthAccount()
|
||||||
|
|
||||||
# start rln-relay on the first node, leave rln-relay credentials empty
|
# start rln-relay on the first node, leave rln-relay credentials empty
|
||||||
node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
await node.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
||||||
discard await node.mountRlnRelayDynamic(ethClientAddr = EthClient,
|
discard await node.mountRlnRelayDynamic(ethClientAddr = EthClient,
|
||||||
ethAccAddr = ethacc,
|
ethAccAddr = ethacc,
|
||||||
ethAccountPrivKeyOpt = some(ethPrivKey),
|
ethAccountPrivKeyOpt = some(ethPrivKey),
|
||||||
@ -493,7 +493,7 @@ procSuite "Waku-rln-relay":
|
|||||||
|
|
||||||
|
|
||||||
# start rln-relay on the second node, leave rln-relay credentials empty
|
# start rln-relay on the second node, leave rln-relay credentials empty
|
||||||
node2.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
await node2.mountRelay(@[RLNRELAY_PUBSUB_TOPIC])
|
||||||
discard await node2.mountRlnRelayDynamic(ethClientAddr = EthClient,
|
discard await node2.mountRlnRelayDynamic(ethClientAddr = EthClient,
|
||||||
ethAccAddr = ethacc,
|
ethAccAddr = ethacc,
|
||||||
ethAccountPrivKeyOpt = some(ethPrivKey),
|
ethAccountPrivKeyOpt = some(ethPrivKey),
|
||||||
|
|||||||
@ -53,6 +53,7 @@ proc newTestWakuStore(switch: Switch): WakuStore =
|
|||||||
store = WakuMessageStore.init(database).tryGet()
|
store = WakuMessageStore.init(database).tryGet()
|
||||||
proto = WakuStore.init(peerManager, rng, store)
|
proto = WakuStore.init(peerManager, rng, store)
|
||||||
|
|
||||||
|
waitFor proto.start()
|
||||||
switch.mount(proto)
|
switch.mount(proto)
|
||||||
|
|
||||||
return proto
|
return proto
|
||||||
@ -468,6 +469,7 @@ procSuite "Waku Store - fault tolerant store":
|
|||||||
let storePeer = peer.get(listenSwitch.peerInfo.toRemotePeerInfo())
|
let storePeer = peer.get(listenSwitch.peerInfo.toRemotePeerInfo())
|
||||||
proto.setPeer(storePeer)
|
proto.setPeer(storePeer)
|
||||||
|
|
||||||
|
await proto.start()
|
||||||
listenSwitch.mount(proto)
|
listenSwitch.mount(proto)
|
||||||
|
|
||||||
return (listenSwitch, dialSwitch, proto)
|
return (listenSwitch, dialSwitch, proto)
|
||||||
|
|||||||
@ -62,11 +62,11 @@ procSuite "Waku SWAP Accounting":
|
|||||||
|
|
||||||
# Start nodes and mount protocols
|
# Start nodes and mount protocols
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountSwap()
|
await node1.mountSwap()
|
||||||
node1.mountStore(persistMessages = true)
|
await node1.mountStore(persistMessages = true)
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountSwap()
|
await node2.mountSwap()
|
||||||
node2.mountStore(persistMessages = true)
|
await node2.mountStore(persistMessages = true)
|
||||||
|
|
||||||
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
||||||
|
|
||||||
@ -112,11 +112,11 @@ procSuite "Waku SWAP Accounting":
|
|||||||
|
|
||||||
# Start nodes and mount protocols
|
# Start nodes and mount protocols
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountSwap(swapConfig)
|
await node1.mountSwap(swapConfig)
|
||||||
node1.mountStore(persistMessages = true)
|
await node1.mountStore(persistMessages = true)
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountSwap(swapConfig)
|
await node2.mountSwap(swapConfig)
|
||||||
node2.mountStore(persistMessages = true)
|
await node2.mountStore(persistMessages = true)
|
||||||
|
|
||||||
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ const KEY_PATH = sourceDir / "resources/test_key.pem"
|
|||||||
const CERT_PATH = sourceDir / "resources/test_cert.pem"
|
const CERT_PATH = sourceDir / "resources/test_cert.pem"
|
||||||
|
|
||||||
procSuite "WakuNode":
|
procSuite "WakuNode":
|
||||||
let rng = keys.newRng()
|
let rng = crypto.newRng()
|
||||||
|
|
||||||
asyncTest "Message published with content filter is retrievable":
|
asyncTest "Message published with content filter is retrievable":
|
||||||
let
|
let
|
||||||
@ -67,7 +67,7 @@ procSuite "WakuNode":
|
|||||||
|
|
||||||
await node.start()
|
await node.start()
|
||||||
|
|
||||||
node.mountRelay()
|
await node.mountRelay()
|
||||||
|
|
||||||
# Subscribe our node to the pubSubTopic where all chat data go onto.
|
# Subscribe our node to the pubSubTopic where all chat data go onto.
|
||||||
node.subscribe(pubSubTopic, relayHandler)
|
node.subscribe(pubSubTopic, relayHandler)
|
||||||
@ -119,11 +119,11 @@ procSuite "WakuNode":
|
|||||||
|
|
||||||
await allFutures([node1.start(), node2.start()])
|
await allFutures([node1.start(), node2.start()])
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
node1.mountFilter()
|
await node1.mountFilter()
|
||||||
node2.mountFilter()
|
await node2.mountFilter()
|
||||||
|
|
||||||
# Subscribe our node to the pubSubTopic where all chat data go onto.
|
# Subscribe our node to the pubSubTopic where all chat data go onto.
|
||||||
node1.subscribe(pubSubTopic, relayHandler)
|
node1.subscribe(pubSubTopic, relayHandler)
|
||||||
@ -166,12 +166,12 @@ procSuite "WakuNode":
|
|||||||
otherFR = FilterRequest(contentFilters: @[ContentFilter(contentTopic: otherContentTopic)], subscribe: true)
|
otherFR = FilterRequest(contentFilters: @[ContentFilter(contentTopic: otherContentTopic)], subscribe: true)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node1.mountFilter()
|
await node1.mountFilter()
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
node2.mountFilter()
|
await node2.mountFilter()
|
||||||
node2.wakuFilter.setPeer(node1.switch.peerInfo.toRemotePeerInfo())
|
node2.wakuFilter.setPeer(node1.switch.peerInfo.toRemotePeerInfo())
|
||||||
|
|
||||||
var defaultComplete = newFuture[bool]()
|
var defaultComplete = newFuture[bool]()
|
||||||
@ -237,12 +237,11 @@ procSuite "WakuNode":
|
|||||||
filterRequest = FilterRequest(contentFilters: @[ContentFilter(contentTopic: contentTopic)], subscribe: true)
|
filterRequest = FilterRequest(contentFilters: @[ContentFilter(contentTopic: contentTopic)], subscribe: true)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node1.mountFilter()
|
await node1.mountFilter()
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(relayMessages=false) # Do not start WakuRelay or subscribe to any topics
|
await node2.mountFilter()
|
||||||
node2.mountFilter()
|
|
||||||
node2.wakuFilter.setPeer(node1.switch.peerInfo.toRemotePeerInfo())
|
node2.wakuFilter.setPeer(node1.switch.peerInfo.toRemotePeerInfo())
|
||||||
|
|
||||||
check:
|
check:
|
||||||
@ -286,9 +285,9 @@ procSuite "WakuNode":
|
|||||||
var completionFut = newFuture[bool]()
|
var completionFut = newFuture[bool]()
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountStore(persistMessages = true)
|
await node1.mountStore(persistMessages = true)
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountStore(persistMessages = true)
|
await node2.mountStore(persistMessages = true)
|
||||||
|
|
||||||
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
||||||
|
|
||||||
@ -322,9 +321,9 @@ procSuite "WakuNode":
|
|||||||
var completionFut = newFuture[bool]()
|
var completionFut = newFuture[bool]()
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountFilter()
|
await node1.mountFilter()
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountFilter()
|
await node2.mountFilter()
|
||||||
|
|
||||||
node1.wakuFilter.setPeer(node2.switch.peerInfo.toRemotePeerInfo())
|
node1.wakuFilter.setPeer(node2.switch.peerInfo.toRemotePeerInfo())
|
||||||
|
|
||||||
@ -363,12 +362,12 @@ procSuite "WakuNode":
|
|||||||
storeComplFut = newFuture[bool]()
|
storeComplFut = newFuture[bool]()
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountStore(persistMessages = true)
|
await node1.mountStore(persistMessages = true)
|
||||||
node1.mountFilter()
|
await node1.mountFilter()
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountStore(persistMessages = true)
|
await node2.mountStore(persistMessages = true)
|
||||||
node2.mountFilter()
|
await node2.mountFilter()
|
||||||
|
|
||||||
node2.wakuFilter.setPeer(node1.switch.peerInfo.toRemotePeerInfo())
|
node2.wakuFilter.setPeer(node1.switch.peerInfo.toRemotePeerInfo())
|
||||||
node1.wakuStore.setPeer(node2.switch.peerInfo.toRemotePeerInfo())
|
node1.wakuStore.setPeer(node2.switch.peerInfo.toRemotePeerInfo())
|
||||||
@ -422,13 +421,13 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay(@[pubSubTopic])
|
await node3.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
@ -472,13 +471,13 @@ procSuite "WakuNode":
|
|||||||
# Setup node 1 with stable codec "/vac/waku/relay/2.0.0"
|
# Setup node 1 with stable codec "/vac/waku/relay/2.0.0"
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
node1.wakuRelay.codec = "/vac/waku/relay/2.0.0"
|
node1.wakuRelay.codec = "/vac/waku/relay/2.0.0"
|
||||||
|
|
||||||
# Setup node 2 with beta codec "/vac/waku/relay/2.0.0-beta2"
|
# Setup node 2 with beta codec "/vac/waku/relay/2.0.0-beta2"
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
node2.wakuRelay.codec = "/vac/waku/relay/2.0.0-beta2"
|
node2.wakuRelay.codec = "/vac/waku/relay/2.0.0-beta2"
|
||||||
|
|
||||||
check:
|
check:
|
||||||
@ -528,8 +527,8 @@ procSuite "WakuNode":
|
|||||||
node2PeerId = $(node2.switch.peerInfo.peerId)
|
node2PeerId = $(node2.switch.peerInfo.peerId)
|
||||||
node2Dns4Addr = "/dns4/localhost/tcp/60002/p2p/" & node2PeerId
|
node2Dns4Addr = "/dns4/localhost/tcp/60002/p2p/" & node2PeerId
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
await allFutures([node1.start(), node2.start()])
|
await allFutures([node1.start(), node2.start()])
|
||||||
|
|
||||||
@ -570,13 +569,13 @@ procSuite "WakuNode":
|
|||||||
|
|
||||||
# start all the nodes
|
# start all the nodes
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay(@[pubSubTopic])
|
await node3.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node3.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
@ -648,7 +647,7 @@ procSuite "WakuNode":
|
|||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
|
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
|
|
||||||
check:
|
check:
|
||||||
GossipSub(node1.wakuRelay).heartbeatFut.isNil == false
|
GossipSub(node1.wakuRelay).heartbeatFut.isNil == false
|
||||||
@ -660,7 +659,7 @@ procSuite "WakuNode":
|
|||||||
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
|
node2 = WakuNode.new(nodeKey2, ValidIpAddress.init("0.0.0.0"),
|
||||||
Port(60002))
|
Port(60002))
|
||||||
|
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
check:
|
check:
|
||||||
# Relay has not yet started as node has not yet started
|
# Relay has not yet started as node has not yet started
|
||||||
@ -692,17 +691,16 @@ procSuite "WakuNode":
|
|||||||
|
|
||||||
# Light node, only lightpush
|
# Light node, only lightpush
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(relayMessages=false) # Mount WakuRelay, but do not start or subscribe to any topics
|
await node1.mountLightPush()
|
||||||
node1.mountLightPush()
|
|
||||||
|
|
||||||
# Intermediate node
|
# Intermediate node
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
node2.mountLightPush()
|
await node2.mountLightPush()
|
||||||
|
|
||||||
# Receiving node
|
# Receiving node
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay(@[pubSubTopic])
|
await node3.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
discard await node1.peerManager.dialPeer(node2.switch.peerInfo.toRemotePeerInfo(), WakuLightPushCodec)
|
discard await node1.peerManager.dialPeer(node2.switch.peerInfo.toRemotePeerInfo(), WakuLightPushCodec)
|
||||||
await sleepAsync(5.seconds)
|
await sleepAsync(5.seconds)
|
||||||
@ -757,9 +755,9 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: "hello world".toBytes(), contentTopic: contentTopic)
|
message = WakuMessage(payload: "hello world".toBytes(), contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountStore(persistMessages = true)
|
await node1.mountStore(persistMessages = true)
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountStore(persistMessages = true)
|
await node2.mountStore(persistMessages = true)
|
||||||
|
|
||||||
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
await node2.wakuStore.handleMessage("/waku/2/default-waku/proto", message)
|
||||||
|
|
||||||
@ -797,9 +795,9 @@ procSuite "WakuNode":
|
|||||||
var completionFut = newFuture[bool]()
|
var completionFut = newFuture[bool]()
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountStore(persistMessages = true, store = store)
|
await node1.mountStore(persistMessages = true, store = store)
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountStore(persistMessages = true)
|
await node2.mountStore(persistMessages = true)
|
||||||
|
|
||||||
await node2.wakuStore.handleMessage(DefaultTopic, msg1)
|
await node2.wakuStore.handleMessage(DefaultTopic, msg1)
|
||||||
await node2.wakuStore.handleMessage(DefaultTopic, msg2)
|
await node2.wakuStore.handleMessage(DefaultTopic, msg2)
|
||||||
@ -852,15 +850,15 @@ procSuite "WakuNode":
|
|||||||
|
|
||||||
# Node with connection limit set to 1
|
# Node with connection limit set to 1
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay()
|
await node1.mountRelay()
|
||||||
|
|
||||||
# Remote node 1
|
# Remote node 1
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay()
|
await node2.mountRelay()
|
||||||
|
|
||||||
# Remote node 2
|
# Remote node 2
|
||||||
await node3.start()
|
await node3.start()
|
||||||
node3.mountRelay()
|
await node3.mountRelay()
|
||||||
|
|
||||||
discard await node1.peerManager.dialPeer(node2.switch.peerInfo.toRemotePeerInfo(), WakuRelayCodec)
|
discard await node1.peerManager.dialPeer(node2.switch.peerInfo.toRemotePeerInfo(), WakuRelayCodec)
|
||||||
await sleepAsync(3.seconds)
|
await sleepAsync(3.seconds)
|
||||||
@ -888,10 +886,10 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
|
|
||||||
@ -933,10 +931,10 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
|
|
||||||
@ -977,10 +975,10 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
#delete websocket peer address
|
#delete websocket peer address
|
||||||
# TODO: a better way to find the index - this is too brittle
|
# TODO: a better way to find the index - this is too brittle
|
||||||
@ -1025,10 +1023,10 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
|
|
||||||
@ -1078,10 +1076,10 @@ procSuite "WakuNode":
|
|||||||
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
message = WakuMessage(payload: payload, contentTopic: contentTopic)
|
||||||
|
|
||||||
await node1.start()
|
await node1.start()
|
||||||
node1.mountRelay(@[pubSubTopic])
|
await node1.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node2.start()
|
await node2.start()
|
||||||
node2.mountRelay(@[pubSubTopic])
|
await node2.mountRelay(@[pubSubTopic])
|
||||||
|
|
||||||
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()])
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
|
|
||||||
# set up three nodes
|
# set up three nodes
|
||||||
# node1
|
# node1
|
||||||
node1.mountRelay(@[rlnRelayPubSubTopic])
|
await node1.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt1, memKeyPairOpt1, memIndexOpt1) = rlnRelayStaticSetUp(1) # set up rln relay inputs
|
let (groupOpt1, memKeyPairOpt1, memIndexOpt1) = rlnRelayStaticSetUp(1) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node1.mountRlnRelayStatic(group = groupOpt1.get(),
|
node1.mountRlnRelayStatic(group = groupOpt1.get(),
|
||||||
@ -58,7 +58,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
await node1.start()
|
await node1.start()
|
||||||
|
|
||||||
# node 2
|
# node 2
|
||||||
node2.mountRelay(@[rlnRelayPubSubTopic])
|
await node2.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt2, memKeyPairOpt2, memIndexOpt2) = rlnRelayStaticSetUp(2) # set up rln relay inputs
|
let (groupOpt2, memKeyPairOpt2, memIndexOpt2) = rlnRelayStaticSetUp(2) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node2.mountRlnRelayStatic(group = groupOpt2.get(),
|
node2.mountRlnRelayStatic(group = groupOpt2.get(),
|
||||||
@ -69,7 +69,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
await node2.start()
|
await node2.start()
|
||||||
|
|
||||||
# node 3
|
# node 3
|
||||||
node3.mountRelay(@[rlnRelayPubSubTopic])
|
await node3.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt3, memKeyPairOpt3, memIndexOpt3) = rlnRelayStaticSetUp(3) # set up rln relay inputs
|
let (groupOpt3, memKeyPairOpt3, memIndexOpt3) = rlnRelayStaticSetUp(3) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node3.mountRlnRelayStatic(group = groupOpt3.get(),
|
node3.mountRlnRelayStatic(group = groupOpt3.get(),
|
||||||
@ -133,7 +133,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
|
|
||||||
# set up three nodes
|
# set up three nodes
|
||||||
# node1
|
# node1
|
||||||
node1.mountRelay(@[rlnRelayPubSubTopic])
|
await node1.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt1, memKeyPairOpt1, memIndexOpt1) = rlnRelayStaticSetUp(1) # set up rln relay inputs
|
let (groupOpt1, memKeyPairOpt1, memIndexOpt1) = rlnRelayStaticSetUp(1) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node1.mountRlnRelayStatic(group = groupOpt1.get(),
|
node1.mountRlnRelayStatic(group = groupOpt1.get(),
|
||||||
@ -144,7 +144,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
await node1.start()
|
await node1.start()
|
||||||
|
|
||||||
# node 2
|
# node 2
|
||||||
node2.mountRelay(@[rlnRelayPubSubTopic])
|
await node2.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt2, memKeyPairOpt2, memIndexOpt2) = rlnRelayStaticSetUp(2) # set up rln relay inputs
|
let (groupOpt2, memKeyPairOpt2, memIndexOpt2) = rlnRelayStaticSetUp(2) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node2.mountRlnRelayStatic(group = groupOpt2.get(),
|
node2.mountRlnRelayStatic(group = groupOpt2.get(),
|
||||||
@ -155,7 +155,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
await node2.start()
|
await node2.start()
|
||||||
|
|
||||||
# node 3
|
# node 3
|
||||||
node3.mountRelay(@[rlnRelayPubSubTopic])
|
await node3.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt3, memKeyPairOpt3, memIndexOpt3) = rlnRelayStaticSetUp(3) # set up rln relay inputs
|
let (groupOpt3, memKeyPairOpt3, memIndexOpt3) = rlnRelayStaticSetUp(3) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node3.mountRlnRelayStatic(group = groupOpt3.get(),
|
node3.mountRlnRelayStatic(group = groupOpt3.get(),
|
||||||
@ -237,7 +237,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
|
|
||||||
# set up three nodes
|
# set up three nodes
|
||||||
# node1
|
# node1
|
||||||
node1.mountRelay(@[rlnRelayPubSubTopic])
|
await node1.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt1, memKeyPairOpt1, memIndexOpt1) = rlnRelayStaticSetUp(1) # set up rln relay inputs
|
let (groupOpt1, memKeyPairOpt1, memIndexOpt1) = rlnRelayStaticSetUp(1) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node1.mountRlnRelayStatic(group = groupOpt1.get(),
|
node1.mountRlnRelayStatic(group = groupOpt1.get(),
|
||||||
@ -248,7 +248,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
await node1.start()
|
await node1.start()
|
||||||
|
|
||||||
# node 2
|
# node 2
|
||||||
node2.mountRelay(@[rlnRelayPubSubTopic])
|
await node2.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt2, memKeyPairOpt2, memIndexOpt2) = rlnRelayStaticSetUp(2) # set up rln relay inputs
|
let (groupOpt2, memKeyPairOpt2, memIndexOpt2) = rlnRelayStaticSetUp(2) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node2.mountRlnRelayStatic(group = groupOpt2.get(),
|
node2.mountRlnRelayStatic(group = groupOpt2.get(),
|
||||||
@ -259,7 +259,7 @@ procSuite "WakuNode - RLN relay":
|
|||||||
await node2.start()
|
await node2.start()
|
||||||
|
|
||||||
# node 3
|
# node 3
|
||||||
node3.mountRelay(@[rlnRelayPubSubTopic])
|
await node3.mountRelay(@[rlnRelayPubSubTopic])
|
||||||
let (groupOpt3, memKeyPairOpt3, memIndexOpt3) = rlnRelayStaticSetUp(3) # set up rln relay inputs
|
let (groupOpt3, memKeyPairOpt3, memIndexOpt3) = rlnRelayStaticSetUp(3) # set up rln relay inputs
|
||||||
# mount rlnrelay in off-chain mode
|
# mount rlnrelay in off-chain mode
|
||||||
node3.mountRlnRelayStatic(group = groupOpt3.get(),
|
node3.mountRlnRelayStatic(group = groupOpt3.get(),
|
||||||
|
|||||||
2
vendor/news
vendored
2
vendor/news
vendored
@ -1 +1 @@
|
|||||||
Subproject commit fadc54f4683869fe9c97fe59e122daa2607abc8e
|
Subproject commit 5f09c76d44e1ea3bbe998ba0dc222f6fd9c54d57
|
||||||
2
vendor/nim-bearssl
vendored
2
vendor/nim-bearssl
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 0ebb1d7a4af5f4b4d4756a9b6dbfe5d411fa55d9
|
Subproject commit f4c4233de453cb7eac0ce3f3ffad6496295f83ab
|
||||||
2
vendor/nim-chronicles
vendored
2
vendor/nim-chronicles
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 972f25d6c3a324848728d2d05796209f1b9d120e
|
Subproject commit 7631f7b2ee03398cb1512a79923264e8f9410af6
|
||||||
2
vendor/nim-chronos
vendored
2
vendor/nim-chronos
vendored
@ -1 +1 @@
|
|||||||
Subproject commit b3548583fcc768d93654685e7ea55126c1752c29
|
Subproject commit 1334cdfebdc6182ff752e7d20796d9936cc8faa3
|
||||||
2
vendor/nim-confutils
vendored
2
vendor/nim-confutils
vendored
@ -1 +1 @@
|
|||||||
Subproject commit fc03a0c4e172471294ee5f58a880fa1c8495c00b
|
Subproject commit 40c6f0b378a34d4812e410e9d6762e21f059de4c
|
||||||
2
vendor/nim-eth
vendored
2
vendor/nim-eth
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 92cd608a5f47de1aa55861afa6dcc13bea4ae842
|
Subproject commit b057057e64cc041d797e894a728963b10fbfac69
|
||||||
2
vendor/nim-faststreams
vendored
2
vendor/nim-faststreams
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 49e2c52eb5dda46b1c9c10d079abe7bffe6cea89
|
Subproject commit 682b9c6541bbb82b09e415fbe9ef944570b62f76
|
||||||
2
vendor/nim-http-utils
vendored
2
vendor/nim-http-utils
vendored
@ -1 +1 @@
|
|||||||
Subproject commit f83fbce4d6ec7927b75be3f85e4fa905fcb69788
|
Subproject commit e88e231dfcef4585fe3b2fbd9b664dbd28a88040
|
||||||
2
vendor/nim-json-rpc
vendored
2
vendor/nim-json-rpc
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 335f292a5816910aebf215e3a88db8a665133e0e
|
Subproject commit 32ba2d16b919310a8c6797ac45747595f301a207
|
||||||
2
vendor/nim-json-serialization
vendored
2
vendor/nim-json-serialization
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 5034fef8d048d8d9e5e0228864dacf627d35b96f
|
Subproject commit e5b18fb710c3d0167ec79f3b892f5a7a1bc6d1a4
|
||||||
2
vendor/nim-libbacktrace
vendored
2
vendor/nim-libbacktrace
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 2ea147a71c4c05d64fdff5e7b8d8990eb5821399
|
Subproject commit b29c22ba0ef13de50b779c776830dbea1d50cd33
|
||||||
2
vendor/nim-libp2p
vendored
2
vendor/nim-libp2p
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 718374d890f3997b56bee61cb5971eb367f05b59
|
Subproject commit abbeaab684c500f4c6ff5881797bb8f184b41ccc
|
||||||
2
vendor/nim-metrics
vendored
2
vendor/nim-metrics
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 11edec862f96e42374bc2d584c84cc88d5d1f95f
|
Subproject commit 0a6477268e850d7bc98347b3875301524871765f
|
||||||
2
vendor/nim-nat-traversal
vendored
2
vendor/nim-nat-traversal
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 11df74552d3a3abe2c722c536c8075ef6814d5fa
|
Subproject commit 48f94ebd194874d98da14a2494e89fc3a619a7ae
|
||||||
2
vendor/nim-presto
vendored
2
vendor/nim-presto
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 1dba6dd6f466cd4e7b793b0e473c237ce453d82a
|
Subproject commit d298b0ba307023f2664757cee92ec94dde6acd18
|
||||||
2
vendor/nim-serialization
vendored
2
vendor/nim-serialization
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 9631fbd1c81c8b25ff8740df440ca7ba87fa6131
|
Subproject commit 493d18b8292fc03aa4f835fd825dea1183f97466
|
||||||
2
vendor/nim-stew
vendored
2
vendor/nim-stew
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 412a691f5d29c93bee8f083d213ee8f2c6578bed
|
Subproject commit 018760954a1530b7336aed7133393908875d860f
|
||||||
2
vendor/nim-stint
vendored
2
vendor/nim-stint
vendored
@ -1 +1 @@
|
|||||||
Subproject commit c05f75a8dae5f0066db5008dbe41a803ecbfbbcf
|
Subproject commit d1acb427434bf3aa8433acb6873228bbfd16b0f4
|
||||||
2
vendor/nim-testutils
vendored
2
vendor/nim-testutils
vendored
@ -1 +1 @@
|
|||||||
Subproject commit b6867213f289f12d8f15acdd154a32b98df332bf
|
Subproject commit 29f98cec6fd84652b2954394d3c86dd63c85dd8d
|
||||||
2
vendor/nim-toml-serialization
vendored
2
vendor/nim-toml-serialization
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 90369dd67b4a41109e26716829f6f3f077eddf38
|
Subproject commit 1043942d3479ba931437b371834de0d19218e621
|
||||||
2
vendor/nim-unittest2
vendored
2
vendor/nim-unittest2
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 26f31488a881d638d239359a17082a36c055b726
|
Subproject commit bdb5eca353acd46654f89edeef6f84d0dba8f5d0
|
||||||
2
vendor/nim-web3
vendored
2
vendor/nim-web3
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 755b6dc92b1545d6c9eb242c551e8188e35ffe5d
|
Subproject commit 06ef3497d4017f0f85edcadb6f743452566a2448
|
||||||
2
vendor/nim-websock
vendored
2
vendor/nim-websock
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 47b486b52f850d3534b8a1e778fcf9cf40ffe7f6
|
Subproject commit af8779d9d95e488ec9fd2d584b6328bd506c702b
|
||||||
2
vendor/nim-zlib
vendored
2
vendor/nim-zlib
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 74cdeb54b21bededb5a515d36f608bc1850555a2
|
Subproject commit 6a6670afba6b97b29b920340e2641978c05ab4d8
|
||||||
2
vendor/nimbus-build-system
vendored
2
vendor/nimbus-build-system
vendored
@ -1 +1 @@
|
|||||||
Subproject commit a8ab2dc39aad4d69ba3be72868772d851b4b9741
|
Subproject commit c7977002fb9e631a946b6589a0b7adc7dc9acef9
|
||||||
2
vendor/nimcrypto
vendored
2
vendor/nimcrypto
vendored
@ -1 +1 @@
|
|||||||
Subproject commit a5742a9a214ac33f91615f3862c7b099aec43b00
|
Subproject commit 24e006df85927f64916e60511620583b11403178
|
||||||
2
vendor/zerokit
vendored
2
vendor/zerokit
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 3378aed85716144231e036c076fe3f14ed9538de
|
Subproject commit 2455bea9225b183d2441620037a13cc38b3108c7
|
||||||
@ -106,7 +106,7 @@ type
|
|||||||
|
|
||||||
nodekeyV2* {.
|
nodekeyV2* {.
|
||||||
desc: "P2P node private key as hex"
|
desc: "P2P node private key as hex"
|
||||||
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
|
defaultValue: crypto.PrivateKey.random(Secp256k1, crypto.newRng()[]).tryGet()
|
||||||
name: "nodekey-v2" }: crypto.PrivateKey
|
name: "nodekey-v2" }: crypto.PrivateKey
|
||||||
|
|
||||||
store* {.
|
store* {.
|
||||||
|
|||||||
@ -49,7 +49,7 @@ type
|
|||||||
nodev2*: WakuNode
|
nodev2*: WakuNode
|
||||||
nodev2PubsubTopic: wakunode2.Topic # Pubsub topic to bridge to/from
|
nodev2PubsubTopic: wakunode2.Topic # Pubsub topic to bridge to/from
|
||||||
seen: seq[hashes.Hash] # FIFO queue of seen WakuMessages. Used for deduplication.
|
seen: seq[hashes.Hash] # FIFO queue of seen WakuMessages. Used for deduplication.
|
||||||
rng: ref BrHmacDrbgContext
|
rng: ref HmacDrbgContext
|
||||||
v1Pool: seq[Node] # Pool of v1 nodes for possible connections
|
v1Pool: seq[Node] # Pool of v1 nodes for possible connections
|
||||||
targetV1Peers: int # Target number of v1 peers to maintain
|
targetV1Peers: int # Target number of v1 peers to maintain
|
||||||
started: bool # Indicates that bridge is running
|
started: bool # Indicates that bridge is running
|
||||||
@ -215,7 +215,7 @@ proc new*(T: type WakuBridge,
|
|||||||
nodev1Key: keys.KeyPair,
|
nodev1Key: keys.KeyPair,
|
||||||
nodev1Address: Address,
|
nodev1Address: Address,
|
||||||
powRequirement = 0.002,
|
powRequirement = 0.002,
|
||||||
rng: ref BrHmacDrbgContext,
|
rng: ref HmacDrbgContext,
|
||||||
topicInterest = none(seq[waku_protocol.Topic]),
|
topicInterest = none(seq[waku_protocol.Topic]),
|
||||||
bloom = some(fullBloom()),
|
bloom = some(fullBloom()),
|
||||||
# NodeV2 initialisation
|
# NodeV2 initialisation
|
||||||
@ -233,7 +233,7 @@ proc new*(T: type WakuBridge,
|
|||||||
var
|
var
|
||||||
nodev1 = newEthereumNode(keys = nodev1Key, address = nodev1Address,
|
nodev1 = newEthereumNode(keys = nodev1Key, address = nodev1Address,
|
||||||
networkId = NetworkId(1), chain = nil, clientId = ClientIdV1,
|
networkId = NetworkId(1), chain = nil, clientId = ClientIdV1,
|
||||||
addAllCapabilities = false, rng = rng)
|
addAllCapabilities = false, bindUdpPort = nodev1Address.udpPort, bindTcpPort = nodev1Address.tcpPort, rng = rng)
|
||||||
|
|
||||||
nodev1.addCapability Waku # Always enable Waku protocol
|
nodev1.addCapability Waku # Always enable Waku protocol
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ proc start*(bridge: WakuBridge) {.async.} =
|
|||||||
|
|
||||||
debug "Start listening on Waku v1"
|
debug "Start listening on Waku v1"
|
||||||
# Start listening on Waku v1 node
|
# Start listening on Waku v1 node
|
||||||
let connectedFut = bridge.nodev1.connectToNetwork(@[],
|
let connectedFut = bridge.nodev1.connectToNetwork(
|
||||||
true, # Always enable listening
|
true, # Always enable listening
|
||||||
false # Disable discovery (only discovery v4 is currently supported)
|
false # Disable discovery (only discovery v4 is currently supported)
|
||||||
)
|
)
|
||||||
@ -284,7 +284,7 @@ proc start*(bridge: WakuBridge) {.async.} =
|
|||||||
|
|
||||||
# Always mount relay for bridge.
|
# Always mount relay for bridge.
|
||||||
# `triggerSelf` is false on a `bridge` to avoid duplicates
|
# `triggerSelf` is false on a `bridge` to avoid duplicates
|
||||||
bridge.nodev2.mountRelay(triggerSelf = false)
|
await bridge.nodev2.mountRelay(triggerSelf = false)
|
||||||
|
|
||||||
# Bridging
|
# Bridging
|
||||||
# Handle messages on Waku v1 and bridge to Waku v2
|
# Handle messages on Waku v1 and bridge to Waku v2
|
||||||
@ -317,9 +317,9 @@ proc stop*(bridge: WakuBridge) {.async.} =
|
|||||||
{.pop.} # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
{.pop.} # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
import
|
import
|
||||||
eth/p2p/whispernodes,
|
|
||||||
libp2p/nameresolving/dnsresolver,
|
libp2p/nameresolving/dnsresolver,
|
||||||
./utils/nat,
|
./utils/nat,
|
||||||
|
../whisper/whispernodes,
|
||||||
../v1/node/rpc/wakusim,
|
../v1/node/rpc/wakusim,
|
||||||
../v1/node/rpc/waku,
|
../v1/node/rpc/waku,
|
||||||
../v1/node/rpc/key_storage,
|
../v1/node/rpc/key_storage,
|
||||||
@ -424,13 +424,13 @@ when isMainModule:
|
|||||||
# Now load rest of config
|
# Now load rest of config
|
||||||
|
|
||||||
# Mount configured Waku v2 protocols
|
# Mount configured Waku v2 protocols
|
||||||
mountLibp2pPing(bridge.nodev2)
|
waitFor mountLibp2pPing(bridge.nodev2)
|
||||||
|
|
||||||
if conf.store:
|
if conf.store:
|
||||||
mountStore(bridge.nodev2, persistMessages = false) # Bridge does not persist messages
|
waitFor mountStore(bridge.nodev2, persistMessages = false) # Bridge does not persist messages
|
||||||
|
|
||||||
if conf.filter:
|
if conf.filter:
|
||||||
mountFilter(bridge.nodev2)
|
waitFor mountFilter(bridge.nodev2)
|
||||||
|
|
||||||
if conf.staticnodesV2.len > 0:
|
if conf.staticnodesV2.len > 0:
|
||||||
waitFor connectToNodes(bridge.nodev2, conf.staticnodesV2)
|
waitFor connectToNodes(bridge.nodev2, conf.staticnodesV2)
|
||||||
|
|||||||
@ -10,7 +10,7 @@ from stew/byteutils import hexToSeqByte, hexToByteArray
|
|||||||
# Blatant copy of Whisper RPC but for the Waku protocol
|
# Blatant copy of Whisper RPC but for the Waku protocol
|
||||||
|
|
||||||
proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer,
|
proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer,
|
||||||
rng: ref BrHmacDrbgContext) =
|
rng: ref HmacDrbgContext) =
|
||||||
|
|
||||||
rpcsrv.rpc("waku_version") do() -> string:
|
rpcsrv.rpc("waku_version") do() -> string:
|
||||||
## Returns string of the current Waku protocol version.
|
## Returns string of the current Waku protocol version.
|
||||||
|
|||||||
@ -5,15 +5,15 @@ import
|
|||||||
metrics, metrics/chronicles_support, metrics/chronos_httpserver,
|
metrics, metrics/chronicles_support, metrics/chronos_httpserver,
|
||||||
stew/shims/net as stewNet,
|
stew/shims/net as stewNet,
|
||||||
eth/[keys, p2p], eth/common/utils,
|
eth/[keys, p2p], eth/common/utils,
|
||||||
eth/p2p/[discovery, enode, peer_pool, bootnodes, whispernodes],
|
eth/p2p/[discovery, enode, peer_pool, bootnodes],
|
||||||
../../whisper/whisper_protocol,
|
../../whisper/[whispernodes, whisper_protocol],
|
||||||
../protocol/[waku_protocol, waku_bridge],
|
../protocol/[waku_protocol, waku_bridge],
|
||||||
../../common/utils/nat,
|
../../common/utils/nat,
|
||||||
./rpc/[waku, wakusim, key_storage], ./waku_helpers, ./config
|
./rpc/[waku, wakusim, key_storage], ./waku_helpers, ./config
|
||||||
|
|
||||||
const clientId = "Nimbus waku node"
|
const clientId = "Nimbus waku node"
|
||||||
|
|
||||||
proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext)
|
proc run(config: WakuNodeConf, rng: ref HmacDrbgContext)
|
||||||
{.raises: [Defect, ValueError, RpcBindError, CatchableError, Exception]} =
|
{.raises: [Defect, ValueError, RpcBindError, CatchableError, Exception]} =
|
||||||
## `udpPort` is only supplied to satisfy underlying APIs but is not
|
## `udpPort` is only supplied to satisfy underlying APIs but is not
|
||||||
## actually a supported transport.
|
## actually a supported transport.
|
||||||
@ -32,10 +32,15 @@ proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext)
|
|||||||
Address(ip: ipExt.get(),
|
Address(ip: ipExt.get(),
|
||||||
tcpPort: Port(config.tcpPort + config.portsShift),
|
tcpPort: Port(config.tcpPort + config.portsShift),
|
||||||
udpPort: Port(udpPort + config.portsShift))
|
udpPort: Port(udpPort + config.portsShift))
|
||||||
|
bootnodes = if config.bootnodes.len > 0: setBootNodes(config.bootnodes)
|
||||||
|
elif config.fleet == prod: setBootNodes(StatusBootNodes)
|
||||||
|
elif config.fleet == staging: setBootNodes(StatusBootNodesStaging)
|
||||||
|
elif config.fleet == test : setBootNodes(StatusBootNodesTest)
|
||||||
|
else: @[]
|
||||||
|
|
||||||
# Set-up node
|
# Set-up node
|
||||||
var node = newEthereumNode(config.nodekey, address, NetworkId(1), nil, clientId,
|
var node = newEthereumNode(config.nodekey, address, NetworkId(1), nil, clientId,
|
||||||
addAllCapabilities = false, rng = rng)
|
addAllCapabilities = false, bootstrapNodes = bootnodes, bindUdpPort = address.udpPort, bindTcpPort = address.tcpPort, rng = rng)
|
||||||
if not config.bootnodeOnly:
|
if not config.bootnodeOnly:
|
||||||
node.addCapability Waku # Always enable Waku protocol
|
node.addCapability Waku # Always enable Waku protocol
|
||||||
var topicInterest: Option[seq[waku_protocol.Topic]]
|
var topicInterest: Option[seq[waku_protocol.Topic]]
|
||||||
@ -57,14 +62,7 @@ proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext)
|
|||||||
if config.whisperBridge:
|
if config.whisperBridge:
|
||||||
node.shareMessageQueue()
|
node.shareMessageQueue()
|
||||||
|
|
||||||
# TODO: Status fleet bootnodes are discv5? That will not work.
|
let connectedFut = node.connectToNetwork(not config.noListen,
|
||||||
let bootnodes = if config.bootnodes.len > 0: setBootNodes(config.bootnodes)
|
|
||||||
elif config.fleet == prod: setBootNodes(StatusBootNodes)
|
|
||||||
elif config.fleet == staging: setBootNodes(StatusBootNodesStaging)
|
|
||||||
elif config.fleet == test : setBootNodes(StatusBootNodesTest)
|
|
||||||
else: @[]
|
|
||||||
|
|
||||||
let connectedFut = node.connectToNetwork(bootnodes, not config.noListen,
|
|
||||||
config.discovery)
|
config.discovery)
|
||||||
connectedFut.callback = proc(data: pointer) {.gcsafe.} =
|
connectedFut.callback = proc(data: pointer) {.gcsafe.} =
|
||||||
{.gcsafe.}:
|
{.gcsafe.}:
|
||||||
|
|||||||
@ -72,7 +72,7 @@ type
|
|||||||
maxMsgSize*: uint32
|
maxMsgSize*: uint32
|
||||||
confirmationsEnabled*: bool
|
confirmationsEnabled*: bool
|
||||||
rateLimits*: Option[RateLimits]
|
rateLimits*: Option[RateLimits]
|
||||||
topics*: Option[seq[Topic]]
|
topics*: Option[seq[whisper_types.Topic]]
|
||||||
|
|
||||||
Accounting* = ref object
|
Accounting* = ref object
|
||||||
sent*: uint
|
sent*: uint
|
||||||
@ -84,7 +84,7 @@ type
|
|||||||
bloom*: Bloom
|
bloom*: Bloom
|
||||||
isLightNode*: bool
|
isLightNode*: bool
|
||||||
trusted*: bool
|
trusted*: bool
|
||||||
topics*: Option[seq[Topic]]
|
topics*: Option[seq[whisper_types.Topic]]
|
||||||
received: HashSet[Hash]
|
received: HashSet[Hash]
|
||||||
accounting*: Accounting
|
accounting*: Accounting
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ type
|
|||||||
lightNode*: Option[bool]
|
lightNode*: Option[bool]
|
||||||
confirmationsEnabled*: Option[bool]
|
confirmationsEnabled*: Option[bool]
|
||||||
rateLimits*: Option[RateLimits]
|
rateLimits*: Option[RateLimits]
|
||||||
topicInterest*: Option[seq[Topic]]
|
topicInterest*: Option[seq[whisper_types.Topic]]
|
||||||
|
|
||||||
KeyKind* = enum
|
KeyKind* = enum
|
||||||
powRequirementKey,
|
powRequirementKey,
|
||||||
@ -191,7 +191,7 @@ proc read*(rlp: var Rlp, T: typedesc[StatusOptions]):
|
|||||||
of rateLimitsKey:
|
of rateLimitsKey:
|
||||||
result.rateLimits = some(rlp.read(RateLimits))
|
result.rateLimits = some(rlp.read(RateLimits))
|
||||||
of topicInterestKey:
|
of topicInterestKey:
|
||||||
result.topicInterest = some(rlp.read(seq[Topic]))
|
result.topicInterest = some(rlp.read(seq[whisper_types.Topic]))
|
||||||
|
|
||||||
proc allowed*(msg: Message, config: WakuConfig): bool =
|
proc allowed*(msg: Message, config: WakuConfig): bool =
|
||||||
# Check max msg size, already happens in RLPx but there is a specific waku
|
# Check max msg size, already happens in RLPx but there is a specific waku
|
||||||
@ -235,7 +235,7 @@ proc initProtocolState*(network: WakuNetwork, node: EthereumNode) {.gcsafe.} =
|
|||||||
network.config.confirmationsEnabled = false
|
network.config.confirmationsEnabled = false
|
||||||
network.config.rateLimits = none(RateLimits)
|
network.config.rateLimits = none(RateLimits)
|
||||||
network.config.maxMsgSize = defaultMaxMsgSize
|
network.config.maxMsgSize = defaultMaxMsgSize
|
||||||
network.config.topics = none(seq[Topic])
|
network.config.topics = none(seq[whisper_types.Topic])
|
||||||
asyncSpawn node.run(network)
|
asyncSpawn node.run(network)
|
||||||
|
|
||||||
p2pProtocol Waku(version = wakuVersion,
|
p2pProtocol Waku(version = wakuVersion,
|
||||||
@ -349,7 +349,7 @@ p2pProtocol Waku(version = wakuVersion,
|
|||||||
peer.state.topics = options.topicInterest
|
peer.state.topics = options.topicInterest
|
||||||
elif options.bloomFilter.isSome():
|
elif options.bloomFilter.isSome():
|
||||||
peer.state.bloom = options.bloomFilter.get()
|
peer.state.bloom = options.bloomFilter.get()
|
||||||
peer.state.topics = none(seq[Topic])
|
peer.state.topics = none(seq[whisper_types.Topic])
|
||||||
|
|
||||||
if options.powRequirement.isSome():
|
if options.powRequirement.isSome():
|
||||||
peer.state.powRequirement = options.powRequirement.get()
|
peer.state.powRequirement = options.powRequirement.get()
|
||||||
@ -498,7 +498,7 @@ proc queueMessage(node: EthereumNode, msg: Message): bool =
|
|||||||
# Public EthereumNode calls ----------------------------------------------------
|
# Public EthereumNode calls ----------------------------------------------------
|
||||||
|
|
||||||
proc postEncoded*(node: EthereumNode, ttl: uint32,
|
proc postEncoded*(node: EthereumNode, ttl: uint32,
|
||||||
topic: Topic, encodedPayload: seq[byte],
|
topic: whisper_types.Topic, encodedPayload: seq[byte],
|
||||||
powTime = 1'f,
|
powTime = 1'f,
|
||||||
powTarget = defaultMinPow,
|
powTarget = defaultMinPow,
|
||||||
targetPeer = none[NodeId]()): bool =
|
targetPeer = none[NodeId]()): bool =
|
||||||
@ -548,7 +548,7 @@ proc postEncoded*(node: EthereumNode, ttl: uint32,
|
|||||||
|
|
||||||
proc postMessage*(node: EthereumNode, pubKey = none[PublicKey](),
|
proc postMessage*(node: EthereumNode, pubKey = none[PublicKey](),
|
||||||
symKey = none[SymKey](), src = none[PrivateKey](),
|
symKey = none[SymKey](), src = none[PrivateKey](),
|
||||||
ttl: uint32, topic: Topic, payload: seq[byte],
|
ttl: uint32, topic: whisper_types.Topic, payload: seq[byte],
|
||||||
padding = none[seq[byte]](), powTime = 1'f,
|
padding = none[seq[byte]](), powTime = 1'f,
|
||||||
powTarget = defaultMinPow,
|
powTarget = defaultMinPow,
|
||||||
targetPeer = none[NodeId]()): bool =
|
targetPeer = none[NodeId]()): bool =
|
||||||
@ -614,7 +614,7 @@ proc setBloomFilter*(node: EthereumNode, bloom: Bloom) {.async.} =
|
|||||||
# NOTE: do we need a tolerance of old bloom filter for some time?
|
# NOTE: do we need a tolerance of old bloom filter for some time?
|
||||||
node.protocolState(Waku).config.bloom = some(bloom)
|
node.protocolState(Waku).config.bloom = some(bloom)
|
||||||
# reset topics
|
# reset topics
|
||||||
node.protocolState(Waku).config.topics = none(seq[Topic])
|
node.protocolState(Waku).config.topics = none(seq[whisper_types.Topic])
|
||||||
|
|
||||||
var futures: seq[Future[void]] = @[]
|
var futures: seq[Future[void]] = @[]
|
||||||
let list = StatusOptions(bloomFilter: some(bloom))
|
let list = StatusOptions(bloomFilter: some(bloom))
|
||||||
@ -624,7 +624,7 @@ proc setBloomFilter*(node: EthereumNode, bloom: Bloom) {.async.} =
|
|||||||
# Exceptions from sendMsg will not be raised
|
# Exceptions from sendMsg will not be raised
|
||||||
await allFutures(futures)
|
await allFutures(futures)
|
||||||
|
|
||||||
proc setTopicInterest*(node: EthereumNode, topics: seq[Topic]):
|
proc setTopicInterest*(node: EthereumNode, topics: seq[whisper_types.Topic]):
|
||||||
Future[bool] {.async.} =
|
Future[bool] {.async.} =
|
||||||
if topics.len > topicInterestMax:
|
if topics.len > topicInterestMax:
|
||||||
return false
|
return false
|
||||||
|
|||||||
@ -35,7 +35,7 @@ type
|
|||||||
|
|
||||||
nodekey* {.
|
nodekey* {.
|
||||||
desc: "P2P node private key as 64 char hex string.",
|
desc: "P2P node private key as 64 char hex string.",
|
||||||
defaultValue: crypto.PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
|
defaultValue: crypto.PrivateKey.random(Secp256k1, crypto.newRng()[]).tryGet()
|
||||||
name: "nodekey" }: crypto.PrivateKey
|
name: "nodekey" }: crypto.PrivateKey
|
||||||
|
|
||||||
listenAddress* {.
|
listenAddress* {.
|
||||||
|
|||||||
@ -108,7 +108,7 @@ proc new*(T: type WakuDiscoveryV5,
|
|||||||
privateKey: keys.PrivateKey,
|
privateKey: keys.PrivateKey,
|
||||||
flags: WakuEnrBitfield,
|
flags: WakuEnrBitfield,
|
||||||
enrFields: openArray[(string, seq[byte])],
|
enrFields: openArray[(string, seq[byte])],
|
||||||
rng: ref BrHmacDrbgContext,
|
rng: ref HmacDrbgContext,
|
||||||
discv5Config: protocol.DiscoveryConfig = protocol.defaultDiscoveryConfig): T =
|
discv5Config: protocol.DiscoveryConfig = protocol.defaultDiscoveryConfig): T =
|
||||||
## TODO: consider loading from a configurable bootstrap file
|
## TODO: consider loading from a configurable bootstrap file
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ proc new*(T: type WakuDiscoveryV5,
|
|||||||
privateKey: keys.PrivateKey,
|
privateKey: keys.PrivateKey,
|
||||||
flags: WakuEnrBitfield,
|
flags: WakuEnrBitfield,
|
||||||
enrFields: openArray[(string, seq[byte])],
|
enrFields: openArray[(string, seq[byte])],
|
||||||
rng: ref BrHmacDrbgContext,
|
rng: ref HmacDrbgContext,
|
||||||
discv5Config: protocol.DiscoveryConfig = protocol.defaultDiscoveryConfig): T =
|
discv5Config: protocol.DiscoveryConfig = protocol.defaultDiscoveryConfig): T =
|
||||||
|
|
||||||
var bootstrapEnrs: seq[enr.Record]
|
var bootstrapEnrs: seq[enr.Record]
|
||||||
|
|||||||
@ -54,7 +54,7 @@ proc toWakuMessage*(relayMessage: WakuRelayMessage, version: uint32): WakuMessag
|
|||||||
version: version,
|
version: version,
|
||||||
timestamp: t)
|
timestamp: t)
|
||||||
|
|
||||||
proc toWakuMessage*(relayMessage: WakuRelayMessage, version: uint32, rng: ref BrHmacDrbgContext, symkey: Option[SymKey], pubKey: Option[keys.PublicKey]): WakuMessage =
|
proc toWakuMessage*(relayMessage: WakuRelayMessage, version: uint32, rng: ref HmacDrbgContext, symkey: Option[SymKey], pubKey: Option[keys.PublicKey]): WakuMessage =
|
||||||
# @TODO global definition for default content topic
|
# @TODO global definition for default content topic
|
||||||
const defaultCT = ContentTopic("/waku/2/default-content/proto")
|
const defaultCT = ContentTopic("/waku/2/default-content/proto")
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
import
|
import
|
||||||
std/[tables,sequtils],
|
std/[tables,sequtils],
|
||||||
chronicles,
|
chronicles,
|
||||||
|
eth/keys,
|
||||||
json_rpc/rpcserver,
|
json_rpc/rpcserver,
|
||||||
nimcrypto/sysrand,
|
nimcrypto/sysrand,
|
||||||
../wakunode2,
|
../wakunode2,
|
||||||
@ -17,8 +18,7 @@ logScope:
|
|||||||
|
|
||||||
const futTimeout* = 5.seconds # Max time to wait for futures
|
const futTimeout* = 5.seconds # Max time to wait for futures
|
||||||
|
|
||||||
proc installPrivateApiHandlers*(node: WakuNode, rpcsrv: RpcServer, rng: ref BrHmacDrbgContext, topicCache: TopicCache) =
|
proc installPrivateApiHandlers*(node: WakuNode, rpcsrv: RpcServer, topicCache: TopicCache) =
|
||||||
|
|
||||||
## Private API version 1 definitions
|
## Private API version 1 definitions
|
||||||
|
|
||||||
## Definitions for symmetric cryptography
|
## Definitions for symmetric cryptography
|
||||||
@ -38,7 +38,7 @@ proc installPrivateApiHandlers*(node: WakuNode, rpcsrv: RpcServer, rng: ref BrHm
|
|||||||
debug "post_waku_v2_private_v1_symmetric_message"
|
debug "post_waku_v2_private_v1_symmetric_message"
|
||||||
|
|
||||||
let msg = message.toWakuMessage(version = 1,
|
let msg = message.toWakuMessage(version = 1,
|
||||||
rng = rng,
|
rng = node.rng,
|
||||||
pubKey = none(waku_payload.PublicKey),
|
pubKey = none(waku_payload.PublicKey),
|
||||||
symkey = some(symkey.toSymKey()))
|
symkey = some(symkey.toSymKey()))
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ proc installPrivateApiHandlers*(node: WakuNode, rpcsrv: RpcServer, rng: ref BrHm
|
|||||||
## Generates and returns a public/private key pair for asymmetric message encryption and decryption.
|
## Generates and returns a public/private key pair for asymmetric message encryption and decryption.
|
||||||
debug "get_waku_v2_private_v1_asymmetric_keypair"
|
debug "get_waku_v2_private_v1_asymmetric_keypair"
|
||||||
|
|
||||||
let privKey = waku_payload.PrivateKey.random(rng[])
|
let privKey = waku_payload.PrivateKey.random(node.rng[])
|
||||||
|
|
||||||
return WakuKeyPair(seckey: privKey, pubkey: privKey.toPublicKey())
|
return WakuKeyPair(seckey: privKey, pubkey: privKey.toPublicKey())
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ proc installPrivateApiHandlers*(node: WakuNode, rpcsrv: RpcServer, rng: ref BrHm
|
|||||||
debug "post_waku_v2_private_v1_asymmetric_message"
|
debug "post_waku_v2_private_v1_asymmetric_message"
|
||||||
|
|
||||||
let msg = message.toWakuMessage(version = 1,
|
let msg = message.toWakuMessage(version = 1,
|
||||||
rng = rng,
|
rng = node.rng,
|
||||||
symkey = none(SymKey),
|
symkey = none(SymKey),
|
||||||
pubKey = some(publicKey.toPublicKey()))
|
pubKey = some(publicKey.toPublicKey()))
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ proc installRelayPostSubscriptionsV1Handler*(router: var RestRouter, node: WakuN
|
|||||||
if contentBody.isNone():
|
if contentBody.isNone():
|
||||||
return RestApiResponse.badRequest()
|
return RestApiResponse.badRequest()
|
||||||
|
|
||||||
let reqBodyContentType = MediaType.init(contentBody.get().contentType)
|
let reqBodyContentType = MediaType.init($contentBody.get().contentType)
|
||||||
if reqBodyContentType != MIMETYPE_JSON:
|
if reqBodyContentType != MIMETYPE_JSON:
|
||||||
return RestApiResponse.badRequest()
|
return RestApiResponse.badRequest()
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ proc installRelayDeleteSubscriptionsV1Handler*(router: var RestRouter, node: Wak
|
|||||||
if contentBody.isNone():
|
if contentBody.isNone():
|
||||||
return RestApiResponse.badRequest()
|
return RestApiResponse.badRequest()
|
||||||
|
|
||||||
let reqBodyContentType = MediaType.init(contentBody.get().contentType)
|
let reqBodyContentType = MediaType.init($contentBody.get().contentType)
|
||||||
if reqBodyContentType != MIMETYPE_JSON:
|
if reqBodyContentType != MIMETYPE_JSON:
|
||||||
return RestApiResponse.badRequest()
|
return RestApiResponse.badRequest()
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ proc installRelayPostMessagesV1Handler*(router: var RestRouter, node: WakuNode)
|
|||||||
if contentBody.isNone():
|
if contentBody.isNone():
|
||||||
return RestApiResponse.badRequest()
|
return RestApiResponse.badRequest()
|
||||||
|
|
||||||
let reqBodyContentType = MediaType.init(contentBody.get().contentType)
|
let reqBodyContentType = MediaType.init($contentBody.get().contentType)
|
||||||
if reqBodyContentType != MIMETYPE_JSON:
|
if reqBodyContentType != MIMETYPE_JSON:
|
||||||
return RestApiResponse.badRequest()
|
return RestApiResponse.badRequest()
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,7 @@ proc decodePayload*(message: WakuMessage, keyInfo: KeyInfo):
|
|||||||
|
|
||||||
# TODO: same story as for `decodedPayload`, but then regarding the `Payload`
|
# TODO: same story as for `decodedPayload`, but then regarding the `Payload`
|
||||||
# object.
|
# object.
|
||||||
proc encode*(payload: Payload, version: uint32, rng: var BrHmacDrbgContext):
|
proc encode*(payload: Payload, version: uint32, rng: var HmacDrbgContext):
|
||||||
WakuResult[seq[byte]] =
|
WakuResult[seq[byte]] =
|
||||||
case version
|
case version
|
||||||
of 0:
|
of 0:
|
||||||
|
|||||||
@ -419,7 +419,7 @@ proc info*(node: WakuNode): WakuInfo =
|
|||||||
let wakuInfo = WakuInfo(listenAddresses: listenStr, enrUri: enrUri)
|
let wakuInfo = WakuInfo(listenAddresses: listenStr, enrUri: enrUri)
|
||||||
return wakuInfo
|
return wakuInfo
|
||||||
|
|
||||||
proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) {.raises: [Defect, LPError]} =
|
proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) {.async, raises: [Defect, LPError]} =
|
||||||
info "mounting filter"
|
info "mounting filter"
|
||||||
proc filterHandler(requestId: string, msg: MessagePush) {.async, gcsafe.} =
|
proc filterHandler(requestId: string, msg: MessagePush) {.async, gcsafe.} =
|
||||||
|
|
||||||
@ -434,18 +434,26 @@ proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) {
|
|||||||
waku_node_messages.inc(labelValues = ["filter"])
|
waku_node_messages.inc(labelValues = ["filter"])
|
||||||
|
|
||||||
node.wakuFilter = WakuFilter.init(node.peerManager, node.rng, filterHandler, filterTimeout)
|
node.wakuFilter = WakuFilter.init(node.peerManager, node.rng, filterHandler, filterTimeout)
|
||||||
|
if node.started:
|
||||||
|
# Node has started already. Let's start filter too.
|
||||||
|
await node.wakuFilter.start()
|
||||||
|
|
||||||
node.switch.mount(node.wakuFilter, protocolMatcher(WakuFilterCodec))
|
node.switch.mount(node.wakuFilter, protocolMatcher(WakuFilterCodec))
|
||||||
|
|
||||||
|
|
||||||
# NOTE: If using the swap protocol, it must be mounted before store. This is
|
# NOTE: If using the swap protocol, it must be mounted before store. This is
|
||||||
# because store is using a reference to the swap protocol.
|
# because store is using a reference to the swap protocol.
|
||||||
proc mountSwap*(node: WakuNode, swapConfig: SwapConfig = SwapConfig.init()) {.raises: [Defect, LPError].} =
|
proc mountSwap*(node: WakuNode, swapConfig: SwapConfig = SwapConfig.init()) {.async, raises: [Defect, LPError].} =
|
||||||
info "mounting swap", mode = $swapConfig.mode
|
info "mounting swap", mode = $swapConfig.mode
|
||||||
node.wakuSwap = WakuSwap.init(node.peerManager, node.rng, swapConfig)
|
|
||||||
node.switch.mount(node.wakuSwap, protocolMatcher(WakuSwapCodec))
|
|
||||||
# NYI - Do we need this?
|
|
||||||
#node.subscriptions.subscribe(WakuSwapCodec, node.wakuSwap.subscription())
|
|
||||||
|
|
||||||
proc mountStore*(node: WakuNode, store: MessageStore = nil, persistMessages: bool = false, capacity = StoreDefaultCapacity, isSqliteOnly = false) {.raises: [Defect, LPError].} =
|
node.wakuSwap = WakuSwap.init(node.peerManager, node.rng, swapConfig)
|
||||||
|
if node.started:
|
||||||
|
# Node has started already. Let's start swap too.
|
||||||
|
await node.wakuSwap.start()
|
||||||
|
|
||||||
|
node.switch.mount(node.wakuSwap, protocolMatcher(WakuSwapCodec))
|
||||||
|
|
||||||
|
proc mountStore*(node: WakuNode, store: MessageStore = nil, persistMessages: bool = false, capacity = StoreDefaultCapacity, isSqliteOnly = false) {.async, raises: [Defect, LPError].} =
|
||||||
info "mounting store"
|
info "mounting store"
|
||||||
|
|
||||||
if node.wakuSwap.isNil:
|
if node.wakuSwap.isNil:
|
||||||
@ -454,6 +462,10 @@ proc mountStore*(node: WakuNode, store: MessageStore = nil, persistMessages: boo
|
|||||||
else:
|
else:
|
||||||
debug "mounting store with swap"
|
debug "mounting store with swap"
|
||||||
node.wakuStore = WakuStore.init(node.peerManager, node.rng, store, node.wakuSwap, persistMessages=persistMessages, capacity=capacity, isSqliteOnly=isSqliteOnly)
|
node.wakuStore = WakuStore.init(node.peerManager, node.rng, store, node.wakuSwap, persistMessages=persistMessages, capacity=capacity, isSqliteOnly=isSqliteOnly)
|
||||||
|
|
||||||
|
if node.started:
|
||||||
|
# Node has started already. Let's start store too.
|
||||||
|
await node.wakuStore.start()
|
||||||
|
|
||||||
node.switch.mount(node.wakuStore, protocolMatcher(WakuStoreCodec))
|
node.switch.mount(node.wakuStore, protocolMatcher(WakuStoreCodec))
|
||||||
|
|
||||||
@ -488,11 +500,10 @@ proc startRelay*(node: WakuNode) {.async.} =
|
|||||||
|
|
||||||
proc mountRelay*(node: WakuNode,
|
proc mountRelay*(node: WakuNode,
|
||||||
topics: seq[string] = newSeq[string](),
|
topics: seq[string] = newSeq[string](),
|
||||||
relayMessages = true,
|
|
||||||
triggerSelf = true,
|
triggerSelf = true,
|
||||||
peerExchangeHandler = none(RoutingRecordsHandler))
|
peerExchangeHandler = none(RoutingRecordsHandler))
|
||||||
# @TODO: Better error handling: CatchableError is raised by `waitFor`
|
# @TODO: Better error handling: CatchableError is raised by `waitFor`
|
||||||
{.gcsafe, raises: [Defect, InitializationError, LPError, CatchableError].} =
|
{.async, gcsafe, raises: [Defect, InitializationError, LPError, CatchableError].} =
|
||||||
|
|
||||||
proc msgIdProvider(m: messages.Message): Result[MessageID, ValidationResult] =
|
proc msgIdProvider(m: messages.Message): Result[MessageID, ValidationResult] =
|
||||||
let mh = MultiHash.digest("sha2-256", m.data)
|
let mh = MultiHash.digest("sha2-256", m.data)
|
||||||
@ -510,7 +521,7 @@ proc mountRelay*(node: WakuNode,
|
|||||||
maxMessageSize = MaxWakuMessageSize
|
maxMessageSize = MaxWakuMessageSize
|
||||||
)
|
)
|
||||||
|
|
||||||
info "mounting relay", relayMessages=relayMessages
|
info "mounting relay"
|
||||||
|
|
||||||
## The default relay topics is the union of
|
## The default relay topics is the union of
|
||||||
## all configured topics plus the hard-coded defaultTopic(s)
|
## all configured topics plus the hard-coded defaultTopic(s)
|
||||||
@ -521,24 +532,16 @@ proc mountRelay*(node: WakuNode,
|
|||||||
wakuRelay.parameters.enablePX = true # Feature flag for peer exchange in nim-libp2p
|
wakuRelay.parameters.enablePX = true # Feature flag for peer exchange in nim-libp2p
|
||||||
wakuRelay.routingRecordsHandler.add(peerExchangeHandler.get())
|
wakuRelay.routingRecordsHandler.add(peerExchangeHandler.get())
|
||||||
|
|
||||||
node.switch.mount(wakuRelay, protocolMatcher(WakuRelayCodec))
|
node.wakuRelay = wakuRelay
|
||||||
|
if node.started:
|
||||||
|
# Node has started already. Let's start relay too.
|
||||||
|
await node.startRelay()
|
||||||
|
|
||||||
if relayMessages:
|
node.switch.mount(wakuRelay, protocolMatcher(WakuRelayCodec))
|
||||||
## Some nodes may choose not to have the capability to relay messages (e.g. "light" nodes).
|
|
||||||
## All nodes, however, currently require WakuRelay, regardless of desired capabilities.
|
|
||||||
## This is to allow protocol stream negotation with relay-capable nodes to succeed.
|
|
||||||
## Here we mount relay on the switch only, but do not proceed to subscribe to any pubsub
|
|
||||||
## topics. We also never start the relay protocol. node.wakuRelay remains nil.
|
|
||||||
## @TODO: in future, this WakuRelay dependency will be removed completely
|
|
||||||
node.wakuRelay = wakuRelay
|
|
||||||
|
|
||||||
info "relay mounted successfully"
|
info "relay mounted successfully"
|
||||||
|
|
||||||
if node.started:
|
proc mountLightPush*(node: WakuNode) {.async, raises: [Defect, LPError].} =
|
||||||
# Node has started already. Let's start relay too.
|
|
||||||
waitFor node.startRelay()
|
|
||||||
|
|
||||||
proc mountLightPush*(node: WakuNode) {.raises: [Defect, LPError].} =
|
|
||||||
info "mounting light push"
|
info "mounting light push"
|
||||||
|
|
||||||
if node.wakuRelay.isNil:
|
if node.wakuRelay.isNil:
|
||||||
@ -548,9 +551,13 @@ proc mountLightPush*(node: WakuNode) {.raises: [Defect, LPError].} =
|
|||||||
debug "mounting lightpush with relay"
|
debug "mounting lightpush with relay"
|
||||||
node.wakuLightPush = WakuLightPush.init(node.peerManager, node.rng, nil, node.wakuRelay)
|
node.wakuLightPush = WakuLightPush.init(node.peerManager, node.rng, nil, node.wakuRelay)
|
||||||
|
|
||||||
|
if node.started:
|
||||||
|
# Node has started already. Let's start lightpush too.
|
||||||
|
await node.wakuLightPush.start()
|
||||||
|
|
||||||
node.switch.mount(node.wakuLightPush, protocolMatcher(WakuLightPushCodec))
|
node.switch.mount(node.wakuLightPush, protocolMatcher(WakuLightPushCodec))
|
||||||
|
|
||||||
proc mountLibp2pPing*(node: WakuNode) {.raises: [Defect, LPError].} =
|
proc mountLibp2pPing*(node: WakuNode) {.async, raises: [Defect, LPError].} =
|
||||||
info "mounting libp2p ping protocol"
|
info "mounting libp2p ping protocol"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -559,7 +566,11 @@ proc mountLibp2pPing*(node: WakuNode) {.raises: [Defect, LPError].} =
|
|||||||
# This is necessary as `Ping.new*` does not have explicit `raises` requirement
|
# This is necessary as `Ping.new*` does not have explicit `raises` requirement
|
||||||
# @TODO: remove exception handling once explicit `raises` in ping module
|
# @TODO: remove exception handling once explicit `raises` in ping module
|
||||||
raise newException(LPError, "Failed to initialize ping protocol")
|
raise newException(LPError, "Failed to initialize ping protocol")
|
||||||
|
|
||||||
|
if node.started:
|
||||||
|
# Node has started already. Let's start ping too.
|
||||||
|
await node.libp2pPing.start()
|
||||||
|
|
||||||
node.switch.mount(node.libp2pPing)
|
node.switch.mount(node.libp2pPing)
|
||||||
|
|
||||||
proc keepaliveLoop(node: WakuNode, keepalive: chronos.Duration) {.async.} =
|
proc keepaliveLoop(node: WakuNode, keepalive: chronos.Duration) {.async.} =
|
||||||
@ -745,8 +756,6 @@ proc start*(node: WakuNode) {.async.} =
|
|||||||
##
|
##
|
||||||
## Status: Implemented.
|
## Status: Implemented.
|
||||||
|
|
||||||
await node.switch.start()
|
|
||||||
|
|
||||||
# TODO Get this from WakuNode obj
|
# TODO Get this from WakuNode obj
|
||||||
let peerInfo = node.switch.peerInfo
|
let peerInfo = node.switch.peerInfo
|
||||||
info "PeerInfo", peerId = peerInfo.peerId, addrs = peerInfo.addrs
|
info "PeerInfo", peerId = peerInfo.peerId, addrs = peerInfo.addrs
|
||||||
@ -762,11 +771,24 @@ proc start*(node: WakuNode) {.async.} =
|
|||||||
## Update switch peer info with announced addrs
|
## Update switch peer info with announced addrs
|
||||||
node.updateSwitchPeerInfo()
|
node.updateSwitchPeerInfo()
|
||||||
|
|
||||||
|
# Start mounted protocols. For now we start each one explicitly
|
||||||
if not node.wakuRelay.isNil:
|
if not node.wakuRelay.isNil:
|
||||||
await node.startRelay()
|
await node.startRelay()
|
||||||
|
if not node.wakuStore.isNil:
|
||||||
|
await node.wakuStore.start()
|
||||||
|
if not node.wakuFilter.isNil:
|
||||||
|
await node.wakuFilter.start()
|
||||||
|
if not node.wakuLightPush.isNil:
|
||||||
|
await node.wakuLightPush.start()
|
||||||
|
if not node.wakuSwap.isNil:
|
||||||
|
await node.wakuSwap.start()
|
||||||
|
if not node.libp2pPing.isNil:
|
||||||
|
await node.libp2pPing.start()
|
||||||
|
|
||||||
|
await node.switch.start()
|
||||||
|
node.started = true
|
||||||
|
|
||||||
info "Node started successfully"
|
info "Node started successfully"
|
||||||
node.started = true
|
|
||||||
|
|
||||||
proc stop*(node: WakuNode) {.async.} =
|
proc stop*(node: WakuNode) {.async.} =
|
||||||
if not node.wakuRelay.isNil:
|
if not node.wakuRelay.isNil:
|
||||||
@ -1013,13 +1035,13 @@ when isMainModule:
|
|||||||
|
|
||||||
peerExchangeHandler = some(handlePeerExchange)
|
peerExchangeHandler = some(handlePeerExchange)
|
||||||
|
|
||||||
mountRelay(node,
|
if conf.relay:
|
||||||
conf.topics.split(" "),
|
waitFor mountRelay(node,
|
||||||
relayMessages = conf.relay, # Indicates if node is capable to relay messages
|
conf.topics.split(" "),
|
||||||
peerExchangeHandler = peerExchangeHandler)
|
peerExchangeHandler = peerExchangeHandler)
|
||||||
|
|
||||||
# Keepalive mounted on all nodes
|
# Keepalive mounted on all nodes
|
||||||
mountLibp2pPing(node)
|
waitFor mountLibp2pPing(node)
|
||||||
|
|
||||||
when defined(rln):
|
when defined(rln):
|
||||||
if conf.rlnRelay:
|
if conf.rlnRelay:
|
||||||
@ -1028,26 +1050,26 @@ when isMainModule:
|
|||||||
debug "could not mount WakuRlnRelay"
|
debug "could not mount WakuRlnRelay"
|
||||||
|
|
||||||
if conf.swap:
|
if conf.swap:
|
||||||
mountSwap(node)
|
waitFor mountSwap(node)
|
||||||
# TODO Set swap peer, for now should be same as store peer
|
# TODO Set swap peer, for now should be same as store peer
|
||||||
|
|
||||||
# Store setup
|
# Store setup
|
||||||
if (conf.storenode != "") or (conf.store):
|
if (conf.storenode != "") or (conf.store):
|
||||||
mountStore(node, mStorage, conf.persistMessages, conf.storeCapacity, conf.sqliteStore)
|
waitFor mountStore(node, mStorage, conf.persistMessages, conf.storeCapacity, conf.sqliteStore)
|
||||||
|
|
||||||
if conf.storenode != "":
|
if conf.storenode != "":
|
||||||
setStorePeer(node, conf.storenode)
|
setStorePeer(node, conf.storenode)
|
||||||
|
|
||||||
# NOTE Must be mounted after relay
|
# NOTE Must be mounted after relay
|
||||||
if (conf.lightpushnode != "") or (conf.lightpush):
|
if (conf.lightpushnode != "") or (conf.lightpush):
|
||||||
mountLightPush(node)
|
waitFor mountLightPush(node)
|
||||||
|
|
||||||
if conf.lightpushnode != "":
|
if conf.lightpushnode != "":
|
||||||
setLightPushPeer(node, conf.lightpushnode)
|
setLightPushPeer(node, conf.lightpushnode)
|
||||||
|
|
||||||
# Filter setup. NOTE Must be mounted after relay
|
# Filter setup. NOTE Must be mounted after relay
|
||||||
if (conf.filternode != "") or (conf.filter):
|
if (conf.filternode != "") or (conf.filter):
|
||||||
mountFilter(node, filterTimeout = chronos.seconds(conf.filterTimeout))
|
waitFor mountFilter(node, filterTimeout = chronos.seconds(conf.filterTimeout))
|
||||||
|
|
||||||
if conf.filternode != "":
|
if conf.filternode != "":
|
||||||
setFilterPeer(node, conf.filternode)
|
setFilterPeer(node, conf.filternode)
|
||||||
@ -1210,7 +1232,7 @@ when isMainModule:
|
|||||||
waitFor node.stop()
|
waitFor node.stop()
|
||||||
quit(QuitSuccess)
|
quit(QuitSuccess)
|
||||||
|
|
||||||
c_signal(SIGTERM, handleSigterm)
|
c_signal(ansi_c.SIGTERM, handleSigterm)
|
||||||
|
|
||||||
debug "Node setup complete"
|
debug "Node setup complete"
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ proc startRpcServer*(node: WakuNode, rpcIp: ValidIpAddress, rpcPort: Port, conf:
|
|||||||
if conf.rpcPrivate:
|
if conf.rpcPrivate:
|
||||||
# Private API access allows WakuRelay functionality that
|
# Private API access allows WakuRelay functionality that
|
||||||
# is backwards compatible with Waku v1.
|
# is backwards compatible with Waku v1.
|
||||||
installPrivateApiHandlers(node, rpcServer, node.rng, topicCache)
|
installPrivateApiHandlers(node, rpcServer, topicCache)
|
||||||
|
|
||||||
if conf.filter:
|
if conf.filter:
|
||||||
let messageCache = newTable[ContentTopic, seq[WakuMessage]]()
|
let messageCache = newTable[ContentTopic, seq[WakuMessage]]()
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import
|
import
|
||||||
|
bearssl/rand,
|
||||||
eth/p2p/discoveryv5/enr,
|
eth/p2p/discoveryv5/enr,
|
||||||
libp2p/crypto/crypto,
|
libp2p/crypto/crypto,
|
||||||
libp2p/protocols/ping,
|
libp2p/protocols/ping,
|
||||||
@ -41,7 +42,7 @@ type
|
|||||||
enr*: enr.Record
|
enr*: enr.Record
|
||||||
libp2pPing*: Ping
|
libp2pPing*: Ping
|
||||||
filters*: Filters
|
filters*: Filters
|
||||||
rng*: ref BrHmacDrbgContext
|
rng*: ref rand.HmacDrbgContext
|
||||||
wakuDiscv5*: WakuDiscoveryV5
|
wakuDiscv5*: WakuDiscoveryV5
|
||||||
announcedAddresses* : seq[MultiAddress]
|
announcedAddresses* : seq[MultiAddress]
|
||||||
started*: bool # Indicates that node has started listening
|
started*: bool # Indicates that node has started listening
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import
|
|||||||
chronicles,
|
chronicles,
|
||||||
chronos,
|
chronos,
|
||||||
metrics,
|
metrics,
|
||||||
bearssl,
|
bearssl/rand,
|
||||||
libp2p/protocols/protocol,
|
libp2p/protocols/protocol,
|
||||||
libp2p/crypto/crypto
|
libp2p/crypto/crypto
|
||||||
import
|
import
|
||||||
@ -74,7 +74,7 @@ type
|
|||||||
WakuFilterResult*[T] = Result[T, string]
|
WakuFilterResult*[T] = Result[T, string]
|
||||||
|
|
||||||
WakuFilter* = ref object of LPProtocol
|
WakuFilter* = ref object of LPProtocol
|
||||||
rng*: ref BrHmacDrbgContext
|
rng*: ref rand.HmacDrbgContext
|
||||||
peerManager*: PeerManager
|
peerManager*: PeerManager
|
||||||
pushHandler*: MessagePushHandler
|
pushHandler*: MessagePushHandler
|
||||||
subscriptions*: seq[Subscription]
|
subscriptions*: seq[Subscription]
|
||||||
@ -134,7 +134,7 @@ proc init(wf: WakuFilter) =
|
|||||||
|
|
||||||
proc init*(T: type WakuFilter,
|
proc init*(T: type WakuFilter,
|
||||||
peerManager: PeerManager,
|
peerManager: PeerManager,
|
||||||
rng: ref BrHmacDrbgContext,
|
rng: ref rand.HmacDrbgContext,
|
||||||
handler: MessagePushHandler,
|
handler: MessagePushHandler,
|
||||||
timeout: Duration = WakuFilterTimeout): T =
|
timeout: Duration = WakuFilterTimeout): T =
|
||||||
let wf = WakuFilter(rng: rng,
|
let wf = WakuFilter(rng: rng,
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import
|
|||||||
chronicles,
|
chronicles,
|
||||||
chronos,
|
chronos,
|
||||||
metrics,
|
metrics,
|
||||||
bearssl,
|
bearssl/rand,
|
||||||
libp2p/crypto/crypto
|
libp2p/crypto/crypto
|
||||||
|
|
||||||
import
|
import
|
||||||
@ -46,7 +46,7 @@ type
|
|||||||
WakuLightPushResult*[T] = Result[T, string]
|
WakuLightPushResult*[T] = Result[T, string]
|
||||||
|
|
||||||
WakuLightPush* = ref object of LPProtocol
|
WakuLightPush* = ref object of LPProtocol
|
||||||
rng*: ref BrHmacDrbgContext
|
rng*: ref rand.HmacDrbgContext
|
||||||
peerManager*: PeerManager
|
peerManager*: PeerManager
|
||||||
requestHandler*: PushRequestHandler
|
requestHandler*: PushRequestHandler
|
||||||
relayReference*: WakuRelay
|
relayReference*: WakuRelay
|
||||||
@ -98,7 +98,7 @@ proc init*(wl: WakuLightPush) =
|
|||||||
wl.handler = handle
|
wl.handler = handle
|
||||||
wl.codec = WakuLightPushCodec
|
wl.codec = WakuLightPushCodec
|
||||||
|
|
||||||
proc init*(T: type WakuLightPush, peerManager: PeerManager, rng: ref BrHmacDrbgContext, handler: PushRequestHandler, relay: WakuRelay = nil): T =
|
proc init*(T: type WakuLightPush, peerManager: PeerManager, rng: ref rand.HmacDrbgContext, handler: PushRequestHandler, relay: WakuRelay = nil): T =
|
||||||
debug "init"
|
debug "init"
|
||||||
let rng = crypto.newRng()
|
let rng = crypto.newRng()
|
||||||
let wl = WakuLightPush(rng: rng,
|
let wl = WakuLightPush(rng: rng,
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
import std/[oids, options, strutils, tables]
|
import std/[oids, options, strutils, tables]
|
||||||
import chronos
|
import chronos
|
||||||
import chronicles
|
import chronicles
|
||||||
import bearssl
|
import bearssl/rand
|
||||||
import stew/[results, byteutils, endians2]
|
import stew/[results, byteutils, endians2]
|
||||||
import nimcrypto/[utils, sha2, hmac]
|
import nimcrypto/[utils, sha2, hmac]
|
||||||
|
|
||||||
@ -159,9 +159,9 @@ proc setCipherStateKey*(cs: var CipherState, key: ChaChaPolyKey) =
|
|||||||
cs.k = key
|
cs.k = key
|
||||||
|
|
||||||
# Generates a random Symmetric Cipher State for test purposes
|
# Generates a random Symmetric Cipher State for test purposes
|
||||||
proc randomCipherState*(rng: var BrHmacDrbgContext, nonce: uint64 = 0): CipherState =
|
proc randomCipherState*(rng: var HmacDrbgContext, nonce: uint64 = 0): CipherState =
|
||||||
var randomCipherState: CipherState
|
var randomCipherState: CipherState
|
||||||
brHmacDrbgGenerate(rng, randomCipherState.k)
|
hmacDrbgGenerate(rng, randomCipherState.k)
|
||||||
setNonce(randomCipherState, nonce)
|
setNonce(randomCipherState, nonce)
|
||||||
return randomCipherState
|
return randomCipherState
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
import std/[oids, options, strutils, tables]
|
import std/[oids, options, strutils, tables]
|
||||||
import chronos
|
import chronos
|
||||||
import chronicles
|
import chronicles
|
||||||
import bearssl
|
import bearssl/rand
|
||||||
import stew/[results, endians2]
|
import stew/[results, endians2]
|
||||||
import nimcrypto/[utils, sha2, hmac]
|
import nimcrypto/[utils, sha2, hmac]
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ proc processMessagePatternPayload(hs: var HandshakeState, transportMessage: seq[
|
|||||||
return payload
|
return payload
|
||||||
|
|
||||||
# We process an input handshake message according to current handshake state and we return the next handshake step's handshake message
|
# We process an input handshake message according to current handshake state and we return the next handshake step's handshake message
|
||||||
proc processMessagePatternTokens(rng: var BrHmacDrbgContext, hs: var HandshakeState, inputHandshakeMessage: seq[NoisePublicKey] = @[]): Result[seq[NoisePublicKey], cstring]
|
proc processMessagePatternTokens(rng: var rand.HmacDrbgContext, hs: var HandshakeState, inputHandshakeMessage: seq[NoisePublicKey] = @[]): Result[seq[NoisePublicKey], cstring]
|
||||||
{.raises: [Defect, NoiseHandshakeError, NoiseMalformedHandshake, NoisePublicKeyError, NoiseDecryptTagError, NoiseNonceMaxError].} =
|
{.raises: [Defect, NoiseHandshakeError, NoiseMalformedHandshake, NoisePublicKeyError, NoiseDecryptTagError, NoiseNonceMaxError].} =
|
||||||
|
|
||||||
# We retrieve current message pattern (direction + tokens) to process
|
# We retrieve current message pattern (direction + tokens) to process
|
||||||
@ -463,7 +463,7 @@ proc initialize*(hsPattern: HandshakePattern, ephemeralKey: KeyPair = default(Ke
|
|||||||
# Each user in a handshake alternates writing and reading of handshake messages.
|
# Each user in a handshake alternates writing and reading of handshake messages.
|
||||||
# If the user is writing the handshake message, the transport message (if not empty) has to be passed to transportMessage and readPayloadV2 can be left to its default value
|
# If the user is writing the handshake message, the transport message (if not empty) has to be passed to transportMessage and readPayloadV2 can be left to its default value
|
||||||
# It the user is reading the handshake message, the read payload v2 has to be passed to readPayloadV2 and the transportMessage can be left to its default values.
|
# It the user is reading the handshake message, the read payload v2 has to be passed to readPayloadV2 and the transportMessage can be left to its default values.
|
||||||
proc stepHandshake*(rng: var BrHmacDrbgContext, hs: var HandshakeState, readPayloadV2: PayloadV2 = default(PayloadV2), transportMessage: seq[byte] = @[]): Result[HandshakeStepResult, cstring]
|
proc stepHandshake*(rng: var rand.HmacDrbgContext, hs: var HandshakeState, readPayloadV2: PayloadV2 = default(PayloadV2), transportMessage: seq[byte] = @[]): Result[HandshakeStepResult, cstring]
|
||||||
{.raises: [Defect, NoiseHandshakeError, NoiseMalformedHandshake, NoisePublicKeyError, NoiseDecryptTagError, NoiseNonceMaxError].} =
|
{.raises: [Defect, NoiseHandshakeError, NoiseMalformedHandshake, NoisePublicKeyError, NoiseDecryptTagError, NoiseNonceMaxError].} =
|
||||||
|
|
||||||
var hsStepResult: HandshakeStepResult
|
var hsStepResult: HandshakeStepResult
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
import std/[oids, options, strutils, tables, sequtils]
|
import std/[oids, options, strutils, tables, sequtils]
|
||||||
import chronos
|
import chronos
|
||||||
import chronicles
|
import chronicles
|
||||||
import bearssl
|
import bearssl/rand
|
||||||
import stew/[results, endians2, byteutils]
|
import stew/[results, endians2, byteutils]
|
||||||
import nimcrypto/[utils, sha2, hmac]
|
import nimcrypto/[utils, sha2, hmac]
|
||||||
|
|
||||||
@ -28,9 +28,9 @@ logScope:
|
|||||||
#################################
|
#################################
|
||||||
|
|
||||||
# Generates random byte sequences of given size
|
# Generates random byte sequences of given size
|
||||||
proc randomSeqByte*(rng: var BrHmacDrbgContext, size: int): seq[byte] =
|
proc randomSeqByte*(rng: var HmacDrbgContext, size: int): seq[byte] =
|
||||||
var output = newSeq[byte](size.uint32)
|
var output = newSeq[byte](size.uint32)
|
||||||
brHmacDrbgGenerate(rng, output)
|
hmacDrbgGenerate(rng, output)
|
||||||
return output
|
return output
|
||||||
|
|
||||||
# Pads a payload according to PKCS#7 as per RFC 5652 https://datatracker.ietf.org/doc/html/rfc5652#section-6.3
|
# Pads a payload according to PKCS#7 as per RFC 5652 https://datatracker.ietf.org/doc/html/rfc5652#section-6.3
|
||||||
@ -69,7 +69,7 @@ proc isDefault*[T](value: T): bool =
|
|||||||
#################################
|
#################################
|
||||||
|
|
||||||
# Generate random (public, private) Elliptic Curve key pairs
|
# Generate random (public, private) Elliptic Curve key pairs
|
||||||
proc genKeyPair*(rng: var BrHmacDrbgContext): KeyPair =
|
proc genKeyPair*(rng: var HmacDrbgContext): KeyPair =
|
||||||
var keyPair: KeyPair
|
var keyPair: KeyPair
|
||||||
keyPair.privateKey = EllipticCurveKey.random(rng)
|
keyPair.privateKey = EllipticCurveKey.random(rng)
|
||||||
keyPair.publicKey = keyPair.privateKey.public()
|
keyPair.publicKey = keyPair.privateKey.public()
|
||||||
@ -158,18 +158,18 @@ proc dh*(private: EllipticCurveKey, public: EllipticCurveKey): EllipticCurveKey
|
|||||||
#################################
|
#################################
|
||||||
|
|
||||||
# Generates a random ChaChaPolyKey for testing encryption/decryption
|
# Generates a random ChaChaPolyKey for testing encryption/decryption
|
||||||
proc randomChaChaPolyKey*(rng: var BrHmacDrbgContext): ChaChaPolyKey =
|
proc randomChaChaPolyKey*(rng: var HmacDrbgContext): ChaChaPolyKey =
|
||||||
var key: ChaChaPolyKey
|
var key: ChaChaPolyKey
|
||||||
brHmacDrbgGenerate(rng, key)
|
hmacDrbgGenerate(rng, key)
|
||||||
return key
|
return key
|
||||||
|
|
||||||
# Generates a random ChaChaPoly Cipher State for testing encryption/decryption
|
# Generates a random ChaChaPoly Cipher State for testing encryption/decryption
|
||||||
proc randomChaChaPolyCipherState*(rng: var BrHmacDrbgContext): ChaChaPolyCipherState =
|
proc randomChaChaPolyCipherState*(rng: var HmacDrbgContext): ChaChaPolyCipherState =
|
||||||
var randomCipherState: ChaChaPolyCipherState
|
var randomCipherState: ChaChaPolyCipherState
|
||||||
randomCipherState.k = randomChaChaPolyKey(rng)
|
randomCipherState.k = randomChaChaPolyKey(rng)
|
||||||
brHmacDrbgGenerate(rng, randomCipherState.nonce)
|
hmacDrbgGenerate(rng, randomCipherState.nonce)
|
||||||
randomCipherState.ad = newSeq[byte](32)
|
randomCipherState.ad = newSeq[byte](32)
|
||||||
brHmacDrbgGenerate(rng, randomCipherState.ad)
|
hmacDrbgGenerate(rng, randomCipherState.ad)
|
||||||
return randomCipherState
|
return randomCipherState
|
||||||
|
|
||||||
#################################################################
|
#################################################################
|
||||||
@ -190,7 +190,7 @@ proc toNoisePublicKey*(publicKey: EllipticCurveKey): NoisePublicKey =
|
|||||||
return noisePublicKey
|
return noisePublicKey
|
||||||
|
|
||||||
# Generates a random Noise public key
|
# Generates a random Noise public key
|
||||||
proc genNoisePublicKey*(rng: var BrHmacDrbgContext): NoisePublicKey =
|
proc genNoisePublicKey*(rng: var HmacDrbgContext): NoisePublicKey =
|
||||||
var noisePublicKey: NoisePublicKey
|
var noisePublicKey: NoisePublicKey
|
||||||
# We generate a random key pair
|
# We generate a random key pair
|
||||||
let keyPair: KeyPair = genKeyPair(rng)
|
let keyPair: KeyPair = genKeyPair(rng)
|
||||||
@ -281,7 +281,7 @@ proc `==`*(p1, p2: PayloadV2): bool =
|
|||||||
|
|
||||||
|
|
||||||
# Generates a random PayloadV2
|
# Generates a random PayloadV2
|
||||||
proc randomPayloadV2*(rng: var BrHmacDrbgContext): PayloadV2 =
|
proc randomPayloadV2*(rng: var HmacDrbgContext): PayloadV2 =
|
||||||
var payload2: PayloadV2
|
var payload2: PayloadV2
|
||||||
# To generate a random protocol id, we generate a random 1-byte long sequence, and we convert the first element to uint8
|
# To generate a random protocol id, we generate a random 1-byte long sequence, and we convert the first element to uint8
|
||||||
payload2.protocolId = randomSeqByte(rng, 1)[0].uint8
|
payload2.protocolId = randomSeqByte(rng, 1)[0].uint8
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import
|
|||||||
stew/results,
|
stew/results,
|
||||||
chronicles,
|
chronicles,
|
||||||
chronos,
|
chronos,
|
||||||
bearssl,
|
bearssl/rand,
|
||||||
libp2p/crypto/crypto,
|
libp2p/crypto/crypto,
|
||||||
libp2p/protocols/protocol,
|
libp2p/protocols/protocol,
|
||||||
libp2p/protobuf/minprotobuf,
|
libp2p/protobuf/minprotobuf,
|
||||||
@ -65,7 +65,7 @@ type
|
|||||||
|
|
||||||
WakuStore* = ref object of LPProtocol
|
WakuStore* = ref object of LPProtocol
|
||||||
peerManager*: PeerManager
|
peerManager*: PeerManager
|
||||||
rng*: ref BrHmacDrbgContext
|
rng*: ref rand.HmacDrbgContext
|
||||||
messages*: StoreQueueRef # in-memory message store
|
messages*: StoreQueueRef # in-memory message store
|
||||||
store*: MessageStore # sqlite DB handle
|
store*: MessageStore # sqlite DB handle
|
||||||
wakuSwap*: WakuSwap
|
wakuSwap*: WakuSwap
|
||||||
@ -186,7 +186,7 @@ proc init*(ws: WakuStore, capacity = StoreDefaultCapacity) =
|
|||||||
debug "the number of messages in the memory", messageNum=ws.messages.len
|
debug "the number of messages in the memory", messageNum=ws.messages.len
|
||||||
waku_store_messages.set(ws.messages.len.int64, labelValues = ["stored"])
|
waku_store_messages.set(ws.messages.len.int64, labelValues = ["stored"])
|
||||||
|
|
||||||
proc init*(T: type WakuStore, peerManager: PeerManager, rng: ref BrHmacDrbgContext,
|
proc init*(T: type WakuStore, peerManager: PeerManager, rng: ref rand.HmacDrbgContext,
|
||||||
store: MessageStore = nil, wakuSwap: WakuSwap = nil, persistMessages = true,
|
store: MessageStore = nil, wakuSwap: WakuSwap = nil, persistMessages = true,
|
||||||
capacity = StoreDefaultCapacity, isSqliteOnly = false): T =
|
capacity = StoreDefaultCapacity, isSqliteOnly = false): T =
|
||||||
let ws = WakuStore(rng: rng, peerManager: peerManager, store: store, wakuSwap: wakuSwap, persistMessages: persistMessages, isSqliteOnly: isSqliteOnly)
|
let ws = WakuStore(rng: rng, peerManager: peerManager, store: store, wakuSwap: wakuSwap, persistMessages: persistMessages, isSqliteOnly: isSqliteOnly)
|
||||||
|
|||||||
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
import
|
import
|
||||||
std/[tables, options, json],
|
std/[tables, options, json],
|
||||||
bearssl,
|
bearssl/rand,
|
||||||
chronos, chronicles, metrics, stew/results,
|
chronos, chronicles, metrics, stew/results,
|
||||||
libp2p/crypto/crypto,
|
libp2p/crypto/crypto,
|
||||||
libp2p/protocols/protocol,
|
libp2p/protocols/protocol,
|
||||||
@ -285,7 +285,7 @@ proc init*(wakuSwap: WakuSwap) =
|
|||||||
wakuswap.applyPolicy = applyPolicy
|
wakuswap.applyPolicy = applyPolicy
|
||||||
|
|
||||||
# TODO Expression return?
|
# TODO Expression return?
|
||||||
proc init*(T: type WakuSwap, peerManager: PeerManager, rng: ref BrHmacDrbgContext, swapConfig: SwapConfig): T =
|
proc init*(T: type WakuSwap, peerManager: PeerManager, rng: ref rand.HmacDrbgContext, swapConfig: SwapConfig): T =
|
||||||
info "wakuSwap init 2"
|
info "wakuSwap init 2"
|
||||||
let
|
let
|
||||||
accounting = initTable[PeerId, int]()
|
accounting = initTable[PeerId, int]()
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import
|
import
|
||||||
std/tables,
|
std/tables,
|
||||||
bearssl,
|
bearssl/rand,
|
||||||
libp2p/protocols/protocol,
|
libp2p/protocols/protocol,
|
||||||
../../node/peer_manager/peer_manager
|
../../node/peer_manager/peer_manager
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ type
|
|||||||
|
|
||||||
WakuSwap* = ref object of LPProtocol
|
WakuSwap* = ref object of LPProtocol
|
||||||
peerManager*: PeerManager
|
peerManager*: PeerManager
|
||||||
rng*: ref BrHmacDrbgContext
|
rng*: ref rand.HmacDrbgContext
|
||||||
text*: string
|
text*: string
|
||||||
accounting*: Table[PeerId, int]
|
accounting*: Table[PeerId, int]
|
||||||
credit*: CreditHandler
|
credit*: CreditHandler
|
||||||
|
|||||||
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
{.push raises: [Defect].}
|
{.push raises: [Defect].}
|
||||||
|
|
||||||
import bearssl, stew/byteutils
|
import bearssl/rand, stew/byteutils
|
||||||
|
|
||||||
proc generateRequestId*(rng: ref BrHmacDrbgContext): string =
|
proc generateRequestId*(rng: ref HmacDrbgContext): string =
|
||||||
var bytes: array[10, byte]
|
var bytes: array[10, byte]
|
||||||
brHmacDrbgGenerate(rng[], bytes)
|
hmacDrbgGenerate(rng[], bytes)
|
||||||
return toHex(bytes)
|
return toHex(bytes)
|
||||||
|
|||||||
@ -342,7 +342,7 @@ proc queueMessage(node: EthereumNode, msg: Message): bool =
|
|||||||
|
|
||||||
proc postMessage*(node: EthereumNode, pubKey = none[PublicKey](),
|
proc postMessage*(node: EthereumNode, pubKey = none[PublicKey](),
|
||||||
symKey = none[SymKey](), src = none[PrivateKey](),
|
symKey = none[SymKey](), src = none[PrivateKey](),
|
||||||
ttl: uint32, topic: Topic, payload: seq[byte],
|
ttl: uint32, topic: whisper_types.Topic, payload: seq[byte],
|
||||||
padding = none[seq[byte]](), powTime = 1'f,
|
padding = none[seq[byte]](), powTime = 1'f,
|
||||||
powTarget = defaultMinPow,
|
powTarget = defaultMinPow,
|
||||||
targetPeer = none[NodeId]()): bool =
|
targetPeer = none[NodeId]()): bool =
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
import
|
import
|
||||||
std/[algorithm, bitops, math, options, tables, times, hashes],
|
std/[algorithm, bitops, math, options, tables, times, hashes],
|
||||||
chronicles, stew/[byteutils, endians2], metrics, bearssl,
|
chronicles, stew/[byteutils, endians2], metrics, bearssl/rand,
|
||||||
nimcrypto/[bcmode, hash, keccak, rijndael],
|
nimcrypto/[bcmode, hash, keccak, rijndael],
|
||||||
eth/[keys, rlp, p2p], eth/p2p/ecies
|
eth/[keys, rlp, p2p], eth/p2p/ecies
|
||||||
|
|
||||||
@ -160,9 +160,9 @@ proc topicBloom*(topic: Topic): Bloom =
|
|||||||
doAssert idx <= 511
|
doAssert idx <= 511
|
||||||
result[idx div 8] = result[idx div 8] or byte(1 shl (idx and 7'u16))
|
result[idx div 8] = result[idx div 8] or byte(1 shl (idx and 7'u16))
|
||||||
|
|
||||||
proc generateRandomID*(rng: var BrHmacDrbgContext): string =
|
proc generateRandomID*(rng: var HmacDrbgContext): string =
|
||||||
var bytes: array[256 div 8, byte]
|
var bytes: array[256 div 8, byte]
|
||||||
brHmacDrbgGenerate(rng, bytes)
|
hmacDrbgGenerate(rng, bytes)
|
||||||
toHex(bytes)
|
toHex(bytes)
|
||||||
|
|
||||||
proc `or`(a, b: Bloom): Bloom =
|
proc `or`(a, b: Bloom): Bloom =
|
||||||
@ -231,7 +231,7 @@ proc decryptAesGcm(cipher: openarray[byte], key: SymKey): Option[seq[byte]] =
|
|||||||
# simply because that makes it closer to EIP 627 - see also:
|
# simply because that makes it closer to EIP 627 - see also:
|
||||||
# https://github.com/paritytech/parity-ethereum/issues/9652
|
# https://github.com/paritytech/parity-ethereum/issues/9652
|
||||||
|
|
||||||
proc encode*(rng: var BrHmacDrbgContext, self: Payload): Option[seq[byte]] =
|
proc encode*(rng: var HmacDrbgContext, self: Payload): Option[seq[byte]] =
|
||||||
## Encode a payload according so as to make it suitable to put in an Envelope
|
## Encode a payload according so as to make it suitable to put in an Envelope
|
||||||
## The format follows EIP 627 - https://eips.ethereum.org/EIPS/eip-627
|
## The format follows EIP 627 - https://eips.ethereum.org/EIPS/eip-627
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ proc encode*(rng: var BrHmacDrbgContext, self: Payload): Option[seq[byte]] =
|
|||||||
plain.add self.padding.get()
|
plain.add self.padding.get()
|
||||||
else:
|
else:
|
||||||
var padding = newSeq[byte](padLen)
|
var padding = newSeq[byte](padLen)
|
||||||
brHmacDrbgGenerate(rng, padding)
|
hmacDrbgGenerate(rng, padding)
|
||||||
|
|
||||||
plain.add padding
|
plain.add padding
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ proc encode*(rng: var BrHmacDrbgContext, self: Payload): Option[seq[byte]] =
|
|||||||
|
|
||||||
if self.symKey.isSome(): # Symmetric key present - encryption requested
|
if self.symKey.isSome(): # Symmetric key present - encryption requested
|
||||||
var iv: array[gcmIVLen, byte]
|
var iv: array[gcmIVLen, byte]
|
||||||
brHmacDrbgGenerate(rng, iv)
|
hmacDrbgGenerate(rng, iv)
|
||||||
|
|
||||||
return some(encryptAesGcm(plain, self.symKey.get(), iv))
|
return some(encryptAesGcm(plain, self.symKey.get(), iv))
|
||||||
|
|
||||||
@ -579,7 +579,7 @@ proc initFilter*(src = none[PublicKey](), privateKey = none[PrivateKey](),
|
|||||||
powReq: powReq, allowP2P: allowP2P, bloom: toBloom(topics))
|
powReq: powReq, allowP2P: allowP2P, bloom: toBloom(topics))
|
||||||
|
|
||||||
proc subscribeFilter*(
|
proc subscribeFilter*(
|
||||||
rng: var BrHmacDrbgContext, filters: var Filters, filter: Filter,
|
rng: var HmacDrbgContext, filters: var Filters, filter: Filter,
|
||||||
handler: FilterMsgHandler = nil): string =
|
handler: FilterMsgHandler = nil): string =
|
||||||
# NOTE: Should we allow a filter without a key? Encryption is mandatory in v6?
|
# NOTE: Should we allow a filter without a key? Encryption is mandatory in v6?
|
||||||
# Check if asymmetric _and_ symmetric key? Now asymmetric just has precedence.
|
# Check if asymmetric _and_ symmetric key? Now asymmetric just has precedence.
|
||||||
|
|||||||
67
waku/whisper/whispernodes.nim
Normal file
67
waku/whisper/whispernodes.nim
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
const
|
||||||
|
# Whisper nodes taken from:
|
||||||
|
# curl -s https://fleets.status.im | jq '"\"" + .fleets["eth.prod"].whisper[] + "\","' -r
|
||||||
|
WhisperNodes* = [
|
||||||
|
"enode://b957e51f41e4abab8382e1ea7229e88c6e18f34672694c6eae389eac22dab8655622bbd4a08192c321416b9becffaab11c8e2b7a5d0813b922aa128b82990dab@47.75.222.178:443",
|
||||||
|
"enode://66ba15600cda86009689354c3a77bdf1a97f4f4fb3ab50ffe34dbc904fac561040496828397be18d9744c75881ffc6ac53729ddbd2cdbdadc5f45c400e2622f7@178.128.141.87:443",
|
||||||
|
"enode://182ed5d658d1a1a4382c9e9f7c9e5d8d9fec9db4c71ae346b9e23e1a589116aeffb3342299bdd00e0ab98dbf804f7b2d8ae564ed18da9f45650b444aed79d509@34.68.132.118:443",
|
||||||
|
"enode://8bebe73ddf7cf09e77602c7d04c93a73f455b51f24ae0d572917a4792f1dec0bb4c562759b8830cc3615a658d38c1a4a38597a1d7ae3ba35111479fc42d65dec@47.75.85.212:443",
|
||||||
|
"enode://4ea35352702027984a13274f241a56a47854a7fd4b3ba674a596cff917d3c825506431cf149f9f2312a293bb7c2b1cca55db742027090916d01529fe0729643b@134.209.136.79:443",
|
||||||
|
"enode://fbeddac99d396b91d59f2c63a3cb5fc7e0f8a9f7ce6fe5f2eed5e787a0154161b7173a6a73124a4275ef338b8966dc70a611e9ae2192f0f2340395661fad81c0@34.67.230.193:443",
|
||||||
|
"enode://ac3948b2c0786ada7d17b80cf869cf59b1909ea3accd45944aae35bf864cc069126da8b82dfef4ddf23f1d6d6b44b1565c4cf81c8b98022253c6aea1a89d3ce2@47.75.88.12:443",
|
||||||
|
"enode://ce559a37a9c344d7109bd4907802dd690008381d51f658c43056ec36ac043338bd92f1ac6043e645b64953b06f27202d679756a9c7cf62fdefa01b2e6ac5098e@134.209.136.123:443",
|
||||||
|
"enode://c07aa0deea3b7056c5d45a85bca42f0d8d3b1404eeb9577610f386e0a4744a0e7b2845ae328efc4aa4b28075af838b59b5b3985bffddeec0090b3b7669abc1f3@35.226.92.155:443",
|
||||||
|
"enode://385579fc5b14e04d5b04af7eee835d426d3d40ccf11f99dbd95340405f37cf3bbbf830b3eb8f70924be0c2909790120682c9c3e791646e2d5413e7801545d353@47.244.221.249:443",
|
||||||
|
"enode://4e0a8db9b73403c9339a2077e911851750fc955db1fc1e09f81a4a56725946884dd5e4d11258eac961f9078a393c45bcab78dd0e3bc74e37ce773b3471d2e29c@134.209.136.101:443",
|
||||||
|
"enode://0624b4a90063923c5cc27d12624b6a49a86dfb3623fcb106801217fdbab95f7617b83fa2468b9ae3de593ff6c1cf556ccf9bc705bfae9cb4625999765127b423@35.222.158.246:443",
|
||||||
|
"enode://b77bffc29e2592f30180311dd81204ab845e5f78953b5ba0587c6631be9c0862963dea5eb64c90617cf0efd75308e22a42e30bc4eb3cd1bbddbd1da38ff6483e@47.75.10.177:443",
|
||||||
|
"enode://a8bddfa24e1e92a82609b390766faa56cf7a5eef85b22a2b51e79b333c8aaeec84f7b4267e432edd1cf45b63a3ad0fc7d6c3a16f046aa6bc07ebe50e80b63b8c@178.128.141.249:443",
|
||||||
|
"enode://a5fe9c82ad1ffb16ae60cb5d4ffe746b9de4c5fbf20911992b7dd651b1c08ba17dd2c0b27ee6b03162c52d92f219961cc3eb14286aca8a90b75cf425826c3bd8@104.154.230.58:443",
|
||||||
|
"enode://cf5f7a7e64e3b306d1bc16073fba45be3344cb6695b0b616ccc2da66ea35b9f35b3b231c6cf335fdfaba523519659a440752fc2e061d1e5bc4ef33864aac2f19@47.75.221.196:443",
|
||||||
|
"enode://887cbd92d95afc2c5f1e227356314a53d3d18855880ac0509e0c0870362aee03939d4074e6ad31365915af41d34320b5094bfcc12a67c381788cd7298d06c875@178.128.141.0:443",
|
||||||
|
"enode://282e009967f9f132a5c2dd366a76319f0d22d60d0c51f7e99795a1e40f213c2705a2c10e4cc6f3890319f59da1a535b8835ed9b9c4b57c3aad342bf312fd7379@35.223.240.17:443",
|
||||||
|
"enode://13d63a1f85ccdcbd2fb6861b9bd9d03f94bdba973608951f7c36e5df5114c91de2b8194d71288f24bfd17908c48468e89dd8f0fb8ccc2b2dedae84acdf65f62a@47.244.210.80:443",
|
||||||
|
"enode://2b01955d7e11e29dce07343b456e4e96c081760022d1652b1c4b641eaf320e3747871870fa682e9e9cfb85b819ce94ed2fee1ac458904d54fd0b97d33ba2c4a4@134.209.136.112:443",
|
||||||
|
"enode://b706a60572634760f18a27dd407b2b3582f7e065110dae10e3998498f1ae3f29ba04db198460d83ed6d2bfb254bb06b29aab3c91415d75d3b869cd0037f3853c@35.239.5.162:443",
|
||||||
|
"enode://32915c8841faaef21a6b75ab6ed7c2b6f0790eb177ad0f4ea6d731bacc19b938624d220d937ebd95e0f6596b7232bbb672905ee12601747a12ee71a15bfdf31c@47.75.59.11:443",
|
||||||
|
"enode://0d9d65fcd5592df33ed4507ce862b9c748b6dbd1ea3a1deb94e3750052760b4850aa527265bbaf357021d64d5cc53c02b410458e732fafc5b53f257944247760@178.128.141.42:443",
|
||||||
|
"enode://e87f1d8093d304c3a9d6f1165b85d6b374f1c0cc907d39c0879eb67f0a39d779be7a85cbd52920b6f53a94da43099c58837034afa6a7be4b099bfcd79ad13999@35.238.106.101:443",
|
||||||
|
]
|
||||||
|
|
||||||
|
# curl -s https://fleets.status.im | jq '"\"" + .fleets["eth.staging"].whisper[] + "\","' -r
|
||||||
|
WhisperNodesStaging* = [
|
||||||
|
"enode://00395686f5954662a3796e170b9e87bbaf68a050d57e9987b78a2292502dae44aae2b8803280a017ec9af9be0b3121db9d6b3693ab3a0451a866bcbedd58fdac@47.52.226.137:443",
|
||||||
|
"enode://914c0b30f27bab30c1dfd31dad7652a46fda9370542aee1b062498b1345ee0913614b8b9e3e84622e84a7203c5858ae1d9819f63aece13ee668e4f6668063989@167.99.19.148:443",
|
||||||
|
"enode://2d897c6e846949f9dcf10279f00e9b8325c18fe7fa52d658520ad7be9607c83008b42b06aefd97cfe1fdab571f33a2a9383ff97c5909ed51f63300834913237e@35.192.0.86:443",
|
||||||
|
]
|
||||||
|
|
||||||
|
# curl -s https://fleets.status.im | jq '"\"" + .fleets["eth.test"].whisper[] + "\","' -r
|
||||||
|
WhisperNodesTest* = [
|
||||||
|
"enode://ad38f94030a846cc7005b7a1f3b6b01bf4ef59d34e8d3d6f4d12df23d14ba8656702a435d34cf4df3b412c0c1923df5adcce8461321a0d8ffb9435b26e572c2a@47.52.255.194:443",
|
||||||
|
"enode://1d193635e015918fb85bbaf774863d12f65d70c6977506187ef04420d74ec06c9e8f0dcb57ea042f85df87433dab17a1260ed8dde1bdf9d6d5d2de4b7bf8e993@206.189.243.163:443",
|
||||||
|
"enode://f593a27731bc0f8eb088e2d39222c2d59dfb9bf0b3950d7a828d51e8ab9e08fffbd9916a82fd993c1a080c57c2bd70ed6c36f489a969de697aff93088dbee1a9@35.194.31.108:443",
|
||||||
|
]
|
||||||
|
|
||||||
|
# curl -s https://fleets.status.im | jq '"\"" + .fleets["eth.prod"].boot[] + "\","' -r
|
||||||
|
StatusBootNodes* = [
|
||||||
|
"enode://6e6554fb3034b211398fcd0f0082cbb6bd13619e1a7e76ba66e1809aaa0c5f1ac53c9ae79cf2fd4a7bacb10d12010899b370c75fed19b991d9c0cdd02891abad@47.75.99.169:443",
|
||||||
|
"enode://436cc6f674928fdc9a9f7990f2944002b685d1c37f025c1be425185b5b1f0900feaf1ccc2a6130268f9901be4a7d252f37302c8335a2c1a62736e9232691cc3a@178.128.138.128:443",
|
||||||
|
"enode://32ff6d88760b0947a3dee54ceff4d8d7f0b4c023c6dad34568615fcae89e26cc2753f28f12485a4116c977be937a72665116596265aa0736b53d46b27446296a@34.70.75.208:443",
|
||||||
|
"enode://23d0740b11919358625d79d4cac7d50a34d79e9c69e16831c5c70573757a1f5d7d884510bc595d7ee4da3c1508adf87bbc9e9260d804ef03f8c1e37f2fb2fc69@47.52.106.107:443",
|
||||||
|
"enode://5395aab7833f1ecb671b59bf0521cf20224fe8162fc3d2675de4ee4d5636a75ec32d13268fc184df8d1ddfa803943906882da62a4df42d4fccf6d17808156a87@178.128.140.188:443",
|
||||||
|
"enode://5405c509df683c962e7c9470b251bb679dd6978f82d5b469f1f6c64d11d50fbd5dd9f7801c6ad51f3b20a5f6c7ffe248cc9ab223f8bcbaeaf14bb1c0ef295fd0@35.223.215.156:443",
|
||||||
|
]
|
||||||
|
|
||||||
|
# curl -s https://fleets.status.im | jq '"\"" + .fleets["eth.staging"].boot[] + "\","' -r
|
||||||
|
StatusBootNodesStaging* = [
|
||||||
|
"enode://630b0342ca4e9552f50714b6c8e28d6955bc0fd14e7950f93bc3b2b8cc8c1f3b6d103df66f51a13d773b5db0f130661fb5c7b8fa21c48890c64c79b41a56a490@47.91.229.44:443",
|
||||||
|
"enode://f79fb3919f72ca560ad0434dcc387abfe41e0666201ebdada8ede0462454a13deb05cda15f287d2c4bd85da81f0eb25d0a486bbbc8df427b971ac51533bd00fe@174.138.107.239:443",
|
||||||
|
"enode://10a78c17929a7019ef4aa2249d7302f76ae8a06f40b2dc88b7b31ebff4a623fbb44b4a627acba296c1ced3775d91fbe18463c15097a6a36fdb2c804ff3fc5b35@35.238.97.234:443",
|
||||||
|
]
|
||||||
|
|
||||||
|
# curl -s https://fleets.status.im | jq '"\"" + .fleets["eth.test"].boot[] + "\","' -r
|
||||||
|
StatusBootNodesTest* = [
|
||||||
|
"enode://daae2e72820e86e942fa2a8aa7d6e9954d4043a753483d8bd338e16be82cf962392d5c0e1ae57c3d793c3d3dddd8fd58339262e4234dc966f953cd73b535f5fa@47.52.188.149:443",
|
||||||
|
"enode://9e0988575eb7717c25dea72fd11c7b37767dc09c1a7686f7c2ec577d308d24b377ceb675de4317474a1a870e47882732967f4fa785b02ba95d669b31d464dec0@206.189.243.164:443",
|
||||||
|
"enode://c1e5018887c863d64e431b69bf617561087825430e4401733f5ba77c70db14236df381fefb0ebe1ac42294b9e261bbe233dbdb83e32c586c66ae26c8de70cb4c@35.188.168.137:443",
|
||||||
|
]
|
||||||
Loading…
x
Reference in New Issue
Block a user