1use openvm_native_compiler::{
2 ir::{Array, Config, Ext, Felt, Usize},
3 prelude::*,
4};
5
6use crate::{digest::DigestVariable, fri::types::FriProofVariable, OUTER_DIGEST_SIZE};
7
8pub type OuterDigestVariable<C> = [Var<<C as Config>::N>; OUTER_DIGEST_SIZE];
9
10#[derive(DslVariable, Clone)]
11pub struct HintSlice<C: Config> {
12 pub length: Usize<C::N>,
13 pub id: Usize<C::N>,
14}
15
16#[derive(DslVariable, Clone)]
17pub struct StarkProofVariable<C: Config> {
18 pub commitments: CommitmentsVariable<C>,
19 pub opening: OpeningProofVariable<C>,
20 pub per_air: Array<C, AirProofDataVariable<C>>,
21 pub air_perm_by_height: Array<C, Usize<C::N>>,
23 pub log_up_pow_witness: Felt<C::F>,
24}
25
26#[derive(DslVariable, Clone)]
27pub struct AirProofDataVariable<C: Config> {
28 pub air_id: Usize<C::N>,
29 pub log_degree: Usize<C::N>,
31 #[allow(clippy::type_complexity)]
33 pub exposed_values_after_challenge: Array<C, Array<C, Ext<C::F, C::EF>>>,
34 pub public_values: Array<C, Felt<C::F>>,
36}
37
38#[derive(Clone)]
39pub struct MultiStarkVerificationAdviceVariable<C: Config> {
40 pub per_air: Array<C, StarkVerificationAdviceVariable<C>>,
41 pub num_challenges_to_sample_mask: Vec<Vec<Usize<C::N>>>,
44 pub trace_height_constraint_system: TraceHeightConstraintSystem<C>,
45}
46
47#[derive(Clone)]
48pub struct LinearConstraintVariable<C: Config> {
49 pub coefficients: Array<C, Var<C::N>>,
50 pub threshold: Var<C::N>,
51 pub is_threshold_at_p: bool,
53}
54
55#[derive(Clone)]
56pub struct TraceHeightConstraintSystem<C: Config> {
57 pub height_constraints: Vec<LinearConstraintVariable<C>>,
59 pub height_maxes: Array<C, OptionalVar<C>>,
63}
64
65#[derive(DslVariable, Clone)]
66pub struct OptionalVar<C: Config> {
67 pub is_some: Usize<C::N>,
68 pub value: Var<C::N>,
69}
70
71#[derive(DslVariable, Clone)]
72pub struct StarkVerificationAdviceVariable<C: Config> {
73 pub preprocessed_data: Array<C, DigestVariable<C>>,
75 pub width: TraceWidthVariable<C>,
77 pub log_quotient_degree: Usize<C::N>,
80 pub num_public_values: Usize<C::N>,
82 pub num_challenges_to_sample: Array<C, Usize<C::N>>,
84 pub num_exposed_values_after_challenge: Array<C, Usize<C::N>>,
86}
87
88#[derive(DslVariable, Debug, Clone)]
89pub struct TraceWidthVariable<C: Config> {
90 pub preprocessed: Array<C, Usize<C::N>>,
91 pub cached_mains: Array<C, Usize<C::N>>,
92 pub common_main: Usize<C::N>,
93 pub after_challenge: Array<C, Usize<C::N>>,
95}
96
97#[derive(DslVariable, Clone)]
98pub struct CommitmentsVariable<C: Config> {
99 pub main_trace: Array<C, DigestVariable<C>>,
100 pub after_challenge: Array<C, DigestVariable<C>>,
101 pub quotient: DigestVariable<C>,
102}
103
104#[derive(DslVariable, Clone)]
105pub struct OpeningProofVariable<C: Config> {
106 pub proof: FriProofVariable<C>,
107 pub values: OpenedValuesVariable<C>,
108}
109
110#[allow(clippy::type_complexity)]
111#[derive(DslVariable, Clone)]
112pub struct OpenedValuesVariable<C: Config> {
113 pub preprocessed: Array<C, AdjacentOpenedValuesVariable<C>>,
115 pub main: Array<C, Array<C, AdjacentOpenedValuesVariable<C>>>,
118 pub after_challenge: Array<C, Array<C, AdjacentOpenedValuesVariable<C>>>,
120 pub quotient: Array<C, Array<C, Array<C, Ext<C::F, C::EF>>>>,
122}
123
124#[derive(DslVariable, Debug, Clone)]
125pub struct AdjacentOpenedValuesVariable<C: Config> {
126 pub local: Array<C, Ext<C::F, C::EF>>,
127 pub next: Array<C, Ext<C::F, C::EF>>,
128}