mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-07 08:23:08 +00:00
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:
parent
2fbc371f37
commit
95438b9389
5
Makefile
5
Makefile
@ -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
|
||||
|
||||
@ -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
3
tests/all_tests_v2.nim
Normal file
@ -0,0 +1,3 @@
|
||||
import
|
||||
# Waku v2 tests
|
||||
./v2/test_waku
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
2
vendor/nim-bearssl
vendored
@ -1 +1 @@
|
||||
Subproject commit 68c6d27304245c948526487b37e10951acf7dbc8
|
||||
Subproject commit 33b2303fc3b64359970b77bb09274c3e012ff37f
|
||||
2
vendor/nim-chronos
vendored
2
vendor/nim-chronos
vendored
@ -1 +1 @@
|
||||
Subproject commit 528688d01e8983763c51fbd9ccd0c797190fc0fe
|
||||
Subproject commit ce6e7d17b11b33d5dd17123827dda43af553a7eb
|
||||
2
vendor/nim-eth
vendored
2
vendor/nim-eth
vendored
@ -1 +1 @@
|
||||
Subproject commit 4f533eb5e6d6248ee2c1e94a628d1bc77880da67
|
||||
Subproject commit 7f77ba230806c58f8cdff782559c8b133ae48f4e
|
||||
2
vendor/nim-libp2p
vendored
2
vendor/nim-libp2p
vendored
@ -1 +1 @@
|
||||
Subproject commit 85b56d0b3a53611feaddd9247dd55bb43dc27103
|
||||
Subproject commit bec9a0658f612bcaec518021717462fd5f509ba8
|
||||
2
vendor/nim-secp256k1
vendored
2
vendor/nim-secp256k1
vendored
@ -1 +1 @@
|
||||
Subproject commit be989635994377e0e421e4a039230098ba5ccd28
|
||||
Subproject commit bf6cc94a3cbab16cf7ffadad11b50c52f161d0a8
|
||||
2
vendor/nim-stew
vendored
2
vendor/nim-stew
vendored
@ -1 +1 @@
|
||||
Subproject commit 61d5cfc37677f2b434d43c06d06695b00e56613b
|
||||
Subproject commit 32b86bfd1ff97764e94447675559bf37a4ffb407
|
||||
13
waku.nimble
13
waku.nimble
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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.} =
|
||||
Loading…
x
Reference in New Issue
Block a user