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;
 6
 7use crate::{circuit::create_circuit, folding::prepare_folding, input::prepare_input};
 8
 9fn measure<T, Action: FnOnce() -> T>(action_name: &str, action: Action) -> T {
10    let start = Instant::now();
11    let result = action();
12    println!("{action_name}: {:?}", start.elapsed());
13    result
14}
15
16mod circuit;
17mod folding;
18mod input;
19
20fn main() {
21    let mut rng = rand::rngs::OsRng;
22
23    let circuit = measure("Prepare circuit", create_circuit);
24
25    let start_ivc_state = vec![Fr::zero(); 2];
26    let mut folding = measure("Prepare folding", || {
27        prepare_folding(&circuit, start_ivc_state, &mut rng)
28    });
29
30    for (i, external_inputs_at_step) in prepare_input()[..5].iter().enumerate() {
31        measure(&format!("Nova::prove_step {i}"), || {
32            folding
33                .prove_step(rng, external_inputs_at_step.clone(), None)
34                .expect("Failed to prove step")
35        });
36    }
37}