mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
fix(trie): retain updates only for sparse branch nodes in the prefix set (#13234)
This commit is contained in:
@ -623,6 +623,7 @@ impl<P> RevealedSparseTrie<P> {
|
||||
));
|
||||
continue
|
||||
}
|
||||
let retain_updates = self.updates.is_some() && prefix_set_contains(&path);
|
||||
|
||||
buffers.branch_child_buf.clear();
|
||||
// Walk children in a reverse order from `f` to `0`, so we pop the `0` first
|
||||
@ -650,7 +651,7 @@ impl<P> RevealedSparseTrie<P> {
|
||||
buffers.rlp_node_stack.pop().unwrap();
|
||||
|
||||
// Update the masks only if we need to retain trie updates
|
||||
if self.updates.is_some() {
|
||||
if retain_updates {
|
||||
// Set the trie mask
|
||||
let tree_mask_value = if node_type.store_in_db_trie() {
|
||||
// A branch or an extension node explicitly set the
|
||||
@ -716,7 +717,7 @@ impl<P> RevealedSparseTrie<P> {
|
||||
// Save a branch node update only if it's not a root node, and we need to
|
||||
// persist updates.
|
||||
let store_in_db_trie_value = if let Some(updates) =
|
||||
self.updates.as_mut().filter(|_| !path.is_empty())
|
||||
self.updates.as_mut().filter(|_| retain_updates && !path.is_empty())
|
||||
{
|
||||
let mut tree_mask_values = tree_mask_values.into_iter().rev();
|
||||
let mut hash_mask_values = hash_mask_values.into_iter().rev();
|
||||
|
||||
Reference in New Issue
Block a user