openvm_native_recursion/stark/
outer.rs

1use openvm_native_compiler::ir::Builder;
2use openvm_stark_backend::proof::Proof;
3use openvm_stark_sdk::config::{
4    baby_bear_poseidon2_root::BabyBearPoseidon2RootConfig, FriParameters,
5};
6
7use crate::{
8    challenger::multi_field32::MultiField32ChallengerVariable, config::outer::OuterConfig,
9    fri::TwoAdicFriPcsVariable, halo2::DslOperations, stark::StarkVerifier,
10    types::MultiStarkVerificationAdvice, utils::const_fri_config, witness::Witnessable,
11};
12
13pub fn build_circuit_verify_operations(
14    advice: MultiStarkVerificationAdvice<OuterConfig>,
15    fri_params: &FriParameters,
16    proof: &Proof<BabyBearPoseidon2RootConfig>,
17) -> DslOperations<OuterConfig> {
18    let mut builder = Builder::<OuterConfig>::default();
19    builder.flags.static_only = true;
20
21    builder.cycle_tracker_start("VerifierProgram");
22    let input = proof.read(&mut builder);
23
24    let pcs = TwoAdicFriPcsVariable {
25        config: const_fri_config(&mut builder, fri_params),
26    };
27    StarkVerifier::verify::<MultiField32ChallengerVariable<_>>(&mut builder, &pcs, &advice, &input);
28
29    builder.cycle_tracker_end("VerifierProgram");
30    DslOperations {
31        operations: builder.operations,
32        num_public_values: 0,
33    }
34}