1use core::ops::Range;
2
3use chiplets::hasher::RATE_LEN;
4use miden_core::utils::range;
5
6mod challenges;
7pub use challenges::Challenges;
8
9pub mod chiplets;
10pub mod decoder;
11pub mod range;
12pub mod stack;
13
14mod rows;
15pub use rows::{RowIndex, RowIndexError};
16
17mod main_trace;
18pub use main_trace::{MainTrace, MainTraceRow};
19pub use miden_crypto::stark::air::AuxBuilder;
20
21pub const MIN_TRACE_LEN: usize = 64;
26
27pub const SYS_TRACE_OFFSET: usize = 0;
35pub const SYS_TRACE_WIDTH: usize = 6;
36pub const SYS_TRACE_RANGE: Range<usize> = range(SYS_TRACE_OFFSET, SYS_TRACE_WIDTH);
37
38pub const CLK_COL_IDX: usize = SYS_TRACE_OFFSET;
39pub const CTX_COL_IDX: usize = SYS_TRACE_OFFSET + 1;
40pub const FN_HASH_OFFSET: usize = SYS_TRACE_OFFSET + 2;
41pub const FN_HASH_RANGE: Range<usize> = range(FN_HASH_OFFSET, 4);
42
43pub const DECODER_TRACE_OFFSET: usize = SYS_TRACE_RANGE.end;
45pub const DECODER_TRACE_WIDTH: usize = 24;
46pub const DECODER_TRACE_RANGE: Range<usize> = range(DECODER_TRACE_OFFSET, DECODER_TRACE_WIDTH);
47
48pub const STACK_TRACE_OFFSET: usize = DECODER_TRACE_RANGE.end;
50pub const STACK_TRACE_WIDTH: usize = 19;
51pub const STACK_TRACE_RANGE: Range<usize> = range(STACK_TRACE_OFFSET, STACK_TRACE_WIDTH);
52
53pub const LOG_PRECOMPILE_LABEL: u8 = miden_core::operations::opcodes::LOGPRECOMPILE;
55
56pub mod log_precompile {
57 use core::ops::Range;
58
59 use miden_core::utils::range;
60
61 use super::chiplets::hasher::{CAPACITY_LEN, DIGEST_LEN};
62
63 pub const HELPER_ADDR_IDX: usize = 0;
68 pub const HELPER_CAP_PREV_OFFSET: usize = 1;
70 pub const HELPER_CAP_PREV_RANGE: Range<usize> = range(HELPER_CAP_PREV_OFFSET, CAPACITY_LEN);
72
73 pub const STACK_R0_BASE: usize = 0;
79 pub const STACK_R0_RANGE: Range<usize> = range(STACK_R0_BASE, DIGEST_LEN);
80
81 pub const STACK_R1_BASE: usize = STACK_R0_RANGE.end;
82 pub const STACK_R1_RANGE: Range<usize> = range(STACK_R1_BASE, DIGEST_LEN);
83
84 pub const STACK_CAP_NEXT_BASE: usize = STACK_R1_RANGE.end;
85 pub const STACK_CAP_NEXT_RANGE: Range<usize> = range(STACK_CAP_NEXT_BASE, CAPACITY_LEN);
86
87 pub const STACK_COMM_RANGE: Range<usize> = STACK_R0_RANGE;
89 pub const STACK_TAG_RANGE: Range<usize> = STACK_R1_RANGE;
91
92 pub const STATE_RATE_0_RANGE: Range<usize> = range(0, DIGEST_LEN);
105 pub const STATE_RATE_1_RANGE: Range<usize> = range(STATE_RATE_0_RANGE.end, DIGEST_LEN);
106 pub const STATE_CAP_RANGE: Range<usize> = range(STATE_RATE_1_RANGE.end, CAPACITY_LEN);
107}
108
109pub const RANGE_CHECK_TRACE_OFFSET: usize = STACK_TRACE_RANGE.end;
111pub const RANGE_CHECK_TRACE_WIDTH: usize = 2;
112pub const RANGE_CHECK_TRACE_RANGE: Range<usize> =
113 range(RANGE_CHECK_TRACE_OFFSET, RANGE_CHECK_TRACE_WIDTH);
114
115pub const CHIPLETS_OFFSET: usize = RANGE_CHECK_TRACE_RANGE.end;
117pub const CHIPLETS_WIDTH: usize = 20;
118pub const CHIPLETS_RANGE: Range<usize> = range(CHIPLETS_OFFSET, CHIPLETS_WIDTH);
119
120pub const CHIPLET_SELECTORS_RANGE: Range<usize> = range(CHIPLETS_OFFSET, 5);
122pub const CHIPLET_S0_COL_IDX: usize = CHIPLET_SELECTORS_RANGE.start;
123pub const CHIPLET_S1_COL_IDX: usize = CHIPLET_SELECTORS_RANGE.start + 1;
124pub const CHIPLET_S2_COL_IDX: usize = CHIPLET_SELECTORS_RANGE.start + 2;
125pub const CHIPLET_S3_COL_IDX: usize = CHIPLET_SELECTORS_RANGE.start + 3;
126pub const CHIPLET_S4_COL_IDX: usize = CHIPLET_SELECTORS_RANGE.start + 4;
127
128pub const TRACE_WIDTH: usize = CHIPLETS_OFFSET + CHIPLETS_WIDTH;
129pub const PADDED_TRACE_WIDTH: usize = TRACE_WIDTH.next_multiple_of(RATE_LEN);
130
131pub const DECODER_AUX_TRACE_OFFSET: usize = 0;
140pub const DECODER_AUX_TRACE_WIDTH: usize = 3;
141pub const DECODER_AUX_TRACE_RANGE: Range<usize> =
142 range(DECODER_AUX_TRACE_OFFSET, DECODER_AUX_TRACE_WIDTH);
143
144pub const STACK_AUX_TRACE_OFFSET: usize = DECODER_AUX_TRACE_RANGE.end;
146pub const STACK_AUX_TRACE_WIDTH: usize = 1;
147pub const STACK_AUX_TRACE_RANGE: Range<usize> =
148 range(STACK_AUX_TRACE_OFFSET, STACK_AUX_TRACE_WIDTH);
149
150pub const RANGE_CHECK_AUX_TRACE_OFFSET: usize = STACK_AUX_TRACE_RANGE.end;
152pub const RANGE_CHECK_AUX_TRACE_WIDTH: usize = 1;
153pub const RANGE_CHECK_AUX_TRACE_RANGE: Range<usize> =
154 range(RANGE_CHECK_AUX_TRACE_OFFSET, RANGE_CHECK_AUX_TRACE_WIDTH);
155
156pub const HASH_KERNEL_VTABLE_AUX_TRACE_OFFSET: usize = RANGE_CHECK_AUX_TRACE_RANGE.end;
163pub const HASHER_AUX_TRACE_WIDTH: usize = 1;
164pub const HASHER_AUX_TRACE_RANGE: Range<usize> =
165 range(HASH_KERNEL_VTABLE_AUX_TRACE_OFFSET, HASHER_AUX_TRACE_WIDTH);
166
167pub const CHIPLETS_BUS_AUX_TRACE_OFFSET: usize = HASHER_AUX_TRACE_RANGE.end;
169pub const CHIPLETS_BUS_AUX_TRACE_WIDTH: usize = 1;
170pub const CHIPLETS_BUS_AUX_TRACE_RANGE: Range<usize> =
171 range(CHIPLETS_BUS_AUX_TRACE_OFFSET, CHIPLETS_BUS_AUX_TRACE_WIDTH);
172
173pub const ACE_CHIPLET_WIRING_BUS_OFFSET: usize = CHIPLETS_BUS_AUX_TRACE_RANGE.end;
175pub const ACE_CHIPLET_WIRING_BUS_WIDTH: usize = 1;
176pub const ACE_CHIPLET_WIRING_BUS_RANGE: Range<usize> =
177 range(ACE_CHIPLET_WIRING_BUS_OFFSET, ACE_CHIPLET_WIRING_BUS_WIDTH);
178
179pub const AUX_TRACE_WIDTH: usize = ACE_CHIPLET_WIRING_BUS_RANGE.end;
181
182pub const AUX_TRACE_RAND_CHALLENGES: usize = 2;
184
185pub const MAX_MESSAGE_WIDTH: usize = 16;
187
188pub mod bus_message {
201 pub const LABEL_IDX: usize = 0;
205
206 pub const ADDR_IDX: usize = 1;
210
211 pub const NODE_INDEX_IDX: usize = 2;
216
217 pub const STATE_START_IDX: usize = 3;
222
223 pub const CAPACITY_START_IDX: usize = 11;
228
229 pub const CAPACITY_DOMAIN_IDX: usize = CAPACITY_START_IDX + 1;
234}