From b6256ef33e5254c1bf13606c31d4f0d1a96c3b37 Mon Sep 17 00:00:00 2001 From: lightclient Date: Mon, 23 Jun 2025 18:22:10 +0200 Subject: [PATCH] core: move tx gas limit check to state transition --- cmd/evm/internal/t8ntool/transaction.go | 3 +++ core/block_validator.go | 9 +-------- core/state_transition.go | 4 ++++ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go index 2bc4f73b60..0f39df0753 100644 --- a/cmd/evm/internal/t8ntool/transaction.go +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -183,6 +183,9 @@ func Transaction(ctx *cli.Context) error { if chainConfig.IsShanghai(new(big.Int), 0) && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize { r.Error = errors.New("max initcode size exceeded") } + if chainConfig.IsOsaka(new(big.Int), 0) && tx.Gas() > params.MaxTxGas { + r.Error = errors.New("gas limit exceeds maximum") + } results = append(results, r) } out, err := json.MarshalIndent(results, "", " ") diff --git a/core/block_validator.go b/core/block_validator.go index 57e588b53d..591e472bc1 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -82,15 +82,8 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error { } // Blob transactions may be present after the Cancun fork. - var ( - blobs int - isOsaka = v.config.IsOsaka(block.Number(), block.Time()) - ) + var blobs int for i, tx := range block.Transactions() { - if isOsaka && tx.Gas() > params.MaxTxGas { - return fmt.Errorf("%w (cap: %d, tx: %d)", ErrGasLimitTooHigh, params.MaxTxGas, tx.Gas()) - } - // Count the number of blobs to validate against the header's blobGasUsed blobs += len(tx.BlobHashes()) diff --git a/core/state_transition.go b/core/state_transition.go index ff2051ddd2..d2949a7c12 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -394,6 +394,10 @@ func (st *stateTransition) preCheck() error { return fmt.Errorf("%w (sender %v)", ErrEmptyAuthList, msg.From) } } + // Verify tx gas limit does not exceed EIP-7825 cap. + if st.evm.ChainConfig().IsOsaka(st.evm.Context.BlockNumber, st.evm.Context.Time) && msg.GasLimit > params.MaxTxGas { + return fmt.Errorf("%w (cap: %d, tx: %d)", ErrGasLimitTooHigh, params.MaxTxGas, msg.GasLimit) + } return st.buyGas() }