Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
execution_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void executionImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto constants_MEM_TAG_U1 = FF(1);
19 const auto constants_MEM_TAG_U32 = FF(4);
20 const auto constants_AVM_SUBTRACE_ID_EXECUTION = FF(1);
21 const auto constants_AVM_SUBTRACE_ID_ALU = FF(2);
22 const auto constants_AVM_SUBTRACE_ID_BITWISE = FF(4);
23 const auto constants_AVM_SUBTRACE_ID_CAST = FF(8);
24 const auto constants_AVM_SUBTRACE_ID_CALLDATA_COPY = FF(16);
25 const auto constants_AVM_SUBTRACE_ID_RETURNDATA_COPY = FF(32);
26 const auto constants_AVM_SUBTRACE_ID_SET = FF(64);
27 const auto constants_AVM_SUBTRACE_ID_GETCONTRACTINSTANCE = FF(128);
28 const auto constants_AVM_SUBTRACE_ID_EMITPUBLICLOG = FF(256);
29 const auto constants_AVM_SUBTRACE_ID_POSEIDON2_PERM = FF(512);
30 const auto constants_AVM_SUBTRACE_ID_SHA256_COMPRESSION = FF(1024);
31 const auto constants_AVM_SUBTRACE_ID_KECCAKF1600 = FF(2048);
32 const auto constants_AVM_SUBTRACE_ID_ECC = FF(4096);
33 const auto constants_AVM_SUBTRACE_ID_TO_RADIX = FF(8192);
34 const auto constants_AVM_DYN_GAS_ID_CALLDATACOPY = FF(1);
35 const auto constants_AVM_DYN_GAS_ID_RETURNDATACOPY = FF(2);
36 const auto constants_AVM_DYN_GAS_ID_TORADIX = FF(4);
37 const auto constants_AVM_DYN_GAS_ID_EMITPUBLICLOG = FF(8);
38 const auto constants_AVM_DYN_GAS_ID_SSTORE = FF(16);
39 const auto constants_AVM_EXEC_OP_ID_GETENVVAR = FF(1);
40 const auto constants_AVM_EXEC_OP_ID_MOV = FF(2);
41 const auto constants_AVM_EXEC_OP_ID_JUMP = FF(4);
42 const auto constants_AVM_EXEC_OP_ID_JUMPI = FF(8);
43 const auto constants_AVM_EXEC_OP_ID_CALL = FF(16);
44 const auto constants_AVM_EXEC_OP_ID_STATICCALL = FF(32);
45 const auto constants_AVM_EXEC_OP_ID_INTERNALCALL = FF(64);
46 const auto constants_AVM_EXEC_OP_ID_INTERNALRETURN = FF(128);
47 const auto constants_AVM_EXEC_OP_ID_RETURN = FF(256);
48 const auto constants_AVM_EXEC_OP_ID_REVERT = FF(512);
49 const auto constants_AVM_EXEC_OP_ID_SUCCESSCOPY = FF(1024);
50 const auto constants_AVM_EXEC_OP_ID_RETURNDATASIZE = FF(2048);
51 const auto constants_AVM_EXEC_OP_ID_DEBUGLOG = FF(4096);
52 const auto constants_AVM_EXEC_OP_ID_SLOAD = FF(8192);
53 const auto constants_AVM_EXEC_OP_ID_SSTORE = FF(16384);
54 const auto constants_AVM_EXEC_OP_ID_NOTEHASH_EXISTS = FF(32768);
55 const auto constants_AVM_EXEC_OP_ID_EMIT_NOTEHASH = FF(65536);
56 const auto constants_AVM_EXEC_OP_ID_L1_TO_L2_MESSAGE_EXISTS = FF(131072);
57 const auto constants_AVM_EXEC_OP_ID_NULLIFIER_EXISTS = FF(262144);
58 const auto constants_AVM_EXEC_OP_ID_EMIT_NULLIFIER = FF(524288);
59 const auto constants_AVM_EXEC_OP_ID_SENDL2TOL1MSG = FF(1048576);
60 const auto constants_AVM_WRITTEN_PUBLIC_DATA_SLOTS_TREE_HEIGHT = FF(6);
61 const auto constants_DOM_SEP__PUBLIC_LEAF_SLOT = FF(1247650290);
62 const auto constants_DOM_SEP__WRITTEN_SLOTS_MERKLE = FF(2292766212UL);
63 const auto execution_SEL_RESOLVE_ADDRESS = in.get(C::execution_sel_instruction_fetching_success);
64
65 {
66 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
67 auto tmp = static_cast<View>(in.get(C::execution_sel)) * (FF(1) - static_cast<View>(in.get(C::execution_sel)));
68 std::get<0>(evals) += (tmp * scaling_factor);
69 }
70 { // ENQUEUED_CALL_START
71 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
72 auto tmp = (static_cast<View>(in.get(C::execution_enqueued_call_start_shift)) -
73 (static_cast<View>(in.get(C::precomputed_first_row)) +
74 static_cast<View>(in.get(C::execution_enqueued_call_end))) *
75 static_cast<View>(in.get(C::execution_sel_shift)));
76 std::get<1>(evals) += (tmp * scaling_factor);
77 }
78 { // ENQUEUED_CALL_END
79 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
80 auto tmp = (static_cast<View>(in.get(C::execution_enqueued_call_end)) -
81 static_cast<View>(in.get(C::execution_sel_exit_call)) *
82 (FF(1) - static_cast<View>(in.get(C::execution_has_parent_ctx))));
83 std::get<2>(evals) += (tmp * scaling_factor);
84 }
85 {
86 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
87 auto tmp = (static_cast<View>(in.get(C::execution_sel_first_row_in_context_shift)) -
88 (static_cast<View>(in.get(C::execution_sel_enter_call)) +
89 static_cast<View>(in.get(C::execution_enqueued_call_start_shift))));
90 std::get<3>(evals) += (tmp * scaling_factor);
91 }
92 { // TRACE_CONTINUITY
93 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
94 auto tmp = ((FF(1) - static_cast<View>(in.get(C::precomputed_first_row))) -
95 static_cast<View>(in.get(C::execution_enqueued_call_end))) *
96 (static_cast<View>(in.get(C::execution_sel)) - static_cast<View>(in.get(C::execution_sel_shift)));
97 std::get<4>(evals) += (tmp * scaling_factor);
98 }
99 { // EXEC_CLK_INIT
100 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
101 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel))) * static_cast<View>(in.get(C::execution_clk));
102 std::get<5>(evals) += (tmp * scaling_factor);
103 }
104 { // EXEC_CLK_CONTINUITY
105 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
106 auto tmp =
107 static_cast<View>(in.get(C::execution_sel_shift)) *
108 ((static_cast<View>(in.get(C::execution_clk)) + FF(1)) - static_cast<View>(in.get(C::execution_clk_shift)));
109 std::get<6>(evals) += (tmp * scaling_factor);
110 }
111 { // BYTECODE_RETRIEVAL_NO_FAILURE
112 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
113 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_first_row_in_context))) *
114 static_cast<View>(in.get(C::execution_sel_bytecode_retrieval_failure));
115 std::get<7>(evals) += (tmp * scaling_factor);
116 }
117 {
118 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
119 auto tmp = (static_cast<View>(in.get(C::execution_sel_bytecode_retrieval_success)) -
120 static_cast<View>(in.get(C::execution_sel)) *
121 (FF(1) - static_cast<View>(in.get(C::execution_sel_bytecode_retrieval_failure))));
122 std::get<8>(evals) += (tmp * scaling_factor);
123 }
124 { // NO_FETCHING_NO_INSTR_FETCH_ERROR
125 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
126 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_bytecode_retrieval_success))) *
127 static_cast<View>(in.get(C::execution_sel_instruction_fetching_failure));
128 std::get<9>(evals) += (tmp * scaling_factor);
129 }
130 {
131 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
132 auto tmp = (static_cast<View>(in.get(C::execution_sel_instruction_fetching_success)) -
133 (static_cast<View>(in.get(C::execution_sel_bytecode_retrieval_success)) -
134 static_cast<View>(in.get(C::execution_sel_instruction_fetching_failure))));
135 std::get<10>(evals) += (tmp * scaling_factor);
136 }
137 {
138 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
139 auto tmp =
140 (static_cast<View>(in.get(C::execution_sel_read_registers)) -
141 (CView(execution_SEL_RESOLVE_ADDRESS) - static_cast<View>(in.get(C::execution_sel_addressing_error))));
142 std::get<11>(evals) += (tmp * scaling_factor);
143 }
144 {
145 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
146 auto tmp = (static_cast<View>(in.get(C::execution_sel_check_gas)) -
147 (static_cast<View>(in.get(C::execution_sel_read_registers)) -
148 static_cast<View>(in.get(C::execution_sel_register_read_error))));
149 std::get<12>(evals) += (tmp * scaling_factor);
150 }
151 {
152 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
153 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_calldata_copy)) *
154 (FF(1) - static_cast<View>(in.get(C::execution_sel_gas_calldata_copy)));
155 std::get<13>(evals) += (tmp * scaling_factor);
156 }
157 {
158 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
159 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_returndata_copy)) *
160 (FF(1) - static_cast<View>(in.get(C::execution_sel_gas_returndata_copy)));
161 std::get<14>(evals) += (tmp * scaling_factor);
162 }
163 {
164 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
165 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_to_radix)) *
166 (FF(1) - static_cast<View>(in.get(C::execution_sel_gas_to_radix)));
167 std::get<15>(evals) += (tmp * scaling_factor);
168 }
169 {
170 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
171 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_emit_public_log)) *
172 (FF(1) - static_cast<View>(in.get(C::execution_sel_gas_emit_public_log)));
173 std::get<16>(evals) += (tmp * scaling_factor);
174 }
175 {
176 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
177 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_sstore)) *
178 (FF(1) - static_cast<View>(in.get(C::execution_sel_gas_sstore)));
179 std::get<17>(evals) += (tmp * scaling_factor);
180 }
181 { // DYN_GAS_ID_DECOMPOSITION
182 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
183 auto tmp =
184 ((static_cast<View>(in.get(C::execution_sel_gas_calldata_copy)) *
185 CView(constants_AVM_DYN_GAS_ID_CALLDATACOPY) +
186 static_cast<View>(in.get(C::execution_sel_gas_returndata_copy)) *
187 CView(constants_AVM_DYN_GAS_ID_RETURNDATACOPY) +
188 static_cast<View>(in.get(C::execution_sel_gas_to_radix)) * CView(constants_AVM_DYN_GAS_ID_TORADIX) +
189 static_cast<View>(in.get(C::execution_sel_gas_emit_public_log)) *
190 CView(constants_AVM_DYN_GAS_ID_EMITPUBLICLOG) +
191 static_cast<View>(in.get(C::execution_sel_gas_sstore)) * CView(constants_AVM_DYN_GAS_ID_SSTORE)) -
192 static_cast<View>(in.get(C::execution_sel_check_gas)) *
193 static_cast<View>(in.get(C::execution_dyn_gas_id)));
194 std::get<18>(evals) += (tmp * scaling_factor);
195 }
196 {
197 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
198 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_to_radix)) *
199 (static_cast<View>(in.get(C::execution_two_five_six)) - FF(256));
200 std::get<19>(evals) += (tmp * scaling_factor);
201 }
202 {
203 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
204 auto tmp = (static_cast<View>(in.get(C::execution_sel_lookup_num_p_limbs)) -
205 static_cast<View>(in.get(C::execution_sel_gas_to_radix)) *
206 (FF(1) - static_cast<View>(in.get(C::execution_sel_radix_gt_256))));
207 std::get<20>(evals) += (tmp * scaling_factor);
208 }
209 { // NUM_P_LIMBS_CEIL
210 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
211 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_to_radix)) *
212 static_cast<View>(in.get(C::execution_sel_radix_gt_256)) *
213 (static_cast<View>(in.get(C::execution_num_p_limbs)) - FF(32));
214 std::get<21>(evals) += (tmp * scaling_factor);
215 }
216 { // DYN_L2_FACTOR_TO_RADIX_BE
217 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
218 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_to_radix)) *
219 (((static_cast<View>(in.get(C::execution_register_2_)) -
220 static_cast<View>(in.get(C::execution_num_p_limbs))) *
221 static_cast<View>(in.get(C::execution_sel_use_num_limbs)) +
222 static_cast<View>(in.get(C::execution_num_p_limbs))) -
223 static_cast<View>(in.get(C::execution_dynamic_l2_gas_factor)));
224 std::get<22>(evals) += (tmp * scaling_factor);
225 }
226 {
227 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
228 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_sstore)) *
229 (static_cast<View>(in.get(C::execution_written_slots_tree_height)) -
230 CView(constants_AVM_WRITTEN_PUBLIC_DATA_SLOTS_TREE_HEIGHT));
231 std::get<23>(evals) += (tmp * scaling_factor);
232 }
233 {
234 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
235 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_sstore)) *
236 (static_cast<View>(in.get(C::execution_written_slots_tree_siloing_separator)) -
237 CView(constants_DOM_SEP__PUBLIC_LEAF_SLOT));
238 std::get<24>(evals) += (tmp * scaling_factor);
239 }
240 {
241 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
242 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_sstore)) *
243 (static_cast<View>(in.get(C::execution_written_slots_merkle_separator)) -
244 CView(constants_DOM_SEP__WRITTEN_SLOTS_MERKLE));
245 std::get<25>(evals) += (tmp * scaling_factor);
246 }
247 {
248 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
249 auto tmp = (static_cast<View>(in.get(C::execution_sel_gas_emit_public_log)) +
250 static_cast<View>(in.get(C::execution_sel_gas_calldata_copy)) +
251 static_cast<View>(in.get(C::execution_sel_gas_returndata_copy))) *
252 (static_cast<View>(in.get(C::execution_register_0_)) -
253 static_cast<View>(in.get(C::execution_dynamic_l2_gas_factor)));
254 std::get<26>(evals) += (tmp * scaling_factor);
255 }
256 {
257 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
258 auto tmp = static_cast<View>(in.get(C::execution_sel_gas_emit_public_log)) *
259 (static_cast<View>(in.get(C::execution_register_0_)) -
260 static_cast<View>(in.get(C::execution_dynamic_da_gas_factor)));
261 std::get<27>(evals) += (tmp * scaling_factor);
262 }
263 { // DYN_DA_GAS_IS_ZERO
264 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
265 auto tmp = ((FF(1) - static_cast<View>(in.get(C::execution_sel_gas_sstore))) -
266 static_cast<View>(in.get(C::execution_sel_gas_emit_public_log))) *
267 static_cast<View>(in.get(C::execution_dynamic_da_gas_factor));
268 std::get<28>(evals) += (tmp * scaling_factor);
269 }
270 { // DYN_L2_GAS_IS_ZERO
271 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
272 auto tmp = ((((FF(1) - static_cast<View>(in.get(C::execution_sel_gas_to_radix))) -
273 static_cast<View>(in.get(C::execution_sel_gas_emit_public_log))) -
274 static_cast<View>(in.get(C::execution_sel_gas_calldata_copy))) -
275 static_cast<View>(in.get(C::execution_sel_gas_returndata_copy))) *
276 static_cast<View>(in.get(C::execution_dynamic_l2_gas_factor));
277 std::get<29>(evals) += (tmp * scaling_factor);
278 }
279 {
280 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
281 auto tmp = (static_cast<View>(in.get(C::execution_sel_execute_opcode)) -
282 (static_cast<View>(in.get(C::execution_sel_check_gas)) -
283 static_cast<View>(in.get(C::execution_sel_out_of_gas))));
284 std::get<30>(evals) += (tmp * scaling_factor);
285 }
286 {
287 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
288 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_execution)) *
289 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_execution)));
290 std::get<31>(evals) += (tmp * scaling_factor);
291 }
292 {
293 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
294 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_alu)) *
295 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_alu)));
296 std::get<32>(evals) += (tmp * scaling_factor);
297 }
298 {
299 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
300 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_bitwise)) *
301 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_bitwise)));
302 std::get<33>(evals) += (tmp * scaling_factor);
303 }
304 {
305 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
306 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_cast)) *
307 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_cast)));
308 std::get<34>(evals) += (tmp * scaling_factor);
309 }
310 {
311 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
312 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_calldata_copy)) *
313 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_calldata_copy)));
314 std::get<35>(evals) += (tmp * scaling_factor);
315 }
316 {
317 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
318 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_returndata_copy)) *
319 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_returndata_copy)));
320 std::get<36>(evals) += (tmp * scaling_factor);
321 }
322 {
323 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
324 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_set)) *
325 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_set)));
326 std::get<37>(evals) += (tmp * scaling_factor);
327 }
328 {
329 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
330 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_get_contract_instance)) *
331 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_get_contract_instance)));
332 std::get<38>(evals) += (tmp * scaling_factor);
333 }
334 {
335 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
336 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_emit_public_log)) *
337 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_emit_public_log)));
338 std::get<39>(evals) += (tmp * scaling_factor);
339 }
340 {
341 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
342 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_poseidon2_perm)) *
343 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_poseidon2_perm)));
344 std::get<40>(evals) += (tmp * scaling_factor);
345 }
346 {
347 using View = typename std::tuple_element_t<41, ContainerOverSubrelations>::View;
348 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_sha256_compression)) *
349 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_sha256_compression)));
350 std::get<41>(evals) += (tmp * scaling_factor);
351 }
352 {
353 using View = typename std::tuple_element_t<42, ContainerOverSubrelations>::View;
354 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_keccakf1600)) *
355 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_keccakf1600)));
356 std::get<42>(evals) += (tmp * scaling_factor);
357 }
358 {
359 using View = typename std::tuple_element_t<43, ContainerOverSubrelations>::View;
360 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_ecc_add)) *
361 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_ecc_add)));
362 std::get<43>(evals) += (tmp * scaling_factor);
363 }
364 {
365 using View = typename std::tuple_element_t<44, ContainerOverSubrelations>::View;
366 auto tmp = static_cast<View>(in.get(C::execution_sel_exec_dispatch_to_radix)) *
367 (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_to_radix)));
368 std::get<44>(evals) += (tmp * scaling_factor);
369 }
370 { // SUBTRACE_ID_DECOMPOSITION
371 using View = typename std::tuple_element_t<45, ContainerOverSubrelations>::View;
372 auto tmp =
373 ((static_cast<View>(in.get(C::execution_sel_exec_dispatch_execution)) *
374 CView(constants_AVM_SUBTRACE_ID_EXECUTION) +
375 static_cast<View>(in.get(C::execution_sel_exec_dispatch_alu)) * CView(constants_AVM_SUBTRACE_ID_ALU) +
376 static_cast<View>(in.get(C::execution_sel_exec_dispatch_bitwise)) *
377 CView(constants_AVM_SUBTRACE_ID_BITWISE) +
378 static_cast<View>(in.get(C::execution_sel_exec_dispatch_cast)) * CView(constants_AVM_SUBTRACE_ID_CAST) +
379 static_cast<View>(in.get(C::execution_sel_exec_dispatch_calldata_copy)) *
380 CView(constants_AVM_SUBTRACE_ID_CALLDATA_COPY) +
381 static_cast<View>(in.get(C::execution_sel_exec_dispatch_returndata_copy)) *
382 CView(constants_AVM_SUBTRACE_ID_RETURNDATA_COPY) +
383 static_cast<View>(in.get(C::execution_sel_exec_dispatch_set)) * CView(constants_AVM_SUBTRACE_ID_SET) +
384 static_cast<View>(in.get(C::execution_sel_exec_dispatch_get_contract_instance)) *
385 CView(constants_AVM_SUBTRACE_ID_GETCONTRACTINSTANCE) +
386 static_cast<View>(in.get(C::execution_sel_exec_dispatch_emit_public_log)) *
387 CView(constants_AVM_SUBTRACE_ID_EMITPUBLICLOG) +
388 static_cast<View>(in.get(C::execution_sel_exec_dispatch_poseidon2_perm)) *
389 CView(constants_AVM_SUBTRACE_ID_POSEIDON2_PERM) +
390 static_cast<View>(in.get(C::execution_sel_exec_dispatch_sha256_compression)) *
391 CView(constants_AVM_SUBTRACE_ID_SHA256_COMPRESSION) +
392 static_cast<View>(in.get(C::execution_sel_exec_dispatch_keccakf1600)) *
393 CView(constants_AVM_SUBTRACE_ID_KECCAKF1600) +
394 static_cast<View>(in.get(C::execution_sel_exec_dispatch_ecc_add)) * CView(constants_AVM_SUBTRACE_ID_ECC) +
395 static_cast<View>(in.get(C::execution_sel_exec_dispatch_to_radix)) *
396 CView(constants_AVM_SUBTRACE_ID_TO_RADIX)) -
397 static_cast<View>(in.get(C::execution_sel_execute_opcode)) *
398 static_cast<View>(in.get(C::execution_subtrace_id)));
399 std::get<45>(evals) += (tmp * scaling_factor);
400 }
401 {
402 using View = typename std::tuple_element_t<46, ContainerOverSubrelations>::View;
403 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_get_env_var)) *
404 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_get_env_var)));
405 std::get<46>(evals) += (tmp * scaling_factor);
406 }
407 {
408 using View = typename std::tuple_element_t<47, ContainerOverSubrelations>::View;
409 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_mov)) *
410 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_mov)));
411 std::get<47>(evals) += (tmp * scaling_factor);
412 }
413 {
414 using View = typename std::tuple_element_t<48, ContainerOverSubrelations>::View;
415 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_jump)) *
416 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_jump)));
417 std::get<48>(evals) += (tmp * scaling_factor);
418 }
419 {
420 using View = typename std::tuple_element_t<49, ContainerOverSubrelations>::View;
421 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_jumpi)) *
422 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_jumpi)));
423 std::get<49>(evals) += (tmp * scaling_factor);
424 }
425 {
426 using View = typename std::tuple_element_t<50, ContainerOverSubrelations>::View;
427 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_call)) *
428 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_call)));
429 std::get<50>(evals) += (tmp * scaling_factor);
430 }
431 {
432 using View = typename std::tuple_element_t<51, ContainerOverSubrelations>::View;
433 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_static_call)) *
434 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_static_call)));
435 std::get<51>(evals) += (tmp * scaling_factor);
436 }
437 {
438 using View = typename std::tuple_element_t<52, ContainerOverSubrelations>::View;
439 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_internal_call)) *
440 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_internal_call)));
441 std::get<52>(evals) += (tmp * scaling_factor);
442 }
443 {
444 using View = typename std::tuple_element_t<53, ContainerOverSubrelations>::View;
445 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_internal_return)) *
446 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_internal_return)));
447 std::get<53>(evals) += (tmp * scaling_factor);
448 }
449 {
450 using View = typename std::tuple_element_t<54, ContainerOverSubrelations>::View;
451 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_return)) *
452 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_return)));
453 std::get<54>(evals) += (tmp * scaling_factor);
454 }
455 {
456 using View = typename std::tuple_element_t<55, ContainerOverSubrelations>::View;
457 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_revert)) *
458 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_revert)));
459 std::get<55>(evals) += (tmp * scaling_factor);
460 }
461 {
462 using View = typename std::tuple_element_t<56, ContainerOverSubrelations>::View;
463 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_success_copy)) *
464 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_success_copy)));
465 std::get<56>(evals) += (tmp * scaling_factor);
466 }
467 {
468 using View = typename std::tuple_element_t<57, ContainerOverSubrelations>::View;
469 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_returndata_size)) *
470 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_returndata_size)));
471 std::get<57>(evals) += (tmp * scaling_factor);
472 }
473 {
474 using View = typename std::tuple_element_t<58, ContainerOverSubrelations>::View;
475 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_debug_log)) *
476 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_debug_log)));
477 std::get<58>(evals) += (tmp * scaling_factor);
478 }
479 {
480 using View = typename std::tuple_element_t<59, ContainerOverSubrelations>::View;
481 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_sload)) *
482 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_sload)));
483 std::get<59>(evals) += (tmp * scaling_factor);
484 }
485 {
486 using View = typename std::tuple_element_t<60, ContainerOverSubrelations>::View;
487 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_sstore)) *
488 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_sstore)));
489 std::get<60>(evals) += (tmp * scaling_factor);
490 }
491 {
492 using View = typename std::tuple_element_t<61, ContainerOverSubrelations>::View;
493 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_notehash_exists)) *
494 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_notehash_exists)));
495 std::get<61>(evals) += (tmp * scaling_factor);
496 }
497 {
498 using View = typename std::tuple_element_t<62, ContainerOverSubrelations>::View;
499 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_emit_notehash)) *
500 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_notehash)));
501 std::get<62>(evals) += (tmp * scaling_factor);
502 }
503 {
504 using View = typename std::tuple_element_t<63, ContainerOverSubrelations>::View;
505 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_l1_to_l2_message_exists)) *
506 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_l1_to_l2_message_exists)));
507 std::get<63>(evals) += (tmp * scaling_factor);
508 }
509 {
510 using View = typename std::tuple_element_t<64, ContainerOverSubrelations>::View;
511 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_nullifier_exists)) *
512 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_nullifier_exists)));
513 std::get<64>(evals) += (tmp * scaling_factor);
514 }
515 {
516 using View = typename std::tuple_element_t<65, ContainerOverSubrelations>::View;
517 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_emit_nullifier)) *
518 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_nullifier)));
519 std::get<65>(evals) += (tmp * scaling_factor);
520 }
521 {
522 using View = typename std::tuple_element_t<66, ContainerOverSubrelations>::View;
523 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_send_l2_to_l1_msg)) *
524 (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_send_l2_to_l1_msg)));
525 std::get<66>(evals) += (tmp * scaling_factor);
526 }
527 { // EXEC_OP_ID_DECOMPOSITION
528 using View = typename std::tuple_element_t<67, ContainerOverSubrelations>::View;
529 auto tmp =
530 ((static_cast<View>(in.get(C::execution_sel_execute_get_env_var)) *
531 CView(constants_AVM_EXEC_OP_ID_GETENVVAR) +
532 static_cast<View>(in.get(C::execution_sel_execute_mov)) * CView(constants_AVM_EXEC_OP_ID_MOV) +
533 static_cast<View>(in.get(C::execution_sel_execute_jump)) * CView(constants_AVM_EXEC_OP_ID_JUMP) +
534 static_cast<View>(in.get(C::execution_sel_execute_jumpi)) * CView(constants_AVM_EXEC_OP_ID_JUMPI) +
535 static_cast<View>(in.get(C::execution_sel_execute_call)) * CView(constants_AVM_EXEC_OP_ID_CALL) +
536 static_cast<View>(in.get(C::execution_sel_execute_static_call)) *
537 CView(constants_AVM_EXEC_OP_ID_STATICCALL) +
538 static_cast<View>(in.get(C::execution_sel_execute_internal_call)) *
539 CView(constants_AVM_EXEC_OP_ID_INTERNALCALL) +
540 static_cast<View>(in.get(C::execution_sel_execute_internal_return)) *
541 CView(constants_AVM_EXEC_OP_ID_INTERNALRETURN) +
542 static_cast<View>(in.get(C::execution_sel_execute_return)) * CView(constants_AVM_EXEC_OP_ID_RETURN) +
543 static_cast<View>(in.get(C::execution_sel_execute_revert)) * CView(constants_AVM_EXEC_OP_ID_REVERT) +
544 static_cast<View>(in.get(C::execution_sel_execute_success_copy)) *
545 CView(constants_AVM_EXEC_OP_ID_SUCCESSCOPY) +
546 static_cast<View>(in.get(C::execution_sel_execute_returndata_size)) *
547 CView(constants_AVM_EXEC_OP_ID_RETURNDATASIZE) +
548 static_cast<View>(in.get(C::execution_sel_execute_debug_log)) * CView(constants_AVM_EXEC_OP_ID_DEBUGLOG) +
549 static_cast<View>(in.get(C::execution_sel_execute_sload)) * CView(constants_AVM_EXEC_OP_ID_SLOAD) +
550 static_cast<View>(in.get(C::execution_sel_execute_sstore)) * CView(constants_AVM_EXEC_OP_ID_SSTORE) +
551 static_cast<View>(in.get(C::execution_sel_execute_notehash_exists)) *
552 CView(constants_AVM_EXEC_OP_ID_NOTEHASH_EXISTS) +
553 static_cast<View>(in.get(C::execution_sel_execute_emit_notehash)) *
554 CView(constants_AVM_EXEC_OP_ID_EMIT_NOTEHASH) +
555 static_cast<View>(in.get(C::execution_sel_execute_l1_to_l2_message_exists)) *
556 CView(constants_AVM_EXEC_OP_ID_L1_TO_L2_MESSAGE_EXISTS) +
557 static_cast<View>(in.get(C::execution_sel_execute_nullifier_exists)) *
558 CView(constants_AVM_EXEC_OP_ID_NULLIFIER_EXISTS) +
559 static_cast<View>(in.get(C::execution_sel_execute_emit_nullifier)) *
560 CView(constants_AVM_EXEC_OP_ID_EMIT_NULLIFIER) +
561 static_cast<View>(in.get(C::execution_sel_execute_send_l2_to_l1_msg)) *
562 CView(constants_AVM_EXEC_OP_ID_SENDL2TOL1MSG)) -
563 static_cast<View>(in.get(C::execution_sel_exec_dispatch_execution)) *
564 static_cast<View>(in.get(C::execution_subtrace_operation_id)));
565 std::get<67>(evals) += (tmp * scaling_factor);
566 }
567 { // PC_NEXT_ROW_INT_CALL_JUMP
568 using View = typename std::tuple_element_t<68, ContainerOverSubrelations>::View;
569 auto tmp = (static_cast<View>(in.get(C::execution_sel_execute_internal_call)) +
570 static_cast<View>(in.get(C::execution_sel_execute_jump))) *
571 (static_cast<View>(in.get(C::execution_pc_shift)) - static_cast<View>(in.get(C::execution_rop_0_)));
572 std::get<68>(evals) += (tmp * scaling_factor);
573 }
574 { // PC_NEXT_ROW_JUMPI
575 using View = typename std::tuple_element_t<69, ContainerOverSubrelations>::View;
576 auto tmp =
577 static_cast<View>(in.get(C::execution_sel_execute_jumpi)) *
578 ((static_cast<View>(in.get(C::execution_register_0_)) *
579 (static_cast<View>(in.get(C::execution_rop_1_)) - static_cast<View>(in.get(C::execution_next_pc))) +
580 static_cast<View>(in.get(C::execution_next_pc))) -
581 static_cast<View>(in.get(C::execution_pc_shift)));
582 std::get<69>(evals) += (tmp * scaling_factor);
583 }
584 { // MOV_SAME_VALUE
585 using View = typename std::tuple_element_t<70, ContainerOverSubrelations>::View;
586 auto tmp =
587 static_cast<View>(in.get(C::execution_sel_execute_mov)) *
588 (static_cast<View>(in.get(C::execution_register_0_)) - static_cast<View>(in.get(C::execution_register_1_)));
589 std::get<70>(evals) += (tmp * scaling_factor);
590 }
591 { // MOV_SAME_TAG
592 using View = typename std::tuple_element_t<71, ContainerOverSubrelations>::View;
593 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_mov)) *
594 (static_cast<View>(in.get(C::execution_mem_tag_reg_0_)) -
595 static_cast<View>(in.get(C::execution_mem_tag_reg_1_)));
596 std::get<71>(evals) += (tmp * scaling_factor);
597 }
598 { // SUCCESS_COPY_WRITE_REG
599 using View = typename std::tuple_element_t<72, ContainerOverSubrelations>::View;
600 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_success_copy)) *
601 (static_cast<View>(in.get(C::execution_register_0_)) -
602 static_cast<View>(in.get(C::execution_last_child_success)));
603 std::get<72>(evals) += (tmp * scaling_factor);
604 }
605 { // SUCCESS_COPY_U1_TAG
606 using View = typename std::tuple_element_t<73, ContainerOverSubrelations>::View;
607 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_success_copy)) *
608 (static_cast<View>(in.get(C::execution_mem_tag_reg_0_)) - CView(constants_MEM_TAG_U1));
609 std::get<73>(evals) += (tmp * scaling_factor);
610 }
611 { // RETURNDATA_SIZE_WRITE_REG
612 using View = typename std::tuple_element_t<74, ContainerOverSubrelations>::View;
613 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_returndata_size)) *
614 (static_cast<View>(in.get(C::execution_register_0_)) -
615 static_cast<View>(in.get(C::execution_last_child_returndata_size)));
616 std::get<74>(evals) += (tmp * scaling_factor);
617 }
618 { // RETURNDATA_SIZE_U32_TAG
619 using View = typename std::tuple_element_t<75, ContainerOverSubrelations>::View;
620 auto tmp = static_cast<View>(in.get(C::execution_sel_execute_returndata_size)) *
621 (static_cast<View>(in.get(C::execution_mem_tag_reg_0_)) - CView(constants_MEM_TAG_U32));
622 std::get<75>(evals) += (tmp * scaling_factor);
623 }
624 { // PUBLIC_DATA_TREE_ROOT_NOT_CHANGED
625 using View = typename std::tuple_element_t<76, ContainerOverSubrelations>::View;
626 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_sstore))) *
627 (static_cast<View>(in.get(C::execution_prev_public_data_tree_root)) -
628 static_cast<View>(in.get(C::execution_public_data_tree_root)));
629 std::get<76>(evals) += (tmp * scaling_factor);
630 }
631 { // PUBLIC_DATA_TREE_SIZE_NOT_CHANGED
632 using View = typename std::tuple_element_t<77, ContainerOverSubrelations>::View;
633 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_sstore))) *
634 (static_cast<View>(in.get(C::execution_prev_public_data_tree_size)) -
635 static_cast<View>(in.get(C::execution_public_data_tree_size)));
636 std::get<77>(evals) += (tmp * scaling_factor);
637 }
638 { // WRITTEN_PUBLIC_DATA_SLOTS_TREE_ROOT_NOT_CHANGED
639 using View = typename std::tuple_element_t<78, ContainerOverSubrelations>::View;
640 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_sstore))) *
641 (static_cast<View>(in.get(C::execution_prev_written_public_data_slots_tree_root)) -
642 static_cast<View>(in.get(C::execution_written_public_data_slots_tree_root)));
643 std::get<78>(evals) += (tmp * scaling_factor);
644 }
645 { // WRITTEN_PUBLIC_DATA_SLOTS_TREE_SIZE_NOT_CHANGED
646 using View = typename std::tuple_element_t<79, ContainerOverSubrelations>::View;
647 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_sstore))) *
648 (static_cast<View>(in.get(C::execution_prev_written_public_data_slots_tree_size)) -
649 static_cast<View>(in.get(C::execution_written_public_data_slots_tree_size)));
650 std::get<79>(evals) += (tmp * scaling_factor);
651 }
652 { // NOTE_HASH_TREE_ROOT_NOT_CHANGED
653 using View = typename std::tuple_element_t<80, ContainerOverSubrelations>::View;
654 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_notehash))) *
655 (static_cast<View>(in.get(C::execution_prev_note_hash_tree_root)) -
656 static_cast<View>(in.get(C::execution_note_hash_tree_root)));
657 std::get<80>(evals) += (tmp * scaling_factor);
658 }
659 { // NOTE_HASH_TREE_SIZE_NOT_CHANGED
660 using View = typename std::tuple_element_t<81, ContainerOverSubrelations>::View;
661 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_notehash))) *
662 (static_cast<View>(in.get(C::execution_prev_note_hash_tree_size)) -
663 static_cast<View>(in.get(C::execution_note_hash_tree_size)));
664 std::get<81>(evals) += (tmp * scaling_factor);
665 }
666 { // NUM_NOTE_HASHES_EMITTED_NOT_CHANGED
667 using View = typename std::tuple_element_t<82, ContainerOverSubrelations>::View;
668 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_notehash))) *
669 (static_cast<View>(in.get(C::execution_prev_num_note_hashes_emitted)) -
670 static_cast<View>(in.get(C::execution_num_note_hashes_emitted)));
671 std::get<82>(evals) += (tmp * scaling_factor);
672 }
673 { // NULLIFIER_TREE_ROOT_NOT_CHANGED
674 using View = typename std::tuple_element_t<83, ContainerOverSubrelations>::View;
675 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_nullifier))) *
676 (static_cast<View>(in.get(C::execution_prev_nullifier_tree_root)) -
677 static_cast<View>(in.get(C::execution_nullifier_tree_root)));
678 std::get<83>(evals) += (tmp * scaling_factor);
679 }
680 { // NULLIFIER_TREE_SIZE_NOT_CHANGED
681 using View = typename std::tuple_element_t<84, ContainerOverSubrelations>::View;
682 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_nullifier))) *
683 (static_cast<View>(in.get(C::execution_prev_nullifier_tree_size)) -
684 static_cast<View>(in.get(C::execution_nullifier_tree_size)));
685 std::get<84>(evals) += (tmp * scaling_factor);
686 }
687 { // NUM_NULLIFIERS_EMITTED_NOT_CHANGED
688 using View = typename std::tuple_element_t<85, ContainerOverSubrelations>::View;
689 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_emit_nullifier))) *
690 (static_cast<View>(in.get(C::execution_prev_num_nullifiers_emitted)) -
691 static_cast<View>(in.get(C::execution_num_nullifiers_emitted)));
692 std::get<85>(evals) += (tmp * scaling_factor);
693 }
694 { // NUM_PUBLIC_LOGS_NOT_CHANGED
695 using View = typename std::tuple_element_t<86, ContainerOverSubrelations>::View;
696 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_exec_dispatch_emit_public_log))) *
697 (static_cast<View>(in.get(C::execution_prev_num_public_log_fields)) -
698 static_cast<View>(in.get(C::execution_num_public_log_fields)));
699 std::get<86>(evals) += (tmp * scaling_factor);
700 }
701 { // NUM_L2_TO_L1_MESSAGES_NOT_CHANGED
702 using View = typename std::tuple_element_t<87, ContainerOverSubrelations>::View;
703 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_send_l2_to_l1_msg))) *
704 (static_cast<View>(in.get(C::execution_prev_num_l2_to_l1_messages)) -
705 static_cast<View>(in.get(C::execution_num_l2_to_l1_messages)));
706 std::get<87>(evals) += (tmp * scaling_factor);
707 }
708 { // RETRIEVED_BYTECODES_TREE_ROOT_NOT_CHANGED
709 using View = typename std::tuple_element_t<88, ContainerOverSubrelations>::View;
710 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_first_row_in_context))) *
711 (static_cast<View>(in.get(C::execution_prev_retrieved_bytecodes_tree_root)) -
712 static_cast<View>(in.get(C::execution_retrieved_bytecodes_tree_root)));
713 std::get<88>(evals) += (tmp * scaling_factor);
714 }
715 { // RETRIEVED_BYTECODES_TREE_SIZE_NOT_CHANGED
716 using View = typename std::tuple_element_t<89, ContainerOverSubrelations>::View;
717 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_first_row_in_context))) *
718 (static_cast<View>(in.get(C::execution_prev_retrieved_bytecodes_tree_size)) -
719 static_cast<View>(in.get(C::execution_retrieved_bytecodes_tree_size)));
720 std::get<89>(evals) += (tmp * scaling_factor);
721 }
722 {
723 using View = typename std::tuple_element_t<90, ContainerOverSubrelations>::View;
724 auto tmp = static_cast<View>(in.get(C::execution_sel_opcode_error)) *
725 (FF(1) - static_cast<View>(in.get(C::execution_sel_opcode_error)));
726 std::get<90>(evals) += (tmp * scaling_factor);
727 }
728 { // INFALLIBLE_OPCODES_SUCCESS
729 using View = typename std::tuple_element_t<91, ContainerOverSubrelations>::View;
730 auto tmp = (static_cast<View>(in.get(C::execution_sel_execute_mov)) +
731 static_cast<View>(in.get(C::execution_sel_execute_returndata_size)) +
732 static_cast<View>(in.get(C::execution_sel_execute_jump)) +
733 static_cast<View>(in.get(C::execution_sel_execute_jumpi)) +
734 static_cast<View>(in.get(C::execution_sel_execute_debug_log)) +
735 static_cast<View>(in.get(C::execution_sel_execute_success_copy)) +
736 static_cast<View>(in.get(C::execution_sel_execute_call)) +
737 static_cast<View>(in.get(C::execution_sel_execute_static_call)) +
738 static_cast<View>(in.get(C::execution_sel_execute_internal_call)) +
739 static_cast<View>(in.get(C::execution_sel_execute_return)) +
740 static_cast<View>(in.get(C::execution_sel_execute_revert)) +
741 static_cast<View>(in.get(C::execution_sel_execute_sload)) +
742 static_cast<View>(in.get(C::execution_sel_execute_notehash_exists)) +
743 static_cast<View>(in.get(C::execution_sel_execute_l1_to_l2_message_exists)) +
744 static_cast<View>(in.get(C::execution_sel_execute_nullifier_exists))) *
745 static_cast<View>(in.get(C::execution_sel_opcode_error));
746 std::get<91>(evals) += (tmp * scaling_factor);
747 }
748 { // NO_OPCODE_ERROR_IF_NOT_EXECUTING
749 using View = typename std::tuple_element_t<92, ContainerOverSubrelations>::View;
750 auto tmp = (FF(1) - static_cast<View>(in.get(C::execution_sel_execute_opcode))) *
751 static_cast<View>(in.get(C::execution_sel_opcode_error));
752 std::get<92>(evals) += (tmp * scaling_factor);
753 }
754 {
755 using View = typename std::tuple_element_t<93, ContainerOverSubrelations>::View;
756 auto tmp = (static_cast<View>(in.get(C::execution_sel_write_registers)) -
757 (static_cast<View>(in.get(C::execution_sel_execute_opcode)) -
758 static_cast<View>(in.get(C::execution_sel_opcode_error))));
759 std::get<93>(evals) += (tmp * scaling_factor);
760 }
761 {
762 using View = typename std::tuple_element_t<94, ContainerOverSubrelations>::View;
763 auto tmp = (static_cast<View>(in.get(C::execution_sel_error)) -
764 (static_cast<View>(in.get(C::execution_sel_bytecode_retrieval_failure)) +
765 static_cast<View>(in.get(C::execution_sel_instruction_fetching_failure)) +
766 static_cast<View>(in.get(C::execution_sel_addressing_error)) +
767 static_cast<View>(in.get(C::execution_sel_register_read_error)) +
768 static_cast<View>(in.get(C::execution_sel_out_of_gas)) +
769 static_cast<View>(in.get(C::execution_sel_opcode_error))));
770 std::get<94>(evals) += (tmp * scaling_factor);
771 }
772}
773
774} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
AvmFlavorSettings::FF FF
Definition field.hpp:10
ColumnAndShifts
Definition columns.hpp:35
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.