Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
emit_unencrypted_log.test.cpp
Go to the documentation of this file.
1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
3
4#include <cstdint>
5
23
24namespace bb::avm2::constraining {
25namespace {
26
28using simulation::EmitUnencryptedLogWriteEvent;
29using simulation::TrackedSideEffects;
30using testing::PublicInputsBuilder;
31using tracegen::EmitUnencryptedLogTraceBuilder;
32using tracegen::PublicInputsTraceBuilder;
33using tracegen::TestTraceContainer;
35using C = Column;
36using emit_unencrypted_log = bb::avm2::emit_unencrypted_log<FF>;
37
38std::vector<MemoryValue> to_memory_values(const std::vector<FF>& fields)
39{
40 std::vector<MemoryValue> memory_values;
41 memory_values.reserve(fields.size());
42 for (const FF& field : fields) {
43 memory_values.push_back(MemoryValue::from<FF>(field));
44 }
45 return memory_values;
46}
47
48TEST(EmitUnencryptedLogConstrainingTest, EmptyTrace)
49{
50 check_relation<emit_unencrypted_log>(testing::empty_trace());
51}
52
53TEST(EmitUnencryptedLogConstrainingTest, Positive)
54{
55 AztecAddress address = 0xdeadbeef;
56 MemoryAddress log_address = 27;
57 const std::vector<FF> log_fields = { 4, 5 };
58 uint32_t log_size = static_cast<uint32_t>(log_fields.size());
59 TrackedSideEffects side_effect_states = { .public_logs = {} };
60 TrackedSideEffects side_effect_states_after = { .public_logs = PublicLogs{ { { log_fields, address } } } };
61
62 EmitUnencryptedLogWriteEvent event = {
63 .execution_clk = 1,
64 .contract_address = address,
65 .space_id = 57,
66 .log_address = log_address,
67 .log_size = log_size,
68 .prev_num_unencrypted_log_fields = side_effect_states.get_num_unencrypted_log_fields(),
69 .next_num_unencrypted_log_fields = side_effect_states_after.get_num_unencrypted_log_fields(),
70 .is_static = false,
71 .values = to_memory_values(log_fields),
72 .error_memory_out_of_bounds = false,
73 .error_too_many_log_fields = false,
74 .error_tag_mismatch = false,
75 };
76
77 TestTraceContainer trace({
78 { { C::precomputed_first_row, 1 } },
79 });
80
81 EmitUnencryptedLogTraceBuilder trace_builder;
82 trace_builder.process({ event }, trace);
83
84 check_relation<emit_unencrypted_log>(trace);
85}
86
87TEST(EmitUnencryptedLogConstrainingTest, ErrorMemoryOutOfBounds)
88{
89 AztecAddress address = 0xdeadbeef;
91 uint32_t log_size = 2;
92 TrackedSideEffects side_effect_states = { .public_logs = PublicLogs{ { { { 4 }, address } } } };
93 const TrackedSideEffects& side_effect_states_after = side_effect_states;
94
95 EmitUnencryptedLogWriteEvent event = {
96 .execution_clk = 1,
97 .contract_address = address,
98 .space_id = 57,
99 .log_address = log_address,
100 .log_size = log_size,
101 .prev_num_unencrypted_log_fields = side_effect_states.get_num_unencrypted_log_fields(),
102 .next_num_unencrypted_log_fields = side_effect_states_after.get_num_unencrypted_log_fields(),
103 .is_static = false,
104 .values = {},
105 .error_memory_out_of_bounds = true,
106 .error_too_many_log_fields = false,
107 .error_tag_mismatch = false,
108 };
109
110 TestTraceContainer trace({
111 { { C::precomputed_first_row, 1 } },
112 });
113
114 EmitUnencryptedLogTraceBuilder trace_builder;
115 trace_builder.process({ event }, trace);
116
117 check_relation<emit_unencrypted_log>(trace);
118}
119
120TEST(EmitUnencryptedLogConstrainingTest, ErrorTooManyLogFields)
121{
122 AztecAddress address = 0xdeadbeef;
123 MemoryAddress log_address = 27;
124 const std::vector<FF> log_fields = { 4, 5 };
125 uint32_t log_size = static_cast<uint32_t>(log_fields.size());
126 // Minus three so header = 2 + log_size = 2 doesn't fit
127 TrackedSideEffects side_effect_states = {
128 .public_logs = PublicLogs{ { { testing::random_fields(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH - 3), address } } }
129 };
130 const TrackedSideEffects& side_effect_states_after = side_effect_states;
131
132 EmitUnencryptedLogWriteEvent event = {
133 .execution_clk = 1,
134 .contract_address = address,
135 .space_id = 57,
136 .log_address = log_address,
137 .log_size = log_size,
138 .prev_num_unencrypted_log_fields = side_effect_states.get_num_unencrypted_log_fields(),
139 .next_num_unencrypted_log_fields = side_effect_states_after.get_num_unencrypted_log_fields(),
140 .is_static = false,
141 .values = to_memory_values(log_fields),
142 .error_memory_out_of_bounds = false,
143 .error_too_many_log_fields = true,
144 .error_tag_mismatch = false,
145 };
146
147 TestTraceContainer trace({
148 { { C::precomputed_first_row, 1 } },
149 });
150
151 EmitUnencryptedLogTraceBuilder trace_builder;
152 trace_builder.process({ event }, trace);
153
154 check_relation<emit_unencrypted_log>(trace);
155}
156
157TEST(EmitUnencryptedLogConstrainingTest, ErrorTagMismatch)
158{
159 AztecAddress address = 0xdeadbeef;
160 MemoryAddress log_address = 27;
161 std::vector<MemoryValue> log_values = { MemoryValue::from<uint32_t>(4), MemoryValue::from<uint32_t>(5) };
162 uint32_t log_size = static_cast<uint32_t>(log_values.size());
163 TrackedSideEffects side_effect_states = { .public_logs = {} };
164 // No change to side effect states due to failure.
165 const TrackedSideEffects& side_effect_states_after = side_effect_states;
166
167 EmitUnencryptedLogWriteEvent event = {
168 .execution_clk = 1,
169 .contract_address = address,
170 .space_id = 57,
171 .log_address = log_address,
172 .log_size = log_size,
173 .prev_num_unencrypted_log_fields = side_effect_states.get_num_unencrypted_log_fields(),
174 .next_num_unencrypted_log_fields = side_effect_states_after.get_num_unencrypted_log_fields(),
175 .is_static = false,
176 .values = log_values,
177 .error_memory_out_of_bounds = false,
178 .error_too_many_log_fields = false,
179 .error_tag_mismatch = true,
180 };
181
182 TestTraceContainer trace({
183 { { C::precomputed_first_row, 1 } },
184 });
185
186 EmitUnencryptedLogTraceBuilder trace_builder;
187 trace_builder.process({ event }, trace);
188
189 check_relation<emit_unencrypted_log>(trace);
190}
191
192TEST(EmitUnencryptedLogConstrainingTest, ErrorStatic)
193{
194 AztecAddress address = 0xdeadbeef;
195 MemoryAddress log_address = 27;
196 const std::vector<FF> log_fields = { 4, 5 };
197 uint32_t log_size = static_cast<uint32_t>(log_fields.size());
198 TrackedSideEffects side_effect_states = { .public_logs = PublicLogs{ { { { 4 }, address } } } };
199 const TrackedSideEffects& side_effect_states_after = side_effect_states;
200
201 EmitUnencryptedLogWriteEvent event = {
202 .execution_clk = 1,
203 .contract_address = address,
204 .space_id = 57,
205 .log_address = log_address,
206 .log_size = log_size,
207 .prev_num_unencrypted_log_fields = side_effect_states.get_num_unencrypted_log_fields(),
208 .next_num_unencrypted_log_fields = side_effect_states_after.get_num_unencrypted_log_fields(),
209 .is_static = true,
210 .values = to_memory_values(log_fields),
211 .error_memory_out_of_bounds = false,
212 .error_too_many_log_fields = false,
213 .error_tag_mismatch = false,
214 };
215
216 TestTraceContainer trace({
217 { { C::precomputed_first_row, 1 } },
218 });
219
220 EmitUnencryptedLogTraceBuilder trace_builder;
221 trace_builder.process({ event }, trace);
222}
223
224TEST(EmitUnencryptedLogConstrainingTest, Interactions)
225{
226 AztecAddress address = 0xdeadbeef;
227 MemoryAddress log_address = 27;
228 const std::vector<FF> log_fields = { 4, 5 };
229 uint32_t log_size = static_cast<uint32_t>(log_fields.size());
230 TrackedSideEffects side_effect_states = { .public_logs = {} };
231 TrackedSideEffects side_effect_states_after = { .public_logs = PublicLogs{ { { log_fields, address } } } };
232 AvmAccumulatedData accumulated_data = {};
233 accumulated_data.public_logs.add_log({
234 .fields = { FF(4), FF(5) },
235 .contract_address = address,
236 });
237 auto public_inputs = PublicInputsBuilder().set_accumulated_data(accumulated_data).build();
238
239 std::vector<MemoryValue> inputs = to_memory_values(log_fields);
240
241 EmitUnencryptedLogWriteEvent event = {
242 .execution_clk = 1,
243 .contract_address = address,
244 .space_id = 57,
245 .log_address = log_address,
246 .log_size = log_size,
247 .prev_num_unencrypted_log_fields = side_effect_states.get_num_unencrypted_log_fields(),
248 .next_num_unencrypted_log_fields = side_effect_states_after.get_num_unencrypted_log_fields(),
249 .is_static = false,
250 .values = inputs,
251 .error_memory_out_of_bounds = false,
252 .error_too_many_log_fields = false,
253 .error_tag_mismatch = false,
254 };
255
256 TestTraceContainer trace = TestTraceContainer({
257 // Row 0
258 {
259 { C::precomputed_first_row, 1 },
260 // GT - check log size
261 { C::gt_sel, 1 },
262 { C::gt_input_a, side_effect_states_after.get_num_unencrypted_log_fields() },
263 { C::gt_input_b, FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH },
264 { C::gt_res, 0 },
265 },
266 {
267 // Execution
268 { C::execution_sel, 1 },
269 { C::execution_sel_exec_dispatch_emit_unencrypted_log, 1 },
270 { C::execution_context_id, 57 },
271 { C::execution_rop_1_, log_address },
272 { C::execution_register_0_, log_size },
273 { C::execution_contract_address, address },
274 { C::execution_prev_num_unencrypted_log_fields, side_effect_states.get_num_unencrypted_log_fields() },
275 { C::execution_num_unencrypted_log_fields, side_effect_states_after.get_num_unencrypted_log_fields() },
276 { C::execution_is_static, false },
277 { C::execution_sel_opcode_error, 0 },
278 { C::execution_discard, 0 },
279 // GT - check memory out of bounds
280 { C::gt_sel, 1 },
281 { C::gt_input_a, log_address + log_size - 1 },
282 { C::gt_input_b, AVM_HIGHEST_MEM_ADDRESS },
283 { C::gt_res, 0 },
284 },
285 });
286
287 // Set up memory trace
288 for (uint32_t i = 0; i < inputs.size(); ++i) {
289 // Set memory reads
290 trace.set(C::memory_address, i + 1, log_address + i);
291 trace.set(C::memory_value, i + 1, inputs[i].as_ff());
292 trace.set(C::memory_tag, i + 1, static_cast<uint32_t>(inputs[i].get_tag()));
293 trace.set(C::memory_sel, i + 1, 1);
294 trace.set(C::memory_clk, i + 1, 1);
295 trace.set(C::memory_rw, i + 1, 0);
296 trace.set(C::memory_space_id, i + 1, 57);
297 }
298
299 PublicInputsTraceBuilder public_inputs_builder;
300 public_inputs_builder.process_public_inputs(trace, public_inputs);
301 public_inputs_builder.process_public_inputs_aux_precomputed(trace);
302
303 tracegen::PrecomputedTraceBuilder precomputed_builder;
305
306 EmitUnencryptedLogTraceBuilder trace_builder;
307 trace_builder.process({ event }, trace);
308
309 check_relation<emit_unencrypted_log>(trace);
310 check_all_interactions<EmitUnencryptedLogTraceBuilder>(trace);
311}
312
313TEST(EmitUnencryptedLogConstrainingTest, NegativeStartAfterLatch)
314{
315 TestTraceContainer trace = TestTraceContainer({ {
316 { C::precomputed_first_row, 1 },
317 },
318 {
319 { C::emit_unencrypted_log_sel, 1 },
320 { C::emit_unencrypted_log_start, 1 },
321 { C::emit_unencrypted_log_end, 1 },
322 },
323 {
324 { C::emit_unencrypted_log_sel, 1 },
325 { C::emit_unencrypted_log_start, 1 },
326 } });
327
328 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_START_AFTER_LATCH);
329
330 trace.set(C::emit_unencrypted_log_end, 1, 0);
331
332 EXPECT_THROW_WITH_MESSAGE(check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_START_AFTER_LATCH),
333 "START_AFTER_LATCH");
334
335 trace.set(C::emit_unencrypted_log_end, 1, 1);
336 trace.set(C::precomputed_first_row, 0, 0);
337
338 EXPECT_THROW_WITH_MESSAGE(check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_START_AFTER_LATCH),
339 "START_AFTER_LATCH");
340}
341
342TEST(EmitUnencryptedLogConstrainingTest, NegativeSelectorOnStart)
343{
344 TestTraceContainer trace = TestTraceContainer({ {
345 { C::emit_unencrypted_log_sel, 1 },
346 { C::emit_unencrypted_log_start, 1 },
347 } });
348
349 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SELECTOR_ON_START);
350
351 trace.set(C::emit_unencrypted_log_sel, 0, 0);
352
353 EXPECT_THROW_WITH_MESSAGE(check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SELECTOR_ON_START),
354 "SELECTOR_ON_START");
355}
356
357TEST(EmitUnencryptedLogConstrainingTest, NegativeSelectorConsistency)
358{
359 TestTraceContainer trace = TestTraceContainer({ {
360 { C::precomputed_first_row, 1 },
361 },
362 {
363 { C::emit_unencrypted_log_sel, 1 },
364 { C::emit_unencrypted_log_start, 1 },
365 { C::emit_unencrypted_log_end, 1 },
366 },
367 {
368 { C::emit_unencrypted_log_sel, 0 },
369 } });
370
371 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SELECTOR_CONSISTENCY);
372
373 trace.set(C::emit_unencrypted_log_end, 1, 0);
374
376 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SELECTOR_CONSISTENCY),
377 "SELECTOR_CONSISTENCY");
378}
379
380TEST(EmitUnencryptedLogConstrainingTest, NegativeSelectorOnEnd)
381{
382 TestTraceContainer trace = TestTraceContainer({ {
383 { C::emit_unencrypted_log_sel, 1 },
384 { C::emit_unencrypted_log_end, 1 },
385 } });
386
387 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SELECTOR_ON_END);
388
389 trace.set(C::emit_unencrypted_log_sel, 0, 0);
390
391 EXPECT_THROW_WITH_MESSAGE(check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SELECTOR_ON_END),
392 "SELECTOR_ON_END");
393}
394
395TEST(EmitUnencryptedLogConstrainingTest, NegativeRemainingRowsDecrement)
396{
397 TestTraceContainer trace = TestTraceContainer({ {
398 { C::emit_unencrypted_log_sel, 1 },
399 { C::emit_unencrypted_log_remaining_rows, 1 },
400 },
401 {
402 { C::emit_unencrypted_log_sel, 1 },
403 { C::emit_unencrypted_log_remaining_rows, 0 },
404 { C::emit_unencrypted_log_end, 1 },
405 } });
406
407 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_REMAINING_ROWS_DECREMENT);
408
409 trace.set(C::emit_unencrypted_log_remaining_rows, 1, 1);
410
412 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_REMAINING_ROWS_DECREMENT),
413 "REMAINING_ROWS_DECREMENT");
414}
415
416TEST(EmitUnencryptedLogConstrainingTest, NegativeErrorOutOfBoundsConsistency)
417{
418 TestTraceContainer trace = TestTraceContainer({ {
419 { C::emit_unencrypted_log_sel, 1 },
420 { C::emit_unencrypted_log_error_out_of_bounds, 1 },
421 },
422 {
423 { C::emit_unencrypted_log_sel, 1 },
424 { C::emit_unencrypted_log_error_out_of_bounds, 1 },
425 { C::emit_unencrypted_log_end, 1 },
426 } });
427
428 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_ERROR_OUT_OF_BOUNDS_CONSISTENCY);
429
430 trace.set(C::emit_unencrypted_log_error_out_of_bounds, 1, 0);
431
433 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_ERROR_OUT_OF_BOUNDS_CONSISTENCY),
434 "ERROR_OUT_OF_BOUNDS_CONSISTENCY");
435}
436
437TEST(EmitUnencryptedLogConstrainingTest, NegativeErrorTagMismatchConsistency)
438{
439 TestTraceContainer trace = TestTraceContainer({ {
440 { C::emit_unencrypted_log_sel, 1 },
441 { C::emit_unencrypted_log_error_tag_mismatch, 1 },
442 },
443 {
444 { C::emit_unencrypted_log_sel, 1 },
445 { C::emit_unencrypted_log_error_tag_mismatch, 1 },
446 { C::emit_unencrypted_log_end, 1 },
447 } });
448
449 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_ERROR_TAG_MISMATCH_CONSISTENCY);
450
451 trace.set(C::emit_unencrypted_log_error_tag_mismatch, 1, 0);
452
454 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_ERROR_TAG_MISMATCH_CONSISTENCY),
455 "ERROR_TAG_MISMATCH_CONSISTENCY");
456}
457
458TEST(EmitUnencryptedLogConstrainingTest, NegativeWrongTagCheck)
459{
460 TestTraceContainer trace = TestTraceContainer({ {
461 { C::emit_unencrypted_log_sel, 1 },
462 { C::emit_unencrypted_log_seen_wrong_tag, 0 },
463 },
464 {
465 { C::emit_unencrypted_log_sel, 1 },
466 { C::emit_unencrypted_log_seen_wrong_tag, 1 },
467 { C::emit_unencrypted_log_correct_tag, 0 },
468 { C::emit_unencrypted_log_end, 1 },
469 } });
470
471 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_WRONG_TAG_CHECK);
472
473 trace.set(C::emit_unencrypted_log_seen_wrong_tag, 1, 0);
474
475 EXPECT_THROW_WITH_MESSAGE(check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_WRONG_TAG_CHECK),
476 "WRONG_TAG_CHECK");
477}
478
479TEST(EmitUnencryptedLogConstrainingTest, NegativeSelectorShouldWriteToPublicInputsConsistency)
480{
481 TestTraceContainer trace =
482 TestTraceContainer({ {
483 { C::emit_unencrypted_log_sel, 1 },
484 { C::emit_unencrypted_log_sel_should_write_to_public_inputs, 1 },
485 },
486 {
487 { C::emit_unencrypted_log_sel, 1 },
488 { C::emit_unencrypted_log_sel_should_write_to_public_inputs, 1 },
489 { C::emit_unencrypted_log_end, 1 },
490 } });
491
492 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SEL_SHOULD_WRITE_TO_PUBLIC_INPUTS_CONSISTENCY);
493
494 trace.set(C::emit_unencrypted_log_sel_should_write_to_public_inputs, 1, 0);
495
496 EXPECT_THROW_WITH_MESSAGE(check_relation<emit_unencrypted_log>(
498 "SEL_SHOULD_WRITE_TO_PUBLIC_INPUTS_CONSISTENCY");
499}
500
501TEST(EmitUnencryptedLogConstrainingTest, NegativeLogOffsetIncrement)
502{
503 TestTraceContainer trace = TestTraceContainer({ {
504 { C::emit_unencrypted_log_sel, 1 },
505 { C::emit_unencrypted_log_is_write_memory_value, 1 },
506 { C::emit_unencrypted_log_log_address, 10 },
507 },
508 {
509 { C::emit_unencrypted_log_sel, 1 },
510 { C::emit_unencrypted_log_is_write_memory_value, 1 },
511 { C::emit_unencrypted_log_log_address, 11 },
512 { C::emit_unencrypted_log_end, 1 },
513 } });
514
515 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_LOG_ADDRESS_INCREMENT);
516
517 trace.set(C::emit_unencrypted_log_log_address, 1, 9);
518
520 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_LOG_ADDRESS_INCREMENT),
521 "LOG_ADDRESS_INCREMENT");
522}
523
524TEST(EmitUnencryptedLogConstrainingTest, NegativeExecutionClkConsistency)
525{
526 TestTraceContainer trace = TestTraceContainer({ {
527 { C::emit_unencrypted_log_sel, 1 },
528 { C::emit_unencrypted_log_execution_clk, 1 },
529 },
530 {
531 { C::emit_unencrypted_log_sel, 1 },
532 { C::emit_unencrypted_log_execution_clk, 1 },
533 { C::emit_unencrypted_log_end, 1 },
534 } });
535
536 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_EXEC_CLK_CONSISTENCY);
537
538 trace.set(C::emit_unencrypted_log_execution_clk, 1, 0);
539
541 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_EXEC_CLK_CONSISTENCY),
542 "EXEC_CLK_CONSISTENCY");
543}
544
545TEST(EmitUnencryptedLogConstrainingTest, NegativeSpaceIdConsistency)
546{
547 TestTraceContainer trace = TestTraceContainer({ {
548 { C::emit_unencrypted_log_sel, 1 },
549 { C::emit_unencrypted_log_space_id, 17 },
550 },
551 {
552 { C::emit_unencrypted_log_sel, 1 },
553 { C::emit_unencrypted_log_space_id, 17 },
554 { C::emit_unencrypted_log_end, 1 },
555 } });
556
557 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SPACE_ID_CONSISTENCY);
558
559 trace.set(C::emit_unencrypted_log_space_id, 1, 18);
560
562 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_SPACE_ID_CONSISTENCY),
563 "SPACE_ID_CONSISTENCY");
564}
565
566TEST(EmitUnencryptedLogConstrainingTest, NegativeContractAddressConsistency)
567{
568 TestTraceContainer trace = TestTraceContainer({ {
569 { C::emit_unencrypted_log_sel, 1 },
570 { C::emit_unencrypted_log_contract_address, 42 },
571 },
572 {
573 { C::emit_unencrypted_log_sel, 1 },
574 { C::emit_unencrypted_log_contract_address, 42 },
575 { C::emit_unencrypted_log_end, 1 },
576 } });
577
578 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_CONTRACT_ADDRESS_CONSISTENCY);
579
580 trace.set(C::emit_unencrypted_log_contract_address, 1, 43);
581
583 check_relation<emit_unencrypted_log>(trace, emit_unencrypted_log::SR_CONTRACT_ADDRESS_CONSISTENCY),
584 "CONTRACT_ADDRESS_CONSISTENCY");
585}
586
587} // namespace
588
589} // namespace bb::avm2::constraining
#define FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH
#define AVM_HIGHEST_MEM_ADDRESS
static constexpr size_t SR_SPACE_ID_CONSISTENCY
static constexpr size_t SR_SELECTOR_ON_END
static constexpr size_t SR_START_AFTER_LATCH
static constexpr size_t SR_LOG_ADDRESS_INCREMENT
static constexpr size_t SR_SEL_SHOULD_WRITE_TO_PUBLIC_INPUTS_CONSISTENCY
static constexpr size_t SR_ERROR_TAG_MISMATCH_CONSISTENCY
static constexpr size_t SR_SELECTOR_ON_START
static constexpr size_t SR_WRONG_TAG_CHECK
static constexpr size_t SR_REMAINING_ROWS_DECREMENT
static constexpr size_t SR_ERROR_OUT_OF_BOUNDS_CONSISTENCY
static constexpr size_t SR_EXEC_CLK_CONSISTENCY
static constexpr size_t SR_SELECTOR_CONSISTENCY
static constexpr size_t SR_CONTRACT_ADDRESS_CONSISTENCY
void process_misc(TraceContainer &trace, const uint32_t num_rows=MAX_AVM_TRACE_SIZE)
void set(Column col, uint32_t row, const FF &value)
PrecomputedTraceBuilder precomputed_builder
Definition alu.test.cpp:120
TestTraceContainer trace
AvmProvingInputs inputs
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
Definition macros.hpp:7
TEST(TxExecutionConstrainingTest, WriteTreeValue)
Definition tx.test.cpp:441
std::variant< EmitUnencryptedLogWriteEvent, CheckPointEventType > EmitUnencryptedLogEvent
TestTraceContainer empty_trace()
Definition fixtures.cpp:153
std::vector< FF > random_fields(size_t n)
Definition fixtures.cpp:23
uint32_t MemoryAddress
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
tracegen::PublicInputsTraceBuilder public_inputs_builder
Definition tx.test.cpp:81