openvm_stark_sdk/
engine.rs1use std::sync::Arc;
2
3pub use openvm_stark_backend::engine::StarkEngine;
4use openvm_stark_backend::{
5 config::{StarkGenericConfig, Val},
6 engine::VerificationData,
7 p3_matrix::dense::RowMajorMatrix,
8 prover::{hal::DeviceDataTransporter, types::AirProvingContext},
9 verifier::VerificationError,
10 AirRef,
11};
12use tracing::Level;
13
14use crate::config::{instrument::StarkHashStatistics, setup_tracing_with_log_level, FriParameters};
15
16pub trait StarkEngineWithHashInstrumentation: StarkEngine {
17 fn clear_instruments(&mut self);
18 fn stark_hash_statistics<T>(&self, custom: T) -> StarkHashStatistics<T>;
19}
20
21pub struct VerificationDataWithFriParams<SC: StarkGenericConfig> {
23 pub data: VerificationData<SC>,
24 pub fri_params: FriParameters,
25}
26
27pub trait StarkFriEngine: StarkEngine + Sized {
29 fn new(fri_params: FriParameters) -> Self;
30 fn fri_params(&self) -> FriParameters;
31 fn run_test(
32 &self,
33 airs: Vec<AirRef<Self::SC>>,
34 ctx: Vec<AirProvingContext<Self::PB>>,
35 ) -> Result<VerificationDataWithFriParams<Self::SC>, VerificationError> {
36 setup_tracing_with_log_level(Level::WARN);
37 let data = <Self as StarkEngine>::run_test_impl(self, airs, ctx)?;
38 Ok(VerificationDataWithFriParams {
39 data,
40 fri_params: self.fri_params(),
41 })
42 }
43 fn run_test_fast(
44 airs: Vec<AirRef<Self::SC>>,
45 ctx: Vec<AirProvingContext<Self::PB>>,
46 ) -> Result<VerificationDataWithFriParams<Self::SC>, VerificationError> {
47 let engine = Self::new(FriParameters::standard_fast());
48 engine.run_test(airs, ctx)
49 }
50 fn run_simple_test_impl(
54 &self,
55 chips: Vec<AirRef<Self::SC>>,
56 traces: Vec<RowMajorMatrix<Val<Self::SC>>>,
57 public_values: Vec<Vec<Val<Self::SC>>>,
58 ) -> Result<VerificationDataWithFriParams<Self::SC>, VerificationError> {
59 let traces = traces
60 .into_iter()
61 .map(|trace| self.device().transport_matrix_to_device(&Arc::new(trace)))
62 .collect();
63 self.run_test(
64 chips,
65 AirProvingContext::multiple_simple(traces, public_values),
66 )
67 }
68 fn run_simple_test_fast(
69 airs: Vec<AirRef<Self::SC>>,
70 traces: Vec<RowMajorMatrix<Val<Self::SC>>>,
71 public_values: Vec<Vec<Val<Self::SC>>>,
72 ) -> Result<VerificationDataWithFriParams<Self::SC>, VerificationError> {
73 let engine = Self::new(FriParameters::standard_fast());
74 StarkFriEngine::run_simple_test_impl(&engine, airs, traces, public_values)
75 }
76 fn run_simple_test_no_pis_fast(
77 airs: Vec<AirRef<Self::SC>>,
78 traces: Vec<RowMajorMatrix<Val<Self::SC>>>,
79 ) -> Result<VerificationDataWithFriParams<Self::SC>, VerificationError> {
80 let pis = vec![vec![]; airs.len()];
81 <Self as StarkFriEngine>::run_simple_test_fast(airs, traces, pis)
82 }
83}