Skip to content

Commit

Permalink
Add early return in ComputeTxEnv for state sync transactions (#12315)
Browse files Browse the repository at this point in the history
`ComputeTxEnv` relied on `txIndex < len(block.Transactions())` which is
violated by Polygon's state sync event transaction. We handle this case
by adding an early return for this case, returning only ibs and
blockContext which is used during state sync event tracing.

Fixes #11701, #12007
  • Loading branch information
shohamc1 authored Oct 15, 2024
1 parent 7d53a63 commit 9a73c4a
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions turbo/transactions/tracing.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,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
Expand All @@ -59,6 +56,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)
Expand Down Expand Up @@ -119,6 +121,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())
}

Expand Down

0 comments on commit 9a73c4a

Please sign in to comment.