30 const auto snapshot = tree.get_snapshot();
31 auto [
exists, low_leaf_index] = tree.get_low_indexed_leaf(leaf_slot);
32 auto sibling_path = tree.get_sibling_path(low_leaf_index);
33 auto low_leaf_preimage = tree.get_leaf_preimage(low_leaf_index);
37 merkle_check.assert_membership(low_leaf_hash, low_leaf_index, sibling_path, snapshot.root);
40 if (low_leaf_preimage.leaf.slot != leaf_slot) {
41 throw std::runtime_error(
"Slot membership check failed");
50 .leaf_slot = leaf_slot,
51 .prev_snapshot = snapshot,
52 .next_snapshot = snapshot,
53 .low_leaf_preimage = low_leaf_preimage,
54 .low_leaf_hash = low_leaf_hash,
55 .low_leaf_index = low_leaf_index,
68 auto& [low_leaf_preimage, low_leaf_index, low_leaf_sibling_path] = insertion_result.low_leaf_witness_data.at(0);
69 std::span<FF> insertion_sibling_path = insertion_result.insertion_witness_data.at(0).path;
71 bool exists = leaf_slot == low_leaf_preimage.leaf.slot;
78 merkle_check.assert_membership(low_leaf_hash, low_leaf_index, low_leaf_sibling_path, prev_snapshot.
root);
84 updated_low_leaf_preimage.
nextKey = leaf_slot;
89 low_leaf_hash, updated_low_leaf_hash, low_leaf_index, low_leaf_sibling_path, prev_snapshot.
root);
104 BB_ASSERT_EQ(next_snapshot, tree.get_snapshot(),
"Next snapshot mismatch");
107 .new_leaf_hash = new_leaf_hash,
108 .intermediate_root = intermediate_root,
115 .leaf_slot = leaf_slot,
116 .prev_snapshot = prev_snapshot,
117 .next_snapshot = next_snapshot,
118 .low_leaf_preimage = low_leaf_preimage,
119 .low_leaf_hash = low_leaf_hash,
120 .low_leaf_index = low_leaf_index,
122 .append_data = append_data,