arnaucube
arnaucube/sonobe-playgroundPublic Self-hosted repository
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}