openvm_native_recursion/halo2/
testing_utils.rs
1use openvm_native_compiler::prelude::Witness;
2use openvm_stark_sdk::{
3 config::{
4 baby_bear_poseidon2_root::{BabyBearPoseidon2RootConfig, BabyBearPoseidon2RootEngine},
5 FriParameters,
6 },
7 engine::StarkFriEngine,
8 utils::ProofInputForTest,
9};
10use snark_verifier_sdk::Snark;
11
12use crate::{
13 config::outer::new_from_outer_multi_vk,
14 halo2::{
15 utils::{CacheHalo2ParamsReader, Halo2ParamsReader},
16 verifier::{generate_halo2_verifier_proving_key, Halo2VerifierProvingKey},
17 },
18 witness::Witnessable,
19};
20
21pub fn run_static_verifier_test(
22 mut test_proof_input: ProofInputForTest<BabyBearPoseidon2RootConfig>,
23 fri_params: FriParameters,
24) -> (Halo2VerifierProvingKey, Snark) {
25 let k = 21;
26 let halo2_params_reader = CacheHalo2ParamsReader::new_with_default_params_dir();
27 let params = &halo2_params_reader.read_params(k);
28 test_proof_input.sort_chips();
29 let info_span =
30 tracing::info_span!("prove outer stark to verify", step = "outer_stark_prove").entered();
31 let engine = BabyBearPoseidon2RootEngine::new(fri_params);
32 let vparams = test_proof_input.run_test(&engine).unwrap();
33
34 info_span.exit();
35
36 let advice = new_from_outer_multi_vk(&vparams.data.vk);
38
39 let info_span = tracing::info_span!(
40 "keygen halo2 verifier circuit",
41 step = "static_verifier_keygen"
42 )
43 .entered();
44 let stark_verifier_circuit = generate_halo2_verifier_proving_key(
45 params,
46 advice,
47 &vparams.fri_params,
48 &vparams.data.proof,
49 );
50 info_span.exit();
51
52 let info_span = tracing::info_span!(
53 "prove halo2 verifier circuit",
54 step = "static_verifier_prove"
55 )
56 .entered();
57 let mut witness = Witness::default();
58 vparams.data.proof.write(&mut witness);
59 let static_verifier_snark = stark_verifier_circuit.prove(params, witness, false);
60 info_span.exit();
61 (stark_verifier_circuit, static_verifier_snark)
62}