openvm_sdk/prover/
mod.rs
1use std::sync::Arc;
2
3use openvm_circuit::arch::VmConfig;
4use openvm_stark_sdk::openvm_stark_backend::Chip;
5
6use crate::{keygen::AppProvingKey, stdin::StdIn, NonRootCommittedExe, F, SC};
7
8mod agg;
9pub use agg::*;
10mod app;
11pub use app::*;
12use openvm_native_recursion::halo2::utils::Halo2ParamsReader;
13
14mod halo2;
15#[allow(unused_imports)]
16pub use halo2::*;
17mod root;
18pub use root::*;
19mod stark;
20pub mod vm;
21
22#[allow(unused_imports)]
23pub use stark::*;
24
25use crate::{keygen::AggProvingKey, prover::halo2::Halo2Prover, types::EvmProof};
26
27pub struct ContinuationProver<VC> {
28 stark_prover: StarkProver<VC>,
29 halo2_prover: Halo2Prover,
30}
31
32impl<VC> ContinuationProver<VC> {
33 pub fn new(
34 reader: &impl Halo2ParamsReader,
35 app_pk: Arc<AppProvingKey<VC>>,
36 app_committed_exe: Arc<NonRootCommittedExe>,
37 agg_pk: AggProvingKey,
38 ) -> Self
39 where
40 VC: VmConfig<F>,
41 {
42 let AggProvingKey {
43 agg_stark_pk,
44 halo2_pk,
45 } = agg_pk;
46 let stark_prover = StarkProver::new(app_pk, app_committed_exe, agg_stark_pk);
47 Self {
48 stark_prover,
49 halo2_prover: Halo2Prover::new(reader, halo2_pk),
50 }
51 }
52
53 pub fn set_program_name(&mut self, program_name: impl AsRef<str>) -> &mut Self {
54 self.stark_prover.set_program_name(program_name);
55 self
56 }
57
58 pub fn generate_proof_for_evm(&self, input: StdIn) -> EvmProof
59 where
60 VC: VmConfig<F>,
61 VC::Executor: Chip<SC>,
62 VC::Periphery: Chip<SC>,
63 {
64 let root_proof = self.stark_prover.generate_proof_for_outer_recursion(input);
65 self.halo2_prover.prove_for_evm(&root_proof)
66 }
67}