Update to zerokit v0.8.0 (#6)

* Update to zerokit v0.8.0
* Switch to OptimalMerkleTree implementation (was pmTree)
* Update various crates
This commit is contained in:
Sydhds
2025-06-10 10:53:26 +02:00
committed by GitHub
parent 68fbc154bd
commit d8da43e535
8 changed files with 195 additions and 413 deletions

View File

@@ -4,15 +4,15 @@ version = "0.1.0"
edition = "2024"
[dependencies]
rln = { git = "https://github.com/vacp2p/zerokit", package = "rln", features = ["default"] }
rln = { git = "https://github.com/vacp2p/zerokit", package = "rln", default-features = false }
zerokit_utils = { git = "https://github.com/vacp2p/zerokit", package = "zerokit_utils", features = ["default"] }
ark-bn254 = { version = "0.5", features = ["std"] }
ark-groth16 = "*"
ark-relations = "*"
ark-serialize = "0.5.0"
ark-bn254.workspace = true
ark-groth16.workspace = true
ark-serialize.workspace = true
ark-relations = "0.5"
[dev-dependencies]
criterion = "0.5"
criterion.workspace = true
[[bench]]
name = "generate_proof"

View File

@@ -6,8 +6,8 @@ use criterion::{Criterion, criterion_group, criterion_main};
use ark_bn254::Fr;
use ark_serialize::CanonicalSerialize;
use rln::hashers::{hash_to_field, poseidon_hash};
use rln::pm_tree_adapter::PmTree;
use rln::protocol::{keygen, serialize_proof_values};
use zerokit_utils::OptimalMerkleTree;
// internal
use rln_proof::{
RlnData, RlnIdentifier, RlnUserIdentity, ZerokitMerkleTree, compute_rln_proof_and_values,
@@ -29,7 +29,7 @@ pub fn criterion_benchmark(c: &mut Criterion) {
// Merkle tree
let tree_height = 20;
let mut tree = PmTree::new(tree_height, Fr::from(0), Default::default()).unwrap();
let mut tree = OptimalMerkleTree::new(tree_height, Fr::from(0), Default::default()).unwrap();
let rate_commit = poseidon_hash(&[rln_identity.commitment, rln_identity.user_limit]);
tree.set(0, rate_commit).unwrap();
let merkle_proof = tree.proof(0).unwrap();

View File

@@ -4,12 +4,15 @@ use std::io::Cursor;
use ark_bn254::{Bn254, Fr};
use ark_groth16::{Proof, ProvingKey};
use ark_relations::r1cs::ConstraintMatrices;
use rln::circuit::ZKEY_BYTES;
use rln::circuit::zkey::read_zkey;
use rln::hashers::{hash_to_field, poseidon_hash};
use rln::protocol::{
ProofError, RLNProofValues, generate_proof, proof_values_from_witness, rln_witness_from_values,
use rln::{
circuit::{ZKEY_BYTES, zkey::read_zkey},
error::ProofError,
hashers::{hash_to_field, poseidon_hash},
protocol::{
RLNProofValues, generate_proof, proof_values_from_witness, rln_witness_from_values,
},
};
use rln::poseidon_tree::MerkleProof;
/// A RLN user identity & limit
#[derive(Debug, Clone)]
@@ -68,7 +71,7 @@ pub fn compute_rln_proof_and_values(
rln_identifier: &RlnIdentifier,
rln_data: RlnData,
epoch: Fr,
merkle_proof: &rln::poseidon_tree::MerkleProof,
merkle_proof: &MerkleProof,
) -> Result<(Proof<Bn254>, RLNProofValues), ProofError> {
let external_nullifier = poseidon_hash(&[rln_identifier.identifier, epoch]);
@@ -94,10 +97,9 @@ pub fn compute_rln_proof_and_values(
mod tests {
use super::*;
use rln::{
pm_tree_adapter::PmTree,
protocol::{compute_id_secret, keygen},
};
use zerokit_utils::ZerokitMerkleTree;
use zerokit_utils::{OptimalMerkleTree, ZerokitMerkleTree};
#[test]
fn test_recover_secret_hash() {
@@ -105,7 +107,7 @@ mod tests {
let epoch = hash_to_field(b"foo");
let spam_limit = Fr::from(10);
let mut tree = PmTree::new(20, Default::default(), Default::default()).unwrap();
let mut tree = OptimalMerkleTree::new(20, Default::default(), Default::default()).unwrap();
tree.set(0, spam_limit).unwrap();
let m_proof = tree.proof(0).unwrap();