From 3f2d8cc88ca9daaa4c3055f7757c6eb7e06cc667 Mon Sep 17 00:00:00 2001 From: M Alghazwi Date: Thu, 9 Jan 2025 10:34:13 +0100 Subject: [PATCH] common data fn for inner-circuit --- .../src/recursion/inner_circuit.rs | 9 +++++- codex-plonky2-circuits/src/recursion/mod.rs | 6 +++- .../src/recursion/sampling_inner_circuit.rs | 29 +++++++++++++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/codex-plonky2-circuits/src/recursion/inner_circuit.rs b/codex-plonky2-circuits/src/recursion/inner_circuit.rs index 3dabe9e..801b06f 100644 --- a/codex-plonky2-circuits/src/recursion/inner_circuit.rs +++ b/codex-plonky2-circuits/src/recursion/inner_circuit.rs @@ -1,6 +1,7 @@ use plonky2::iop::target::{BoolTarget, Target}; use plonky2::iop::witness::PartialWitness; use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::plonk::circuit_data::CommonCircuitData; use crate::recursion::params::{F,C,D}; /// InnerCircuit is the trait used to define the logic of the circuit and assign witnesses @@ -9,7 +10,7 @@ pub trait InnerCircuit< // TODO: make it generic for F and D ? > { type Targets; - type Input; + type Input:Clone; /// build the circuit logic and return targets to be assigned later fn build( @@ -30,4 +31,10 @@ pub trait InnerCircuit< fn get_pub_input_targets( targets: &Self::Targets, ) -> anyhow::Result<(Vec)>; + + /// from the set of the targets, return only the targets which are public + /// TODO: this can probably be replaced with enum for Public/Private targets + fn get_common_data( + &self + ) -> anyhow::Result<(CommonCircuitData)>; } diff --git a/codex-plonky2-circuits/src/recursion/mod.rs b/codex-plonky2-circuits/src/recursion/mod.rs index 8e6b259..59badb9 100644 --- a/codex-plonky2-circuits/src/recursion/mod.rs +++ b/codex-plonky2-circuits/src/recursion/mod.rs @@ -1,8 +1,12 @@ pub mod inner_circuit; pub mod simple_recursion; -pub mod simple_recursion2; +// pub mod simple_recursion2; pub mod tree_recursion; pub mod params; pub mod sampling_inner_circuit; pub mod cyclic_recursion; +pub mod leaf_circuit; +pub mod tree_recursion2; +pub mod utils; +pub mod simple_tree_recursion; \ No newline at end of file diff --git a/codex-plonky2-circuits/src/recursion/sampling_inner_circuit.rs b/codex-plonky2-circuits/src/recursion/sampling_inner_circuit.rs index 24b1afb..0497779 100644 --- a/codex-plonky2-circuits/src/recursion/sampling_inner_circuit.rs +++ b/codex-plonky2-circuits/src/recursion/sampling_inner_circuit.rs @@ -1,11 +1,11 @@ -use plonky2::iop::target::{BoolTarget, Target}; +use plonky2::iop::target::Target; use plonky2::iop::witness::PartialWitness; use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData}; use crate::circuits::params::CircuitParams; use crate::circuits::sample_cells::{SampleCircuit, SampleCircuitInput, SampleTargets}; -use crate::recursion::params::{D, F}; +use crate::recursion::params::{D, F, C}; use crate::recursion::inner_circuit::InnerCircuit; -use crate::circuits::params; /// recursion Inner circuit for the sampling circuit #[derive(Clone, Debug)] @@ -13,6 +13,15 @@ pub struct SamplingRecursion { pub sampling_circ: SampleCircuit, } +impl SamplingRecursion { + pub fn new(circ_params: CircuitParams) -> Self{ + let sampling_circ = SampleCircuit::new(circ_params); + Self{ + sampling_circ, + } + } +} + impl Default for SamplingRecursion { fn default() -> Self { Self{ @@ -45,4 +54,18 @@ impl InnerCircuit for SamplingRecursion{ Ok(pub_targets) } + + /// return the common circuit data for the sampling circuit + /// uses the `standard_recursion_config` + fn get_common_data(&self) -> anyhow::Result<(CommonCircuitData)> { + let config = CircuitConfig::standard_recursion_config(); + let mut builder = CircuitBuilder::::new(config); + + // build the inner circuit + self.sampling_circ.sample_slot_circuit_with_public_input(&mut builder); + + let circ_data = builder.build::(); + + Ok(circ_data.common) + } } \ No newline at end of file