1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
28using simulation::ContractInstanceRetrievalEvent;
29using simulation::EventEmitter;
30using testing::PublicInputsBuilder;
31using tracegen::ContractInstanceRetrievalTraceBuilder;
32using tracegen::PrecomputedTraceBuilder;
33using tracegen::PublicInputsTraceBuilder;
34using tracegen::TestTraceContainer;
40ContractInstance create_test_contract_instance(uint32_t salt_value = 123)
42 return ContractInstance{
43 .salt =
FF(salt_value),
44 .deployer_addr =
FF(0x123456789ULL),
45 .current_class_id =
FF(0xdeadbeefULL),
46 .original_class_id =
FF(0xcafebabeULL),
47 .initialisation_hash =
FF(0x11111111ULL),
50 .nullifier_key = {
FF(0x100),
FF(0x101) },
51 .incoming_viewing_key = {
FF(0x200),
FF(0x201) },
52 .outgoing_viewing_key = {
FF(0x300),
FF(0x301) },
53 .tagging_key = {
FF(0x400),
FF(0x401) },
58TEST(ContractInstanceRetrievalConstrainingTest, EmptyRow)
63TEST(ContractInstanceRetrievalConstrainingTest, CompleteValidTrace)
67 const auto nullifier_tree_root =
FF(0xaabbccdd);
68 const auto public_data_tree_root =
FF(0xeeff1122);
70 const auto salt =
FF(0x555);
71 const auto deployer_addr =
FF(0x123456789ULL);
74 const auto init_hash =
FF(0x11111111ULL);
75 const auto nullifier_key_x =
FF(0x100);
76 const auto nullifier_key_y =
FF(0x101);
77 const auto incoming_viewing_key_x =
FF(0x200);
78 const auto incoming_viewing_key_y =
FF(0x201);
79 const auto outgoing_viewing_key_x =
FF(0x300);
80 const auto outgoing_viewing_key_y =
FF(0x301);
81 const auto tagging_key_x =
FF(0x400);
82 const auto tagging_key_y =
FF(0x401);
85 TestTraceContainer
trace({
86 { { C::precomputed_first_row, 1 } },
87 { { C::contract_instance_retrieval_sel, 1 },
89 { C::contract_instance_retrieval_exists,
exists ? 1 : 0 },
90 { C::contract_instance_retrieval_salt, salt },
91 { C::contract_instance_retrieval_deployer_addr, deployer_addr },
94 { C::contract_instance_retrieval_init_hash, init_hash },
95 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
96 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
97 { C::contract_instance_retrieval_nullifier_key_x, nullifier_key_x },
98 { C::contract_instance_retrieval_nullifier_key_y, nullifier_key_y },
99 { C::contract_instance_retrieval_incoming_viewing_key_x, incoming_viewing_key_x },
100 { C::contract_instance_retrieval_incoming_viewing_key_y, incoming_viewing_key_y },
101 { C::contract_instance_retrieval_outgoing_viewing_key_x, outgoing_viewing_key_x },
102 { C::contract_instance_retrieval_outgoing_viewing_key_y, outgoing_viewing_key_y },
103 { C::contract_instance_retrieval_tagging_key_x, tagging_key_x },
104 { C::contract_instance_retrieval_tagging_key_y, tagging_key_y },
105 { C::contract_instance_retrieval_deployer_protocol_contract_address,
111 { C::contract_instance_retrieval_is_protocol_contract, 0 },
112 { C::contract_instance_retrieval_should_check_nullifier, 1 },
113 { C::contract_instance_retrieval_should_check_for_update, 1 } },
116 check_relation<contract_instance_retrieval>(
trace);
119TEST(ContractInstanceRetrievalConstrainingTest, MultipleInstancesTrace)
122 const auto num_instances = 3;
123 const auto base_address = 0x1000;
124 const auto base_nullifier_tree_root = 0x2000;
125 const auto base_public_data_tree_root = 0x3000;
126 const auto base_salt = 100;
132 trace_data.push_back({ { C::precomputed_first_row, 1 } });
135 for (uint32_t i = 0; i < num_instances; i++) {
136 auto contract_instance = create_test_contract_instance(base_salt + i);
138 trace_data.push_back({
139 { C::contract_instance_retrieval_sel, 1 },
140 { C::contract_instance_retrieval_address,
FF(base_address + i) },
141 { C::contract_instance_retrieval_exists, 1 },
142 { C::contract_instance_retrieval_salt, contract_instance.salt },
143 { C::contract_instance_retrieval_deployer_addr, contract_instance.deployer_addr },
144 { C::contract_instance_retrieval_current_class_id, contract_instance.current_class_id },
145 { C::contract_instance_retrieval_original_class_id, contract_instance.original_class_id },
146 { C::contract_instance_retrieval_init_hash, contract_instance.initialisation_hash },
147 { C::contract_instance_retrieval_public_data_tree_root,
FF(base_public_data_tree_root + i) },
148 { C::contract_instance_retrieval_nullifier_tree_root,
FF(base_nullifier_tree_root + i) },
149 { C::contract_instance_retrieval_nullifier_key_x, contract_instance.public_keys.nullifier_key.x },
150 { C::contract_instance_retrieval_nullifier_key_y, contract_instance.public_keys.nullifier_key.y },
151 { C::contract_instance_retrieval_incoming_viewing_key_x,
152 contract_instance.public_keys.incoming_viewing_key.x },
153 { C::contract_instance_retrieval_incoming_viewing_key_y,
154 contract_instance.public_keys.incoming_viewing_key.y },
155 { C::contract_instance_retrieval_outgoing_viewing_key_x,
156 contract_instance.public_keys.outgoing_viewing_key.x },
157 { C::contract_instance_retrieval_outgoing_viewing_key_y,
158 contract_instance.public_keys.outgoing_viewing_key.y },
159 { C::contract_instance_retrieval_tagging_key_x, contract_instance.public_keys.tagging_key.x },
160 { C::contract_instance_retrieval_tagging_key_y, contract_instance.public_keys.tagging_key.y },
161 { C::contract_instance_retrieval_deployer_protocol_contract_address,
164 { C::contract_instance_retrieval_address_sub_one, (base_address + i) - 1 },
166 { C::contract_instance_retrieval_derived_address, base_address + i },
167 { C::contract_instance_retrieval_is_protocol_contract, 0 },
168 { C::contract_instance_retrieval_should_check_nullifier, 1 },
169 { C::contract_instance_retrieval_should_check_for_update, 1 },
173 TestTraceContainer
trace(trace_data);
174 check_relation<contract_instance_retrieval>(
trace);
177TEST(ContractInstanceRetrievalConstrainingTest, NonExistentInstanceTrace)
181 const auto nullifier_tree_root =
FF(0xffffff);
182 const auto public_data_tree_root =
FF(0xeeeeee);
183 const auto exists =
false;
186 TestTraceContainer
trace({
187 { { C::precomputed_first_row, 1 } },
188 { { C::contract_instance_retrieval_sel, 1 },
190 { C::contract_instance_retrieval_exists,
exists ? 1 : 0 },
191 { C::contract_instance_retrieval_salt, 0 },
192 { C::contract_instance_retrieval_deployer_addr, 0 },
193 { C::contract_instance_retrieval_current_class_id, 0 },
194 { C::contract_instance_retrieval_original_class_id, 0 },
195 { C::contract_instance_retrieval_init_hash, 0 },
196 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
197 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
198 { C::contract_instance_retrieval_deployer_protocol_contract_address,
204 { C::contract_instance_retrieval_is_protocol_contract, 0 },
205 { C::contract_instance_retrieval_should_check_nullifier, 1 },
206 { C::contract_instance_retrieval_should_check_for_update, 0 } },
209 check_relation<contract_instance_retrieval>(
trace);
213 trace.
set(C::contract_instance_retrieval_deployer_addr, 1, 1);
215 "INSTANCE_MEMBER_DEPLOYER_IS_ZERO_IF_DNE");
217 trace.
set(C::contract_instance_retrieval_deployer_addr, 1, 0);
219 trace.
set(C::contract_instance_retrieval_current_class_id, 1, 1);
221 "INSTANCE_MEMBER_CLASS_ID_IS_ZERO_IF_DNE");
223 trace.
set(C::contract_instance_retrieval_current_class_id, 1, 0);
225 trace.
set(C::contract_instance_retrieval_original_class_id, 1, 1);
227 "INSTANCE_MEMBER_ORIGINAL_CLASS_ID_IS_ZERO_IF_DNE");
229 trace.
set(C::contract_instance_retrieval_original_class_id, 1, 0);
231 trace.
set(C::contract_instance_retrieval_init_hash, 1, 1);
233 "INSTANCE_MEMBER_INIT_HASH_IS_ZERO_IF_DNE");
235 trace.
set(C::contract_instance_retrieval_init_hash, 1, 0);
238TEST(ContractInstanceRetrievalConstrainingTest, MaximumFieldValuesTrace)
241 const auto max_field =
FF(-1);
244 TestTraceContainer
trace({
245 { { C::precomputed_first_row, 1 } },
246 { { C::contract_instance_retrieval_sel, 1 },
247 { C::contract_instance_retrieval_address, max_field },
248 { C::contract_instance_retrieval_exists, 1 },
249 { C::contract_instance_retrieval_salt, max_field },
250 { C::contract_instance_retrieval_deployer_addr, max_field },
251 { C::contract_instance_retrieval_current_class_id, max_field },
252 { C::contract_instance_retrieval_original_class_id, max_field },
253 { C::contract_instance_retrieval_init_hash, max_field },
254 { C::contract_instance_retrieval_public_data_tree_root, max_field },
255 { C::contract_instance_retrieval_nullifier_tree_root, max_field },
256 { C::contract_instance_retrieval_nullifier_key_x, max_field },
257 { C::contract_instance_retrieval_nullifier_key_y, max_field },
258 { C::contract_instance_retrieval_incoming_viewing_key_x, max_field },
259 { C::contract_instance_retrieval_incoming_viewing_key_y, max_field },
260 { C::contract_instance_retrieval_outgoing_viewing_key_x, max_field },
261 { C::contract_instance_retrieval_outgoing_viewing_key_y, max_field },
262 { C::contract_instance_retrieval_tagging_key_x, max_field },
263 { C::contract_instance_retrieval_tagging_key_y, max_field },
264 { C::contract_instance_retrieval_deployer_protocol_contract_address,
267 { C::contract_instance_retrieval_address_sub_one, max_field - 1 },
269 { C::contract_instance_retrieval_derived_address, max_field },
270 { C::contract_instance_retrieval_is_protocol_contract, 0 },
271 { C::contract_instance_retrieval_should_check_nullifier, 1 },
272 { C::contract_instance_retrieval_should_check_for_update, 1 } },
275 check_relation<contract_instance_retrieval>(
trace);
278TEST(ContractInstanceRetrievalConstrainingTest, ProtocolContractInstanceExists)
283 const auto nullifier_tree_root =
FF(0xbadc0ffeeULL);
284 const auto public_data_tree_root =
FF(0xfacefeedUL);
285 ProtocolContracts protocol_contracts = {};
286 uint32_t protocol_contract_index =
static_cast<uint32_t
>(
contract_address - 1);
287 protocol_contracts.derivedAddresses[protocol_contract_index] = derived_address;
289 auto public_inputs = PublicInputsBuilder().set_protocol_contracts(protocol_contracts).build();
292 TestTraceContainer
trace({
294 { C::precomputed_first_row, 1 },
299 { C::ff_gt_result, 1 },
303 { C::contract_instance_retrieval_sel, 1 },
305 { C::contract_instance_retrieval_exists, 1 },
306 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
307 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
308 { C::contract_instance_retrieval_deployer_protocol_contract_address,
311 { C::contract_instance_retrieval_derived_address_pi_index,
313 { C::contract_instance_retrieval_protocol_contract_derived_address_inv, derived_address.invert() },
316 { C::contract_instance_retrieval_derived_address, derived_address },
317 { C::contract_instance_retrieval_is_protocol_contract, 1 },
318 { C::contract_instance_retrieval_should_check_nullifier, 0 },
319 { C::contract_instance_retrieval_should_check_for_update, 0 },
330 check_relation<contract_instance_retrieval>(
trace);
336TEST(ContractInstanceRetrievalConstrainingTest, ProtocolContractInstanceNotExists)
341 const auto nullifier_tree_root =
FF(0xbadc0ffeeULL);
342 const auto public_data_tree_root =
FF(0xfacefeedUL);
343 uint32_t protocol_contract_index =
static_cast<uint32_t
>(
contract_address - 1);
345 auto public_inputs = PublicInputsBuilder().build();
348 TestTraceContainer
trace({
350 { C::precomputed_first_row, 1 },
355 { C::ff_gt_result, 1 },
359 { C::contract_instance_retrieval_sel, 1 },
361 { C::contract_instance_retrieval_exists, 0 },
362 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
363 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
364 { C::contract_instance_retrieval_deployer_protocol_contract_address,
367 { C::contract_instance_retrieval_derived_address_pi_index,
369 { C::contract_instance_retrieval_protocol_contract_derived_address_inv, 0 },
372 { C::contract_instance_retrieval_derived_address, derived_address },
373 { C::contract_instance_retrieval_is_protocol_contract, 1 },
374 { C::contract_instance_retrieval_should_check_nullifier, 0 },
375 { C::contract_instance_retrieval_should_check_for_update, 0 },
386 check_relation<contract_instance_retrieval>(
trace);
393TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenValidInstance)
397 const auto timestamp = 12345;
398 const auto nullifier_tree_root =
FF(0xaabbccdd);
399 const auto public_data_tree_root =
FF(0xeeff1122);
400 const auto deployment_nullifier =
FF(0x7777);
403 EventEmitter<ContractInstanceRetrievalEvent> emitter;
404 auto contract_instance = create_test_contract_instance();
407 .contract_instance = contract_instance,
408 .nullifier_tree_root = nullifier_tree_root,
409 .public_data_tree_root = public_data_tree_root,
410 .deployment_nullifier = deployment_nullifier,
412 .is_protocol_contract =
false };
415 auto events = emitter.dump_events();
417 TestTraceContainer
trace;
418 ContractInstanceRetrievalTraceBuilder
builder;
428 auto contract_instance_data = create_test_contract_instance();
433 { C::nullifier_check_sel, 1 },
434 { C::nullifier_check_exists, 1 },
436 { C::nullifier_check_root, nullifier_tree_root },
438 { C::nullifier_check_should_silo, 1 },
440 { C::address_derivation_sel, 1 },
442 { C::address_derivation_salt, contract_instance_data.salt },
443 { C::address_derivation_deployer_addr, contract_instance_data.deployer_addr },
444 { C::address_derivation_class_id, contract_instance_data.original_class_id },
445 { C::address_derivation_init_hash, contract_instance_data.initialisation_hash },
446 { C::address_derivation_nullifier_key_x, contract_instance_data.public_keys.nullifier_key.x },
447 { C::address_derivation_nullifier_key_y, contract_instance_data.public_keys.nullifier_key.y },
448 { C::address_derivation_incoming_viewing_key_x, contract_instance_data.public_keys.incoming_viewing_key.x },
449 { C::address_derivation_incoming_viewing_key_y, contract_instance_data.public_keys.incoming_viewing_key.y },
450 { C::address_derivation_outgoing_viewing_key_x, contract_instance_data.public_keys.outgoing_viewing_key.x },
451 { C::address_derivation_outgoing_viewing_key_y, contract_instance_data.public_keys.outgoing_viewing_key.y },
452 { C::address_derivation_tagging_key_x, contract_instance_data.public_keys.tagging_key.x },
453 { C::address_derivation_tagging_key_y, contract_instance_data.public_keys.tagging_key.y },
455 { C::update_check_sel, 1 },
457 { C::update_check_current_class_id, contract_instance_data.current_class_id },
458 { C::update_check_original_class_id, contract_instance_data.original_class_id },
459 { C::update_check_public_data_tree_root, public_data_tree_root },
460 { C::update_check_timestamp, timestamp },
463 check_relation<contract_instance_retrieval>(
trace);
470 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
474TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenNonExistentInstance)
478 const auto timestamp = 99999;
479 const auto nullifier_tree_root =
FF(0xffffff);
480 const auto public_data_tree_root =
FF(0xeeeeee);
481 const auto deployment_nullifier =
FF(0x8888);
484 EventEmitter<ContractInstanceRetrievalEvent> emitter;
487 .contract_instance = {},
488 .nullifier_tree_root = nullifier_tree_root,
489 .public_data_tree_root = public_data_tree_root,
490 .deployment_nullifier = deployment_nullifier,
492 .is_protocol_contract =
false };
495 auto events = emitter.dump_events();
497 TestTraceContainer
trace;
498 ContractInstanceRetrievalTraceBuilder
builder;
509 { C::nullifier_check_sel, 1 },
510 { C::nullifier_check_exists, 0 },
512 { C::nullifier_check_root, nullifier_tree_root },
514 { C::nullifier_check_should_silo, 1 },
516 { C::address_derivation_sel, 0 },
518 { C::address_derivation_salt, 0 },
519 { C::address_derivation_deployer_addr, 0 },
520 { C::address_derivation_class_id, 0 },
521 { C::address_derivation_init_hash, 0 },
522 { C::address_derivation_nullifier_key_x, 0 },
523 { C::address_derivation_nullifier_key_y, 0 },
524 { C::address_derivation_incoming_viewing_key_x, 0 },
525 { C::address_derivation_incoming_viewing_key_y, 0 },
526 { C::address_derivation_outgoing_viewing_key_x, 0 },
527 { C::address_derivation_outgoing_viewing_key_y, 0 },
528 { C::address_derivation_tagging_key_x, 0 },
529 { C::address_derivation_tagging_key_y, 0 },
531 { C::update_check_sel, 0 },
533 { C::update_check_current_class_id, 0 },
534 { C::update_check_original_class_id, 0 },
535 { C::update_check_public_data_tree_root, public_data_tree_root },
536 { C::update_check_timestamp, timestamp },
539 check_relation<contract_instance_retrieval>(
trace);
546 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
550TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenAddressZero)
554 const auto timestamp = 99999;
555 const auto nullifier_tree_root =
FF(0xffffff);
556 const auto public_data_tree_root =
FF(0xeeeeee);
557 const auto deployment_nullifier =
FF(0x8888);
560 EventEmitter<ContractInstanceRetrievalEvent> emitter;
562 ContractInstanceRetrievalEvent
event{
564 .contract_instance = {},
565 .nullifier_tree_root = nullifier_tree_root,
566 .public_data_tree_root = public_data_tree_root,
567 .deployment_nullifier = deployment_nullifier,
569 .is_protocol_contract =
false,
573 auto events = emitter.dump_events();
575 TestTraceContainer
trace;
576 ContractInstanceRetrievalTraceBuilder
builder;
587 { C::nullifier_check_sel, 1 },
588 { C::nullifier_check_exists, 0 },
590 { C::nullifier_check_root, nullifier_tree_root },
592 { C::nullifier_check_should_silo, 1 },
594 { C::address_derivation_sel, 0 },
596 { C::address_derivation_salt, 0 },
597 { C::address_derivation_deployer_addr, 0 },
598 { C::address_derivation_class_id, 0 },
599 { C::address_derivation_init_hash, 0 },
600 { C::address_derivation_nullifier_key_x, 0 },
601 { C::address_derivation_nullifier_key_y, 0 },
602 { C::address_derivation_incoming_viewing_key_x, 0 },
603 { C::address_derivation_incoming_viewing_key_y, 0 },
604 { C::address_derivation_outgoing_viewing_key_x, 0 },
605 { C::address_derivation_outgoing_viewing_key_y, 0 },
606 { C::address_derivation_tagging_key_x, 0 },
607 { C::address_derivation_tagging_key_y, 0 },
609 { C::update_check_sel, 0 },
611 { C::update_check_current_class_id, 0 },
612 { C::update_check_original_class_id, 0 },
613 { C::update_check_public_data_tree_root, public_data_tree_root },
614 { C::update_check_timestamp, timestamp },
617 check_relation<contract_instance_retrieval>(
trace);
624 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
628TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenMultipleInstances)
631 const auto num_instances = 3;
632 const auto base_address = 0x1000;
633 const auto base_timestamp = 1000;
634 const auto base_nullifier_tree_root = 0x2000;
635 const auto base_public_data_tree_root = 0x3000;
636 const auto base_salt = 100;
639 EventEmitter<ContractInstanceRetrievalEvent> emitter;
641 for (uint32_t i = 0; i < num_instances; i++) {
642 auto contract_instance = create_test_contract_instance(base_salt + i);
644 ContractInstanceRetrievalEvent
event = { .address =
FF(base_address + i),
645 .contract_instance = contract_instance,
646 .nullifier_tree_root =
FF(base_nullifier_tree_root + i),
647 .public_data_tree_root =
FF(base_public_data_tree_root + i),
648 .deployment_nullifier =
FF(base_address + i),
650 .is_protocol_contract =
false };
655 auto events = emitter.dump_events();
657 TestTraceContainer
trace;
658 ContractInstanceRetrievalTraceBuilder
builder;
668 for (uint32_t i = 0; i < num_instances; i++) {
669 auto contract_instance_data = create_test_contract_instance(base_salt + i);
670 uint32_t row = i + 1;
674 { { { C::nullifier_check_sel, 1 },
675 { C::nullifier_check_exists,
true },
676 { C::nullifier_check_nullifier,
FF(base_address + i) },
677 { C::nullifier_check_root,
FF(base_nullifier_tree_root + i) },
679 { C::nullifier_check_should_silo, 1 },
681 { C::address_derivation_sel, 1 },
682 { C::address_derivation_address,
FF(base_address + i) },
683 { C::address_derivation_salt, contract_instance_data.salt },
684 { C::address_derivation_deployer_addr, contract_instance_data.deployer_addr },
685 { C::address_derivation_class_id, contract_instance_data.original_class_id },
686 { C::address_derivation_init_hash, contract_instance_data.initialisation_hash },
687 { C::address_derivation_nullifier_key_x, contract_instance_data.public_keys.nullifier_key.x },
688 { C::address_derivation_nullifier_key_y, contract_instance_data.public_keys.nullifier_key.y },
689 { C::address_derivation_incoming_viewing_key_x,
690 contract_instance_data.public_keys.incoming_viewing_key.x },
691 { C::address_derivation_incoming_viewing_key_y,
692 contract_instance_data.public_keys.incoming_viewing_key.y },
693 { C::address_derivation_outgoing_viewing_key_x,
694 contract_instance_data.public_keys.outgoing_viewing_key.x },
695 { C::address_derivation_outgoing_viewing_key_y,
696 contract_instance_data.public_keys.outgoing_viewing_key.y },
697 { C::address_derivation_tagging_key_x, contract_instance_data.public_keys.tagging_key.x },
698 { C::address_derivation_tagging_key_y, contract_instance_data.public_keys.tagging_key.y },
700 { C::update_check_sel, 1 },
701 { C::update_check_address,
FF(base_address + i) },
702 { C::update_check_current_class_id, contract_instance_data.current_class_id },
703 { C::update_check_original_class_id, contract_instance_data.original_class_id },
704 { C::update_check_public_data_tree_root,
FF(base_public_data_tree_root + i) },
705 { C::update_check_timestamp, base_timestamp + i },
709 check_relation<contract_instance_retrieval>(
trace);
716 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
#define AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX
#define FEE_JUICE_ADDRESS
#define MAX_PROTOCOL_CONTRACTS
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_TIMESTAMP_ROW_IDX
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
void process(const simulation::EventEmitterInterface< simulation::AluEvent >::Container &events, TraceContainer &trace)
void process_misc(TraceContainer &trace, const uint32_t num_rows=MAX_AVM_TRACE_SIZE)
void process_get_contract_instance_table(TraceContainer &trace)
void process_sel_range_8(TraceContainer &trace)
uint32_t get_num_rows() const
void set(Column col, uint32_t row, const FF &value)
PrecomputedTraceBuilder precomputed_builder
AztecAddress contract_address
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
void check_interaction(tracegen::TestTraceContainer &trace)
TEST(TxExecutionConstrainingTest, WriteTreeValue)
TestTraceContainer empty_trace()
lookup_settings< lookup_contract_instance_retrieval_check_protocol_address_range_settings_ > lookup_contract_instance_retrieval_check_protocol_address_range_settings
lookup_settings< lookup_contract_instance_retrieval_address_derivation_settings_ > lookup_contract_instance_retrieval_address_derivation_settings
lookup_settings< lookup_contract_instance_retrieval_read_derived_address_from_public_inputs_settings_ > lookup_contract_instance_retrieval_read_derived_address_from_public_inputs_settings
lookup_settings< lookup_contract_instance_retrieval_deployment_nullifier_read_settings_ > lookup_contract_instance_retrieval_deployment_nullifier_read_settings
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
simulation::PublicDataTreeReadWriteEvent event
tracegen::PublicInputsTraceBuilder public_inputs_builder