Rename cd to common_data for consistency

Cf review
This commit is contained in:
Robin Salen 2023-07-13 19:34:32 -04:00
parent cbb3da15c9
commit 8b35fefb3b
No known key found for this signature in database
GPG Key ID: F98FD38F65687358
30 changed files with 228 additions and 187 deletions

View File

@ -248,18 +248,18 @@ where
fn test_serialization<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>(
proof: &ProofWithPublicInputs<F, C, D>,
vd: &VerifierOnlyCircuitData<C, D>,
cd: &CommonCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
) -> Result<()> {
let proof_bytes = proof.to_bytes();
info!("Proof length: {} bytes", proof_bytes.len());
let proof_from_bytes = ProofWithPublicInputs::from_bytes(proof_bytes, cd)?;
let proof_from_bytes = ProofWithPublicInputs::from_bytes(proof_bytes, common_data)?;
assert_eq!(proof, &proof_from_bytes);
let now = std::time::Instant::now();
let compressed_proof = proof.clone().compress(&vd.circuit_digest, cd)?;
let compressed_proof = proof.clone().compress(&vd.circuit_digest, common_data)?;
let decompressed_compressed_proof = compressed_proof
.clone()
.decompress(&vd.circuit_digest, cd)?;
.decompress(&vd.circuit_digest, common_data)?;
info!("{:.4}s to compress proof", now.elapsed().as_secs_f64());
assert_eq!(proof, &decompressed_compressed_proof);
@ -269,11 +269,11 @@ fn test_serialization<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>,
compressed_proof_bytes.len()
);
let compressed_proof_from_bytes =
CompressedProofWithPublicInputs::from_bytes(compressed_proof_bytes, cd)?;
CompressedProofWithPublicInputs::from_bytes(compressed_proof_bytes, common_data)?;
assert_eq!(compressed_proof, compressed_proof_from_bytes);
let gate_serializer = DefaultGateSerializer;
let common_data_bytes = cd
let common_data_bytes = common_data
.to_bytes(&gate_serializer)
.map_err(|_| anyhow::Error::msg("CommonCircuitData serialization failed."))?;
info!(
@ -283,7 +283,7 @@ fn test_serialization<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>,
let common_data_from_bytes =
CommonCircuitData::<F, D>::from_bytes(common_data_bytes, &gate_serializer)
.map_err(|_| anyhow::Error::msg("CommonCircuitData deserialization failed."))?;
assert_eq!(cd, &common_data_from_bytes);
assert_eq!(common_data, &common_data_from_bytes);
Ok(())
}
@ -312,35 +312,35 @@ pub fn benchmark_function(
};
// Start with a dummy proof of specified size
let inner = dummy_proof_function(config, log2_inner_size)?;
let (_, _, cd) = &inner;
let (_, _, common_data) = &inner;
info!(
"Initial {} degree {} = 2^{}",
name,
cd.degree(),
cd.degree_bits()
common_data.degree(),
common_data.degree_bits()
);
// Recursively verify the proof
let middle = recursive_proof::<F, C, C, D>(&inner, config, None)?;
let (_, _, cd) = &middle;
let (_, _, common_data) = &middle;
info!(
"Single recursion {} degree {} = 2^{}",
name,
cd.degree(),
cd.degree_bits()
common_data.degree(),
common_data.degree_bits()
);
// Add a second layer of recursion to shrink the proof size further
let outer = recursive_proof::<F, C, C, D>(&middle, config, None)?;
let (proof, vd, cd) = &outer;
let (proof, vd, common_data) = &outer;
info!(
"Double recursion {} degree {} = 2^{}",
name,
cd.degree(),
cd.degree_bits()
common_data.degree(),
common_data.degree_bits()
);
test_serialization(proof, vd, cd)?;
test_serialization(proof, vd, common_data)?;
Ok(())
}

View File

@ -52,12 +52,12 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_target(self.x, x);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.x)?;
dst.write_target(self.x_squared)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let x = src.read_target()?;
let x_squared = src.read_target()?;
Ok(Self {

View File

@ -399,14 +399,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Equ
out_buffer.set_target(self.inv, inv);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.x)?;
dst.write_target(self.y)?;
dst.write_target_bool(self.equal)?;
dst.write_target(self.inv)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let x = src.read_target()?;
let y = src.read_target()?;
let equal = src.read_target_bool()?;

View File

@ -522,13 +522,13 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_extension_target(self.quotient, quotient)
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target_ext(self.numerator)?;
dst.write_target_ext(self.denominator)?;
dst.write_target_ext(self.quotient)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let numerator = src.read_target_ext()?;
let denominator = src.read_target_ext()?;
let quotient = src.read_target_ext()?;

View File

@ -79,14 +79,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Low
out_buffer.set_target(self.high, F::from_canonical_u64(high));
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.integer)?;
dst.write_usize(self.n_log)?;
dst.write_target(self.low)?;
dst.write_target(self.high)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let integer = src.read_target()?;
let n_log = src.read_usize()?;
let low = src.read_target()?;

View File

@ -110,12 +110,12 @@ impl<F: RichField + Extendable<D>, const B: usize, const D: usize> SimpleGenerat
out_buffer.set_target(Target::wire(self.row, BaseSumGate::<B>::WIRE_SUM), sum);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_target_bool_vec(&self.limbs)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let limbs = src.read_target_bool_vec()?;
Ok(Self { row, limbs })

View File

@ -87,12 +87,12 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Spl
);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.integer)?;
dst.write_target_vec(&self.bits)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let integer = src.read_target()?;
let bits = src.read_target_vec()?;
Ok(Self { integer, bits })
@ -142,13 +142,13 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Wir
);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.integer)?;
dst.write_usize_vec(&self.gates)?;
dst.write_usize(self.num_limbs)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let integer = src.read_target()?;
let gates = src.read_usize_vec()?;
let num_limbs = src.read_usize()?;

View File

@ -60,11 +60,11 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ArithmeticGate
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_ops)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_ops = src.read_usize()?;
Ok(Self { num_ops })
}
@ -221,14 +221,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_target(output_target, computed_output)
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_field(self.const_0)?;
dst.write_field(self.const_1)?;
dst.write_usize(self.i)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let const_0 = src.read_field()?;
let const_1 = src.read_field()?;

View File

@ -56,11 +56,11 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ArithmeticExte
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_ops)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_ops = src.read_usize()?;
Ok(Self { num_ops })
}
@ -214,14 +214,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_extension_target(output_target, computed_output)
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_field(self.const_0)?;
dst.write_field(self.const_1)?;
dst.write_usize(self.i)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let const_0 = src.read_field()?;
let const_1 = src.read_field()?;

View File

@ -55,11 +55,11 @@ impl<F: RichField + Extendable<D>, const D: usize, const B: usize> Gate<F, D> fo
format!("{self:?} + Base: {B}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_limbs)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_limbs = src.read_usize()?;
Ok(Self { num_limbs })
}
@ -211,12 +211,12 @@ impl<F: RichField + Extendable<D>, const B: usize, const D: usize> SimpleGenerat
}
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_usize(self.num_limbs)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let num_limbs = src.read_usize()?;
Ok(Self { row, num_limbs })

View File

@ -43,11 +43,11 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ConstantGate {
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_consts)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_consts = src.read_usize()?;
Ok(Self { num_consts })
}

View File

@ -169,14 +169,14 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for CosetInterpola
format!("{self:?}<D={D}>")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.subgroup_bits)?;
dst.write_usize(self.degree)?;
dst.write_usize(self.barycentric_weights.len())?;
dst.write_field_vec(&self.barycentric_weights)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let subgroup_bits = src.read_usize()?;
let degree = src.read_usize()?;
let length = src.read_usize()?;
@ -497,14 +497,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_ext_wires(evaluation_value_wires, computed_eval);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
self.gate.serialize(dst, _cd)
self.gate.serialize(dst, _common_data)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let gate = CosetInterpolationGate::deserialize(src, _cd)?;
let gate = CosetInterpolationGate::deserialize(src, _common_data)?;
Ok(Self::new(row, gate))
}
}

View File

@ -76,11 +76,11 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for Exponentiation
format!("{self:?}<D={D}>")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_power_bits)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_power_bits = src.read_usize()?;
Ok(Self::new(num_power_bits))
}
@ -295,14 +295,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_wire(output_wire, intermediate_values[num_power_bits - 1]);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
self.gate.serialize(dst, _cd)
self.gate.serialize(dst, _common_data)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let gate = ExponentiationGate::deserialize(src, _cd)?;
let gate = ExponentiationGate::deserialize(src, _common_data)?;
Ok(Self { row, gate })
}
}

View File

@ -29,9 +29,9 @@ use crate::util::serialization::{Buffer, IoResult};
pub trait Gate<F: RichField + Extendable<D>, const D: usize>: 'static + Send + Sync {
fn id(&self) -> String;
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()>;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()>;
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self>
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self>
where
Self: Sized;

View File

@ -59,9 +59,9 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for LookupGate {
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_slots)?;
for (i, lut) in cd.luts.iter().enumerate() {
for (i, lut) in common_data.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
@ -70,13 +70,13 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for LookupGate {
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_slots = src.read_usize()?;
let lut_index = src.read_usize()?;
Ok(Self {
num_slots,
lut: cd.luts[lut_index].clone(),
lut: common_data.luts[lut_index].clone(),
})
}
@ -191,10 +191,10 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
};
}
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_usize(self.slot_nb)?;
for (i, lut) in cd.luts.iter().enumerate() {
for (i, lut) in common_data.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
@ -203,14 +203,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let slot_nb = src.read_usize()?;
let lut_index = src.read_usize()?;
Ok(Self {
row,
lut: cd.luts[lut_index].clone(),
lut: common_data.luts[lut_index].clone(),
slot_nb,
})
}

View File

@ -72,10 +72,10 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for LookupTableGat
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_slots)?;
dst.write_usize(self.last_lut_row)?;
for (i, lut) in cd.luts.iter().enumerate() {
for (i, lut) in common_data.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
@ -84,14 +84,14 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for LookupTableGat
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_slots = src.read_usize()?;
let last_lut_row = src.read_usize()?;
let lut_index = src.read_usize()?;
Ok(Self {
num_slots,
lut: cd.luts[lut_index].clone(),
lut: common_data.luts[lut_index].clone(),
last_lut_row,
})
}
@ -203,12 +203,12 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
}
}
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_usize(self.slot_nb)?;
dst.write_usize(self.num_slots)?;
dst.write_usize(self.last_lut_row)?;
for (i, lut) in cd.luts.iter().enumerate() {
for (i, lut) in common_data.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
@ -217,7 +217,7 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let slot_nb = src.read_usize()?;
let num_slots = src.read_usize()?;
@ -226,7 +226,7 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
Ok(Self {
row,
lut: cd.luts[lut_index].clone(),
lut: common_data.luts[lut_index].clone(),
slot_nb,
num_slots,
last_lut_row,

View File

@ -53,11 +53,11 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for MulExtensionGa
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_ops)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_ops = src.read_usize()?;
Ok(Self { num_ops })
}
@ -191,13 +191,13 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
out_buffer.set_extension_target(output_target, computed_output)
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_field(self.const_0)?;
dst.write_usize(self.i)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let const_0 = src.read_field()?;
let i = src.read_usize()?;

View File

@ -19,11 +19,15 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for NoopGate {
"NoopGate".into()
}
fn serialize(&self, _dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(
&self,
_dst: &mut Vec<u8>,
_common_data: &CommonCircuitData<F, D>,
) -> IoResult<()> {
Ok(())
}
fn deserialize(_src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(_src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
Ok(Self)
}

View File

@ -100,11 +100,15 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for PoseidonGate<F
format!("{self:?}<WIDTH={SPONGE_WIDTH}>")
}
fn serialize(&self, _dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(
&self,
_dst: &mut Vec<u8>,
_common_data: &CommonCircuitData<F, D>,
) -> IoResult<()> {
Ok(())
}
fn deserialize(_src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(_src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
Ok(PoseidonGate::new())
}
@ -513,11 +517,11 @@ impl<F: RichField + Extendable<D> + Poseidon, const D: usize> SimpleGenerator<F,
}
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
Ok(Self {
row,

View File

@ -119,11 +119,15 @@ impl<F: RichField + Extendable<D> + Poseidon, const D: usize> Gate<F, D> for Pos
format!("{self:?}<WIDTH={SPONGE_WIDTH}>")
}
fn serialize(&self, _dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(
&self,
_dst: &mut Vec<u8>,
_common_data: &CommonCircuitData<F, D>,
) -> IoResult<()> {
Ok(())
}
fn deserialize(_src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(_src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
Ok(PoseidonMdsGate::new())
}
@ -251,11 +255,11 @@ impl<F: RichField + Extendable<D> + Poseidon, const D: usize> SimpleGenerator<F,
}
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
Ok(Self { row })
}

View File

@ -32,11 +32,15 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for PublicInputGat
"PublicInputGate".into()
}
fn serialize(&self, _dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(
&self,
_dst: &mut Vec<u8>,
_common_data: &CommonCircuitData<F, D>,
) -> IoResult<()> {
Ok(())
}
fn deserialize(_src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(_src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
Ok(Self)
}

View File

@ -122,14 +122,14 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for RandomAccessGa
format!("{self:?}<D={D}>")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.bits)?;
dst.write_usize(self.num_copies)?;
dst.write_usize(self.num_extra_constants)?;
Ok(())
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let bits = src.read_usize()?;
let num_copies = src.read_usize()?;
let num_extra_constants = src.read_usize()?;
@ -394,16 +394,16 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
}
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_usize(self.copy)?;
self.gate.serialize(dst, _cd)
self.gate.serialize(dst, _common_data)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let copy = src.read_usize()?;
let gate = RandomAccessGate::<F, D>::deserialize(src, _cd)?;
let gate = RandomAccessGate::<F, D>::deserialize(src, _common_data)?;
Ok(Self { row, gate, copy })
}
}

View File

@ -61,12 +61,12 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ReducingGate<D
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_coeffs)?;
Ok(())
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self>
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self>
where
Self: Sized,
{
@ -226,14 +226,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Red
out_buffer.set_extension_target(output, acc);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
<ReducingGate<D> as Gate<F, D>>::serialize(&self.gate, dst, _cd)
<ReducingGate<D> as Gate<F, D>>::serialize(&self.gate, dst, _common_data)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let gate = <ReducingGate<D> as Gate<F, D>>::deserialize(src, _cd)?;
let gate = <ReducingGate<D> as Gate<F, D>>::deserialize(src, _common_data)?;
Ok(Self { row, gate })
}
}

View File

@ -64,12 +64,12 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ReducingExtens
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_coeffs)?;
Ok(())
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self>
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self>
where
Self: Sized,
{
@ -220,14 +220,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Red
}
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
<ReducingExtensionGate<D> as Gate<F, D>>::serialize(&self.gate, dst, _cd)
<ReducingExtensionGate<D> as Gate<F, D>>::serialize(&self.gate, dst, _common_data)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let gate = <ReducingExtensionGate<D> as Gate<F, D>>::deserialize(src, _cd)?;
let gate = <ReducingExtensionGate<D> as Gate<F, D>>::deserialize(src, _common_data)?;
Ok(Self { row, gate })
}
}

View File

@ -112,9 +112,9 @@ pub trait WitnessGenerator<F: RichField + Extendable<D>, const D: usize>:
/// run next time a target in its watch list is populated.
fn run(&self, witness: &PartitionWitness<F>, out_buffer: &mut GeneratedValues<F>) -> bool;
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()>;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()>;
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self>
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self>
where
Self: Sized;
}
@ -213,9 +213,9 @@ pub trait SimpleGenerator<F: RichField + Extendable<D>, const D: usize>:
}
}
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()>;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()>;
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self>
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self>
where
Self: Sized;
}
@ -250,13 +250,13 @@ impl<F: RichField + Extendable<D>, SG: SimpleGenerator<F, D>, const D: usize> Wi
}
}
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
self.inner.serialize(dst, cd)
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
self.inner.serialize(dst, common_data)
}
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
Ok(Self {
inner: SG::deserialize(src, cd)?,
inner: SG::deserialize(src, common_data)?,
_phantom: PhantomData,
})
}
@ -283,12 +283,12 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Cop
out_buffer.set_target(self.dst, value);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.src)?;
dst.write_target(self.dst)
}
fn deserialize(source: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(source: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let src = source.read_target()?;
let dst = source.read_target()?;
Ok(Self { src, dst })
@ -315,11 +315,11 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Ran
out_buffer.set_target(self.target, random_value);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.target)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let target = src.read_target()?;
Ok(Self { target })
}
@ -353,12 +353,12 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Non
out_buffer.set_target(self.dummy, dummy_value);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.to_test)?;
dst.write_target(self.dummy)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let to_test = src.read_target()?;
let dummy = src.read_target()?;
Ok(Self { to_test, dummy })
@ -393,14 +393,14 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Con
out_buffer.set_target(Target::wire(self.row, self.wire_index), self.constant);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_usize(self.constant_index)?;
dst.write_usize(self.wire_index)?;
dst.write_field(self.constant)
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let constant_index = src.read_usize()?;
let wire_index = src.read_usize()?;

View File

@ -234,16 +234,16 @@ where
out_buffer.set_verifier_data_target(&self.verifier_data_target, &self.verifier_data);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> 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)?;
dst.write_verifier_only_circuit_data(&self.verifier_data)
}
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let proof_with_pis_target = src.read_target_proof_with_public_inputs()?;
let proof_with_pis = src.read_proof_with_public_inputs(cd)?;
let proof_with_pis = src.read_proof_with_public_inputs(common_data)?;
let verifier_data_target = src.read_target_verifier_circuit()?;
let verifier_data = src.read_verifier_only_circuit_data()?;
Ok(Self {

View File

@ -218,10 +218,10 @@ mod tests {
type F = <C as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_zk_config();
let (proof, vd, cd) = dummy_proof::<F, C, D>(&config, 4_000)?;
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &config, None, true, true)?;
test_serialization(&proof, &vd, &cd)?;
let (proof, vd, common_data) = dummy_proof::<F, C, D>(&config, 4_000)?;
let (proof, vd, common_data) =
recursive_proof::<F, C, C, D>(proof, vd, common_data, &config, None, true, true)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -234,10 +234,10 @@ mod tests {
type F = <C as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_zk_config();
let (proof, vd, cd) = dummy_lookup_proof::<F, C, D>(&config, 10)?;
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &config, None, true, true)?;
test_serialization(&proof, &vd, &cd)?;
let (proof, vd, common_data) = dummy_lookup_proof::<F, C, D>(&config, 10)?;
let (proof, vd, common_data) =
recursive_proof::<F, C, C, D>(proof, vd, common_data, &config, None, true, true)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -250,10 +250,10 @@ mod tests {
type F = <C as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_config();
let (proof, vd, cd) = dummy_two_luts_proof::<F, C, D>(&config)?;
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &config, None, true, true)?;
test_serialization(&proof, &vd, &cd)?;
let (proof, vd, common_data) = dummy_two_luts_proof::<F, C, D>(&config)?;
let (proof, vd, common_data) =
recursive_proof::<F, C, C, D>(proof, vd, common_data, &config, None, true, true)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -266,10 +266,10 @@ mod tests {
type F = <C as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_config();
let (proof, vd, cd) = dummy_too_many_rows_proof::<F, C, D>(&config)?;
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &config, None, true, true)?;
test_serialization(&proof, &vd, &cd)?;
let (proof, vd, common_data) = dummy_too_many_rows_proof::<F, C, D>(&config)?;
let (proof, vd, common_data) =
recursive_proof::<F, C, C, D>(proof, vd, common_data, &config, None, true, true)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -284,20 +284,20 @@ mod tests {
let config = CircuitConfig::standard_recursion_config();
// Start with a degree 2^14 proof
let (proof, vd, cd) = dummy_proof::<F, C, D>(&config, 16_000)?;
assert_eq!(cd.degree_bits(), 14);
let (proof, vd, common_data) = dummy_proof::<F, C, D>(&config, 16_000)?;
assert_eq!(common_data.degree_bits(), 14);
// Shrink it to 2^13.
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &config, Some(13), false, false)?;
assert_eq!(cd.degree_bits(), 13);
let (proof, vd, common_data) =
recursive_proof::<F, C, C, D>(proof, vd, common_data, &config, Some(13), false, false)?;
assert_eq!(common_data.degree_bits(), 13);
// Shrink it to 2^12.
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &config, None, true, true)?;
assert_eq!(cd.degree_bits(), 12);
let (proof, vd, common_data) =
recursive_proof::<F, C, C, D>(proof, vd, common_data, &config, None, true, true)?;
assert_eq!(common_data.degree_bits(), 12);
test_serialization(&proof, &vd, &cd)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -316,13 +316,20 @@ mod tests {
let standard_config = CircuitConfig::standard_recursion_config();
// An initial dummy proof.
let (proof, vd, cd) = dummy_proof::<F, C, D>(&standard_config, 4_000)?;
assert_eq!(cd.degree_bits(), 12);
let (proof, vd, common_data) = dummy_proof::<F, C, D>(&standard_config, 4_000)?;
assert_eq!(common_data.degree_bits(), 12);
// A standard recursive proof.
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &standard_config, None, false, false)?;
assert_eq!(cd.degree_bits(), 12);
let (proof, vd, common_data) = recursive_proof::<F, C, C, D>(
proof,
vd,
common_data,
&standard_config,
None,
false,
false,
)?;
assert_eq!(common_data.degree_bits(), 12);
// A high-rate recursive proof, designed to be verifiable with fewer routed wires.
let high_rate_config = CircuitConfig {
@ -334,9 +341,16 @@ mod tests {
},
..standard_config
};
let (proof, vd, cd) =
recursive_proof::<F, C, C, D>(proof, vd, cd, &high_rate_config, None, true, true)?;
assert_eq!(cd.degree_bits(), 12);
let (proof, vd, common_data) = recursive_proof::<F, C, C, D>(
proof,
vd,
common_data,
&high_rate_config,
None,
true,
true,
)?;
assert_eq!(common_data.degree_bits(), 12);
// A final proof, optimized for size.
let final_config = CircuitConfig {
@ -350,11 +364,18 @@ mod tests {
},
..high_rate_config
};
let (proof, vd, cd) =
recursive_proof::<F, KC, C, D>(proof, vd, cd, &final_config, None, true, true)?;
assert_eq!(cd.degree_bits(), 12, "final proof too large");
let (proof, vd, common_data) = recursive_proof::<F, KC, C, D>(
proof,
vd,
common_data,
&final_config,
None,
true,
true,
)?;
assert_eq!(common_data.degree_bits(), 12, "final proof too large");
test_serialization(&proof, &vd, &cd)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -368,15 +389,15 @@ mod tests {
type F = <PC as GenericConfig<D>>::F;
let config = CircuitConfig::standard_recursion_config();
let (proof, vd, cd) = dummy_proof::<F, PC, D>(&config, 4_000)?;
let (proof, vd, common_data) = dummy_proof::<F, PC, D>(&config, 4_000)?;
let (proof, vd, cd) =
recursive_proof::<F, PC, PC, D>(proof, vd, cd, &config, None, false, false)?;
test_serialization(&proof, &vd, &cd)?;
let (proof, vd, common_data) =
recursive_proof::<F, PC, PC, D>(proof, vd, common_data, &config, None, false, false)?;
test_serialization(&proof, &vd, &common_data)?;
let (proof, vd, cd) =
recursive_proof::<F, KC, PC, D>(proof, vd, cd, &config, None, false, false)?;
test_serialization(&proof, &vd, &cd)?;
let (proof, vd, common_data) =
recursive_proof::<F, KC, PC, D>(proof, vd, common_data, &config, None, false, false)?;
test_serialization(&proof, &vd, &common_data)?;
Ok(())
}
@ -662,18 +683,18 @@ mod tests {
>(
proof: &ProofWithPublicInputs<F, C, D>,
vd: &VerifierOnlyCircuitData<C, D>,
cd: &CommonCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
) -> Result<()> {
let proof_bytes = proof.to_bytes();
info!("Proof length: {} bytes", proof_bytes.len());
let proof_from_bytes = ProofWithPublicInputs::from_bytes(proof_bytes, cd)?;
let proof_from_bytes = ProofWithPublicInputs::from_bytes(proof_bytes, common_data)?;
assert_eq!(proof, &proof_from_bytes);
let now = std::time::Instant::now();
let compressed_proof = proof.clone().compress(&vd.circuit_digest, cd)?;
let compressed_proof = proof.clone().compress(&vd.circuit_digest, common_data)?;
let decompressed_compressed_proof = compressed_proof
.clone()
.decompress(&vd.circuit_digest, cd)?;
.decompress(&vd.circuit_digest, common_data)?;
info!("{:.4}s to compress proof", now.elapsed().as_secs_f64());
assert_eq!(proof, &decompressed_compressed_proof);
@ -683,7 +704,7 @@ mod tests {
compressed_proof_bytes.len()
);
let compressed_proof_from_bytes =
CompressedProofWithPublicInputs::from_bytes(compressed_proof_bytes, cd)?;
CompressedProofWithPublicInputs::from_bytes(compressed_proof_bytes, common_data)?;
assert_eq!(compressed_proof, compressed_proof_from_bytes);
Ok(())

View File

@ -6,12 +6,16 @@ use crate::plonk::circuit_data::CommonCircuitData;
use crate::util::serialization::{Buffer, IoResult};
pub trait GateSerializer<F: RichField + Extendable<D>, const D: usize> {
fn read_gate(&self, buf: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<GateRef<F, D>>;
fn read_gate(
&self,
buf: &mut Buffer,
common_data: &CommonCircuitData<F, D>,
) -> IoResult<GateRef<F, D>>;
fn write_gate(
&self,
buf: &mut Vec<u8>,
gate: &GateRef<F, D>,
cd: &CommonCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
) -> IoResult<()>;
}

View File

@ -11,14 +11,14 @@ pub trait WitnessGeneratorSerializer<F: RichField + Extendable<D>, const D: usiz
fn read_generator(
&self,
buf: &mut Buffer,
cd: &CommonCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
) -> IoResult<WitnessGeneratorRef<F, D>>;
fn write_generator(
&self,
buf: &mut Vec<u8>,
generator: &WitnessGeneratorRef<F, D>,
cd: &CommonCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
) -> IoResult<()>;
}

View File

@ -769,7 +769,7 @@ pub trait Read {
// We construct the common data without gates first,
// to pass it as argument when reading the gates.
let mut cd = CommonCircuitData {
let mut common_data = CommonCircuitData {
config,
fri_params,
gates: vec![],
@ -786,13 +786,13 @@ pub trait Read {
};
for _ in 0..gates_len {
let gate = self.read_gate::<F, D>(gate_serializer, &cd)?;
let gate = self.read_gate::<F, D>(gate_serializer, &common_data)?;
gates.push(gate);
}
cd.gates = gates;
common_data.gates = gates;
Ok(cd)
Ok(common_data)
}
fn read_circuit_data<
@ -821,12 +821,12 @@ pub trait Read {
>(
&mut self,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
cd: &CommonCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
) -> IoResult<ProverOnlyCircuitData<F, C, D>> {
let gen_len = self.read_usize()?;
let mut generators = Vec::with_capacity(gen_len);
for _ in 0..gen_len {
generators.push(self.read_generator(generator_serializer, cd)?);
generators.push(self.read_generator(generator_serializer, common_data)?);
}
let map_len = self.read_usize()?;
let mut generator_indices_by_watches = BTreeMap::new();