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}