Make proof_with_pis a reference

This commit is contained in:
Daniel Lubarov 2022-11-28 10:49:19 -08:00
parent 5ee283b267
commit 644a8a2336
4 changed files with 15 additions and 14 deletions

View File

@ -105,17 +105,14 @@ where
{ {
let (inner_proof, inner_vd, inner_cd) = inner; let (inner_proof, inner_vd, inner_cd) = inner;
let mut builder = CircuitBuilder::<F, D>::new(config.clone()); let mut builder = CircuitBuilder::<F, D>::new(config.clone());
let mut pw = PartialWitness::new();
let pt = builder.add_virtual_proof_with_pis::<InnerC>(inner_cd); let pt = builder.add_virtual_proof_with_pis::<InnerC>(inner_cd);
pw.set_proof_with_pis_target(&pt, inner_proof);
let inner_data = VerifierCircuitTarget { let inner_data = VerifierCircuitTarget {
constants_sigmas_cap: builder.add_virtual_cap(inner_cd.config.fri_config.cap_height), constants_sigmas_cap: builder.add_virtual_cap(inner_cd.config.fri_config.cap_height),
circuit_digest: builder.add_virtual_hash(), circuit_digest: builder.add_virtual_hash(),
}; };
pw.set_verifier_data_target(&inner_data, inner_vd);
builder.verify_proof::<InnerC>(pt, &inner_data, inner_cd); builder.verify_proof::<InnerC>(&pt, &inner_data, inner_cd);
builder.print_gate_counts(0); builder.print_gate_counts(0);
if let Some(min_degree_bits) = min_degree_bits { if let Some(min_degree_bits) = min_degree_bits {
@ -131,6 +128,10 @@ where
let data = builder.build::<C>(); let data = builder.build::<C>();
let mut pw = PartialWitness::new();
pw.set_proof_with_pis_target(&pt, inner_proof);
pw.set_verifier_data_target(&inner_data, inner_vd);
let mut timing = TimingTree::new("prove", Level::Debug); let mut timing = TimingTree::new("prove", Level::Debug);
let proof = prove(&data.prover_only, &data.common, pw, &mut timing)?; let proof = prove(&data.prover_only, &data.common, pw, &mut timing)?;
timing.print(); timing.print();

View File

@ -143,7 +143,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
), ),
}; };
self.verify_proof::<C>(selected_proof, &selected_verifier_data, inner_common_data); self.verify_proof::<C>(&selected_proof, &selected_verifier_data, inner_common_data);
} }
/// Conditionally verify a proof with a new generated dummy proof. /// Conditionally verify a proof with a new generated dummy proof.

View File

@ -298,7 +298,7 @@ mod tests {
constants_sigmas_cap: builder.add_virtual_cap(data.common.config.fri_config.cap_height), constants_sigmas_cap: builder.add_virtual_cap(data.common.config.fri_config.cap_height),
circuit_digest: builder.add_virtual_hash(), circuit_digest: builder.add_virtual_hash(),
}; };
builder.verify_proof::<C>(proof, &verifier_data, &data.common); builder.verify_proof::<C>(&proof, &verifier_data, &data.common);
let data = builder.build::<C>(); let data = builder.build::<C>();
let config = CircuitConfig::standard_recursion_config(); let config = CircuitConfig::standard_recursion_config();
@ -308,7 +308,7 @@ mod tests {
constants_sigmas_cap: builder.add_virtual_cap(data.common.config.fri_config.cap_height), constants_sigmas_cap: builder.add_virtual_cap(data.common.config.fri_config.cap_height),
circuit_digest: builder.add_virtual_hash(), circuit_digest: builder.add_virtual_hash(),
}; };
builder.verify_proof::<C>(proof, &verifier_data, &data.common); builder.verify_proof::<C>(&proof, &verifier_data, &data.common);
while builder.num_gates() < 1 << 12 { while builder.num_gates() < 1 << 12 {
builder.add_gate(NoopGate, vec![]); builder.add_gate(NoopGate, vec![]);
} }

View File

@ -16,7 +16,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Recursively verifies an inner proof. /// Recursively verifies an inner proof.
pub fn verify_proof<C: GenericConfig<D, F = F>>( pub fn verify_proof<C: GenericConfig<D, F = F>>(
&mut self, &mut self,
proof_with_pis: ProofWithPublicInputsTarget<D>, proof_with_pis: &ProofWithPublicInputsTarget<D>,
inner_verifier_data: &VerifierCircuitTarget, inner_verifier_data: &VerifierCircuitTarget,
inner_common_data: &CommonCircuitData<F, D>, inner_common_data: &CommonCircuitData<F, D>,
) where ) where
@ -36,7 +36,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
); );
self.verify_proof_with_challenges::<C>( self.verify_proof_with_challenges::<C>(
proof_with_pis.proof, &proof_with_pis.proof,
public_inputs_hash, public_inputs_hash,
challenges, challenges,
inner_verifier_data, inner_verifier_data,
@ -47,7 +47,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Recursively verifies an inner proof. /// Recursively verifies an inner proof.
fn verify_proof_with_challenges<C: GenericConfig<D, F = F>>( fn verify_proof_with_challenges<C: GenericConfig<D, F = F>>(
&mut self, &mut self,
proof: ProofTarget<D>, proof: &ProofTarget<D>,
public_inputs_hash: HashOutTarget, public_inputs_hash: HashOutTarget,
challenges: ProofChallengesTarget<D>, challenges: ProofChallengesTarget<D>,
inner_verifier_data: &VerifierCircuitTarget, inner_verifier_data: &VerifierCircuitTarget,
@ -106,9 +106,9 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
let merkle_caps = &[ let merkle_caps = &[
inner_verifier_data.constants_sigmas_cap.clone(), inner_verifier_data.constants_sigmas_cap.clone(),
proof.wires_cap, proof.wires_cap.clone(),
proof.plonk_zs_partial_products_cap, proof.plonk_zs_partial_products_cap.clone(),
proof.quotient_polys_cap, proof.quotient_polys_cap.clone(),
]; ];
let fri_instance = inner_common_data.get_fri_instance_target(self, challenges.plonk_zeta); let fri_instance = inner_common_data.get_fri_instance_target(self, challenges.plonk_zeta);
@ -376,7 +376,7 @@ mod tests {
); );
pw.set_hash_target(inner_data.circuit_digest, inner_vd.circuit_digest); pw.set_hash_target(inner_data.circuit_digest, inner_vd.circuit_digest);
builder.verify_proof::<InnerC>(pt, &inner_data, &inner_cd); builder.verify_proof::<InnerC>(&pt, &inner_data, &inner_cd);
if print_gate_counts { if print_gate_counts {
builder.print_gate_counts(0); builder.print_gate_counts(0);