Skip to content

Commit

Permalink
cleanup: use test-utils for benching
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathanpwang committed Aug 22, 2023
1 parent 204a699 commit a22f450
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 304 deletions.
20 changes: 4 additions & 16 deletions halo2-base/benches/inner_product.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@ use halo2_base::gates::flex_gate::{GateChip, GateInstructions};
use halo2_base::halo2_proofs::{
arithmetic::Field,
dev::MockProver,
halo2curves::bn256::{Bn256, Fr, G1Affine},
halo2curves::bn256::{Bn256, Fr},
plonk::*,
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::ProverSHPLONK,
},
transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer},
poly::kzg::commitment::ParamsKZG,
};
use halo2_base::utils::testing::gen_proof;
use halo2_base::utils::ScalarField;
use halo2_base::{Context, QuantumCell::Existing};
use itertools::Itertools;
Expand Down Expand Up @@ -71,16 +68,7 @@ fn bench(c: &mut Criterion) {
break_points.clone(),
);

let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<_>>,
_,
>(params, pk, &[circuit], &[&[]], OsRng, &mut transcript)
.expect("prover should not fail");
gen_proof(params, pk, circuit);
})
},
);
Expand Down
20 changes: 4 additions & 16 deletions halo2-base/benches/mul.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
use halo2_base::gates::builder::{GateThreadBuilder, RangeCircuitBuilder};
use halo2_base::gates::flex_gate::{GateChip, GateInstructions};
use halo2_base::halo2_proofs::{
halo2curves::bn256::{Bn256, Fr, G1Affine},
halo2curves::bn256::{Bn256, Fr},
halo2curves::ff::Field,
plonk::*,
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::ProverGWC,
},
transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer},
poly::kzg::commitment::ParamsKZG,
};
use halo2_base::utils::testing::gen_proof;
use halo2_base::utils::ScalarField;
use halo2_base::Context;
use rand::rngs::OsRng;
Expand Down Expand Up @@ -62,16 +59,7 @@ fn bench(c: &mut Criterion) {
break_points.clone(),
);

let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverGWC<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<_>>,
_,
>(params, pk, &[circuit], &[&[]], OsRng, &mut transcript)
.unwrap();
gen_proof(params, pk, circuit);
})
},
);
Expand Down
36 changes: 5 additions & 31 deletions halo2-base/examples/inner_product.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,11 @@ use halo2_base::gates::flex_gate::{GateChip, GateInstructions};
use halo2_base::halo2_proofs::{
arithmetic::Field,
dev::MockProver,
halo2curves::bn256::{Bn256, Fr, G1Affine},
halo2curves::bn256::{Bn256, Fr},
plonk::*,
poly::kzg::multiopen::VerifierSHPLONK,
poly::kzg::strategy::SingleStrategy,
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::ProverSHPLONK,
},
transcript::{Blake2bRead, TranscriptReadBuffer},
transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer},
poly::kzg::commitment::ParamsKZG,
};
use halo2_base::utils::testing::{check_proof, gen_proof};
use halo2_base::utils::ScalarField;
use halo2_base::{Context, QuantumCell::Existing};
use itertools::Itertools;
Expand Down Expand Up @@ -55,26 +49,6 @@ fn main() {
inner_prod_bench(builder.main(0), a, b);
let circuit = RangeCircuitBuilder::prover(builder, config_params, break_points);

let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<_>>,
_,
>(&params, &pk, &[circuit], &[&[]], OsRng, &mut transcript)
.expect("prover should not fail");

let strategy = SingleStrategy::new(&params);
let proof = transcript.finalize();
let mut transcript = Blake2bRead::<_, _, Challenge255<_>>::init(&proof[..]);
verify_proof::<
KZGCommitmentScheme<Bn256>,
VerifierSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
Blake2bRead<&[u8], G1Affine, Challenge255<G1Affine>>,
_,
>(&params, pk.get_vk(), strategy, &[&[]], &mut transcript)
.unwrap();
let proof = gen_proof(&params, &pk, circuit);
check_proof(&params, pk.get_vk(), &proof, true);
}
7 changes: 5 additions & 2 deletions halo2-base/src/utils/testing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ use crate::{
};
use rand::{rngs::StdRng, SeedableRng};

/// helper function to generate a proof with real prover
/// Helper function to generate a proof with real prover using SHPLONK KZG multi-open polynomical commitment scheme
/// and Blake2b as the hash function for Fiat-Shamir.
pub fn gen_proof(
params: &ParamsKZG<Bn256>,
pk: &ProvingKey<G1Affine>,
Expand All @@ -42,7 +43,8 @@ pub fn gen_proof(
transcript.finalize()
}

/// helper function to verify a proof
/// Helper function to verify a proof (generated using [`gen_proof`]) using SHPLONK KZG multi-open polynomical commitment scheme
/// and Blake2b as the hash function for Fiat-Shamir.
pub fn check_proof(
params: &ParamsKZG<Bn256>,
vk: &VerifyingKey<G1Affine>,
Expand All @@ -59,6 +61,7 @@ pub fn check_proof(
Blake2bRead<&[u8], G1Affine, Challenge255<G1Affine>>,
SingleStrategy<'_, Bn256>,
>(verifier_params, vk, strategy, &[&[]], &mut transcript);
// Just FYI, because strategy is `SingleStrategy`, the output `res` is `Result<(), Error>`, so there is no need to call `res.finalize()`.

if expect_satisfied {
assert!(res.is_ok());
Expand Down
32 changes: 11 additions & 21 deletions halo2-ecc/benches/fixed_base_msm.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
use ark_std::{end_timer, start_timer};
use halo2_base::gates::{
builder::{
BaseConfigParams, CircuitBuilderStage, GateThreadBuilder, MultiPhaseThreadBreakPoints,
RangeCircuitBuilder,
},
RangeChip,
};
use halo2_base::halo2_proofs::halo2curves::ff::PrimeField as _;
use halo2_base::halo2_proofs::{
arithmetic::Field,
halo2curves::bn256::{Bn256, Fr, G1Affine},
plonk::*,
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::ProverSHPLONK,
poly::kzg::commitment::ParamsKZG,
};
use halo2_base::{
gates::{
builder::{
BaseConfigParams, CircuitBuilderStage, GateThreadBuilder, MultiPhaseThreadBreakPoints,
RangeCircuitBuilder,
},
RangeChip,
},
transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer},
utils::testing::gen_proof,
};
use halo2_ecc::{bn254::FpChip, ecc::EccChip};
use rand::rngs::OsRng;
Expand Down Expand Up @@ -125,16 +124,7 @@ fn bench(c: &mut Criterion) {
Some(break_points.clone()),
);

let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<_>>,
_,
>(params, pk, &[circuit], &[&[]], &mut rng, &mut transcript)
.expect("prover should not fail");
gen_proof(params, pk, circuit);
})
},
);
Expand Down
27 changes: 5 additions & 22 deletions halo2-ecc/benches/fp_mul.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,11 @@ use halo2_base::{
},
halo2_proofs::{
arithmetic::Field,
halo2curves::bn256::{Bn256, Fq, Fr, G1Affine},
halo2curves::bn256::{Bn256, Fq, Fr},
plonk::*,
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::ProverSHPLONK,
},
transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer},
poly::kzg::commitment::ParamsKZG,
},
utils::BigPrimeField,
utils::{testing::gen_proof, BigPrimeField},
Context,
};
use halo2_ecc::fields::fp::FpChip;
Expand Down Expand Up @@ -59,11 +55,7 @@ fn fp_mul_circuit(
) -> RangeCircuitBuilder<Fr> {
let k = K as usize;
let lookup_bits = k - 1;
let mut builder = match stage {
CircuitBuilderStage::Mock => GateThreadBuilder::mock(),
CircuitBuilderStage::Prover => GateThreadBuilder::prover(),
CircuitBuilderStage::Keygen => GateThreadBuilder::keygen(),
};
let mut builder = GateThreadBuilder::from_stage(stage);

let start0 = start_timer!(|| format!("Witness generation for circuit in {stage:?} stage"));
fp_mul_bench(builder.main(0), lookup_bits, 88, 3, a, b);
Expand Down Expand Up @@ -107,16 +99,7 @@ fn bench(c: &mut Criterion) {
Some(break_points.clone()),
);

let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<_>>,
_,
>(params, pk, &[circuit], &[&[]], OsRng, &mut transcript)
.expect("prover should not fail");
gen_proof(params, pk, circuit);
})
},
);
Expand Down
32 changes: 11 additions & 21 deletions halo2-ecc/benches/msm.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
use ark_std::{end_timer, start_timer};
use halo2_base::gates::{
builder::{
BaseConfigParams, CircuitBuilderStage, GateThreadBuilder, MultiPhaseThreadBreakPoints,
RangeCircuitBuilder,
},
RangeChip,
};
use halo2_base::halo2_proofs::halo2curves::ff::PrimeField as _;
use halo2_base::halo2_proofs::{
arithmetic::Field,
halo2curves::bn256::{Bn256, Fr, G1Affine},
plonk::*,
poly::kzg::{
commitment::{KZGCommitmentScheme, ParamsKZG},
multiopen::ProverSHPLONK,
poly::kzg::commitment::ParamsKZG,
};
use halo2_base::{
gates::{
builder::{
BaseConfigParams, CircuitBuilderStage, GateThreadBuilder, MultiPhaseThreadBreakPoints,
RangeCircuitBuilder,
},
RangeChip,
},
transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer},
utils::testing::gen_proof,
};
use halo2_ecc::{bn254::FpChip, ecc::EccChip};
use rand::rngs::OsRng;
Expand Down Expand Up @@ -145,16 +144,7 @@ fn bench(c: &mut Criterion) {
Some(break_points.clone()),
);

let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<_>>,
_,
>(params, pk, &[circuit], &[&[]], &mut rng, &mut transcript)
.expect("prover should not fail");
gen_proof(params, pk, circuit);
})
},
);
Expand Down
49 changes: 7 additions & 42 deletions halo2-ecc/src/bn254/tests/fixed_base_msm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ use halo2_base::{
RangeChip,
},
halo2_proofs::halo2curves::bn256::G1,
utils::fs::gen_srs,
utils::{
fs::gen_srs,
testing::{check_proof, gen_proof},
},
};
use itertools::Itertools;
use rand_core::OsRng;
Expand Down Expand Up @@ -146,7 +149,6 @@ fn bench_fixed_base_msm() -> Result<(), Box<dyn std::error::Error>> {
serde_json::from_str(line.unwrap().as_str()).unwrap();
let k = bench_params.degree;
println!("---------------------- degree = {k} ------------------------------",);
let rng = OsRng;

let params = gen_srs(k);
println!("{bench_params:?}");
Expand Down Expand Up @@ -180,50 +182,13 @@ fn bench_fixed_base_msm() -> Result<(), Box<dyn std::error::Error>> {
Some(cp),
Some(break_points),
);
let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
create_proof::<
KZGCommitmentScheme<Bn256>,
ProverSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
_,
Blake2bWrite<Vec<u8>, G1Affine, Challenge255<G1Affine>>,
_,
>(&params, &pk, &[circuit], &[&[]], rng, &mut transcript)?;
let proof = transcript.finalize();
let proof = gen_proof(&params, &pk, circuit);
end_timer!(proof_time);

let proof_size = {
let path = format!(
"data/
msm_circuit_proof_{}_{}_{}_{}_{}_{}_{}_{}.data",
bench_params.degree,
bench_params.num_advice,
bench_params.num_lookup_advice,
bench_params.num_fixed,
bench_params.lookup_bits,
bench_params.limb_bits,
bench_params.num_limbs,
bench_params.batch_size,
);
let mut fd = File::create(&path)?;
fd.write_all(&proof)?;
let size = fd.metadata().unwrap().len();
fs::remove_file(path)?;
size
};
let proof_size = proof.len();

let verify_time = start_timer!(|| "Verify time");
let verifier_params = params.verifier_params();
let strategy = SingleStrategy::new(&params);
let mut transcript = Blake2bRead::<_, _, Challenge255<_>>::init(&proof[..]);
verify_proof::<
KZGCommitmentScheme<Bn256>,
VerifierSHPLONK<'_, Bn256>,
Challenge255<G1Affine>,
Blake2bRead<&[u8], G1Affine, Challenge255<G1Affine>>,
SingleStrategy<'_, Bn256>,
>(verifier_params, pk.get_vk(), strategy, &[&[]], &mut transcript)
.unwrap();
check_proof(&params, pk.get_vk(), &proof, true);
end_timer!(verify_time);

writeln!(
Expand Down
Loading

0 comments on commit a22f450

Please sign in to comment.