chore(trie): simplify hashed post state partitioning (#14892)

This commit is contained in:
Alexey Shekhirin
2025-03-13 16:53:29 +00:00
committed by GitHub
parent 217f595c61
commit eeaa65a668
3 changed files with 12 additions and 12 deletions

View File

@@ -731,8 +731,7 @@ where
);
}
MultiProofMessage::StateUpdate(source, update) => {
trace!(target: "engine::root", "processing
MultiProofMessage::StateUpdate");
trace!(target: "engine::root", "processing MultiProofMessage::StateUpdate");
if state_update_proofs_requested == 0 {
first_update_time = Some(Instant::now());
debug!(target: "engine::root", "Started state root calculation");

View File

@@ -244,11 +244,6 @@ impl HashedPostState {
if let Some(storage_not_in_targets) = storage_not_in_targets {
state_updates_not_in_targets.storages.insert(address, storage_not_in_targets);
// Storage update should have an associated account, if it exists.
if let Some(account) = self.accounts.remove(&address) {
state_updates_not_in_targets.accounts.insert(address, account);
}
}
retain
@@ -948,7 +943,7 @@ mod tests {
assert_eq!(
with_targets,
HashedPostState {
accounts: B256Map::default(),
accounts: B256Map::from_iter([(addr1, Some(Default::default()))]),
storages: B256Map::from_iter([(
addr1,
HashedStorage {
@@ -961,10 +956,7 @@ mod tests {
assert_eq!(
without_targets,
HashedPostState {
accounts: B256Map::from_iter([
(addr1, Some(Default::default())),
(addr2, Some(Default::default()))
]),
accounts: B256Map::from_iter([(addr2, Some(Default::default()))]),
storages: B256Map::from_iter([(
addr1,
HashedStorage {

View File

@@ -595,6 +595,10 @@ impl<F: BlindedProviderFactory> SparseStateTrie<F> {
path: Nibbles,
value: Vec<u8>,
) -> SparseStateTrieResult<()> {
if !self.revealed_account_paths.contains(&path) {
self.revealed_account_paths.insert(path.clone());
}
self.state.update_leaf(path, value)?;
Ok(())
}
@@ -606,6 +610,10 @@ impl<F: BlindedProviderFactory> SparseStateTrie<F> {
slot: Nibbles,
value: Vec<u8>,
) -> SparseStateTrieResult<()> {
if !self.revealed_storage_paths.get(&address).is_some_and(|slots| slots.contains(&slot)) {
self.revealed_storage_paths.entry(address).or_default().insert(slot.clone());
}
let storage_trie = self.storages.get_mut(&address).ok_or(SparseTrieErrorKind::Blind)?;
storage_trie.update_leaf(slot, value)?;
Ok(())
@@ -663,6 +671,7 @@ impl<F: BlindedProviderFactory> SparseStateTrie<F> {
.map(|v| TrieAccount::decode(&mut &v[..]))
.transpose()?
else {
trace!(target: "trie::sparse", ?address, "Account not found in trie, skipping storage root update");
return Ok(())
};