mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-02-19 03:04:27 -05:00
fix(trie): only clone required keys in on_prefetch_proofs (#21378)
This commit is contained in:
@@ -777,10 +777,21 @@ impl MultiProofTask {
|
||||
// [`MultiAddedRemovedKeys`]. Even if there are not any known removed keys for the account,
|
||||
// we still want to optimistically fetch extension children for the leaf addition case.
|
||||
// V2 multiproofs don't need this.
|
||||
//
|
||||
// Only clone the AddedRemovedKeys for accounts in the targets, not the entire accumulated
|
||||
// set, to avoid O(n) cloning with many buffered blocks.
|
||||
let multi_added_removed_keys =
|
||||
if let VersionedMultiProofTargets::Legacy(legacy_targets) = &targets {
|
||||
self.multi_added_removed_keys.touch_accounts(legacy_targets.keys().copied());
|
||||
Some(Arc::new(self.multi_added_removed_keys.clone()))
|
||||
Some(Arc::new(MultiAddedRemovedKeys {
|
||||
account: self.multi_added_removed_keys.account.clone(),
|
||||
storages: legacy_targets
|
||||
.keys()
|
||||
.filter_map(|k| {
|
||||
self.multi_added_removed_keys.storages.get(k).map(|v| (*k, v.clone()))
|
||||
})
|
||||
.collect(),
|
||||
}))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user