6#include <gmock/gmock.h>
7#include <gtest/gtest.h>
12using ::testing::Return;
13using ::testing::ReturnRef;
14using ::testing::StrictMock;
16class SideEffectTrackingDBTest :
public ::testing::Test {
24TEST_F(SideEffectTrackingDBTest, StorageRead)
29 FF expected_value(200);
31 EXPECT_CALL(
mock_merkle_db, storage_read(contract_addr,
slot)).WillOnce(Return(expected_value));
33 FF result = db.storage_read(contract_addr,
slot);
34 EXPECT_EQ(result, expected_value);
37TEST_F(SideEffectTrackingDBTest, WasStorageWritten)
43 EXPECT_CALL(
mock_merkle_db, was_storage_written(contract_addr,
slot)).WillOnce(Return(
true));
45 bool result = db.was_storage_written(contract_addr,
slot);
49TEST_F(SideEffectTrackingDBTest, NullifierExists)
57 bool result = db.nullifier_exists(contract_addr,
nullifier);
61TEST_F(SideEffectTrackingDBTest, SiloedNullifierExists)
68 bool result = db.siloed_nullifier_exists(
nullifier);
72TEST_F(SideEffectTrackingDBTest, NoteHashExists)
75 uint64_t leaf_index = 5;
76 FF unique_note_hash(777);
78 EXPECT_CALL(
mock_merkle_db, note_hash_exists(leaf_index, unique_note_hash)).WillOnce(Return(
true));
80 bool result = db.note_hash_exists(leaf_index, unique_note_hash);
84TEST_F(SideEffectTrackingDBTest, L1ToL2MsgExists)
87 uint64_t leaf_index = 10;
90 EXPECT_CALL(
mock_merkle_db, l1_to_l2_msg_exists(leaf_index, msg_hash)).WillOnce(Return(
false));
92 bool result = db.l1_to_l2_msg_exists(leaf_index, msg_hash);
96TEST_F(SideEffectTrackingDBTest, GetCheckpointId)
99 uint32_t expected_id = 123;
101 EXPECT_CALL(
mock_merkle_db, get_checkpoint_id()).WillOnce(Return(expected_id));
103 uint32_t result = db.get_checkpoint_id();
104 EXPECT_EQ(result, expected_id);
107TEST_F(SideEffectTrackingDBTest, GetTreeState)
110 TreeStates expected_states = {
111 .note_hash_tree = { .tree = { .root =
FF(1), .next_available_leaf_index = 2 }, .counter = 2 },
112 .nullifier_tree = { .tree = { .root =
FF(3), .next_available_leaf_index = 4 }, .counter = 4 },
113 .l1_to_l2_message_tree = { .tree = { .root =
FF(5), .next_available_leaf_index = 6 }, .counter = 6 },
114 .public_data_tree = { .tree = { .root =
FF(7), .next_available_leaf_index = 8 }, .counter = 8 },
117 EXPECT_CALL(
mock_merkle_db, get_tree_state()).WillOnce(Return(expected_states));
119 TreeStates result = db.get_tree_state();
120 EXPECT_EQ(result, expected_states);
123TEST_F(SideEffectTrackingDBTest, StorageWrite)
129 bool is_protocol_write =
false;
135 db.storage_write(contract_addr,
slot,
value, is_protocol_write);
138TEST_F(SideEffectTrackingDBTest, NullifierWrite)
146 EXPECT_CALL(
mock_tracker, add_nullifier(siloed_nullifier));
148 db.nullifier_write(contract_addr,
nullifier);
151TEST_F(SideEffectTrackingDBTest, SiloedNullifierWrite)
162TEST_F(SideEffectTrackingDBTest, NoteHashWrite)
175 EXPECT_CALL(
mock_tracker, add_note_hash(unique_note_hash));
177 db.note_hash_write(contract_addr,
note_hash);
180TEST_F(SideEffectTrackingDBTest, SiloedNoteHashWrite)
186 FF siloed_note_hash(555);
190 EXPECT_CALL(
mock_merkle_db, siloed_note_hash_write(siloed_note_hash));
191 EXPECT_CALL(
mock_tracker, add_note_hash(unique_note_hash));
193 db.siloed_note_hash_write(siloed_note_hash);
196TEST_F(SideEffectTrackingDBTest, UniqueNoteHashWrite)
199 FF unique_note_hash(444);
201 EXPECT_CALL(
mock_merkle_db, unique_note_hash_write(unique_note_hash));
202 EXPECT_CALL(
mock_tracker, add_note_hash(unique_note_hash));
204 db.unique_note_hash_write(unique_note_hash);
207TEST_F(SideEffectTrackingDBTest, CreateCheckpoint)
214 db.create_checkpoint();
217TEST_F(SideEffectTrackingDBTest, CommitCheckpoint)
224 db.commit_checkpoint();
227TEST_F(SideEffectTrackingDBTest, RevertCheckpoint)
234 db.revert_checkpoint();
237TEST_F(SideEffectTrackingDBTest, PadTrees)
std::shared_ptr< Napi::ThreadSafeFunction > revert_checkpoint
std::shared_ptr< Napi::ThreadSafeFunction > commit_checkpoint
std::shared_ptr< Napi::ThreadSafeFunction > create_checkpoint
FF unconstrained_make_unique_note_hash(const FF &siloed_note_hash, const FF &first_nullifier, uint64_t note_hash_counter)
FF unconstrained_compute_leaf_slot(const AztecAddress &contract_address, const FF &slot)
FF unconstrained_silo_note_hash(const AztecAddress &contract_address, const FF ¬e_hash)
FF unconstrained_silo_nullifier(const AztecAddress &contract_address, const FF &nullifier)
TEST_F(IPATest, ChallengesAreZero)
TrackedSideEffects tracked_effects
StrictMock< MockSideEffectTracker > mock_tracker
StrictMock< MockHighLevelMerkleDB > mock_merkle_db
std::vector< FF > note_hashes