perf: remove empty HashMap instances from TrieUpdates and HashedPostState (#13976)

This commit is contained in:
kien-rise
2025-01-28 18:00:05 +07:00
committed by GitHub
parent af30448f4c
commit e11e1f30fa
2 changed files with 11 additions and 1 deletions

View File

@ -76,6 +76,9 @@ impl TrieUpdates {
hashed_address: B256,
storage_updates: StorageTrieUpdates,
) {
if storage_updates.is_empty() {
return;
}
let existing = self.storage_tries.insert(hashed_address, storage_updates);
debug_assert!(existing.is_none());
}

View File

@ -48,7 +48,9 @@ impl HashedPostState {
let mut storages = HashMap::with_capacity_and_hasher(hashed.len(), Default::default());
for (address, (account, storage)) in hashed {
accounts.insert(address, account);
storages.insert(address, storage);
if !storage.is_empty() {
storages.insert(address, storage);
}
}
Self { accounts, storages }
}
@ -193,6 +195,11 @@ impl HashedStorage {
Self { wiped, storage: HashMap::default() }
}
/// Check if self is empty.
pub fn is_empty(&self) -> bool {
!self.wiped && self.storage.is_empty()
}
/// Create new hashed storage from iterator.
pub fn from_iter(wiped: bool, iter: impl IntoIterator<Item = (B256, U256)>) -> Self {
Self { wiped, storage: HashMap::from_iter(iter) }