diff --git a/src/circuit.rs b/src/circuit.rs index 86bc5c9..540af1a 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -1,7 +1,7 @@ use std::env::current_dir; + use ark_bn254::Fr; -use sonobe::frontend::circom::CircomFCircuit; -use sonobe::frontend::FCircuit; +use sonobe::frontend::{circom::CircomFCircuit, FCircuit}; const IVC_STEP_WIDTH: usize = 2; const STEP_INPUT_WIDTH: usize = 256; diff --git a/src/main.rs b/src/main.rs index 6b7b696..6f1f9b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,9 @@ use std::time::Instant; -use ark_bn254::Fr; -use num_traits::identities::Zero; +use scenario_config::ScenarioConfig; use sonobe::FoldingScheme; -use crate::{ - circuit::create_circuit, - folding::{prepare_folding, verify_folding}, - input::prepare_input, -}; + +use crate::folding::{prepare_folding, verify_folding}; fn measure T>(action_name: &str, action: Action) -> T { let start = Instant::now(); @@ -19,19 +15,17 @@ fn measure T>(action_name: &str, action: Action) -> T { mod circuit; mod folding; mod input; +mod scenario_config; fn main() { let mut rng = rand::rngs::OsRng; + let config = ScenarioConfig::new(); - let circuit = measure("Prepare circuit", create_circuit); - - let start_ivc_state = vec![Fr::zero(); 2]; let (mut folding, folding_vp) = measure("Prepare folding", || { - prepare_folding(&circuit, start_ivc_state.clone(), &mut rng) + prepare_folding(&config.circuit, config.start_ivc_state.clone(), &mut rng) }); - let num_steps = 5; - for (i, external_inputs_at_step) in prepare_input()[..num_steps].iter().enumerate() { + for (i, external_inputs_at_step) in config.input().iter().enumerate() { measure(&format!("Nova::prove_step {i}"), || { folding .prove_step(rng, external_inputs_at_step.clone(), None) @@ -40,6 +34,11 @@ fn main() { } measure("Folding verification", || { - verify_folding(&folding, folding_vp, start_ivc_state, num_steps as u32) + verify_folding( + &folding, + folding_vp, + config.start_ivc_state, + config.num_steps as u32, + ) }); } diff --git a/src/scenario_config.rs b/src/scenario_config.rs new file mode 100644 index 0000000..d700ef4 --- /dev/null +++ b/src/scenario_config.rs @@ -0,0 +1,27 @@ +use ark_bn254::Fr; +use num_traits::Zero; +use sonobe::frontend::circom::CircomFCircuit; + +use crate::{circuit::create_circuit, input::prepare_input, measure}; + +pub struct ScenarioConfig { + pub num_steps: usize, + pub start_ivc_state: Vec, + pub circuit: CircomFCircuit, + input: Vec>, +} + +impl ScenarioConfig { + pub fn new() -> Self { + Self { + num_steps: 5, + start_ivc_state: vec![Fr::zero(); 2], + circuit: measure("Prepare circuit", create_circuit), + input: measure("Prepare input", prepare_input), + } + } + + pub fn input(&self) -> &[Vec] { + &self.input[..self.num_steps] + } +}