mirror of
https://github.com/arnaucube/plonky2-u32.git
synced 2026-02-10 13:16:46 +01:00
resolve compile errors
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
use alloc::string::{String, ToString};
|
use alloc::string::{String, ToString};
|
||||||
use alloc::vec;
|
use alloc::vec;
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use plonky2::plonk::circuit_data::CommonCircuitData;
|
||||||
|
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
||||||
|
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
use plonky2::hash::hash_types::RichField;
|
use plonky2::hash::hash_types::RichField;
|
||||||
@@ -241,24 +242,29 @@ struct SplitToU32Generator<F: RichField + Extendable<D>, const D: usize> {
|
|||||||
_phantom: PhantomData<F>,
|
_phantom: PhantomData<F>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
|
||||||
for SplitToU32Generator<F, D>
|
for SplitToU32Generator<F, D>
|
||||||
{
|
{
|
||||||
fn id(&self) -> String {
|
fn id(&self) -> String {
|
||||||
"SplitToU32Generator".to_string()
|
"SplitToU32Generator".to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_target(self.x)?;
|
dst.write_target(self.x)?;
|
||||||
dst.write_target_u32(self.low)?;
|
dst.write_target_u32(self.low)?;
|
||||||
dst.write_target_u32(self.high)
|
dst.write_target_u32(self.high)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let x = src.read_target()?;
|
let x = src.read_target()?;
|
||||||
let low = src.read_target_u32()?;
|
let low = src.read_target_u32()?;
|
||||||
let high = src.read_target_u32()?;
|
let high = src.read_target_u32()?;
|
||||||
Ok(Self { x, low, high, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
x,
|
||||||
|
low,
|
||||||
|
high,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dependencies(&self) -> Vec<Target> {
|
fn dependencies(&self) -> Vec<Target> {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use alloc::format;
|
use alloc::format;
|
||||||
use alloc::string::{String, ToString};
|
use alloc::string::{String, ToString};
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
||||||
|
|
||||||
use itertools::unfold;
|
use itertools::unfold;
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
@@ -16,7 +16,7 @@ use plonky2::iop::target::Target;
|
|||||||
use plonky2::iop::wire::Wire;
|
use plonky2::iop::wire::Wire;
|
||||||
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
|
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
|
||||||
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
||||||
use plonky2::plonk::circuit_data::CircuitConfig;
|
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
|
||||||
use plonky2::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase};
|
use plonky2::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase};
|
||||||
use plonky2::util::ceil_div_usize;
|
use plonky2::util::ceil_div_usize;
|
||||||
|
|
||||||
@@ -91,15 +91,19 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32AddManyGate
|
|||||||
format!("{self:?}")
|
format!("{self:?}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_usize(self.num_addends)?;
|
dst.write_usize(self.num_addends)?;
|
||||||
dst.write_usize(self.num_ops)
|
dst.write_usize(self.num_ops)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let num_addends = src.read_usize()?;
|
let num_addends = src.read_usize()?;
|
||||||
let num_ops = src.read_usize()?;
|
let num_ops = src.read_usize()?;
|
||||||
Ok(Self { num_addends, num_ops, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
num_addends,
|
||||||
|
num_ops,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
||||||
@@ -247,7 +251,7 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32AddManyGate
|
|||||||
constraints
|
constraints
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
|
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
|
||||||
(0..self.num_ops)
|
(0..self.num_ops)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
WitnessGeneratorRef::new(
|
WitnessGeneratorRef::new(
|
||||||
@@ -288,24 +292,29 @@ struct U32AddManyGenerator<F: RichField + Extendable<D>, const D: usize> {
|
|||||||
_phantom: PhantomData<F>,
|
_phantom: PhantomData<F>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
|
||||||
for U32AddManyGenerator<F, D>
|
for U32AddManyGenerator<F, D>
|
||||||
{
|
{
|
||||||
fn id(&self) -> String {
|
fn id(&self) -> String {
|
||||||
"U32AddManyGenerator".to_string()
|
"U32AddManyGenerator".to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
self.gate.serialize(dst)?;
|
self.gate.serialize(dst, common_data)?;
|
||||||
dst.write_usize(self.row)?;
|
dst.write_usize(self.row)?;
|
||||||
dst.write_usize(self.i)
|
dst.write_usize(self.i)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let gate = U32AddManyGate::deserialize(src)?;
|
let gate = U32AddManyGate::deserialize(src, common_data)?;
|
||||||
let row = src.read_usize()?;
|
let row = src.read_usize()?;
|
||||||
let i = src.read_usize()?;
|
let i = src.read_usize()?;
|
||||||
Ok(Self { gate, row, i, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
gate,
|
||||||
|
row,
|
||||||
|
i,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dependencies(&self) -> Vec<Target> {
|
fn dependencies(&self) -> Vec<Target> {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use alloc::string::{String, ToString};
|
use alloc::string::{String, ToString};
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use alloc::{format, vec};
|
use alloc::{format, vec};
|
||||||
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
||||||
|
|
||||||
use itertools::unfold;
|
use itertools::unfold;
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
@@ -18,7 +18,7 @@ use plonky2::iop::target::Target;
|
|||||||
use plonky2::iop::wire::Wire;
|
use plonky2::iop::wire::Wire;
|
||||||
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
|
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
|
||||||
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
||||||
use plonky2::plonk::circuit_data::CircuitConfig;
|
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
|
||||||
use plonky2::plonk::vars::{
|
use plonky2::plonk::vars::{
|
||||||
EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch,
|
EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch,
|
||||||
EvaluationVarsBasePacked,
|
EvaluationVarsBasePacked,
|
||||||
@@ -93,13 +93,16 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32ArithmeticG
|
|||||||
format!("{self:?}")
|
format!("{self:?}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_usize(self.num_ops)
|
dst.write_usize(self.num_ops)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let num_ops = src.read_usize()?;
|
let num_ops = src.read_usize()?;
|
||||||
Ok(Self { num_ops, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
num_ops,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
||||||
@@ -249,10 +252,10 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32ArithmeticG
|
|||||||
constraints
|
constraints
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
|
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
|
||||||
(0..self.num_ops)
|
(0..self.num_ops)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let g: WitnessGeneratorRef<F> = WitnessGeneratorRef::new(
|
let g: WitnessGeneratorRef<F, D> = WitnessGeneratorRef::new(
|
||||||
U32ArithmeticGenerator {
|
U32ArithmeticGenerator {
|
||||||
gate: *self,
|
gate: *self,
|
||||||
row,
|
row,
|
||||||
@@ -356,7 +359,7 @@ struct U32ArithmeticGenerator<F: RichField + Extendable<D>, const D: usize> {
|
|||||||
_phantom: PhantomData<F>,
|
_phantom: PhantomData<F>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
|
||||||
for U32ArithmeticGenerator<F, D>
|
for U32ArithmeticGenerator<F, D>
|
||||||
{
|
{
|
||||||
fn id(&self) -> String {
|
fn id(&self) -> String {
|
||||||
@@ -425,17 +428,22 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
self.gate.serialize(dst)?;
|
self.gate.serialize(dst, common_data)?;
|
||||||
dst.write_usize(self.row)?;
|
dst.write_usize(self.row)?;
|
||||||
dst.write_usize(self.i)
|
dst.write_usize(self.i)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let gate = U32ArithmeticGate::deserialize(src)?;
|
let gate = U32ArithmeticGate::deserialize(src, common_data)?;
|
||||||
let row = src.read_usize()?;
|
let row = src.read_usize()?;
|
||||||
let i = src.read_usize()?;
|
let i = src.read_usize()?;
|
||||||
Ok(Self { gate, row, i, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
gate,
|
||||||
|
row,
|
||||||
|
i,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
use alloc::string::{String, ToString};
|
use alloc::string::{String, ToString};
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use alloc::{format, vec};
|
use alloc::{format, vec};
|
||||||
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use plonky2::plonk::circuit_data::CommonCircuitData;
|
||||||
|
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
||||||
|
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
use plonky2::field::packed::PackedField;
|
use plonky2::field::packed::PackedField;
|
||||||
@@ -98,16 +99,20 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ComparisonGate
|
|||||||
format!("{self:?}<D={D}>")
|
format!("{self:?}<D={D}>")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_usize(self.num_bits)?;
|
dst.write_usize(self.num_bits)?;
|
||||||
dst.write_usize(self.num_chunks)?;
|
dst.write_usize(self.num_chunks)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let num_bits = src.read_usize()?;
|
let num_bits = src.read_usize()?;
|
||||||
let num_chunks = src.read_usize()?;
|
let num_chunks = src.read_usize()?;
|
||||||
Ok(Self { num_bits, num_chunks, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
num_bits,
|
||||||
|
num_chunks,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
||||||
@@ -299,7 +304,7 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ComparisonGate
|
|||||||
constraints
|
constraints
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
|
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
|
||||||
let gen = ComparisonGenerator::<F, D> {
|
let gen = ComparisonGenerator::<F, D> {
|
||||||
row,
|
row,
|
||||||
gate: self.clone(),
|
gate: self.clone(),
|
||||||
@@ -413,7 +418,7 @@ struct ComparisonGenerator<F: RichField + Extendable<D>, const D: usize> {
|
|||||||
gate: ComparisonGate<F, D>,
|
gate: ComparisonGate<F, D>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
|
||||||
for ComparisonGenerator<F, D>
|
for ComparisonGenerator<F, D>
|
||||||
{
|
{
|
||||||
fn id(&self) -> String {
|
fn id(&self) -> String {
|
||||||
@@ -529,17 +534,16 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_usize(self.row)?;
|
dst.write_usize(self.row)?;
|
||||||
self.gate.serialize(dst)
|
self.gate.serialize(dst, common_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let row = src.read_usize()?;
|
let row = src.read_usize()?;
|
||||||
let gate = ComparisonGate::deserialize(src)?;
|
let gate = ComparisonGate::deserialize(src, common_data)?;
|
||||||
Ok(Self { row, gate })
|
Ok(Self { row, gate })
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
use alloc::string::{String, ToString};
|
use alloc::string::{String, ToString};
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use alloc::{format, vec};
|
use alloc::{format, vec};
|
||||||
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use plonky2::plonk::circuit_data::CommonCircuitData;
|
||||||
|
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
||||||
|
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
use plonky2::field::types::Field;
|
use plonky2::field::types::Field;
|
||||||
@@ -55,13 +56,16 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32RangeCheckG
|
|||||||
format!("{self:?}")
|
format!("{self:?}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_usize(self.num_input_limbs)
|
dst.write_usize(self.num_input_limbs)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let num_input_limbs = src.read_usize()?;
|
let num_input_limbs = src.read_usize()?;
|
||||||
Ok(Self { num_input_limbs, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
num_input_limbs,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
||||||
@@ -147,7 +151,7 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32RangeCheckG
|
|||||||
constraints
|
constraints
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
|
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
|
||||||
let gen = U32RangeCheckGenerator { gate: *self, row };
|
let gen = U32RangeCheckGenerator { gate: *self, row };
|
||||||
vec![WitnessGeneratorRef::new(gen.adapter())]
|
vec![WitnessGeneratorRef::new(gen.adapter())]
|
||||||
}
|
}
|
||||||
@@ -177,7 +181,7 @@ pub struct U32RangeCheckGenerator<F: RichField + Extendable<D>, const D: usize>
|
|||||||
row: usize,
|
row: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
|
||||||
for U32RangeCheckGenerator<F, D>
|
for U32RangeCheckGenerator<F, D>
|
||||||
{
|
{
|
||||||
fn id(&self) -> String {
|
fn id(&self) -> String {
|
||||||
@@ -215,17 +219,16 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
self.gate.serialize(dst)?;
|
self.gate.serialize(dst, common_data)?;
|
||||||
dst.write_usize(self.row)
|
dst.write_usize(self.row)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let gate = U32RangeCheckGate::deserialize(src)?;
|
let gate = U32RangeCheckGate::deserialize(src, common_data)?;
|
||||||
let row = src.read_usize()?;
|
let row = src.read_usize()?;
|
||||||
Ok(Self { row, gate })
|
Ok(Self { row, gate })
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use alloc::string::{String, ToString};
|
use alloc::string::{String, ToString};
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use alloc::{format, vec};
|
use alloc::{format, vec};
|
||||||
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
|
||||||
|
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
use plonky2::field::packed::PackedField;
|
use plonky2::field::packed::PackedField;
|
||||||
@@ -17,7 +17,7 @@ use plonky2::iop::target::Target;
|
|||||||
use plonky2::iop::wire::Wire;
|
use plonky2::iop::wire::Wire;
|
||||||
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
|
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
|
||||||
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
||||||
use plonky2::plonk::circuit_data::CircuitConfig;
|
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
|
||||||
use plonky2::plonk::vars::{
|
use plonky2::plonk::vars::{
|
||||||
EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch,
|
EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch,
|
||||||
EvaluationVarsBasePacked,
|
EvaluationVarsBasePacked,
|
||||||
@@ -87,13 +87,16 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32Subtraction
|
|||||||
format!("{self:?}")
|
format!("{self:?}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
dst.write_usize(self.num_ops)
|
dst.write_usize(self.num_ops)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let num_ops = src.read_usize()?;
|
let num_ops = src.read_usize()?;
|
||||||
Ok(Self { num_ops, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
num_ops,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
||||||
@@ -195,7 +198,7 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for U32Subtraction
|
|||||||
constraints
|
constraints
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
|
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
|
||||||
(0..self.num_ops)
|
(0..self.num_ops)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let g = WitnessGeneratorRef::new(
|
let g = WitnessGeneratorRef::new(
|
||||||
@@ -279,7 +282,7 @@ struct U32SubtractionGenerator<F: RichField + Extendable<D>, const D: usize> {
|
|||||||
_phantom: PhantomData<F>,
|
_phantom: PhantomData<F>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
|
||||||
for U32SubtractionGenerator<F, D>
|
for U32SubtractionGenerator<F, D>
|
||||||
{
|
{
|
||||||
fn id(&self) -> String {
|
fn id(&self) -> String {
|
||||||
@@ -343,19 +346,23 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
|
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
|
||||||
self.gate.serialize(dst)?;
|
self.gate.serialize(dst, common_data)?;
|
||||||
dst.write_usize(self.row)?;
|
dst.write_usize(self.row)?;
|
||||||
dst.write_usize(self.i)
|
dst.write_usize(self.i)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
|
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
|
||||||
let gate = U32SubtractionGate::deserialize(src)?;
|
let gate = U32SubtractionGate::deserialize(src, common_data)?;
|
||||||
let row = src.read_usize()?;
|
let row = src.read_usize()?;
|
||||||
let i = src.read_usize()?;
|
let i = src.read_usize()?;
|
||||||
Ok(Self { gate, row, i, _phantom: PhantomData })
|
Ok(Self {
|
||||||
|
gate,
|
||||||
|
row,
|
||||||
|
i,
|
||||||
|
_phantom: PhantomData,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ pub trait ReadU32 {
|
|||||||
fn read_target_u32(&mut self) -> IoResult<U32Target>;
|
fn read_target_u32(&mut self) -> IoResult<U32Target>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReadU32 for Buffer {
|
impl ReadU32 for Buffer<'_> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn read_target_u32(&mut self) -> IoResult<U32Target> {
|
fn read_target_u32(&mut self) -> IoResult<U32Target> {
|
||||||
Ok(U32Target(self.read_target()?))
|
Ok(U32Target(self.read_target()?))
|
||||||
|
|||||||
Reference in New Issue
Block a user