arnaucube
arnaucube/sonobe-playgroundPublic Self-hosted repository
sonobe-playground/src/main.rs
src/main.rsRaw
 1use std::time::Instant;
 2
 3use ark_bn254::Fr;
 4use num_traits::identities::Zero;
 5use sonobe::FoldingScheme;
 6use crate::{
 7    circuit::create_circuit,
 8    folding::{prepare_folding, verify_folding},
 9    input::prepare_input,
10};
11
12fn measure<T, Action: FnOnce() -> T>(action_name: &str, action: Action) -> T {
13    let start = Instant::now();
14    let result = action();
15    println!("{action_name}: {:?}", start.elapsed());
16    result
17}
18
19mod circuit;
20mod folding;
21mod input;
22
23fn main() {
24    let mut rng = rand::rngs::OsRng;
25
26    let circuit = measure("Prepare circuit", create_circuit);
27
28    let start_ivc_state = vec![Fr::zero(); 2];
29    let (mut folding, folding_vp) = measure("Prepare folding", || {
30        prepare_folding(&circuit, start_ivc_state.clone(), &mut rng)
31    });
32
33    let num_steps = 5;
34    for (i, external_inputs_at_step) in prepare_input()[..num_steps].iter().enumerate() {
35        measure(&format!("Nova::prove_step {i}"), || {
36            folding
37                .prove_step(rng, external_inputs_at_step.clone(), None)
38                .expect("Failed to prove step")
39        });
40    }
41
42    measure("Folding verification", || {
43        verify_folding(&folding, folding_vp, start_ivc_state, num_steps as u32)
44    });
45}