diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/worldview/accumulator/DiffBasedWorldStateUpdateAccumulator.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/worldview/accumulator/DiffBasedWorldStateUpdateAccumulator.java index b140f0940e3..91581cdade7 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/worldview/accumulator/DiffBasedWorldStateUpdateAccumulator.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/worldview/accumulator/DiffBasedWorldStateUpdateAccumulator.java @@ -45,7 +45,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -365,27 +364,28 @@ public void commit() { return; } - final TreeSet> entries = - new TreeSet<>(Map.Entry.comparingByKey()); - entries.addAll(updatedAccount.getUpdatedStorage().entrySet()); - // parallel stream here may cause database corruption - entries.forEach( - storageUpdate -> { - final UInt256 keyUInt = storageUpdate.getKey(); - final StorageSlotKey slotKey = - new StorageSlotKey(hashAndSaveSlotPreImage(keyUInt), Optional.of(keyUInt)); - final UInt256 value = storageUpdate.getValue(); - final DiffBasedValue pendingValue = pendingStorageUpdates.get(slotKey); - if (pendingValue == null) { - pendingStorageUpdates.put( - slotKey, - new DiffBasedValue<>( - updatedAccount.getOriginalStorageValue(keyUInt), value)); - } else { - pendingValue.setUpdated(value); - } - }); + updatedAccount + .getUpdatedStorage() + .entrySet() + .forEach( + storageUpdate -> { + final UInt256 keyUInt = storageUpdate.getKey(); + final StorageSlotKey slotKey = + new StorageSlotKey( + hashAndSaveSlotPreImage(keyUInt), Optional.of(keyUInt)); + final UInt256 value = storageUpdate.getValue(); + final DiffBasedValue pendingValue = + pendingStorageUpdates.get(slotKey); + if (pendingValue == null) { + pendingStorageUpdates.put( + slotKey, + new DiffBasedValue<>( + updatedAccount.getOriginalStorageValue(keyUInt), value)); + } else { + pendingValue.setUpdated(value); + } + }); updatedAccount.getUpdatedStorage().clear();