arnaucube
arnaucube/sonobe-playgroundPublic Self-hosted repository
sonobe-playground/src/main.rs
src/main.rsRaw
 1use scenario_config::ScenarioConfig;
 2
 3use crate::{
 4    folding::{prepare_folding, verify_folding, FoldingSchemeExt, HyperNovaFolding, NovaFolding},
 5    logging::init_logging,
 6};
 7use crate::logging::measure;
 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) = measure("Prepare folding", || {
26        prepare_folding::<FS>(&config.circuit, start_state.clone(), rng)
27    });
28
29    // ============== FOLDING ======================================================================
30
31    let input = measure("Transform input", || {
32        folding.transform_inputs(config.input().to_vec(), start_state.clone(), &mut *rng)
33    });
34    for (i, step_input) in input.into_iter().enumerate() {
35        measure(&format!("Prove_step {i}"), || {
36            folding
37                .prove_step(
38                    &mut *rng,
39                    step_input.external_inputs,
40                    step_input.other_instances,
41                )
42                .expect("Failed to prove step")
43        });
44    }
45
46    // ============== FOLDING VERIFICATION =========================================================
47
48    measure("Folding verification", || {
49        verify_folding(
50            &folding,
51            folding_vp,
52            config.start_ivc_state,
53            config.num_inputs,
54        )
55    });
56}
57
58fn main() {
59    init_logging();
60
61    let mut rng = rand::rngs::OsRng;
62    let config = ScenarioConfig::new();
63
64    scenario::<NovaFolding>(config.clone(), &mut rng, "Nova");
65    scenario::<HyperNovaFolding<1, 1>>(config.clone(), &mut rng, "HyperNova<1,1>");
66    scenario::<HyperNovaFolding<2, 2>>(config.clone(), &mut rng, "HyperNova<2,2>");
67}