From 33da7a1a8206746010c6999b9c265ddb875345da Mon Sep 17 00:00:00 2001 From: darshankabariya Date: Tue, 8 Apr 2025 13:13:51 +0530 Subject: [PATCH 1/3] chore: hash to field --- .../group_manager/on_chain/group_manager.nim | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 826ca2d79..8b1cb1165 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -336,6 +336,17 @@ proc indexToPath(index: uint64): seq[byte] = for i in 0 ..< treeHeight: result[i] = byte((index shr i) and 1) +# Hashes arbitrary signal to the underlying prime field. +proc hashToField*(signal: seq[byte]): array[32, byte] = + var ctx: keccak256 + ctx.init() + ctx.update(signal) + var hash = ctx.finish() + + var result: array[32, byte] + copyMem(result[0].addr, hash.data[0].addr, 32) + return result + method generateProof*( g: OnchainGroupManager, data: seq[byte], @@ -376,7 +387,7 @@ method generateProof*( message_id: serialize(messageId), path_elements: g.merkleProofCache, identity_path_index: indexToPath(g.membershipIndex.get()), - x: toArray32(data), + x: hashToField(data), external_nullifier: externalNullifierRes.get(), ) From ab95aef0b0f51c8fef1a2bc99610604b01cc24a2 Mon Sep 17 00:00:00 2001 From: darshankabariya Date: Tue, 8 Apr 2025 14:44:27 +0530 Subject: [PATCH 2/3] chore: update zerokit --- vendor/zerokit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/zerokit b/vendor/zerokit index b9d27039c..ba467d370 160000 --- a/vendor/zerokit +++ b/vendor/zerokit @@ -1 +1 @@ -Subproject commit b9d27039c3266af108882d7a8bafc37400d29855 +Subproject commit ba467d370c56b7432522227de22fbd664d44ef3e From 33299660d9cbe73d207ebd1a550c569945d2e444 Mon Sep 17 00:00:00 2001 From: darshankabariya Date: Tue, 8 Apr 2025 15:15:37 +0530 Subject: [PATCH 3/3] chore: trackMerkleRootchanges --- .../group_manager/on_chain/group_manager.nim | 52 +++++++++---------- waku/waku_rln_relay/rln_relay.nim | 2 + 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 8b1cb1165..c91bff0c9 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -188,39 +188,39 @@ proc updateRoots*(g: OnchainGroupManager): Future[bool] {.async.} = discard g.validRoots.popFirst() g.validRoots.addLast(merkleRoot) - debug "~~~~~~~~~~~~~ Detected new Merkle root ~~~~~~~~~~~~~~~~", + debug "------ Detected new Merkle root ------", root = merkleRoot.toHex, totalRoots = g.validRoots.len return true else: - debug "~~~~~~~~~~~~~ No new Merkle root ~~~~~~~~~~~~~~~~", + debug "------ No new Merkle root ------", root = merkleRoot.toHex, totalRoots = g.validRoots.len return false -# proc trackRootChanges*(g: OnchainGroupManager): Future[void] {.async.} = -# ## Continuously track changes to the Merkle root -# initializedGuard(g) -# -# let ethRpc = g.ethRpc.get() -# let wakuRlnContract = g.wakuRlnContract.get() -# -# # Set up the polling interval - more frequent to catch roots -# const rpcDelay = 5.seconds -# -# info "Starting to track Merkle root changes" -# -# while true: -# debug "starting to update roots" -# let rootUpdated = await g.updateRoots() -# -# if rootUpdated: -# let proofResult = await g.fetchMerkleProofElements() -# if proofResult.isErr(): -# error "Failed to fetch Merkle proof", error = proofResult.error -# g.merkleProofCache = proofResult.get() -# -# debug "sleeping for 5 seconds" -# await sleepAsync(rpcDelay) +proc trackRootChanges*(g: OnchainGroupManager): Future[void] {.async.} = + ## Continuously track changes to the Merkle root + initializedGuard(g) + + let ethRpc = g.ethRpc.get() + let wakuRlnContract = g.wakuRlnContract.get() + + # Set up the polling interval - more frequent to catch roots + const rpcDelay = 5.seconds + + info "Starting to track Merkle root changes" + + while true: + debug "starting to update roots" + let rootUpdated = await g.updateRoots() + + if rootUpdated: + let proofResult = await g.fetchMerkleProofElements() + if proofResult.isErr(): + error "Failed to fetch Merkle proof", error = proofResult.error + g.merkleProofCache = proofResult.get() + + debug "sleeping for 5 seconds" + await sleepAsync(rpcDelay) method atomicBatch*( g: OnchainGroupManager, diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 7f2d891a4..8a864ce2e 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -468,6 +468,8 @@ proc mount( onFatalErrorAction: conf.onFatalErrorAction, ) + asyncSpawn trackRootChanges(OnchainGroupManager(groupManager)) + # Initialize the groupManager (await groupManager.init()).isOkOr: return err("could not initialize the group manager: " & $error)