Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
l1_to_l2_message_tree_check.test.cpp
Go to the documentation of this file.
1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
3
4#include <cmath>
5#include <cstdint>
6
24
25namespace bb::avm2::constraining {
26namespace {
27
28using simulation::EventEmitter;
29using simulation::FakePoseidon2;
30using simulation::L1ToL2MessageTreeCheck;
31using simulation::MerkleCheck;
32using simulation::MerkleCheckEvent;
34
35using tracegen::L1ToL2MessageTreeCheckTraceBuilder;
36using tracegen::MerkleCheckTraceBuilder;
37using tracegen::TestTraceContainer;
38
40using C = Column;
41using l1_to_l2_message_tree_check_relations = bb::avm2::l1_to_l2_message_tree_check<FF>;
43
44TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveExists)
45{
46 FakePoseidon2 poseidon2 = FakePoseidon2();
47
48 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
49 MerkleCheck merkle_check(poseidon2, merkle_event_emitter);
50
51 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
52 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
53
54 TestTraceContainer trace({ { { C::precomputed_first_row, 1 } } });
55 MerkleCheckTraceBuilder merkle_check_builder;
56 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
57
58 FF msg_hash = 42;
59
60 uint64_t leaf_index = 30;
61 std::vector<FF> sibling_path;
62 sibling_path.reserve(L1_TO_L2_MSG_TREE_HEIGHT);
63 for (size_t i = 0; i < L1_TO_L2_MSG_TREE_HEIGHT; ++i) {
64 sibling_path.emplace_back(i);
65 }
66 FF root = unconstrained_root_from_path(msg_hash, leaf_index, sibling_path);
67
68 EXPECT_TRUE(
69 l1_to_l2_message_tree_check.exists(msg_hash,
70 msg_hash,
71 leaf_index,
72 sibling_path,
73 AppendOnlyTreeSnapshot{ .root = root, .nextAvailableLeafIndex = 128 }));
74
75 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(), trace);
76 merkle_check_builder.process(merkle_event_emitter.dump_events(), trace);
77
78 check_relation<l1_to_l2_message_tree_check_relations>(trace);
79 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(trace);
80}
81
82TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveNotExists)
83{
84 FakePoseidon2 poseidon2 = FakePoseidon2();
85
86 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
87 MerkleCheck merkle_check(poseidon2, merkle_event_emitter);
88
89 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
90 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
91
92 TestTraceContainer trace({ { { C::precomputed_first_row, 1 } } });
93 MerkleCheckTraceBuilder merkle_check_builder;
94 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
95
96 FF requested_msg_hash = 42;
97 FF actual_leaf_value = 43;
98
99 uint64_t leaf_index = 30;
100 std::vector<FF> sibling_path;
101 sibling_path.reserve(L1_TO_L2_MSG_TREE_HEIGHT);
102 for (size_t i = 0; i < L1_TO_L2_MSG_TREE_HEIGHT; ++i) {
103 sibling_path.emplace_back(i);
104 }
105 FF root = unconstrained_root_from_path(actual_leaf_value, leaf_index, sibling_path);
106
107 EXPECT_FALSE(
108 l1_to_l2_message_tree_check.exists(requested_msg_hash,
109 actual_leaf_value,
110 leaf_index,
111 sibling_path,
112 AppendOnlyTreeSnapshot{ .root = root, .nextAvailableLeafIndex = 128 }));
113
114 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(), trace);
115 merkle_check_builder.process(merkle_event_emitter.dump_events(), trace);
116
117 check_relation<l1_to_l2_message_tree_check_relations>(trace);
118 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(trace);
119}
120
121} // namespace
122} // namespace bb::avm2::constraining
#define L1_TO_L2_MSG_TREE_HEIGHT
TestTraceContainer trace
TEST(TxExecutionConstrainingTest, WriteTreeValue)
Definition tx.test.cpp:508
FF unconstrained_root_from_path(const FF &leaf_value, const uint64_t leaf_index, std::span< const FF > path)
Definition merkle.cpp:12
typename Flavor::FF FF