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