From bc823f4689f5fef6ce7e91006b586d9af18cd778 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Tue, 24 Oct 2023 12:37:13 +0200 Subject: [PATCH] cmd/evm: fix flaw in blob gas calculation --- cmd/evm/internal/t8ntool/execution.go | 20 ++++++++++---------- cmd/evm/testdata/30/env.json | 4 ++-- cmd/evm/testdata/30/exp.json | 6 ++++-- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index 6f5d08660a..5cac5f07f8 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -204,22 +204,22 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, rejectedTxs = append(rejectedTxs, &rejectedTx{i, errMsg}) continue } - if tx.Type() == types.BlobTxType { - txBlobGas := uint64(params.BlobTxBlobGasPerBlob * len(tx.BlobHashes())) - if blobGasUsed+txBlobGas > params.BlobTxBlobGasPerBlob { - err := fmt.Errorf("blob gas (%d) would exceed maximum allowance %d", blobGasUsed+txBlobGas, params.MaxBlobGasPerBlock) - log.Warn("rejected tx", "index", i, "err", err) - rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) - continue - } - blobGasUsed += txBlobGas - } msg, err := core.TransactionToMessage(tx, signer, pre.Env.BaseFee) if err != nil { log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", err) rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) continue } + if tx.Type() == types.BlobTxType { + txBlobGas := uint64(params.BlobTxBlobGasPerBlob * len(tx.BlobHashes())) + if used, max := blobGasUsed+txBlobGas, uint64(params.MaxBlobGasPerBlock); used > max { + err := fmt.Errorf("blob gas (%d) would exceed maximum allowance %d", used, max) + log.Warn("rejected tx", "index", i, "err", err) + rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) + continue + } + blobGasUsed += txBlobGas + } tracer, err := getTracerFn(txIndex, tx.Hash()) if err != nil { return nil, nil, nil, err diff --git a/cmd/evm/testdata/30/env.json b/cmd/evm/testdata/30/env.json index af448d7b09..4acd9794be 100644 --- a/cmd/evm/testdata/30/env.json +++ b/cmd/evm/testdata/30/env.json @@ -15,8 +15,8 @@ "parentBaseFee" : "0x08", "parentGasUsed" : "0x00", "parentGasLimit" : "0x1000000000", - "parentExcessDataGas" : "0x1000", - "parentDataGasUsed" : "0x2000", + "parentExcessBlobGas" : "0x1000", + "parentBlobGasUsed" : "0x2000", "blockHashes" : { "0" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da" } diff --git a/cmd/evm/testdata/30/exp.json b/cmd/evm/testdata/30/exp.json index 28c53c1b87..f0b19c6b3d 100644 --- a/cmd/evm/testdata/30/exp.json +++ b/cmd/evm/testdata/30/exp.json @@ -57,6 +57,8 @@ "currentDifficulty": null, "gasUsed": "0xa410", "currentBaseFee": "0x7", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "currentExcessBlobGas": "0x0", + "blobGasUsed": "0x0" } -} +} \ No newline at end of file