1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
20using simulation::ContractInstanceRetrievalEvent;
23ContractInstance create_test_contract_instance(uint32_t salt_value = 123)
25 return ContractInstance{
26 .salt =
FF(salt_value),
27 .deployer =
FF(0x123456789ULL),
28 .current_contract_class_id =
FF(0xdeadbeefULL),
29 .original_contract_class_id =
FF(0xcafebabeULL),
30 .initialization_hash =
FF(0x11111111ULL),
31 .immutables_hash =
FF(0x22222222ULL),
34 .nullifier_key_hash =
FF(0x100),
35 .incoming_viewing_key = {
FF(0x200),
FF(0x201) },
36 .outgoing_viewing_key_hash =
FF(0x300),
37 .tagging_key_hash =
FF(0x400),
38 .message_signing_key_hash =
FF(0x500),
39 .fallback_key_hash =
FF(0x600),
44TEST(ContractInstanceRetrievalTraceGenTest, EmptyEvents)
46 TestTraceContainer
trace;
47 ContractInstanceRetrievalTraceBuilder
builder;
54 EXPECT_EQ(
trace.
get(C::contract_instance_retrieval_sel, 0), 0);
57TEST(ContractInstanceRetrievalTraceGenTest, SingleEvent)
59 TestTraceContainer
trace;
60 ContractInstanceRetrievalTraceBuilder
builder;
63 const auto contract_address =
FF(0xabcdef123456ULL);
64 const auto nullifier_tree_root =
FF(0x9999);
65 const auto public_data_tree_root =
FF(0x8888);
66 const auto deployment_nullifier =
FF(0x7777);
67 const auto expected_rows = 2;
69 auto contract_instance = create_test_contract_instance();
73 ContractInstanceRetrievalEvent{
74 .address = contract_address,
75 .contract_instance = contract_instance,
76 .nullifier_tree_root = nullifier_tree_root,
77 .public_data_tree_root = public_data_tree_root,
78 .deployment_nullifier = deployment_nullifier,
87 ASSERT_EQ(rows.size(), expected_rows);
90 EXPECT_THAT(rows.at(0),
ROW_FIELD_EQ(contract_instance_retrieval_sel, 0));
93 EXPECT_THAT(rows.at(1),
95 ROW_FIELD_EQ(contract_instance_retrieval_address, contract_address),
100 ROW_FIELD_EQ(contract_instance_retrieval_deployer_addr, 0x123456789ULL),
101 ROW_FIELD_EQ(contract_instance_retrieval_current_class_id, 0xdeadbeefULL),
102 ROW_FIELD_EQ(contract_instance_retrieval_original_class_id, 0xcafebabeULL),
103 ROW_FIELD_EQ(contract_instance_retrieval_init_hash, 0x11111111ULL),
104 ROW_FIELD_EQ(contract_instance_retrieval_immutables_hash, 0x22222222ULL),
107 ROW_FIELD_EQ(contract_instance_retrieval_nullifier_key_hash, 0x100),
108 ROW_FIELD_EQ(contract_instance_retrieval_incoming_viewing_key_x, 0x200),
109 ROW_FIELD_EQ(contract_instance_retrieval_incoming_viewing_key_y, 0x201),
110 ROW_FIELD_EQ(contract_instance_retrieval_outgoing_viewing_key_hash, 0x300),
111 ROW_FIELD_EQ(contract_instance_retrieval_tagging_key_hash, 0x400),
112 ROW_FIELD_EQ(contract_instance_retrieval_message_signing_key_hash, 0x500),
113 ROW_FIELD_EQ(contract_instance_retrieval_fallback_key_hash, 0x600),
116 ROW_FIELD_EQ(contract_instance_retrieval_public_data_tree_root, public_data_tree_root),
117 ROW_FIELD_EQ(contract_instance_retrieval_nullifier_tree_root, nullifier_tree_root),
120 ROW_FIELD_EQ(contract_instance_retrieval_deployer_protocol_contract_address,
124TEST(ContractInstanceRetrievalTraceGenTest, MultipleEvents)
126 TestTraceContainer
trace;
127 ContractInstanceRetrievalTraceBuilder
builder;
130 const auto num_events = 5;
131 const auto base_address = 0x1000;
132 const auto base_nullifier_tree_root = 0x2000;
133 const auto base_public_data_tree_root = 0x3000;
134 const auto base_deployment_nullifier = 0x4000;
135 const auto base_salt = 1000;
136 const auto expected_rows = num_events + 1;
141 for (uint32_t i = 0; i < num_events; i++) {
142 auto contract_instance = create_test_contract_instance(base_salt + i);
144 events.push_back(ContractInstanceRetrievalEvent{
145 .address =
FF(base_address + i),
146 .contract_instance = contract_instance,
147 .nullifier_tree_root =
FF(base_nullifier_tree_root + i),
148 .public_data_tree_root =
FF(base_public_data_tree_root + i),
149 .deployment_nullifier =
FF(base_deployment_nullifier + i),
150 .exists = (i % 2 == 0),
157 ASSERT_EQ(rows.size(), expected_rows);
160 for (uint32_t i = 0; i < num_events; i++) {
164 ROW_FIELD_EQ(contract_instance_retrieval_address, base_address + i),
165 ROW_FIELD_EQ(contract_instance_retrieval_exists, i % 2 == 0 ? 1 : 0),
166 ROW_FIELD_EQ(contract_instance_retrieval_salt, base_salt + i),
167 ROW_FIELD_EQ(contract_instance_retrieval_nullifier_tree_root, base_nullifier_tree_root + i),
168 ROW_FIELD_EQ(contract_instance_retrieval_public_data_tree_root, base_public_data_tree_root + i),
169 ROW_FIELD_EQ(contract_instance_retrieval_deployer_protocol_contract_address,
#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.
std::vector< AvmFullRowConstRef > as_rows() const
const FF & get(Column col, uint32_t row) const
#define ROW_FIELD_EQ(field_name, expression)
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept