Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mega_flavor_generated.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE — do not edit. Regenerate via:
2// node barretenberg/cpp/scripts/flavor-codegen/dist/main.js
3//
4// Source: barretenberg/cpp/scripts/flavor-codegen/src/flavors/mega.ts
5#pragma once
6
7#include <array>
8#include <cstddef>
9#include <cstdint>
10#include <span>
11#include <string>
12#include <tuple>
13#include <vector>
14
34
35namespace bb {
36
38 public:
39 // Dense flavor-local entity index. Layout: [masking | precomputed | witness | shifted].
40 enum class EntityId : uint16_t {
41 sigma_1 = 0,
42 sigma_2 = 1,
43 sigma_3 = 2,
44 sigma_4 = 3,
45 id_1 = 4,
46 id_2 = 5,
47 id_3 = 6,
48 id_4 = 7,
50 lagrange_last = 9,
51 q_lookup = 10,
52 table_1 = 11,
53 table_2 = 12,
54 table_3 = 13,
55 table_4 = 14,
56 q_m = 15,
57 q_r = 16,
58 q_o = 17,
59 q_c = 18,
60 q_l = 19,
61 q_4 = 20,
62 q_arith = 21,
64 q_delta_range = 23,
65 q_elliptic = 24,
66 q_memory = 25,
67 q_nnf = 26,
68 lagrange_ecc_op = 27,
69 q_busread = 28,
71 databus_id = 30,
76 q_5 = 35,
84 w_l = 43,
85 w_r = 44,
86 w_o = 45,
87 w_4 = 46,
88 z_perm = 47,
89 lookup_inverses = 48,
92 ecc_op_wire_1 = 51,
93 ecc_op_wire_2 = 52,
94 ecc_op_wire_3 = 53,
95 ecc_op_wire_4 = 54,
96 kernel_calldata = 55,
114 return_data = 73,
117 w_l_shift = 76,
118 w_r_shift = 77,
119 w_o_shift = 78,
120 w_4_shift = 79,
121 z_perm_shift = 80,
122 };
123
124 // Sumcheck relation tuple. Source of truth is
125 // flavor-codegen/src/flavors/mega.ts; structural relations are omitted.
126 template <typename FF>
137 EntityId::kernel_calldata,
138 EntityId::kernel_calldata_read_counts,
139 EntityId::kernel_calldata_inverses,
140 EntityId::kernel_calldata_indicator,
141 EntityId::q_l>,
143 EntityId::first_app_calldata,
144 EntityId::first_app_calldata_read_counts,
145 EntityId::first_app_calldata_inverses,
146 EntityId::first_app_calldata_indicator,
147 EntityId::q_r>,
149 EntityId::second_app_calldata,
150 EntityId::second_app_calldata_read_counts,
151 EntityId::second_app_calldata_inverses,
152 EntityId::second_app_calldata_indicator,
153 EntityId::q_o>,
155 EntityId::third_app_calldata,
156 EntityId::third_app_calldata_read_counts,
157 EntityId::third_app_calldata_inverses,
158 EntityId::third_app_calldata_indicator,
159 EntityId::q_4>,
161 EntityId::fourth_app_calldata,
162 EntityId::fourth_app_calldata_read_counts,
163 EntityId::fourth_app_calldata_inverses,
164 EntityId::fourth_app_calldata_indicator,
165 EntityId::q_5>,
167 EntityId::fifth_app_calldata,
168 EntityId::fifth_app_calldata_read_counts,
169 EntityId::fifth_app_calldata_inverses,
170 EntityId::fifth_app_calldata_indicator,
171 EntityId::q_c>,
173 EntityId::return_data,
174 EntityId::return_data_read_counts,
175 EntityId::return_data_inverses,
176 EntityId::return_data_indicator,
177 EntityId::q_m>,
183
184 static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 43;
185 static constexpr size_t NUM_WITNESS_ENTITIES = 33;
186 static constexpr size_t NUM_MASKING_ENTITIES = 0;
187 static constexpr size_t NUM_SHIFTED_ENTITIES = 5;
188 static constexpr bool HasDataBus = true;
189 static constexpr size_t NUM_BUS_COLUMNS = 7;
190 static constexpr std::array<size_t, NUM_BUS_COLUMNS> BUILDER_BUS_INDICES = { 0, 1, 2, 3, 4, 5, 6 };
191 static constexpr bool HasLogDerivLookup = true;
192 static constexpr bool HasElliptic = true;
193 static constexpr bool HasMemory = true;
194 static constexpr bool HasNonNativeField = true;
195 static constexpr bool HasEccOpQueue = true;
199
200 // Per-shifted-entity (original, duplicate) index pairs in AllEntities, one per shifted
201 // entity. Collapsed into `RepeatedCommitmentsData` below for Shplemini compatibility.
203 DuplicatePair{ 43, 76 }, DuplicatePair{ 44, 77 }, DuplicatePair{ 45, 78 },
204 DuplicatePair{ 46, 79 }, DuplicatePair{ 47, 80 },
205 };
208
209 // Gate-selector blocks, parallel to `get_gate_selectors()`.
210 template <typename TraceBlocks> static auto get_gate_blocks(TraceBlocks& blocks)
211 {
212 using BlockBase = typename TraceBlocks::BlockBase;
214 &blocks.lookup,
215 &blocks.arithmetic,
216 &blocks.arithmetic,
217 &blocks.delta_range,
218 &blocks.elliptic,
219 &blocks.memory,
220 &blocks.nnf,
221 &blocks.busread,
222 &blocks.poseidon2,
223 &blocks.poseidon2,
224 &blocks.poseidon2,
225 &blocks.poseidon2,
226 &blocks.poseidon2,
227 });
228 }
229
230 template <typename TraceBlocks> static auto get_gate_blocks(TraceBlocks const& blocks)
231 {
232 using BlockBase = typename TraceBlocks::BlockBase;
234 &blocks.lookup,
235 &blocks.arithmetic,
236 &blocks.arithmetic,
237 &blocks.delta_range,
238 &blocks.elliptic,
239 &blocks.memory,
240 &blocks.nnf,
241 &blocks.busread,
242 &blocks.poseidon2,
243 &blocks.poseidon2,
244 &blocks.poseidon2,
245 &blocks.poseidon2,
246 &blocks.poseidon2,
247 });
248 }
249
250 // GateKind for each gate selector, parallel to `get_gate_blocks()`.
266
267 // Non-gate selectors in `get_non_gate_selectors()` order, as references into a single block.
268 template <typename TraceBlock> static auto get_block_non_gate_selectors(TraceBlock& block)
269 {
270 using SelT = std::remove_reference_t<decltype(block.q_m())>;
271 return RefArray<SelT, 7>{
272 block.q_m(), block.q_1(), block.q_2(), block.q_3(), block.q_4(), block.q_c(), block.q_5(),
273 };
274 }
275
276 // AllEntities: flat `std::array` storage with EntityId-keyed access and named accessors.
277 template <typename DataType> class AllEntities {
278 public:
280 std::array<DataType, NUM_ALL_ENTITIES> data{};
281
282 DataType& operator[](EntityId id) { return data[static_cast<size_t>(id)]; }
283 const DataType& operator[](EntityId id) const { return data[static_cast<size_t>(id)]; }
284
287
288 // Named accessors (unshifted + shifted): mutable + const overloads.
289 DataType& sigma_1() { return data[static_cast<size_t>(EntityId::sigma_1)]; }
290 const DataType& sigma_1() const { return data[static_cast<size_t>(EntityId::sigma_1)]; }
291 DataType& sigma_2() { return data[static_cast<size_t>(EntityId::sigma_2)]; }
292 const DataType& sigma_2() const { return data[static_cast<size_t>(EntityId::sigma_2)]; }
293 DataType& sigma_3() { return data[static_cast<size_t>(EntityId::sigma_3)]; }
294 const DataType& sigma_3() const { return data[static_cast<size_t>(EntityId::sigma_3)]; }
295 DataType& sigma_4() { return data[static_cast<size_t>(EntityId::sigma_4)]; }
296 const DataType& sigma_4() const { return data[static_cast<size_t>(EntityId::sigma_4)]; }
297 DataType& id_1() { return data[static_cast<size_t>(EntityId::id_1)]; }
298 const DataType& id_1() const { return data[static_cast<size_t>(EntityId::id_1)]; }
299 DataType& id_2() { return data[static_cast<size_t>(EntityId::id_2)]; }
300 const DataType& id_2() const { return data[static_cast<size_t>(EntityId::id_2)]; }
301 DataType& id_3() { return data[static_cast<size_t>(EntityId::id_3)]; }
302 const DataType& id_3() const { return data[static_cast<size_t>(EntityId::id_3)]; }
303 DataType& id_4() { return data[static_cast<size_t>(EntityId::id_4)]; }
304 const DataType& id_4() const { return data[static_cast<size_t>(EntityId::id_4)]; }
305 DataType& lagrange_first() { return data[static_cast<size_t>(EntityId::lagrange_first)]; }
306 const DataType& lagrange_first() const { return data[static_cast<size_t>(EntityId::lagrange_first)]; }
307 DataType& lagrange_last() { return data[static_cast<size_t>(EntityId::lagrange_last)]; }
308 const DataType& lagrange_last() const { return data[static_cast<size_t>(EntityId::lagrange_last)]; }
309 DataType& q_lookup() { return data[static_cast<size_t>(EntityId::q_lookup)]; }
310 const DataType& q_lookup() const { return data[static_cast<size_t>(EntityId::q_lookup)]; }
311 DataType& table_1() { return data[static_cast<size_t>(EntityId::table_1)]; }
312 const DataType& table_1() const { return data[static_cast<size_t>(EntityId::table_1)]; }
313 DataType& table_2() { return data[static_cast<size_t>(EntityId::table_2)]; }
314 const DataType& table_2() const { return data[static_cast<size_t>(EntityId::table_2)]; }
315 DataType& table_3() { return data[static_cast<size_t>(EntityId::table_3)]; }
316 const DataType& table_3() const { return data[static_cast<size_t>(EntityId::table_3)]; }
317 DataType& table_4() { return data[static_cast<size_t>(EntityId::table_4)]; }
318 const DataType& table_4() const { return data[static_cast<size_t>(EntityId::table_4)]; }
319 DataType& q_m() { return data[static_cast<size_t>(EntityId::q_m)]; }
320 const DataType& q_m() const { return data[static_cast<size_t>(EntityId::q_m)]; }
321 DataType& q_r() { return data[static_cast<size_t>(EntityId::q_r)]; }
322 const DataType& q_r() const { return data[static_cast<size_t>(EntityId::q_r)]; }
323 DataType& q_o() { return data[static_cast<size_t>(EntityId::q_o)]; }
324 const DataType& q_o() const { return data[static_cast<size_t>(EntityId::q_o)]; }
325 DataType& q_c() { return data[static_cast<size_t>(EntityId::q_c)]; }
326 const DataType& q_c() const { return data[static_cast<size_t>(EntityId::q_c)]; }
327 DataType& q_l() { return data[static_cast<size_t>(EntityId::q_l)]; }
328 const DataType& q_l() const { return data[static_cast<size_t>(EntityId::q_l)]; }
329 DataType& q_4() { return data[static_cast<size_t>(EntityId::q_4)]; }
330 const DataType& q_4() const { return data[static_cast<size_t>(EntityId::q_4)]; }
331 DataType& q_arith() { return data[static_cast<size_t>(EntityId::q_arith)]; }
332 const DataType& q_arith() const { return data[static_cast<size_t>(EntityId::q_arith)]; }
333 DataType& q_bilinear_batched_eq() { return data[static_cast<size_t>(EntityId::q_bilinear_batched_eq)]; }
334 const DataType& q_bilinear_batched_eq() const
335 {
336 return data[static_cast<size_t>(EntityId::q_bilinear_batched_eq)];
337 }
338 DataType& q_delta_range() { return data[static_cast<size_t>(EntityId::q_delta_range)]; }
339 const DataType& q_delta_range() const { return data[static_cast<size_t>(EntityId::q_delta_range)]; }
340 DataType& q_elliptic() { return data[static_cast<size_t>(EntityId::q_elliptic)]; }
341 const DataType& q_elliptic() const { return data[static_cast<size_t>(EntityId::q_elliptic)]; }
342 DataType& q_memory() { return data[static_cast<size_t>(EntityId::q_memory)]; }
343 const DataType& q_memory() const { return data[static_cast<size_t>(EntityId::q_memory)]; }
344 DataType& q_nnf() { return data[static_cast<size_t>(EntityId::q_nnf)]; }
345 const DataType& q_nnf() const { return data[static_cast<size_t>(EntityId::q_nnf)]; }
346 DataType& lagrange_ecc_op() { return data[static_cast<size_t>(EntityId::lagrange_ecc_op)]; }
347 const DataType& lagrange_ecc_op() const { return data[static_cast<size_t>(EntityId::lagrange_ecc_op)]; }
348 DataType& q_busread() { return data[static_cast<size_t>(EntityId::q_busread)]; }
349 const DataType& q_busread() const { return data[static_cast<size_t>(EntityId::q_busread)]; }
350 DataType& kernel_calldata_indicator() { return data[static_cast<size_t>(EntityId::kernel_calldata_indicator)]; }
351 const DataType& kernel_calldata_indicator() const
352 {
353 return data[static_cast<size_t>(EntityId::kernel_calldata_indicator)];
354 }
355 DataType& databus_id() { return data[static_cast<size_t>(EntityId::databus_id)]; }
356 const DataType& databus_id() const { return data[static_cast<size_t>(EntityId::databus_id)]; }
358 {
359 return data[static_cast<size_t>(EntityId::first_app_calldata_indicator)];
360 }
361 const DataType& first_app_calldata_indicator() const
362 {
363 return data[static_cast<size_t>(EntityId::first_app_calldata_indicator)];
364 }
366 {
367 return data[static_cast<size_t>(EntityId::second_app_calldata_indicator)];
368 }
369 const DataType& second_app_calldata_indicator() const
370 {
371 return data[static_cast<size_t>(EntityId::second_app_calldata_indicator)];
372 }
374 {
375 return data[static_cast<size_t>(EntityId::third_app_calldata_indicator)];
376 }
377 const DataType& third_app_calldata_indicator() const
378 {
379 return data[static_cast<size_t>(EntityId::third_app_calldata_indicator)];
380 }
382 {
383 return data[static_cast<size_t>(EntityId::fourth_app_calldata_indicator)];
384 }
385 const DataType& fourth_app_calldata_indicator() const
386 {
387 return data[static_cast<size_t>(EntityId::fourth_app_calldata_indicator)];
388 }
389 DataType& q_5() { return data[static_cast<size_t>(EntityId::q_5)]; }
390 const DataType& q_5() const { return data[static_cast<size_t>(EntityId::q_5)]; }
392 {
393 return data[static_cast<size_t>(EntityId::fifth_app_calldata_indicator)];
394 }
395 const DataType& fifth_app_calldata_indicator() const
396 {
397 return data[static_cast<size_t>(EntityId::fifth_app_calldata_indicator)];
398 }
399 DataType& return_data_indicator() { return data[static_cast<size_t>(EntityId::return_data_indicator)]; }
400 const DataType& return_data_indicator() const
401 {
402 return data[static_cast<size_t>(EntityId::return_data_indicator)];
403 }
404 DataType& q_poseidon2_external() { return data[static_cast<size_t>(EntityId::q_poseidon2_external)]; }
405 const DataType& q_poseidon2_external() const
406 {
407 return data[static_cast<size_t>(EntityId::q_poseidon2_external)];
408 }
410 {
411 return data[static_cast<size_t>(EntityId::q_poseidon2_external_initial)];
412 }
413 const DataType& q_poseidon2_external_initial() const
414 {
415 return data[static_cast<size_t>(EntityId::q_poseidon2_external_initial)];
416 }
417 DataType& q_poseidon2_quad_internal() { return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal)]; }
418 const DataType& q_poseidon2_quad_internal() const
419 {
420 return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal)];
421 }
423 {
424 return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal_terminal)];
425 }
427 {
428 return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal_terminal)];
429 }
431 {
432 return data[static_cast<size_t>(EntityId::q_poseidon2_transition_entry)];
433 }
434 const DataType& q_poseidon2_transition_entry() const
435 {
436 return data[static_cast<size_t>(EntityId::q_poseidon2_transition_entry)];
437 }
438 DataType& w_l() { return data[static_cast<size_t>(EntityId::w_l)]; }
439 const DataType& w_l() const { return data[static_cast<size_t>(EntityId::w_l)]; }
440 DataType& w_r() { return data[static_cast<size_t>(EntityId::w_r)]; }
441 const DataType& w_r() const { return data[static_cast<size_t>(EntityId::w_r)]; }
442 DataType& w_o() { return data[static_cast<size_t>(EntityId::w_o)]; }
443 const DataType& w_o() const { return data[static_cast<size_t>(EntityId::w_o)]; }
444 DataType& w_4() { return data[static_cast<size_t>(EntityId::w_4)]; }
445 const DataType& w_4() const { return data[static_cast<size_t>(EntityId::w_4)]; }
446 DataType& z_perm() { return data[static_cast<size_t>(EntityId::z_perm)]; }
447 const DataType& z_perm() const { return data[static_cast<size_t>(EntityId::z_perm)]; }
448 DataType& lookup_inverses() { return data[static_cast<size_t>(EntityId::lookup_inverses)]; }
449 const DataType& lookup_inverses() const { return data[static_cast<size_t>(EntityId::lookup_inverses)]; }
450 DataType& lookup_read_counts() { return data[static_cast<size_t>(EntityId::lookup_read_counts)]; }
451 const DataType& lookup_read_counts() const { return data[static_cast<size_t>(EntityId::lookup_read_counts)]; }
452 DataType& lookup_read_tags() { return data[static_cast<size_t>(EntityId::lookup_read_tags)]; }
453 const DataType& lookup_read_tags() const { return data[static_cast<size_t>(EntityId::lookup_read_tags)]; }
454 DataType& ecc_op_wire_1() { return data[static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
455 const DataType& ecc_op_wire_1() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
456 DataType& ecc_op_wire_2() { return data[static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
457 const DataType& ecc_op_wire_2() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
458 DataType& ecc_op_wire_3() { return data[static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
459 const DataType& ecc_op_wire_3() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
460 DataType& ecc_op_wire_4() { return data[static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
461 const DataType& ecc_op_wire_4() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
462 DataType& kernel_calldata() { return data[static_cast<size_t>(EntityId::kernel_calldata)]; }
463 const DataType& kernel_calldata() const { return data[static_cast<size_t>(EntityId::kernel_calldata)]; }
465 {
466 return data[static_cast<size_t>(EntityId::kernel_calldata_read_counts)];
467 }
468 const DataType& kernel_calldata_read_counts() const
469 {
470 return data[static_cast<size_t>(EntityId::kernel_calldata_read_counts)];
471 }
472 DataType& kernel_calldata_inverses() { return data[static_cast<size_t>(EntityId::kernel_calldata_inverses)]; }
473 const DataType& kernel_calldata_inverses() const
474 {
475 return data[static_cast<size_t>(EntityId::kernel_calldata_inverses)];
476 }
477 DataType& first_app_calldata() { return data[static_cast<size_t>(EntityId::first_app_calldata)]; }
478 const DataType& first_app_calldata() const { return data[static_cast<size_t>(EntityId::first_app_calldata)]; }
480 {
481 return data[static_cast<size_t>(EntityId::first_app_calldata_read_counts)];
482 }
483 const DataType& first_app_calldata_read_counts() const
484 {
485 return data[static_cast<size_t>(EntityId::first_app_calldata_read_counts)];
486 }
488 {
489 return data[static_cast<size_t>(EntityId::first_app_calldata_inverses)];
490 }
491 const DataType& first_app_calldata_inverses() const
492 {
493 return data[static_cast<size_t>(EntityId::first_app_calldata_inverses)];
494 }
495 DataType& second_app_calldata() { return data[static_cast<size_t>(EntityId::second_app_calldata)]; }
496 const DataType& second_app_calldata() const { return data[static_cast<size_t>(EntityId::second_app_calldata)]; }
498 {
499 return data[static_cast<size_t>(EntityId::second_app_calldata_read_counts)];
500 }
501 const DataType& second_app_calldata_read_counts() const
502 {
503 return data[static_cast<size_t>(EntityId::second_app_calldata_read_counts)];
504 }
506 {
507 return data[static_cast<size_t>(EntityId::second_app_calldata_inverses)];
508 }
509 const DataType& second_app_calldata_inverses() const
510 {
511 return data[static_cast<size_t>(EntityId::second_app_calldata_inverses)];
512 }
513 DataType& third_app_calldata() { return data[static_cast<size_t>(EntityId::third_app_calldata)]; }
514 const DataType& third_app_calldata() const { return data[static_cast<size_t>(EntityId::third_app_calldata)]; }
516 {
517 return data[static_cast<size_t>(EntityId::third_app_calldata_read_counts)];
518 }
519 const DataType& third_app_calldata_read_counts() const
520 {
521 return data[static_cast<size_t>(EntityId::third_app_calldata_read_counts)];
522 }
524 {
525 return data[static_cast<size_t>(EntityId::third_app_calldata_inverses)];
526 }
527 const DataType& third_app_calldata_inverses() const
528 {
529 return data[static_cast<size_t>(EntityId::third_app_calldata_inverses)];
530 }
531 DataType& fourth_app_calldata() { return data[static_cast<size_t>(EntityId::fourth_app_calldata)]; }
532 const DataType& fourth_app_calldata() const { return data[static_cast<size_t>(EntityId::fourth_app_calldata)]; }
534 {
535 return data[static_cast<size_t>(EntityId::fourth_app_calldata_read_counts)];
536 }
537 const DataType& fourth_app_calldata_read_counts() const
538 {
539 return data[static_cast<size_t>(EntityId::fourth_app_calldata_read_counts)];
540 }
542 {
543 return data[static_cast<size_t>(EntityId::fourth_app_calldata_inverses)];
544 }
545 const DataType& fourth_app_calldata_inverses() const
546 {
547 return data[static_cast<size_t>(EntityId::fourth_app_calldata_inverses)];
548 }
549 DataType& fifth_app_calldata() { return data[static_cast<size_t>(EntityId::fifth_app_calldata)]; }
550 const DataType& fifth_app_calldata() const { return data[static_cast<size_t>(EntityId::fifth_app_calldata)]; }
552 {
553 return data[static_cast<size_t>(EntityId::fifth_app_calldata_read_counts)];
554 }
555 const DataType& fifth_app_calldata_read_counts() const
556 {
557 return data[static_cast<size_t>(EntityId::fifth_app_calldata_read_counts)];
558 }
560 {
561 return data[static_cast<size_t>(EntityId::fifth_app_calldata_inverses)];
562 }
563 const DataType& fifth_app_calldata_inverses() const
564 {
565 return data[static_cast<size_t>(EntityId::fifth_app_calldata_inverses)];
566 }
567 DataType& return_data() { return data[static_cast<size_t>(EntityId::return_data)]; }
568 const DataType& return_data() const { return data[static_cast<size_t>(EntityId::return_data)]; }
569 DataType& return_data_read_counts() { return data[static_cast<size_t>(EntityId::return_data_read_counts)]; }
570 const DataType& return_data_read_counts() const
571 {
572 return data[static_cast<size_t>(EntityId::return_data_read_counts)];
573 }
574 DataType& return_data_inverses() { return data[static_cast<size_t>(EntityId::return_data_inverses)]; }
575 const DataType& return_data_inverses() const
576 {
577 return data[static_cast<size_t>(EntityId::return_data_inverses)];
578 }
579 DataType& w_l_shift() { return data[static_cast<size_t>(EntityId::w_l_shift)]; }
580 const DataType& w_l_shift() const { return data[static_cast<size_t>(EntityId::w_l_shift)]; }
581 DataType& w_r_shift() { return data[static_cast<size_t>(EntityId::w_r_shift)]; }
582 const DataType& w_r_shift() const { return data[static_cast<size_t>(EntityId::w_r_shift)]; }
583 DataType& w_o_shift() { return data[static_cast<size_t>(EntityId::w_o_shift)]; }
584 const DataType& w_o_shift() const { return data[static_cast<size_t>(EntityId::w_o_shift)]; }
585 DataType& w_4_shift() { return data[static_cast<size_t>(EntityId::w_4_shift)]; }
586 const DataType& w_4_shift() const { return data[static_cast<size_t>(EntityId::w_4_shift)]; }
587 DataType& z_perm_shift() { return data[static_cast<size_t>(EntityId::z_perm_shift)]; }
588 const DataType& z_perm_shift() const { return data[static_cast<size_t>(EntityId::z_perm_shift)]; }
589
590 // Kind/shift partitions: contiguous slices of `data`.
639
640 // Subset views (relation-declared groupings in layout order).
642 {
643 return { (*this)[EntityId::sigma_1],
644 (*this)[EntityId::sigma_2],
645 (*this)[EntityId::sigma_3],
646 (*this)[EntityId::sigma_4] };
647 }
649 {
650 return { (*this)[EntityId::sigma_1],
651 (*this)[EntityId::sigma_2],
652 (*this)[EntityId::sigma_3],
653 (*this)[EntityId::sigma_4] };
654 }
656 {
657 return {
658 (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4]
659 };
660 }
662 {
663 return {
664 (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4]
665 };
666 }
668 {
669 return { (*this)[EntityId::q_lookup],
670 (*this)[EntityId::q_arith],
671 (*this)[EntityId::q_bilinear_batched_eq],
672 (*this)[EntityId::q_delta_range],
673 (*this)[EntityId::q_elliptic],
674 (*this)[EntityId::q_memory],
675 (*this)[EntityId::q_nnf],
676 (*this)[EntityId::q_busread],
677 (*this)[EntityId::q_poseidon2_external],
678 (*this)[EntityId::q_poseidon2_external_initial],
679 (*this)[EntityId::q_poseidon2_quad_internal],
680 (*this)[EntityId::q_poseidon2_quad_internal_terminal],
681 (*this)[EntityId::q_poseidon2_transition_entry] };
682 }
684 {
685 return { (*this)[EntityId::q_lookup],
686 (*this)[EntityId::q_arith],
687 (*this)[EntityId::q_bilinear_batched_eq],
688 (*this)[EntityId::q_delta_range],
689 (*this)[EntityId::q_elliptic],
690 (*this)[EntityId::q_memory],
691 (*this)[EntityId::q_nnf],
692 (*this)[EntityId::q_busread],
693 (*this)[EntityId::q_poseidon2_external],
694 (*this)[EntityId::q_poseidon2_external_initial],
695 (*this)[EntityId::q_poseidon2_quad_internal],
696 (*this)[EntityId::q_poseidon2_quad_internal_terminal],
697 (*this)[EntityId::q_poseidon2_transition_entry] };
698 }
700 {
701 return { (*this)[EntityId::table_1],
702 (*this)[EntityId::table_2],
703 (*this)[EntityId::table_3],
704 (*this)[EntityId::table_4] };
705 }
707 {
708 return { (*this)[EntityId::table_1],
709 (*this)[EntityId::table_2],
710 (*this)[EntityId::table_3],
711 (*this)[EntityId::table_4] };
712 }
714 {
715 return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] };
716 }
718 {
719 return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] };
720 }
722 {
723 return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o],
724 (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] };
725 }
727 {
728 return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o],
729 (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] };
730 }
732 {
733 return { (*this)[EntityId::ecc_op_wire_1],
734 (*this)[EntityId::ecc_op_wire_2],
735 (*this)[EntityId::ecc_op_wire_3],
736 (*this)[EntityId::ecc_op_wire_4] };
737 }
739 {
740 return { (*this)[EntityId::ecc_op_wire_1],
741 (*this)[EntityId::ecc_op_wire_2],
742 (*this)[EntityId::ecc_op_wire_3],
743 (*this)[EntityId::ecc_op_wire_4] };
744 }
746 {
747 return { (*this)[EntityId::kernel_calldata], (*this)[EntityId::kernel_calldata_read_counts],
748 (*this)[EntityId::first_app_calldata], (*this)[EntityId::first_app_calldata_read_counts],
749 (*this)[EntityId::second_app_calldata], (*this)[EntityId::second_app_calldata_read_counts],
750 (*this)[EntityId::third_app_calldata], (*this)[EntityId::third_app_calldata_read_counts],
751 (*this)[EntityId::fourth_app_calldata], (*this)[EntityId::fourth_app_calldata_read_counts],
752 (*this)[EntityId::fifth_app_calldata], (*this)[EntityId::fifth_app_calldata_read_counts],
753 (*this)[EntityId::return_data], (*this)[EntityId::return_data_read_counts] };
754 }
756 {
757 return { (*this)[EntityId::kernel_calldata], (*this)[EntityId::kernel_calldata_read_counts],
758 (*this)[EntityId::first_app_calldata], (*this)[EntityId::first_app_calldata_read_counts],
759 (*this)[EntityId::second_app_calldata], (*this)[EntityId::second_app_calldata_read_counts],
760 (*this)[EntityId::third_app_calldata], (*this)[EntityId::third_app_calldata_read_counts],
761 (*this)[EntityId::fourth_app_calldata], (*this)[EntityId::fourth_app_calldata_read_counts],
762 (*this)[EntityId::fifth_app_calldata], (*this)[EntityId::fifth_app_calldata_read_counts],
763 (*this)[EntityId::return_data], (*this)[EntityId::return_data_read_counts] };
764 }
766 {
767 return { (*this)[EntityId::kernel_calldata_inverses], (*this)[EntityId::first_app_calldata_inverses],
768 (*this)[EntityId::second_app_calldata_inverses], (*this)[EntityId::third_app_calldata_inverses],
769 (*this)[EntityId::fourth_app_calldata_inverses], (*this)[EntityId::fifth_app_calldata_inverses],
770 (*this)[EntityId::return_data_inverses] };
771 }
773 {
774 return { (*this)[EntityId::kernel_calldata_inverses], (*this)[EntityId::first_app_calldata_inverses],
775 (*this)[EntityId::second_app_calldata_inverses], (*this)[EntityId::third_app_calldata_inverses],
776 (*this)[EntityId::fourth_app_calldata_inverses], (*this)[EntityId::fifth_app_calldata_inverses],
777 (*this)[EntityId::return_data_inverses] };
778 }
780 {
781 return { (*this)[EntityId::kernel_calldata_indicator], (*this)[EntityId::first_app_calldata_indicator],
782 (*this)[EntityId::second_app_calldata_indicator], (*this)[EntityId::third_app_calldata_indicator],
783 (*this)[EntityId::fourth_app_calldata_indicator], (*this)[EntityId::fifth_app_calldata_indicator],
784 (*this)[EntityId::return_data_indicator] };
785 }
787 {
788 return { (*this)[EntityId::kernel_calldata_indicator], (*this)[EntityId::first_app_calldata_indicator],
789 (*this)[EntityId::second_app_calldata_indicator], (*this)[EntityId::third_app_calldata_indicator],
790 (*this)[EntityId::fourth_app_calldata_indicator], (*this)[EntityId::fifth_app_calldata_indicator],
791 (*this)[EntityId::return_data_indicator] };
792 }
794 {
795 return { (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4],
796 (*this)[EntityId::q_5], (*this)[EntityId::q_c], (*this)[EntityId::q_m] };
797 }
799 {
800 return { (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4],
801 (*this)[EntityId::q_5], (*this)[EntityId::q_c], (*this)[EntityId::q_m] };
802 }
803
804 // Composite views: concatenations of subset views.
807
808 // Labels — uppercase, layout order.
809 static const std::vector<std::string>& get_labels()
810 {
811 static const std::vector<std::string> labels = {
812 "SIGMA_1",
813 "SIGMA_2",
814 "SIGMA_3",
815 "SIGMA_4",
816 "ID_1",
817 "ID_2",
818 "ID_3",
819 "ID_4",
820 "LAGRANGE_FIRST",
821 "LAGRANGE_LAST",
822 "Q_LOOKUP",
823 "TABLE_1",
824 "TABLE_2",
825 "TABLE_3",
826 "TABLE_4",
827 "Q_M",
828 "Q_R",
829 "Q_O",
830 "Q_C",
831 "Q_L",
832 "Q_4",
833 "Q_ARITH",
834 "Q_BILINEAR_BATCHED_EQ",
835 "Q_DELTA_RANGE",
836 "Q_ELLIPTIC",
837 "Q_MEMORY",
838 "Q_NNF",
839 "LAGRANGE_ECC_OP",
840 "Q_BUSREAD",
841 "KERNEL_CALLDATA_INDICATOR",
842 "DATABUS_ID",
843 "FIRST_APP_CALLDATA_INDICATOR",
844 "SECOND_APP_CALLDATA_INDICATOR",
845 "THIRD_APP_CALLDATA_INDICATOR",
846 "FOURTH_APP_CALLDATA_INDICATOR",
847 "Q_5",
848 "FIFTH_APP_CALLDATA_INDICATOR",
849 "RETURN_DATA_INDICATOR",
850 "Q_POSEIDON2_EXTERNAL",
851 "Q_POSEIDON2_EXTERNAL_INITIAL",
852 "Q_POSEIDON2_QUAD_INTERNAL",
853 "Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
854 "Q_POSEIDON2_TRANSITION_ENTRY",
855 "W_L",
856 "W_R",
857 "W_O",
858 "W_4",
859 "Z_PERM",
860 "LOOKUP_INVERSES",
861 "LOOKUP_READ_COUNTS",
862 "LOOKUP_READ_TAGS",
863 "ECC_OP_WIRE_1",
864 "ECC_OP_WIRE_2",
865 "ECC_OP_WIRE_3",
866 "ECC_OP_WIRE_4",
867 "KERNEL_CALLDATA",
868 "KERNEL_CALLDATA_READ_COUNTS",
869 "KERNEL_CALLDATA_INVERSES",
870 "FIRST_APP_CALLDATA",
871 "FIRST_APP_CALLDATA_READ_COUNTS",
872 "FIRST_APP_CALLDATA_INVERSES",
873 "SECOND_APP_CALLDATA",
874 "SECOND_APP_CALLDATA_READ_COUNTS",
875 "SECOND_APP_CALLDATA_INVERSES",
876 "THIRD_APP_CALLDATA",
877 "THIRD_APP_CALLDATA_READ_COUNTS",
878 "THIRD_APP_CALLDATA_INVERSES",
879 "FOURTH_APP_CALLDATA",
880 "FOURTH_APP_CALLDATA_READ_COUNTS",
881 "FOURTH_APP_CALLDATA_INVERSES",
882 "FIFTH_APP_CALLDATA",
883 "FIFTH_APP_CALLDATA_READ_COUNTS",
884 "FIFTH_APP_CALLDATA_INVERSES",
885 "RETURN_DATA",
886 "RETURN_DATA_READ_COUNTS",
887 "RETURN_DATA_INVERSES",
888 "W_L_SHIFT",
889 "W_R_SHIFT",
890 "W_O_SHIFT",
891 "W_4_SHIFT",
892 "Z_PERM_SHIFT",
893 };
894 return labels;
895 }
896 };
897
898 // Verification-key transport class. Owns its own storage; not a slice of AllEntities.
899 template <typename DataType_> class PrecomputedEntities {
900 public:
901 using DataType = DataType_;
902 std::array<DataType, NUM_PRECOMPUTED_ENTITIES> data{};
903
904 bool operator==(const PrecomputedEntities&) const = default;
905
908
909 static constexpr size_t size() { return NUM_PRECOMPUTED_ENTITIES; }
910
911 // Named accessor methods — index into local `data` (NOT the AllEntities layout).
912 DataType& sigma_1() { return data[0]; }
913 const DataType& sigma_1() const { return data[0]; }
914 DataType& sigma_2() { return data[1]; }
915 const DataType& sigma_2() const { return data[1]; }
916 DataType& sigma_3() { return data[2]; }
917 const DataType& sigma_3() const { return data[2]; }
918 DataType& sigma_4() { return data[3]; }
919 const DataType& sigma_4() const { return data[3]; }
920 DataType& id_1() { return data[4]; }
921 const DataType& id_1() const { return data[4]; }
922 DataType& id_2() { return data[5]; }
923 const DataType& id_2() const { return data[5]; }
924 DataType& id_3() { return data[6]; }
925 const DataType& id_3() const { return data[6]; }
926 DataType& id_4() { return data[7]; }
927 const DataType& id_4() const { return data[7]; }
928 DataType& lagrange_first() { return data[8]; }
929 const DataType& lagrange_first() const { return data[8]; }
930 DataType& lagrange_last() { return data[9]; }
931 const DataType& lagrange_last() const { return data[9]; }
932 DataType& q_lookup() { return data[10]; }
933 const DataType& q_lookup() const { return data[10]; }
934 DataType& table_1() { return data[11]; }
935 const DataType& table_1() const { return data[11]; }
936 DataType& table_2() { return data[12]; }
937 const DataType& table_2() const { return data[12]; }
938 DataType& table_3() { return data[13]; }
939 const DataType& table_3() const { return data[13]; }
940 DataType& table_4() { return data[14]; }
941 const DataType& table_4() const { return data[14]; }
942 DataType& q_m() { return data[15]; }
943 const DataType& q_m() const { return data[15]; }
944 DataType& q_r() { return data[16]; }
945 const DataType& q_r() const { return data[16]; }
946 DataType& q_o() { return data[17]; }
947 const DataType& q_o() const { return data[17]; }
948 DataType& q_c() { return data[18]; }
949 const DataType& q_c() const { return data[18]; }
950 DataType& q_l() { return data[19]; }
951 const DataType& q_l() const { return data[19]; }
952 DataType& q_4() { return data[20]; }
953 const DataType& q_4() const { return data[20]; }
954 DataType& q_arith() { return data[21]; }
955 const DataType& q_arith() const { return data[21]; }
957 const DataType& q_bilinear_batched_eq() const { return data[22]; }
958 DataType& q_delta_range() { return data[23]; }
959 const DataType& q_delta_range() const { return data[23]; }
960 DataType& q_elliptic() { return data[24]; }
961 const DataType& q_elliptic() const { return data[24]; }
962 DataType& q_memory() { return data[25]; }
963 const DataType& q_memory() const { return data[25]; }
964 DataType& q_nnf() { return data[26]; }
965 const DataType& q_nnf() const { return data[26]; }
966 DataType& lagrange_ecc_op() { return data[27]; }
967 const DataType& lagrange_ecc_op() const { return data[27]; }
968 DataType& q_busread() { return data[28]; }
969 const DataType& q_busread() const { return data[28]; }
971 const DataType& kernel_calldata_indicator() const { return data[29]; }
972 DataType& databus_id() { return data[30]; }
973 const DataType& databus_id() const { return data[30]; }
975 const DataType& first_app_calldata_indicator() const { return data[31]; }
977 const DataType& second_app_calldata_indicator() const { return data[32]; }
979 const DataType& third_app_calldata_indicator() const { return data[33]; }
981 const DataType& fourth_app_calldata_indicator() const { return data[34]; }
982 DataType& q_5() { return data[35]; }
983 const DataType& q_5() const { return data[35]; }
985 const DataType& fifth_app_calldata_indicator() const { return data[36]; }
987 const DataType& return_data_indicator() const { return data[37]; }
989 const DataType& q_poseidon2_external() const { return data[38]; }
991 const DataType& q_poseidon2_external_initial() const { return data[39]; }
993 const DataType& q_poseidon2_quad_internal() const { return data[40]; }
995 const DataType& q_poseidon2_quad_internal_terminal() const { return data[41]; }
997 const DataType& q_poseidon2_transition_entry() const { return data[42]; }
998
999 // Subset views.
1001 {
1002 return { this->sigma_1(), this->sigma_2(), this->sigma_3(), this->sigma_4() };
1003 }
1005 {
1006 return { this->sigma_1(), this->sigma_2(), this->sigma_3(), this->sigma_4() };
1007 }
1008 RefArray<DataType, 4> get_ids() { return { this->id_1(), this->id_2(), this->id_3(), this->id_4() }; }
1010 {
1011 return { this->id_1(), this->id_2(), this->id_3(), this->id_4() };
1012 }
1014 {
1015 return { this->q_lookup(),
1016 this->q_arith(),
1017 this->q_bilinear_batched_eq(),
1018 this->q_delta_range(),
1019 this->q_elliptic(),
1020 this->q_memory(),
1021 this->q_nnf(),
1022 this->q_busread(),
1023 this->q_poseidon2_external(),
1028 }
1030 {
1031 return { this->q_lookup(),
1032 this->q_arith(),
1033 this->q_bilinear_batched_eq(),
1034 this->q_delta_range(),
1035 this->q_elliptic(),
1036 this->q_memory(),
1037 this->q_nnf(),
1038 this->q_busread(),
1039 this->q_poseidon2_external(),
1044 }
1046 {
1047 return { this->table_1(), this->table_2(), this->table_3(), this->table_4() };
1048 }
1050 {
1051 return { this->table_1(), this->table_2(), this->table_3(), this->table_4() };
1052 }
1054 {
1055 return { this->q_m(), this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_c(), this->q_5() };
1056 }
1058 {
1059 return { this->q_m(), this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_c(), this->q_5() };
1060 }
1076 {
1077 return { this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_5(), this->q_c(), this->q_m() };
1078 }
1080 {
1081 return { this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_5(), this->q_c(), this->q_m() };
1082 }
1083
1084 // Composite views.
1087
1088 static const std::vector<std::string>& get_labels()
1089 {
1090 static const std::vector<std::string> labels = {
1091 "SIGMA_1",
1092 "SIGMA_2",
1093 "SIGMA_3",
1094 "SIGMA_4",
1095 "ID_1",
1096 "ID_2",
1097 "ID_3",
1098 "ID_4",
1099 "LAGRANGE_FIRST",
1100 "LAGRANGE_LAST",
1101 "Q_LOOKUP",
1102 "TABLE_1",
1103 "TABLE_2",
1104 "TABLE_3",
1105 "TABLE_4",
1106 "Q_M",
1107 "Q_R",
1108 "Q_O",
1109 "Q_C",
1110 "Q_L",
1111 "Q_4",
1112 "Q_ARITH",
1113 "Q_BILINEAR_BATCHED_EQ",
1114 "Q_DELTA_RANGE",
1115 "Q_ELLIPTIC",
1116 "Q_MEMORY",
1117 "Q_NNF",
1118 "LAGRANGE_ECC_OP",
1119 "Q_BUSREAD",
1120 "KERNEL_CALLDATA_INDICATOR",
1121 "DATABUS_ID",
1122 "FIRST_APP_CALLDATA_INDICATOR",
1123 "SECOND_APP_CALLDATA_INDICATOR",
1124 "THIRD_APP_CALLDATA_INDICATOR",
1125 "FOURTH_APP_CALLDATA_INDICATOR",
1126 "Q_5",
1127 "FIFTH_APP_CALLDATA_INDICATOR",
1128 "RETURN_DATA_INDICATOR",
1129 "Q_POSEIDON2_EXTERNAL",
1130 "Q_POSEIDON2_EXTERNAL_INITIAL",
1131 "Q_POSEIDON2_QUAD_INTERNAL",
1132 "Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
1133 "Q_POSEIDON2_TRANSITION_ENTRY",
1134 };
1135 return labels;
1136 }
1137 };
1138
1139 // Prover-commitment transport class (witness only). Owns its own storage.
1140 template <typename DataType_> class WitnessEntities {
1141 public:
1142 using DataType = DataType_;
1143 std::array<DataType, NUM_WITNESS_ENTITIES> data{};
1144
1145 bool operator==(const WitnessEntities&) const = default;
1146
1149
1150 static constexpr size_t size() { return NUM_WITNESS_ENTITIES; }
1151
1152 // Named accessor methods — index into local `data` (NOT the AllEntities layout).
1153 DataType& w_l() { return data[0]; }
1154 const DataType& w_l() const { return data[0]; }
1155 DataType& w_r() { return data[1]; }
1156 const DataType& w_r() const { return data[1]; }
1157 DataType& w_o() { return data[2]; }
1158 const DataType& w_o() const { return data[2]; }
1159 DataType& w_4() { return data[3]; }
1160 const DataType& w_4() const { return data[3]; }
1161 DataType& z_perm() { return data[4]; }
1162 const DataType& z_perm() const { return data[4]; }
1164 const DataType& lookup_inverses() const { return data[5]; }
1166 const DataType& lookup_read_counts() const { return data[6]; }
1168 const DataType& lookup_read_tags() const { return data[7]; }
1169 DataType& ecc_op_wire_1() { return data[8]; }
1170 const DataType& ecc_op_wire_1() const { return data[8]; }
1171 DataType& ecc_op_wire_2() { return data[9]; }
1172 const DataType& ecc_op_wire_2() const { return data[9]; }
1173 DataType& ecc_op_wire_3() { return data[10]; }
1174 const DataType& ecc_op_wire_3() const { return data[10]; }
1175 DataType& ecc_op_wire_4() { return data[11]; }
1176 const DataType& ecc_op_wire_4() const { return data[11]; }
1177 DataType& kernel_calldata() { return data[12]; }
1178 const DataType& kernel_calldata() const { return data[12]; }
1180 const DataType& kernel_calldata_read_counts() const { return data[13]; }
1182 const DataType& kernel_calldata_inverses() const { return data[14]; }
1184 const DataType& first_app_calldata() const { return data[15]; }
1186 const DataType& first_app_calldata_read_counts() const { return data[16]; }
1188 const DataType& first_app_calldata_inverses() const { return data[17]; }
1190 const DataType& second_app_calldata() const { return data[18]; }
1192 const DataType& second_app_calldata_read_counts() const { return data[19]; }
1194 const DataType& second_app_calldata_inverses() const { return data[20]; }
1196 const DataType& third_app_calldata() const { return data[21]; }
1198 const DataType& third_app_calldata_read_counts() const { return data[22]; }
1200 const DataType& third_app_calldata_inverses() const { return data[23]; }
1202 const DataType& fourth_app_calldata() const { return data[24]; }
1204 const DataType& fourth_app_calldata_read_counts() const { return data[25]; }
1206 const DataType& fourth_app_calldata_inverses() const { return data[26]; }
1208 const DataType& fifth_app_calldata() const { return data[27]; }
1210 const DataType& fifth_app_calldata_read_counts() const { return data[28]; }
1212 const DataType& fifth_app_calldata_inverses() const { return data[29]; }
1213 DataType& return_data() { return data[30]; }
1214 const DataType& return_data() const { return data[30]; }
1216 const DataType& return_data_read_counts() const { return data[31]; }
1218 const DataType& return_data_inverses() const { return data[32]; }
1219
1220 // Subset views.
1221 RefArray<DataType, 4> get_wires() { return { this->w_l(), this->w_r(), this->w_o(), this->w_4() }; }
1222 RefArray<const DataType, 4> get_wires() const { return { this->w_l(), this->w_r(), this->w_o(), this->w_4() }; }
1224 {
1225 return { this->ecc_op_wire_1(), this->ecc_op_wire_2(), this->ecc_op_wire_3(), this->ecc_op_wire_4() };
1226 }
1228 {
1229 return { this->ecc_op_wire_1(), this->ecc_op_wire_2(), this->ecc_op_wire_3(), this->ecc_op_wire_4() };
1230 }
1265
1267 {
1268 return { this->w_l(), this->w_r(), this->w_o(), this->w_4(), this->z_perm() };
1269 }
1271 {
1272 return { this->w_l(), this->w_r(), this->w_o(), this->w_4(), this->z_perm() };
1273 }
1274
1275 static const std::vector<std::string>& get_labels()
1276 {
1277 static const std::vector<std::string> labels = {
1278 "W_L",
1279 "W_R",
1280 "W_O",
1281 "W_4",
1282 "Z_PERM",
1283 "LOOKUP_INVERSES",
1284 "LOOKUP_READ_COUNTS",
1285 "LOOKUP_READ_TAGS",
1286 "ECC_OP_WIRE_1",
1287 "ECC_OP_WIRE_2",
1288 "ECC_OP_WIRE_3",
1289 "ECC_OP_WIRE_4",
1290 "KERNEL_CALLDATA",
1291 "KERNEL_CALLDATA_READ_COUNTS",
1292 "KERNEL_CALLDATA_INVERSES",
1293 "FIRST_APP_CALLDATA",
1294 "FIRST_APP_CALLDATA_READ_COUNTS",
1295 "FIRST_APP_CALLDATA_INVERSES",
1296 "SECOND_APP_CALLDATA",
1297 "SECOND_APP_CALLDATA_READ_COUNTS",
1298 "SECOND_APP_CALLDATA_INVERSES",
1299 "THIRD_APP_CALLDATA",
1300 "THIRD_APP_CALLDATA_READ_COUNTS",
1301 "THIRD_APP_CALLDATA_INVERSES",
1302 "FOURTH_APP_CALLDATA",
1303 "FOURTH_APP_CALLDATA_READ_COUNTS",
1304 "FOURTH_APP_CALLDATA_INVERSES",
1305 "FIFTH_APP_CALLDATA",
1306 "FIFTH_APP_CALLDATA_READ_COUNTS",
1307 "FIFTH_APP_CALLDATA_INVERSES",
1308 "RETURN_DATA",
1309 "RETURN_DATA_READ_COUNTS",
1310 "RETURN_DATA_INVERSES",
1311 };
1312 return labels;
1313 }
1314 };
1315};
1316
1317} // namespace bb
bb::field< bb::Bn254FrParams > FF
Definition field.cpp:24
RefArray< const DataType, 4 > get_tables() const
const DataType & first_app_calldata_indicator() const
std::span< DataType, NUM_ALL_ENTITIES > get_all()
const DataType & fourth_app_calldata_indicator() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_shifted() const
RefArray< const DataType, 7 > get_databus_selectors() const
const DataType & second_app_calldata_inverses() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_witness() const
const DataType & fifth_app_calldata_indicator() const
std::span< const DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted() const
const DataType & second_app_calldata_indicator() const
const DataType & operator[](EntityId id) const
RefArray< const DataType, 7 > get_databus_indicators() const
std::span< DataType, NUM_WITNESS_ENTITIES > get_witness()
const DataType & q_poseidon2_external_initial() const
RefArray< const DataType, 13 > get_gate_selectors() const
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed() const
const DataType & q_poseidon2_transition_entry() const
const DataType & third_app_calldata_read_counts() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted() const
RefArray< const DataType, 7 > get_databus_inverses() const
std::span< DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted()
std::span< DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted()
RefArray< const DataType, 14 > get_databus_entities() const
RefArray< const DataType, 4 > get_ecc_op_wires() const
const DataType & fourth_app_calldata_read_counts() const
const DataType & q_poseidon2_quad_internal_terminal() const
const DataType & fourth_app_calldata_inverses() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_shifted()
static const std::vector< std::string > & get_labels()
std::span< const DataType, NUM_ALL_ENTITIES > get_all() const
RefArray< const DataType, 4 > get_sigmas() const
const DataType & first_app_calldata_read_counts() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed()
const DataType & third_app_calldata_indicator() const
std::array< DataType, NUM_ALL_ENTITIES > data
const DataType & second_app_calldata_read_counts() const
RefArray< const DataType, 4 > get_wires() const
RefArray< const DataType, 4 > get_ids() const
const DataType & fifth_app_calldata_read_counts() const
RefArray< const DataType, 7 > get_non_gate_selectors() const
RefArray< const DataType, 4 > get_sigmas() const
RefArray< const DataType, 13 > get_gate_selectors() const
RefArray< const DataType, 4 > get_ids() const
std::array< DataType, NUM_PRECOMPUTED_ENTITIES > data
RefArray< const DataType, 4 > get_tables() const
RefArray< const DataType, 7 > get_non_gate_selectors() const
bool operator==(const PrecomputedEntities &) const =default
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_all() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_all()
RefArray< const DataType, 7 > get_databus_indicators() const
RefArray< const DataType, 7 > get_databus_selectors() const
static const std::vector< std::string > & get_labels()
static const std::vector< std::string > & get_labels()
RefArray< const DataType, 4 > get_wires() const
RefArray< const DataType, 4 > get_ecc_op_wires() const
RefArray< const DataType, 5 > get_to_be_shifted() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_all() const
std::span< DataType, NUM_WITNESS_ENTITIES > get_all()
RefArray< const DataType, 7 > get_databus_inverses() const
RefArray< const DataType, 14 > get_databus_entities() const
bool operator==(const WitnessEntities &) const =default
std::array< DataType, NUM_WITNESS_ENTITIES > data
static constexpr size_t NUM_BUS_COLUMNS
static constexpr size_t NUM_ALL_ENTITIES
static auto get_gate_blocks(TraceBlocks const &blocks)
static constexpr RepeatedCommitmentsData REPEATED_COMMITMENTS
static auto get_gate_blocks(TraceBlocks &blocks)
std::tuple< bb::UltraPermutationRelation< FF >, bb::LogDerivLookupRelation< FF >, bb::ArithmeticRelation< FF >, bb::BilinearOrBatchedEqCheckRelation< FF >, bb::DeltaRangeConstraintRelation< FF >, bb::EllipticRelation< FF >, bb::MemoryRelation< FF >, bb::NonNativeFieldRelation< FF >, bb::EccOpQueueRelation< FF >, bb::SingleBusLookupRelation< FF, EntityId::kernel_calldata, EntityId::kernel_calldata_read_counts, EntityId::kernel_calldata_inverses, EntityId::kernel_calldata_indicator, EntityId::q_l >, bb::SingleBusLookupRelation< FF, EntityId::first_app_calldata, EntityId::first_app_calldata_read_counts, EntityId::first_app_calldata_inverses, EntityId::first_app_calldata_indicator, EntityId::q_r >, bb::SingleBusLookupRelation< FF, EntityId::second_app_calldata, EntityId::second_app_calldata_read_counts, EntityId::second_app_calldata_inverses, EntityId::second_app_calldata_indicator, EntityId::q_o >, bb::SingleBusLookupRelation< FF, EntityId::third_app_calldata, EntityId::third_app_calldata_read_counts, EntityId::third_app_calldata_inverses, EntityId::third_app_calldata_indicator, EntityId::q_4 >, bb::SingleBusLookupRelation< FF, EntityId::fourth_app_calldata, EntityId::fourth_app_calldata_read_counts, EntityId::fourth_app_calldata_inverses, EntityId::fourth_app_calldata_indicator, EntityId::q_5 >, bb::SingleBusLookupRelation< FF, EntityId::fifth_app_calldata, EntityId::fifth_app_calldata_read_counts, EntityId::fifth_app_calldata_inverses, EntityId::fifth_app_calldata_indicator, EntityId::q_c >, bb::SingleBusLookupRelation< FF, EntityId::return_data, EntityId::return_data_read_counts, EntityId::return_data_inverses, EntityId::return_data_indicator, EntityId::q_m >, bb::Poseidon2ExternalRelation< FF >, bb::Poseidon2InitialExternalRelation< FF >, bb::Poseidon2QuadInternalRelation< FF >, bb::Poseidon2QuadInternalTerminalRelation< FF >, bb::Poseidon2TransitionEntryRelation< FF > > Relations_
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr std::array< GateKind, 13 > GATE_KINDS
static constexpr size_t NUM_MASKING_ENTITIES
static constexpr size_t NUM_COMMITTED_WITNESS_ENTITIES
static constexpr bool HasElliptic
static constexpr size_t NUM_SHIFTED_ENTITIES
static auto get_block_non_gate_selectors(TraceBlock &block)
static constexpr size_t NUM_UNSHIFTED_ENTITIES
static constexpr std::array< size_t, NUM_BUS_COLUMNS > BUILDER_BUS_INDICES
static constexpr std::array< DuplicatePair, NUM_SHIFTED_ENTITIES > REPEATED_COMMITMENT_PAIRS
static constexpr bool HasLogDerivLookup
static constexpr bool HasNonNativeField
static constexpr size_t NUM_PRECOMPUTED_ENTITIES
static constexpr bool HasEccOpQueue
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
Definition ref_array.hpp:23
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr RepeatedCommitmentsData repeated_commitments_from_pairs(std::span< const DuplicatePair > pairs)
Collapse a span of (original, duplicate) pairs into a RepeatedCommitmentsData of up to two contiguous...
RefArray< T,(Ns+...)> constexpr concatenate(const RefArray< T, Ns > &... ref_arrays)
Concatenates multiple RefArray objects into a single RefArray.
@ Poseidon2QuadIntTerminal
@ Poseidon2TransitionEntry
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
One commitment shared by an unshifted polynomial and its shifted copy.