diff --git a/evm/src/fixed_recursive_verifier.rs b/evm/src/fixed_recursive_verifier.rs index 79848eca..307c4a13 100644 --- a/evm/src/fixed_recursive_verifier.rs +++ b/evm/src/fixed_recursive_verifier.rs @@ -831,6 +831,7 @@ where buffer.write_prover_only_circuit_data( &wrapper.circuit.prover_only, generator_serializer, + &wrapper.circuit.common, )?; buffer.write_verifier_only_circuit_data(&wrapper.circuit.verifier_only)?; buffer.write_target_proof_with_public_inputs(&wrapper.proof_with_pis_target)?; diff --git a/plonky2/examples/square_root.rs b/plonky2/examples/square_root.rs index 4433cee3..48883e3f 100644 --- a/plonky2/examples/square_root.rs +++ b/plonky2/examples/square_root.rs @@ -52,7 +52,7 @@ impl, const D: usize> SimpleGenerator out_buffer.set_target(self.x, x); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.x)?; dst.write_target(self.x_squared) } diff --git a/plonky2/src/gadgets/arithmetic.rs b/plonky2/src/gadgets/arithmetic.rs index 7ee5913e..d245aef5 100644 --- a/plonky2/src/gadgets/arithmetic.rs +++ b/plonky2/src/gadgets/arithmetic.rs @@ -399,7 +399,7 @@ impl, const D: usize> SimpleGenerator for Equ out_buffer.set_target(self.inv, inv); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.x)?; dst.write_target(self.y)?; dst.write_target_bool(self.equal)?; diff --git a/plonky2/src/gadgets/arithmetic_extension.rs b/plonky2/src/gadgets/arithmetic_extension.rs index 3240c5f2..11e3cc83 100644 --- a/plonky2/src/gadgets/arithmetic_extension.rs +++ b/plonky2/src/gadgets/arithmetic_extension.rs @@ -522,7 +522,7 @@ impl, const D: usize> SimpleGenerator out_buffer.set_extension_target(self.quotient, quotient) } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target_ext(self.numerator)?; dst.write_target_ext(self.denominator)?; dst.write_target_ext(self.quotient) diff --git a/plonky2/src/gadgets/range_check.rs b/plonky2/src/gadgets/range_check.rs index b894f37d..c7bfc6a5 100644 --- a/plonky2/src/gadgets/range_check.rs +++ b/plonky2/src/gadgets/range_check.rs @@ -79,7 +79,7 @@ impl, const D: usize> SimpleGenerator for Low out_buffer.set_target(self.high, F::from_canonical_u64(high)); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.integer)?; dst.write_usize(self.n_log)?; dst.write_target(self.low)?; diff --git a/plonky2/src/gadgets/split_base.rs b/plonky2/src/gadgets/split_base.rs index 82fed22c..c300723e 100644 --- a/plonky2/src/gadgets/split_base.rs +++ b/plonky2/src/gadgets/split_base.rs @@ -110,7 +110,7 @@ impl, const B: usize, const D: usize> SimpleGenerat out_buffer.set_target(Target::wire(self.row, BaseSumGate::::WIRE_SUM), sum); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_target_bool_vec(&self.limbs) } diff --git a/plonky2/src/gadgets/split_join.rs b/plonky2/src/gadgets/split_join.rs index 8dc28f98..b8daeec8 100644 --- a/plonky2/src/gadgets/split_join.rs +++ b/plonky2/src/gadgets/split_join.rs @@ -87,7 +87,7 @@ impl, const D: usize> SimpleGenerator for Spl ); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.integer)?; dst.write_target_vec(&self.bits) } @@ -142,7 +142,7 @@ impl, const D: usize> SimpleGenerator for Wir ); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.integer)?; dst.write_usize_vec(&self.gates)?; dst.write_usize(self.num_limbs) diff --git a/plonky2/src/gates/arithmetic_base.rs b/plonky2/src/gates/arithmetic_base.rs index 3e238dd4..dae84fb1 100644 --- a/plonky2/src/gates/arithmetic_base.rs +++ b/plonky2/src/gates/arithmetic_base.rs @@ -60,7 +60,7 @@ impl, const D: usize> Gate for ArithmeticGate format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_ops) } @@ -221,7 +221,7 @@ impl, const D: usize> SimpleGenerator out_buffer.set_target(output_target, computed_output) } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_field(self.const_0)?; dst.write_field(self.const_1)?; diff --git a/plonky2/src/gates/arithmetic_extension.rs b/plonky2/src/gates/arithmetic_extension.rs index 352aeadf..bd21b22c 100644 --- a/plonky2/src/gates/arithmetic_extension.rs +++ b/plonky2/src/gates/arithmetic_extension.rs @@ -56,7 +56,7 @@ impl, const D: usize> Gate for ArithmeticExte format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_ops) } @@ -214,7 +214,7 @@ impl, const D: usize> SimpleGenerator out_buffer.set_extension_target(output_target, computed_output) } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_field(self.const_0)?; dst.write_field(self.const_1)?; diff --git a/plonky2/src/gates/base_sum.rs b/plonky2/src/gates/base_sum.rs index 3e00940a..5d999e92 100644 --- a/plonky2/src/gates/base_sum.rs +++ b/plonky2/src/gates/base_sum.rs @@ -55,7 +55,7 @@ impl, const D: usize, const B: usize> Gate fo format!("{self:?} + Base: {B}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_limbs) } @@ -211,7 +211,7 @@ impl, const B: usize, const D: usize> SimpleGenerat } } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_usize(self.num_limbs) } diff --git a/plonky2/src/gates/constant.rs b/plonky2/src/gates/constant.rs index c759ee91..4a41ab9f 100644 --- a/plonky2/src/gates/constant.rs +++ b/plonky2/src/gates/constant.rs @@ -43,7 +43,7 @@ impl, const D: usize> Gate for ConstantGate { format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_consts) } diff --git a/plonky2/src/gates/coset_interpolation.rs b/plonky2/src/gates/coset_interpolation.rs index c5d6bfbf..ea0b00e3 100644 --- a/plonky2/src/gates/coset_interpolation.rs +++ b/plonky2/src/gates/coset_interpolation.rs @@ -169,7 +169,7 @@ impl, const D: usize> Gate for CosetInterpola format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.subgroup_bits)?; dst.write_usize(self.degree)?; dst.write_usize(self.barycentric_weights.len())?; @@ -497,9 +497,9 @@ impl, const D: usize> SimpleGenerator out_buffer.set_ext_wires(evaluation_value_wires, computed_eval); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; - self.gate.serialize(dst) + self.gate.serialize(dst, _cd) } fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData) -> IoResult { diff --git a/plonky2/src/gates/exponentiation.rs b/plonky2/src/gates/exponentiation.rs index 7cb18f59..38053e65 100644 --- a/plonky2/src/gates/exponentiation.rs +++ b/plonky2/src/gates/exponentiation.rs @@ -76,7 +76,7 @@ impl, const D: usize> Gate for Exponentiation format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_power_bits) } @@ -295,9 +295,9 @@ impl, const D: usize> SimpleGenerator out_buffer.set_wire(output_wire, intermediate_values[num_power_bits - 1]); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; - self.gate.serialize(dst) + self.gate.serialize(dst, _cd) } fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData) -> IoResult { diff --git a/plonky2/src/gates/gate.rs b/plonky2/src/gates/gate.rs index 71b1b64c..6783c38f 100644 --- a/plonky2/src/gates/gate.rs +++ b/plonky2/src/gates/gate.rs @@ -29,7 +29,7 @@ use crate::util::serialization::{Buffer, IoResult}; pub trait Gate, const D: usize>: 'static + Send + Sync { fn id(&self) -> String; - fn serialize(&self, dst: &mut Vec) -> IoResult<()>; + fn serialize(&self, dst: &mut Vec, cd: &CommonCircuitData) -> IoResult<()>; fn deserialize(src: &mut Buffer, cd: &CommonCircuitData) -> IoResult where diff --git a/plonky2/src/gates/lookup.rs b/plonky2/src/gates/lookup.rs index e7d24057..5b27abf8 100644 --- a/plonky2/src/gates/lookup.rs +++ b/plonky2/src/gates/lookup.rs @@ -60,7 +60,7 @@ impl, const D: usize> Gate for LookupGate { format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_slots)?; dst.write_lut(&self.lut) } @@ -184,7 +184,7 @@ impl, const D: usize> SimpleGenerator for Loo out_buffer.set_target(out_wire, output_val); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_lut(&self.lut)?; dst.write_usize(self.slot_nb) diff --git a/plonky2/src/gates/lookup_table.rs b/plonky2/src/gates/lookup_table.rs index 706ce3e6..e80e1898 100644 --- a/plonky2/src/gates/lookup_table.rs +++ b/plonky2/src/gates/lookup_table.rs @@ -72,7 +72,7 @@ impl, const D: usize> Gate for LookupTableGat format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_slots)?; dst.write_lut(&self.lut)?; dst.write_usize(self.last_lut_row) @@ -202,7 +202,7 @@ impl, const D: usize> SimpleGenerator for Loo } } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_lut(&self.lut)?; dst.write_usize(self.slot_nb)?; diff --git a/plonky2/src/gates/multiplication_extension.rs b/plonky2/src/gates/multiplication_extension.rs index ffed12f8..ed330e85 100644 --- a/plonky2/src/gates/multiplication_extension.rs +++ b/plonky2/src/gates/multiplication_extension.rs @@ -53,7 +53,7 @@ impl, const D: usize> Gate for MulExtensionGa format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_ops) } @@ -191,7 +191,7 @@ impl, const D: usize> SimpleGenerator out_buffer.set_extension_target(output_target, computed_output) } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_field(self.const_0)?; dst.write_usize(self.i) diff --git a/plonky2/src/gates/noop.rs b/plonky2/src/gates/noop.rs index 7ce5e92f..f1baae52 100644 --- a/plonky2/src/gates/noop.rs +++ b/plonky2/src/gates/noop.rs @@ -19,7 +19,7 @@ impl, const D: usize> Gate for NoopGate { "NoopGate".into() } - fn serialize(&self, _dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, _dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { Ok(()) } diff --git a/plonky2/src/gates/poseidon.rs b/plonky2/src/gates/poseidon.rs index 4eba0eb9..0f68ea99 100644 --- a/plonky2/src/gates/poseidon.rs +++ b/plonky2/src/gates/poseidon.rs @@ -100,7 +100,7 @@ impl, const D: usize> Gate for PoseidonGate") } - fn serialize(&self, _dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, _dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { Ok(()) } @@ -513,7 +513,7 @@ impl + Poseidon, const D: usize> SimpleGenerator) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row) } diff --git a/plonky2/src/gates/poseidon_mds.rs b/plonky2/src/gates/poseidon_mds.rs index ae796e67..59bbf48b 100644 --- a/plonky2/src/gates/poseidon_mds.rs +++ b/plonky2/src/gates/poseidon_mds.rs @@ -119,7 +119,7 @@ impl + Poseidon, const D: usize> Gate for Pos format!("{self:?}") } - fn serialize(&self, _dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, _dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { Ok(()) } @@ -251,7 +251,7 @@ impl + Poseidon, const D: usize> SimpleGenerator) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row) } diff --git a/plonky2/src/gates/public_input.rs b/plonky2/src/gates/public_input.rs index 0009d4ac..1d081819 100644 --- a/plonky2/src/gates/public_input.rs +++ b/plonky2/src/gates/public_input.rs @@ -32,7 +32,7 @@ impl, const D: usize> Gate for PublicInputGat "PublicInputGate".into() } - fn serialize(&self, _dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, _dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { Ok(()) } diff --git a/plonky2/src/gates/random_access.rs b/plonky2/src/gates/random_access.rs index e0aae2a7..38ba5a47 100644 --- a/plonky2/src/gates/random_access.rs +++ b/plonky2/src/gates/random_access.rs @@ -122,7 +122,7 @@ impl, const D: usize> Gate for RandomAccessGa format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.bits)?; dst.write_usize(self.num_copies)?; dst.write_usize(self.num_extra_constants)?; @@ -394,10 +394,10 @@ impl, const D: usize> SimpleGenerator } } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_usize(self.copy)?; - self.gate.serialize(dst) + self.gate.serialize(dst, _cd) } fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData) -> IoResult { diff --git a/plonky2/src/gates/reducing.rs b/plonky2/src/gates/reducing.rs index b72bcc42..e0587f02 100644 --- a/plonky2/src/gates/reducing.rs +++ b/plonky2/src/gates/reducing.rs @@ -61,7 +61,7 @@ impl, const D: usize> Gate for ReducingGate) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_coeffs)?; Ok(()) } @@ -226,9 +226,9 @@ impl, const D: usize> SimpleGenerator for Red out_buffer.set_extension_target(output, acc); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; - as Gate>::serialize(&self.gate, dst) + as Gate>::serialize(&self.gate, dst, _cd) } fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData) -> IoResult { diff --git a/plonky2/src/gates/reducing_extension.rs b/plonky2/src/gates/reducing_extension.rs index 021188ea..2c4e5aa6 100644 --- a/plonky2/src/gates/reducing_extension.rs +++ b/plonky2/src/gates/reducing_extension.rs @@ -64,7 +64,7 @@ impl, const D: usize> Gate for ReducingExtens format!("{self:?}") } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.num_coeffs)?; Ok(()) } @@ -220,9 +220,9 @@ impl, const D: usize> SimpleGenerator for Red } } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; - as Gate>::serialize(&self.gate, dst) + as Gate>::serialize(&self.gate, dst, _cd) } fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData) -> IoResult { diff --git a/plonky2/src/iop/generator.rs b/plonky2/src/iop/generator.rs index 30cfdad2..a0cd8e76 100644 --- a/plonky2/src/iop/generator.rs +++ b/plonky2/src/iop/generator.rs @@ -112,7 +112,7 @@ pub trait WitnessGenerator, const D: usize>: /// run next time a target in its watch list is populated. fn run(&self, witness: &PartitionWitness, out_buffer: &mut GeneratedValues) -> bool; - fn serialize(&self, dst: &mut Vec) -> IoResult<()>; + fn serialize(&self, dst: &mut Vec, cd: &CommonCircuitData) -> IoResult<()>; fn deserialize(src: &mut Buffer, cd: &CommonCircuitData) -> IoResult where @@ -213,7 +213,7 @@ pub trait SimpleGenerator, const D: usize>: } } - fn serialize(&self, dst: &mut Vec) -> IoResult<()>; + fn serialize(&self, dst: &mut Vec, cd: &CommonCircuitData) -> IoResult<()>; fn deserialize(src: &mut Buffer, cd: &CommonCircuitData) -> IoResult where @@ -250,8 +250,8 @@ impl, SG: SimpleGenerator, const D: usize> Wi } } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { - self.inner.serialize(dst) + fn serialize(&self, dst: &mut Vec, cd: &CommonCircuitData) -> IoResult<()> { + self.inner.serialize(dst, cd) } fn deserialize(src: &mut Buffer, cd: &CommonCircuitData) -> IoResult { @@ -283,7 +283,7 @@ impl, const D: usize> SimpleGenerator for Cop out_buffer.set_target(self.dst, value); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.src)?; dst.write_target(self.dst) } @@ -315,7 +315,7 @@ impl, const D: usize> SimpleGenerator for Ran out_buffer.set_target(self.target, random_value); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.target) } @@ -353,7 +353,7 @@ impl, const D: usize> SimpleGenerator for Non out_buffer.set_target(self.dummy, dummy_value); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target(self.to_test)?; dst.write_target(self.dummy) } @@ -393,7 +393,7 @@ impl, const D: usize> SimpleGenerator for Con out_buffer.set_target(Target::wire(self.row, self.wire_index), self.constant); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_usize(self.row)?; dst.write_usize(self.constant_index)?; dst.write_usize(self.wire_index)?; diff --git a/plonky2/src/recursion/dummy_circuit.rs b/plonky2/src/recursion/dummy_circuit.rs index aa1eb3c4..897abb75 100644 --- a/plonky2/src/recursion/dummy_circuit.rs +++ b/plonky2/src/recursion/dummy_circuit.rs @@ -234,7 +234,7 @@ where out_buffer.set_verifier_data_target(&self.verifier_data_target, &self.verifier_data); } - fn serialize(&self, dst: &mut Vec) -> IoResult<()> { + fn serialize(&self, dst: &mut Vec, _cd: &CommonCircuitData) -> IoResult<()> { dst.write_target_proof_with_public_inputs(&self.proof_with_pis_target)?; dst.write_proof_with_public_inputs(&self.proof_with_pis)?; dst.write_target_verifier_circuit(&self.verifier_data_target)?; diff --git a/plonky2/src/util/serialization/gate_serialization.rs b/plonky2/src/util/serialization/gate_serialization.rs index 3313937f..2ed43990 100644 --- a/plonky2/src/util/serialization/gate_serialization.rs +++ b/plonky2/src/util/serialization/gate_serialization.rs @@ -6,12 +6,13 @@ use crate::plonk::circuit_data::CommonCircuitData; use crate::util::serialization::{Buffer, IoResult}; pub trait GateSerializer, const D: usize> { - fn read_gate( + fn read_gate(&self, buf: &mut Buffer, cd: &CommonCircuitData) -> IoResult>; + fn write_gate( &self, - buf: &mut Buffer, - common: &CommonCircuitData, - ) -> IoResult>; - fn write_gate(&self, buf: &mut Vec, gate: &GateRef) -> IoResult<()>; + buf: &mut Vec, + gate: &GateRef, + cd: &CommonCircuitData, + ) -> IoResult<()>; } #[macro_export] @@ -61,11 +62,16 @@ macro_rules! impl_gate_serializer { read_gate_impl!(buf, tag, common, $($gate_types),+) } - fn write_gate(&self, buf: &mut Vec, gate: &$crate::gates::gate::GateRef) -> $crate::util::serialization::IoResult<()> { + fn write_gate( + &self, + buf: &mut Vec, + gate: &$crate::gates::gate::GateRef, + common: &$crate::plonk::circuit_data::CommonCircuitData, + ) -> $crate::util::serialization::IoResult<()> { let tag = get_gate_tag_impl!(gate, $($gate_types),+)?; $crate::util::serialization::Write::write_u32(buf, tag)?; - gate.0.serialize(buf)?; + gate.0.serialize(buf, common)?; Ok(()) } }; diff --git a/plonky2/src/util/serialization/generator_serialization.rs b/plonky2/src/util/serialization/generator_serialization.rs index fb9357b8..a7377de8 100644 --- a/plonky2/src/util/serialization/generator_serialization.rs +++ b/plonky2/src/util/serialization/generator_serialization.rs @@ -18,6 +18,7 @@ pub trait WitnessGeneratorSerializer, const D: usiz &self, buf: &mut Vec, generator: &WitnessGeneratorRef, + cd: &CommonCircuitData, ) -> IoResult<()>; } @@ -60,10 +61,6 @@ macro_rules! get_generator_tag_impl { /// To serialize a list of generators used for a circuit, /// this macro should be called with a struct on which to implement /// this as first argument, followed by all the targeted generators. -/// -/// ***NOTE:*** If you need to include `DummyProofGenerator`, you **MUST** -/// place it at the *beginning* of the generators list, right after -/// the serializer struct. macro_rules! impl_generator_serializer { ($target:ty, $($generator_types:ty),+) => { fn read_generator( @@ -79,11 +76,12 @@ macro_rules! impl_generator_serializer { &self, buf: &mut Vec, generator: &$crate::iop::generator::WitnessGeneratorRef, + common: &$crate::plonk::circuit_data::CommonCircuitData, ) -> $crate::util::serialization::IoResult<()> { let tag = get_generator_tag_impl!(generator, $($generator_types),+)?; $crate::util::serialization::Write::write_u32(buf, tag)?; - generator.0.serialize(buf)?; + generator.0.serialize(buf, common)?; Ok(()) } }; @@ -132,13 +130,13 @@ pub mod default { { impl_generator_serializer! { DefaultGeneratorSerializer, - DummyProofGenerator, ArithmeticBaseGenerator, ArithmeticExtensionGenerator, BaseSplitGenerator<2>, BaseSumGenerator<2>, ConstantGenerator, CopyGenerator, + DummyProofGenerator, EqualityGenerator, ExponentiationGenerator, InterpolationGenerator, diff --git a/plonky2/src/util/serialization/mod.rs b/plonky2/src/util/serialization/mod.rs index 875929fa..79c11c40 100644 --- a/plonky2/src/util/serialization/mod.rs +++ b/plonky2/src/util/serialization/mod.rs @@ -1697,12 +1697,14 @@ pub trait Write { &mut self, gate: &GateRef, gate_serializer: &dyn GateSerializer, + common_data: &CommonCircuitData, ) -> IoResult<()>; fn write_generator, const D: usize>( &mut self, generator: &WitnessGeneratorRef, generator_serializer: &dyn WitnessGeneratorSerializer, + common_data: &CommonCircuitData, ) -> IoResult<()>; fn write_selectors_info(&mut self, selectors_info: &SelectorsInfo) -> IoResult<()> { @@ -1785,7 +1787,7 @@ pub trait Write { self.write_usize(gates.len())?; for gate in gates.iter() { - self.write_gate::(gate, gate_serializer)?; + self.write_gate::(gate, gate_serializer, common_data)?; } Ok(()) @@ -1802,7 +1804,11 @@ pub trait Write { generator_serializer: &dyn WitnessGeneratorSerializer, ) -> IoResult<()> { self.write_common_circuit_data(&circuit_data.common, gate_serializer)?; - self.write_prover_only_circuit_data(&circuit_data.prover_only, generator_serializer)?; + self.write_prover_only_circuit_data( + &circuit_data.prover_only, + generator_serializer, + &circuit_data.common, + )?; self.write_verifier_only_circuit_data(&circuit_data.verifier_only) } @@ -1814,6 +1820,7 @@ pub trait Write { &mut self, prover_only_circuit_data: &ProverOnlyCircuitData, generator_serializer: &dyn WitnessGeneratorSerializer, + common_data: &CommonCircuitData, ) -> IoResult<()> { let ProverOnlyCircuitData { generators, @@ -1831,7 +1838,7 @@ pub trait Write { self.write_usize(generators.len())?; for generator in generators.iter() { - self.write_generator::(generator, generator_serializer)?; + self.write_generator::(generator, generator_serializer, common_data)?; } self.write_usize(generator_indices_by_watches.len())?; @@ -1891,7 +1898,11 @@ pub trait Write { generator_serializer: &dyn WitnessGeneratorSerializer, ) -> IoResult<()> { self.write_common_circuit_data(&prover_circuit_data.common, gate_serializer)?; - self.write_prover_only_circuit_data(&prover_circuit_data.prover_only, generator_serializer) + self.write_prover_only_circuit_data( + &prover_circuit_data.prover_only, + generator_serializer, + &prover_circuit_data.common, + ) } fn write_verifier_only_circuit_data< @@ -2118,16 +2129,18 @@ impl Write for Vec { &mut self, gate: &GateRef, gate_serializer: &dyn GateSerializer, + common_data: &CommonCircuitData, ) -> IoResult<()> { - gate_serializer.write_gate(self, gate) + gate_serializer.write_gate(self, gate, common_data) } fn write_generator, const D: usize>( &mut self, generator: &WitnessGeneratorRef, generator_serializer: &dyn WitnessGeneratorSerializer, + common_data: &CommonCircuitData, ) -> IoResult<()> { - generator_serializer.write_generator(self, generator) + generator_serializer.write_generator(self, generator, common_data) } }