openvm_continuations/verifier/common/
types.rs1use std::{array, borrow::BorrowMut};
2
3use openvm_circuit::{
4 circuit_derive::AlignedBorrow,
5 system::{connector::VmConnectorPvs, memory::merkle::MemoryMerklePvs},
6};
7use openvm_native_compiler::prelude::*;
8use openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32;
9
10#[derive(Debug, Clone, Copy)]
11pub struct SpecialAirIds {
12 pub program_air_id: usize,
13 pub connector_air_id: usize,
14 pub public_values_air_id: usize,
15}
16
17#[derive(Debug, Clone, Copy, AlignedBorrow)]
18#[repr(C)]
19pub struct VmVerifierPvs<T> {
20 pub app_commit: [T; DIGEST_SIZE],
22 pub connector: VmConnectorPvs<T>,
24 pub memory: MemoryMerklePvs<T, DIGEST_SIZE>,
26 pub public_values_commit: [T; DIGEST_SIZE],
29}
30
31impl<F: PrimeField32> VmVerifierPvs<Felt<F>> {
32 pub fn uninit<C: Config<F = F>>(builder: &mut Builder<C>) -> Self {
33 Self {
34 app_commit: array::from_fn(|_| builder.uninit()),
35 connector: VmConnectorPvs {
36 initial_pc: builder.uninit(),
37 final_pc: builder.uninit(),
38 exit_code: builder.uninit(),
39 is_terminate: builder.uninit(),
40 },
41 memory: MemoryMerklePvs {
42 initial_root: array::from_fn(|_| builder.uninit()),
43 final_root: array::from_fn(|_| builder.uninit()),
44 },
45 public_values_commit: array::from_fn(|_| builder.uninit()),
46 }
47 }
48}
49
50impl<F: Default + Clone> VmVerifierPvs<Felt<F>> {
51 pub fn flatten(self) -> Vec<Felt<F>> {
52 let mut v = vec![Felt(0, Default::default()); VmVerifierPvs::<u8>::width()];
53 *v.as_mut_slice().borrow_mut() = self;
54 v
55 }
56}