diff --git a/crates/engine/tree/src/tree/payload_processor/multiproof.rs b/crates/engine/tree/src/tree/payload_processor/multiproof.rs index 53497cf2f6..a020875dc3 100644 --- a/crates/engine/tree/src/tree/payload_processor/multiproof.rs +++ b/crates/engine/tree/src/tree/payload_processor/multiproof.rs @@ -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"); diff --git a/crates/trie/common/src/hashed_state.rs b/crates/trie/common/src/hashed_state.rs index 5a5ad75ff1..1875a132dc 100644 --- a/crates/trie/common/src/hashed_state.rs +++ b/crates/trie/common/src/hashed_state.rs @@ -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 { diff --git a/crates/trie/sparse/src/state.rs b/crates/trie/sparse/src/state.rs index 496c1cf21c..5c8e167507 100644 --- a/crates/trie/sparse/src/state.rs +++ b/crates/trie/sparse/src/state.rs @@ -595,6 +595,10 @@ impl SparseStateTrie { path: Nibbles, value: Vec, ) -> 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 SparseStateTrie { slot: Nibbles, value: Vec, ) -> 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 SparseStateTrie { .map(|v| TrieAccount::decode(&mut &v[..])) .transpose()? else { + trace!(target: "trie::sparse", ?address, "Account not found in trie, skipping storage root update"); return Ok(()) };