arnaucube
arnaucube/sonobe-playgroundPublic Self-hosted repository
sonobe-playground/src/folding.rs
src/folding.rsRaw
 1use ark_bn254::{Bn254, constraints::GVar, Fr, G1Projective as G1};
 2use ark_grumpkin::{constraints::GVar as GVar2, Projective as G2};
 3use rand::rngs::OsRng;
 4use sonobe::{
 5    commitment::{kzg::KZG, pedersen::Pedersen},
 6    folding::nova::{Nova, PreprocessorParam},
 7    FoldingScheme,
 8    frontend::circom::CircomFCircuit,
 9    transcript::poseidon::poseidon_canonical_config,
10};
11
12pub type NovaFolding =
13    Nova<G1, GVar, G2, GVar2, CircomFCircuit<Fr>, KZG<'static, Bn254>, Pedersen<G2>, false>;
14
15pub fn prepare_folding(
16    circuit: &CircomFCircuit<Fr>,
17    start_ivc_state: Vec<Fr>,
18    rng: &mut OsRng,
19) -> NovaFolding {
20    let nova_preprocess_params =
21        PreprocessorParam::new(poseidon_canonical_config::<Fr>(), circuit.clone());
22    let nova_params = NovaFolding::preprocess(&mut *rng, &nova_preprocess_params)
23        .expect("Failed to preprocess Nova");
24    NovaFolding::init(&nova_params, circuit.clone(), start_ivc_state).expect("Failed to init Nova")
25}