4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
10using ::testing::ElementsAre;
12using ::testing::IsEmpty;
14using ::testing::UnorderedElementsAre;
16TEST(SideEffectTrackerTest, GetNumUnencryptedLogFields)
18 TrackedSideEffects side_effect_states = { .public_logs = {} };
19 EXPECT_EQ(side_effect_states.get_num_unencrypted_log_fields(), 0);
21 side_effect_states.public_logs.add_log(PublicLog{ { 1, 2 }, 0xdeadbeef });
24 side_effect_states.public_logs.add_log(PublicLog{ {
35TEST(SideEffectTrackerTest, AddNullifier)
37 SideEffectTracker tracker;
38 EXPECT_THAT(tracker.get_side_effects().nullifiers, IsEmpty());
40 tracker.add_nullifier(
FF(123));
41 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(123)));
43 tracker.add_nullifier(
FF(456));
44 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(123),
FF(456)));
47TEST(SideEffectTrackerTest, AddNoteHash)
49 SideEffectTracker tracker;
50 EXPECT_THAT(tracker.get_side_effects().note_hashes, IsEmpty());
52 tracker.add_note_hash(
FF(789));
53 EXPECT_THAT(tracker.get_side_effects().note_hashes, ElementsAre(
FF(789)));
55 tracker.add_note_hash(
FF(101112));
56 EXPECT_THAT(tracker.get_side_effects().note_hashes, ElementsAre(
FF(789),
FF(101112)));
59TEST(SideEffectTrackerTest, AddL2ToL1Message)
61 SideEffectTracker tracker;
62 EXPECT_THAT(tracker.get_side_effects().l2_to_l1_messages, IsEmpty());
68 tracker.add_l2_to_l1_message(contract_addr, recipient, content);
69 EXPECT_THAT(tracker.get_side_effects().l2_to_l1_messages,
70 ElementsAre(ScopedL2ToL1Message{ .message = { .recipient = recipient, .content = content },
71 .contract_address = contract_addr }));
74TEST(SideEffectTrackerTest, AddPublicLog)
76 SideEffectTracker tracker;
77 EXPECT_EQ(tracker.get_side_effects().public_logs.length, 0);
80 std::vector<FF> fields = {
FF(1),
FF(2),
FF(3) };
82 tracker.add_public_log(contract_addr, fields);
84 PublicLogs expected_logs =
86 EXPECT_EQ(tracker.get_side_effects().public_logs, expected_logs);
89TEST(SideEffectTrackerTest, AddStorageWrite)
91 SideEffectTracker tracker;
92 EXPECT_THAT(tracker.get_side_effects().storage_writes_slots_by_insertion, IsEmpty());
96 tracker.add_storage_write(slot1, value1);
97 EXPECT_THAT(tracker.get_side_effects().storage_writes_slot_to_value, UnorderedElementsAre(Pair(slot1, value1)));
98 EXPECT_THAT(tracker.get_side_effects().storage_writes_slots_by_insertion, ElementsAre(slot1));
101TEST(SideEffectTrackerTest, AddStorageWriteOverwrite)
103 SideEffectTracker tracker;
108 tracker.add_storage_write(
slot, value1);
109 EXPECT_THAT(tracker.get_side_effects().storage_writes_slot_to_value, UnorderedElementsAre(Pair(
slot, value1)));
110 EXPECT_THAT(tracker.get_side_effects().storage_writes_slots_by_insertion, ElementsAre(
slot));
112 tracker.add_storage_write(
slot, value2);
113 EXPECT_THAT(tracker.get_side_effects().storage_writes_slot_to_value, UnorderedElementsAre(Pair(
slot, value2)));
114 EXPECT_THAT(tracker.get_side_effects().storage_writes_slots_by_insertion, ElementsAre(
slot));
117TEST(SideEffectTrackerTest, CreateAndCommitCheckpoint)
119 SideEffectTracker tracker;
121 auto expect_contents = [&]() {
122 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(1),
FF(3)));
123 EXPECT_THAT(tracker.get_side_effects().note_hashes, ElementsAre(
FF(2),
FF(4)));
124 EXPECT_THAT(tracker.get_side_effects().storage_writes_slots_by_insertion,
125 ElementsAre(
FF(100),
FF(200),
FF(400)));
126 EXPECT_THAT(tracker.get_side_effects().storage_writes_slot_to_value,
127 UnorderedElementsAre(Pair(
FF(100),
FF(300)), Pair(
FF(200),
FF(300)), Pair(
FF(400),
FF(400))));
128 EXPECT_THAT(tracker.get_side_effects().public_logs,
130 { PublicLog{ .fields = {
FF(1),
FF(2),
FF(3) }, .contract_address =
AztecAddress(0x1234) },
131 PublicLog{ .fields = {
FF(4),
FF(5),
FF(6) }, .contract_address =
AztecAddress(0x2222) } })));
133 tracker.get_side_effects().l2_to_l1_messages,
134 ElementsAre(ScopedL2ToL1Message{ .message = { .recipient =
EthAddress(0x5678), .content =
FF(999) },
136 ScopedL2ToL1Message{ .message = { .recipient =
EthAddress(0x3333), .content =
FF(1000) },
140 tracker.add_nullifier(
FF(1));
141 tracker.add_note_hash(
FF(2));
142 tracker.add_storage_write(
FF(100),
FF(200));
143 tracker.add_storage_write(
FF(200),
FF(300));
146 tracker.create_checkpoint();
148 tracker.add_nullifier(
FF(3));
149 tracker.add_note_hash(
FF(4));
150 tracker.add_storage_write(
FF(100),
FF(300));
151 tracker.add_storage_write(
FF(400),
FF(400));
157 tracker.commit_checkpoint();
162TEST(SideEffectTrackerTest, CreateAndRevertCheckpoint)
164 SideEffectTracker tracker;
166 auto expect_contents = [&]() {
167 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(1)));
168 EXPECT_THAT(tracker.get_side_effects().note_hashes, ElementsAre(
FF(2)));
169 EXPECT_THAT(tracker.get_side_effects().storage_writes_slots_by_insertion, ElementsAre(
FF(100),
FF(200)));
170 EXPECT_EQ(tracker.get_side_effects().storage_writes_slot_to_value.at(
FF(100)),
FF(200));
171 EXPECT_EQ(tracker.get_side_effects().storage_writes_slot_to_value.at(
FF(200)),
FF(300));
172 EXPECT_THAT(tracker.get_side_effects().public_logs,
174 { PublicLog{ .fields = {
FF(1),
FF(2),
FF(3) }, .contract_address =
AztecAddress(0x1234) } })));
175 EXPECT_THAT(tracker.get_side_effects().l2_to_l1_messages,
176 ElementsAre(ScopedL2ToL1Message{ .message = { .recipient =
EthAddress(0x5678), .content =
FF(999) },
180 tracker.add_nullifier(
FF(1));
181 tracker.add_note_hash(
FF(2));
182 tracker.add_storage_write(
FF(100),
FF(200));
183 tracker.add_storage_write(
FF(200),
FF(300));
186 tracker.create_checkpoint();
190 tracker.add_nullifier(
FF(3));
191 tracker.add_note_hash(
FF(4));
192 tracker.add_storage_write(
FF(100),
FF(300));
193 tracker.add_storage_write(
FF(400),
FF(400));
196 tracker.revert_checkpoint();
201TEST(SideEffectTrackerTest, NestedCheckpoints)
203 SideEffectTracker tracker;
204 tracker.add_nullifier(
FF(1));
206 tracker.create_checkpoint();
207 tracker.add_nullifier(
FF(2));
209 tracker.create_checkpoint();
210 tracker.add_nullifier(
FF(3));
211 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(1),
FF(2),
FF(3)));
213 tracker.commit_checkpoint();
214 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(1),
FF(2),
FF(3)));
216 tracker.revert_checkpoint();
217 EXPECT_THAT(tracker.get_side_effects().nullifiers, ElementsAre(
FF(1)));
#define PUBLIC_LOG_HEADER_LENGTH
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
static PublicLogs from_logs(const std::vector< PublicLog > &logs)