diff --git a/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs b/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs index 69fd96b9d41..57c3253791e 100644 --- a/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs +++ b/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs @@ -163,10 +163,12 @@ public ChangeTrace(byte[]? after) { After = after ?? StorageTree.ZeroBytes; Before = StorageTree.ZeroBytes; + IsInitialValue = true; } public byte[] Before; public byte[] After; + public bool IsInitialValue; } /// diff --git a/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs b/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs index 5386fb83944..db28e3660fd 100644 --- a/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs +++ b/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs @@ -557,11 +557,7 @@ public void SaveChange(StorageCell storageCell, byte[] value) ref ChangeTrace valueChanges = ref BlockChange.GetValueRefOrAddDefault(storageCell.Index, out bool exists); if (!exists) { - byte[] treeValue = !_provider._populatePreBlockCache ? - LoadFromTreeReadPreWarmCache(in storageCell) : - LoadFromTreePopulatePrewarmCache(in storageCell); - - valueChanges = new ChangeTrace(treeValue, value); + valueChanges = new ChangeTrace(value); } else { @@ -635,7 +631,8 @@ private byte[] LoadFromTreeStorage(StorageCell storageCell) foreach (var kvp in BlockChange) { byte[] after = kvp.Value.After; - if (!Bytes.AreEqual(kvp.Value.Before, after)) + if (!Bytes.AreEqual(kvp.Value.Before, after) + || kvp.Value.IsInitialValue) // IsInitialValue is so that it does not skip change if it does not know existing value. { BlockChange[kvp.Key] = new(after, after); StorageTree.Set(kvp.Key, after);