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