mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-08 15:01:30 +01:00
add hash of public params for Nova & HyperNova (#118)
- implement hash of public params for Nova & HyperNova - abstract pp_hash computation for folding schemes - add pp_hash to solidity contract generator to verify the decider proof
This commit is contained in:
@@ -82,13 +82,13 @@ fn main() {
|
||||
|
||||
// prepare the Nova prover & verifier params
|
||||
let nova_preprocess_params = PreprocessorParam::new(poseidon_config, f_circuit.clone());
|
||||
let (fs_pp, fs_vp) = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
let nova_params = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
|
||||
// initialize the folding scheme engine, in our case we use Nova
|
||||
let mut nova = N::init(&fs_pp, f_circuit.clone(), z_0).unwrap();
|
||||
let mut nova = N::init(nova_params.clone(), f_circuit.clone(), z_0).unwrap();
|
||||
|
||||
// prepare the Decider prover & verifier params
|
||||
let (decider_pp, decider_vp) = D::preprocess(&mut rng, &(fs_pp, fs_vp), nova.clone()).unwrap();
|
||||
let (decider_pp, decider_vp) = D::preprocess(&mut rng, &nova_params, nova.clone()).unwrap();
|
||||
|
||||
// run n steps of the folding iteration
|
||||
for (i, external_inputs_at_step) in external_inputs.iter().enumerate() {
|
||||
|
||||
@@ -187,10 +187,11 @@ fn main() {
|
||||
|
||||
println!("Prepare Nova's ProverParams & VerifierParams");
|
||||
let nova_preprocess_params = PreprocessorParam::new(poseidon_config, F_circuit.clone());
|
||||
let (nova_pp, nova_vp) = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
let nova_params = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
|
||||
println!("Initialize FoldingScheme");
|
||||
let mut folding_scheme = N::init(&nova_pp, F_circuit, initial_state.clone()).unwrap();
|
||||
let mut folding_scheme =
|
||||
N::init(nova_params.clone(), F_circuit, initial_state.clone()).unwrap();
|
||||
|
||||
// compute a step of the IVC
|
||||
for (i, external_inputs_at_step) in external_inputs.iter().enumerate() {
|
||||
@@ -210,7 +211,7 @@ fn main() {
|
||||
|
||||
println!("Run the Nova's IVC verifier");
|
||||
N::verify(
|
||||
nova_vp,
|
||||
nova_params.1,
|
||||
initial_state.clone(),
|
||||
folding_scheme.state(), // latest state
|
||||
Fr::from(num_steps as u32),
|
||||
|
||||
@@ -99,13 +99,13 @@ fn main() {
|
||||
|
||||
// prepare the Nova prover & verifier params
|
||||
let nova_preprocess_params = PreprocessorParam::new(poseidon_config.clone(), f_circuit);
|
||||
let (fs_pp, fs_vp) = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
let nova_params = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
|
||||
// initialize the folding scheme engine, in our case we use Nova
|
||||
let mut nova = N::init(&fs_pp, f_circuit, z_0).unwrap();
|
||||
let mut nova = N::init(nova_params.clone(), f_circuit, z_0).unwrap();
|
||||
|
||||
// prepare the Decider prover & verifier params
|
||||
let (decider_pp, decider_vp) = D::preprocess(&mut rng, &(fs_pp, fs_vp), nova.clone()).unwrap();
|
||||
let (decider_pp, decider_vp) = D::preprocess(&mut rng, &nova_params, nova.clone()).unwrap();
|
||||
|
||||
// run n steps of the folding iteration
|
||||
for i in 0..n_steps {
|
||||
|
||||
@@ -141,10 +141,11 @@ fn main() {
|
||||
|
||||
println!("Prepare Nova ProverParams & VerifierParams");
|
||||
let nova_preprocess_params = PreprocessorParam::new(poseidon_config, F_circuit);
|
||||
let (nova_pp, nova_vp) = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
let nova_params = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
|
||||
println!("Initialize FoldingScheme");
|
||||
let mut folding_scheme = N::init(&nova_pp, F_circuit, initial_state.clone()).unwrap();
|
||||
let mut folding_scheme =
|
||||
N::init(nova_params.clone(), F_circuit, initial_state.clone()).unwrap();
|
||||
|
||||
// compute a step of the IVC
|
||||
for i in 0..num_steps {
|
||||
@@ -157,7 +158,7 @@ fn main() {
|
||||
|
||||
println!("Run the Nova's IVC verifier");
|
||||
N::verify(
|
||||
nova_vp,
|
||||
nova_params.1,
|
||||
initial_state.clone(),
|
||||
folding_scheme.state(), // latest state
|
||||
Fr::from(num_steps as u32),
|
||||
|
||||
@@ -126,10 +126,11 @@ fn main() {
|
||||
|
||||
println!("Prepare Nova ProverParams & VerifierParams");
|
||||
let nova_preprocess_params = PreprocessorParam::new(poseidon_config, F_circuit);
|
||||
let (nova_pp, nova_vp) = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
let nova_params = N::preprocess(&mut rng, &nova_preprocess_params).unwrap();
|
||||
|
||||
println!("Initialize FoldingScheme");
|
||||
let mut folding_scheme = N::init(&nova_pp, F_circuit, initial_state.clone()).unwrap();
|
||||
let mut folding_scheme =
|
||||
N::init(nova_params.clone(), F_circuit, initial_state.clone()).unwrap();
|
||||
// compute a step of the IVC
|
||||
for i in 0..num_steps {
|
||||
let start = Instant::now();
|
||||
@@ -141,7 +142,7 @@ fn main() {
|
||||
|
||||
println!("Run the Nova's IVC verifier");
|
||||
N::verify(
|
||||
nova_vp,
|
||||
nova_params.1,
|
||||
initial_state,
|
||||
folding_scheme.state(), // latest state
|
||||
Fr::from(num_steps as u32),
|
||||
|
||||
Reference in New Issue
Block a user