core/types: reduce alloc in hot code path (#33523)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Keeper Build (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run

Reduce allocations in calculation of tx cost.

---------

Co-authored-by: weixie.cui <weixie.cui@okg.com>
Co-authored-by: Sina M <1591639+s1na@users.noreply.github.com>
This commit is contained in:
cui 2026-03-07 21:31:36 +08:00 committed by GitHub
parent 0d043d071e
commit e15d4ccc01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -317,11 +317,15 @@ func (tx *Transaction) To() *common.Address {
// Cost returns (gas * gasPrice) + (blobGas * blobGasPrice) + value.
func (tx *Transaction) Cost() *big.Int {
total := new(big.Int).Mul(tx.GasPrice(), new(big.Int).SetUint64(tx.Gas()))
if tx.Type() == BlobTxType {
total.Add(total, new(big.Int).Mul(tx.BlobGasFeeCap(), new(big.Int).SetUint64(tx.BlobGas())))
// Avoid allocating copies via tx.GasPrice()/tx.Value(); use inner values directly.
total := new(big.Int).SetUint64(tx.inner.gas())
total.Mul(total, tx.inner.gasPrice())
if blobtx, ok := tx.inner.(*BlobTx); ok {
tmp := new(big.Int).SetUint64(blobtx.blobGas())
tmp.Mul(tmp, blobtx.BlobFeeCap.ToBig())
total.Add(total, tmp)
}
total.Add(total, tx.Value())
total.Add(total, tx.inner.value())
return total
}