Skip to content

Commit deebee4

Browse files
feat: stateless RLN ( bump v0.9.0 ) (#3621)
1 parent 7e5041d commit deebee4

File tree

16 files changed

+68
-381
lines changed

16 files changed

+68
-381
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ nimbus-build-system-nimble-dir:
177177
.PHONY: librln
178178

179179
LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit
180-
LIBRLN_VERSION := v0.8.0
180+
LIBRLN_VERSION := v0.9.0
181181

182182
ifeq ($(detected_OS),Windows)
183183
LIBRLN_FILE := rln.lib

apps/benchmarks/benchmarks.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ proc benchmark(
1515
manager: OnChainGroupManager, registerCount: int, messageLimit: int
1616
): Future[string] {.async, gcsafe.} =
1717
# Register a new member so that we can later generate proofs
18-
let idCredentials = generateCredentials(manager.rlnInstance, registerCount)
18+
let idCredentials = generateCredentials(registerCount)
1919

2020
var start_time = getTime()
2121
for i in 0 .. registerCount - 1:

scripts/build_rln.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,6 @@ else
4949
exit 1
5050
fi
5151
# if submodule version = version in Makefile, build rln
52-
cargo build --release -p rln --manifest-path "${build_dir}/rln/Cargo.toml" --features arkzkey
52+
cargo build --release -p rln --manifest-path "${build_dir}/rln/Cargo.toml"
5353
cp "${build_dir}/target/release/librln.a" "${output_filename}"
5454
fi

tests/node/test_wakunode_legacy_lightpush.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ suite "RLN Proofs as a Lightpush Service":
151151
client.mountLegacyLightPushClient()
152152

153153
let manager1 = cast[OnchainGroupManager](server.wakuRlnRelay.groupManager)
154-
let idCredentials1 = generateCredentials(manager1.rlnInstance)
154+
let idCredentials1 = generateCredentials()
155155

156156
try:
157157
waitFor manager1.register(idCredentials1, UserMessageLimit(20))

tests/node/test_wakunode_lightpush.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ suite "RLN Proofs as a Lightpush Service":
151151
client.mountLightPushClient()
152152

153153
let manager1 = cast[OnchainGroupManager](server.wakuRlnRelay.groupManager)
154-
let idCredentials1 = generateCredentials(manager1.rlnInstance)
154+
let idCredentials1 = generateCredentials()
155155

156156
try:
157157
waitFor manager1.register(idCredentials1, UserMessageLimit(20))

tests/waku_rln_relay/rln/test_wrappers.nim

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,9 @@ proc valid(x: seq[byte]): bool =
3434
return true
3535

3636
suite "membershipKeyGen":
37-
var rlnRes {.threadvar.}: RLNResult
38-
39-
setup:
40-
rlnRes = createRLNInstanceWrapper()
41-
4237
test "ok":
4338
# Given we generate valid membership keys
44-
let identityCredentialsRes = membershipKeyGen(rlnRes.get())
39+
let identityCredentialsRes = membershipKeyGen()
4540

4641
# Then it contains valid identity credentials
4742
let identityCredentials = identityCredentialsRes.get()
@@ -62,7 +57,7 @@ suite "membershipKeyGen":
6257
keyGenMock
6358

6459
# When we generate the membership keys
65-
let identityCredentialsRes = membershipKeyGen(rlnRes.get())
60+
let identityCredentialsRes = membershipKeyGen()
6661

6762
# Then it fails
6863
check:
@@ -85,7 +80,7 @@ suite "membershipKeyGen":
8580
keyGenMock
8681

8782
# When we generate the membership keys
88-
let identityCredentialsRes = membershipKeyGen(rlnRes.get())
83+
let identityCredentialsRes = membershipKeyGen()
8984

9085
# Then it fails
9186
check:

tests/waku_rln_relay/test_rln_group_manager_onchain.nim

Lines changed: 10 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -60,44 +60,6 @@ suite "Onchain group manager":
6060
(waitFor manager.init()).isOkOr:
6161
raiseAssert $error
6262

63-
test "should error on initialization when loaded metadata does not match":
64-
(waitFor manager.init()).isOkOr:
65-
assert false, $error
66-
let metadataSetRes = manager.setMetadata()
67-
assert metadataSetRes.isOk(), metadataSetRes.error
68-
let metadataOpt = manager.rlnInstance.getMetadata().valueOr:
69-
assert false, $error
70-
return
71-
assert metadataOpt.isSome(), "metadata is not set"
72-
let metadata = metadataOpt.get()
73-
assert metadata.chainId == 1234, "chainId is not equal to 1234"
74-
assert metadata.contractAddress == manager.ethContractAddress,
75-
"contractAddress is not equal to " & manager.ethContractAddress
76-
let web3 = manager.ethRpc.get()
77-
let accounts = waitFor web3.provider.eth_accounts()
78-
web3.defaultAccount = accounts[2]
79-
let (privateKey, acc) = createEthAccount(web3)
80-
let tokenAddress = (waitFor deployTestToken(privateKey, acc, web3)).valueOr:
81-
assert false, "Failed to deploy test token contract: " & $error
82-
return
83-
let differentContractAddress = (
84-
waitFor executeForgeContractDeployScripts(privateKey, acc, web3)
85-
).valueOr:
86-
assert false, "Failed to deploy RLN contract: " & $error
87-
return
88-
# simulating a change in the contractAddress
89-
let manager2 = OnchainGroupManager(
90-
ethClientUrls: @[EthClient],
91-
ethContractAddress: $differentContractAddress,
92-
rlnInstance: manager.rlnInstance,
93-
onFatalErrorAction: proc(errStr: string) =
94-
assert false, errStr
95-
,
96-
)
97-
let e = waitFor manager2.init()
98-
(e).isErrOr:
99-
assert false, "Expected error when contract address doesn't match"
100-
10163
test "should error if contract does not exist":
10264
manager.ethContractAddress = "0x0000000000000000000000000000000000000000"
10365

@@ -118,7 +80,7 @@ suite "Onchain group manager":
11880
check getCurrentExceptionMsg().len == 38
11981

12082
test "trackRootChanges: should sync to the state of the group":
121-
let credentials = generateCredentials(manager.rlnInstance)
83+
let credentials = generateCredentials()
12284
(waitFor manager.init()).isOkOr:
12385
raiseAssert $error
12486

@@ -133,17 +95,7 @@ suite "Onchain group manager":
13395

13496
let merkleRootAfter = waitFor manager.fetchMerkleRoot()
13597

136-
let metadataSetRes = manager.setMetadata()
137-
assert metadataSetRes.isOk(), metadataSetRes.error
138-
139-
let metadataOpt = getMetadata(manager.rlnInstance).valueOr:
140-
raiseAssert $error
141-
142-
assert metadataOpt.isSome(), "metadata is not set"
143-
let metadata = metadataOpt.get()
144-
14598
check:
146-
metadata.validRoots == manager.validRoots.toSeq()
14799
merkleRootBefore != merkleRootAfter
148100

149101
test "trackRootChanges: should fetch history correctly":
@@ -152,7 +104,7 @@ suite "Onchain group manager":
152104
# so we can't use it in this test.
153105

154106
const credentialCount = 6
155-
let credentials = generateCredentials(manager.rlnInstance, credentialCount)
107+
let credentials = generateCredentials(credentialCount)
156108
(waitFor manager.init()).isOkOr:
157109
raiseAssert $error
158110

@@ -191,7 +143,7 @@ suite "Onchain group manager":
191143
(waitFor manager.init()).isOkOr:
192144
raiseAssert $error
193145

194-
let idCredentials = generateCredentials(manager.rlnInstance)
146+
let idCredentials = generateCredentials()
195147
let merkleRootBefore = waitFor manager.fetchMerkleRoot()
196148

197149
try:
@@ -207,7 +159,7 @@ suite "Onchain group manager":
207159
manager.latestIndex == 1
208160

209161
test "register: callback is called":
210-
let idCredentials = generateCredentials(manager.rlnInstance)
162+
let idCredentials = generateCredentials()
211163
let idCommitment = idCredentials.idCommitment
212164

213165
let fut = newFuture[void]()
@@ -237,7 +189,7 @@ suite "Onchain group manager":
237189
waitFor fut
238190

239191
test "withdraw: should guard against uninitialized state":
240-
let idSecretHash = generateCredentials(manager.rlnInstance).idSecretHash
192+
let idSecretHash = generateCredentials().idSecretHash
241193

242194
try:
243195
waitFor manager.withdraw(idSecretHash)
@@ -247,7 +199,7 @@ suite "Onchain group manager":
247199
assert false, "exception raised: " & getCurrentExceptionMsg()
248200

249201
test "validateRoot: should validate good root":
250-
let idCredentials = generateCredentials(manager.rlnInstance)
202+
let idCredentials = generateCredentials()
251203
let idCommitment = idCredentials.idCommitment
252204

253205
let fut = newFuture[void]()
@@ -298,7 +250,7 @@ suite "Onchain group manager":
298250
validated
299251

300252
test "validateRoot: should reject bad root":
301-
let idCredentials = generateCredentials(manager.rlnInstance)
253+
let idCredentials = generateCredentials()
302254
let idCommitment = idCredentials.idCommitment
303255

304256
(waitFor manager.init()).isOkOr:
@@ -331,7 +283,7 @@ suite "Onchain group manager":
331283
validated == false
332284

333285
test "verifyProof: should verify valid proof":
334-
let credentials = generateCredentials(manager.rlnInstance)
286+
let credentials = generateCredentials()
335287
(waitFor manager.init()).isOkOr:
336288
raiseAssert $error
337289

@@ -383,7 +335,7 @@ suite "Onchain group manager":
383335
(waitFor manager.init()).isOkOr:
384336
raiseAssert $error
385337

386-
let idCredential = generateCredentials(manager.rlnInstance)
338+
let idCredential = generateCredentials()
387339

388340
try:
389341
waitFor manager.register(idCredential, UserMessageLimit(20))
@@ -420,7 +372,7 @@ suite "Onchain group manager":
420372

421373
test "root queue should be updated correctly":
422374
const credentialCount = 12
423-
let credentials = generateCredentials(manager.rlnInstance, credentialCount)
375+
let credentials = generateCredentials(credentialCount)
424376
(waitFor manager.init()).isOkOr:
425377
raiseAssert $error
426378

tests/waku_rln_relay/test_waku_rln_relay.nim

Lines changed: 9 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,11 @@ suite "Waku rln relay":
3636
test "key_gen Nim Wrappers":
3737
let merkleDepth: csize_t = 20
3838

39-
let rlnInstance = createRLNInstanceWrapper()
40-
require:
41-
rlnInstance.isOk()
42-
4339
# keysBufferPtr will hold the generated identity credential i.e., id trapdoor, nullifier, secret hash and commitment
4440
var keysBuffer: Buffer
4541
let
4642
keysBufferPtr = addr(keysBuffer)
47-
done = key_gen(rlnInstance.get(), keysBufferPtr)
43+
done = key_gen(keysBufferPtr, true)
4844
require:
4945
# check whether the keys are generated successfully
5046
done
@@ -56,12 +52,7 @@ suite "Waku rln relay":
5652
info "generated keys: ", generatedKeys
5753

5854
test "membership Key Generation":
59-
# create an RLN instance
60-
let rlnInstance = createRLNInstanceWrapper()
61-
require:
62-
rlnInstance.isOk()
63-
64-
let idCredentialsRes = membershipKeyGen(rlnInstance.get())
55+
let idCredentialsRes = membershipKeyGen()
6556
require:
6657
idCredentialsRes.isOk()
6758

@@ -79,61 +70,6 @@ suite "Waku rln relay":
7970

8071
info "the generated identity credential: ", idCredential
8172

82-
test "setMetadata rln utils":
83-
# create an RLN instance which also includes an empty Merkle tree
84-
let rlnInstance = createRLNInstanceWrapper()
85-
require:
86-
rlnInstance.isOk()
87-
let rln = rlnInstance.get()
88-
check:
89-
rln
90-
.setMetadata(
91-
RlnMetadata(
92-
lastProcessedBlock: 128,
93-
chainId: 1155511'u256,
94-
contractAddress: "0x9c09146844c1326c2dbc41c451766c7138f88155",
95-
)
96-
)
97-
.isOk()
98-
99-
test "getMetadata rln utils":
100-
# create an RLN instance which also includes an empty Merkle tree
101-
let rlnInstance = createRLNInstanceWrapper()
102-
require:
103-
rlnInstance.isOk()
104-
let rln = rlnInstance.get()
105-
106-
require:
107-
rln
108-
.setMetadata(
109-
RlnMetadata(
110-
lastProcessedBlock: 128,
111-
chainId: 1155511'u256,
112-
contractAddress: "0x9c09146844c1326c2dbc41c451766c7138f88155",
113-
)
114-
)
115-
.isOk()
116-
117-
let metadataOpt = rln.getMetadata().valueOr:
118-
raiseAssert $error
119-
120-
assert metadataOpt.isSome(), "metadata is not set"
121-
let metadata = metadataOpt.get()
122-
check:
123-
metadata.lastProcessedBlock == 128
124-
metadata.chainId == 1155511'u256
125-
metadata.contractAddress == "0x9c09146844c1326c2dbc41c451766c7138f88155"
126-
127-
test "getMetadata: empty rln metadata":
128-
# create an RLN instance which also includes an empty Merkle tree
129-
let rln = createRLNInstanceWrapper().valueOr:
130-
raiseAssert $error
131-
let metadata = rln.getMetadata().valueOr:
132-
raiseAssert $error
133-
134-
check:
135-
metadata.isNone()
136-
13773
test "hash Nim Wrappers":
13874
# create an RLN instance
13975
let rlnInstance = createRLNInstanceWrapper()
@@ -149,7 +85,7 @@ suite "Waku rln relay":
14985
# prepare other inputs to the hash function
15086
let outputBuffer = default(Buffer)
15187

152-
let hashSuccess = sha256(unsafeAddr hashInputBuffer, unsafeAddr outputBuffer)
88+
let hashSuccess = sha256(unsafeAddr hashInputBuffer, unsafeAddr outputBuffer, true)
15389
require:
15490
hashSuccess
15591
let outputArr = cast[ptr array[32, byte]](outputBuffer.`ptr`)[]
@@ -348,7 +284,7 @@ suite "Waku rln relay":
348284
raiseAssert $error
349285

350286
let manager = cast[OnchainGroupManager](wakuRlnRelay.groupManager)
351-
let idCredentials = generateCredentials(manager.rlnInstance)
287+
let idCredentials = generateCredentials()
352288

353289
try:
354290
waitFor manager.register(idCredentials, UserMessageLimit(20))
@@ -405,7 +341,7 @@ suite "Waku rln relay":
405341
raiseAssert $error
406342

407343
let manager = cast[OnchainGroupManager](wakuRlnRelay.groupManager)
408-
let idCredentials = generateCredentials(manager.rlnInstance)
344+
let idCredentials = generateCredentials()
409345

410346
try:
411347
waitFor manager.register(idCredentials, UserMessageLimit(20))
@@ -455,7 +391,7 @@ suite "Waku rln relay":
455391
raiseAssert "failed to create waku rln relay: " & $error
456392

457393
let manager1 = cast[OnchainGroupManager](wakuRlnRelay1.groupManager)
458-
let idCredentials1 = generateCredentials(manager1.rlnInstance)
394+
let idCredentials1 = generateCredentials()
459395

460396
try:
461397
waitFor manager1.register(idCredentials1, UserMessageLimit(20))
@@ -469,7 +405,7 @@ suite "Waku rln relay":
469405
raiseAssert "failed to create waku rln relay: " & $error
470406

471407
let manager2 = cast[OnchainGroupManager](wakuRlnRelay2.groupManager)
472-
let idCredentials2 = generateCredentials(manager2.rlnInstance)
408+
let idCredentials2 = generateCredentials()
473409

474410
try:
475411
waitFor manager2.register(idCredentials2, UserMessageLimit(20))
@@ -502,15 +438,7 @@ suite "Waku rln relay":
502438
msgValidate2 == MessageValidationResult.Valid
503439

504440
test "toIDCommitment and toUInt256":
505-
# create an instance of rln
506-
let rlnInstance = createRLNInstanceWrapper()
507-
require:
508-
rlnInstance.isOk()
509-
510-
let rln = rlnInstance.get()
511-
512-
# create an idendity credential
513-
let idCredentialRes = rln.membershipKeyGen()
441+
let idCredentialRes = membershipKeyGen()
514442
require:
515443
idCredentialRes.isOk()
516444

@@ -526,12 +454,7 @@ suite "Waku rln relay":
526454
idCredential.idCommitment == idCommitment
527455

528456
test "Read/Write RLN credentials":
529-
# create an RLN instance
530-
let rlnInstance = createRLNInstanceWrapper()
531-
require:
532-
rlnInstance.isOk()
533-
534-
let idCredentialRes = membershipKeyGen(rlnInstance.get())
457+
let idCredentialRes = membershipKeyGen()
535458
require:
536459
idCredentialRes.isOk()
537460

0 commit comments

Comments
 (0)