Bump vendor, fix builds and add v2 to CI (#45)

* Fix v2 builds, break v1 builds

* Fix build after nim-eth bump

* Add waku v2 build and tests to CI

* Fix parallel build issues by renaming
This commit is contained in:
Kim De Mey 2020-07-13 12:08:03 +02:00 committed by GitHub
parent 2fbc371f37
commit 95438b9389
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 134 additions and 109 deletions

View File

@ -45,7 +45,7 @@ GIT_SUBMODULE_UPDATE := git submodule update --init --recursive
else # "variables.mk" was included. Business as usual until the end of this file.
# default target, because it's the first one that doesn't start with '.'
all: | wakunode wakusim
all: | wakunode wakusim wakunode2 wakusim2
# must be included after the default target
-include $(BUILD_SYSTEM_DIR)/makefiles/targets.mk
@ -112,10 +112,11 @@ docker-push:
# builds and runs the test suite
test: | build deps
$(ENV_SCRIPT) nim test $(NIM_PARAMS) waku.nims
$(ENV_SCRIPT) nim test2 $(NIM_PARAMS) waku.nims
# usual cleaning
clean: | clean-common
rm -rf build/{wakunode,quicksim,start_network,all_tests}
rm -rf build
ifneq ($(USE_LIBBACKTRACE), 0)
+ $(MAKE) -C vendor/nim-libbacktrace clean $(HANDLE_OUTPUT)
endif

View File

@ -1,4 +1,5 @@
import
# Waku v1 tests
./v1/test_waku_connect,
./v1/test_waku_config,
./v1/test_waku_bridge,

3
tests/all_tests_v2.nim Normal file
View File

@ -0,0 +1,3 @@
import
# Waku v2 tests
./v2/test_waku

View File

@ -9,10 +9,12 @@ proc localAddress*(port: int): Address =
result = Address(udpPort: port, tcpPort: port,
ip: parseIpAddress("127.0.0.1"))
proc setupTestNode*(capabilities: varargs[ProtocolInfo, `protocolInfo`]): EthereumNode =
let keys1 = KeyPair.random()[]
proc setupTestNode*(
rng: ref BrHmacDrbgContext,
capabilities: varargs[ProtocolInfo, `protocolInfo`]): EthereumNode =
let keys1 = KeyPair.random(rng[])
result = newEthereumNode(keys1, localAddress(nextPort), 1, nil,
addAllCapabilities = false)
addAllCapabilities = false, rng = rng)
nextPort.inc
for capability in capabilities:
result.addCapability capability

View File

@ -11,19 +11,21 @@ import
const sigPath = sourceDir / ParDir / ParDir / "waku" / "node" / "v1" / "rpc" / "wakucallsigs.nim"
createRpcSigs(RpcSocketClient, sigPath)
proc setupNode(capabilities: varargs[ProtocolInfo, `protocolInfo`]): EthereumNode =
proc setupNode(capabilities: varargs[ProtocolInfo, `protocolInfo`],
rng: ref BrHmacDrbgContext, ): EthereumNode =
let
keypair = KeyPair.random()[]
keypair = KeyPair.random(rng[])
srvAddress = Address(ip: parseIpAddress("0.0.0.0"), tcpPort: Port(30303),
udpPort: Port(30303))
result = newEthereumNode(keypair, srvAddress, 1, nil, "waku test rpc",
addAllCapabilities = false)
addAllCapabilities = false, rng = rng)
for capability in capabilities:
result.addCapability capability
proc doTests {.async.} =
var ethNode = setupNode(Waku)
let rng = keys.newRng()
var ethNode = setupNode(Waku, rng)
# Create Ethereum RPCs
let rpcPort = 8545
@ -31,7 +33,7 @@ proc doTests {.async.} =
rpcServer = newRpcSocketServer(["localhost:" & $rpcPort])
client = newRpcSocketClient()
let keys = newKeyStorage()
setupWakuRPC(ethNode, keys, rpcServer)
setupWakuRPC(ethNode, keys, rpcServer, rng)
# Begin tests
rpcServer.start()

View File

@ -18,12 +18,13 @@ let safeTTL = 5'u32
let waitInterval = waku.messageInterval + 150.milliseconds
procSuite "Waku - Whisper bridge tests":
let rng = newRng()
# Waku Whisper node has both capabilities, listens to Whisper and Waku and
# relays traffic between the two.
var
nodeWakuWhisper = setupTestNode(Whisper, Waku) # This will be the bridge
nodeWhisper = setupTestNode(Whisper)
nodeWaku = setupTestNode(Waku)
nodeWakuWhisper = setupTestNode(rng, Whisper, Waku) # This will be the bridge
nodeWhisper = setupTestNode(rng, Whisper)
nodeWaku = setupTestNode(rng, Waku)
nodeWakuWhisper.startListening()
let bridgeNode = newNode(nodeWakuWhisper.toENode())

View File

@ -33,13 +33,14 @@ proc eventually(timeout: Duration, condition: proc(): bool {.gcsafe.}):
return await f
return withTimeout(wrappedCondition(), timeout)
suite "Waku connections":
procSuite "Waku connections":
let rng = keys.newRng()
asyncTest "Waku connections":
var
n1 = setupTestNode(Waku)
n2 = setupTestNode(Waku)
n3 = setupTestNode(Waku)
n4 = setupTestNode(Waku)
n1 = setupTestNode(rng, Waku)
n2 = setupTestNode(rng, Waku)
n3 = setupTestNode(rng, Waku)
n4 = setupTestNode(rng, Waku)
var topics: seq[Topic]
n1.protocolState(Waku).config.topics = some(topics)
@ -60,13 +61,13 @@ suite "Waku connections":
p3.isNil == false
asyncTest "Filters with encryption and signing":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
let encryptKeyPair = KeyPair.random()[]
let signKeyPair = KeyPair.random()[]
let encryptKeyPair = KeyPair.random(rng[])
let signKeyPair = KeyPair.random(rng[])
var symKey: SymKey
let topic = [byte 0x12, 0, 0, 0]
var filters: seq[string] = @[]
@ -135,8 +136,8 @@ suite "Waku connections":
check node1.unsubscribeFilter(filter) == true
asyncTest "Filters with topics":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -168,8 +169,8 @@ suite "Waku connections":
node1.unsubscribeFilter(filter2) == true
asyncTest "Filters with PoW":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -199,8 +200,8 @@ suite "Waku connections":
node1.unsubscribeFilter(filter2) == true
asyncTest "Filters with queues":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -219,8 +220,8 @@ suite "Waku connections":
node1.unsubscribeFilter(filter) == true
asyncTest "Local filter notify":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -234,8 +235,8 @@ suite "Waku connections":
node1.unsubscribeFilter(filter) == true
asyncTest "Bloomfilter blocking":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -277,8 +278,8 @@ suite "Waku connections":
await node1.setBloomFilter(fullBloom())
asyncTest "PoW blocking":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -304,8 +305,8 @@ suite "Waku connections":
node1.protocolState(Waku).queue.items.len == 1
asyncTest "Queue pruning":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -327,8 +328,8 @@ suite "Waku connections":
check node2.protocolState(Waku).queue.items.len == 0
asyncTest "P2P post":
var node1 = setupTestNode(Waku)
var node2 = setupTestNode(Waku)
var node1 = setupTestNode(rng, Waku)
var node2 = setupTestNode(rng, Waku)
node2.startListening()
waitFor node1.peerPool.connectToNode(newNode(node2.toENode()))
@ -358,9 +359,9 @@ suite "Waku connections":
node1.unsubscribeFilter(filter) == true
asyncTest "Light node posting":
var ln = setupTestNode(Waku)
var ln = setupTestNode(rng, Waku)
await ln.setLightNode(true)
var fn = setupTestNode(Waku)
var fn = setupTestNode(rng, Waku)
fn.startListening()
await ln.peerPool.connectToNode(newNode(fn.toENode()))
@ -375,8 +376,8 @@ suite "Waku connections":
# TODO: add test on message relaying
asyncTest "Connect two light nodes":
var ln1 = setupTestNode(Waku)
var ln2 = setupTestNode(Waku)
var ln1 = setupTestNode(rng, Waku)
var ln2 = setupTestNode(rng, Waku)
await ln1.setLightNode(true)
await ln2.setLightNode(true)
@ -387,8 +388,8 @@ suite "Waku connections":
asyncTest "Waku set-topic-interest":
var
wakuTopicNode = setupTestNode(Waku)
wakuNode = setupTestNode(Waku)
wakuTopicNode = setupTestNode(rng, Waku)
wakuNode = setupTestNode(rng, Waku)
let
topic1 = [byte 0xDA, 0xDA, 0xDA, 0xAA]
@ -417,8 +418,8 @@ suite "Waku connections":
asyncTest "Waku set-minimum-pow":
var
wakuPowNode = setupTestNode(Waku)
wakuNode = setupTestNode(Waku)
wakuPowNode = setupTestNode(rng, Waku)
wakuNode = setupTestNode(rng, Waku)
wakuNode.startListening()
await wakuPowNode.peerPool.connectToNode(newNode(wakuNode.toENode()))
@ -437,8 +438,8 @@ suite "Waku connections":
asyncTest "Waku set-light-node":
var
wakuLightNode = setupTestNode(Waku)
wakuNode = setupTestNode(Waku)
wakuLightNode = setupTestNode(rng, Waku)
wakuNode = setupTestNode(rng, Waku)
wakuNode.startListening()
await wakuLightNode.peerPool.connectToNode(newNode(wakuNode.toENode()))
@ -457,8 +458,8 @@ suite "Waku connections":
asyncTest "Waku set-bloom-filter":
var
wakuBloomNode = setupTestNode(Waku)
wakuNode = setupTestNode(Waku)
wakuBloomNode = setupTestNode(rng, Waku)
wakuNode = setupTestNode(rng, Waku)
bloom = fullBloom()
topics = @[[byte 0xDA, 0xDA, 0xDA, 0xAA]]
@ -506,8 +507,8 @@ suite "Waku connections":
asyncTest "Waku topic-interest":
var
wakuTopicNode = setupTestNode(Waku)
wakuNode = setupTestNode(Waku)
wakuTopicNode = setupTestNode(rng, Waku)
wakuNode = setupTestNode(rng, Waku)
let
topic1 = [byte 0xDA, 0xDA, 0xDA, 0xAA]
@ -531,8 +532,8 @@ suite "Waku connections":
asyncTest "Waku topic-interest versus bloom filter":
var
wakuTopicNode = setupTestNode(Waku)
wakuNode = setupTestNode(Waku)
wakuTopicNode = setupTestNode(rng, Waku)
wakuNode = setupTestNode(rng, Waku)
let
topic1 = [byte 0xDA, 0xDA, 0xDA, 0xAA]

View File

@ -12,8 +12,9 @@ proc waitForConnected(node: EthereumNode) {.async.} =
await sleepAsync(chronos.milliseconds(1))
procSuite "Waku Mail Client":
var client = setupTestNode(Waku)
var simpleServer = setupTestNode(Waku)
let rng = newRng()
var client = setupTestNode(rng, Waku)
var simpleServer = setupTestNode(rng, Waku)
simpleServer.startListening()
let simpleServerNode = newNode(simpleServer.toENode())

View File

@ -6,19 +6,20 @@ const
import
options, tables, chronicles, chronos,
libp2p/[switch, peer, peerinfo, connection, multiaddress, crypto/crypto],
libp2p/[switch, peerinfo, multiaddress, crypto/crypto],
libp2p/stream/connection,
libp2p/transports/[transport, tcptransport],
libp2p/muxers/[muxer, mplex/mplex, mplex/types],
libp2p/protocols/[identify, secure/secure],
libp2p/protocols/pubsub/[pubsub, gossipsub],
../../waku/protocol/v2/waku_protocol
../../waku/protocol/v2/waku_protocol2
import
libp2p/protocols/secure/noise,
libp2p/protocols/secure/secio
export
switch, peer, peerinfo, connection, multiaddress, crypto
switch, peerinfo, connection, multiaddress, crypto
type
SecureProtocol* {.pure.} = enum
@ -28,6 +29,7 @@ type
proc newStandardSwitch*(privKey = none(PrivateKey),
address = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet(),
triggerSelf = false,
gossip = false,
secureManagers: openarray[SecureProtocol] = [
# NOTE below relates to Eth2
# TODO investigate why we're getting fewer peers on public testnets with noise
@ -36,13 +38,14 @@ proc newStandardSwitch*(privKey = none(PrivateKey),
],
verifySignature = libp2p_pubsub_verify,
sign = libp2p_pubsub_sign,
transportFlags: set[ServerFlags] = {}): Switch =
transportFlags: set[ServerFlags] = {},
rng = newRng()): Switch =
info "newStandardSwitch"
proc createMplex(conn: Connection): Muxer =
result = newMplex(conn)
let
seckey = privKey.get(otherwise = PrivateKey.random(ECDSA).tryGet())
seckey = privKey.get(otherwise = PrivateKey.random(ECDSA, rng[]).tryGet())
peerInfo = PeerInfo.init(seckey, [address])
mplexProvider = newMuxerProvider(createMplex, MplexCodec)
transports = @[Transport(TcpTransport.init(transportFlags))]
@ -54,9 +57,9 @@ proc newStandardSwitch*(privKey = none(PrivateKey),
for sec in secureManagers:
case sec
of SecureProtocol.Noise:
secureManagerInstances &= newNoise(seckey).Secure
secureManagerInstances &= newNoise(rng, seckey).Secure
of SecureProtocol.Secio:
secureManagerInstances &= newSecio(seckey).Secure
secureManagerInstances &= newSecio(rng, seckey).Secure
let pubSub = PubSub newPubSub(WakuSub, peerInfo, triggerSelf)

View File

@ -10,13 +10,12 @@
import unittest, options, tables, sets
import chronos, chronicles
import utils,
libp2p/[errors,
switch,
connection,
stream/bufferstream,
crypto/crypto,
protocols/pubsub/floodsub]
import ../../waku/protocol/v2/waku_protocol
libp2p/errors,
libp2p/switch,
libp2p/stream/[bufferstream, connection],
libp2p/crypto/crypto,
libp2p/protocols/pubsub/floodsub
import ../../waku/protocol/v2/waku_protocol2
const
StreamTransportTrackerName = "stream.transport"
@ -71,7 +70,8 @@ suite "FloodSub":
await nodes[1].subscribe("foobar", handler)
await waitSub(nodes[0], nodes[1], "foobar")
await nodes[0].publish("foobar", cast[seq[byte]]("Hello!"))
# TODO: you might want to check the value here
discard await nodes[0].publish("foobar", cast[seq[byte]]("Hello!"))
result = await completionFut.wait(5.seconds)

2
vendor/nim-bearssl vendored

@ -1 +1 @@
Subproject commit 68c6d27304245c948526487b37e10951acf7dbc8
Subproject commit 33b2303fc3b64359970b77bb09274c3e012ff37f

2
vendor/nim-chronos vendored

@ -1 +1 @@
Subproject commit 528688d01e8983763c51fbd9ccd0c797190fc0fe
Subproject commit ce6e7d17b11b33d5dd17123827dda43af553a7eb

2
vendor/nim-eth vendored

@ -1 +1 @@
Subproject commit 4f533eb5e6d6248ee2c1e94a628d1bc77880da67
Subproject commit 7f77ba230806c58f8cdff782559c8b133ae48f4e

2
vendor/nim-libp2p vendored

@ -1 +1 @@
Subproject commit 85b56d0b3a53611feaddd9247dd55bb43dc27103
Subproject commit bec9a0658f612bcaec518021717462fd5f509ba8

@ -1 +1 @@
Subproject commit be989635994377e0e421e4a039230098ba5ccd28
Subproject commit bf6cc94a3cbab16cf7ffadad11b50c52f161d0a8

2
vendor/nim-stew vendored

@ -1 +1 @@
Subproject commit 61d5cfc37677f2b434d43c06d06695b00e56613b
Subproject commit 32b86bfd1ff97764e94447675559bf37a4ffb407

View File

@ -37,9 +37,12 @@ proc test(name: string, lang = "c") =
exec "build/" & name
### Tasks
task test, "Run tests":
task test, "Run waku v1 tests":
test "all_tests"
task test2, "Run waku v2 tests":
test "all_tests_v2"
task wakunode, "Build Waku cli":
buildBinary "wakunode", "waku/node/v1/", "-d:chronicles_log_level=TRACE"
@ -48,7 +51,7 @@ task wakusim, "Build Waku simulation tools":
buildBinary "start_network", "waku/node/v1/", "-d:chronicles_log_level=DEBUG"
task protocol2, "Build the experimental Waku protocol":
buildBinary "waku_protocol", "waku/protocol/v2/", "-d:chronicles_log_level=TRACE"
buildBinary "waku_protocol2", "waku/protocol/v2/", "-d:chronicles_log_level=TRACE"
task wakutest2, "Build Experimental Waku tests":
let name = "v2/test_waku"
@ -56,8 +59,8 @@ task wakutest2, "Build Experimental Waku tests":
exec "build/" & name
task wakunode2, "Build Experimental Waku cli":
buildBinary "wakunode", "waku/node/v2/", "-d:chronicles_log_level=TRACE"
buildBinary "wakunode2", "waku/node/v2/", "-d:chronicles_log_level=TRACE"
task wakusim2, "Build Experimental Waku simulation tools":
buildBinary "quicksim", "waku/node/v2/", "-d:chronicles_log_level=DEBUG"
buildBinary "start_network", "waku/node/v2/", "-d:chronicles_log_level=TRACE"
buildBinary "quicksim2", "waku/node/v2/", "-d:chronicles_log_level=DEBUG"
buildBinary "start_network2", "waku/node/v2/", "-d:chronicles_log_level=TRACE"

View File

@ -93,7 +93,8 @@ type
nodekey* {.
desc: "P2P node private key as hex.",
defaultValue: KeyPair.random().tryGet()
# TODO: can the rng be passed in somehow via Load?
defaultValue: KeyPair.random(keys.newRng()[])
name: "nodekey" .}: KeyPair
# TODO: Add nodekey file option

View File

@ -9,7 +9,8 @@ from stew/byteutils import hexToSeqByte, hexToByteArray
# 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) =
rpcsrv.rpc("waku_version") do() -> string:
## Returns string of the current Waku protocol version.
@ -70,8 +71,8 @@ proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer) =
## encryption.
##
## Returns key identifier on success and an error on failure.
result = generateRandomID().Identifier
keys.asymKeys.add(result.string, KeyPair.random().tryGet())
result = generateRandomID(rng[]).Identifier
keys.asymKeys.add(result.string, KeyPair.random(rng[]))
rpcsrv.rpc("waku_addPrivateKey") do(key: PrivateKey) -> Identifier:
## Stores the key pair, and returns its ID.
@ -79,7 +80,7 @@ proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer) =
## key: Private key as hex bytes.
##
## Returns key identifier on success and an error on failure.
result = generateRandomID().Identifier
result = generateRandomID(rng[]).Identifier
keys.asymKeys.add(result.string, key.toKeyPair())
@ -127,7 +128,7 @@ proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer) =
## known to both parties.
##
## Returns key identifier on success and an error on failure.
result = generateRandomID().Identifier
result = generateRandomID(rng[]).Identifier
var key: SymKey
if randomBytes(key) != key.len:
raise newException(KeyGenerationError, "Failed generating key")
@ -141,7 +142,7 @@ proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer) =
## key: The raw key for symmetric encryption as hex bytes.
##
## Returns key identifier on success and an error on failure.
result = generateRandomID().Identifier
result = generateRandomID(rng[]).Identifier
keys.symKeys.add(result.string, key)
@ -159,7 +160,7 @@ proc setupWakuRPC*(node: EthereumNode, keys: KeyStorage, rpcsrv: RpcServer) =
if pbkdf2(ctx, password, "", 65356, symKey) != sizeof(SymKey):
raise newException(KeyGenerationError, "Failed generating key")
result = generateRandomID().Identifier
result = generateRandomID(rng[]).Identifier
keys.symKeys.add(result.string, symKey)
rpcsrv.rpc("waku_hasSymKey") do(id: Identifier) -> bool:

View File

@ -45,7 +45,8 @@ proc initNodeCmd(nodeType: NodeType, shift: int, staticNodes: seq[string] = @[],
discovery = false, bootNodes: seq[string] = @[], topicInterest = false,
master = false, label: string): NodeInfo =
let
keypair = KeyPair.random().tryGet()
rng = keys.newRng()
keypair = KeyPair.random(rng[])
address = Address(ip: parseIpAddress("127.0.0.1"),
udpPort: (30303 + shift).Port, tcpPort: (30303 + shift).Port)
enode = ENode(pubkey: keypair.pubkey, address: address)

View File

@ -61,7 +61,7 @@ proc setupNat(conf: WakuNodeConf): tuple[ip: IpAddress,
if extPorts.isSome:
(result.tcpPort, result.udpPort) = extPorts.get()
proc run(config: WakuNodeConf) =
proc run(config: WakuNodeConf, rng: ref BrHmacDrbgContext) =
let
(ip, tcpPort, udpPort) = setupNat(config)
address = Address(ip: ip, tcpPort: tcpPort, udpPort: udpPort)
@ -112,7 +112,7 @@ proc run(config: WakuNodeConf) =
Port(config.rpcPort + config.portsShift))
var rpcServer = newRpcHttpServer([ta])
let keys = newKeyStorage()
setupWakuRPC(node, keys, rpcServer)
setupWakuRPC(node, keys, rpcServer, rng)
setupWakuSimRPC(node, rpcServer)
rpcServer.start()
@ -154,13 +154,15 @@ proc run(config: WakuNodeConf) =
runForever()
when isMainModule:
let conf = WakuNodeConf.load()
let
rng = keys.newRng()
conf = WakuNodeConf.load()
if conf.logLevel != LogLevel.NONE:
setLogLevel(conf.logLevel)
case conf.cmd
of genNodekey:
echo PrivateKey.random().expect("Enough randomness to generate a key")
echo PrivateKey.random(rng[])
of noCommand:
run(conf)
run(conf, rng)

View File

@ -88,7 +88,7 @@ type
# NOTE: Signature is different here, we return PrivateKey and not KeyPair
nodekey* {.
desc: "P2P node private key as hex.",
defaultValue: PrivateKey.random(Secp256k1).tryGet()
defaultValue: PrivateKey.random(Secp256k1, keys.newRng()[]).tryGet()
name: "nodekey" }: PrivateKey
# TODO: Add nodekey file option

View File

@ -1,7 +1,7 @@
import
json_rpc/rpcserver, options,
eth/[common, rlp, keys, p2p],
../../../protocol/v2/waku_protocol,
../../../protocol/v2/waku_protocol2,
nimcrypto/[sysrand, hmac, sha2],
../waku_types

View File

@ -10,7 +10,7 @@ import strutils except fromHex
const
defaults ="--log-level:TRACE --log-metrics --metrics-server --rpc"
wakuNodeBin = "build" / "wakunode"
wakuNodeBin = "build" / "wakunode2"
metricsDir = "metrics"
portOffset = 2
@ -29,7 +29,8 @@ type
# NOTE: Don't distinguish between node types here a la full node, light node etc
proc initNodeCmd(shift: int, staticNodes: seq[string] = @[], master = false, label: string): NodeInfo =
let
key = SkPrivateKey.random()[] #assumes ok
rng = crypto.newRng()
key = SkPrivateKey.random(rng[])
hkey = key.getBytes().toHex()
rkey = SkPrivateKey.init(fromHex(hkey))[] #assumes ok
privKey = PrivateKey(scheme: Secp256k1, skkey: rkey)

View File

@ -8,7 +8,7 @@ import
libp2p/protocols/protocol,
libp2p/peerinfo,
rpc/wakurpc,
../../protocol/v2/waku_protocol,
../../protocol/v2/waku_protocol2,
# TODO: Pull out standard switch from tests
../../tests/v2/standard_setup,
waku_types

View File

@ -48,7 +48,7 @@ proc requestMail*(node: EthereumNode, peerId: NodeId, request: MailRequest,
var writer = initRlpWriter()
writer.append(request)
let payload = writer.finish()
let data = encode(Payload(payload: payload, symKey: some(symKey)))
let data = encode(node.rng[], Payload(payload: payload, symKey: some(symKey)))
if not data.isSome():
error "Encoding of payload failed"
return result

View File

@ -486,8 +486,8 @@ proc postMessage*(node: EthereumNode, pubKey = none[PublicKey](),
##
## NOTE: This call allows a post without encryption. If encryption is
## mandatory it should be enforced a layer up
let payload = encode(Payload(payload: payload, src: src, dst: pubKey,
symKey: symKey, padding: padding))
let payload = encode(node.rng[], Payload(
payload: payload, src: src, dst: pubKey, symKey: symKey, padding: padding))
if payload.isSome():
var env = Envelope(expiry:epochTime().uint32 + ttl,
ttl: ttl, topic: topic, data: payload.get(), nonce: 0)
@ -539,7 +539,8 @@ proc subscribeFilter*(node: EthereumNode, filter: Filter,
##
## NOTE: This call allows for a filter without decryption. If encryption is
## mandatory it should be enforced a layer up.
return node.protocolState(Waku).filters.subscribeFilter(filter, handler)
return subscribeFilter(
node.rng[], node.protocolState(Waku).filters, filter, handler)
proc unsubscribeFilter*(node: EthereumNode, filterId: string): bool =
## Remove a previously subscribed filter.

View File

@ -10,7 +10,7 @@ import libp2p/protocols/pubsub/pubsub,
libp2p/protocols/pubsub/floodsub,
libp2p/protocols/pubsub/gossipsub,
libp2p/protocols/pubsub/rpc/[messages],
libp2p/connection
libp2p/stream/connection
import metrics
@ -119,13 +119,13 @@ method rpcHandler*(w: WakuSub,
method publish*(w: WakuSub,
topic: string,
data: seq[byte]) {.async.} =
data: seq[byte]): Future[int] {.async.} =
debug "publish", topic=topic
if w.gossip_enabled:
await procCall GossipSub(w).publish(topic, data)
return await procCall GossipSub(w).publish(topic, data)
else:
await procCall FloodSub(w).publish(topic, data)
return await procCall FloodSub(w).publish(topic, data)
method unsubscribe*(w: WakuSub,
topics: seq[TopicPair]) {.async.} =