diff --git a/halo2_backend/src/poly/commitment.rs b/halo2_backend/src/poly/commitment.rs index 7f0c2f0c..93975a87 100644 --- a/halo2_backend/src/poly/commitment.rs +++ b/halo2_backend/src/poly/commitment.rs @@ -45,6 +45,12 @@ pub trait Params<'params, C: CurveAffine>: Sized + Clone + Debug { /// Multiscalar multiplication engine type MSM: MSM + 'params; + /// Verifier parameters. + type ParamsVerifier: ParamsVerifier<'params, C>; + + /// Prover parameters. + type ParamsProver: ParamsProver<'params, C>; + /// Logarithmic size of the circuit fn k(&self) -> u32; @@ -58,6 +64,9 @@ pub trait Params<'params, C: CurveAffine>: Sized + Clone + Debug { /// appropriate params. fn empty_msm(&'params self) -> Self::MSM; + /// Returns verification parameters. + fn verifier_params(&'params self) -> &'params Self::ParamsVerifier; + /// This commits to a polynomial using its evaluations over the $2^k$ size /// evaluation domain. The commitment will be blinded by the blinding factor /// `r`. @@ -77,9 +86,6 @@ pub trait Params<'params, C: CurveAffine>: Sized + Clone + Debug { /// Parameters for circuit synthesis and prover parameters. pub trait ParamsProver<'params, C: CurveAffine>: Params<'params, C> { - /// Constant verifier parameters. - type ParamsVerifier: ParamsVerifier<'params, C>; - /// Returns new instance of parameters fn new(k: u32) -> Self; @@ -95,9 +101,6 @@ pub trait ParamsProver<'params, C: CurveAffine>: Params<'params, C> { /// Getter for g generators fn get_g(&self) -> &[C]; - - /// Returns verification parameters. - fn verifier_params(&'params self) -> &'params Self::ParamsVerifier; } /// Verifier specific functionality with circuit constraints diff --git a/halo2_backend/src/poly/ipa/commitment.rs b/halo2_backend/src/poly/ipa/commitment.rs index 0f6b549a..a25e6626 100644 --- a/halo2_backend/src/poly/ipa/commitment.rs +++ b/halo2_backend/src/poly/ipa/commitment.rs @@ -62,6 +62,9 @@ impl<'params, C: CurveAffine> ParamsVerifier<'params, C> for ParamsIPA {} impl<'params, C: CurveAffine> Params<'params, C> for ParamsIPA { type MSM = MSMIPA<'params, C>; + type ParamsVerifier = Self; + type ParamsProver = Self; + fn k(&self) -> u32 { self.k } @@ -83,6 +86,10 @@ impl<'params, C: CurveAffine> Params<'params, C> for ParamsIPA { MSMIPA::new(self) } + fn verifier_params(&'params self) -> &'params Self::ParamsVerifier { + self + } + /// This commits to a polynomial using its evaluations over the $2^k$ size /// evaluation domain. The commitment will be blinded by the blinding factor /// `r`. @@ -145,12 +152,6 @@ impl<'params, C: CurveAffine> Params<'params, C> for ParamsIPA { } impl<'params, C: CurveAffine> ParamsProver<'params, C> for ParamsIPA { - type ParamsVerifier = ParamsVerifierIPA; - - fn verifier_params(&'params self) -> &'params Self::ParamsVerifier { - self - } - /// Initializes parameters for the curve, given a random oracle to draw /// points from. fn new(k: u32) -> Self { diff --git a/halo2_backend/src/poly/kzg/commitment.rs b/halo2_backend/src/poly/kzg/commitment.rs index 4fe9701b..36d758fc 100644 --- a/halo2_backend/src/poly/kzg/commitment.rs +++ b/halo2_backend/src/poly/kzg/commitment.rs @@ -280,6 +280,12 @@ where { type MSM = MSMKZG; + /// Verifier parameters. + type ParamsVerifier = ParamsVerifierKZG; + + /// Prover parameters. + type ParamsProver = Self; + fn k(&self) -> u32 { self.k } @@ -302,6 +308,10 @@ where MSMKZG::new() } + fn verifier_params(&'params self) -> &'params Self::ParamsVerifier { + self + } + fn commit_lagrange( &self, engine: &impl MsmAccel, @@ -341,12 +351,6 @@ where E::G1: CurveExt, E::G2Affine: SerdeCurveAffine, { - type ParamsVerifier = ParamsVerifierKZG; - - fn verifier_params(&'params self) -> &'params Self::ParamsVerifier { - self - } - fn new(k: u32) -> Self { Self::setup(k, OsRng) } diff --git a/halo2_backend/src/poly/kzg/multiopen/gwc/verifier.rs b/halo2_backend/src/poly/kzg/multiopen/gwc/verifier.rs index 261f5e22..ab0dd43e 100644 --- a/halo2_backend/src/poly/kzg/multiopen/gwc/verifier.rs +++ b/halo2_backend/src/poly/kzg/multiopen/gwc/verifier.rs @@ -13,6 +13,8 @@ use crate::poly::query::{CommitmentReference, VerifierQuery}; use crate::poly::Error; use crate::transcript::{EncodedChallenge, TranscriptRead}; +use group::prime::PrimeCurve; +use group::prime::PrimeCurveAffine; use halo2_middleware::ff::Field; use halo2curves::pairing::{Engine, MultiMillerLoop}; use halo2curves::CurveExt; @@ -116,7 +118,7 @@ where msm_accumulator.right.add_msm(&witness_with_aux); msm_accumulator.right.add_msm(&commitment_multi); - let g0: E::G1 = self.params.g[0].into(); + let g0: E::G1 = ::generator().into(); msm_accumulator.right.append_term(eval_multi, -g0); Ok(Self::Guard::new(msm_accumulator)) diff --git a/halo2_backend/src/poly/kzg/multiopen/shplonk/verifier.rs b/halo2_backend/src/poly/kzg/multiopen/shplonk/verifier.rs index 27e33c62..d6194697 100644 --- a/halo2_backend/src/poly/kzg/multiopen/shplonk/verifier.rs +++ b/halo2_backend/src/poly/kzg/multiopen/shplonk/verifier.rs @@ -15,6 +15,7 @@ use crate::poly::kzg::strategy::GuardKZG; use crate::poly::query::{CommitmentReference, VerifierQuery}; use crate::poly::Error; use crate::transcript::{EncodedChallenge, TranscriptRead}; +use group::prime::PrimeCurveAffine; use halo2_middleware::ff::Field; use halo2curves::pairing::{Engine, MultiMillerLoop}; use halo2curves::CurveExt; @@ -126,7 +127,7 @@ where r_outer_acc += power_of_v * r_inner_acc * z_diff_i; } let mut outer_msm = outer_msm.normalize(); - let g1: E::G1 = self.params.g[0].into(); + let g1: E::G1 = ::generator().into(); outer_msm.append_term(-r_outer_acc, g1); outer_msm.append_term(-z_0, h1.into()); outer_msm.append_term(*u, h2.into()); diff --git a/halo2_proofs/tests/frontend_backend_split.rs b/halo2_proofs/tests/frontend_backend_split.rs index 0c580693..5c8b9802 100644 --- a/halo2_proofs/tests/frontend_backend_split.rs +++ b/halo2_proofs/tests/frontend_backend_split.rs @@ -28,7 +28,7 @@ use halo2_frontend::{ }, }; use halo2_middleware::{ff::Field, poly::Rotation}; -use halo2_proofs::poly::commitment::ParamsProver; +use halo2_proofs::poly::commitment::Params; use std::collections::HashMap; #[derive(Clone)] diff --git a/halo2_proofs/tests/plonk_api.rs b/halo2_proofs/tests/plonk_api.rs index f7bb6ed6..8050ef7d 100644 --- a/halo2_proofs/tests/plonk_api.rs +++ b/halo2_proofs/tests/plonk_api.rs @@ -7,7 +7,6 @@ use halo2_middleware::zal::{ impls::{PlonkEngine, PlonkEngineConfig}, traits::MsmAccel, }; -use halo2_proofs::arithmetic::Field; use halo2_proofs::circuit::{Cell, Layouter, SimpleFloorPlanner, Value}; use halo2_proofs::dev::MockProver; use halo2_proofs::plonk::{ @@ -22,6 +21,7 @@ use halo2_proofs::transcript::{ Blake2bRead, Blake2bWrite, Challenge255, EncodedChallenge, TranscriptReadBuffer, TranscriptWriterBuffer, }; +use halo2_proofs::{arithmetic::Field, poly::commitment::Params}; use rand_core::{OsRng, RngCore}; use std::marker::PhantomData;