diff --git a/halo2_gadgets/Cargo.toml b/halo2_gadgets/Cargo.toml index 136ef63a16..c4ebf6fae3 100644 --- a/halo2_gadgets/Cargo.toml +++ b/halo2_gadgets/Cargo.toml @@ -49,6 +49,7 @@ bench = false [features] dev-graph = ["halo2_proofs/dev-graph", "plotters"] +circuit-params = ["halo2_proofs/circuit-params"] test-dependencies = ["proptest"] unstable = [] diff --git a/halo2_gadgets/benches/poseidon.rs b/halo2_gadgets/benches/poseidon.rs index d7770e4c91..b77351dae0 100644 --- a/halo2_gadgets/benches/poseidon.rs +++ b/halo2_gadgets/benches/poseidon.rs @@ -53,6 +53,7 @@ where { type Config = MyConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -62,7 +63,10 @@ where } } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let state = (0..WIDTH).map(|_| meta.advice_column()).collect::>(); let expected = meta.instance_column(); meta.enable_equality(expected); diff --git a/halo2_gadgets/benches/sha256.rs b/halo2_gadgets/benches/sha256.rs index 99ac161f0c..4ac00cfd3d 100644 --- a/halo2_gadgets/benches/sha256.rs +++ b/halo2_gadgets/benches/sha256.rs @@ -37,13 +37,17 @@ fn bench(name: &str, k: u32, c: &mut Criterion) { impl Circuit for MyCircuit { type Config = Table16Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { Table16Chip::configure(meta) } diff --git a/halo2_gadgets/src/ecc.rs b/halo2_gadgets/src/ecc.rs index 8bbee5629b..3b1a31b896 100644 --- a/halo2_gadgets/src/ecc.rs +++ b/halo2_gadgets/src/ecc.rs @@ -731,13 +731,17 @@ pub(crate) mod tests { impl Circuit for MyCircuit { type Config = EccConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit { test_errors: false } } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let advices = [ meta.advice_column(), meta.advice_column(), diff --git a/halo2_gadgets/src/ecc/chip/mul_fixed/short.rs b/halo2_gadgets/src/ecc/chip/mul_fixed/short.rs index dcf528a61d..cd25b4ec4a 100644 --- a/halo2_gadgets/src/ecc/chip/mul_fixed/short.rs +++ b/halo2_gadgets/src/ecc/chip/mul_fixed/short.rs @@ -434,13 +434,17 @@ pub mod tests { impl Circuit for MyCircuit { type Config = EccConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let advices = [ meta.advice_column(), meta.advice_column(), diff --git a/halo2_gadgets/src/poseidon/pow5.rs b/halo2_gadgets/src/poseidon/pow5.rs index 3e3e2ccfe1..576fede974 100644 --- a/halo2_gadgets/src/poseidon/pow5.rs +++ b/halo2_gadgets/src/poseidon/pow5.rs @@ -620,13 +620,17 @@ mod tests { { type Config = Pow5Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { PermuteCircuit::(PhantomData) } - fn configure(meta: &mut ConstraintSystem) -> Pow5Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Pow5Config { let state = (0..WIDTH).map(|_| meta.advice_column()).collect::>(); let partial_sbox = meta.advice_column(); @@ -736,6 +740,7 @@ mod tests { { type Config = Pow5Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -746,7 +751,10 @@ mod tests { } } - fn configure(meta: &mut ConstraintSystem) -> Pow5Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Pow5Config { let state = (0..WIDTH).map(|_| meta.advice_column()).collect::>(); let partial_sbox = meta.advice_column(); diff --git a/halo2_gadgets/src/sha256/table16.rs b/halo2_gadgets/src/sha256/table16.rs index f646e3604e..dee4348795 100644 --- a/halo2_gadgets/src/sha256/table16.rs +++ b/halo2_gadgets/src/sha256/table16.rs @@ -468,13 +468,17 @@ mod tests { impl Circuit for MyCircuit { type Config = Table16Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit {} } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { Table16Chip::configure(meta) } diff --git a/halo2_gadgets/src/sha256/table16/compression.rs b/halo2_gadgets/src/sha256/table16/compression.rs index 0c8124c2cd..59beb4df04 100644 --- a/halo2_gadgets/src/sha256/table16/compression.rs +++ b/halo2_gadgets/src/sha256/table16/compression.rs @@ -954,13 +954,17 @@ mod tests { impl Circuit for MyCircuit { type Config = Table16Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit {} } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { Table16Chip::configure(meta) } diff --git a/halo2_gadgets/src/sha256/table16/message_schedule.rs b/halo2_gadgets/src/sha256/table16/message_schedule.rs index b12e3771bd..c71b134a66 100644 --- a/halo2_gadgets/src/sha256/table16/message_schedule.rs +++ b/halo2_gadgets/src/sha256/table16/message_schedule.rs @@ -411,13 +411,17 @@ mod tests { impl Circuit for MyCircuit { type Config = Table16Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit {} } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { Table16Chip::configure(meta) } diff --git a/halo2_gadgets/src/sha256/table16/spread_table.rs b/halo2_gadgets/src/sha256/table16/spread_table.rs index 6efcfb86da..d72ea7f20e 100644 --- a/halo2_gadgets/src/sha256/table16/spread_table.rs +++ b/halo2_gadgets/src/sha256/table16/spread_table.rs @@ -304,13 +304,17 @@ mod tests { impl Circuit for MyCircuit { type Config = SpreadTableConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit {} } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let input_tag = meta.advice_column(); let input_dense = meta.advice_column(); let input_spread = meta.advice_column(); diff --git a/halo2_gadgets/src/sinsemilla.rs b/halo2_gadgets/src/sinsemilla.rs index ab58d081a1..2e2911fd1d 100644 --- a/halo2_gadgets/src/sinsemilla.rs +++ b/halo2_gadgets/src/sinsemilla.rs @@ -525,6 +525,7 @@ pub(crate) mod tests { SinsemillaConfig, ); type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -532,7 +533,10 @@ pub(crate) mod tests { } #[allow(non_snake_case)] - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let advices = [ meta.advice_column(), meta.advice_column(), diff --git a/halo2_gadgets/src/sinsemilla/merkle.rs b/halo2_gadgets/src/sinsemilla/merkle.rs index c8b211de5e..1bcce2eb80 100644 --- a/halo2_gadgets/src/sinsemilla/merkle.rs +++ b/halo2_gadgets/src/sinsemilla/merkle.rs @@ -213,13 +213,17 @@ pub mod tests { MerkleConfig, ); type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let advices = [ meta.advice_column(), meta.advice_column(), diff --git a/halo2_gadgets/src/utilities.rs b/halo2_gadgets/src/utilities.rs index feec1e9c69..ea0daa4b31 100644 --- a/halo2_gadgets/src/utilities.rs +++ b/halo2_gadgets/src/utilities.rs @@ -271,13 +271,17 @@ mod tests { impl Circuit for MyCircuit { type Config = Config; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit(self.0) } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let selector = meta.selector(); let advice = meta.advice_column(); diff --git a/halo2_gadgets/src/utilities/cond_swap.rs b/halo2_gadgets/src/utilities/cond_swap.rs index 8247db3a2c..b60357288a 100644 --- a/halo2_gadgets/src/utilities/cond_swap.rs +++ b/halo2_gadgets/src/utilities/cond_swap.rs @@ -217,13 +217,17 @@ mod tests { impl Circuit for MyCircuit { type Config = CondSwapConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let advices = [ meta.advice_column(), meta.advice_column(), diff --git a/halo2_gadgets/src/utilities/decompose_running_sum.rs b/halo2_gadgets/src/utilities/decompose_running_sum.rs index 933a13ba80..613de507a4 100644 --- a/halo2_gadgets/src/utilities/decompose_running_sum.rs +++ b/halo2_gadgets/src/utilities/decompose_running_sum.rs @@ -243,6 +243,7 @@ mod tests { { type Config = RunningSumConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -252,7 +253,10 @@ mod tests { } } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let z = meta.advice_column(); let q_range_check = meta.selector(); let constants = meta.fixed_column(); diff --git a/halo2_gadgets/src/utilities/lookup_range_check.rs b/halo2_gadgets/src/utilities/lookup_range_check.rs index 814c6f1900..a6bf28beab 100644 --- a/halo2_gadgets/src/utilities/lookup_range_check.rs +++ b/halo2_gadgets/src/utilities/lookup_range_check.rs @@ -410,13 +410,17 @@ mod tests { impl Circuit for MyCircuit { type Config = LookupRangeCheckConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { *self } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let running_sum = meta.advice_column(); let table_idx = meta.lookup_table_column(); let constants = meta.fixed_column(); @@ -507,6 +511,7 @@ mod tests { impl Circuit for MyCircuit { type Config = LookupRangeCheckConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -516,7 +521,10 @@ mod tests { } } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let running_sum = meta.advice_column(); let table_idx = meta.lookup_table_column(); let constants = meta.fixed_column(); diff --git a/halo2_proofs/Cargo.toml b/halo2_proofs/Cargo.toml index 704bfb2cfa..113e3e8858 100644 --- a/halo2_proofs/Cargo.toml +++ b/halo2_proofs/Cargo.toml @@ -79,6 +79,7 @@ dev-graph = ["plotters", "tabbycat"] gadget-traces = ["backtrace"] sanity-checks = [] batch = ["rand_core/getrandom"] +circuit-params = [] [lib] bench = false diff --git a/halo2_proofs/benches/dev_lookup.rs b/halo2_proofs/benches/dev_lookup.rs index 2762324849..be399443bc 100644 --- a/halo2_proofs/benches/dev_lookup.rs +++ b/halo2_proofs/benches/dev_lookup.rs @@ -28,13 +28,17 @@ fn criterion_benchmark(c: &mut Criterion) { impl Circuit for MyCircuit { type Config = MyConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> MyConfig { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> MyConfig { let config = MyConfig { selector: meta.complex_selector(), table: meta.lookup_table_column(), diff --git a/halo2_proofs/benches/plonk.rs b/halo2_proofs/benches/plonk.rs index 3d1d6bcd6f..17fa7a31e3 100644 --- a/halo2_proofs/benches/plonk.rs +++ b/halo2_proofs/benches/plonk.rs @@ -183,6 +183,7 @@ fn criterion_benchmark(c: &mut Criterion) { impl Circuit for MyCircuit { type Config = PlonkConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -192,7 +193,10 @@ fn criterion_benchmark(c: &mut Criterion) { } } - fn configure(meta: &mut ConstraintSystem) -> PlonkConfig { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> PlonkConfig { meta.set_minimum_degree(5); let a = meta.advice_column(); diff --git a/halo2_proofs/examples/circuit-layout.rs b/halo2_proofs/examples/circuit-layout.rs index 1cd264a634..fd91bd8e48 100644 --- a/halo2_proofs/examples/circuit-layout.rs +++ b/halo2_proofs/examples/circuit-layout.rs @@ -161,6 +161,7 @@ impl StandardCs for StandardPlonk { impl Circuit for MyCircuit { type Config = PlonkConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -171,7 +172,10 @@ impl Circuit for MyCircuit { } #[allow(clippy::many_single_char_names)] - fn configure(meta: &mut ConstraintSystem) -> PlonkConfig { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> PlonkConfig { let e = meta.advice_column(); let a = meta.advice_column(); let b = meta.advice_column(); diff --git a/halo2_proofs/examples/serialization.rs b/halo2_proofs/examples/serialization.rs index 52643cf9bf..46df69da2e 100644 --- a/halo2_proofs/examples/serialization.rs +++ b/halo2_proofs/examples/serialization.rs @@ -86,13 +86,17 @@ struct StandardPlonk(Fr); impl Circuit for StandardPlonk { type Config = StandardPlonkConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { StandardPlonkConfig::configure(meta) } @@ -144,6 +148,7 @@ fn main() { let pk = ProvingKey::::read::<_, StandardPlonk>( &mut reader, SerdeFormat::RawBytes, + #[cfg(feature = "circuit-params")] &circuit.params(), ) .unwrap(); diff --git a/halo2_proofs/examples/shuffle.rs b/halo2_proofs/examples/shuffle.rs index 95a86d3fad..8a0e9dce39 100644 --- a/halo2_proofs/examples/shuffle.rs +++ b/halo2_proofs/examples/shuffle.rs @@ -136,13 +136,17 @@ impl MyCircuit { impl Circuit for MyCircuit { type Config = MyConfig; type FloorPlanner = V1; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { MyConfig::configure(meta) } diff --git a/halo2_proofs/examples/simple-example.rs b/halo2_proofs/examples/simple-example.rs index 4d68d6c4db..a37d39646a 100644 --- a/halo2_proofs/examples/simple-example.rs +++ b/halo2_proofs/examples/simple-example.rs @@ -248,13 +248,17 @@ impl Circuit for MyCircuit { // Since we are using a single chip for everything, we can just reuse its config. type Config = FieldConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { // We create the two advice columns that FieldChip uses for I/O. let advice = [meta.advice_column(), meta.advice_column()]; diff --git a/halo2_proofs/examples/two-chip.rs b/halo2_proofs/examples/two-chip.rs index 14c097d5f3..f96277d9c6 100644 --- a/halo2_proofs/examples/two-chip.rs +++ b/halo2_proofs/examples/two-chip.rs @@ -458,13 +458,17 @@ impl Circuit for MyCircuit { // Since we are using a single chip for everything, we can just reuse its config. type Config = FieldConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { Self::default() } - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { // We create the two advice columns that FieldChip uses for I/O. let advice = [meta.advice_column(), meta.advice_column()]; diff --git a/halo2_proofs/src/circuit/floor_planner/single_pass.rs b/halo2_proofs/src/circuit/floor_planner/single_pass.rs index 3bba58a2a2..b908ea6ccb 100644 --- a/halo2_proofs/src/circuit/floor_planner/single_pass.rs +++ b/halo2_proofs/src/circuit/floor_planner/single_pass.rs @@ -479,13 +479,17 @@ mod tests { impl Circuit for MyCircuit { type Config = Column; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit {} } - fn configure(meta: &mut crate::plonk::ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut crate::plonk::ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { meta.advice_column() } diff --git a/halo2_proofs/src/circuit/floor_planner/v1.rs b/halo2_proofs/src/circuit/floor_planner/v1.rs index a967637f77..cd5d8d82fb 100644 --- a/halo2_proofs/src/circuit/floor_planner/v1.rs +++ b/halo2_proofs/src/circuit/floor_planner/v1.rs @@ -517,13 +517,17 @@ mod tests { impl Circuit for MyCircuit { type Config = Column; type FloorPlanner = super::V1; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { MyCircuit {} } - fn configure(meta: &mut crate::plonk::ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut crate::plonk::ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { meta.advice_column() } diff --git a/halo2_proofs/src/dev.rs b/halo2_proofs/src/dev.rs index b6b800b6d1..c28d124673 100644 --- a/halo2_proofs/src/dev.rs +++ b/halo2_proofs/src/dev.rs @@ -208,6 +208,7 @@ impl Mul for Value { /// impl Circuit for MyCircuit { /// type Config = MyConfig; /// type FloorPlanner = SimpleFloorPlanner; +/// #[cfg(feature = "circuit-params")] /// type Params = (); /// /// fn without_witnesses(&self) -> Self { @@ -602,7 +603,11 @@ impl + Ord> MockProver { let n = 1 << k; let mut cs = ConstraintSystem::default(); - let config = ConcreteCircuit::configure_with_params(&mut cs, &circuit.params()); + let config = ConcreteCircuit::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + &circuit.params(), + ); let cs = cs; assert!( @@ -1537,9 +1542,13 @@ mod tests { impl Circuit for FaultyCircuit { type Config = FaultyCircuitConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let a = meta.advice_column(); let b = meta.advice_column(); let q = meta.selector(); @@ -1624,9 +1633,13 @@ mod tests { impl Circuit for FaultyCircuit { type Config = FaultyCircuitConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let a = meta.advice_column(); let q = meta.complex_selector(); let table = meta.instance_column(); @@ -1794,9 +1807,13 @@ mod tests { impl Circuit for FaultyCircuit { type Config = FaultyCircuitConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let a = meta.advice_column(); let q = meta.complex_selector(); let table = meta.lookup_table_column(); @@ -1929,9 +1946,13 @@ mod tests { impl Circuit for FaultyCircuit { type Config = FaultyCircuitConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); - fn configure(meta: &mut ConstraintSystem) -> Self::Config { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> Self::Config { let a = meta.advice_column(); let b = meta.advice_column(); let c = meta.advice_column(); diff --git a/halo2_proofs/src/dev/cost.rs b/halo2_proofs/src/dev/cost.rs index 6f3c6a11b6..0024ae564f 100644 --- a/halo2_proofs/src/dev/cost.rs +++ b/halo2_proofs/src/dev/cost.rs @@ -150,7 +150,11 @@ impl> CircuitCost Self { // Collect the layout details. let mut cs = ConstraintSystem::default(); - let config = ConcreteCircuit::configure_with_params(&mut cs, &circuit.params()); + let config = ConcreteCircuit::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + &circuit.params(), + ); let mut assembly = Assembly { selectors: vec![vec![false; 1 << k]; cs.num_selectors], }; diff --git a/halo2_proofs/src/dev/gates.rs b/halo2_proofs/src/dev/gates.rs index ca882f2634..4e8968854d 100644 --- a/halo2_proofs/src/dev/gates.rs +++ b/halo2_proofs/src/dev/gates.rs @@ -49,6 +49,7 @@ struct Gate { /// impl Circuit for MyCircuit { /// type Config = MyConfig; /// type FloorPlanner = SimpleFloorPlanner; +/// #[cfg(feature = "circuit-params")] /// type Params = (); /// /// fn without_witnesses(&self) -> Self { @@ -104,10 +105,16 @@ pub struct CircuitGates { impl CircuitGates { /// Collects the gates from within the circuit. - pub fn collect>(params: &C::Params) -> Self { + pub fn collect>( + #[cfg(feature = "circuit-params")] params: &C::Params, + ) -> Self { // Collect the graph details. let mut cs = ConstraintSystem::default(); - let _ = C::configure_with_params(&mut cs, params); + let _ = C::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + params, + ); let gates = cs .gates diff --git a/halo2_proofs/src/dev/graph.rs b/halo2_proofs/src/dev/graph.rs index 5a43313dea..a5feee125e 100644 --- a/halo2_proofs/src/dev/graph.rs +++ b/halo2_proofs/src/dev/graph.rs @@ -22,7 +22,11 @@ pub fn circuit_dot_graph>( ) -> String { // Collect the graph details. let mut cs = ConstraintSystem::default(); - let config = ConcreteCircuit::configure(&mut cs); + let config = ConcreteCircuit::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + &circuit.params(), + ); let mut graph = Graph::default(); ConcreteCircuit::FloorPlanner::synthesize(&mut graph, circuit, config, cs.constants).unwrap(); diff --git a/halo2_proofs/src/dev/graph/layout.rs b/halo2_proofs/src/dev/graph/layout.rs index 0f2e67a81d..2883a1fd3e 100644 --- a/halo2_proofs/src/dev/graph/layout.rs +++ b/halo2_proofs/src/dev/graph/layout.rs @@ -97,7 +97,11 @@ impl CircuitLayout { let n = 1 << k; // Collect the layout details. let mut cs = ConstraintSystem::default(); - let config = ConcreteCircuit::configure(&mut cs); + let config = ConcreteCircuit::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + &circuit.params(), + ); let mut layout = Layout::new(k, n, cs.num_selectors); ConcreteCircuit::FloorPlanner::synthesize( &mut layout, diff --git a/halo2_proofs/src/plonk.rs b/halo2_proofs/src/plonk.rs index 758eb46adb..7ec0d70a91 100644 --- a/halo2_proofs/src/plonk.rs +++ b/halo2_proofs/src/plonk.rs @@ -101,12 +101,16 @@ where pub fn read>( reader: &mut R, format: SerdeFormat, - params: &ConcreteCircuit::Params, + #[cfg(feature = "circuit-params")] params: &ConcreteCircuit::Params, ) -> io::Result { let mut k = [0u8; 4]; reader.read_exact(&mut k)?; let k = u32::from_be_bytes(k); - let (domain, cs, _) = keygen::create_domain::(k, params); + let (domain, cs, _) = keygen::create_domain::( + k, + #[cfg(feature = "circuit-params")] + params, + ); let mut num_fixed_columns = [0u8; 4]; reader.read_exact(&mut num_fixed_columns)?; let num_fixed_columns = u32::from_be_bytes(num_fixed_columns); @@ -151,9 +155,14 @@ where pub fn from_bytes>( mut bytes: &[u8], format: SerdeFormat, - params: &ConcreteCircuit::Params, + #[cfg(feature = "circuit-params")] params: &ConcreteCircuit::Params, ) -> io::Result { - Self::read::<_, ConcreteCircuit>(&mut bytes, format, params) + Self::read::<_, ConcreteCircuit>( + &mut bytes, + format, + #[cfg(feature = "circuit-params")] + params, + ) } } @@ -337,9 +346,14 @@ where pub fn read>( reader: &mut R, format: SerdeFormat, - params: &ConcreteCircuit::Params, + #[cfg(feature = "circuit-params")] params: &ConcreteCircuit::Params, ) -> io::Result { - let vk = VerifyingKey::::read::(reader, format, params)?; + let vk = VerifyingKey::::read::( + reader, + format, + #[cfg(feature = "circuit-params")] + params, + )?; let l0 = Polynomial::read(reader, format)?; let l_last = Polynomial::read(reader, format)?; let l_active_row = Polynomial::read(reader, format)?; @@ -372,9 +386,14 @@ where pub fn from_bytes>( mut bytes: &[u8], format: SerdeFormat, - params: &ConcreteCircuit::Params, + #[cfg(feature = "circuit-params")] params: &ConcreteCircuit::Params, ) -> io::Result { - Self::read::<_, ConcreteCircuit>(&mut bytes, format, params) + Self::read::<_, ConcreteCircuit>( + &mut bytes, + format, + #[cfg(feature = "circuit-params")] + params, + ) } } diff --git a/halo2_proofs/src/plonk/circuit.rs b/halo2_proofs/src/plonk/circuit.rs index 8fc7bf90b5..a9d2e28ba9 100644 --- a/halo2_proofs/src/plonk/circuit.rs +++ b/halo2_proofs/src/plonk/circuit.rs @@ -664,7 +664,8 @@ pub trait Circuit { /// The floor planner used for this circuit. This is an associated type of the /// `Circuit` trait because its behaviour is circuit-critical. type FloorPlanner: FloorPlanner; - /// Optional circuit configuration parameters. + /// Optional circuit configuration parameters. Requires the `circuit-params` feature. + #[cfg(feature = "circuit-params")] type Params: Default; /// Returns a copy of this circuit with no witness values (i.e. all witnesses set to @@ -672,21 +673,20 @@ pub trait Circuit { fn without_witnesses(&self) -> Self; /// Returns a reference to the parameters that should be used to configure the circuit. + /// Requires the `circuit-params` feature. + #[cfg(feature = "circuit-params")] fn params(&self) -> Self::Params { Self::Params::default() } /// The circuit is given an opportunity to describe the exact gate - /// arrangement, column arrangement, etc. - fn configure_with_params( - meta: &mut ConstraintSystem, - _params: &Self::Params, - ) -> Self::Config { - Self::configure(meta) - } + /// arrangement, column arrangement, etc. Takes a runtime parameter. + #[cfg(feature = "circuit-params")] + fn configure(meta: &mut ConstraintSystem, params: &Self::Params) -> Self::Config; - /// Configuration function without parameters. This method is usually only called via the default - /// `configure_with_params` implementation for backwards-compatibility purposes. + /// The circuit is given an opportunity to describe the exact gate + /// arrangement, column arrangement, etc. + #[cfg(not(feature = "circuit-params"))] fn configure(meta: &mut ConstraintSystem) -> Self::Config; /// Given the provided `cs`, synthesize the circuit. The concrete type of diff --git a/halo2_proofs/src/plonk/keygen.rs b/halo2_proofs/src/plonk/keygen.rs index 3363b03f00..19093c17ae 100644 --- a/halo2_proofs/src/plonk/keygen.rs +++ b/halo2_proofs/src/plonk/keygen.rs @@ -26,7 +26,7 @@ use crate::{ pub(crate) fn create_domain( k: u32, - params: &ConcreteCircuit::Params, + #[cfg(feature = "circuit-params")] params: &ConcreteCircuit::Params, ) -> ( EvaluationDomain, ConstraintSystem, @@ -37,7 +37,11 @@ where ConcreteCircuit: Circuit, { let mut cs = ConstraintSystem::default(); - let config = ConcreteCircuit::configure_with_params(&mut cs, params); + let config = ConcreteCircuit::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + params, + ); let degree = cs.degree(); @@ -211,7 +215,11 @@ where ConcreteCircuit: Circuit, C::Scalar: FromUniformBytes<64>, { - let (domain, cs, config) = create_domain::(params.k(), &circuit.params()); + let (domain, cs, config) = create_domain::( + params.k(), + #[cfg(feature = "circuit-params")] + &circuit.params(), + ); if (params.n() as usize) < cs.minimum_rows() { return Err(Error::not_enough_rows_available(params.k())); @@ -272,7 +280,11 @@ where ConcreteCircuit: Circuit, { let mut cs = ConstraintSystem::default(); - let config = ConcreteCircuit::configure_with_params(&mut cs, &circuit.params()); + let config = ConcreteCircuit::configure( + &mut cs, + #[cfg(feature = "circuit-params")] + &circuit.params(), + ); let cs = cs; diff --git a/halo2_proofs/src/plonk/prover.rs b/halo2_proofs/src/plonk/prover.rs index 5840f25b95..40b5a1d24e 100644 --- a/halo2_proofs/src/plonk/prover.rs +++ b/halo2_proofs/src/plonk/prover.rs @@ -68,7 +68,11 @@ where let domain = &pk.vk.domain; let mut meta = ConstraintSystem::default(); - let config = ConcreteCircuit::configure_with_params(&mut meta, &circuits[0].params()); + let config = ConcreteCircuit::configure( + &mut meta, + #[cfg(feature = "circuit-params")] + &circuits[0].params(), + ); // Selector optimizations cannot be applied here; use the ConstraintSystem // from the verification key. diff --git a/halo2_proofs/tests/plonk_api.rs b/halo2_proofs/tests/plonk_api.rs index 4bc69e022c..155a94453e 100644 --- a/halo2_proofs/tests/plonk_api.rs +++ b/halo2_proofs/tests/plonk_api.rs @@ -265,6 +265,7 @@ fn plonk_api() { impl Circuit for MyCircuit { type Config = PlonkConfig; type FloorPlanner = SimpleFloorPlanner; + #[cfg(feature = "circuit-params")] type Params = (); fn without_witnesses(&self) -> Self { @@ -274,7 +275,10 @@ fn plonk_api() { } } - fn configure(meta: &mut ConstraintSystem) -> PlonkConfig { + fn configure( + meta: &mut ConstraintSystem, + #[cfg(feature = "circuit-params")] _: &(), + ) -> PlonkConfig { let e = meta.advice_column(); let a = meta.advice_column(); let b = meta.advice_column();