diff --git a/src/backends/plonky2/recursion/circuit.rs b/src/backends/plonky2/recursion/circuit.rs index 8f5358c..a70de8a 100644 --- a/src/backends/plonky2/recursion/circuit.rs +++ b/src/backends/plonky2/recursion/circuit.rs @@ -586,7 +586,7 @@ pub fn pad_circuit(builder: &mut CircuitBuilder, common_data: &CommonCircu } } -fn hash_verifier_data_gadget( +pub fn hash_verifier_data_gadget( builder: &mut CircuitBuilder, verifier_data: &VerifierCircuitTarget, ) -> HashOutTarget { @@ -618,6 +618,37 @@ pub fn hash_verifier_data(verifier_only_data: &VerifierOnlyCircuitData) -> PoseidonHash::hash_no_pad(&f) } +// Build an dummy empty circuit that uses common_data and make a proof from it. +pub fn dummy( + common_data: &CommonCircuitData, + num_public_inputs: usize, +) -> Result<( + VerifierOnlyCircuitData, + ProofWithPublicInputs, +)> { + let config = common_data.config.clone(); + let mut builder = CircuitBuilder::new(config.clone()); + + let public_inputs = (0..num_public_inputs) + .map(|_| { + let target = builder.add_virtual_target(); + builder.register_public_input(target); + target + }) + .collect_vec(); + pad_circuit(&mut builder, common_data); + + let circuit_data = builder.build::(); + assert_eq!(*common_data, circuit_data.common); + + let mut pw = PartialWitness::::new(); + for target in &public_inputs { + pw.set_target(*target, F::ZERO)?; + } + let proof = circuit_data.prove(pw)?; + Ok((circuit_data.verifier_only, proof)) +} + #[cfg(test)] mod tests { use std::time::Instant; @@ -800,37 +831,6 @@ mod tests { Ok(()) } - // Build an dummy empty circuit that uses common_data and make a proof from it. - fn dummy( - common_data: &CommonCircuitData, - num_public_inputs: usize, - ) -> Result<( - VerifierOnlyCircuitData, - ProofWithPublicInputs, - )> { - let config = common_data.config.clone(); - let mut builder = CircuitBuilder::new(config.clone()); - - let public_inputs = (0..num_public_inputs) - .map(|_| { - let target = builder.add_virtual_target(); - builder.register_public_input(target); - target - }) - .collect_vec(); - pad_circuit(&mut builder, common_data); - - let circuit_data = builder.build::(); - assert_eq!(*common_data, circuit_data.common); - - let mut pw = PartialWitness::::new(); - for target in &public_inputs { - pw.set_target(*target, F::ZERO)?; - } - let proof = circuit_data.prove(pw)?; - Ok((circuit_data.verifier_only, proof)) - } - // test that recurses with arity=2, with the following shape: // proof_1d // ▲ ▲