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}