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)