Skip to content

Commit

Permalink
chore(rln-relay): refactor mounting procedure (#1457)
Browse files Browse the repository at this point in the history
* chore(rln-relay): refactor mounting procedure

* fix(rln-relay): tests

* fix(rln-relay|chat2): update mounting proc in chat2, fix args to mountRlnRelay

* fix(rln-relay): remove stale todo
  • Loading branch information
rymnc authored Dec 13, 2022
1 parent 2915b19 commit 33e9d8b
Show file tree
Hide file tree
Showing 10 changed files with 241 additions and 248 deletions.
14 changes: 7 additions & 7 deletions apps/chat2/chat2.nim
Original file line number Diff line number Diff line change
Expand Up @@ -565,13 +565,13 @@ proc processInput(rfd: AsyncFD) {.async.} =
rlnRelayCredentialsPassword: conf.rlnRelayCredentialsPassword
)

let res = await node.mountRlnRelay(conf=rlnConf, spamHandler = some(spamHandler), registrationHandler = some(registrationHandler))
if res.isErr():
echo "failed to mount rln-relay: " & res.error()
else:
echo "your membership index is: ", node.wakuRlnRelay.membershipIndex
echo "your rln identity key is: ", node.wakuRlnRelay.membershipKeyPair.idKey.inHex()
echo "your rln identity commitment key is: ", node.wakuRlnRelay.membershipKeyPair.idCommitment.inHex()
await node.mountRlnRelay(rlnConf,
spamHandler=some(spamHandler),
registrationHandler=some(registrationHandler))

echo "your membership index is: ", node.wakuRlnRelay.membershipIndex
echo "your rln identity key is: ", node.wakuRlnRelay.membershipKeyPair.idKey.inHex()
echo "your rln identity commitment key is: ", node.wakuRlnRelay.membershipKeyPair.idCommitment.inHex()

if conf.metricsLogging:
startMetricsLog()
Expand Down
4 changes: 1 addition & 3 deletions apps/wakunode2/wakunode2.nim
Original file line number Diff line number Diff line change
Expand Up @@ -371,9 +371,7 @@ proc setupProtocols(node: WakuNode, conf: WakuNodeConf,
)

try:
let res = await node.mountRlnRelay(rlnConf)
if res.isErr():
return err("failed to mount waku RLN relay protocol: " & res.error)
await node.mountRlnRelay(rlnConf)
except:
return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg())

Expand Down
9 changes: 7 additions & 2 deletions tests/v2/test_waku_rln_relay.nim
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,21 @@ procSuite "Waku rln relay":

# -------- mount rln-relay in the off-chain mode
await node.mountRelay(@[RlnRelayPubsubTopic])
let mountRes = node.mountRlnRelayStatic(group = groupIDCommitments,
let mountRes = node.wakuRelay.mountRlnRelayStatic(group = groupIDCommitments,
memKeyPair = groupKeyPairs[index],
memIndex = index,
pubsubTopic = RlnRelayPubsubTopic,
contentTopic = RlnRelayContentTopic)
require:
mountRes.isOk()

let wakuRlnRelay = mountRes.get()

# get the root of Merkle tree which is constructed inside the mountRlnRelay proc
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
let calculatedRootRes = wakuRlnRelay.rlnInstance.getMerkleRoot()
require:
calculatedRootRes.isOk()
let calculatedRoot = calculatedRootRes.get().inHex()
debug "calculated root by mountRlnRelay", calculatedRoot

# this part checks whether the Merkle tree is constructed correctly inside the mountRlnRelay proc
Expand Down
56 changes: 36 additions & 20 deletions tests/v2/test_waku_rln_relay_onchain.nim
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ import
stew/byteutils, stew/shims/net as stewNet,
libp2p/crypto/crypto,
eth/keys,
../../waku/v2/protocol/waku_rln_relay/[utils,
constants,
protocol_types,
rln_relay_contract],
../../waku/v2/protocol/waku_rln_relay,
../../waku/v2/node/waku_node,
../test_helpers,
./test_utils
Expand Down Expand Up @@ -209,11 +206,11 @@ procSuite "Waku-rln-relay":
let fut = newFuture[void]()
let s = await contractObj.subscribe(MemberRegistered, %*{"fromBlock": "0x0",
"address": contractAddress}) do(
pubkey: Uint256, index: Uint256){.raises: [Defect], gcsafe.}:
idCommitment: Uint256, index: Uint256){.raises: [Defect], gcsafe.}:
try:
debug "onRegister", pubkey = pubkey, index = index
debug "onRegister", idCommitment = idCommitment, index = index
require:
pubkey == pk
idCommitment == pk
fut.complete()
except Exception as err:
# chronos still raises exceptions which inherit directly from Exception
Expand Down Expand Up @@ -287,9 +284,9 @@ procSuite "Waku-rln-relay":
events[futIndex].complete()
futIndex += 1
let index = members[0].index
let isSuccessful = rlnPeer.rlnInstance.insertMembers(index, members.mapIt(it.idComm))
let insertRes = rlnPeer.insertMembers(index, members.mapIt(it.idComm))
check:
isSuccessful
insertRes.isOk()
return ok()

# mount the handler for listening to the contract events
Expand All @@ -308,7 +305,7 @@ procSuite "Waku-rln-relay":
debug "a member is registered", tx2 = tx2

# wait for the events to be processed
await all(events)
await allFutures(events)

# release resources -----------------------
await web3.close()
Expand Down Expand Up @@ -432,7 +429,8 @@ procSuite "Waku-rln-relay":
# test ------------------------------
# start rln-relay
await node.mountRelay(@[RlnRelayPubsubTopic])
let mountRes = node.mountRlnRelayStatic(group = group,
let mountRes = mountRlnRelayStatic(wakuRelay = node.wakuRelay,
group = group,
memKeyPair = keyPair,
memIndex = index,
pubsubTopic = RlnRelayPubsubTopic,
Expand All @@ -441,7 +439,9 @@ procSuite "Waku-rln-relay":
require:
mountRes.isOk()

let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
let wakuRlnRelay = mountRes.get()

let calculatedRoot = wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex()
debug "calculated root ", calculatedRoot

check:
Expand Down Expand Up @@ -522,20 +522,26 @@ procSuite "Waku-rln-relay":
# test ------------------------------
# start rln-relay
await node.mountRelay(@[RlnRelayPubsubTopic])
discard await node.mountRlnRelayDynamic(ethClientAddr = EthClient,
let mountRes = await mountRlnRelayDynamic(wakuRelay = node.wakuRelay,
ethClientAddr = EthClient,
ethAccountAddress = some(ethacc),
ethAccountPrivKeyOpt = some(ethPrivKey),
memContractAddr = contractAddress,
memKeyPair = some(keyPair1),
memIndex = some(MembershipIndex(0)),
pubsubTopic = RlnRelayPubsubTopic,
contentTopic = RlnRelayContentTopic)

require:
mountRes.isOk()

let wakuRlnRelay = mountRes.get()

await sleepAsync(2000) # wait for the event to reach the group handler
await sleepAsync(2000.milliseconds()) # wait for the event to reach the group handler

# rln pks are inserted into the rln peer's Merkle tree and the resulting root
# is expected to be the same as the calculatedRoot i.e., the one calculated outside of the mountRlnRelayDynamic proc
let calculatedRoot = node.wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
let calculatedRoot = wakuRlnRelay.rlnInstance.getMerkleRoot().value().inHex
debug "calculated root ", calculatedRoot=calculatedRoot
debug "expected root ", expectedRoot=expectedRoot

Expand Down Expand Up @@ -575,20 +581,25 @@ procSuite "Waku-rln-relay":

# start rln-relay on the first node, leave rln-relay credentials empty
await node.mountRelay(@[RlnRelayPubsubTopic])
discard await node.mountRlnRelayDynamic(ethClientAddr = EthClient,
let mountRes = await mountRlnRelayDynamic(wakuRelay=node.wakuRelay,
ethClientAddr = EthClient,
ethAccountAddress = some(ethacc),
ethAccountPrivKeyOpt = some(ethPrivKey),
memContractAddr = contractAddress,
memKeyPair = none(MembershipKeyPair),
memIndex = none(MembershipIndex),
pubsubTopic = RlnRelayPubsubTopic,
contentTopic = RlnRelayContentTopic)


require:
mountRes.isOk()

let wakuRlnRelay = mountRes.get()

# start rln-relay on the second node, leave rln-relay credentials empty
await node2.mountRelay(@[RlnRelayPubsubTopic])
discard await node2.mountRlnRelayDynamic(ethClientAddr = EthClient,
let mountRes2 = await mountRlnRelayDynamic(wakuRelay=node2.wakuRelay,
ethClientAddr = EthClient,
ethAccountAddress = some(ethacc),
ethAccountPrivKeyOpt = some(ethPrivKey),
memContractAddr = contractAddress,
Expand All @@ -597,12 +608,17 @@ procSuite "Waku-rln-relay":
pubsubTopic = RlnRelayPubsubTopic,
contentTopic = RlnRelayContentTopic)

require:
mountRes2.isOk()

let wakuRlnRelay2 = mountRes2.get()

# the two nodes should be registered into the contract
# since nodes are spun up sequentially
# the first node has index 0 whereas the second node gets index 1
check:
node.wakuRlnRelay.membershipIndex == MembershipIndex(0)
node2.wakuRlnRelay.membershipIndex == MembershipIndex(1)
wakuRlnRelay.membershipIndex == MembershipIndex(0)
wakuRlnRelay2.membershipIndex == MembershipIndex(1)

await node.stop()
await node2.stop()
Expand Down
Loading

0 comments on commit 33e9d8b

Please sign in to comment.