diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 8a2d3cd26521..e927b73bf0ec 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -90,6 +90,11 @@ protected enum ExecutionOptions /// SkipValidation = 4, + /// + /// Marker option used by state pre-warmer + /// + Warmup = 8, + /// /// Skip potential fail checks and commit state after execution /// @@ -155,7 +160,7 @@ public TransactionResult Trace(Transaction transaction, ITxTracer txTracer) => ExecuteCore(transaction, txTracer, ExecutionOptions.SkipValidationAndCommit); public virtual TransactionResult Warmup(Transaction transaction, ITxTracer txTracer) => - ExecuteCore(transaction, txTracer, ExecutionOptions.SkipValidation); + ExecuteCore(transaction, txTracer, ExecutionOptions.Warmup | ExecutionOptions.SkipValidation); private TransactionResult ExecuteCore(Transaction tx, ITxTracer tracer, ExecutionOptions opts) { @@ -222,7 +227,10 @@ protected virtual TransactionResult Execute(Transaction tx, ITxTracer tracer, Ex ExecuteEvmCall(tx, header, spec, tracer, opts, delegationRefunds, intrinsicGas, accessTracker, gasAvailable, env, out substate, out spentGas); PayFees(tx, header, spec, tracer, in substate, spentGas.SpentGas, premiumPerGas, blobBaseFee, statusCode); - tx.SpentGas = spentGas.SpentGas; + + //only main thread updates transaction + if (!opts.HasFlag(ExecutionOptions.Warmup)) + tx.SpentGas = spentGas.SpentGas; // Finalize if (restore)