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