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