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}