mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-11 00:08:13 -05:00
chore(trie): simplify hashed post state partitioning (#14892)
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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(())
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user