1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
24using testing::PublicInputsBuilder;
25using tracegen::PrecomputedTraceBuilder;
26using tracegen::PublicInputsTraceBuilder;
27using tracegen::TestTraceContainer;
28using tracegen::TxTraceBuilder;
35TEST(TxContextConstrainingTest, Continuity)
37 TestTraceContainer
trace({
41 { C::tx_reverted, 0 },
42 { C::tx_next_note_hash_tree_root, 1 },
43 { C::tx_next_note_hash_tree_size, 2 },
44 { C::tx_next_num_note_hashes_emitted, 3 },
45 { C::tx_next_nullifier_tree_root, 4 },
46 { C::tx_next_nullifier_tree_size, 5 },
47 { C::tx_next_num_nullifiers_emitted, 6 },
48 { C::tx_next_public_data_tree_root, 7 },
49 { C::tx_next_public_data_tree_size, 8 },
50 { C::tx_next_written_public_data_slots_tree_root, 9 },
51 { C::tx_next_written_public_data_slots_tree_size, 10 },
52 { C::tx_l1_l2_tree_root, 11 },
53 { C::tx_next_num_unencrypted_logs, 12 },
54 { C::tx_next_num_l2_to_l1_messages, 13 },
59 { C::tx_reverted, 1 },
60 { C::tx_prev_note_hash_tree_root, 1 },
61 { C::tx_prev_note_hash_tree_size, 2 },
62 { C::tx_prev_num_note_hashes_emitted, 3 },
63 { C::tx_prev_nullifier_tree_root, 4 },
64 { C::tx_prev_nullifier_tree_size, 5 },
65 { C::tx_prev_num_nullifiers_emitted, 6 },
66 { C::tx_prev_public_data_tree_root, 7 },
67 { C::tx_prev_public_data_tree_size, 8 },
68 { C::tx_prev_written_public_data_slots_tree_root, 9 },
69 { C::tx_prev_written_public_data_slots_tree_size, 10 },
70 { C::tx_l1_l2_tree_root, 11 },
71 { C::tx_prev_num_unencrypted_logs, 12 },
72 { C::tx_prev_num_l2_to_l1_messages, 13 },
73 { C::tx_next_note_hash_tree_root, 10 },
74 { C::tx_next_note_hash_tree_size, 20 },
75 { C::tx_next_num_note_hashes_emitted, 30 },
76 { C::tx_next_nullifier_tree_root, 40 },
77 { C::tx_next_nullifier_tree_size, 50 },
78 { C::tx_next_num_nullifiers_emitted, 60 },
79 { C::tx_next_public_data_tree_root, 70 },
80 { C::tx_next_public_data_tree_size, 80 },
81 { C::tx_next_written_public_data_slots_tree_root, 90 },
82 { C::tx_next_written_public_data_slots_tree_size, 100 },
83 { C::tx_next_num_unencrypted_logs, 120 },
84 { C::tx_next_num_l2_to_l1_messages, 130 },
89 { C::tx_reverted, 0 },
90 { C::tx_prev_note_hash_tree_root, 1 },
91 { C::tx_prev_note_hash_tree_size, 2 },
92 { C::tx_prev_num_note_hashes_emitted, 3 },
93 { C::tx_prev_nullifier_tree_root, 4 },
94 { C::tx_prev_nullifier_tree_size, 5 },
95 { C::tx_prev_num_nullifiers_emitted, 6 },
96 { C::tx_prev_public_data_tree_root, 7 },
97 { C::tx_prev_public_data_tree_size, 8 },
98 { C::tx_prev_written_public_data_slots_tree_root, 9 },
99 { C::tx_prev_written_public_data_slots_tree_size, 10 },
100 { C::tx_l1_l2_tree_root, 11 },
101 { C::tx_prev_num_unencrypted_logs, 12 },
102 { C::tx_prev_num_l2_to_l1_messages, 13 },
106 check_relation<tx_context>(
trace,
126 "NOTE_HASH_ROOT_CONTINUITY");
128 "NOTE_HASH_TREE_SIZE_CONTINUITY");
130 "NUM_NOTE_HASHES_EMITTED_CONTINUITY");
132 "NULLIFIER_TREE_ROOT_CONTINUITY");
134 "NULLIFIER_TREE_SIZE_CONTINUITY");
136 "NUM_NULLIFIERS_EMITTED_CONTINUITY");
138 "PUBLIC_DATA_TREE_ROOT_CONTINUITY");
140 "PUBLIC_DATA_TREE_SIZE_CONTINUITY");
143 "WRITTEN_PUBLIC_DATA_SLOTS_TREE_ROOT_CONTINUITY");
146 "WRITTEN_PUBLIC_DATA_SLOTS_TREE_SIZE_CONTINUITY");
148 "NUM_UNENCRYPTED_LOGS_CONTINUITY");
150 "NUM_L2_TO_L1_MESSAGES_CONTINUITY");
154 trace.
set(C::tx_l1_l2_tree_root, 1, 20);
157 "L1_L2_TREE_ROOT_CONTINUITY");
160TEST(TxContextConstrainingTest, StateMutability)
162 TestTraceContainer
trace({
165 { C::tx_sel_can_emit_note_hash, 1 },
166 { C::tx_sel_can_emit_nullifier, 1 },
167 { C::tx_sel_can_write_public_data, 1 },
168 { C::tx_sel_can_emit_unencrypted_log, 1 },
169 { C::tx_sel_can_emit_l2_l1_msg, 1 },
170 { C::tx_prev_note_hash_tree_root, 1 },
171 { C::tx_prev_note_hash_tree_size, 2 },
172 { C::tx_prev_num_note_hashes_emitted, 3 },
173 { C::tx_prev_nullifier_tree_root, 4 },
174 { C::tx_prev_nullifier_tree_size, 5 },
175 { C::tx_prev_num_nullifiers_emitted, 6 },
176 { C::tx_prev_public_data_tree_root, 7 },
177 { C::tx_prev_public_data_tree_size, 8 },
178 { C::tx_prev_written_public_data_slots_tree_root, 9 },
179 { C::tx_prev_written_public_data_slots_tree_size, 10 },
180 { C::tx_l1_l2_tree_root, 11 },
181 { C::tx_prev_num_unencrypted_logs, 12 },
182 { C::tx_prev_num_l2_to_l1_messages, 13 },
183 { C::tx_next_note_hash_tree_root, 10 },
184 { C::tx_next_note_hash_tree_size, 20 },
185 { C::tx_next_num_note_hashes_emitted, 30 },
186 { C::tx_next_nullifier_tree_root, 40 },
187 { C::tx_next_nullifier_tree_size, 50 },
188 { C::tx_next_num_nullifiers_emitted, 60 },
189 { C::tx_next_public_data_tree_root, 70 },
190 { C::tx_next_public_data_tree_size, 80 },
191 { C::tx_next_written_public_data_slots_tree_root, 90 },
192 { C::tx_next_written_public_data_slots_tree_size, 100 },
193 { C::tx_l1_l2_tree_root, 110 },
194 { C::tx_next_num_unencrypted_logs, 120 },
195 { C::tx_next_num_l2_to_l1_messages, 130 },
199 check_relation<tx_context>(
trace,
214 trace.
set(C::tx_sel_can_emit_note_hash, 0, 0);
217 "NOTE_HASH_ROOT_IMMUTABILITY");
219 "NOTE_HASH_SIZE_IMMUTABILITY");
221 "NOTE_HASH_COUNT_IMMUTABILITY");
224 trace.
set(C::tx_sel_can_emit_nullifier, 0, 0);
227 "NULLIFIER_ROOT_IMMUTABILITY");
229 "NULLIFIER_SIZE_IMMUTABILITY");
231 "NULLIFIER_COUNT_IMMUTABILITY");
234 trace.
set(C::tx_sel_can_write_public_data, 0, 0);
237 "PUBLIC_DATA_ROOT_IMMUTABILITY");
239 "PUBLIC_DATA_SIZE_IMMUTABILITY");
242 "WRITTEN_PUBLIC_DATA_SLOTS_ROOT_IMMUTABILITY");
245 "WRITTEN_PUBLIC_DATA_SLOTS_SIZE_IMMUTABILITY");
248 trace.
set(C::tx_sel_can_emit_unencrypted_log, 0, 0);
251 "UNENCRYPTED_LOG_COUNT_IMMUTABILITY");
254 trace.
set(C::tx_sel_can_emit_l2_l1_msg, 0, 0);
257 "L2_TO_L1_MESSAGE_COUNT_IMMUTABILITY");
260 trace.
set(C::tx_sel_can_emit_note_hash, 0, 1);
261 trace.
set(C::tx_sel_can_emit_nullifier, 0, 1);
262 trace.
set(C::tx_sel_can_write_public_data, 0, 1);
263 trace.
set(C::tx_sel_can_emit_unencrypted_log, 0, 1);
267 "NOTE_HASH_ROOT_PADDED_IMMUTABILITY");
269 "NOTE_HASH_SIZE_PADDED_IMMUTABILITY");
271 "NOTE_HASH_COUNT_PADDED_IMMUTABILITY");
274 "NULLIFIER_ROOT_PADDED_IMMUTABILITY");
276 "NULLIFIER_SIZE_PADDED_IMMUTABILITY");
278 "NULLIFIER_COUNT_PADDED_IMMUTABILITY");
281 "PUBLIC_DATA_ROOT_PADDED_IMMUTABILITY");
283 "PUBLIC_DATA_SIZE_PADDED_IMMUTABILITY");
286 "WRITTEN_PUBLIC_DATA_SLOTS_ROOT_PADDED_IMMUTABILITY");
289 "WRITTEN_PUBLIC_DATA_SLOTS_SIZE_PADDED_IMMUTABILITY");
293 "UNENCRYPTED_LOG_COUNT_PADDED_IMMUTABILITY");
297 "L2_TO_L1_MESSAGE_COUNT_PADDED_IMMUTABILITY");
300TEST(TxContextConstrainingTest, InitialStateChecks)
302 Gas start_gas_used = { 1, 2 };
303 Gas gas_limit = { 1000, 2000 };
304 GasSettings gas_settings = { .gasLimits = gas_limit };
305 TreeSnapshots tree_snapshots = { .l1ToL2MessageTree = { .root = 20, .nextAvailableLeafIndex = 19 },
306 .noteHashTree = { .root = 21, .nextAvailableLeafIndex = 20 },
307 .nullifierTree = { .root = 22, .nextAvailableLeafIndex = 21 },
308 .publicDataTree = { .root = 23, .nextAvailableLeafIndex = 22 } };
309 auto public_inputs = PublicInputsBuilder()
310 .with_start_gas_used(start_gas_used)
311 .with_gas_settings(gas_settings)
312 .with_start_tree_snapshots(tree_snapshots)
315 TestTraceContainer
trace({
318 { C::precomputed_first_row, 1 },
323 { C::tx_start_tx, 1 },
324 { C::tx_prev_note_hash_tree_root, tree_snapshots.noteHashTree.root },
325 { C::tx_prev_note_hash_tree_size, tree_snapshots.noteHashTree.nextAvailableLeafIndex },
326 { C::tx_prev_nullifier_tree_root, tree_snapshots.nullifierTree.root },
327 { C::tx_prev_nullifier_tree_size, tree_snapshots.nullifierTree.nextAvailableLeafIndex },
328 { C::tx_prev_public_data_tree_root, tree_snapshots.publicDataTree.root },
329 { C::tx_prev_public_data_tree_size, tree_snapshots.publicDataTree.nextAvailableLeafIndex },
332 { C::tx_l1_l2_tree_root, tree_snapshots.l1ToL2MessageTree.root },
333 { C::tx_prev_l2_gas_used, start_gas_used.l2Gas },
334 { C::tx_prev_da_gas_used, start_gas_used.daGas },
335 { C::tx_l2_gas_limit, gas_limit.l2Gas },
336 { C::tx_da_gas_limit, gas_limit.daGas },
337 { C::tx_prev_num_unencrypted_logs, 0 },
338 { C::tx_prev_num_l2_to_l1_messages, 0 },
340 { C::tx_should_read_note_hash_tree, 1 },
342 { C::tx_should_read_nullifier_tree, 1 },
344 { C::tx_should_read_public_data_tree, 1 },
346 { C::tx_should_read_l1_l2_tree, 1 },
348 { C::tx_should_read_gas_used, 1 },
350 { C::tx_should_read_gas_limit, 1 },
351 { C::tx_next_note_hash_tree_root, tree_snapshots.noteHashTree.root },
352 { C::tx_next_note_hash_tree_size, tree_snapshots.noteHashTree.nextAvailableLeafIndex },
353 { C::tx_next_nullifier_tree_root, tree_snapshots.nullifierTree.root },
354 { C::tx_next_nullifier_tree_size, tree_snapshots.nullifierTree.nextAvailableLeafIndex },
355 { C::tx_next_public_data_tree_root, tree_snapshots.publicDataTree.root },
356 { C::tx_next_public_data_tree_size, tree_snapshots.publicDataTree.nextAvailableLeafIndex },
359 { C::tx_next_l2_gas_used, start_gas_used.l2Gas },
360 { C::tx_next_da_gas_used, start_gas_used.daGas },
362 { C::tx_next_context_id, 1 },
366 PublicInputsTraceBuilder public_inputs_builder;
367 public_inputs_builder.process_public_inputs(
trace, public_inputs);
368 public_inputs_builder.process_public_inputs_aux_precomputed(
trace);
373 check_relation<tx_context>(
trace);
389TEST(TxContextConstrainingTest, EndStateChecks)
391 Gas end_gas_used = { 1, 2 };
392 TreeSnapshots tree_snapshots = { .l1ToL2MessageTree = { .root = 20, .nextAvailableLeafIndex = 19 },
393 .noteHashTree = { .root = 21, .nextAvailableLeafIndex = 20 },
394 .nullifierTree = { .root = 22, .nextAvailableLeafIndex = 21 },
395 .publicDataTree = { .root = 23, .nextAvailableLeafIndex = 22 } };
396 AvmAccumulatedDataArrayLengths array_lengths = {
397 .noteHashes = 10, .nullifiers = 11, .l2ToL1Msgs = 12, .publicLogs = 13
399 auto public_inputs = PublicInputsBuilder()
400 .set_end_gas_used(end_gas_used)
401 .set_end_tree_snapshots(tree_snapshots)
402 .set_accumulated_data_array_lengths(array_lengths)
405 TestTraceContainer
trace({
408 { C::precomputed_first_row, 1 },
413 { C::tx_is_cleanup, 1 },
414 { C::tx_prev_note_hash_tree_root, tree_snapshots.noteHashTree.root },
415 { C::tx_prev_note_hash_tree_size, tree_snapshots.noteHashTree.nextAvailableLeafIndex },
416 { C::tx_prev_num_note_hashes_emitted, array_lengths.noteHashes },
417 { C::tx_prev_nullifier_tree_root, tree_snapshots.nullifierTree.root },
418 { C::tx_prev_nullifier_tree_size, tree_snapshots.nullifierTree.nextAvailableLeafIndex },
419 { C::tx_prev_num_nullifiers_emitted, array_lengths.nullifiers },
420 { C::tx_prev_public_data_tree_root, tree_snapshots.publicDataTree.root },
421 { C::tx_prev_public_data_tree_size, tree_snapshots.publicDataTree.nextAvailableLeafIndex },
422 { C::tx_l1_l2_tree_root, tree_snapshots.l1ToL2MessageTree.root },
423 { C::tx_prev_l2_gas_used, end_gas_used.l2Gas },
424 { C::tx_prev_da_gas_used, end_gas_used.daGas },
425 { C::tx_prev_num_unencrypted_logs, array_lengths.publicLogs },
426 { C::tx_prev_num_l2_to_l1_messages, array_lengths.l2ToL1Msgs },
428 { C::tx_should_read_note_hash_tree, 1 },
430 { C::tx_should_read_nullifier_tree, 1 },
432 { C::tx_should_read_public_data_tree, 1 },
434 { C::tx_should_read_l1_l2_tree, 1 },
436 { C::tx_should_read_gas_used, 1 },
437 { C::tx_array_length_note_hashes_pi_offset,
439 { C::tx_array_length_nullifiers_pi_offset,
441 { C::tx_array_length_l2_to_l1_messages_pi_offset,
443 { C::tx_array_length_unencrypted_logs_pi_offset,
445 { C::tx_next_note_hash_tree_root, tree_snapshots.noteHashTree.root },
446 { C::tx_next_note_hash_tree_size, tree_snapshots.noteHashTree.nextAvailableLeafIndex },
447 { C::tx_next_num_note_hashes_emitted, array_lengths.noteHashes },
448 { C::tx_next_nullifier_tree_root, tree_snapshots.nullifierTree.root },
449 { C::tx_next_nullifier_tree_size, tree_snapshots.nullifierTree.nextAvailableLeafIndex },
450 { C::tx_next_num_nullifiers_emitted, array_lengths.nullifiers },
451 { C::tx_next_public_data_tree_root, tree_snapshots.publicDataTree.root },
452 { C::tx_next_public_data_tree_size, tree_snapshots.publicDataTree.nextAvailableLeafIndex },
453 { C::tx_next_l2_gas_used, end_gas_used.l2Gas },
454 { C::tx_next_da_gas_used, end_gas_used.daGas },
455 { C::tx_next_num_unencrypted_logs, array_lengths.publicLogs },
456 { C::tx_next_num_l2_to_l1_messages, array_lengths.l2ToL1Msgs },
461 PublicInputsTraceBuilder public_inputs_builder;
462 public_inputs_builder.process_public_inputs(
trace, public_inputs);
463 public_inputs_builder.process_public_inputs_aux_precomputed(
trace);
468 check_relation<tx_context>(
trace);
484TEST(TxContextConstrainingTest, NegativeContextIdChecks)
486 TestTraceContainer
trace({
489 { C::precomputed_first_row, 1 },
494 { C::tx_start_tx, 1 },
495 { C::tx_next_context_id, 1 },
500 { C::tx_next_context_id, 1 },
501 { C::tx_should_process_call_request, 1 },
506 { C::tx_next_context_id, 5 },
509 check_relation<tx_context>(
513 trace.
set(C::tx_next_context_id, 1, 2);
515 "NEXT_CONTEXT_ID_INITIAL_VALUE");
518 trace.
set(C::tx_next_context_id, 2, 42);
520 "NEXT_CONTEXT_ID_CONTINUITY");
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_L1_TO_L2_MESSAGE_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_GAS_USED_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_L1_TO_L2_MESSAGE_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_NULLIFIER_TREE_ROW_IDX
#define AVM_WRITTEN_PUBLIC_DATA_SLOTS_TREE_INITIAL_ROOT
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_NOTE_HASH_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_PUBLIC_LOGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_NOTE_HASH_TREE_ROW_IDX
#define AVM_WRITTEN_PUBLIC_DATA_SLOTS_TREE_INITIAL_SIZE
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_PUBLIC_DATA_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_NULLIFIER_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_GAS_USED_ROW_IDX
#define AVM_PUBLIC_INPUTS_GAS_SETTINGS_GAS_LIMITS_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_PUBLIC_DATA_TREE_ROW_IDX
uint32_t get_num_rows() const
void set(Column col, uint32_t row, const FF &value)
static constexpr size_t SR_NULLIFIER_SIZE_IMMUTABILITY
static constexpr size_t SR_WRITTEN_PUBLIC_DATA_SLOTS_TREE_ROOT_CONTINUITY
static constexpr size_t SR_NULLIFIER_COUNT_PADDED_IMMUTABILITY
static constexpr size_t SR_NOTE_HASH_ROOT_PADDED_IMMUTABILITY
static constexpr size_t SR_NUM_UNENCRYPTED_LOGS_CONTINUITY
static constexpr size_t SR_NULLIFIER_COUNT_IMMUTABILITY
static constexpr size_t SR_NOTE_HASH_SIZE_PADDED_IMMUTABILITY
static constexpr size_t SR_NULLIFIER_SIZE_PADDED_IMMUTABILITY
static constexpr size_t SR_NUM_L2_TO_L1_MESSAGES_CONTINUITY
static constexpr size_t SR_NOTE_HASH_COUNT_PADDED_IMMUTABILITY
static constexpr size_t SR_WRITTEN_PUBLIC_DATA_SLOTS_ROOT_PADDED_IMMUTABILITY
static constexpr size_t SR_PUBLIC_DATA_SIZE_PADDED_IMMUTABILITY
static constexpr size_t SR_NULLIFIER_TREE_SIZE_CONTINUITY
static constexpr size_t SR_UNENCRYPTED_LOG_COUNT_IMMUTABILITY
static constexpr size_t SR_L2_TO_L1_MESSAGE_COUNT_IMMUTABILITY
static constexpr size_t SR_PUBLIC_DATA_ROOT_PADDED_IMMUTABILITY
static constexpr size_t SR_PUBLIC_DATA_TREE_ROOT_CONTINUITY
static constexpr size_t SR_NOTE_HASH_ROOT_IMMUTABILITY
static constexpr size_t SR_NEXT_CONTEXT_ID_CONTINUITY
static constexpr size_t SR_NOTE_HASH_SIZE_IMMUTABILITY
static constexpr size_t SR_NOTE_HASH_TREE_SIZE_CONTINUITY
static constexpr size_t SR_NULLIFIER_ROOT_PADDED_IMMUTABILITY
static constexpr size_t SR_UNENCRYPTED_LOG_COUNT_PADDED_IMMUTABILITY
static constexpr size_t SR_WRITTEN_PUBLIC_DATA_SLOTS_TREE_SIZE_CONTINUITY
static constexpr size_t SR_NULLIFIER_ROOT_IMMUTABILITY
static constexpr size_t SR_NOTE_HASH_ROOT_CONTINUITY
static constexpr size_t SR_PUBLIC_DATA_ROOT_IMMUTABILITY
static constexpr size_t SR_NUM_NOTE_HASHES_EMITTED_CONTINUITY
static constexpr size_t SR_PUBLIC_DATA_SIZE_IMMUTABILITY
static constexpr size_t SR_NUM_NULLIFIERS_EMITTED_CONTINUITY
static constexpr size_t SR_NOTE_HASH_COUNT_IMMUTABILITY
static constexpr size_t SR_WRITTEN_PUBLIC_DATA_SLOTS_SIZE_PADDED_IMMUTABILITY
static constexpr size_t SR_WRITTEN_PUBLIC_DATA_SLOTS_SIZE_IMMUTABILITY
static constexpr size_t SR_L2_TO_L1_MESSAGE_COUNT_PADDED_IMMUTABILITY
static constexpr size_t SR_NEXT_CONTEXT_ID_INITIAL_VALUE
static constexpr size_t SR_WRITTEN_PUBLIC_DATA_SLOTS_ROOT_IMMUTABILITY
static constexpr size_t SR_L1_L2_TREE_ROOT_CONTINUITY
static constexpr size_t SR_NULLIFIER_TREE_ROOT_CONTINUITY
static constexpr size_t SR_PUBLIC_DATA_TREE_SIZE_CONTINUITY
PrecomputedTraceBuilder precomputed_builder
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
void check_interaction(tracegen::TestTraceContainer &trace)
TEST(TxExecutionConstrainingTest, WriteTreeValue)
lookup_settings< lookup_tx_context_public_inputs_write_l2_to_l1_message_count_settings_ > lookup_tx_context_public_inputs_write_l2_to_l1_message_count_settings
lookup_settings< lookup_tx_context_public_inputs_note_hash_tree_settings_ > lookup_tx_context_public_inputs_note_hash_tree_settings
lookup_settings< lookup_tx_context_public_inputs_nullifier_tree_settings_ > lookup_tx_context_public_inputs_nullifier_tree_settings
lookup_settings< lookup_tx_context_public_inputs_read_gas_limit_settings_ > lookup_tx_context_public_inputs_read_gas_limit_settings
lookup_settings< lookup_tx_context_public_inputs_public_data_tree_settings_ > lookup_tx_context_public_inputs_public_data_tree_settings
lookup_settings< lookup_tx_context_public_inputs_gas_used_settings_ > lookup_tx_context_public_inputs_gas_used_settings
lookup_settings< lookup_tx_context_public_inputs_l1_l2_tree_settings_ > lookup_tx_context_public_inputs_l1_l2_tree_settings
lookup_settings< lookup_tx_context_restore_state_on_revert_settings_ > lookup_tx_context_restore_state_on_revert_settings
lookup_settings< lookup_tx_context_public_inputs_write_nullifier_count_settings_ > lookup_tx_context_public_inputs_write_nullifier_count_settings
lookup_settings< lookup_tx_context_public_inputs_write_note_hash_count_settings_ > lookup_tx_context_public_inputs_write_note_hash_count_settings
lookup_settings< lookup_tx_context_public_inputs_write_unencrypted_log_count_settings_ > lookup_tx_context_public_inputs_write_unencrypted_log_count_settings