mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-10 06:46:24 +00:00
21cac6d491
* Refactor timestamps type from float64 to int64 (milliseconds resolution) * Revert epochs to float64 * Update 00002_addSenderTimeStamp.up.sql * Update quicksim2.nim * Add files via upload * Delete 00003_convertTimestampsToInts.up.sql * Add files via upload * Rename 00003_convertTimestampsToInts.up.sql to 00003_addTimestampsToInts.up.sql * Delete 00003_addTimestampsToInts.up.sql * Rln-relay integration into chat2 (#835) * adds ProofMetadata * adds EPOCH_INTERVAL * adds messageLog field * adds updateLog, toEpoch, fromEpoch, getEpoch, compareTo * adds unit test for toEpoch and fromEpoch * adds unit test for Epoch comparison * adds result codes for updateLog * adds unit test for update log * renames epoch related consts * modifies updateLog with new return type and new logic of spam detection * adds unit text for the modified updateLog * changes max epoch gap type size * splits updateLog into two procs isSpam and updateLog * updates unittests * fixes a bug, returns false when the message is not spam * renames messageLog to nullifierLog * renames isSpam to hasDuplicate * updates the rln validator, adds comments * adds appendRLNProof proc plus some code beatification * unit test for validate message * adds unhappy test to validateMessage unit test * renames EPOCH_UNIT_SECONDS * renames MAX_CLOCK_GAP_SECONDS * WIP: integration test * fixes compile errors * sets a real epoch value * updates on old unittests * adds comments to the rln relay tests * adds more comments * makes rln import conditional * adds todos * adds more todos * adds rln-relay mount process into chat2 * further todos * logs contentTopic * introduces rln relay configs * changes default pubsub topic * adds contentTopic config * imports rln relay dependencies * consolidates imports * removes module identifier from ContentTopic * adds contentTopic field * adds contentTopic argument to mountRlnRelay calls * appends rln proof to chat2 messages * changes the default chat2 contentTopic * adds missing content topic fields * fixes a bug * adds a new logic about empty content topics * appends proof only when rln flag is active * removes unnecessary todos * fixes an indentation issue * adds log messages * verifies the proof against the concatenation of msg payload and content topic * a bug fix * removes duplicate epoch time calculation * updates log level to trace * updates default rln-relay content topic * adds support for empty content topics * updates changelog * changelog updates * removes a commented code block * updates addRLNRelayValidator string doc * Squashed commit of the following: commit bc36c99ab202d07baa0a5f0100bd10d1d76fdfa1 Merge: dc2b2946 5a77d6e2 Author: G <28568419+s1fr0@users.noreply.github.com> Date: Sat Feb 5 01:10:06 2022 +0100 Merge branch 'master' into int64-timestamps-ns commit dc2b294667bb5770cc32b93cc560638cf5ce7087 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Sat Feb 5 00:24:45 2022 +0100 Fix commit f97b95a036a197938df38a5adaea46fca778016d Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Sat Feb 5 00:13:18 2022 +0100 Missing import commit 060c4f8d64e1b6e7c0593540fa8fa7f4cadf6df7 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Sat Feb 5 00:10:36 2022 +0100 Fixed typo commit 08ca99b6f692d3df6d4c7c2312c7cada05fc0041 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 23:59:20 2022 +0100 Time util file commit 2b5c360746990936dec256e90d08dae3c3e35a94 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 23:33:20 2022 +0100 Moved time utility functions to utils/time commit fdaf121f089aa011855303cc8dd1ce52aec506ad Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 23:10:25 2022 +0100 Fix comment commit c7e06ab4e7618d9a3fe8aa744dd48bf3f7d8754c Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 23:04:13 2022 +0100 Restore previous migration script commit 80282db1d79df676255d4b8e6e09d9f8a2b00fd3 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 22:54:15 2022 +0100 Typo commit b9d67f89b0eea11a8362dbb10b5f9d6894343352 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 22:49:29 2022 +0100 Added utilities to get int64 nanosecond, microsecond, millisecond time resolution from float commit 0130d496e694a01cfc9eeb90b7cbc77764490bf9 Author: s1fr0 <28568419+s1fr0@users.noreply.github.com> Date: Fri Feb 4 22:36:35 2022 +0100 Switched to nanoseconds support. * Update CHANGELOG.md * Create 00003_convertTimestampsToInt64.up.sql Migration script * Moved migration script to right location * Update waku_rln_relay_utils.nim * Update waku_rln_relay_utils.nim * Addressed reviewers' comments * Update default fleet metrics dashboard (#844) * Fix * No need for float * Aligning master to changes in PR * Further fixes Co-authored-by: Sanaz Taheri Boshrooyeh <35961250+staheri14@users.noreply.github.com> Co-authored-by: Hanno Cornelius <68783915+jm-clius@users.noreply.github.com>
156 lines
5.4 KiB
Nim
156 lines
5.4 KiB
Nim
# Group by std, external then internal imports
|
|
import
|
|
# std imports
|
|
std/ [os, strutils, times, options], #options as what # TODO: Huh? Redefinition?
|
|
# external imports
|
|
chronicles,
|
|
eth/common as eth_common,
|
|
eth/keys,
|
|
json_rpc/[rpcclient, rpcserver],
|
|
libp2p/protobuf/minprotobuf,
|
|
# internal imports
|
|
../protocol/waku_filter/waku_filter_types,
|
|
../protocol/waku_store/waku_store_types,
|
|
../protocol/waku_message,
|
|
../utils/time,
|
|
./wakunode2,
|
|
./waku_payload,
|
|
./jsonrpc/[jsonrpc_types,jsonrpc_utils]
|
|
|
|
|
|
from strutils import rsplit
|
|
template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0]
|
|
|
|
const sigWakuPath = sourceDir / "jsonrpc" / "jsonrpc_callsigs.nim"
|
|
createRpcSigs(RpcHttpClient, sigWakuPath)
|
|
|
|
const defaultTopic = "/waku/2/default-waku/proto"
|
|
|
|
const defaultContentTopic = ContentTopic("waku/2/default-content/proto")
|
|
|
|
const topicAmount = 10 #100
|
|
|
|
proc message(i: int): ProtoBuffer =
|
|
let value = "hello " & $(i)
|
|
|
|
var result = initProtoBuffer()
|
|
result.write(1, value)
|
|
result.finish()
|
|
|
|
proc handler(topic: string, data: seq[byte]) {.async, gcsafe.} =
|
|
debug "Hit handler", topic=topic, data=data
|
|
|
|
# Scenario xx1 - 16 full nodes
|
|
#########################################
|
|
let amount = 16
|
|
var nodes: seq[RPCHttpClient]
|
|
for i in 0..<amount:
|
|
var node = newRpcHttpClient()
|
|
nodes.add(node)
|
|
waitFor nodes[i].connect("localhost", Port(8547+i), false)
|
|
var res = waitFor nodes[i].post_waku_v2_relay_v1_subscriptions(@[defaultTopic])
|
|
|
|
os.sleep(2000)
|
|
|
|
# # TODO: Show plaintext message in log
|
|
# for i in 0..<topicAmount:
|
|
# os.sleep(50)
|
|
# # TODO: This would then publish on a subtopic here
|
|
# var s = "hello " & $2
|
|
# var res3 = waitFor nodes[0].wakuPublish(defaultTopic, s)
|
|
|
|
# Scenario xx3 - same as xx1 but publish from multiple nodes
|
|
# To compare FloodSub and GossipSub factor
|
|
for i in 0..<topicAmount:
|
|
os.sleep(50)
|
|
# TODO: This would then publish on a subtopic here
|
|
var res3 = waitFor nodes[0].post_waku_v2_relay_v1_message(defaultTopic, WakuRelayMessage(payload: message(0).buffer, contentTopic: some(defaultContentTopic), timestamp: some(getNanosecondTime(epochTime()))))
|
|
res3 = waitFor nodes[1].post_waku_v2_relay_v1_message(defaultTopic, WakuRelayMessage(payload: message(1).buffer, contentTopic: some(defaultContentTopic), timestamp: some(getNanosecondTime(epochTime()))))
|
|
res3 = waitFor nodes[2].post_waku_v2_relay_v1_message(defaultTopic, WakuRelayMessage(payload: message(2).buffer, contentTopic: some(defaultContentTopic), timestamp: some(getNanosecondTime(epochTime()))))
|
|
res3 = waitFor nodes[3].post_waku_v2_relay_v1_message(defaultTopic, WakuRelayMessage(payload: message(3).buffer, contentTopic: some(defaultContentTopic), timestamp: some(getNanosecondTime(epochTime()))))
|
|
res3 = waitFor nodes[4].post_waku_v2_relay_v1_message(defaultTopic, WakuRelayMessage(payload: message(4).buffer, contentTopic: some(defaultContentTopic), timestamp: some(getNanosecondTime(epochTime()))))
|
|
|
|
# Scenario xx2 - 14 full nodes, two edge nodes
|
|
# Assume one full topic
|
|
#########################################
|
|
#let nodea = newRpcHttpClient()
|
|
#let nodeb = newRpcHttpClient()
|
|
#
|
|
#waitFor nodea.connect("localhost", Port(8545))
|
|
#waitFor nodeb.connect("localhost", Port(8546))
|
|
#
|
|
#let version = waitFor nodea.wakuVersion()
|
|
#info "Version is", version
|
|
#
|
|
#let res1 = waitFor nodea.wakuSubscribe(defaultTopic)
|
|
#let res2 = waitFor nodeb.wakuSubscribe(defaultTopic)
|
|
#
|
|
#let amount = 14
|
|
#var nodes: seq[RPCHttpClient]
|
|
#for i in 0..<amount:
|
|
# var node = newRpcHttpClient()
|
|
# nodes.add(node)
|
|
# waitFor nodes[i].connect("localhost", Port(8547+i))
|
|
# var res = waitFor nodes[i].wakuSubscribe(defaultTopic)
|
|
#
|
|
#os.sleep(2000)
|
|
#
|
|
## TODO: Show plaintext message in log
|
|
#for i in 0..<topicAmount:
|
|
# os.sleep(50)
|
|
# # TODO: This would then publish on a subtopic here
|
|
# var s = "hello " & $2
|
|
# var res3 = waitFor nodea.wakuPublish(defaultTopic, s)
|
|
|
|
# Misc old scenarios
|
|
#########################################
|
|
|
|
# All full nodes connected etc
|
|
#
|
|
# let node1 = newRpcHttpClient()
|
|
# let node2 = newRpcHttpClient()
|
|
# let node3 = newRpcHttpClient()
|
|
# let node4 = newRpcHttpClient()
|
|
# let node5 = newRpcHttpClient()
|
|
# let node6 = newRpcHttpClient()
|
|
|
|
# waitFor node1.connect("localhost", Port(8547))
|
|
# waitFor node2.connect("localhost", Port(8548))
|
|
# waitFor node3.connect("localhost", Port(8549))
|
|
# waitFor node4.connect("localhost", Port(8550))
|
|
# waitFor node5.connect("localhost", Port(8551))
|
|
# waitFor node6.connect("localhost", Port(8552))
|
|
|
|
# let version = waitFor node6.wakuVersion()
|
|
# info "Version is", version
|
|
|
|
# # TODO: Implement handler logic
|
|
# # All subscribing to foobar topic
|
|
# let res2 = waitFor node2.wakuSubscribe("foobar")
|
|
# let res3 = waitFor node3.wakuSubscribe("foobar")
|
|
# let res4 = waitFor node4.wakuSubscribe("foobar")
|
|
# let res5 = waitFor node5.wakuSubscribe("foobar")
|
|
# let res6 = waitFor node6.wakuSubscribe("foobar")
|
|
# os.sleep(2000)
|
|
|
|
# # info "Posting envelopes on all subscribed topics"
|
|
# for i in 0..<topicAmount:
|
|
# os.sleep(50)
|
|
# let res2 = waitFor node1.wakuPublish("foobar", "hello world")
|
|
|
|
# os.sleep(2000)
|
|
|
|
# for i in 0..<topicAmount:
|
|
# os.sleep(50)
|
|
# let res2 = waitFor node1.wakuPublish("foobar", "hello world2")
|
|
|
|
# Node 00 and 05 also subscribe
|
|
# XXX I confirm this works. As in - with this we have A-B
|
|
# Now to tweak it!
|
|
# let node0 = newRpcHttpClient()
|
|
# let node5 = newRpcHttpClient()
|
|
# waitFor node0.connect("localhost", Port(8547))
|
|
# waitFor node5.connect("localhost", Port(8552))
|
|
# let res4 = waitFor node0.wakuSubscribe("foobar")
|
|
# let res5 = waitFor node5.wakuSubscribe("foobar")
|