arnaucube
arnaucube/sonobe-playgroundPublic Self-hosted repository
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(|| {
41        verify_folding(
42            &folding,
43            folding_vp,
44            config.start_ivc_state,
45            config.num_inputs,
46        )
47    });
48}
49
50fn main() {
51    init_logging();
52
53    let mut rng = rand::rngs::OsRng;
54    let config = ScenarioConfig::new();
55
56    scenario::<NovaFolding>(config.clone(), &mut rng, "Nova");
57
58    scenario::<HyperNovaFolding<1, 1>>(config.clone(), &mut rng, "HyperNova<1,1>");
59    scenario::<HyperNovaFolding<1, 2>>(config.clone(), &mut rng, "HyperNova<1,2>");
60    scenario::<HyperNovaFolding<1, 3>>(config.clone(), &mut rng, "HyperNova<1,3>");
61    scenario::<HyperNovaFolding<1, 4>>(config.clone(), &mut rng, "HyperNova<1,4>");
62    scenario::<HyperNovaFolding<1, 5>>(config.clone(), &mut rng, "HyperNova<1,5>");
63    scenario::<HyperNovaFolding<1, 6>>(config.clone(), &mut rng, "HyperNova<1,6>");
64
65    scenario::<HyperNovaFolding<2, 1>>(config.clone(), &mut rng, "HyperNova<2,1>");
66    scenario::<HyperNovaFolding<2, 2>>(config.clone(), &mut rng, "HyperNova<2,2>");
67    scenario::<HyperNovaFolding<2, 3>>(config.clone(), &mut rng, "HyperNova<2,3>");
68    scenario::<HyperNovaFolding<2, 4>>(config.clone(), &mut rng, "HyperNova<2,4>");
69    scenario::<HyperNovaFolding<2, 5>>(config.clone(), &mut rng, "HyperNova<2,5>");
70
71    scenario::<HyperNovaFolding<3, 1>>(config.clone(), &mut rng, "HyperNova<3,1>");
72    scenario::<HyperNovaFolding<3, 2>>(config.clone(), &mut rng, "HyperNova<3,2>");
73    scenario::<HyperNovaFolding<3, 3>>(config.clone(), &mut rng, "HyperNova<3,3>");
74    scenario::<HyperNovaFolding<3, 4>>(config.clone(), &mut rng, "HyperNova<3,4>");
75    scenario::<HyperNovaFolding<3, 6>>(config.clone(), &mut rng, "HyperNova<3,6>");
76
77    scenario::<HyperNovaFolding<4, 1>>(config.clone(), &mut rng, "HyperNova<4,1>");
78    scenario::<HyperNovaFolding<4, 2>>(config.clone(), &mut rng, "HyperNova<4,2>");
79    scenario::<HyperNovaFolding<4, 3>>(config.clone(), &mut rng, "HyperNova<4,3>");
80    scenario::<HyperNovaFolding<4, 5>>(config.clone(), &mut rng, "HyperNova<4,5>");
81    scenario::<HyperNovaFolding<4, 6>>(config.clone(), &mut rng, "HyperNova<4,6>");
82
83    scenario::<HyperNovaFolding<5, 1>>(config.clone(), &mut rng, "HyperNova<5,1>");
84    scenario::<HyperNovaFolding<5, 2>>(config.clone(), &mut rng, "HyperNova<5,2>");
85    scenario::<HyperNovaFolding<5, 4>>(config.clone(), &mut rng, "HyperNova<5,4>");
86    scenario::<HyperNovaFolding<5, 5>>(config.clone(), &mut rng, "HyperNova<5,5>");
87    scenario::<HyperNovaFolding<5, 6>>(config.clone(), &mut rng, "HyperNova<5,6>");
88
89    scenario::<HyperNovaFolding<6, 1>>(config.clone(), &mut rng, "HyperNova<6,1>");
90    scenario::<HyperNovaFolding<6, 3>>(config.clone(), &mut rng, "HyperNova<6,3>");
91    scenario::<HyperNovaFolding<6, 4>>(config.clone(), &mut rng, "HyperNova<6,4>");
92    scenario::<HyperNovaFolding<6, 5>>(config.clone(), &mut rng, "HyperNova<6,5>");
93}