34 FF siloed_nullifier =
event.nullifier;
37 if (
event.siloing_data.has_value()) {
38 siloed_nullifier = event.siloing_data->siloed_nullifier;
39 address = event.siloing_data->address;
42 bool exists =
event.low_leaf_preimage.leaf.nullifier == siloed_nullifier;
43 FF nullifier_low_leaf_nullifier_diff = siloed_nullifier -
event.low_leaf_preimage.leaf.nullifier;
45 bool next_nullifier_is_nonzero =
false;
46 FF next_nullifier = 0;
48 next_nullifier_is_nonzero =
event.low_leaf_preimage.nextKey != 0;
49 next_nullifier =
event.low_leaf_preimage.nextKey;
52 uint64_t updated_low_leaf_next_index = 0;
53 FF updated_low_leaf_next_key = 0;
54 FF updated_low_leaf_hash = 0;
56 FF intermediate_root = 0;
58 bool append =
event.append_data.has_value();
60 updated_low_leaf_next_key = siloed_nullifier;
61 updated_low_leaf_next_index =
event.prev_snapshot.next_available_leaf_index;
62 updated_low_leaf_hash =
event.append_data->updated_low_leaf_hash;
63 new_leaf_hash =
event.append_data->new_leaf_hash;
64 intermediate_root =
event.append_data->intermediate_root;
69 { { { C::nullifier_check_sel, 1 },
70 { C::nullifier_check_const_three, 3 },
71 { C::nullifier_check_write,
event.write ? 1 : 0 },
72 { C::nullifier_check_nullifier,
nullifier },
73 { C::nullifier_check_root,
event.prev_snapshot.root },
74 { C::nullifier_check_exists,
exists ? 1 : 0 },
75 { C::nullifier_check_write_root,
event.next_snapshot.root },
76 { C::nullifier_check_tree_size_before_write,
event.prev_snapshot.next_available_leaf_index },
77 { C::nullifier_check_discard,
discard ? 1 : 0 },
78 { C::nullifier_check_nullifier_index,
event.nullifier_counter },
79 { C::nullifier_check_sel_silo,
event.siloing_data.has_value() ? 1 : 0 },
80 { C::nullifier_check_address,
address },
81 { C::nullifier_check_low_leaf_nullifier,
event.low_leaf_preimage.leaf.nullifier },
82 { C::nullifier_check_low_leaf_next_index,
event.low_leaf_preimage.nextIndex },
83 { C::nullifier_check_low_leaf_next_nullifier,
event.low_leaf_preimage.nextKey },
84 { C::nullifier_check_updated_low_leaf_next_index, updated_low_leaf_next_index },
85 { C::nullifier_check_updated_low_leaf_next_nullifier, updated_low_leaf_next_key },
86 { C::nullifier_check_low_leaf_index,
event.low_leaf_index },
87 { C::nullifier_check_siloed_nullifier, siloed_nullifier },
89 { C::nullifier_check_sel_insert, append ? 1 : 0 },
90 { C::nullifier_check_low_leaf_hash,
event.low_leaf_hash },
91 { C::nullifier_check_intermediate_root, intermediate_root },
92 { C::nullifier_check_updated_low_leaf_hash, updated_low_leaf_hash },
94 { C::nullifier_check_leaf_not_exists,
exists ? 0 : 1 },
95 { C::nullifier_check_nullifier_low_leaf_nullifier_diff_inv,
96 nullifier_low_leaf_nullifier_diff },
97 { C::nullifier_check_next_nullifier_is_nonzero, next_nullifier_is_nonzero ? 1 : 0 },
98 { C::nullifier_check_next_nullifier_inv, next_nullifier },
99 { C::nullifier_check_new_leaf_hash, new_leaf_hash },
100 { C::nullifier_check_sel_write_to_public_inputs, (
event.append_data.has_value() && !
discard) ? 1 : 0 },
101 { C::nullifier_check_public_inputs_index,
107 trace.invert_columns(
108 { { C::nullifier_check_nullifier_low_leaf_nullifier_diff_inv, C::nullifier_check_next_nullifier_inv } });