common data fn for inner-circuit

This commit is contained in:
M Alghazwi 2025-01-09 10:34:13 +01:00
parent b69b682df2
commit 3f2d8cc88c
No known key found for this signature in database
GPG Key ID: 646E567CAD7DB607
3 changed files with 39 additions and 5 deletions

View File

@ -1,6 +1,7 @@
use plonky2::iop::target::{BoolTarget, Target}; use plonky2::iop::target::{BoolTarget, Target};
use plonky2::iop::witness::PartialWitness; use plonky2::iop::witness::PartialWitness;
use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CommonCircuitData;
use crate::recursion::params::{F,C,D}; use crate::recursion::params::{F,C,D};
/// InnerCircuit is the trait used to define the logic of the circuit and assign witnesses /// 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 ? // TODO: make it generic for F and D ?
> { > {
type Targets; type Targets;
type Input; type Input:Clone;
/// build the circuit logic and return targets to be assigned later /// build the circuit logic and return targets to be assigned later
fn build( fn build(
@ -30,4 +31,10 @@ pub trait InnerCircuit<
fn get_pub_input_targets( fn get_pub_input_targets(
targets: &Self::Targets, targets: &Self::Targets,
) -> anyhow::Result<(Vec<Target>)>; ) -> anyhow::Result<(Vec<Target>)>;
/// 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<F, D>)>;
} }

View File

@ -1,8 +1,12 @@
pub mod inner_circuit; pub mod inner_circuit;
pub mod simple_recursion; pub mod simple_recursion;
pub mod simple_recursion2; // pub mod simple_recursion2;
pub mod tree_recursion; pub mod tree_recursion;
pub mod params; pub mod params;
pub mod sampling_inner_circuit; pub mod sampling_inner_circuit;
pub mod cyclic_recursion; pub mod cyclic_recursion;
pub mod leaf_circuit;
pub mod tree_recursion2;
pub mod utils;
pub mod simple_tree_recursion;

View File

@ -1,11 +1,11 @@
use plonky2::iop::target::{BoolTarget, Target}; use plonky2::iop::target::Target;
use plonky2::iop::witness::PartialWitness; use plonky2::iop::witness::PartialWitness;
use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
use crate::circuits::params::CircuitParams; use crate::circuits::params::CircuitParams;
use crate::circuits::sample_cells::{SampleCircuit, SampleCircuitInput, SampleTargets}; 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::recursion::inner_circuit::InnerCircuit;
use crate::circuits::params;
/// recursion Inner circuit for the sampling circuit /// recursion Inner circuit for the sampling circuit
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -13,6 +13,15 @@ pub struct SamplingRecursion {
pub sampling_circ: SampleCircuit<F,D>, pub sampling_circ: SampleCircuit<F,D>,
} }
impl SamplingRecursion {
pub fn new(circ_params: CircuitParams) -> Self{
let sampling_circ = SampleCircuit::new(circ_params);
Self{
sampling_circ,
}
}
}
impl Default for SamplingRecursion { impl Default for SamplingRecursion {
fn default() -> Self { fn default() -> Self {
Self{ Self{
@ -45,4 +54,18 @@ impl InnerCircuit for SamplingRecursion{
Ok(pub_targets) 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<F, D>)> {
let config = CircuitConfig::standard_recursion_config();
let mut builder = CircuitBuilder::<F, D>::new(config);
// build the inner circuit
self.sampling_circ.sample_slot_circuit_with_public_input(&mut builder);
let circ_data = builder.build::<C>();
Ok(circ_data.common)
}
} }