From 54747fa25f3517a82827be9c95961c61dde7fc5a Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 25 Jul 2023 11:19:55 -0400 Subject: [PATCH 1/4] fix: save break points when generating agg circuit for first time --- snark-verifier-sdk/examples/standard_plonk.rs | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/snark-verifier-sdk/examples/standard_plonk.rs b/snark-verifier-sdk/examples/standard_plonk.rs index 35bb573b..83936b9d 100644 --- a/snark-verifier-sdk/examples/standard_plonk.rs +++ b/snark-verifier-sdk/examples/standard_plonk.rs @@ -17,6 +17,8 @@ use snark_verifier_sdk::{ Snark, }; use snark_verifier_sdk::{CircuitExt, SHPLONK}; +use std::fs::File; +use std::io::{BufReader, BufWriter}; use std::path::Path; mod application { @@ -149,11 +151,30 @@ fn gen_application_snark(params: &ParamsKZG, flag: ComputeFlag) -> Snark gen_snark_shplonk(params, &pk, circuit, None::<&str>) } +fn gen_agg_break_points(agg_circuit: AggregationCircuit, path: &Path) -> Vec> { + let file = File::open(path); + let break_points = match file { + Ok(file) => { + let reader = BufReader::new(file); + let break_points: Vec> = serde_json::from_reader(reader).unwrap(); + break_points + } + Err(_) => { + let break_points = agg_circuit.break_points(); + let file = File::create(path).unwrap(); + let writer = BufWriter::new(file); + serde_json::to_writer(writer, &break_points).unwrap(); + break_points + }, + }; + break_points +} + fn main() { let params_app = gen_srs(8); let dummy_snark = gen_application_snark(¶ms_app, ComputeFlag::All); - let k = 22u32; + let k = 14u32; let params = gen_srs(k); let lookup_bits = k as usize - 1; BASE_CONFIG_PARAMS.with(|config| { @@ -173,7 +194,7 @@ fn main() { let start0 = start_timer!(|| "gen vk & pk"); let pk = gen_pk(¶ms, &agg_circuit, Some(Path::new("./examples/agg.pk"))); end_timer!(start0); - let break_points = agg_circuit.break_points(); + let break_points = gen_agg_break_points(agg_circuit, Path::new("./examples/break_points.json")); let snarks = [ComputeFlag::All, ComputeFlag::SkipFixed, ComputeFlag::SkipCopy] .map(|flag| gen_application_snark(¶ms_app, flag)); From 43144e20f34cd0141c3d94f3aa418ae8499b3801 Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 25 Jul 2023 11:27:44 -0400 Subject: [PATCH 2/4] chore: add circuit files to gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 829691c6..ec2971fb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ /target testdata +Cargo.lock +params +agg.pk +break_points.json \ No newline at end of file From 17af174ed977e94ff0d33d15e9b43e424bda772c Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 25 Jul 2023 16:43:57 -0400 Subject: [PATCH 3/4] feat: halo2-lib universal verifier example --- snark-verifier-sdk/examples/halo2_lib.rs | 107 ++++++++++++++++++ .../examples/halo2_lib_snarks/halo2_lib.snark | Bin 0 -> 4067 bytes .../examples/halo2_lib_snarks/poseidon.snark | Bin 0 -> 4067 bytes .../examples/halo2_lib_snarks/range.snark | Bin 0 -> 4067 bytes 4 files changed, 107 insertions(+) create mode 100644 snark-verifier-sdk/examples/halo2_lib.rs create mode 100644 snark-verifier-sdk/examples/halo2_lib_snarks/halo2_lib.snark create mode 100644 snark-verifier-sdk/examples/halo2_lib_snarks/poseidon.snark create mode 100644 snark-verifier-sdk/examples/halo2_lib_snarks/range.snark diff --git a/snark-verifier-sdk/examples/halo2_lib.rs b/snark-verifier-sdk/examples/halo2_lib.rs new file mode 100644 index 00000000..0b3971cd --- /dev/null +++ b/snark-verifier-sdk/examples/halo2_lib.rs @@ -0,0 +1,107 @@ +use ark_std::{end_timer, start_timer}; +use halo2_base::gates::builder::{set_lookup_bits, CircuitBuilderStage, BASE_CONFIG_PARAMS}; +use halo2_base::halo2_proofs; +use halo2_base::halo2_proofs::arithmetic::Field; +use halo2_base::halo2_proofs::halo2curves::bn256::Fr; +use halo2_base::halo2_proofs::poly::commitment::Params; +use halo2_base::utils::fs::gen_srs; +use halo2_proofs::halo2curves as halo2_curves; +use halo2_proofs::plonk::Circuit; +use halo2_proofs::{halo2curves::bn256::Bn256, poly::kzg::commitment::ParamsKZG}; +use rand::rngs::OsRng; +use snark_verifier_sdk::halo2::read_snark; +use snark_verifier_sdk::{ + evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}, + gen_pk, + halo2::{aggregation::AggregationCircuit, gen_snark_shplonk}, + Snark, +}; +use snark_verifier_sdk::{CircuitExt, SHPLONK}; +use std::fs::File; +use std::io::{BufReader, BufWriter}; +use std::path::Path; + +fn read_snark_from_file(file_name: &str) -> Snark { + let snark_path = Path::new(file_name); + let snark = read_snark(snark_path).unwrap_or_else(|e| panic!("Snark not found at {snark_path:?}. {e:?}")); + snark +} + +fn gen_agg_break_points(agg_circuit: AggregationCircuit, path: &Path) -> Vec> { + let file = File::open(path); + let break_points = match file { + Ok(file) => { + let reader = BufReader::new(file); + let break_points: Vec> = serde_json::from_reader(reader).unwrap(); + break_points + } + Err(_) => { + let break_points = agg_circuit.break_points(); + let file = File::create(path).unwrap(); + let writer = BufWriter::new(file); + serde_json::to_writer(writer, &break_points).unwrap(); + break_points + }, + }; + break_points +} + +fn main() { + let dummy_snark = read_snark_from_file("./examples/halo2_lib_snarks/range.snark"); + + let k = 14u32; + let params = gen_srs(k); + let lookup_bits = k as usize - 1; + BASE_CONFIG_PARAMS.with(|config| { + config.borrow_mut().lookup_bits = Some(lookup_bits); + config.borrow_mut().k = k as usize; + }); + let agg_circuit = AggregationCircuit::new::( + CircuitBuilderStage::Keygen, + None, + lookup_bits, + ¶ms, + vec![dummy_snark.clone()], + true, + ); + agg_circuit.config(k, Some(10)); + + let start0 = start_timer!(|| "gen vk & pk"); + let pk = gen_pk(¶ms, &agg_circuit, Some(Path::new("./examples/agg.pk"))); + end_timer!(start0); + let break_points = gen_agg_break_points(agg_circuit, Path::new("./examples/break_points.json")); + + let snarks = ["./examples/halo2_lib_snarks/range.snark", "./examples/halo2_lib_snarks/halo2_lib.snark", "./examples/halo2_lib_snarks/poseidon.snark"] + .map(|file| read_snark_from_file(file)); + // let snarks = [dummy_snark]; + for (i, snark) in snarks.into_iter().enumerate() { + let agg_circuit = AggregationCircuit::new::( + CircuitBuilderStage::Prover, + Some(break_points.clone()), + lookup_bits, + ¶ms, + vec![snark], + true, + ); + let _snark = gen_snark_shplonk(¶ms, &pk, agg_circuit, None::<&str>); + println!("snark {i} success"); + } + + /* + #[cfg(feature = "loader_evm")] + { + // do one more time to verify + let num_instances = agg_circuit.num_instance(); + let instances = agg_circuit.instances(); + let proof_calldata = gen_evm_proof_shplonk(¶ms, &pk, agg_circuit, instances.clone()); + + let deployment_code = gen_evm_verifier_shplonk::>( + ¶ms, + pk.get_vk(), + num_instances, + Some(Path::new("./examples/standard_plonk.yul")), + ); + evm_verify(deployment_code, instances, proof_calldata); + } + */ +} diff --git a/snark-verifier-sdk/examples/halo2_lib_snarks/halo2_lib.snark b/snark-verifier-sdk/examples/halo2_lib_snarks/halo2_lib.snark new file mode 100644 index 0000000000000000000000000000000000000000..9a3a4e01ca65915966a9724e28a95c791c39cbba GIT binary patch literal 4067 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 literal 0 HcmV?d00001 From 2fc8774df6b411d7457fe4a8171a9b47d7b17186 Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 25 Jul 2023 21:21:49 -0400 Subject: [PATCH 4/4] chore: cargo fix --- snark-verifier-sdk/examples/halo2_lib.rs | 57 +++++++++---------- snark-verifier-sdk/examples/standard_plonk.rs | 42 +++++++------- snark-verifier-sdk/src/halo2/aggregation.rs | 2 +- 3 files changed, 48 insertions(+), 53 deletions(-) diff --git a/snark-verifier-sdk/examples/halo2_lib.rs b/snark-verifier-sdk/examples/halo2_lib.rs index 0b3971cd..278a3cd2 100644 --- a/snark-verifier-sdk/examples/halo2_lib.rs +++ b/snark-verifier-sdk/examples/halo2_lib.rs @@ -1,49 +1,42 @@ use ark_std::{end_timer, start_timer}; -use halo2_base::gates::builder::{set_lookup_bits, CircuitBuilderStage, BASE_CONFIG_PARAMS}; -use halo2_base::halo2_proofs; -use halo2_base::halo2_proofs::arithmetic::Field; -use halo2_base::halo2_proofs::halo2curves::bn256::Fr; -use halo2_base::halo2_proofs::poly::commitment::Params; +use halo2_base::gates::builder::{CircuitBuilderStage, BASE_CONFIG_PARAMS}; use halo2_base::utils::fs::gen_srs; -use halo2_proofs::halo2curves as halo2_curves; -use halo2_proofs::plonk::Circuit; -use halo2_proofs::{halo2curves::bn256::Bn256, poly::kzg::commitment::ParamsKZG}; -use rand::rngs::OsRng; + use snark_verifier_sdk::halo2::read_snark; +use snark_verifier_sdk::SHPLONK; use snark_verifier_sdk::{ - evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}, gen_pk, halo2::{aggregation::AggregationCircuit, gen_snark_shplonk}, Snark, }; -use snark_verifier_sdk::{CircuitExt, SHPLONK}; use std::fs::File; use std::io::{BufReader, BufWriter}; use std::path::Path; fn read_snark_from_file(file_name: &str) -> Snark { let snark_path = Path::new(file_name); - let snark = read_snark(snark_path).unwrap_or_else(|e| panic!("Snark not found at {snark_path:?}. {e:?}")); + let snark = read_snark(snark_path) + .unwrap_or_else(|e| panic!("Snark not found at {snark_path:?}. {e:?}")); snark } fn gen_agg_break_points(agg_circuit: AggregationCircuit, path: &Path) -> Vec> { - let file = File::open(path); - let break_points = match file { - Ok(file) => { - let reader = BufReader::new(file); - let break_points: Vec> = serde_json::from_reader(reader).unwrap(); - break_points - } - Err(_) => { - let break_points = agg_circuit.break_points(); - let file = File::create(path).unwrap(); - let writer = BufWriter::new(file); - serde_json::to_writer(writer, &break_points).unwrap(); - break_points - }, - }; - break_points + let file = File::open(path); + let break_points = match file { + Ok(file) => { + let reader = BufReader::new(file); + let break_points: Vec> = serde_json::from_reader(reader).unwrap(); + break_points + } + Err(_) => { + let break_points = agg_circuit.break_points(); + let file = File::create(path).unwrap(); + let writer = BufWriter::new(file); + serde_json::to_writer(writer, &break_points).unwrap(); + break_points + } + }; + break_points } fn main() { @@ -71,8 +64,12 @@ fn main() { end_timer!(start0); let break_points = gen_agg_break_points(agg_circuit, Path::new("./examples/break_points.json")); - let snarks = ["./examples/halo2_lib_snarks/range.snark", "./examples/halo2_lib_snarks/halo2_lib.snark", "./examples/halo2_lib_snarks/poseidon.snark"] - .map(|file| read_snark_from_file(file)); + let snarks = [ + "./examples/halo2_lib_snarks/range.snark", + "./examples/halo2_lib_snarks/halo2_lib.snark", + "./examples/halo2_lib_snarks/poseidon.snark", + ] + .map(|file| read_snark_from_file(file)); // let snarks = [dummy_snark]; for (i, snark) in snarks.into_iter().enumerate() { let agg_circuit = AggregationCircuit::new::( diff --git a/snark-verifier-sdk/examples/standard_plonk.rs b/snark-verifier-sdk/examples/standard_plonk.rs index 83936b9d..d2e58e3d 100644 --- a/snark-verifier-sdk/examples/standard_plonk.rs +++ b/snark-verifier-sdk/examples/standard_plonk.rs @@ -1,22 +1,20 @@ use application::ComputeFlag; use ark_std::{end_timer, start_timer}; -use halo2_base::gates::builder::{set_lookup_bits, CircuitBuilderStage, BASE_CONFIG_PARAMS}; +use halo2_base::gates::builder::{CircuitBuilderStage, BASE_CONFIG_PARAMS}; use halo2_base::halo2_proofs; use halo2_base::halo2_proofs::arithmetic::Field; use halo2_base::halo2_proofs::halo2curves::bn256::Fr; -use halo2_base::halo2_proofs::poly::commitment::Params; use halo2_base::utils::fs::gen_srs; use halo2_proofs::halo2curves as halo2_curves; -use halo2_proofs::plonk::Circuit; + use halo2_proofs::{halo2curves::bn256::Bn256, poly::kzg::commitment::ParamsKZG}; use rand::rngs::OsRng; +use snark_verifier_sdk::SHPLONK; use snark_verifier_sdk::{ - evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}, gen_pk, halo2::{aggregation::AggregationCircuit, gen_snark_shplonk}, Snark, }; -use snark_verifier_sdk::{CircuitExt, SHPLONK}; use std::fs::File; use std::io::{BufReader, BufWriter}; use std::path::Path; @@ -28,7 +26,7 @@ mod application { plonk::{Advice, Circuit, Column, ConstraintSystem, Error, Fixed, Instance}, poly::Rotation, }; - use rand::RngCore; + use snark_verifier_sdk::CircuitExt; #[derive(Clone, Copy)] @@ -152,22 +150,22 @@ fn gen_application_snark(params: &ParamsKZG, flag: ComputeFlag) -> Snark } fn gen_agg_break_points(agg_circuit: AggregationCircuit, path: &Path) -> Vec> { - let file = File::open(path); - let break_points = match file { - Ok(file) => { - let reader = BufReader::new(file); - let break_points: Vec> = serde_json::from_reader(reader).unwrap(); - break_points - } - Err(_) => { - let break_points = agg_circuit.break_points(); - let file = File::create(path).unwrap(); - let writer = BufWriter::new(file); - serde_json::to_writer(writer, &break_points).unwrap(); - break_points - }, - }; - break_points + let file = File::open(path); + let break_points = match file { + Ok(file) => { + let reader = BufReader::new(file); + let break_points: Vec> = serde_json::from_reader(reader).unwrap(); + break_points + } + Err(_) => { + let break_points = agg_circuit.break_points(); + let file = File::create(path).unwrap(); + let writer = BufWriter::new(file); + serde_json::to_writer(writer, &break_points).unwrap(); + break_points + } + }; + break_points } fn main() { diff --git a/snark-verifier-sdk/src/halo2/aggregation.rs b/snark-verifier-sdk/src/halo2/aggregation.rs index b6bbabf1..ae9ce7ee 100644 --- a/snark-verifier-sdk/src/halo2/aggregation.rs +++ b/snark-verifier-sdk/src/halo2/aggregation.rs @@ -300,7 +300,7 @@ impl AggregationCircuit { let ecc_chip = BaseFieldEccChip::new(&fp_chip); let loader = Halo2Loader::new(ecc_chip, builder); - let SnarkAggregationWitness { previous_instances, accumulator, preprocessed_digest } = + let SnarkAggregationWitness { previous_instances, accumulator, preprocessed_digest: _ } = aggregate::(&svk, &loader, &snarks, as_proof.as_slice(), preprocessed_as_witness); let lhs = accumulator.lhs.assigned(); let rhs = accumulator.rhs.assigned();