From 2a6e76747efb98ac261b88a0543093ef52cc38eb Mon Sep 17 00:00:00 2001 From: darshankabariya Date: Tue, 4 Mar 2025 14:28:24 +0530 Subject: [PATCH] feat: better location --- waku/waku_rln_relay/conversion_utils.nim | 14 +++++++++++ .../group_manager/on_chain/group_manager.nim | 23 ------------------- waku/waku_rln_relay/protocol_types.nim | 9 ++++++++ 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/waku/waku_rln_relay/conversion_utils.nim b/waku/waku_rln_relay/conversion_utils.nim index e710fea62..439880a7e 100644 --- a/waku/waku_rln_relay/conversion_utils.nim +++ b/waku/waku_rln_relay/conversion_utils.nim @@ -116,6 +116,20 @@ proc serialize*(memIndices: seq[MembershipIndex]): seq[byte] = return memIndicesBytes +proc serialize*(witness: Witness): seq[byte] = + ## Serializes the witness into a byte array + var buffer: seq[byte] + buffer.add(witness.identity_secret) + buffer.add(witness.identity_nullifier) + for element in witness.merkle_proof: + buffer.add(element.toBytesBE()) # Convert Uint256 to big-endian bytes + buffer.add(witness.external_nullifier) + buffer.add(uint8(witness.signal.len)) # Add signal length as a single byte + buffer.add(witness.signal) + buffer.add(toBytesBE(witness.message_id)) + buffer.add(witness.rln_identifier) + return buffer + proc toEpoch*(t: uint64): Epoch = ## converts `t` to `Epoch` in little-endian order let bytes = toBytes(t, Endianness.littleEndian) 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 611e24fc2..48ad9699d 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 @@ -70,29 +70,6 @@ type blockFetchingActive*: bool merkleProofsByIndex*: Table[Uint256, seq[Uint256]] -type Witness* = object ## Represents the custom witness for generating an RLN proof - identity_secret*: seq[byte] # Identity secret (private key) - identity_nullifier*: seq[byte] # Identity nullifier - merkle_proof*: seq[Uint256] # Merkle proof elements (retrieved from the smart contract) - external_nullifier*: Epoch # Epoch (external nullifier) - signal*: seq[byte] # Message data (signal) - message_id*: MessageId # Message ID (used for rate limiting) - rln_identifier*: RlnIdentifier # RLN identifier (default value provided) - -proc SerializeWitness*(witness: Witness): seq[byte] = - ## Serializes the witness into a byte array - var buffer: seq[byte] - buffer.add(witness.identity_secret) - buffer.add(witness.identity_nullifier) - for element in witness.merkle_proof: - buffer.add(element.toBytesBE()) # Convert Uint256 to big-endian bytes - buffer.add(witness.external_nullifier) - buffer.add(uint8(witness.signal.len)) # Add signal length as a single byte - buffer.add(witness.signal) - buffer.add(toBytesBE(witness.message_id)) - buffer.add(witness.rln_identifier) - return buffer - const DefaultKeyStorePath* = "rlnKeystore.json" const DefaultKeyStorePassword* = "password" diff --git a/waku/waku_rln_relay/protocol_types.nim b/waku/waku_rln_relay/protocol_types.nim index 97b1c34ea..5a66ad603 100644 --- a/waku/waku_rln_relay/protocol_types.nim +++ b/waku/waku_rln_relay/protocol_types.nim @@ -52,6 +52,15 @@ type RateLimitProof* = object ## the external nullifier used for the generation of the `proof` (derived from poseidon([epoch, rln_identifier])) externalNullifier*: ExternalNullifier +type Witness* = object ## Represents the custom witness for generating an RLN proof + identity_secret*: seq[byte] # Identity secret (private key) + identity_nullifier*: seq[byte] # Identity nullifier + merkle_proof*: seq[Uint256] # Merkle proof elements (retrieved from the smart contract) + external_nullifier*: Epoch # Epoch (external nullifier) + signal*: seq[byte] # Message data (signal) + message_id*: MessageId # Message ID (used for rate limiting) + rln_identifier*: RlnIdentifier # RLN identifier (default value provided) + type ProofMetadata* = object nullifier*: Nullifier shareX*: MerkleNode