From df7af2478f8119facca35df2a0bdc288ad6997ee Mon Sep 17 00:00:00 2001 From: chonps Date: Tue, 20 May 2025 18:03:07 +0000 Subject: [PATCH 1/3] unfix PCS poly field --- bin/src/executor.rs | 14 ++++++++++---- bin/src/main.rs | 7 ++++--- bin/src/main_mpi.rs | 7 +++++-- circuit/src/layered/circuit.rs | 2 +- gkr/benches/gkr_hashes.rs | 19 +++++++++++-------- gkr/src/prover/snark.rs | 22 ++++++++++++++-------- gkr/src/tests/gkr_correctness.rs | 7 +++++-- gkr_engine/src/lib.rs | 6 +++++- gkr_engine/src/poly_commit/definition.rs | 7 ++++--- poly_commit/src/hyrax/expander_api.rs | 8 ++++---- poly_commit/src/kzg/expander_api.rs | 6 +++--- poly_commit/src/orion/expander_api.rs | 2 +- poly_commit/src/raw.rs | 2 +- poly_commit/src/utils.rs | 5 +++-- 14 files changed, 71 insertions(+), 43 deletions(-) diff --git a/bin/src/executor.rs b/bin/src/executor.rs index 87a6469c8..169d0ab96 100644 --- a/bin/src/executor.rs +++ b/bin/src/executor.rs @@ -124,8 +124,11 @@ pub fn prove( ) -> ( <::FieldConfig as FieldEngine>::ChallengeField, Proof, -) { - let mut prover = Prover::::new(mpi_config.clone()); +) +where + Cfg::FieldConfig: FieldEngine +{ + let mut prover = crate::Prover::::new(mpi_config.clone()); prover.prepare_mem(circuit); // TODO: Read PCS setup from files @@ -165,7 +168,10 @@ pub fn verify( pub async fn run_command( command: &ExpanderExecArgs, mpi_config: &MPIConfig, -) { +) +where + Cfg::FieldConfig: FieldEngine +{ let subcommands = command.subcommands.clone(); match subcommands { @@ -263,7 +269,7 @@ pub async fn run_command( // TODO: Read PCS setup from files let (pcs_params, pcs_proving_key, pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &prover.mpi_config, ); diff --git a/bin/src/main.rs b/bin/src/main.rs index fe9fed42a..ddb95de5c 100644 --- a/bin/src/main.rs +++ b/bin/src/main.rs @@ -127,8 +127,9 @@ fn main() { fn run_benchmark<'a, Cfg: GKREngine>(args: &'a Args, mpi_config: MPIConfig) where - >::ScratchPad: 'a, - >::ScratchPad: 'static, + >::ScratchPad: 'a, + >::ScratchPad: 'static, + Cfg::FieldConfig: FieldEngine, { let partial_proof_cnts = (0..args.threads) .map(|_| Arc::new(Mutex::new(0))) @@ -223,7 +224,7 @@ where println!("Circuit loaded!"); let (pcs_params, pcs_proving_key, _pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit_template.log_input_size(), &mpi_config, ); diff --git a/bin/src/main_mpi.rs b/bin/src/main_mpi.rs index 2145270fe..67cf87dd0 100644 --- a/bin/src/main_mpi.rs +++ b/bin/src/main_mpi.rs @@ -117,7 +117,10 @@ fn main() { MPIConfig::finalize(); } -fn run_benchmark(args: &Args, mpi_config: MPIConfig) { +fn run_benchmark(args: &Args, mpi_config: MPIConfig) +where + Cfg::FieldConfig: FieldEngine, +{ let pack_size = ::get_field_pack_size(); // load circuit @@ -196,7 +199,7 @@ fn run_benchmark(args: &Args, mpi_config: MPIConfig) { prover.prepare_mem(&circuit); let (pcs_params, pcs_proving_key, _pcs_verification_key, mut pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/circuit/src/layered/circuit.rs b/circuit/src/layered/circuit.rs index 2dc594453..1590b02b6 100644 --- a/circuit/src/layered/circuit.rs +++ b/circuit/src/layered/circuit.rs @@ -385,7 +385,7 @@ impl Circuit { // If there will be two claims for the input // Introduce an extra relay layer before the input layer if !self.layers[0].structure_info.skip_sumcheck_phase_two { - match >::PCS_TYPE { + match >::PCS_TYPE { // Raw PCS costs nothing in opening, so no need to add relay layer // But we can probably add it in the future for verifier's convenience PolynomialCommitmentType::Raw => (), diff --git a/gkr/benches/gkr_hashes.rs b/gkr/benches/gkr_hashes.rs index 90f054065..72a2df55e 100644 --- a/gkr/benches/gkr_hashes.rs +++ b/gkr/benches/gkr_hashes.rs @@ -20,10 +20,13 @@ use transcript::BytesHashTranscript; fn prover_run( mpi_config: &MPIConfig, circuit: &mut Circuit, - pcs_params: &>::Params, - pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, - pcs_scratch: &mut >::ScratchPad, -) { + pcs_params: &>::Params, + pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, + pcs_scratch: &mut >::ScratchPad, +) +where + Cfg::FieldConfig: FieldEngine, +{ let mut prover = Prover::::new(mpi_config.clone()); prover.prepare_mem(circuit); prover.prove(circuit, pcs_params, pcs_proving_key, pcs_scratch); @@ -35,9 +38,9 @@ fn benchmark_setup( ) -> ( MPIConfig, Circuit, - >::Params, - <>::SRS as StructuredReferenceString>::PKey, - >::ScratchPad, + >::Params, + <>::SRS as StructuredReferenceString>::PKey, + >::ScratchPad, ) { let mpi_config = MPIConfig::prover_new(); let mut circuit = @@ -50,7 +53,7 @@ fn benchmark_setup( } let (pcs_params, pcs_proving_key, _pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/gkr/src/prover/snark.rs b/gkr/src/prover/snark.rs index 8cea58c04..a8a74fede 100644 --- a/gkr/src/prover/snark.rs +++ b/gkr/src/prover/snark.rs @@ -84,10 +84,13 @@ impl Prover { pub fn prove( &mut self, c: &mut Circuit, - pcs_params: &>::Params, - pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, - pcs_scratch: &mut >::ScratchPad, - ) -> (::ChallengeField, Proof) { + pcs_params: &>::Params, + pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, + pcs_scratch: &mut >::ScratchPad, + ) -> (::ChallengeField, Proof) + where + Cfg::FieldConfig: FieldEngine, + { let proving_timer = Timer::new("prover", self.mpi_config.is_root()); let mut transcript = Cfg::TranscriptConfig::new(); @@ -195,11 +198,14 @@ impl Prover { &self, inputs: &mut MutRefMultiLinearPoly<::SimdCircuitField>, open_at: &mut ExpanderSingleVarChallenge, - pcs_params: &>::Params, - pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, - pcs_scratch: &mut >::ScratchPad, + pcs_params: &>::Params, + pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, + pcs_scratch: &mut >::ScratchPad, transcript: &mut impl Transcript, - ) { + ) + where + Cfg::FieldConfig: FieldEngine, + { let original_input_vars = inputs.num_vars(); let minimum_vars_for_pcs: usize = pcs_params.num_vars(); diff --git a/gkr/src/tests/gkr_correctness.rs b/gkr/src/tests/gkr_correctness.rs index 48f861f6c..9f4968a43 100644 --- a/gkr/src/tests/gkr_correctness.rs +++ b/gkr/src/tests/gkr_correctness.rs @@ -163,7 +163,10 @@ fn test_gkr_correctness() { } #[allow(unreachable_patterns)] -fn test_gkr_correctness_helper(write_proof_to: Option<&str>) { +fn test_gkr_correctness_helper(write_proof_to: Option<&str>) +where + Cfg::FieldConfig: FieldEngine, +{ let mpi_config = MPIConfig::prover_new(); root_println!(mpi_config, "============== start ==============="); @@ -226,7 +229,7 @@ fn test_gkr_correctness_helper(write_proof_to: Option<&str>) { prover.prepare_mem(&circuit); let (pcs_params, pcs_proving_key, pcs_verification_key, mut pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/gkr_engine/src/lib.rs b/gkr_engine/src/lib.rs index 6098dc9b8..192e7ee62 100644 --- a/gkr_engine/src/lib.rs +++ b/gkr_engine/src/lib.rs @@ -13,6 +13,8 @@ //! protocol #![allow(clippy::manual_div_ceil)] +#![feature(associated_type_defaults)] + mod errors; mod field_engine; mod mpi_engine; @@ -20,6 +22,7 @@ mod poly_commit; mod scheme; mod transcript; +use arith::Field; pub use errors::*; pub use field_engine::*; pub use mpi_engine::*; @@ -71,7 +74,8 @@ pub trait GKREngine: Send + Sync { type TranscriptConfig: Transcript; /// Configuration for polynomial commitment scheme - type PCSConfig: ExpanderPCS; + type PCSField: Field = <::FieldConfig as FieldEngine>::SimdCircuitField; + type PCSConfig: ExpanderPCS; /// GKR scheme const SCHEME: GKRScheme; diff --git a/gkr_engine/src/poly_commit/definition.rs b/gkr_engine/src/poly_commit/definition.rs index f4a870b7b..e22402530 100644 --- a/gkr_engine/src/poly_commit/definition.rs +++ b/gkr_engine/src/poly_commit/definition.rs @@ -1,3 +1,4 @@ +use arith::Field; use polynomials::MultilinearExtension; use rand::RngCore; use serdes::ExpSerde; @@ -25,7 +26,7 @@ impl PCSParams for usize { } } -pub trait ExpanderPCS { +pub trait ExpanderPCS { const NAME: &'static str; const PCS_TYPE: PolynomialCommitmentType; @@ -65,7 +66,7 @@ pub trait ExpanderPCS { params: &Self::Params, mpi_engine: &impl MPIEngine, proving_key: &::PKey, - poly: &impl MultilinearExtension, + poly: &impl MultilinearExtension, scratch_pad: &mut Self::ScratchPad, ) -> Option; @@ -94,7 +95,7 @@ pub trait ExpanderPCS { params: &Self::Params, mpi_engine: &impl MPIEngine, proving_key: &::PKey, - poly: &impl MultilinearExtension, + poly: &impl MultilinearExtension, x: &ExpanderSingleVarChallenge, transcript: &mut impl Transcript, scratch_pad: &Self::ScratchPad, diff --git a/poly_commit/src/hyrax/expander_api.rs b/poly_commit/src/hyrax/expander_api.rs index 7ebd4e480..6cd480f41 100644 --- a/poly_commit/src/hyrax/expander_api.rs +++ b/poly_commit/src/hyrax/expander_api.rs @@ -1,4 +1,4 @@ -use arith::ExtensionField; +use arith::{ExtensionField, Field}; use gkr_engine::{ ExpanderPCS, ExpanderSingleVarChallenge, FieldEngine, MPIEngine, PolynomialCommitmentType, StructuredReferenceString, Transcript, @@ -18,7 +18,7 @@ use crate::{ HyraxCommitment, HyraxOpening, HyraxPCS, PedersenParams, }; -impl ExpanderPCS for HyraxPCS +impl ExpanderPCS for HyraxPCS where G: FieldEngine, C: CurveAffine + ExpSerde, @@ -56,7 +56,7 @@ where _params: &Self::Params, mpi_engine: &impl MPIEngine, proving_key: &::PKey, - poly: &impl polynomials::MultilinearExtension<::SimdCircuitField>, + poly: &impl polynomials::MultilinearExtension, _scratch_pad: &mut Self::ScratchPad, ) -> Option { let local_commit = hyrax_commit(proving_key, poly); @@ -83,7 +83,7 @@ where _params: &Self::Params, mpi_engine: &impl MPIEngine, proving_key: &::PKey, - poly: &impl polynomials::MultilinearExtension<::SimdCircuitField>, + poly: &impl polynomials::MultilinearExtension, x: &ExpanderSingleVarChallenge, _transcript: &mut impl Transcript, _scratch_pad: &Self::ScratchPad, diff --git a/poly_commit/src/kzg/expander_api.rs b/poly_commit/src/kzg/expander_api.rs index 11042c72a..34c780844 100644 --- a/poly_commit/src/kzg/expander_api.rs +++ b/poly_commit/src/kzg/expander_api.rs @@ -13,7 +13,7 @@ use serdes::ExpSerde; use crate::*; -impl ExpanderPCS for HyperKZGPCS +impl ExpanderPCS for HyperKZGPCS where G: FieldEngine, E: Engine + MultiMillerLoop, @@ -57,7 +57,7 @@ where _params: &Self::Params, mpi_engine: &impl MPIEngine, proving_key: &::PKey, - poly: &impl polynomials::MultilinearExtension<::SimdCircuitField>, + poly: &impl polynomials::MultilinearExtension, _scratch_pad: &mut Self::ScratchPad, ) -> Option { let local_commitment = @@ -84,7 +84,7 @@ where _params: &Self::Params, mpi_engine: &impl MPIEngine, proving_key: &::PKey, - poly: &impl polynomials::MultilinearExtension<::SimdCircuitField>, + poly: &impl polynomials::MultilinearExtension, x: &ExpanderSingleVarChallenge, transcript: &mut impl Transcript, _scratch_pad: &Self::ScratchPad, diff --git a/poly_commit/src/orion/expander_api.rs b/poly_commit/src/orion/expander_api.rs index 404250ea9..0edca4ede 100644 --- a/poly_commit/src/orion/expander_api.rs +++ b/poly_commit/src/orion/expander_api.rs @@ -13,7 +13,7 @@ use crate::orion::{ ORION_CODE_PARAMETER_INSTANCE, }; -impl ExpanderPCS +impl ExpanderPCS for OrionSIMDFieldPCS where C: FieldEngine, diff --git a/poly_commit/src/raw.rs b/poly_commit/src/raw.rs index ba6968a29..978344eee 100644 --- a/poly_commit/src/raw.rs +++ b/poly_commit/src/raw.rs @@ -121,7 +121,7 @@ pub struct RawExpanderGKR { _phantom: std::marker::PhantomData, } -impl ExpanderPCS for RawExpanderGKR { +impl ExpanderPCS for RawExpanderGKR { const NAME: &'static str = "RawExpanderGKR"; const PCS_TYPE: PolynomialCommitmentType = PolynomialCommitmentType::Raw; diff --git a/poly_commit/src/utils.rs b/poly_commit/src/utils.rs index 158750303..feb034cd8 100644 --- a/poly_commit/src/utils.rs +++ b/poly_commit/src/utils.rs @@ -1,9 +1,10 @@ use arith::Field; +use arith::Field; use ark_std::test_rng; use gkr_engine::{ExpanderPCS, FieldEngine, MPIConfig, StructuredReferenceString}; #[allow(clippy::type_complexity)] -pub fn expander_pcs_init_testing_only>( +pub fn expander_pcs_init_testing_only>( n_input_vars: usize, mpi_config: &MPIConfig, ) -> ( @@ -30,7 +31,7 @@ pub fn expander_pcs_init_testing_only>::init_scratch_pad(&pcs_params, mpi_config); + let pcs_scratch = >::init_scratch_pad(&pcs_params, mpi_config); ( pcs_params, From a742a8e1a36eb18fa72baa76c12711b0dd947f4c Mon Sep 17 00:00:00 2001 From: chonps Date: Tue, 20 May 2025 18:41:57 +0000 Subject: [PATCH 2/3] merge & clear --- bin/src/dev_setup.rs | 7 +++++-- bin/src/executor.rs | 14 +++++++------- bin/src/main_mpi.rs | 2 +- gkr/benches/gkr_hashes.rs | 5 ++--- gkr/src/prover/snark.rs | 5 ++--- gkr/src/tests/gkr_correctness.rs | 2 +- gkr/src/verifier/snark.rs | 26 +++++++++++++------------- gkr_engine/src/lib.rs | 1 - poly_commit/src/hyrax/expander_api.rs | 2 +- poly_commit/src/utils.rs | 24 +++++++++++++++++------- poly_commit/tests/common.rs | 6 +++++- 11 files changed, 54 insertions(+), 40 deletions(-) diff --git a/bin/src/dev_setup.rs b/bin/src/dev_setup.rs index ac7379c39..5fdf58bff 100644 --- a/bin/src/dev_setup.rs +++ b/bin/src/dev_setup.rs @@ -45,7 +45,10 @@ fn main() { } } -fn proof_gen() { +fn proof_gen() +where + C::FieldConfig: FieldEngine, +{ let mpi_config = MPIConfig::prover_new(); // load circuit @@ -81,7 +84,7 @@ fn proof_gen() { circuit.evaluate(); let (pcs_params, pcs_proving_key, pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/bin/src/executor.rs b/bin/src/executor.rs index 169d0ab96..c6344b181 100644 --- a/bin/src/executor.rs +++ b/bin/src/executor.rs @@ -124,16 +124,16 @@ pub fn prove( ) -> ( <::FieldConfig as FieldEngine>::ChallengeField, Proof, -) +) where - Cfg::FieldConfig: FieldEngine + Cfg::FieldConfig: FieldEngine, { - let mut prover = crate::Prover::::new(mpi_config.clone()); + let mut prover = Prover::::new(mpi_config.clone()); prover.prepare_mem(circuit); // TODO: Read PCS setup from files let (pcs_params, pcs_proving_key, _, mut pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); @@ -151,6 +151,7 @@ pub fn verify( // TODO: Read PCS setup from files let (pcs_params, _, pcs_verification_key, _) = expander_pcs_init_testing_only::< Cfg::FieldConfig, + Cfg::PCSField, Cfg::PCSConfig, >(circuit.log_input_size(), &mpi_config); let verifier = Verifier::::new(mpi_config); @@ -168,9 +169,8 @@ pub fn verify( pub async fn run_command( command: &ExpanderExecArgs, mpi_config: &MPIConfig, -) -where - Cfg::FieldConfig: FieldEngine +) where + Cfg::FieldConfig: FieldEngine, { let subcommands = command.subcommands.clone(); diff --git a/bin/src/main_mpi.rs b/bin/src/main_mpi.rs index 67cf87dd0..0f5f4f325 100644 --- a/bin/src/main_mpi.rs +++ b/bin/src/main_mpi.rs @@ -117,7 +117,7 @@ fn main() { MPIConfig::finalize(); } -fn run_benchmark(args: &Args, mpi_config: MPIConfig) +fn run_benchmark(args: &Args, mpi_config: MPIConfig) where Cfg::FieldConfig: FieldEngine, { diff --git a/gkr/benches/gkr_hashes.rs b/gkr/benches/gkr_hashes.rs index 72a2df55e..dc5238a1e 100644 --- a/gkr/benches/gkr_hashes.rs +++ b/gkr/benches/gkr_hashes.rs @@ -23,8 +23,7 @@ fn prover_run( pcs_params: &>::Params, pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, pcs_scratch: &mut >::ScratchPad, -) -where +) where Cfg::FieldConfig: FieldEngine, { let mut prover = Prover::::new(mpi_config.clone()); @@ -41,7 +40,7 @@ fn benchmark_setup( >::Params, <>::SRS as StructuredReferenceString>::PKey, >::ScratchPad, -) { +){ let mpi_config = MPIConfig::prover_new(); let mut circuit = Circuit::::single_thread_prover_load_circuit::(circuit_file); diff --git a/gkr/src/prover/snark.rs b/gkr/src/prover/snark.rs index a8a74fede..ee9e665d1 100644 --- a/gkr/src/prover/snark.rs +++ b/gkr/src/prover/snark.rs @@ -87,7 +87,7 @@ impl Prover { pcs_params: &>::Params, pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, pcs_scratch: &mut >::ScratchPad, - ) -> (::ChallengeField, Proof) + ) -> (::ChallengeField, Proof) where Cfg::FieldConfig: FieldEngine, { @@ -202,8 +202,7 @@ impl Prover { pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, pcs_scratch: &mut >::ScratchPad, transcript: &mut impl Transcript, - ) - where + ) where Cfg::FieldConfig: FieldEngine, { let original_input_vars = inputs.num_vars(); diff --git a/gkr/src/tests/gkr_correctness.rs b/gkr/src/tests/gkr_correctness.rs index 9f4968a43..32a19920a 100644 --- a/gkr/src/tests/gkr_correctness.rs +++ b/gkr/src/tests/gkr_correctness.rs @@ -163,7 +163,7 @@ fn test_gkr_correctness() { } #[allow(unreachable_patterns)] -fn test_gkr_correctness_helper(write_proof_to: Option<&str>) +fn test_gkr_correctness_helper(write_proof_to: Option<&str>) where Cfg::FieldConfig: FieldEngine, { diff --git a/gkr/src/verifier/snark.rs b/gkr/src/verifier/snark.rs index 6061fed73..c4ae68055 100644 --- a/gkr/src/verifier/snark.rs +++ b/gkr/src/verifier/snark.rs @@ -48,10 +48,10 @@ impl Verifier { circuit: &mut Circuit, transcript: &mut Cfg::TranscriptConfig, proving_time_mpi_size: usize, - ) -> >::Commitment { + ) -> >::Commitment { let timer = Timer::new("pre_gkr", true); let commitment = - <>::Commitment as ExpSerde>::deserialize_from( + <>::Commitment as ExpSerde>::deserialize_from( &mut proof_reader, ) .unwrap(); @@ -258,9 +258,9 @@ impl Verifier { #[allow(clippy::type_complexity)] pub(crate) fn post_gkr( &self, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, - commitment: &>::Commitment, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + commitment: &>::Commitment, challenge_x: &mut ExpanderSingleVarChallenge, claim_x: &::ChallengeField, challenge_y: &mut Option>, @@ -300,8 +300,8 @@ impl Verifier { circuit: &mut Circuit, public_input: &[::SimdCircuitField], claimed_v: &::ChallengeField, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, proof: &Proof, ) -> bool { let timer = Timer::new("snark verify", true); @@ -343,8 +343,8 @@ impl Verifier { circuit: &mut Circuit, public_input: &[::SimdCircuitField], claimed_v: &::ChallengeField, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, proof: &Proof, ) -> bool { let timer = Timer::new("snark verify", true); @@ -385,15 +385,15 @@ impl Verifier { #[allow(clippy::too_many_arguments)] fn get_pcs_opening_from_proof_and_verify( &self, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, - commitment: &>::Commitment, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + commitment: &>::Commitment, open_at: &mut ExpanderSingleVarChallenge, v: &::ChallengeField, transcript: &mut impl Transcript, proof_reader: impl Read, ) -> bool { - let opening = >::Opening::deserialize_from( + let opening = >::Opening::deserialize_from( proof_reader, ) .unwrap(); diff --git a/gkr_engine/src/lib.rs b/gkr_engine/src/lib.rs index 192e7ee62..5fcd3ce23 100644 --- a/gkr_engine/src/lib.rs +++ b/gkr_engine/src/lib.rs @@ -12,7 +12,6 @@ //! - A Config is a struct that implements the Engine trait and contains the parameters for the GKR //! protocol #![allow(clippy::manual_div_ceil)] - #![feature(associated_type_defaults)] mod errors; diff --git a/poly_commit/src/hyrax/expander_api.rs b/poly_commit/src/hyrax/expander_api.rs index 6cd480f41..a7fb4df44 100644 --- a/poly_commit/src/hyrax/expander_api.rs +++ b/poly_commit/src/hyrax/expander_api.rs @@ -1,4 +1,4 @@ -use arith::{ExtensionField, Field}; +use arith::ExtensionField; use gkr_engine::{ ExpanderPCS, ExpanderSingleVarChallenge, FieldEngine, MPIEngine, PolynomialCommitmentType, StructuredReferenceString, Transcript, diff --git a/poly_commit/src/utils.rs b/poly_commit/src/utils.rs index feb034cd8..fd9320106 100644 --- a/poly_commit/src/utils.rs +++ b/poly_commit/src/utils.rs @@ -1,10 +1,13 @@ use arith::Field; -use arith::Field; use ark_std::test_rng; use gkr_engine::{ExpanderPCS, FieldEngine, MPIConfig, StructuredReferenceString}; #[allow(clippy::type_complexity)] -pub fn expander_pcs_init_testing_only>( +pub fn expander_pcs_init_testing_only< + FieldConfig: FieldEngine, + PCSPolyField: Field, + PCS: ExpanderPCS, +>( n_input_vars: usize, mpi_config: &MPIConfig, ) -> ( @@ -15,9 +18,13 @@ pub fn expander_pcs_init_testing_only>::gen_params(n_input_vars); - let (pcs_setup, calibrated_num_local_simd_vars) = - >::gen_srs_for_testing(&pcs_params, mpi_config, &mut rng); + let mut pcs_params = >::gen_params(n_input_vars); + let (pcs_setup, calibrated_num_local_simd_vars) = >::gen_srs_for_testing( + &pcs_params, mpi_config, &mut rng + ); if n_input_vars < calibrated_num_local_simd_vars { eprintln!( @@ -27,11 +34,14 @@ pub fn expander_pcs_init_testing_only>::gen_params(calibrated_num_local_simd_vars); + pcs_params = >::gen_params( + calibrated_num_local_simd_vars, + ); } let (pcs_proving_key, pcs_verification_key) = pcs_setup.into_keys(); - let pcs_scratch = >::init_scratch_pad(&pcs_params, mpi_config); + let pcs_scratch = + >::init_scratch_pad(&pcs_params, mpi_config); ( pcs_params, diff --git a/poly_commit/tests/common.rs b/poly_commit/tests/common.rs index 92a073dbb..676f3cc7b 100644 --- a/poly_commit/tests/common.rs +++ b/poly_commit/tests/common.rs @@ -44,7 +44,11 @@ pub fn test_pcs>( +pub fn test_pcs_for_expander_gkr< + C: FieldEngine, + T: Transcript, + P: ExpanderPCS, +>( params: &P::Params, mpi_config: &MPIConfig, transcript: &mut T, From 9559ea33866d5c92c074b782bd52bd9e3385d56c Mon Sep 17 00:00:00 2001 From: chonps Date: Wed, 21 May 2025 15:06:41 +0000 Subject: [PATCH 3/3] rename & add comment --- bin/src/dev_setup.rs | 4 +-- bin/src/executor.rs | 10 +++---- bin/src/main.rs | 8 ++--- bin/src/main_mpi.rs | 4 +-- gkr/benches/gkr_hashes.rs | 16 +++++----- gkr/src/prover/snark.rs | 16 +++++----- gkr/src/tests/gkr_correctness.rs | 4 +-- gkr/src/verifier/snark.rs | 38 ++++++++++++++++-------- gkr_engine/src/lib.rs | 4 +-- gkr_engine/src/poly_commit/definition.rs | 6 ++++ poly_commit/src/hyrax/expander_api.rs | 4 +-- poly_commit/src/kzg/expander_api.rs | 4 +-- 12 files changed, 68 insertions(+), 50 deletions(-) diff --git a/bin/src/dev_setup.rs b/bin/src/dev_setup.rs index 5fdf58bff..febb06720 100644 --- a/bin/src/dev_setup.rs +++ b/bin/src/dev_setup.rs @@ -47,7 +47,7 @@ fn main() { fn proof_gen() where - C::FieldConfig: FieldEngine, + C::FieldConfig: FieldEngine, { let mpi_config = MPIConfig::prover_new(); @@ -84,7 +84,7 @@ where circuit.evaluate(); let (pcs_params, pcs_proving_key, pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/bin/src/executor.rs b/bin/src/executor.rs index c6344b181..3e2d3654d 100644 --- a/bin/src/executor.rs +++ b/bin/src/executor.rs @@ -126,14 +126,14 @@ pub fn prove( Proof, ) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let mut prover = Prover::::new(mpi_config.clone()); prover.prepare_mem(circuit); // TODO: Read PCS setup from files let (pcs_params, pcs_proving_key, _, mut pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); @@ -151,7 +151,7 @@ pub fn verify( // TODO: Read PCS setup from files let (pcs_params, _, pcs_verification_key, _) = expander_pcs_init_testing_only::< Cfg::FieldConfig, - Cfg::PCSField, + Cfg::PCSPolyField, Cfg::PCSConfig, >(circuit.log_input_size(), &mpi_config); let verifier = Verifier::::new(mpi_config); @@ -170,7 +170,7 @@ pub async fn run_command( command: &ExpanderExecArgs, mpi_config: &MPIConfig, ) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let subcommands = command.subcommands.clone(); @@ -269,7 +269,7 @@ pub async fn run_command( // TODO: Read PCS setup from files let (pcs_params, pcs_proving_key, pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &prover.mpi_config, ); diff --git a/bin/src/main.rs b/bin/src/main.rs index ddb95de5c..da25cb78b 100644 --- a/bin/src/main.rs +++ b/bin/src/main.rs @@ -127,9 +127,9 @@ fn main() { fn run_benchmark<'a, Cfg: GKREngine>(args: &'a Args, mpi_config: MPIConfig) where - >::ScratchPad: 'a, - >::ScratchPad: 'static, - Cfg::FieldConfig: FieldEngine, + >::ScratchPad: 'a, + >::ScratchPad: 'static, + Cfg::FieldConfig: FieldEngine, { let partial_proof_cnts = (0..args.threads) .map(|_| Arc::new(Mutex::new(0))) @@ -224,7 +224,7 @@ where println!("Circuit loaded!"); let (pcs_params, pcs_proving_key, _pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit_template.log_input_size(), &mpi_config, ); diff --git a/bin/src/main_mpi.rs b/bin/src/main_mpi.rs index 0f5f4f325..fc2094059 100644 --- a/bin/src/main_mpi.rs +++ b/bin/src/main_mpi.rs @@ -119,7 +119,7 @@ fn main() { fn run_benchmark(args: &Args, mpi_config: MPIConfig) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let pack_size = ::get_field_pack_size(); @@ -199,7 +199,7 @@ where prover.prepare_mem(&circuit); let (pcs_params, pcs_proving_key, _pcs_verification_key, mut pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/gkr/benches/gkr_hashes.rs b/gkr/benches/gkr_hashes.rs index dc5238a1e..7c776f5d2 100644 --- a/gkr/benches/gkr_hashes.rs +++ b/gkr/benches/gkr_hashes.rs @@ -20,11 +20,11 @@ use transcript::BytesHashTranscript; fn prover_run( mpi_config: &MPIConfig, circuit: &mut Circuit, - pcs_params: &>::Params, - pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, - pcs_scratch: &mut >::ScratchPad, + pcs_params: &>::Params, + pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, + pcs_scratch: &mut >::ScratchPad, ) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let mut prover = Prover::::new(mpi_config.clone()); prover.prepare_mem(circuit); @@ -37,9 +37,9 @@ fn benchmark_setup( ) -> ( MPIConfig, Circuit, - >::Params, - <>::SRS as StructuredReferenceString>::PKey, - >::ScratchPad, + >::Params, + <>::SRS as StructuredReferenceString>::PKey, + >::ScratchPad, ){ let mpi_config = MPIConfig::prover_new(); let mut circuit = @@ -52,7 +52,7 @@ fn benchmark_setup( } let (pcs_params, pcs_proving_key, _pcs_verification_key, pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/gkr/src/prover/snark.rs b/gkr/src/prover/snark.rs index ee9e665d1..b6610eebe 100644 --- a/gkr/src/prover/snark.rs +++ b/gkr/src/prover/snark.rs @@ -84,12 +84,12 @@ impl Prover { pub fn prove( &mut self, c: &mut Circuit, - pcs_params: &>::Params, - pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, - pcs_scratch: &mut >::ScratchPad, + pcs_params: &>::Params, + pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, + pcs_scratch: &mut >::ScratchPad, ) -> (::ChallengeField, Proof) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let proving_timer = Timer::new("prover", self.mpi_config.is_root()); let mut transcript = Cfg::TranscriptConfig::new(); @@ -198,12 +198,12 @@ impl Prover { &self, inputs: &mut MutRefMultiLinearPoly<::SimdCircuitField>, open_at: &mut ExpanderSingleVarChallenge, - pcs_params: &>::Params, - pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, - pcs_scratch: &mut >::ScratchPad, + pcs_params: &>::Params, + pcs_proving_key: &<>::SRS as StructuredReferenceString>::PKey, + pcs_scratch: &mut >::ScratchPad, transcript: &mut impl Transcript, ) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let original_input_vars = inputs.num_vars(); diff --git a/gkr/src/tests/gkr_correctness.rs b/gkr/src/tests/gkr_correctness.rs index 32a19920a..c250911dc 100644 --- a/gkr/src/tests/gkr_correctness.rs +++ b/gkr/src/tests/gkr_correctness.rs @@ -165,7 +165,7 @@ fn test_gkr_correctness() { #[allow(unreachable_patterns)] fn test_gkr_correctness_helper(write_proof_to: Option<&str>) where - Cfg::FieldConfig: FieldEngine, + Cfg::FieldConfig: FieldEngine, { let mpi_config = MPIConfig::prover_new(); @@ -229,7 +229,7 @@ where prover.prepare_mem(&circuit); let (pcs_params, pcs_proving_key, pcs_verification_key, mut pcs_scratch) = - expander_pcs_init_testing_only::( + expander_pcs_init_testing_only::( circuit.log_input_size(), &mpi_config, ); diff --git a/gkr/src/verifier/snark.rs b/gkr/src/verifier/snark.rs index c4ae68055..a83ca8208 100644 --- a/gkr/src/verifier/snark.rs +++ b/gkr/src/verifier/snark.rs @@ -48,10 +48,10 @@ impl Verifier { circuit: &mut Circuit, transcript: &mut Cfg::TranscriptConfig, proving_time_mpi_size: usize, - ) -> >::Commitment { + ) -> >::Commitment { let timer = Timer::new("pre_gkr", true); let commitment = - <>::Commitment as ExpSerde>::deserialize_from( + <>::Commitment as ExpSerde>::deserialize_from( &mut proof_reader, ) .unwrap(); @@ -258,9 +258,12 @@ impl Verifier { #[allow(clippy::type_complexity)] pub(crate) fn post_gkr( &self, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, - commitment: &>::Commitment, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + commitment: &>::Commitment, challenge_x: &mut ExpanderSingleVarChallenge, claim_x: &::ChallengeField, challenge_y: &mut Option>, @@ -300,8 +303,11 @@ impl Verifier { circuit: &mut Circuit, public_input: &[::SimdCircuitField], claimed_v: &::ChallengeField, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, proof: &Proof, ) -> bool { let timer = Timer::new("snark verify", true); @@ -343,8 +349,11 @@ impl Verifier { circuit: &mut Circuit, public_input: &[::SimdCircuitField], claimed_v: &::ChallengeField, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, proof: &Proof, ) -> bool { let timer = Timer::new("snark verify", true); @@ -385,15 +394,18 @@ impl Verifier { #[allow(clippy::too_many_arguments)] fn get_pcs_opening_from_proof_and_verify( &self, - pcs_params: &>::Params, - pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, - commitment: &>::Commitment, + pcs_params: &>::Params, + pcs_verification_key: &<>::SRS as StructuredReferenceString>::VKey, + commitment: &>::Commitment, open_at: &mut ExpanderSingleVarChallenge, v: &::ChallengeField, transcript: &mut impl Transcript, proof_reader: impl Read, ) -> bool { - let opening = >::Opening::deserialize_from( + let opening = >::Opening::deserialize_from( proof_reader, ) .unwrap(); diff --git a/gkr_engine/src/lib.rs b/gkr_engine/src/lib.rs index 5fcd3ce23..9c5bb47a1 100644 --- a/gkr_engine/src/lib.rs +++ b/gkr_engine/src/lib.rs @@ -73,8 +73,8 @@ pub trait GKREngine: Send + Sync { type TranscriptConfig: Transcript; /// Configuration for polynomial commitment scheme - type PCSField: Field = <::FieldConfig as FieldEngine>::SimdCircuitField; - type PCSConfig: ExpanderPCS; + type PCSPolyField: Field = <::FieldConfig as FieldEngine>::SimdCircuitField; + type PCSConfig: ExpanderPCS; /// GKR scheme const SCHEME: GKRScheme; diff --git a/gkr_engine/src/poly_commit/definition.rs b/gkr_engine/src/poly_commit/definition.rs index e22402530..6a2c3624f 100644 --- a/gkr_engine/src/poly_commit/definition.rs +++ b/gkr_engine/src/poly_commit/definition.rs @@ -26,6 +26,12 @@ impl PCSParams for usize { } } +/// This trait specifies the field used on Expander side. +/// PolyField: the field of the coef of polynomial sent to PCS +/// ChallengeField: the field of the challenge point, should be FieldEngine::ChallengeField +/// EvalField: the field of the evaluation, in the current use case always be FieldEngine::Field +/// since Polyfield has simd Note that it is not necessary that PolyField can be handled by PCS +/// directly. PolyField should be bounded when implemented if necessary. pub trait ExpanderPCS { const NAME: &'static str; diff --git a/poly_commit/src/hyrax/expander_api.rs b/poly_commit/src/hyrax/expander_api.rs index a7fb4df44..d7f3523e1 100644 --- a/poly_commit/src/hyrax/expander_api.rs +++ b/poly_commit/src/hyrax/expander_api.rs @@ -20,9 +20,9 @@ use crate::{ impl ExpanderPCS for HyraxPCS where - G: FieldEngine, + G: FieldEngine, C: CurveAffine + ExpSerde, - C::Scalar: ExtensionField + PrimeField, + C::Scalar: ExtensionField + PrimeField + From, C::ScalarExt: ExtensionField + PrimeField, { const NAME: &'static str = "HyraxPCSForExpanderGKR"; diff --git a/poly_commit/src/kzg/expander_api.rs b/poly_commit/src/kzg/expander_api.rs index 34c780844..5283d2bc1 100644 --- a/poly_commit/src/kzg/expander_api.rs +++ b/poly_commit/src/kzg/expander_api.rs @@ -15,9 +15,9 @@ use crate::*; impl ExpanderPCS for HyperKZGPCS where - G: FieldEngine, + G: FieldEngine, E: Engine + MultiMillerLoop, - E::Fr: ExtensionField + PrimeField, + E::Fr: ExtensionField + PrimeField + From, E::G1Affine: ExpSerde + Default + CurveAffine, E::G2Affine: ExpSerde + Default + CurveAffine, {