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()) }