diff --git a/src/gates/random_access.rs b/src/gates/random_access.rs index 4f086ef0..cc4c0442 100644 --- a/src/gates/random_access.rs +++ b/src/gates/random_access.rs @@ -10,23 +10,35 @@ use crate::iop::target::Target; use crate::iop::wire::Wire; use crate::iop::witness::{PartitionWitness, Witness}; use crate::plonk::circuit_builder::CircuitBuilder; +use crate::plonk::circuit_data::CircuitConfig; use crate::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; /// A gate for checking that a particular element of a list matches a given value. #[derive(Clone, Debug)] pub(crate) struct RandomAccessGate, const D: usize> { pub vec_size: usize, + pub num_copies: usize, _phantom: PhantomData, } impl, const D: usize> RandomAccessGate { - pub fn new(vec_size: usize) -> Self { + pub fn new(num_copies: usize, vec_size: usize) -> Self { Self { vec_size, + num_copies, _phantom: PhantomData, } } + pub fn new_from_config(config: CircuitConfig, vec_size: usize) -> Self { + let num_copies = Self::max_num_copies(config.num_routed_wires, chunk_size); + Self::new(num_copies, chunk_size) + } + + pub fn max_num_copies(num_routed_wires: usize, vec_size: usize) -> usize { + num_routed_wires / (2 + vec_size) + } + pub fn wire_access_index(&self) -> usize { 0 } diff --git a/src/plonk/recursive_verifier.rs b/src/plonk/recursive_verifier.rs index 7bcc0633..130baa09 100644 --- a/src/plonk/recursive_verifier.rs +++ b/src/plonk/recursive_verifier.rs @@ -378,7 +378,7 @@ mod tests { fn test_recursive_recursive_verifier() -> Result<()> { init_logger(); type F = GoldilocksField; - const D: usize = 4; + const D: usize = 2; let config = CircuitConfig::standard_recursion_config();