Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
merkle_check_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void merkle_checkImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto merkle_check_NOT_END = in.get(C::merkle_check_sel) * (FF(1) - in.get(C::merkle_check_end));
19 const auto merkle_check_LATCH_CONDITION = in.get(C::merkle_check_end) + in.get(C::precomputed_first_row);
20 const auto merkle_check_REMAINING_PATH_LEN = (in.get(C::merkle_check_path_len) - FF(1));
21 const auto merkle_check_INDEX_IS_ODD = (FF(1) - in.get(C::merkle_check_index_is_even));
22
23 {
24 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
25 auto tmp =
26 static_cast<View>(in.get(C::merkle_check_sel)) * (FF(1) - static_cast<View>(in.get(C::merkle_check_sel)));
27 std::get<0>(evals) += (tmp * scaling_factor);
28 }
29 { // TRACE_CONTINUITY
30 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
31 auto tmp = (FF(1) - static_cast<View>(in.get(C::precomputed_first_row))) *
32 (FF(1) - static_cast<View>(in.get(C::merkle_check_sel))) *
33 static_cast<View>(in.get(C::merkle_check_sel_shift));
34 std::get<1>(evals) += (tmp * scaling_factor);
35 }
36 {
37 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
38 auto tmp = static_cast<View>(in.get(C::merkle_check_write)) *
39 (FF(1) - static_cast<View>(in.get(C::merkle_check_write)));
40 std::get<2>(evals) += (tmp * scaling_factor);
41 }
42 {
43 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
44 auto tmp = static_cast<View>(in.get(C::merkle_check_start)) *
45 (FF(1) - static_cast<View>(in.get(C::merkle_check_start)));
46 std::get<3>(evals) += (tmp * scaling_factor);
47 }
48 {
49 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
50 auto tmp =
51 static_cast<View>(in.get(C::merkle_check_end)) * (FF(1) - static_cast<View>(in.get(C::merkle_check_end)));
52 std::get<4>(evals) += (tmp * scaling_factor);
53 }
54 {
55 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
56 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) * static_cast<View>(in.get(C::precomputed_first_row));
57 std::get<5>(evals) += (tmp * scaling_factor);
58 }
59 { // START_AFTER_LATCH
60 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
61 auto tmp = static_cast<View>(in.get(C::merkle_check_sel_shift)) *
62 (static_cast<View>(in.get(C::merkle_check_start_shift)) - CView(merkle_check_LATCH_CONDITION));
63 std::get<6>(evals) += (tmp * scaling_factor);
64 }
65 { // SELECTOR_ON_END
66 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
67 auto tmp =
68 static_cast<View>(in.get(C::merkle_check_end)) * (FF(1) - static_cast<View>(in.get(C::merkle_check_sel)));
69 std::get<7>(evals) += (tmp * scaling_factor);
70 }
71 { // PROPAGATE_READ_ROOT
72 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
73 auto tmp = CView(merkle_check_NOT_END) * (static_cast<View>(in.get(C::merkle_check_read_root_shift)) -
74 static_cast<View>(in.get(C::merkle_check_read_root)));
75 std::get<8>(evals) += (tmp * scaling_factor);
76 }
77 { // PROPAGATE_WRITE
78 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
79 auto tmp = CView(merkle_check_NOT_END) * (static_cast<View>(in.get(C::merkle_check_write_shift)) -
80 static_cast<View>(in.get(C::merkle_check_write)));
81 std::get<9>(evals) += (tmp * scaling_factor);
82 }
83 { // PROPAGATE_WRITE_ROOT
84 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
85 auto tmp = CView(merkle_check_NOT_END) * (static_cast<View>(in.get(C::merkle_check_write_root_shift)) -
86 static_cast<View>(in.get(C::merkle_check_write_root)));
87 std::get<10>(evals) += (tmp * scaling_factor);
88 }
89 { // PATH_LEN_DECREMENTS
90 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
91 auto tmp = CView(merkle_check_NOT_END) * ((static_cast<View>(in.get(C::merkle_check_path_len_shift)) -
92 static_cast<View>(in.get(C::merkle_check_path_len))) +
93 FF(1));
94 std::get<11>(evals) += (tmp * scaling_factor);
95 }
96 { // END_WHEN_PATH_EMPTY
97 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
98 auto tmp = static_cast<View>(in.get(C::merkle_check_sel)) *
99 ((CView(merkle_check_REMAINING_PATH_LEN) *
100 (static_cast<View>(in.get(C::merkle_check_end)) *
101 (FF(1) - static_cast<View>(in.get(C::merkle_check_remaining_path_len_inv))) +
102 static_cast<View>(in.get(C::merkle_check_remaining_path_len_inv))) -
103 FF(1)) +
104 static_cast<View>(in.get(C::merkle_check_end)));
105 std::get<12>(evals) += (tmp * scaling_factor);
106 }
107 {
108 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
109 auto tmp = static_cast<View>(in.get(C::merkle_check_index_is_even)) *
110 (FF(1) - static_cast<View>(in.get(C::merkle_check_index_is_even)));
111 std::get<13>(evals) += (tmp * scaling_factor);
112 }
113 { // NEXT_INDEX_IS_HALVED
114 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
115 auto tmp =
116 CView(merkle_check_NOT_END) *
117 ((static_cast<View>(in.get(C::merkle_check_index_shift)) * FF(2) + CView(merkle_check_INDEX_IS_ODD)) -
118 static_cast<View>(in.get(C::merkle_check_index)));
119 std::get<14>(evals) += (tmp * scaling_factor);
120 }
121 { // FINAL_INDEX_IS_0_OR_1
122 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
123 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) * static_cast<View>(in.get(C::merkle_check_index)) *
124 (FF(1) - static_cast<View>(in.get(C::merkle_check_index)));
125 std::get<15>(evals) += (tmp * scaling_factor);
126 }
127 { // ASSIGN_NODE_LEFT_OR_RIGHT_READ
128 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
129 auto tmp = static_cast<View>(in.get(C::merkle_check_sel)) *
130 ((static_cast<View>(in.get(C::merkle_check_index_is_even)) *
131 (static_cast<View>(in.get(C::merkle_check_read_left_node)) -
132 static_cast<View>(in.get(C::merkle_check_read_right_node))) +
133 static_cast<View>(in.get(C::merkle_check_read_right_node))) -
134 static_cast<View>(in.get(C::merkle_check_read_node)));
135 std::get<16>(evals) += (tmp * scaling_factor);
136 }
137 { // ASSIGN_SIBLING_LEFT_OR_RIGHT_READ
138 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
139 auto tmp = static_cast<View>(in.get(C::merkle_check_sel)) *
140 ((static_cast<View>(in.get(C::merkle_check_index_is_even)) *
141 (static_cast<View>(in.get(C::merkle_check_read_right_node)) -
142 static_cast<View>(in.get(C::merkle_check_read_left_node))) +
143 static_cast<View>(in.get(C::merkle_check_read_left_node))) -
144 static_cast<View>(in.get(C::merkle_check_sibling)));
145 std::get<17>(evals) += (tmp * scaling_factor);
146 }
147 { // ASSIGN_NODE_LEFT_OR_RIGHT_WRITE
148 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
149 auto tmp = static_cast<View>(in.get(C::merkle_check_write)) *
150 ((static_cast<View>(in.get(C::merkle_check_index_is_even)) *
151 (static_cast<View>(in.get(C::merkle_check_write_left_node)) -
152 static_cast<View>(in.get(C::merkle_check_write_right_node))) +
153 static_cast<View>(in.get(C::merkle_check_write_right_node))) -
154 static_cast<View>(in.get(C::merkle_check_write_node)));
155 std::get<18>(evals) += (tmp * scaling_factor);
156 }
157 { // ASSIGN_SIBLING_LEFT_OR_RIGHT_WRITE
158 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
159 auto tmp = static_cast<View>(in.get(C::merkle_check_write)) *
160 ((static_cast<View>(in.get(C::merkle_check_index_is_even)) *
161 (static_cast<View>(in.get(C::merkle_check_write_right_node)) -
162 static_cast<View>(in.get(C::merkle_check_write_left_node))) +
163 static_cast<View>(in.get(C::merkle_check_write_left_node))) -
164 static_cast<View>(in.get(C::merkle_check_sibling)));
165 std::get<19>(evals) += (tmp * scaling_factor);
166 }
167 { // OUTPUT_HASH_IS_NEXT_ROWS_READ_NODE
168 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
169 auto tmp = CView(merkle_check_NOT_END) * (static_cast<View>(in.get(C::merkle_check_read_node_shift)) -
170 static_cast<View>(in.get(C::merkle_check_read_output_hash)));
171 std::get<20>(evals) += (tmp * scaling_factor);
172 }
173 { // OUTPUT_HASH_IS_NEXT_ROWS_WRITE_NODE
174 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
175 auto tmp = CView(merkle_check_NOT_END) * (static_cast<View>(in.get(C::merkle_check_write_node_shift)) -
176 static_cast<View>(in.get(C::merkle_check_write_output_hash)));
177 std::get<21>(evals) += (tmp * scaling_factor);
178 }
179 { // READ_OUTPUT_HASH_IS_READ_ROOT
180 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
181 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) *
182 (static_cast<View>(in.get(C::merkle_check_read_output_hash)) -
183 static_cast<View>(in.get(C::merkle_check_read_root)));
184 std::get<22>(evals) += (tmp * scaling_factor);
185 }
186 { // WRITE_OUTPUT_HASH_IS_WRITE_ROOT
187 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
188 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) *
189 (static_cast<View>(in.get(C::merkle_check_write_output_hash)) -
190 static_cast<View>(in.get(C::merkle_check_write_root)));
191 std::get<23>(evals) += (tmp * scaling_factor);
192 }
193}
194
195} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:34
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.