From 8b3a532080279ddb926e9250b0fb1d8ef854ebc0 Mon Sep 17 00:00:00 2001 From: Andrew Ashikhmin <34320705+yperbasis@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:52:28 +0200 Subject: [PATCH] Add early return in `ComputeTxEnv` for state sync transactions (#12447) Cherry pick #12315 into `release/2.61` Co-authored-by: Shoham Chakraborty --- turbo/transactions/tracing.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/turbo/transactions/tracing.go b/turbo/transactions/tracing.go index e84c542b248..bcf44d4f20d 100644 --- a/turbo/transactions/tracing.go +++ b/turbo/transactions/tracing.go @@ -46,9 +46,6 @@ func ComputeTxEnv(ctx context.Context, engine consensus.EngineReader, block *typ // Create the parent state database statedb := state.New(reader) - if txIndex == 0 && len(block.Transactions()) == 0 { - return nil, evmtypes.BlockContext{}, evmtypes.TxContext{}, statedb, reader, nil - } getHeader := func(hash libcommon.Hash, n uint64) *types.Header { h, _ := headerReader.HeaderByNumber(ctx, dbtx, n) return h @@ -60,6 +57,11 @@ func ComputeTxEnv(ctx context.Context, engine consensus.EngineReader, block *typ // Recompute transactions up to the target index. signer := types.MakeSigner(cfg, block.NumberU64(), block.Time()) if historyV3 { + if txIndex == len(block.Transactions()) { + // tx is a state sync transaction + return nil, blockContext, evmtypes.TxContext{}, statedb, reader, nil + } + rules := cfg.Rules(blockContext.BlockNumber, blockContext.Time) txn := block.Transactions()[txIndex] statedb.SetTxContext(txn.Hash(), block.Hash(), txIndex) @@ -120,6 +122,12 @@ func ComputeTxEnv(ctx context.Context, engine consensus.EngineReader, block *typ return nil, blockContext, evmtypes.TxContext{}, statedb, reader, nil } } + + if txIndex == len(block.Transactions()) { + // tx is a state sync transaction + return nil, blockContext, evmtypes.TxContext{}, statedb, reader, nil + } + return nil, evmtypes.BlockContext{}, evmtypes.TxContext{}, nil, nil, fmt.Errorf("transaction index %d out of range for block %x", txIndex, block.Hash()) }