openvm_recursion_circuit/batch_constraint/
bus.rs1use openvm_recursion_circuit_derive::AlignedBorrow;
2use openvm_stark_sdk::config::baby_bear_poseidon2::D_EF;
3use p3_field::PrimeCharacteristicRing;
4
5use crate::{define_typed_per_proof_lookup_bus, define_typed_per_proof_permutation_bus};
6
7#[repr(u8)]
8#[derive(Debug, Copy, Clone)]
9pub(super) enum BatchConstraintInnerMessageType {
10 R,
11 Xi,
12 Mu,
13}
14
15impl BatchConstraintInnerMessageType {
16 pub fn to_field<T: PrimeCharacteristicRing>(self) -> T {
17 T::from_u8(self as u8)
18 }
19}
20
21#[repr(C)]
22#[derive(AlignedBorrow, Debug, Clone)]
23pub struct BatchConstraintConductorMessage<T> {
24 pub msg_type: T,
25 pub idx: T,
26 pub value: [T; D_EF],
27}
28
29define_typed_per_proof_lookup_bus!(BatchConstraintConductorBus, BatchConstraintConductorMessage);
30
31#[repr(C)]
32#[derive(AlignedBorrow, Debug, Clone)]
33pub struct SumcheckClaimMessage<T> {
34 pub round: T,
35 pub value: [T; D_EF],
36}
37
38define_typed_per_proof_permutation_bus!(SumcheckClaimBus, SumcheckClaimMessage);
39
40#[repr(C)]
41#[derive(AlignedBorrow, Debug, Clone)]
42pub struct EqSharpUniMessage<T> {
43 pub xi_idx: T,
44 pub iter_idx: T,
45 pub product: [T; D_EF],
46}
47
48define_typed_per_proof_permutation_bus!(EqSharpUniBus, EqSharpUniMessage);
49
50#[repr(C)]
51#[derive(AlignedBorrow, Debug, Clone)]
52pub struct EqZeroNMessage<T> {
53 pub is_sharp: T,
54 pub value: [T; D_EF],
55}
56
57define_typed_per_proof_permutation_bus!(EqZeroNBus, EqZeroNMessage);
58
59#[repr(C)]
60#[derive(AlignedBorrow, Debug, Clone)]
61pub struct EqNOuterMessage<T> {
62 pub is_sharp: T,
63 pub n: T,
64 pub value: [T; D_EF],
65}
66
67define_typed_per_proof_lookup_bus!(EqNOuterBus, EqNOuterMessage);
68
69#[repr(C)]
70#[derive(AlignedBorrow, Debug, Clone)]
71pub struct Eq3bMessage<T> {
72 pub sort_idx: T,
73 pub interaction_idx: T,
74 pub eq_3b: [T; D_EF],
75}
76
77define_typed_per_proof_permutation_bus!(Eq3bBus, Eq3bMessage);
78
79#[repr(C)]
80#[derive(AlignedBorrow, Debug, Clone)]
81pub struct SymbolicExpressionMessage<T> {
82 pub air_idx: T,
83 pub node_idx: T,
84 pub value: [T; D_EF],
85}
86
87define_typed_per_proof_lookup_bus!(SymbolicExpressionBus, SymbolicExpressionMessage);
88
89#[repr(C)]
90#[derive(AlignedBorrow, Debug, Clone)]
91pub struct ExpressionClaimMessage<T> {
92 pub is_interaction: T,
93 pub idx: T,
94 pub value: [T; D_EF],
95}
96
97define_typed_per_proof_permutation_bus!(ExpressionClaimBus, ExpressionClaimMessage);
98
99#[repr(C)]
100#[derive(AlignedBorrow, Debug, Clone)]
101pub struct InteractionsFoldingMessage<T> {
102 pub air_idx: T,
103 pub interaction_idx: T,
104 pub is_mult: T,
105 pub idx_in_message: T,
106 pub value: [T; D_EF],
107}
108
109define_typed_per_proof_permutation_bus!(InteractionsFoldingBus, InteractionsFoldingMessage);
110
111#[repr(C)]
112#[derive(AlignedBorrow, Debug, Clone)]
113pub struct ConstraintsFoldingMessage<T> {
114 pub air_idx: T,
115 pub constraint_idx: T,
116 pub value: [T; D_EF],
117}
118
119define_typed_per_proof_permutation_bus!(ConstraintsFoldingBus, ConstraintsFoldingMessage);
120
121#[repr(C)]
122#[derive(AlignedBorrow, Debug, Clone)]
123pub struct EqNegInternalMessage<T> {
124 pub neg_n: T,
126 pub u: [T; D_EF],
128 pub r: [T; D_EF],
130 pub r_omega: [T; D_EF],
132}
133
134define_typed_per_proof_permutation_bus!(EqNegInternalBus, EqNegInternalMessage);
135
136#[repr(C)]
137#[derive(AlignedBorrow, Debug, Clone)]
138pub struct UnivariateSumcheckInputMessage<T> {
139 pub tidx: T,
140}
141
142define_typed_per_proof_permutation_bus!(UnivariateSumcheckInputBus, UnivariateSumcheckInputMessage);