sonobe-playground/src/main.rs
src/main.rsRaw
1use scenario_config::ScenarioConfig;
2use tracing::info_span;
3
4use crate::{
5 folding::{prepare_folding, verify_folding, FoldingSchemeExt, HyperNovaFolding, NovaFolding},
6 logging::init_logging,
7};
8
9mod circuit;
10mod logging;
11
12mod folding;
13mod input;
14mod scenario_config;
15
16#[tracing::instrument(skip(config, rng))]
17fn scenario<FS: FoldingSchemeExt>(
18 config: ScenarioConfig,
19 rng: &mut impl rand::RngCore,
20 folding_scheme: &str,
21) {
22 // ============== FOLDING PREPARATION ==========================================================
23
24 let start_state = config.start_ivc_state.clone();
25 let (mut folding, folding_vp) = info_span!("Prepare folding")
26 .in_scope(|| prepare_folding::<FS>(&config.circuit, start_state.clone(), rng));
27
28 // ============== FOLDING ======================================================================
29
30 for (i, multistep_input) in config.input().chunks(FS::MULTISTEP_SIZE).enumerate() {
31 info_span!("Folding step", step = i).in_scope(|| {
32 folding
33 .prove_multistep(multistep_input.to_vec(), start_state.clone(), &mut *rng)
34 .expect("Failed to prove step")
35 });
36 }
37
38 // ============== FOLDING VERIFICATION =========================================================
39
40 info_span!("Folding verification").in_scope(|| verify_folding(&folding, folding_vp));
41}
42
43fn main() {
44 init_logging();
45
46 let mut rng = rand::rngs::OsRng;
47 let config = ScenarioConfig::new();
48
49 scenario::<NovaFolding>(config.clone(), &mut rng, "Nova");
50
51 scenario::<HyperNovaFolding<1, 1>>(config.clone(), &mut rng, "HyperNova<1,1>");
52 scenario::<HyperNovaFolding<1, 2>>(config.clone(), &mut rng, "HyperNova<1,2>");
53 scenario::<HyperNovaFolding<1, 3>>(config.clone(), &mut rng, "HyperNova<1,3>");
54 scenario::<HyperNovaFolding<1, 4>>(config.clone(), &mut rng, "HyperNova<1,4>");
55 scenario::<HyperNovaFolding<1, 5>>(config.clone(), &mut rng, "HyperNova<1,5>");
56 scenario::<HyperNovaFolding<1, 6>>(config.clone(), &mut rng, "HyperNova<1,6>");
57
58 scenario::<HyperNovaFolding<2, 1>>(config.clone(), &mut rng, "HyperNova<2,1>");
59 scenario::<HyperNovaFolding<2, 2>>(config.clone(), &mut rng, "HyperNova<2,2>");
60 scenario::<HyperNovaFolding<2, 3>>(config.clone(), &mut rng, "HyperNova<2,3>");
61 scenario::<HyperNovaFolding<2, 4>>(config.clone(), &mut rng, "HyperNova<2,4>");
62 scenario::<HyperNovaFolding<2, 5>>(config.clone(), &mut rng, "HyperNova<2,5>");
63
64 scenario::<HyperNovaFolding<3, 1>>(config.clone(), &mut rng, "HyperNova<3,1>");
65 scenario::<HyperNovaFolding<3, 2>>(config.clone(), &mut rng, "HyperNova<3,2>");
66 scenario::<HyperNovaFolding<3, 3>>(config.clone(), &mut rng, "HyperNova<3,3>");
67 scenario::<HyperNovaFolding<3, 4>>(config.clone(), &mut rng, "HyperNova<3,4>");
68 scenario::<HyperNovaFolding<3, 6>>(config.clone(), &mut rng, "HyperNova<3,6>");
69
70 scenario::<HyperNovaFolding<4, 1>>(config.clone(), &mut rng, "HyperNova<4,1>");
71 scenario::<HyperNovaFolding<4, 2>>(config.clone(), &mut rng, "HyperNova<4,2>");
72 scenario::<HyperNovaFolding<4, 3>>(config.clone(), &mut rng, "HyperNova<4,3>");
73 scenario::<HyperNovaFolding<4, 5>>(config.clone(), &mut rng, "HyperNova<4,5>");
74 scenario::<HyperNovaFolding<4, 6>>(config.clone(), &mut rng, "HyperNova<4,6>");
75
76 scenario::<HyperNovaFolding<5, 1>>(config.clone(), &mut rng, "HyperNova<5,1>");
77 scenario::<HyperNovaFolding<5, 2>>(config.clone(), &mut rng, "HyperNova<5,2>");
78 scenario::<HyperNovaFolding<5, 4>>(config.clone(), &mut rng, "HyperNova<5,4>");
79 scenario::<HyperNovaFolding<5, 5>>(config.clone(), &mut rng, "HyperNova<5,5>");
80 scenario::<HyperNovaFolding<5, 6>>(config.clone(), &mut rng, "HyperNova<5,6>");
81
82 scenario::<HyperNovaFolding<6, 1>>(config.clone(), &mut rng, "HyperNova<6,1>");
83 scenario::<HyperNovaFolding<6, 3>>(config.clone(), &mut rng, "HyperNova<6,3>");
84 scenario::<HyperNovaFolding<6, 4>>(config.clone(), &mut rng, "HyperNova<6,4>");
85 scenario::<HyperNovaFolding<6, 5>>(config.clone(), &mut rng, "HyperNova<6,5>");
86}