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 =
FF(0x123456789ULL),
45 .current_contract_class_id =
FF(0xdeadbeefULL),
46 .original_contract_class_id =
FF(0xcafebabeULL),
47 .initialization_hash =
FF(0x11111111ULL),
48 .immutables_hash =
FF(0x22222222ULL),
51 .nullifier_key_hash =
FF(0x100),
52 .incoming_viewing_key = {
FF(0x200),
FF(0x201) },
53 .outgoing_viewing_key_hash =
FF(0x300),
54 .tagging_key_hash =
FF(0x400),
55 .message_signing_key_hash =
FF(0x500),
56 .fallback_key_hash =
FF(0x600),
61TEST(ContractInstanceRetrievalConstrainingTest, EmptyRow)
66TEST(ContractInstanceRetrievalConstrainingTest, CompleteValidTrace)
69 const auto contract_address =
FF(0x1234567890abcdefULL);
70 const auto nullifier_tree_root =
FF(0xaabbccdd);
71 const auto public_data_tree_root =
FF(0xeeff1122);
73 const auto salt =
FF(0x555);
74 const auto deployer_addr =
FF(0x123456789ULL);
77 const auto init_hash =
FF(0x11111111ULL);
78 const auto immutables_hash =
FF(0x22222222ULL);
79 const auto nullifier_key_hash =
FF(0x100);
80 const auto incoming_viewing_key_x =
FF(0x200);
81 const auto incoming_viewing_key_y =
FF(0x201);
82 const auto outgoing_viewing_key_hash =
FF(0x300);
83 const auto tagging_key_hash =
FF(0x400);
84 const auto message_signing_key_hash =
FF(0x500);
85 const auto fallback_key_hash =
FF(0x600);
88 TestTraceContainer
trace({
89 { { C::precomputed_first_row, 1 } },
90 { { C::contract_instance_retrieval_sel, 1 },
91 { C::contract_instance_retrieval_address, contract_address },
92 { C::contract_instance_retrieval_exists,
exists ? 1 : 0 },
93 { C::contract_instance_retrieval_salt, salt },
94 { C::contract_instance_retrieval_deployer_addr, deployer_addr },
97 { C::contract_instance_retrieval_init_hash, init_hash },
98 { C::contract_instance_retrieval_immutables_hash, immutables_hash },
99 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
100 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
104 { C::contract_instance_retrieval_nullifier_key_hash, nullifier_key_hash },
105 { C::contract_instance_retrieval_incoming_viewing_key_x, incoming_viewing_key_x },
106 { C::contract_instance_retrieval_incoming_viewing_key_y, incoming_viewing_key_y },
107 { C::contract_instance_retrieval_outgoing_viewing_key_hash, outgoing_viewing_key_hash },
108 { C::contract_instance_retrieval_tagging_key_hash, tagging_key_hash },
109 { C::contract_instance_retrieval_message_signing_key_hash, message_signing_key_hash },
110 { C::contract_instance_retrieval_fallback_key_hash, fallback_key_hash },
111 { C::contract_instance_retrieval_deployer_protocol_contract_address,
114 { C::contract_instance_retrieval_address_sub_one, contract_address - 1 },
116 { C::contract_instance_retrieval_derived_address, contract_address },
117 { C::contract_instance_retrieval_is_protocol_contract, 0 },
118 { C::contract_instance_retrieval_should_check_nullifier, 1 },
119 { C::contract_instance_retrieval_should_check_for_update, 1 } },
122 check_relation<contract_instance_retrieval>(trace);
125TEST(ContractInstanceRetrievalConstrainingTest, MultipleInstancesTrace)
128 const auto num_instances = 3;
129 const auto base_address = 0x1000;
130 const auto base_nullifier_tree_root = 0x2000;
131 const auto base_public_data_tree_root = 0x3000;
132 const auto base_salt = 100;
138 trace_data.push_back({ { C::precomputed_first_row, 1 } });
141 for (uint32_t i = 0; i < num_instances; i++) {
142 auto contract_instance = create_test_contract_instance(base_salt + i);
144 trace_data.push_back({
145 { C::contract_instance_retrieval_sel, 1 },
146 { C::contract_instance_retrieval_address,
FF(base_address + i) },
147 { C::contract_instance_retrieval_exists, 1 },
148 { C::contract_instance_retrieval_salt, contract_instance.salt },
149 { C::contract_instance_retrieval_deployer_addr, contract_instance.deployer },
150 { C::contract_instance_retrieval_current_class_id, contract_instance.current_contract_class_id },
151 { C::contract_instance_retrieval_original_class_id, contract_instance.original_contract_class_id },
152 { C::contract_instance_retrieval_init_hash, contract_instance.initialization_hash },
153 { C::contract_instance_retrieval_immutables_hash, contract_instance.immutables_hash },
154 { C::contract_instance_retrieval_public_data_tree_root,
FF(base_public_data_tree_root + i) },
155 { C::contract_instance_retrieval_nullifier_tree_root,
FF(base_nullifier_tree_root + i) },
159 { C::contract_instance_retrieval_nullifier_key_hash, contract_instance.public_keys.nullifier_key_hash },
160 { C::contract_instance_retrieval_incoming_viewing_key_x,
161 contract_instance.public_keys.incoming_viewing_key.x },
162 { C::contract_instance_retrieval_incoming_viewing_key_y,
163 contract_instance.public_keys.incoming_viewing_key.y },
164 { C::contract_instance_retrieval_outgoing_viewing_key_hash,
165 contract_instance.public_keys.outgoing_viewing_key_hash },
166 { C::contract_instance_retrieval_tagging_key_hash, contract_instance.public_keys.tagging_key_hash },
167 { C::contract_instance_retrieval_message_signing_key_hash,
168 contract_instance.public_keys.message_signing_key_hash },
169 { C::contract_instance_retrieval_fallback_key_hash, contract_instance.public_keys.fallback_key_hash },
170 { C::contract_instance_retrieval_deployer_protocol_contract_address,
173 { C::contract_instance_retrieval_address_sub_one, (base_address + i) - 1 },
175 { C::contract_instance_retrieval_derived_address, base_address + i },
176 { C::contract_instance_retrieval_is_protocol_contract, 0 },
177 { C::contract_instance_retrieval_should_check_nullifier, 1 },
178 { C::contract_instance_retrieval_should_check_for_update, 1 },
182 TestTraceContainer
trace(trace_data);
183 check_relation<contract_instance_retrieval>(trace);
186TEST(ContractInstanceRetrievalConstrainingTest, NonExistentInstanceTrace)
189 const auto contract_address =
FF(0x99999999);
190 const auto nullifier_tree_root =
FF(0xffffff);
191 const auto public_data_tree_root =
FF(0xeeeeee);
192 const auto exists =
false;
195 TestTraceContainer
trace({
196 { { C::precomputed_first_row, 1 } },
197 { { C::contract_instance_retrieval_sel, 1 },
198 { C::contract_instance_retrieval_address, contract_address },
199 { C::contract_instance_retrieval_exists,
exists ? 1 : 0 },
200 { C::contract_instance_retrieval_salt, 0 },
201 { C::contract_instance_retrieval_deployer_addr, 0 },
202 { C::contract_instance_retrieval_current_class_id, 0 },
203 { C::contract_instance_retrieval_original_class_id, 0 },
204 { C::contract_instance_retrieval_init_hash, 0 },
205 { C::contract_instance_retrieval_immutables_hash, 0 },
206 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
207 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
211 { C::contract_instance_retrieval_deployer_protocol_contract_address,
214 { C::contract_instance_retrieval_address_sub_one, contract_address - 1 },
216 { C::contract_instance_retrieval_derived_address, contract_address },
217 { C::contract_instance_retrieval_is_protocol_contract, 0 },
218 { C::contract_instance_retrieval_should_check_nullifier, 1 },
219 { C::contract_instance_retrieval_should_check_for_update, 0 } },
222 check_relation<contract_instance_retrieval>(trace);
226 trace.
set(C::contract_instance_retrieval_deployer_addr, 1, 1);
228 "INSTANCE_MEMBER_DEPLOYER_IS_ZERO_IF_DNE");
230 trace.
set(C::contract_instance_retrieval_deployer_addr, 1, 0);
232 trace.
set(C::contract_instance_retrieval_current_class_id, 1, 1);
234 "INSTANCE_MEMBER_CLASS_ID_IS_ZERO_IF_DNE");
236 trace.
set(C::contract_instance_retrieval_current_class_id, 1, 0);
238 trace.
set(C::contract_instance_retrieval_original_class_id, 1, 1);
240 "INSTANCE_MEMBER_ORIGINAL_CLASS_ID_IS_ZERO_IF_DNE");
242 trace.
set(C::contract_instance_retrieval_original_class_id, 1, 0);
244 trace.
set(C::contract_instance_retrieval_init_hash, 1, 1);
246 "INSTANCE_MEMBER_INIT_HASH_IS_ZERO_IF_DNE");
248 trace.
set(C::contract_instance_retrieval_init_hash, 1, 0);
250 trace.
set(C::contract_instance_retrieval_immutables_hash, 1, 1);
252 "INSTANCE_MEMBER_IMMUTABLES_HASH_IS_ZERO_IF_DNE");
254 trace.
set(C::contract_instance_retrieval_immutables_hash, 1, 0);
257TEST(ContractInstanceRetrievalConstrainingTest, MaximumFieldValuesTrace)
260 const auto max_field =
FF(-1);
263 TestTraceContainer
trace({
264 { { C::precomputed_first_row, 1 } },
265 { { C::contract_instance_retrieval_sel, 1 },
266 { C::contract_instance_retrieval_address, max_field },
267 { C::contract_instance_retrieval_exists, 1 },
268 { C::contract_instance_retrieval_salt, max_field },
269 { C::contract_instance_retrieval_deployer_addr, max_field },
270 { C::contract_instance_retrieval_current_class_id, max_field },
271 { C::contract_instance_retrieval_original_class_id, max_field },
272 { C::contract_instance_retrieval_init_hash, max_field },
273 { C::contract_instance_retrieval_immutables_hash, max_field },
274 { C::contract_instance_retrieval_public_data_tree_root, max_field },
275 { C::contract_instance_retrieval_nullifier_tree_root, max_field },
279 { C::contract_instance_retrieval_nullifier_key_hash, max_field },
280 { C::contract_instance_retrieval_incoming_viewing_key_x, max_field },
281 { C::contract_instance_retrieval_incoming_viewing_key_y, max_field },
282 { C::contract_instance_retrieval_outgoing_viewing_key_hash, max_field },
283 { C::contract_instance_retrieval_tagging_key_hash, max_field },
284 { C::contract_instance_retrieval_message_signing_key_hash, max_field },
285 { C::contract_instance_retrieval_fallback_key_hash, max_field },
286 { C::contract_instance_retrieval_deployer_protocol_contract_address,
289 { C::contract_instance_retrieval_address_sub_one, max_field - 1 },
291 { C::contract_instance_retrieval_derived_address, max_field },
292 { C::contract_instance_retrieval_is_protocol_contract, 0 },
293 { C::contract_instance_retrieval_should_check_nullifier, 1 },
294 { C::contract_instance_retrieval_should_check_for_update, 1 } },
297 check_relation<contract_instance_retrieval>(trace);
300TEST(ContractInstanceRetrievalConstrainingTest, ProtocolContractInstanceExists)
305 const auto nullifier_tree_root =
FF(0xbadc0ffeeULL);
306 const auto public_data_tree_root =
FF(0xfacefeedUL);
307 ProtocolContracts protocol_contracts = {};
308 uint32_t protocol_contract_index =
static_cast<uint32_t
>(contract_address - 1);
309 protocol_contracts.derived_addresses[protocol_contract_index] = derived_address;
311 auto public_inputs = PublicInputsBuilder().set_protocol_contracts(protocol_contracts).build();
314 TestTraceContainer
trace({
316 { C::precomputed_first_row, 1 },
319 { C::ff_gt_sel_gt, 1 },
321 { C::ff_gt_b, contract_address -
FF(1) },
322 { C::ff_gt_result, 1 },
326 { C::contract_instance_retrieval_sel, 1 },
327 { C::contract_instance_retrieval_address, contract_address },
328 { C::contract_instance_retrieval_exists, 1 },
329 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
330 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
331 { C::contract_instance_retrieval_deployer_protocol_contract_address,
334 { C::contract_instance_retrieval_derived_address_pi_index,
336 { C::contract_instance_retrieval_protocol_contract_derived_address_inv, derived_address.
invert() },
337 { C::contract_instance_retrieval_address_sub_one, contract_address -
FF(1) },
339 { C::contract_instance_retrieval_derived_address, derived_address },
340 { C::contract_instance_retrieval_is_protocol_contract, 1 },
341 { C::contract_instance_retrieval_should_check_nullifier, 0 },
342 { C::contract_instance_retrieval_should_check_for_update, 0 },
353 check_relation<contract_instance_retrieval>(trace);
359TEST(ContractInstanceRetrievalConstrainingTest, ProtocolContractInstanceNotExists)
364 const auto nullifier_tree_root =
FF(0xbadc0ffeeULL);
365 const auto public_data_tree_root =
FF(0xfacefeedUL);
366 uint32_t protocol_contract_index =
static_cast<uint32_t
>(contract_address - 1);
368 auto public_inputs = PublicInputsBuilder().build();
371 TestTraceContainer
trace({
373 { C::precomputed_first_row, 1 },
376 { C::ff_gt_sel_gt, 1 },
378 { C::ff_gt_b, contract_address -
FF(1) },
379 { C::ff_gt_result, 1 },
383 { C::contract_instance_retrieval_sel, 1 },
384 { C::contract_instance_retrieval_address, contract_address },
385 { C::contract_instance_retrieval_exists, 0 },
386 { C::contract_instance_retrieval_public_data_tree_root, public_data_tree_root },
387 { C::contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root },
388 { C::contract_instance_retrieval_deployer_protocol_contract_address,
391 { C::contract_instance_retrieval_derived_address_pi_index,
393 { C::contract_instance_retrieval_protocol_contract_derived_address_inv, 0 },
394 { C::contract_instance_retrieval_address_sub_one, contract_address -
FF(1) },
396 { C::contract_instance_retrieval_derived_address, derived_address },
397 { C::contract_instance_retrieval_is_protocol_contract, 1 },
398 { C::contract_instance_retrieval_should_check_nullifier, 0 },
399 { C::contract_instance_retrieval_should_check_for_update, 0 },
410 check_relation<contract_instance_retrieval>(trace);
417TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenValidInstance)
420 const auto contract_address =
FF(0x1234567890abcdefULL);
421 const auto timestamp = 12345;
422 const auto nullifier_tree_root =
FF(0xaabbccdd);
423 const auto public_data_tree_root =
FF(0xeeff1122);
424 const auto deployment_nullifier =
FF(0x7777);
427 EventEmitter<ContractInstanceRetrievalEvent> emitter;
428 auto contract_instance = create_test_contract_instance();
430 ContractInstanceRetrievalEvent
event = { .address = contract_address,
431 .contract_instance = contract_instance,
432 .nullifier_tree_root = nullifier_tree_root,
433 .public_data_tree_root = public_data_tree_root,
434 .deployment_nullifier = deployment_nullifier,
436 .is_protocol_contract =
false };
439 auto events = emitter.dump_events();
441 TestTraceContainer
trace;
442 ContractInstanceRetrievalTraceBuilder
builder;
452 auto contract_instance_data = create_test_contract_instance();
457 { C::indexed_tree_check_sel, 1 },
458 { C::indexed_tree_check_exists, 1 },
459 { C::indexed_tree_check_value, contract_address },
460 { C::indexed_tree_check_root, nullifier_tree_root },
462 { C::indexed_tree_check_sel_silo, 1 },
467 { C::address_derivation_sel, 1 },
468 { C::address_derivation_address, contract_address },
469 { C::address_derivation_salt, contract_instance_data.salt },
470 { C::address_derivation_deployer_addr, contract_instance_data.deployer },
471 { C::address_derivation_class_id, contract_instance_data.original_contract_class_id },
472 { C::address_derivation_init_hash, contract_instance_data.initialization_hash },
473 { C::address_derivation_immutables_hash, contract_instance_data.immutables_hash },
474 { C::address_derivation_nullifier_key_hash, contract_instance_data.public_keys.nullifier_key_hash },
475 { C::address_derivation_incoming_viewing_key_x, contract_instance_data.public_keys.incoming_viewing_key.x },
476 { C::address_derivation_incoming_viewing_key_y, contract_instance_data.public_keys.incoming_viewing_key.y },
477 { C::address_derivation_outgoing_viewing_key_hash,
478 contract_instance_data.public_keys.outgoing_viewing_key_hash },
479 { C::address_derivation_tagging_key_hash, contract_instance_data.public_keys.tagging_key_hash },
480 { C::address_derivation_message_signing_key_hash,
481 contract_instance_data.public_keys.message_signing_key_hash },
482 { C::address_derivation_fallback_key_hash, contract_instance_data.public_keys.fallback_key_hash },
484 { C::update_check_sel, 1 },
485 { C::update_check_address, contract_address },
486 { C::update_check_current_class_id, contract_instance_data.current_contract_class_id },
487 { C::update_check_original_class_id, contract_instance_data.original_contract_class_id },
488 { C::update_check_public_data_tree_root, public_data_tree_root },
489 { C::update_check_timestamp, timestamp },
492 check_relation<contract_instance_retrieval>(trace);
499 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
503TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenNonExistentInstance)
506 const auto contract_address =
FF(0x999999999ULL);
507 const auto timestamp = 99999;
508 const auto nullifier_tree_root =
FF(0xffffff);
509 const auto public_data_tree_root =
FF(0xeeeeee);
510 const auto deployment_nullifier =
FF(0x8888);
513 EventEmitter<ContractInstanceRetrievalEvent> emitter;
515 ContractInstanceRetrievalEvent
event{ .address = contract_address,
516 .contract_instance = {},
517 .nullifier_tree_root = nullifier_tree_root,
518 .public_data_tree_root = public_data_tree_root,
519 .deployment_nullifier = deployment_nullifier,
521 .is_protocol_contract =
false };
524 auto events = emitter.dump_events();
526 TestTraceContainer
trace;
527 ContractInstanceRetrievalTraceBuilder
builder;
538 { C::indexed_tree_check_sel, 1 },
539 { C::indexed_tree_check_exists, 0 },
540 { C::indexed_tree_check_value, contract_address },
541 { C::indexed_tree_check_root, nullifier_tree_root },
543 { C::indexed_tree_check_sel_silo, 1 },
548 { C::address_derivation_sel, 0 },
549 { C::address_derivation_address, contract_address },
550 { C::address_derivation_salt, 0 },
551 { C::address_derivation_deployer_addr, 0 },
552 { C::address_derivation_class_id, 0 },
553 { C::address_derivation_init_hash, 0 },
554 { C::address_derivation_immutables_hash, 0 },
555 { C::address_derivation_nullifier_key_hash, 0 },
556 { C::address_derivation_incoming_viewing_key_x, 0 },
557 { C::address_derivation_incoming_viewing_key_y, 0 },
558 { C::address_derivation_outgoing_viewing_key_hash, 0 },
559 { C::address_derivation_tagging_key_hash, 0 },
560 { C::address_derivation_message_signing_key_hash, 0 },
561 { C::address_derivation_fallback_key_hash, 0 },
563 { C::update_check_sel, 0 },
564 { C::update_check_address, contract_address },
565 { C::update_check_current_class_id, 0 },
566 { C::update_check_original_class_id, 0 },
567 { C::update_check_public_data_tree_root, public_data_tree_root },
568 { C::update_check_timestamp, timestamp },
571 check_relation<contract_instance_retrieval>(trace);
578 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
582TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenAddressZero)
585 const auto contract_address =
FF(0);
586 const auto timestamp = 99999;
587 const auto nullifier_tree_root =
FF(0xffffff);
588 const auto public_data_tree_root =
FF(0xeeeeee);
589 const auto deployment_nullifier =
FF(0x8888);
592 EventEmitter<ContractInstanceRetrievalEvent> emitter;
594 ContractInstanceRetrievalEvent
event{
595 .address = contract_address,
596 .contract_instance = {},
597 .nullifier_tree_root = nullifier_tree_root,
598 .public_data_tree_root = public_data_tree_root,
599 .deployment_nullifier = deployment_nullifier,
601 .is_protocol_contract =
false,
605 auto events = emitter.dump_events();
607 TestTraceContainer
trace;
608 ContractInstanceRetrievalTraceBuilder
builder;
619 { C::indexed_tree_check_sel, 1 },
620 { C::indexed_tree_check_exists, 0 },
621 { C::indexed_tree_check_value, contract_address },
622 { C::indexed_tree_check_root, nullifier_tree_root },
624 { C::indexed_tree_check_sel_silo, 1 },
629 { C::address_derivation_sel, 0 },
630 { C::address_derivation_address, contract_address },
631 { C::address_derivation_salt, 0 },
632 { C::address_derivation_deployer_addr, 0 },
633 { C::address_derivation_class_id, 0 },
634 { C::address_derivation_init_hash, 0 },
635 { C::address_derivation_immutables_hash, 0 },
636 { C::address_derivation_nullifier_key_hash, 0 },
637 { C::address_derivation_incoming_viewing_key_x, 0 },
638 { C::address_derivation_incoming_viewing_key_y, 0 },
639 { C::address_derivation_outgoing_viewing_key_hash, 0 },
640 { C::address_derivation_tagging_key_hash, 0 },
641 { C::address_derivation_message_signing_key_hash, 0 },
642 { C::address_derivation_fallback_key_hash, 0 },
644 { C::update_check_sel, 0 },
645 { C::update_check_address, contract_address },
646 { C::update_check_current_class_id, 0 },
647 { C::update_check_original_class_id, 0 },
648 { C::update_check_public_data_tree_root, public_data_tree_root },
649 { C::update_check_timestamp, timestamp },
652 check_relation<contract_instance_retrieval>(trace);
659 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
663TEST(ContractInstanceRetrievalConstrainingTest, IntegrationTracegenMultipleInstances)
666 const auto num_instances = 3;
667 const auto base_address = 0x1000;
668 const auto base_timestamp = 1000;
669 const auto base_nullifier_tree_root = 0x2000;
670 const auto base_public_data_tree_root = 0x3000;
671 const auto base_salt = 100;
674 EventEmitter<ContractInstanceRetrievalEvent> emitter;
676 for (uint32_t i = 0; i < num_instances; i++) {
677 auto contract_instance = create_test_contract_instance(base_salt + i);
679 ContractInstanceRetrievalEvent
event = { .address =
FF(base_address + i),
680 .contract_instance = contract_instance,
681 .nullifier_tree_root =
FF(base_nullifier_tree_root + i),
682 .public_data_tree_root =
FF(base_public_data_tree_root + i),
683 .deployment_nullifier =
FF(base_address + i),
685 .is_protocol_contract =
false };
690 auto events = emitter.dump_events();
692 TestTraceContainer
trace;
693 ContractInstanceRetrievalTraceBuilder
builder;
703 for (uint32_t i = 0; i < num_instances; i++) {
704 auto contract_instance_data = create_test_contract_instance(base_salt + i);
705 uint32_t row = i + 1;
709 { { { C::indexed_tree_check_sel, 1 },
710 { C::indexed_tree_check_exists,
true },
711 { C::indexed_tree_check_value,
FF(base_address + i) },
712 { C::indexed_tree_check_root,
FF(base_nullifier_tree_root + i) },
714 { C::indexed_tree_check_sel_silo, 1 },
719 { C::address_derivation_sel, 1 },
720 { C::address_derivation_address,
FF(base_address + i) },
721 { C::address_derivation_salt, contract_instance_data.salt },
722 { C::address_derivation_deployer_addr, contract_instance_data.deployer },
723 { C::address_derivation_class_id, contract_instance_data.original_contract_class_id },
724 { C::address_derivation_init_hash, contract_instance_data.initialization_hash },
725 { C::address_derivation_immutables_hash, contract_instance_data.immutables_hash },
726 { C::address_derivation_nullifier_key_hash, contract_instance_data.public_keys.nullifier_key_hash },
727 { C::address_derivation_incoming_viewing_key_x,
728 contract_instance_data.public_keys.incoming_viewing_key.x },
729 { C::address_derivation_incoming_viewing_key_y,
730 contract_instance_data.public_keys.incoming_viewing_key.y },
731 { C::address_derivation_outgoing_viewing_key_hash,
732 contract_instance_data.public_keys.outgoing_viewing_key_hash },
733 { C::address_derivation_tagging_key_hash, contract_instance_data.public_keys.tagging_key_hash },
734 { C::address_derivation_message_signing_key_hash,
735 contract_instance_data.public_keys.message_signing_key_hash },
736 { C::address_derivation_fallback_key_hash, contract_instance_data.public_keys.fallback_key_hash },
738 { C::update_check_sel, 1 },
739 { C::update_check_address,
FF(base_address + i) },
740 { C::update_check_current_class_id, contract_instance_data.current_contract_class_id },
741 { C::update_check_original_class_id, contract_instance_data.original_contract_class_id },
742 { C::update_check_public_data_tree_root,
FF(base_public_data_tree_root + i) },
743 { C::update_check_timestamp, base_timestamp + i },
747 check_relation<contract_instance_retrieval>(trace);
754 check_interaction<ContractInstanceRetrievalTraceBuilder, lookup_contract_instance_retrieval_update_check_settings>(
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessageRegex)
#define AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX
#define FEE_JUICE_ADDRESS
#define DOM_SEP__SILOED_NULLIFIER
#define NULLIFIER_TREE_HEIGHT
#define MAX_PROTOCOL_CONTRACTS
#define DOM_SEP__NULLIFIER_MERKLE
#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)
Process the ALU events and populate the ALU relevant columns in the trace.
void process_misc(TraceContainer &trace, const uint32_t num_rows=PRECOMPUTED_TRACE_SIZE)
Populate miscellaneous precomputed columns: first_row selector and idx (row index).
void process_get_contract_instance_table(TraceContainer &trace)
Populate the GETCONTRACTINSTANCE lookup table.
void process_sel_range_8(TraceContainer &trace)
Generate a selector column that activates the first 2^8 (256) rows.
uint32_t get_num_rows() const
void set(Column col, uint32_t row, const FF &value)
PrecomputedTraceBuilder precomputed_builder
void check_interaction(tracegen::TestTraceContainer &trace)
TEST(AvmFixedVKTests, FixedVKCommitments)
Test that the fixed VK commitments agree with the ones computed from precomputed columns.
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
constexpr field invert() const noexcept
tracegen::PublicInputsTraceBuilder public_inputs_builder