perf(trie): avoid (de)allocating an extra prefix set (#13020)

This commit is contained in:
Hai | RISE
2024-12-05 20:45:43 +07:00
committed by GitHub
parent b4124dd1b0
commit da03b7989e
3 changed files with 12 additions and 8 deletions

View File

@ -43,6 +43,7 @@ impl<'a, TX: DbTx> DatabaseStorageRoot<'a, TX>
DatabaseTrieCursorFactory::new(tx),
DatabaseHashedCursorFactory::new(tx),
address,
Default::default(),
#[cfg(feature = "metrics")]
TrieRootMetrics::new(TrieType::Storage),
)
@ -53,6 +54,7 @@ impl<'a, TX: DbTx> DatabaseStorageRoot<'a, TX>
DatabaseTrieCursorFactory::new(tx),
DatabaseHashedCursorFactory::new(tx),
hashed_address,
Default::default(),
#[cfg(feature = "metrics")]
TrieRootMetrics::new(TrieType::Storage),
)
@ -70,10 +72,10 @@ impl<'a, TX: DbTx> DatabaseStorageRoot<'a, TX>
DatabaseTrieCursorFactory::new(tx),
HashedPostStateCursorFactory::new(DatabaseHashedCursorFactory::new(tx), &state_sorted),
address,
prefix_set,
#[cfg(feature = "metrics")]
TrieRootMetrics::new(TrieType::Storage),
)
.with_prefix_set(prefix_set)
.root()
}
}

View File

@ -121,10 +121,10 @@ where
trie_cursor_factory,
hashed_state,
hashed_address,
prefix_set,
#[cfg(feature = "metrics")]
metrics,
)
.with_prefix_set(prefix_set)
.calculate(retain_updates)?)
})();
let _ = tx.send(result);
@ -179,6 +179,7 @@ where
trie_cursor_factory.clone(),
hashed_cursor_factory.clone(),
hashed_address,
Default::default(),
#[cfg(feature = "metrics")]
self.metrics.storage_trie.clone(),
)

View File

@ -202,15 +202,13 @@ where
self.trie_cursor_factory.clone(),
self.hashed_cursor_factory.clone(),
hashed_address,
#[cfg(feature = "metrics")]
self.metrics.storage_trie.clone(),
)
.with_prefix_set(
self.prefix_sets
.storage_prefix_sets
.get(&hashed_address)
.cloned()
.unwrap_or_default(),
#[cfg(feature = "metrics")]
self.metrics.storage_trie.clone(),
);
let storage_root = if retain_updates {
@ -301,29 +299,32 @@ impl<T, H> StorageRoot<T, H> {
trie_cursor_factory: T,
hashed_cursor_factory: H,
address: Address,
prefix_set: PrefixSet,
#[cfg(feature = "metrics")] metrics: TrieRootMetrics,
) -> Self {
Self::new_hashed(
trie_cursor_factory,
hashed_cursor_factory,
keccak256(address),
prefix_set,
#[cfg(feature = "metrics")]
metrics,
)
}
/// Creates a new storage root calculator given a hashed address.
pub fn new_hashed(
pub const fn new_hashed(
trie_cursor_factory: T,
hashed_cursor_factory: H,
hashed_address: B256,
prefix_set: PrefixSet,
#[cfg(feature = "metrics")] metrics: TrieRootMetrics,
) -> Self {
Self {
trie_cursor_factory,
hashed_cursor_factory,
hashed_address,
prefix_set: PrefixSet::default(),
prefix_set,
#[cfg(feature = "metrics")]
metrics,
}