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_PATH_LEN_MIN_ONE = (in.get(C::merkle_check_path_len) - FF(1));
19 const auto merkle_check_LATCH_CONDITION = in.get(C::merkle_check_end) + in.get(C::precomputed_first_row);
20 const auto merkle_check_INDEX_IS_ODD = (FF(1) - in.get(C::merkle_check_index_is_even));
21
22 {
23 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
24 auto tmp =
25 static_cast<View>(in.get(C::merkle_check_sel)) * (FF(1) - static_cast<View>(in.get(C::merkle_check_sel)));
26 std::get<0>(evals) += (tmp * scaling_factor);
27 }
28 {
29 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
30 auto tmp = static_cast<View>(in.get(C::merkle_check_start)) *
31 (FF(1) - static_cast<View>(in.get(C::merkle_check_start)));
32 std::get<1>(evals) += (tmp * scaling_factor);
33 }
34 {
35 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
36 auto tmp =
37 static_cast<View>(in.get(C::merkle_check_end)) * (FF(1) - static_cast<View>(in.get(C::merkle_check_end)));
38 std::get<2>(evals) += (tmp * scaling_factor);
39 }
40 { // END_IFF_REM_PATH_EMPTY
41 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
42 auto tmp = static_cast<View>(in.get(C::merkle_check_sel)) *
43 ((CView(merkle_check_PATH_LEN_MIN_ONE) *
44 (static_cast<View>(in.get(C::merkle_check_end)) *
45 (FF(1) - static_cast<View>(in.get(C::merkle_check_path_len_min_one_inv))) +
46 static_cast<View>(in.get(C::merkle_check_path_len_min_one_inv))) -
47 FF(1)) +
48 static_cast<View>(in.get(C::merkle_check_end)));
49 std::get<3>(evals) += (tmp * scaling_factor);
50 }
51 { // COMPUTATION_FINISH_AT_END
52 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
53 auto tmp = static_cast<View>(in.get(C::merkle_check_sel)) *
54 (FF(1) - static_cast<View>(in.get(C::merkle_check_sel_shift))) *
55 (FF(1) - static_cast<View>(in.get(C::merkle_check_end)));
56 std::get<4>(evals) += (tmp * scaling_factor);
57 }
58 { // SELECTOR_ON_START_OR_END
59 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
60 auto tmp = (static_cast<View>(in.get(C::merkle_check_start)) + static_cast<View>(in.get(C::merkle_check_end))) *
61 (FF(1) - static_cast<View>(in.get(C::merkle_check_sel)));
62 std::get<5>(evals) += (tmp * scaling_factor);
63 }
64 { // PROPAGATE_READ_ROOT
65 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
66 auto tmp = (FF(1) - CView(merkle_check_LATCH_CONDITION)) *
67 (static_cast<View>(in.get(C::merkle_check_read_root_shift)) -
68 static_cast<View>(in.get(C::merkle_check_read_root)));
69 std::get<6>(evals) += (tmp * scaling_factor);
70 }
71 { // PROPAGATE_WRITE
72 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
73 auto tmp =
74 (FF(1) - CView(merkle_check_LATCH_CONDITION)) *
75 (static_cast<View>(in.get(C::merkle_check_write_shift)) - static_cast<View>(in.get(C::merkle_check_write)));
76 std::get<7>(evals) += (tmp * scaling_factor);
77 }
78 { // PROPAGATE_WRITE_ROOT
79 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
80 auto tmp = (FF(1) - CView(merkle_check_LATCH_CONDITION)) *
81 (static_cast<View>(in.get(C::merkle_check_write_root_shift)) -
82 static_cast<View>(in.get(C::merkle_check_write_root)));
83 std::get<8>(evals) += (tmp * scaling_factor);
84 }
85 { // PATH_LEN_DECREMENTS
86 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
87 auto tmp = static_cast<View>(in.get(C::merkle_check_sel)) *
88 (FF(1) - static_cast<View>(in.get(C::merkle_check_end))) *
89 ((static_cast<View>(in.get(C::merkle_check_path_len_shift)) -
90 static_cast<View>(in.get(C::merkle_check_path_len))) +
91 FF(1));
92 std::get<9>(evals) += (tmp * scaling_factor);
93 }
94 {
95 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
96 auto tmp = static_cast<View>(in.get(C::merkle_check_index_is_even)) *
97 (FF(1) - static_cast<View>(in.get(C::merkle_check_index_is_even)));
98 std::get<10>(evals) += (tmp * scaling_factor);
99 }
100 { // NEXT_INDEX_IS_HALVED
101 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
102 auto tmp =
103 static_cast<View>(in.get(C::merkle_check_sel)) * (FF(1) - static_cast<View>(in.get(C::merkle_check_end))) *
104 ((FF(2) * static_cast<View>(in.get(C::merkle_check_index_shift)) + CView(merkle_check_INDEX_IS_ODD)) -
105 static_cast<View>(in.get(C::merkle_check_index)));
106 std::get<11>(evals) += (tmp * scaling_factor);
107 }
108 { // FINAL_INDEX_EQUAL_TO_FIRST_BIT
109 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
110 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) *
111 (static_cast<View>(in.get(C::merkle_check_index)) - CView(merkle_check_INDEX_IS_ODD));
112 std::get<12>(evals) += (tmp * scaling_factor);
113 }
114 { // READ_LEFT_NODE
115 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
116 auto tmp = (static_cast<View>(in.get(C::merkle_check_read_left_node)) -
117 (static_cast<View>(in.get(C::merkle_check_index_is_even)) *
118 (static_cast<View>(in.get(C::merkle_check_read_node)) -
119 static_cast<View>(in.get(C::merkle_check_sibling))) +
120 static_cast<View>(in.get(C::merkle_check_sibling))));
121 std::get<13>(evals) += (tmp * scaling_factor);
122 }
123 { // READ_RIGHT_NODE
124 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
125 auto tmp = (static_cast<View>(in.get(C::merkle_check_read_right_node)) -
126 (static_cast<View>(in.get(C::merkle_check_index_is_even)) *
127 (static_cast<View>(in.get(C::merkle_check_sibling)) -
128 static_cast<View>(in.get(C::merkle_check_read_node))) +
129 static_cast<View>(in.get(C::merkle_check_read_node))));
130 std::get<14>(evals) += (tmp * scaling_factor);
131 }
132 { // WRITE_LEFT_NODE
133 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
134 auto tmp = (static_cast<View>(in.get(C::merkle_check_write_left_node)) -
135 static_cast<View>(in.get(C::merkle_check_write)) *
136 (static_cast<View>(in.get(C::merkle_check_index_is_even)) *
137 (static_cast<View>(in.get(C::merkle_check_write_node)) -
138 static_cast<View>(in.get(C::merkle_check_sibling))) +
139 static_cast<View>(in.get(C::merkle_check_sibling))));
140 std::get<15>(evals) += (tmp * scaling_factor);
141 }
142 { // WRITE_RIGHT_NODE
143 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
144 auto tmp = (static_cast<View>(in.get(C::merkle_check_write_right_node)) -
145 static_cast<View>(in.get(C::merkle_check_write)) *
146 (static_cast<View>(in.get(C::merkle_check_index_is_even)) *
147 (static_cast<View>(in.get(C::merkle_check_sibling)) -
148 static_cast<View>(in.get(C::merkle_check_write_node))) +
149 static_cast<View>(in.get(C::merkle_check_write_node))));
150 std::get<16>(evals) += (tmp * scaling_factor);
151 }
152 { // OUTPUT_HASH_IS_NEXT_ROWS_READ_NODE
153 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
154 auto tmp = (FF(1) - CView(merkle_check_LATCH_CONDITION)) *
155 (static_cast<View>(in.get(C::merkle_check_read_node_shift)) -
156 static_cast<View>(in.get(C::merkle_check_read_output_hash)));
157 std::get<17>(evals) += (tmp * scaling_factor);
158 }
159 { // OUTPUT_HASH_IS_NEXT_ROWS_WRITE_NODE
160 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
161 auto tmp = (FF(1) - CView(merkle_check_LATCH_CONDITION)) *
162 (static_cast<View>(in.get(C::merkle_check_write_node_shift)) -
163 static_cast<View>(in.get(C::merkle_check_write_output_hash)));
164 std::get<18>(evals) += (tmp * scaling_factor);
165 }
166 { // READ_OUTPUT_HASH_IS_READ_ROOT
167 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
168 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) *
169 (static_cast<View>(in.get(C::merkle_check_read_output_hash)) -
170 static_cast<View>(in.get(C::merkle_check_read_root)));
171 std::get<19>(evals) += (tmp * scaling_factor);
172 }
173 { // WRITE_OUTPUT_HASH_IS_WRITE_ROOT
174 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
175 auto tmp = static_cast<View>(in.get(C::merkle_check_end)) *
176 (static_cast<View>(in.get(C::merkle_check_write_output_hash)) -
177 static_cast<View>(in.get(C::merkle_check_write_root)));
178 std::get<20>(evals) += (tmp * scaling_factor);
179 }
180}
181
182} // 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.