openvm_circuit/arch/testing/execution/
air.rs
1use std::{borrow::Borrow, mem::size_of};
2
3use openvm_circuit_primitives_derive::AlignedBorrow;
4use openvm_stark_backend::{
5 interaction::InteractionBuilder,
6 p3_air::{Air, BaseAir},
7 p3_field::Field,
8 p3_matrix::Matrix,
9 rap::{BaseAirWithPublicValues, PartitionedBaseAir},
10};
11
12use crate::arch::{ExecutionBus, ExecutionState};
13
14#[derive(Clone, Copy, Debug, AlignedBorrow, derive_new::new)]
15#[repr(C)]
16pub struct DummyExecutionInteractionCols<T> {
17 pub count: T,
19 pub initial_state: ExecutionState<T>,
20 pub final_state: ExecutionState<T>,
21}
22
23#[derive(Clone, Copy, Debug, derive_new::new)]
24pub struct ExecutionDummyAir {
25 pub bus: ExecutionBus,
26}
27
28impl<F: Field> BaseAirWithPublicValues<F> for ExecutionDummyAir {}
29impl<F: Field> PartitionedBaseAir<F> for ExecutionDummyAir {}
30impl<F: Field> BaseAir<F> for ExecutionDummyAir {
31 fn width(&self) -> usize {
32 size_of::<DummyExecutionInteractionCols<u8>>()
33 }
34}
35
36impl<AB: InteractionBuilder> Air<AB> for ExecutionDummyAir {
37 fn eval(&self, builder: &mut AB) {
38 let main = builder.main();
39 let local = main.row_slice(0);
40 let local: &DummyExecutionInteractionCols<AB::Var> = (*local).borrow();
41 self.bus
42 .execute(builder, local.count, local.initial_state, local.final_state);
43 }
44}