Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
nullifier_tree_check_trace.cpp
Go to the documentation of this file.
2
3#include <memory>
4
10
11namespace bb::avm2::tracegen {
12
14
18{
19 using C = Column;
20
21 uint32_t row = 0;
23 FF nullifier = event.nullifier;
24 FF siloed_nullifier = event.nullifier;
25 FF address = 0;
26
27 if (event.siloing_data.has_value()) {
28 siloed_nullifier = event.siloing_data->siloed_nullifier;
29 address = event.siloing_data->address;
30 }
31
32 bool exists = event.low_leaf_preimage.leaf.nullifier == siloed_nullifier;
33 FF nullifier_low_leaf_nullifier_diff_inv =
34 exists ? 0 : (siloed_nullifier - event.low_leaf_preimage.leaf.nullifier).invert();
35
36 bool next_nullifier_is_nonzero = false;
37 FF next_nullifier_inv = 0;
38 if (!exists) {
39 next_nullifier_is_nonzero = event.low_leaf_preimage.nextKey != 0;
40 next_nullifier_inv = next_nullifier_is_nonzero ? event.low_leaf_preimage.nextKey.invert() : 0;
41 }
42
43 uint64_t updated_low_leaf_next_index = 0;
44 FF updated_low_leaf_next_key = 0;
45 FF updated_low_leaf_hash = 0;
46 FF new_leaf_hash = 0;
47 FF intermediate_root = 0;
48
49 bool append = event.append_data.has_value();
50 if (append) {
51 updated_low_leaf_next_key = siloed_nullifier;
52 updated_low_leaf_next_index = event.prev_snapshot.nextAvailableLeafIndex;
53 updated_low_leaf_hash = event.append_data->updated_low_leaf_hash;
54 new_leaf_hash = event.append_data->new_leaf_hash;
55 intermediate_root = event.append_data->intermediate_root;
56 }
57
58 trace.set(
59 row,
60 { { { C::nullifier_check_sel, 1 },
61 { C::nullifier_check_write, event.write },
62 { C::nullifier_check_nullifier, nullifier },
63 { C::nullifier_check_root, event.prev_snapshot.root },
64 { C::nullifier_check_exists, exists },
65 { C::nullifier_check_write_root, event.next_snapshot.root },
66 { C::nullifier_check_tree_size_before_write, event.prev_snapshot.nextAvailableLeafIndex },
67 { C::nullifier_check_discard, discard },
68 { C::nullifier_check_nullifier_index, event.nullifier_counter },
69 { C::nullifier_check_should_silo, event.siloing_data.has_value() },
70 { C::nullifier_check_address, address },
71 { C::nullifier_check_low_leaf_nullifier, event.low_leaf_preimage.leaf.nullifier },
72 { C::nullifier_check_low_leaf_next_index, event.low_leaf_preimage.nextIndex },
73 { C::nullifier_check_low_leaf_next_nullifier, event.low_leaf_preimage.nextKey },
74 { C::nullifier_check_updated_low_leaf_next_index, updated_low_leaf_next_index },
75 { C::nullifier_check_updated_low_leaf_next_nullifier, updated_low_leaf_next_key },
76 { C::nullifier_check_low_leaf_index, event.low_leaf_index },
77 { C::nullifier_check_siloed_nullifier, siloed_nullifier },
78 { C::nullifier_check_siloing_separator, GENERATOR_INDEX__OUTER_NULLIFIER },
79 { C::nullifier_check_should_insert, append },
80 { C::nullifier_check_low_leaf_hash, event.low_leaf_hash },
81 { C::nullifier_check_intermediate_root, intermediate_root },
82 { C::nullifier_check_updated_low_leaf_hash, updated_low_leaf_hash },
83 { C::nullifier_check_tree_height, NULLIFIER_TREE_HEIGHT },
84 { C::nullifier_check_leaf_not_exists, !exists },
85 { C::nullifier_check_nullifier_low_leaf_nullifier_diff_inv, nullifier_low_leaf_nullifier_diff_inv },
86 { C::nullifier_check_next_nullifier_is_nonzero, next_nullifier_is_nonzero },
87 { C::nullifier_check_next_nullifier_inv, next_nullifier_inv },
88 { C::nullifier_check_new_leaf_hash, new_leaf_hash },
89 { C::nullifier_check_should_write_to_public_inputs, event.append_data.has_value() && !discard },
90 { C::nullifier_check_public_inputs_index,
91 AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_NULLIFIERS_ROW_IDX + event.nullifier_counter } } });
92 row++;
93 });
94}
95
99 .add<lookup_nullifier_check_low_leaf_poseidon2_settings, InteractionType::LookupSequential>()
101 .add<lookup_nullifier_check_low_leaf_merkle_check_settings, InteractionType::LookupSequential>()
103 .add<lookup_nullifier_check_low_leaf_next_nullifier_validation_settings, InteractionType::LookupSequential>()
105 .add<lookup_nullifier_check_new_leaf_merkle_check_settings, InteractionType::LookupSequential>()
108
109} // namespace bb::avm2::tracegen
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_NULLIFIERS_ROW_IDX
#define NULLIFIER_TREE_HEIGHT
#define GENERATOR_INDEX__OUTER_NULLIFIER
InteractionDefinition & add(auto &&... args)
void process(const simulation::EventEmitterInterface< simulation::NullifierTreeCheckEvent >::Container &events, TraceContainer &trace)
TestTraceContainer trace
IndexedLeaf< NullifierLeafValue > NullifierTreeLeafPreimage
void process_with_discard(const std::vector< std::variant< EventType, simulation::CheckPointEventType > > &events, ProcessEventFn &&process_event)
lookup_settings< lookup_nullifier_check_updated_low_leaf_poseidon2_settings_ > lookup_nullifier_check_updated_low_leaf_poseidon2_settings
lookup_settings< lookup_nullifier_check_low_leaf_nullifier_validation_settings_ > lookup_nullifier_check_low_leaf_nullifier_validation_settings
lookup_settings< lookup_nullifier_check_silo_poseidon2_settings_ > lookup_nullifier_check_silo_poseidon2_settings
lookup_settings< lookup_nullifier_check_write_nullifier_to_public_inputs_settings_ > lookup_nullifier_check_write_nullifier_to_public_inputs_settings
lookup_settings< lookup_nullifier_check_new_leaf_poseidon2_settings_ > lookup_nullifier_check_new_leaf_poseidon2_settings
AvmFlavorSettings::FF FF
Definition field.hpp:10
simulation::PublicDataTreeReadWriteEvent event