arnaucube
arnaucube/sonobePublic Self-hosted repository
sonobe/examples/utils.rs
examples/utils.rsRaw
 1#![allow(non_snake_case)]
 2#![allow(non_upper_case_globals)]
 3#![allow(non_camel_case_types)]
 4#![allow(clippy::upper_case_acronyms)]
 5#![allow(dead_code)]
 6use ark_pallas::{constraints::GVar, Fr, Projective};
 7use ark_vesta::{constraints::GVar as GVar2, Projective as Projective2};
 8
 9use folding_schemes::commitment::{pedersen::Pedersen, CommitmentScheme};
10use folding_schemes::folding::nova::{get_r1cs, ProverParams, VerifierParams};
11use folding_schemes::frontend::FCircuit;
12use folding_schemes::transcript::poseidon::poseidon_test_config;
13
14// This method computes the Nova's Prover & Verifier parameters for the example.
15// Warning: this method is only for testing purposes. For a real world use case those parameters
16// should be generated carefully (both the PoseidonConfig and the PedersenParams).
17#[allow(clippy::type_complexity)]
18pub(crate) fn test_nova_setup<FC: FCircuit<Fr>>(
19    F_circuit: FC,
20) -> (
21    ProverParams<Projective, Projective2, Pedersen<Projective>, Pedersen<Projective2>>,
22    VerifierParams<Projective, Projective2>,
23) {
24    let mut rng = ark_std::test_rng();
25    let poseidon_config = poseidon_test_config::<Fr>();
26
27    // get the CM & CF_CM len
28    let (r1cs, cf_r1cs) =
29        get_r1cs::<Projective, GVar, Projective2, GVar2, FC>(&poseidon_config, F_circuit).unwrap();
30    let cf_len = r1cs.A.n_rows;
31    let cf_cf_len = cf_r1cs.A.n_rows;
32
33    let (pedersen_params, _) = Pedersen::<Projective>::setup(&mut rng, cf_len).unwrap();
34    let (cf_pedersen_params, _) = Pedersen::<Projective2>::setup(&mut rng, cf_cf_len).unwrap();
35
36    let prover_params =
37        ProverParams::<Projective, Projective2, Pedersen<Projective>, Pedersen<Projective2>> {
38            poseidon_config: poseidon_config.clone(),
39            cs_params: pedersen_params,
40            cf_cs_params: cf_pedersen_params,
41        };
42    let verifier_params = VerifierParams::<Projective, Projective2> {
43        poseidon_config: poseidon_config.clone(),
44        r1cs,
45        cf_r1cs,
46    };
47    (prover_params, verifier_params)
48}
49fn main() {}