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