From abd46a94c9cd2a2275e6babb27e88d64238a7614 Mon Sep 17 00:00:00 2001 From: darshankabariya Date: Wed, 9 Apr 2025 13:57:26 +0530 Subject: [PATCH] chore: stop unneccesory conversion --- .../group_manager/on_chain/group_manager.nim | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 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 f6ab98bf1..09123cffe 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 @@ -164,23 +164,30 @@ method validateRoot*(g: OnchainGroupManager, root: MerkleNode): bool = return true return false -# Add this utility function to the file -proc toMerkleNode*(uint256Value: UInt256): MerkleNode = - ## Converts a UInt256 value to a MerkleNode (array[32, byte]) - var merkleNode: MerkleNode - let byteArray = uint256Value.toBytesBE() - - for i in 0 ..< min(byteArray.len, merkleNode.len): - merkleNode[i] = byteArray[i] - - return merkleNode +func toArray32*(x: UInt256): array[32, byte] {.inline.} = + ## Convert UInt256 to byte array without endianness conversion + when nimvm: + for i in 0..<32: + result[i] = byte((x shr (i * 8)).truncate(uint8) and 0xff) + else: + copyMem(addr result, unsafeAddr x, 32) + +proc toArray32*(s: seq[byte]): array[32, byte] = + var output: array[32, byte] + for i in 0 ..< 32: + output[i] = 0 + let len = min(s.len, 32) + for i in 0 ..< len: + output[i] = s[s.len - 1 - i] + return output proc updateRoots*(g: OnchainGroupManager): Future[bool] {.async.} = let rootRes = await g.fetchMerkleRoot() if rootRes.isErr(): return false - let merkleRoot = toMerkleNode(rootRes.get()) + let merkleRoot = toArray32(rootRes.get()) + debug "------ merkleRoot ------", input = rootRes.get(), output = merkleRoot if g.validRoots.len == 0: g.validRoots.addLast(merkleRoot) return true @@ -317,15 +324,6 @@ method withdrawBatch*( ): Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) -proc toArray32*(s: seq[byte]): array[32, byte] = - var output: array[32, byte] - for i in 0 ..< 32: - output[i] = 0 - let len = min(s.len, 32) - for i in 0 ..< len: - output[i] = s[s.len - 1 - i] - return output - proc indexToPath(index: uint64): seq[byte] = # Fixed tree height of 32 for RLN const treeHeight = 20