From 2fa347128f4ec94e5abf023799b96630444614ea Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Fri, 26 Aug 2022 09:49:59 +0200 Subject: [PATCH] All recursive proofs --- evm/src/all_stark.rs | 2 +- evm/src/recursive_verifier.rs | 73 ++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/evm/src/all_stark.rs b/evm/src/all_stark.rs index a47b5b7c..0d822ec6 100644 --- a/evm/src/all_stark.rs +++ b/evm/src/all_stark.rs @@ -76,7 +76,7 @@ pub enum Table { } impl Table { - pub(crate) fn num_tables() -> usize { + pub(crate) const fn num_tables() -> usize { Table::Memory as usize + 1 } } diff --git a/evm/src/recursive_verifier.rs b/evm/src/recursive_verifier.rs index 22347dab..9c23e01e 100644 --- a/evm/src/recursive_verifier.rs +++ b/evm/src/recursive_verifier.rs @@ -57,14 +57,14 @@ pub(crate) fn recursively_prove_stark_proof< all_proof: &AllProof, cross_table_lookups: &[CrossTableLookup], inner_config: &StarkConfig, - circuit_config: CircuitConfig, + circuit_config: &CircuitConfig, ) -> Result> where [(); S::COLUMNS]:, [(); C::Hasher::HASH_SIZE]:, C::Hasher: AlgebraicHasher, { - let mut builder = CircuitBuilder::::new(circuit_config); + let mut builder = CircuitBuilder::::new(circuit_config.clone()); let mut pw = PartialWitness::new(); let nums_ctl_zs = all_proof.nums_ctl_zs(); @@ -105,6 +105,75 @@ where data.prove(pw) } +pub(crate) fn recursively_prove_all_proofs< + F: RichField + Extendable, + C: GenericConfig, + const D: usize, +>( + all_stark: &AllStark, + all_proof: &AllProof, + cross_table_lookups: &[CrossTableLookup], + inner_config: &StarkConfig, + circuit_config: CircuitConfig, +) -> Result<[ProofWithPublicInputs; Table::num_tables()]> +where + [(); CpuStark::::COLUMNS]:, + [(); KeccakStark::::COLUMNS]:, + [(); KeccakMemoryStark::::COLUMNS]:, + [(); LogicStark::::COLUMNS]:, + [(); MemoryStark::::COLUMNS]:, + [(); C::Hasher::HASH_SIZE]:, + C::Hasher: AlgebraicHasher, +{ + Ok([ + recursively_prove_stark_proof( + Table::Cpu, + all_stark.cpu_stark, + all_stark, + all_proof, + cross_table_lookups, + inner_config, + &circuit_config, + )?, + recursively_prove_stark_proof( + Table::Cpu, + all_stark.cpu_stark, + all_stark, + all_proof, + cross_table_lookups, + inner_config, + &circuit_config, + )?, + recursively_prove_stark_proof( + Table::Cpu, + all_stark.cpu_stark, + all_stark, + all_proof, + cross_table_lookups, + inner_config, + &circuit_config, + )?, + recursively_prove_stark_proof( + Table::Cpu, + all_stark.cpu_stark, + all_stark, + all_proof, + cross_table_lookups, + inner_config, + &circuit_config, + )?, + recursively_prove_stark_proof( + Table::Cpu, + all_stark.cpu_stark, + all_stark, + all_proof, + cross_table_lookups, + inner_config, + &circuit_config, + )?, + ]) +} + pub fn verify_proof_circuit< F: RichField + Extendable, C: GenericConfig,