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::{
 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}