openvm_native_recursion/halo2/
verifier.rs
1use openvm_native_compiler::ir::Witness;
2use openvm_stark_backend::proof::Proof;
3use openvm_stark_sdk::config::{
4 baby_bear_poseidon2_root::BabyBearPoseidon2RootConfig, FriParameters,
5};
6use serde::{Deserialize, Serialize};
7use snark_verifier_sdk::Snark;
8
9use crate::{
10 config::outer::OuterConfig,
11 halo2::{
12 utils::Halo2ParamsReader, DslOperations, Halo2Params, Halo2Prover, Halo2ProvingPinning,
13 },
14 stark::outer::build_circuit_verify_operations,
15 types::MultiStarkVerificationAdvice,
16 witness::Witnessable,
17};
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct Halo2VerifierProvingKey {
21 pub pinning: Halo2ProvingPinning,
22 pub dsl_ops: DslOperations<OuterConfig>,
23}
24
25pub fn generate_halo2_verifier_proving_key(
27 params: &Halo2Params,
28 advice: MultiStarkVerificationAdvice<OuterConfig>,
29 fri_params: &FriParameters,
30 proof: &Proof<BabyBearPoseidon2RootConfig>,
31) -> Halo2VerifierProvingKey {
32 let mut witness = Witness::default();
33 proof.write(&mut witness);
34 let dsl_operations = build_circuit_verify_operations(advice, fri_params, proof);
35 Halo2VerifierProvingKey {
36 pinning: Halo2Prover::keygen(params, dsl_operations.clone(), witness),
37 dsl_ops: dsl_operations,
38 }
39}
40
41impl Halo2VerifierProvingKey {
42 pub fn prove(
43 &self,
44 params: &Halo2Params,
45 witness: Witness<OuterConfig>,
46 profiling: bool,
47 ) -> Snark {
48 Halo2Prover::prove(
49 params,
50 self.pinning.metadata.config_params.clone(),
51 self.pinning.metadata.break_points.clone(),
52 &self.pinning.pk,
53 self.dsl_ops.clone(),
54 witness,
55 profiling,
56 )
57 }
58 pub fn generate_dummy_snark(&self, reader: &impl Halo2ParamsReader) -> Snark {
62 self.pinning.generate_dummy_snark(reader)
63 }
64}