3#include <gmock/gmock.h>
4#include <gtest/gtest.h>
43using ::testing::NiceMock;
44using ::testing::Return;
45using ::testing::ReturnRef;
48using simulation::EventEmitter;
49using simulation::ExecutionIdManager;
50using simulation::FieldGreaterThan;
51using simulation::FieldGreaterThanEvent;
52using simulation::GreaterThan;
53using simulation::GreaterThanEvent;
54using simulation::MerkleDB;
55using simulation::MockFieldGreaterThan;
56using simulation::MockGreaterThan;
57using simulation::MockIndexedTreeCheck;
58using simulation::MockL1ToL2MessageTreeCheck;
59using simulation::MockLowLevelMerkleDB;
60using simulation::MockMerkleCheck;
61using simulation::MockNoteHashTreeCheck;
62using simulation::MockWrittenPublicDataSlotsTreeCheck;
63using simulation::NoopEventEmitter;
64using simulation::Poseidon2;
65using simulation::Poseidon2HashEvent;
66using simulation::Poseidon2PermutationEvent;
67using simulation::Poseidon2PermutationMemoryEvent;
68using simulation::PublicDataTreeCheck;
71using simulation::RangeCheck;
72using simulation::RangeCheckEvent;
73using simulation::UpdateCheck;
74using simulation::UpdateCheckEvent;
81TEST(UpdateCheckTracegenTest, HashZeroInteractions)
83 uint64_t current_timestamp = 100;
87 FF delayed_public_mutable_slot =
94 trees.public_data_tree.root = 42;
108 NiceMock<MockMerkleCheck> mock_merkle_check;
109 NiceMock<MockIndexedTreeCheck> mock_indexed_tree_check;
110 NiceMock<MockNoteHashTreeCheck> mock_note_hash_tree_check;
111 NiceMock<MockWrittenPublicDataSlotsTreeCheck> mock_written_public_data_slots_tree_check;
112 NiceMock<MockL1ToL2MessageTreeCheck> mock_l1_to_l2_message_tree_check;
116 EventEmitter<PublicDataTreeCheckEvent> public_data_tree_check_event_emitter;
117 PublicDataTreeCheck public_data_tree_check(
120 NiceMock<MockLowLevelMerkleDB> mock_low_level_merkle_db;
122 MerkleDB
merkle_db(mock_low_level_merkle_db,
123 public_data_tree_check,
124 mock_indexed_tree_check,
125 mock_note_hash_tree_check,
126 mock_written_public_data_slots_tree_check,
127 mock_l1_to_l2_message_tree_check);
129 EventEmitter<UpdateCheckEvent> update_check_event_emitter;
130 const GlobalVariables globals = GlobalVariables{ .timestamp = current_timestamp };
133 uint32_t leaf_index = 27;
134 EXPECT_CALL(mock_low_level_merkle_db, get_tree_roots()).WillRepeatedly(Return(trees));
137 EXPECT_CALL(mock_low_level_merkle_db, get_leaf_preimage_public_data_tree(_))
140 mock_low_level_merkle_db,
144 EXPECT_CALL(
mock_field_gt, ff_gt(_, _)).WillRepeatedly(Return(
true));
150 GreaterThanTraceBuilder greater_than_builder;
151 PublicDataTreeTraceBuilder public_data_check_builder;
152 UpdateCheckTraceBuilder update_check_builder;
154 TestTraceContainer
trace({ { { C::precomputed_first_row, 1 } } });
159 public_data_check_builder.process(public_data_tree_check_event_emitter.dump_events(), trace);
160 update_check_builder.process(update_check_event_emitter.dump_events(), trace);
171TEST(UpdateCheckTracegenTest, HashNonzeroInteractions)
173 uint64_t current_timestamp = 100;
181 FF delayed_public_mutable_slot =
185 trees.public_data_tree.root = 42;
198 NiceMock<MockMerkleCheck> mock_merkle_check;
199 NiceMock<MockIndexedTreeCheck> mock_indexed_tree_check;
200 NiceMock<MockNoteHashTreeCheck> mock_note_hash_tree_check;
201 NiceMock<MockWrittenPublicDataSlotsTreeCheck> mock_written_public_data_slots_tree_check;
202 NiceMock<MockL1ToL2MessageTreeCheck> mock_l1_to_l2_message_tree_check;
208 EventEmitter<PublicDataTreeCheckEvent> public_data_tree_check_event_emitter;
209 PublicDataTreeCheck public_data_tree_check(
212 NiceMock<MockLowLevelMerkleDB> mock_low_level_merkle_db;
214 MerkleDB
merkle_db(mock_low_level_merkle_db,
215 public_data_tree_check,
216 mock_indexed_tree_check,
217 mock_note_hash_tree_check,
218 mock_written_public_data_slots_tree_check,
219 mock_l1_to_l2_message_tree_check);
221 EventEmitter<UpdateCheckEvent> update_check_event_emitter;
222 GlobalVariables globals{ .timestamp = current_timestamp };
229 update_leaf_values.push_back(update_hash);
230 std::vector<FF> update_leaf_slots;
231 for (
size_t i = 0; i < update_leaf_values.size(); ++i) {
234 delayed_public_mutable_slot + i });
235 update_leaf_slots.push_back(leaf_slot);
238 EXPECT_CALL(mock_low_level_merkle_db, get_tree_roots()).WillRepeatedly(Return(trees));
241 EXPECT_CALL(mock_low_level_merkle_db, get_leaf_preimage_public_data_tree(_))
242 .WillRepeatedly([&](
const uint64_t&
index) {
249 for (
size_t i = 0; i < update_leaf_slots.size(); ++i) {
250 if (leaf_slot == update_leaf_slots[i]) {
254 throw std::runtime_error(
"Leaf not found");
257 EXPECT_CALL(
mock_field_gt, ff_gt(_, _)).WillRepeatedly(Return(
true));
263 GreaterThanTraceBuilder greater_than_builder;
264 PublicDataTreeTraceBuilder public_data_check_builder;
265 UpdateCheckTraceBuilder update_check_builder;
267 TestTraceContainer
trace({ { { C::precomputed_first_row, 1 } } });
272 public_data_check_builder.process(public_data_tree_check_event_emitter.dump_events(), trace);
273 update_check_builder.process(update_check_event_emitter.dump_events(), trace);
std::shared_ptr< Napi::ThreadSafeFunction > instance
#define UPDATES_DELAYED_PUBLIC_MUTABLE_VALUES_LEN
#define DOM_SEP__PUBLIC_STORAGE_MAP_SLOT
#define UPDATED_CLASS_IDS_SLOT
#define DOM_SEP__PUBLIC_LEAF_SLOT
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
EventEmitter< Poseidon2PermutationMemoryEvent > perm_mem_event_emitter
EventEmitter< Poseidon2PermutationEvent > perm_event_emitter
EventEmitter< Poseidon2HashEvent > hash_event_emitter
Poseidon2TraceBuilder poseidon2_builder
StrictMock< MockHighLevelMerkleDB > merkle_db
void process_hash(const simulation::EventEmitterInterface< simulation::Poseidon2HashEvent >::Container &hash_events, TraceContainer &trace)
Processes the hash events for the Poseidon2 hash function. It populates the columns for the poseidon2...
void process(const simulation::EventEmitterInterface< simulation::RangeCheckEvent >::Container &events, TraceContainer &trace)
Processes range check events and populates the trace with decomposed value columns.
Native Poseidon2 hash function implementation.
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
RangeCheckTraceBuilder range_check_builder
ExecutionIdManager execution_id_manager
EventEmitter< RangeCheckEvent > range_check_event_emitter
StrictMock< MockFieldGreaterThan > mock_field_gt
StrictMock< MockUpdateCheck > update_check
void check_interaction(tracegen::TestTraceContainer &trace)
std::variant< PublicDataTreeReadWriteEvent, CheckPointEventType > PublicDataTreeCheckEvent
crypto::Poseidon2< crypto::Poseidon2Bn254ScalarFieldParams > poseidon2
IndexedLeaf< PublicDataLeafValue > PublicDataTreeLeafPreimage
::bb::crypto::merkle_tree::PublicDataLeafValue PublicDataLeafValue
FF compute_contract_address(const ContractInstance &contract_instance)
ContractInstance random_contract_instance()
lookup_settings< lookup_update_check_delayed_public_mutable_slot_poseidon2_settings_ > lookup_update_check_delayed_public_mutable_slot_poseidon2_settings
lookup_settings< lookup_update_check_update_hash_public_data_read_settings_ > lookup_update_check_update_hash_public_data_read_settings
lookup_settings< lookup_update_check_update_lo_metadata_range_settings_ > lookup_update_check_update_lo_metadata_range_settings
lookup_settings< lookup_update_check_timestamp_is_lt_timestamp_of_change_settings_ > lookup_update_check_timestamp_is_lt_timestamp_of_change_settings
lookup_settings< lookup_update_check_update_hi_metadata_range_settings_ > lookup_update_check_update_hi_metadata_range_settings
lookup_settings< lookup_update_check_update_hash_poseidon2_settings_ > lookup_update_check_update_hash_poseidon2_settings
std::vector< fr > fr_sibling_path
fr_sibling_path get_sibling_path(TypeOfTree &tree, index_t index, bool includeUncommitted=true, bool expected_success=true)
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
NoopEventEmitter< GreaterThanEvent > greater_than_event_emitter
NoopEventEmitter< FieldGreaterThanEvent > field_gt_event_emitter
FF update_timestamp_of_change