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
25
26namespace bb::avm2::constraining {
27namespace {
28
29using simulation::EventEmitter;
30using simulation::L1ToL2MessageTreeCheck;
31using simulation::MerkleCheck;
32using simulation::MerkleCheckEvent;
33using simulation::PurePoseidon2;
35
36using tracegen::L1ToL2MessageTreeCheckTraceBuilder;
37using tracegen::MerkleCheckTraceBuilder;
38using tracegen::TestTraceContainer;
39
41using C = Column;
42using l1_to_l2_message_tree_check_relations = bb::avm2::l1_to_l2_message_tree_check<FF>;
44
45TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveExists)
46{
47 PurePoseidon2 poseidon2 = PurePoseidon2();
48
49 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
50 MerkleCheck merkle_check(poseidon2, merkle_event_emitter);
51
52 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
53 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
54
55 TestTraceContainer trace({ { { C::precomputed_first_row, 1 } } });
56 MerkleCheckTraceBuilder merkle_check_builder;
57 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
58
59 FF msg_hash = 42;
60
61 uint64_t leaf_index = 30;
62 std::vector<FF> sibling_path;
63 sibling_path.reserve(L1_TO_L2_MSG_TREE_HEIGHT);
64 for (size_t i = 0; i < L1_TO_L2_MSG_TREE_HEIGHT; ++i) {
65 sibling_path.emplace_back(i);
66 }
67 FF root = unconstrained_root_from_path(msg_hash, leaf_index, sibling_path);
68
69 EXPECT_TRUE(
70 l1_to_l2_message_tree_check.exists(msg_hash,
71 msg_hash,
72 leaf_index,
73 sibling_path,
74 AppendOnlyTreeSnapshot{ .root = root, .next_available_leaf_index = 128 }));
75
76 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(), trace);
77 merkle_check_builder.process(merkle_event_emitter.dump_events(), trace);
78
79 check_relation<l1_to_l2_message_tree_check_relations>(trace);
80 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(trace);
81}
82
83TEST(L1ToL2MessageTreeCheckConstrainingTests, PositiveNotExists)
84{
85 PurePoseidon2 poseidon2 = PurePoseidon2();
86
87 EventEmitter<MerkleCheckEvent> merkle_event_emitter;
88 MerkleCheck merkle_check(poseidon2, merkle_event_emitter);
89
90 EventEmitter<simulation::L1ToL2MessageTreeCheckEvent> l1_to_l2_message_tree_check_event_emitter;
91 L1ToL2MessageTreeCheck l1_to_l2_message_tree_check(merkle_check, l1_to_l2_message_tree_check_event_emitter);
92
93 TestTraceContainer trace({ { { C::precomputed_first_row, 1 } } });
94 MerkleCheckTraceBuilder merkle_check_builder;
95 L1ToL2MessageTreeCheckTraceBuilder l1_to_l2_message_tree_check_builder;
96
97 FF requested_msg_hash = 42;
98 FF actual_leaf_value = 43;
99
100 uint64_t leaf_index = 30;
101 std::vector<FF> sibling_path;
102 sibling_path.reserve(L1_TO_L2_MSG_TREE_HEIGHT);
103 for (size_t i = 0; i < L1_TO_L2_MSG_TREE_HEIGHT; ++i) {
104 sibling_path.emplace_back(i);
105 }
106 FF root = unconstrained_root_from_path(actual_leaf_value, leaf_index, sibling_path);
107
108 EXPECT_FALSE(
109 l1_to_l2_message_tree_check.exists(requested_msg_hash,
110 actual_leaf_value,
111 leaf_index,
112 sibling_path,
113 AppendOnlyTreeSnapshot{ .root = root, .next_available_leaf_index = 128 }));
114
115 l1_to_l2_message_tree_check_builder.process(l1_to_l2_message_tree_check_event_emitter.dump_events(), trace);
116 merkle_check_builder.process(merkle_event_emitter.dump_events(), trace);
117
118 check_relation<l1_to_l2_message_tree_check_relations>(trace);
119 check_all_interactions<L1ToL2MessageTreeCheckTraceBuilder>(trace);
120}
121
122} // namespace
123} // namespace bb::avm2::constraining
#define L1_TO_L2_MSG_TREE_HEIGHT
MerkleCheck merkle_check
TestTraceContainer trace
TEST(AvmFixedVKTests, FixedVKCommitments)
Test that the fixed VK commitments agree with the ones computed from precomputed columns.
FF unconstrained_root_from_path(const FF &leaf_value, const uint64_t leaf_index, std::span< const FF > path)
Definition merkle.cpp:12