nwaku/tests/waku_rln_relay/test_rln_serde.nim

69 lines
2.0 KiB
Nim
Raw Permalink Normal View History

{.used.}
{.push raises: [].}
import stew/results, stint
import
./rln/waku_rln_relay_utils,
waku/[
waku_keystore/protocol_types,
waku_rln_relay,
waku_rln_relay/rln,
waku_rln_relay/protocol_types,
],
../waku_keystore/utils,
testutils/unittests
from std/times import epochTime
func defaultRateCommitment*(): RateCommitment =
let idCredential = defaultIdentityCredential()
return RateCommitment(idCommitment: idCredential.idCommitment, userMessageLimit: 100)
suite "RLN Relay v2: serde":
test "toLeaf: converts a rateCommitment to a valid leaf":
# this test vector is from zerokit
let rateCommitment = defaultRateCommitment()
let leafRes = toLeaf(rateCommitment)
assert leafRes.isOk(), $leafRes.error
let expectedLeaf =
"09beac7784abfadc9958b3176b352389d0b969ccc7f8bccf3e968ed632e26eca"
check expectedLeaf == leafRes.value.inHex()
test "proofGen: generates a valid zk proof":
# this test vector is from zerokit
let rlnInstance = createRLNInstanceWrapper()
assert rlnInstance.isOk, $rlnInstance.error
let rln = rlnInstance.value
let credential = defaultIdentityCredential()
let rateCommitment = defaultRateCommitment()
let success = rln.insertMember(@(rateCommitment.toLeaf().value))
let merkleRootRes = rln.getMerkleRoot()
assert merkleRootRes.isOk, $merkleRootRes.error
let merkleRoot = merkleRootRes.value
assert success, "failed to insert member"
let proofRes = rln.proofGen(
data = @[],
membership = credential,
userMessageLimit = rateCommitment.userMessageLimit,
messageId = 0,
index = 0,
epoch = uint64(epochTime() / 1.float64).toEpoch(),
)
assert proofRes.isOk, $proofRes.error
let proof = proofRes.value
let proofVerifyRes =
rln.proofVerify(data = @[], proof = proof, validRoots = @[merkleRoot])
assert proofVerifyRes.isOk, $proofVerifyRes.error
assert proofVerifyRes.value, "proof verification failed"