openvm_continuations/circuit/deferral/
dummy.rs1use std::sync::Arc;
2
3use openvm_circuit_primitives::ColumnsAir;
4use openvm_stark_backend::{
5 keygen::types::MultiStarkVerifyingKey, p3_matrix::Matrix, AirRef, PartitionedBaseAir,
6 StarkEngine, SystemParams,
7};
8use p3_air::{Air, AirBuilder, AirBuilderWithPublicValues, BaseAir, BaseAirWithPublicValues};
9
10use super::DeferralCircuitPvs;
11use crate::SC;
12
13pub(crate) struct EmptyAirWithPvs(pub(crate) usize);
18
19impl ColumnsAir for EmptyAirWithPvs {}
21
22impl<F> BaseAir<F> for EmptyAirWithPvs {
23 fn width(&self) -> usize {
24 1
25 }
26}
27
28impl<F> BaseAirWithPublicValues<F> for EmptyAirWithPvs {
29 fn num_public_values(&self) -> usize {
30 self.0
31 }
32}
33
34impl<F> PartitionedBaseAir<F> for EmptyAirWithPvs {}
35
36impl<AB: AirBuilder + AirBuilderWithPublicValues> Air<AB> for EmptyAirWithPvs {
37 fn eval(&self, builder: &mut AB) {
38 let main = builder.main();
39 let local = main.row_slice(0).unwrap();
40 builder.assert_zero(local[0].clone());
41
42 let pvs = builder
43 .public_values()
44 .iter()
45 .map(|pv| (*pv).into())
46 .collect::<Vec<AB::Expr>>();
47 for pv in pvs {
48 builder.assert_eq(pv.clone(), pv);
50 }
51 }
52}
53
54pub fn dummy_deferral_circuit_vk<E>(system_params: SystemParams) -> Arc<MultiStarkVerifyingKey<SC>>
55where
56 E: StarkEngine<SC = SC>,
57{
58 let engine = E::new(system_params);
59 let dummy_air = Arc::new(EmptyAirWithPvs(DeferralCircuitPvs::<u8>::width())) as AirRef<SC>;
60 Arc::new(engine.keygen(&[dummy_air]).1)
61}