diff --git a/plonky2/Cargo.toml b/plonky2/Cargo.toml index 367b99d0..c5de1e63 100644 --- a/plonky2/Cargo.toml +++ b/plonky2/Cargo.toml @@ -16,7 +16,6 @@ gate_testing = [] parallel = ["hashbrown/rayon", "plonky2_maybe_rayon/parallel"] std = ["anyhow/std", "rand/std", "itertools/use_std"] timing = ["std"] -mock = [] [dependencies] ahash = { version = "0.8.3", default-features = false, features = ["compile-time-rng"] } # NOTE: Be sure to keep this version the same as the dependency in `hashbrown`. diff --git a/plonky2/src/lookup_test.rs b/plonky2/src/lookup_test.rs index c8b084cc..165d5dfe 100644 --- a/plonky2/src/lookup_test.rs +++ b/plonky2/src/lookup_test.rs @@ -469,12 +469,10 @@ mod tests { Ok(()) } - #[cfg(feature = "mock")] #[test] fn test_circuit_build_mock() { // This code is taken from examples/fibonacci.rs use crate::field::types::Field; - use crate::iop::generator::generate_partial_witness; use crate::iop::witness::{PartialWitness, Witness, WitnessWrite}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::circuit_data::CircuitConfig; @@ -508,8 +506,8 @@ mod tests { pw.set_target(initial_a, F::ZERO); pw.set_target(initial_b, F::ONE); - let data = builder.build::(); - let partition_witness = generate_partial_witness(pw, &data.prover_only, &data.common); + let data = builder.mock_build::(); + let partition_witness = data.generate_witness(pw); let result = partition_witness.try_get_target(cur_target).unwrap(); assert_eq!(result, F::from_canonical_u64(3736710860384812976)); } diff --git a/plonky2/src/plonk/circuit_builder.rs b/plonky2/src/plonk/circuit_builder.rs index 89ec0903..5a9eb3b2 100644 --- a/plonky2/src/plonk/circuit_builder.rs +++ b/plonky2/src/plonk/circuit_builder.rs @@ -40,8 +40,8 @@ use crate::iop::generator::{ use crate::iop::target::{BoolTarget, Target}; use crate::iop::wire::Wire; use crate::plonk::circuit_data::{ - CircuitConfig, CircuitData, CommonCircuitData, ProverCircuitData, ProverOnlyCircuitData, - VerifierCircuitData, VerifierCircuitTarget, VerifierOnlyCircuitData, + CircuitConfig, CircuitData, CommonCircuitData, MockCircuitData, ProverCircuitData, + ProverOnlyCircuitData, VerifierCircuitData, VerifierCircuitTarget, VerifierOnlyCircuitData, }; use crate::plonk::config::{AlgebraicHasher, GenericConfig, GenericHashOut, Hasher}; use crate::plonk::copy_constraint::CopyConstraint; @@ -916,7 +916,10 @@ impl, const D: usize> CircuitBuilder { } /// Builds a "full circuit", with both prover and verifier data. - pub fn build>(mut self) -> CircuitData { + pub fn build_with_options>( + mut self, + commit_to_sigma: bool, + ) -> CircuitData { let mut timing = TimingTree::new("preprocess", Level::Trace); #[cfg(feature = "std")] @@ -1024,8 +1027,7 @@ impl, const D: usize> CircuitBuilder { let fft_root_table = fft_root_table(max_fft_points); let mut constants_sigmas_commitment = PolynomialBatch::::default(); - #[cfg(not(feature = "mock"))] - { + if commit_to_sigma { let constants_sigmas_vecs = [constant_vecs, sigma_vecs.clone()].concat(); constants_sigmas_commitment = PolynomialBatch::::from_values( constants_sigmas_vecs, @@ -1155,6 +1157,17 @@ impl, const D: usize> CircuitBuilder { } } + pub fn build>(self) -> CircuitData { + self.build_with_options(true) + } + + pub fn mock_build>(self) -> MockCircuitData { + let circuit_data = self.build_with_options(false); + MockCircuitData { + prover_only: circuit_data.prover_only, + common: circuit_data.common, + } + } /// Builds a "prover circuit", with data needed to generate proofs but not verify them. pub fn build_prover>(self) -> ProverCircuitData { // TODO: Can skip parts of this. diff --git a/plonky2/src/plonk/circuit_data.rs b/plonky2/src/plonk/circuit_data.rs index 6e4e0638..0b96c527 100644 --- a/plonky2/src/plonk/circuit_data.rs +++ b/plonky2/src/plonk/circuit_data.rs @@ -24,9 +24,9 @@ use crate::gates::selectors::SelectorsInfo; use crate::hash::hash_types::{HashOutTarget, MerkleCapTarget, RichField}; use crate::hash::merkle_tree::MerkleCap; use crate::iop::ext_target::ExtensionTarget; -use crate::iop::generator::WitnessGeneratorRef; +use crate::iop::generator::{generate_partial_witness, WitnessGeneratorRef}; use crate::iop::target::Target; -use crate::iop::witness::PartialWitness; +use crate::iop::witness::{PartialWitness, PartitionWitness}; use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::config::{GenericConfig, Hasher}; use crate::plonk::plonk_common::PlonkOracle; @@ -111,6 +111,22 @@ impl CircuitConfig { } } +/// Circuit data required by the prover or the verifier. +#[derive(Eq, PartialEq, Debug)] +pub struct MockCircuitData, C: GenericConfig, const D: usize> +{ + pub prover_only: ProverOnlyCircuitData, + pub common: CommonCircuitData, +} + +impl<'a, F: RichField + Extendable, C: GenericConfig, const D: usize> + MockCircuitData +{ + pub fn generate_witness(&self, inputs: PartialWitness) -> PartitionWitness { + generate_partial_witness::(inputs, &self.prover_only, &self.common) + } +} + /// Circuit data required by the prover or the verifier. #[derive(Eq, PartialEq, Debug)] pub struct CircuitData, C: GenericConfig, const D: usize> {