|
|
@ -1,7 +1,6 @@ |
|
|
|
use std::time::Instant;
|
|
|
|
|
|
|
|
use scenario_config::ScenarioConfig;
|
|
|
|
use sonobe::FoldingScheme;
|
|
|
|
|
|
|
|
use crate::folding::{
|
|
|
|
prepare_folding, verify_folding, FoldingSchemeExt, HyperNovaFolding, NovaFolding,
|
|
|
@ -19,35 +18,42 @@ mod folding; |
|
|
|
mod input;
|
|
|
|
mod scenario_config;
|
|
|
|
|
|
|
|
fn scenario<FS: FoldingSchemeExt>() {
|
|
|
|
let mut rng = rand::rngs::OsRng;
|
|
|
|
let config = ScenarioConfig::new();
|
|
|
|
fn scenario<FS: FoldingSchemeExt>(config: ScenarioConfig, rng: &mut impl rand::RngCore) {
|
|
|
|
|
|
|
|
// ============== FOLDING PREPARATION ==========================================================
|
|
|
|
|
|
|
|
let (mut folding, folding_vp) = measure("Prepare folding", || {
|
|
|
|
prepare_folding::<FS>(&config.circuit, config.start_ivc_state.clone(), &mut rng)
|
|
|
|
prepare_folding::<FS>(&config.circuit, config.start_ivc_state.clone(), rng)
|
|
|
|
});
|
|
|
|
|
|
|
|
// ============== FOLDING ======================================================================
|
|
|
|
|
|
|
|
for (i, external_inputs_at_step) in config.input().iter().enumerate() {
|
|
|
|
measure(&format!("Prove_step {i}"), || {
|
|
|
|
folding
|
|
|
|
.prove_step(rng, external_inputs_at_step.clone(), None)
|
|
|
|
.prove_step(&mut *rng, external_inputs_at_step.clone(), None)
|
|
|
|
.expect("Failed to prove step")
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// measure("Folding verification", || {
|
|
|
|
// verify_folding(
|
|
|
|
// &folding,
|
|
|
|
// folding_vp,
|
|
|
|
// config.start_ivc_state,
|
|
|
|
// config.num_steps as u32,
|
|
|
|
// )
|
|
|
|
// });
|
|
|
|
// ============== FOLDING VERIFICATION =========================================================
|
|
|
|
|
|
|
|
measure("Folding verification", || {
|
|
|
|
verify_folding(
|
|
|
|
&folding,
|
|
|
|
folding_vp,
|
|
|
|
config.start_ivc_state,
|
|
|
|
config.num_steps as u32,
|
|
|
|
)
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut rng = rand::rngs::OsRng;
|
|
|
|
let config = ScenarioConfig::new();
|
|
|
|
|
|
|
|
println!("========== Nova folding scheme ==========");
|
|
|
|
scenario::<NovaFolding>();
|
|
|
|
scenario::<NovaFolding>(config.clone(), &mut rng);
|
|
|
|
println!("========== HyperNova folding scheme ==========");
|
|
|
|
scenario::<HyperNovaFolding>();
|
|
|
|
scenario::<HyperNovaFolding>(config, &mut rng);
|
|
|
|
}
|