sonobe-playground/src/main.rs
src/main.rsRaw
1use std::time::Instant;
2
3use scenario_config::ScenarioConfig;
4use tracing::info;
5
6use crate::{
7 folding::{prepare_folding, verify_folding, FoldingSchemeExt, HyperNovaFolding, NovaFolding},
8 logging::init_logging,
9};
10
11mod circuit;
12mod logging;
13
14mod folding;
15mod input;
16mod scenario_config;
17
18fn measure<T, Action: FnOnce() -> T>(action_name: &str, action: Action) -> T {
19 let start = Instant::now();
20 let result = action();
21 info!("{action_name}: {:?}", start.elapsed());
22 result
23}
24
25fn scenario<FS: FoldingSchemeExt>(config: ScenarioConfig, rng: &mut impl rand::RngCore) {
26 // ============== FOLDING PREPARATION ==========================================================
27
28 let start_state = config.start_ivc_state.clone();
29 let (mut folding, folding_vp) = measure("Prepare folding", || {
30 prepare_folding::<FS>(&config.circuit, start_state.clone(), rng)
31 });
32
33 // ============== FOLDING ======================================================================
34
35 let input = measure("Transform input", || {
36 folding.transform_inputs(config.input().to_vec(), start_state.clone(), &mut *rng)
37 });
38 for (i, step_input) in input.into_iter().enumerate() {
39 measure(&format!("Prove_step {i}"), || {
40 folding
41 .prove_step(
42 &mut *rng,
43 step_input.external_inputs,
44 step_input.other_instances,
45 )
46 .expect("Failed to prove step")
47 });
48 }
49
50 // ============== FOLDING VERIFICATION =========================================================
51
52 measure("Folding verification", || {
53 verify_folding(
54 &folding,
55 folding_vp,
56 config.start_ivc_state,
57 config.num_inputs,
58 )
59 });
60}
61
62fn main() {
63 init_logging();
64
65 let mut rng = rand::rngs::OsRng;
66 let config = ScenarioConfig::new();
67
68 println!("========== Nova folding scheme ====================");
69 scenario::<NovaFolding>(config.clone(), &mut rng);
70
71 println!("========== HyperNova<1,1> folding scheme ==========");
72 scenario::<HyperNovaFolding<1, 1>>(config.clone(), &mut rng);
73
74 println!("========== HyperNova<2,2> folding scheme ==========");
75 scenario::<HyperNovaFolding<2, 2>>(config, &mut rng);
76}