Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
lookups_tx.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
4#include <cstddef>
5#include <string_view>
6#include <tuple>
7
8#include "../columns.hpp"
11
12namespace bb::avm2 {
13
15
17 static constexpr std::string_view NAME = "LOOKUP_TX_READ_PHASE_SPEC";
18 static constexpr std::string_view RELATION_NAME = "tx";
19 static constexpr size_t LOOKUP_TUPLE_SIZE = 13;
20 static constexpr Column SRC_SELECTOR = Column::tx_sel;
21 static constexpr Column DST_SELECTOR = Column::precomputed_sel_phase;
22 static constexpr Column COUNTS = Column::lookup_tx_read_phase_spec_counts;
23 static constexpr Column INVERSES = Column::lookup_tx_read_phase_spec_inv;
24 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
25 ColumnAndShifts::tx_phase_value, ColumnAndShifts::tx_is_public_call_request,
26 ColumnAndShifts::tx_is_teardown, ColumnAndShifts::tx_is_collect_fee,
27 ColumnAndShifts::tx_is_tree_padding, ColumnAndShifts::tx_is_cleanup,
28 ColumnAndShifts::tx_is_revertible, ColumnAndShifts::tx_read_pi_start_offset,
29 ColumnAndShifts::tx_read_pi_length_offset, ColumnAndShifts::tx_sel_append_note_hash,
30 ColumnAndShifts::tx_sel_append_nullifier, ColumnAndShifts::tx_sel_append_l2_l1_msg,
31 ColumnAndShifts::tx_next_phase_on_revert
32 };
33 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
34 ColumnAndShifts::precomputed_idx,
35 ColumnAndShifts::precomputed_is_public_call_request,
36 ColumnAndShifts::precomputed_is_teardown,
37 ColumnAndShifts::precomputed_is_collect_fee,
38 ColumnAndShifts::precomputed_is_tree_padding,
39 ColumnAndShifts::precomputed_is_cleanup,
40 ColumnAndShifts::precomputed_is_revertible,
41 ColumnAndShifts::precomputed_read_pi_start_offset,
42 ColumnAndShifts::precomputed_read_pi_length_offset,
43 ColumnAndShifts::precomputed_sel_append_note_hash,
44 ColumnAndShifts::precomputed_sel_append_nullifier,
45 ColumnAndShifts::precomputed_sel_append_l2_l1_msg,
46 ColumnAndShifts::precomputed_next_phase_on_revert
47 };
48};
49
51template <typename FF_>
53
55
57 static constexpr std::string_view NAME = "LOOKUP_TX_READ_PHASE_LENGTH";
58 static constexpr std::string_view RELATION_NAME = "tx";
59 static constexpr size_t LOOKUP_TUPLE_SIZE = 2;
60 static constexpr Column SRC_SELECTOR = Column::tx_sel_read_phase_length;
61 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
62 static constexpr Column COUNTS = Column::lookup_tx_read_phase_length_counts;
63 static constexpr Column INVERSES = Column::lookup_tx_read_phase_length_inv;
64 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
65 ColumnAndShifts::tx_read_pi_length_offset, ColumnAndShifts::tx_remaining_phase_counter
66 };
67 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
68 ColumnAndShifts::precomputed_idx, ColumnAndShifts::public_inputs_cols_0_
69 };
70};
71
73template <typename FF_>
75
77
79 static constexpr std::string_view NAME = "LOOKUP_TX_READ_PUBLIC_CALL_REQUEST_PHASE";
80 static constexpr std::string_view RELATION_NAME = "tx";
81 static constexpr size_t LOOKUP_TUPLE_SIZE = 5;
82 static constexpr Column SRC_SELECTOR = Column::tx_sel_process_call_request;
83 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
84 static constexpr Column COUNTS = Column::lookup_tx_read_public_call_request_phase_counts;
85 static constexpr Column INVERSES = Column::lookup_tx_read_public_call_request_phase_inv;
86 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = { ColumnAndShifts::tx_read_pi_offset,
87 ColumnAndShifts::tx_msg_sender,
88 ColumnAndShifts::tx_contract_addr,
89 ColumnAndShifts::tx_is_static,
90 ColumnAndShifts::tx_calldata_hash };
91 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
92 ColumnAndShifts::precomputed_idx,
93 ColumnAndShifts::public_inputs_cols_0_,
94 ColumnAndShifts::public_inputs_cols_1_,
95 ColumnAndShifts::public_inputs_cols_2_,
96 ColumnAndShifts::public_inputs_cols_3_
97 };
98};
99
102template <typename FF_>
105
107
109 static constexpr std::string_view NAME = "LOOKUP_TX_READ_TREE_INSERT_VALUE";
110 static constexpr std::string_view RELATION_NAME = "tx";
111 static constexpr size_t LOOKUP_TUPLE_SIZE = 2;
112 static constexpr Column SRC_SELECTOR = Column::tx_is_tree_insert_phase;
113 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
114 static constexpr Column COUNTS = Column::lookup_tx_read_tree_insert_value_counts;
115 static constexpr Column INVERSES = Column::lookup_tx_read_tree_insert_value_inv;
116 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = { ColumnAndShifts::tx_read_pi_offset,
117 ColumnAndShifts::tx_leaf_value };
118 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
119 ColumnAndShifts::precomputed_idx, ColumnAndShifts::public_inputs_cols_0_
120 };
121};
122
124template <typename FF_>
126
128
130 static constexpr std::string_view NAME = "LOOKUP_TX_NOTE_HASH_APPEND";
131 static constexpr std::string_view RELATION_NAME = "tx";
132 static constexpr size_t LOOKUP_TUPLE_SIZE = 8;
133 static constexpr Column SRC_SELECTOR = Column::tx_sel_note_hash_append;
134 static constexpr Column DST_SELECTOR = Column::note_hash_tree_check_write;
135 static constexpr Column COUNTS = Column::lookup_tx_note_hash_append_counts;
136 static constexpr Column INVERSES = Column::lookup_tx_note_hash_append_inv;
137 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
138 ColumnAndShifts::tx_leaf_value,
139 ColumnAndShifts::tx_prev_note_hash_tree_size,
140 ColumnAndShifts::tx_prev_note_hash_tree_root,
141 ColumnAndShifts::precomputed_zero,
142 ColumnAndShifts::tx_is_revertible,
143 ColumnAndShifts::tx_prev_num_note_hashes_emitted,
144 ColumnAndShifts::tx_discard,
145 ColumnAndShifts::tx_next_note_hash_tree_root
146 };
147 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
148 ColumnAndShifts::note_hash_tree_check_note_hash, ColumnAndShifts::note_hash_tree_check_leaf_index,
149 ColumnAndShifts::note_hash_tree_check_prev_root, ColumnAndShifts::note_hash_tree_check_sel_silo,
150 ColumnAndShifts::note_hash_tree_check_sel_unique, ColumnAndShifts::note_hash_tree_check_note_hash_index,
151 ColumnAndShifts::note_hash_tree_check_discard, ColumnAndShifts::note_hash_tree_check_next_root
152 };
153};
154
156template <typename FF_>
158
160
162 static constexpr std::string_view NAME = "LOOKUP_TX_NULLIFIER_APPEND";
163 static constexpr std::string_view RELATION_NAME = "tx";
164 static constexpr size_t LOOKUP_TUPLE_SIZE = 10;
165 static constexpr Column SRC_SELECTOR = Column::tx_sel_nullifier_append;
166 static constexpr Column DST_SELECTOR = Column::indexed_tree_check_write;
167 static constexpr Column COUNTS = Column::lookup_tx_nullifier_append_counts;
168 static constexpr Column INVERSES = Column::lookup_tx_nullifier_append_inv;
169 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
170 ColumnAndShifts::tx_leaf_value,
171 ColumnAndShifts::tx_prev_nullifier_tree_root,
172 ColumnAndShifts::precomputed_zero,
173 ColumnAndShifts::tx_next_nullifier_tree_root,
174 ColumnAndShifts::tx_prev_nullifier_tree_size,
175 ColumnAndShifts::tx_discard,
176 ColumnAndShifts::tx_write_nullifier_pi_offset,
177 ColumnAndShifts::tx_nullifier_tree_height,
178 ColumnAndShifts::tx_nullifier_merkle_separator,
179 ColumnAndShifts::precomputed_zero
180 };
181 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
182 ColumnAndShifts::indexed_tree_check_value,
183 ColumnAndShifts::indexed_tree_check_root,
184 ColumnAndShifts::indexed_tree_check_exists,
185 ColumnAndShifts::indexed_tree_check_write_root,
186 ColumnAndShifts::indexed_tree_check_tree_size_before_write,
187 ColumnAndShifts::indexed_tree_check_discard,
188 ColumnAndShifts::indexed_tree_check_public_inputs_index,
189 ColumnAndShifts::indexed_tree_check_tree_height,
190 ColumnAndShifts::indexed_tree_check_merkle_hash_separator,
191 ColumnAndShifts::indexed_tree_check_sel_silo
192 };
193};
194
196template <typename FF_>
198
200
202 static constexpr std::string_view NAME = "LOOKUP_TX_READ_L2_L1_MSG";
203 static constexpr std::string_view RELATION_NAME = "tx";
204 static constexpr size_t LOOKUP_TUPLE_SIZE = 4;
205 static constexpr Column SRC_SELECTOR = Column::tx_sel_try_l2_l1_msg_append;
206 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
207 static constexpr Column COUNTS = Column::lookup_tx_read_l2_l1_msg_counts;
208 static constexpr Column INVERSES = Column::lookup_tx_read_l2_l1_msg_inv;
209 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
210 ColumnAndShifts::tx_read_pi_offset,
211 ColumnAndShifts::tx_l2_l1_msg_recipient,
212 ColumnAndShifts::tx_l2_l1_msg_content,
213 ColumnAndShifts::tx_l2_l1_msg_contract_address
214 };
215 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
216 ColumnAndShifts::precomputed_idx,
217 ColumnAndShifts::public_inputs_cols_0_,
218 ColumnAndShifts::public_inputs_cols_1_,
219 ColumnAndShifts::public_inputs_cols_2_
220 };
221};
222
224template <typename FF_>
226
228
230 static constexpr std::string_view NAME = "LOOKUP_TX_WRITE_L2_L1_MSG";
231 static constexpr std::string_view RELATION_NAME = "tx";
232 static constexpr size_t LOOKUP_TUPLE_SIZE = 4;
233 static constexpr Column SRC_SELECTOR = Column::tx_sel_l2_l1_msg_append;
234 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
235 static constexpr Column COUNTS = Column::lookup_tx_write_l2_l1_msg_counts;
236 static constexpr Column INVERSES = Column::lookup_tx_write_l2_l1_msg_inv;
237 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
238 ColumnAndShifts::tx_write_pi_offset,
239 ColumnAndShifts::tx_l2_l1_msg_recipient,
240 ColumnAndShifts::tx_l2_l1_msg_content,
241 ColumnAndShifts::tx_l2_l1_msg_contract_address
242 };
243 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
244 ColumnAndShifts::precomputed_idx,
245 ColumnAndShifts::public_inputs_cols_0_,
246 ColumnAndShifts::public_inputs_cols_1_,
247 ColumnAndShifts::public_inputs_cols_2_
248 };
249};
250
252template <typename FF_>
254
256
258 static constexpr std::string_view NAME = "LOOKUP_TX_READ_EFFECTIVE_FEE_PUBLIC_INPUTS";
259 static constexpr std::string_view RELATION_NAME = "tx";
260 static constexpr size_t LOOKUP_TUPLE_SIZE = 3;
261 static constexpr Column SRC_SELECTOR = Column::tx_is_collect_fee;
262 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
263 static constexpr Column COUNTS = Column::lookup_tx_read_effective_fee_public_inputs_counts;
264 static constexpr Column INVERSES = Column::lookup_tx_read_effective_fee_public_inputs_inv;
265 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
266 ColumnAndShifts::tx_read_pi_offset,
267 ColumnAndShifts::tx_effective_fee_per_da_gas,
268 ColumnAndShifts::tx_effective_fee_per_l2_gas
269 };
270 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
271 ColumnAndShifts::precomputed_idx, ColumnAndShifts::public_inputs_cols_0_, ColumnAndShifts::public_inputs_cols_1_
272 };
273};
274
277template <typename FF_>
280
282
284 static constexpr std::string_view NAME = "LOOKUP_TX_READ_FEE_PAYER_PUBLIC_INPUTS";
285 static constexpr std::string_view RELATION_NAME = "tx";
286 static constexpr size_t LOOKUP_TUPLE_SIZE = 2;
287 static constexpr Column SRC_SELECTOR = Column::tx_is_collect_fee;
288 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
289 static constexpr Column COUNTS = Column::lookup_tx_read_fee_payer_public_inputs_counts;
290 static constexpr Column INVERSES = Column::lookup_tx_read_fee_payer_public_inputs_inv;
291 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
292 ColumnAndShifts::tx_fee_payer_pi_offset, ColumnAndShifts::tx_fee_payer
293 };
294 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
295 ColumnAndShifts::precomputed_idx, ColumnAndShifts::public_inputs_cols_0_
296 };
297};
298
301template <typename FF_>
304
306
308 static constexpr std::string_view NAME = "LOOKUP_TX_BALANCE_SLOT_POSEIDON2";
309 static constexpr std::string_view RELATION_NAME = "tx";
310 static constexpr size_t LOOKUP_TUPLE_SIZE = 5;
311 static constexpr Column SRC_SELECTOR = Column::tx_is_collect_fee;
312 static constexpr Column DST_SELECTOR = Column::poseidon2_hash_start;
313 static constexpr Column COUNTS = Column::lookup_tx_balance_slot_poseidon2_counts;
314 static constexpr Column INVERSES = Column::lookup_tx_balance_slot_poseidon2_inv;
315 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
316 ColumnAndShifts::tx_dom_sep_public_storage_map_slot,
317 ColumnAndShifts::tx_fee_juice_balances_slot_constant,
318 ColumnAndShifts::tx_fee_payer,
319 ColumnAndShifts::tx_fee_juice_balance_slot,
320 ColumnAndShifts::tx_const_three
321 };
322 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
323 ColumnAndShifts::poseidon2_hash_input_0,
324 ColumnAndShifts::poseidon2_hash_input_1,
325 ColumnAndShifts::poseidon2_hash_input_2,
326 ColumnAndShifts::poseidon2_hash_output,
327 ColumnAndShifts::poseidon2_hash_input_len
328 };
329};
330
332template <typename FF_>
334
336
338 static constexpr std::string_view NAME = "LOOKUP_TX_BALANCE_READ";
339 static constexpr std::string_view RELATION_NAME = "tx";
340 static constexpr size_t LOOKUP_TUPLE_SIZE = 4;
341 static constexpr Column SRC_SELECTOR = Column::tx_is_collect_fee;
342 static constexpr Column DST_SELECTOR = Column::public_data_check_sel;
343 static constexpr Column COUNTS = Column::lookup_tx_balance_read_counts;
344 static constexpr Column INVERSES = Column::lookup_tx_balance_read_inv;
345 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
346 ColumnAndShifts::tx_fee_payer_balance,
347 ColumnAndShifts::tx_fee_juice_contract_address,
348 ColumnAndShifts::tx_fee_juice_balance_slot,
349 ColumnAndShifts::tx_prev_public_data_tree_root
350 };
351 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
352 ColumnAndShifts::public_data_check_value,
353 ColumnAndShifts::public_data_check_address,
354 ColumnAndShifts::public_data_check_slot,
355 ColumnAndShifts::public_data_check_root
356 };
357};
358
360template <typename FF_>
362
364
366 static constexpr std::string_view NAME = "LOOKUP_TX_BALANCE_VALIDATION";
367 static constexpr std::string_view RELATION_NAME = "tx";
368 static constexpr size_t LOOKUP_TUPLE_SIZE = 3;
369 static constexpr Column SRC_SELECTOR = Column::tx_is_collect_fee;
370 static constexpr Column DST_SELECTOR = Column::ff_gt_sel_gt;
371 static constexpr Column COUNTS = Column::lookup_tx_balance_validation_counts;
372 static constexpr Column INVERSES = Column::lookup_tx_balance_validation_inv;
373 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = {
374 ColumnAndShifts::tx_fee, ColumnAndShifts::tx_fee_payer_balance, ColumnAndShifts::precomputed_zero
375 };
376 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = { ColumnAndShifts::ff_gt_a,
377 ColumnAndShifts::ff_gt_b,
378 ColumnAndShifts::ff_gt_result };
379};
380
382template <typename FF_>
384
386
388 static constexpr std::string_view NAME = "LOOKUP_TX_WRITE_FEE_PUBLIC_INPUTS";
389 static constexpr std::string_view RELATION_NAME = "tx";
390 static constexpr size_t LOOKUP_TUPLE_SIZE = 2;
391 static constexpr Column SRC_SELECTOR = Column::tx_is_collect_fee;
392 static constexpr Column DST_SELECTOR = Column::public_inputs_sel;
393 static constexpr Column COUNTS = Column::lookup_tx_write_fee_public_inputs_counts;
394 static constexpr Column INVERSES = Column::lookup_tx_write_fee_public_inputs_inv;
395 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> SRC_COLUMNS = { ColumnAndShifts::tx_write_pi_offset,
396 ColumnAndShifts::tx_fee };
397 static constexpr std::array<ColumnAndShifts, LOOKUP_TUPLE_SIZE> DST_COLUMNS = {
398 ColumnAndShifts::precomputed_idx, ColumnAndShifts::public_inputs_cols_0_
399 };
400};
401
403template <typename FF_>
406
407} // namespace bb::avm2
Settings to be passed ot GenericLookupRelationImpl.
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::string_view NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::string_view NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::string_view NAME
static constexpr std::string_view RELATION_NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::string_view NAME
static constexpr std::string_view RELATION_NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::string_view NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::string_view NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::string_view NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view RELATION_NAME
static constexpr std::string_view RELATION_NAME
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > SRC_COLUMNS
static constexpr std::array< ColumnAndShifts, LOOKUP_TUPLE_SIZE > DST_COLUMNS
static constexpr std::string_view NAME
static constexpr std::string_view RELATION_NAME