From ebc0def3feeee5ef16f4b92cbf16b939a3138ecf Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 24 Oct 2024 16:30:05 +0200 Subject: [PATCH] Optimization/pre warm intra block cache fix nonce collisions (#7089) Co-authored-by: Ben Adams --- .../Processing/BlockCachePreWarmer.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs index 2f85445b6bc..5c9084a7309 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs @@ -13,6 +13,7 @@ using Nethermind.Evm; using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; using Nethermind.Logging; using Nethermind.State; using Nethermind.Core.Eip2930; @@ -143,6 +144,21 @@ private void WarmupTransactions(ParallelOptions parallelOptions, IReleaseSpec sp tx = block.Transactions[i]; tx.CopyTo(systemTransaction); using IReadOnlyTxProcessingScope scope = env.Build(stateRoot); + + Address senderAddress = tx.SenderAddress!; + if (!scope.WorldState.AccountExists(senderAddress)) + { + scope.WorldState.CreateAccountIfNotExists(senderAddress, UInt256.Zero); + } + + for (int prev = 0; prev < i; prev++) + { + if (senderAddress == block.Transactions[prev].SenderAddress) + { + scope.WorldState.IncrementNonce(senderAddress); + } + } + if (spec.UseTxAccessLists) { scope.WorldState.WarmUp(tx.AccessList); // eip-2930