From 04ab68fc695cbe45c6ab0981a083f8e25c6856f1 Mon Sep 17 00:00:00 2001 From: Arseniy Klempner Date: Wed, 17 Dec 2025 18:03:30 -0800 Subject: [PATCH] feat: wrapper function to generate external nullifier --- .../group_manager/on_chain/group_manager.nim | 8 ++------ waku/waku_rln_relay/rln/wrappers.nim | 13 ++++++++++--- 2 files changed, 12 insertions(+), 9 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 8993c61da..2ce7d4423 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 @@ -379,9 +379,7 @@ method generateProof*( let x = keccak.keccak256.digest(data) - let epochHash = keccak.keccak256.digest(@(epoch)) - let rlnIdentifierHash = keccak.keccak256.digest(@(rlnIdentifier)) - let extNullifier = poseidon(@[@(epochHash), @(rlnIdentifierHash)]).valueOr: + let extNullifier = generateExternalNullifier(epoch, rlnIdentifier).valueOr: return err("Failed to compute external nullifier: " & error) let witness = RLNWitnessInput( @@ -459,9 +457,7 @@ method verifyProof*( var normalizedProof = proof - let epochHash = keccak.keccak256.digest(@(proof.epoch)) - let rlnIdentifierHash = keccak.keccak256.digest(@(proof.rlnIdentifier)) - let externalNullifier = poseidon(@[@(epochHash), @(rlnIdentifierHash)]).valueOr: + let externalNullifier = generateExternalNullifier(proof.epoch, proof.rlnIdentifier).valueOr: return err("Failed to compute external nullifier: " & error) normalizedProof.externalNullifier = externalNullifier diff --git a/waku/waku_rln_relay/rln/wrappers.nim b/waku/waku_rln_relay/rln/wrappers.nim index b8da3a7b3..1b2b0270f 100644 --- a/waku/waku_rln_relay/rln/wrappers.nim +++ b/waku/waku_rln_relay/rln/wrappers.nim @@ -163,11 +163,18 @@ proc toLeaves*(rateCommitments: seq[RateCommitment]): RlnRelayResult[seq[seq[byt leaves.add(leaf) return ok(leaves) -proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = - let epochHash = keccak.keccak256.digest(@(proof.epoch)) - let rlnIdentifierHash = keccak.keccak256.digest(@(proof.rlnIdentifier)) +proc generateExternalNullifier*( + epoch: Epoch, rlnIdentifier: RlnIdentifier +): RlnRelayResult[ExternalNullifier] = + let epochHash = keccak.keccak256.digest(@(epoch)) + let rlnIdentifierHash = keccak.keccak256.digest(@(rlnIdentifier)) let externalNullifier = poseidon(@[@(epochHash), @(rlnIdentifierHash)]).valueOr: return err("Failed to compute external nullifier: " & error) + return ok(externalNullifier) + +proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = + let externalNullifier = generateExternalNullifier(proof.epoch, proof.rlnIdentifier).valueOr: + return err("Failed to compute external nullifier: " & error) return ok( ProofMetadata( nullifier: proof.nullifier,