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 let input = info_span!("Transform input")
29 .in_scope(|| folding.transform_inputs(config.input().to_vec(), start_state, &mut *rng));
30
31 // ============== FOLDING ======================================================================
32
33 for (i, step_input) in input.into_iter().enumerate() {
34 info_span!("Folding step", step = i).in_scope(|| {
35 folding
36 .prove_step(
37 &mut *rng,
38 step_input.external_inputs,
39 step_input.other_instances,
40 )
41 .expect("Failed to prove step")
42 });
43 }
44
45 // ============== FOLDING VERIFICATION =========================================================
46
47 info_span!("Folding verification").in_scope(|| {
48 verify_folding(
49 &folding,
50 folding_vp,
51 config.start_ivc_state,
52 config.num_inputs,
53 )
54 });
55}
56
57fn main() {
58 init_logging();
59
60 let mut rng = rand::rngs::OsRng;
61 let config = ScenarioConfig::new();
62
63 scenario::<NovaFolding>(config.clone(), &mut rng, "Nova");
64 scenario::<HyperNovaFolding<1, 1>>(config.clone(), &mut rng, "HyperNova<1,1>");
65 scenario::<HyperNovaFolding<2, 2>>(config.clone(), &mut rng, "HyperNova<2,2>");
66 scenario::<HyperNovaFolding<6, 1>>(config.clone(), &mut rng, "HyperNova<6,1>");
67 scenario::<HyperNovaFolding<1, 6>>(config.clone(), &mut rng, "HyperNova<1,6>");
68}