diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go index be0a548aa66e..4a4cd57ed996 100644 --- a/cmd/evm/internal/t8ntool/transaction.go +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -134,7 +134,7 @@ func Transaction(ctx *cli.Context) error { } // Check intrinsic gas if gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, - chainConfig.IsHomestead(new(big.Int)), chainConfig.IsIstanbul(new(big.Int)), chainConfig.IsShanghai(new(big.Int), 0)); err != nil { + chainConfig.Rules(new(big.Int), true, 0)); err != nil { r.Error = err results = append(results, r) continue diff --git a/core/bench_test.go b/core/bench_test.go index 2cb8d8c97d82..ecb2c8a621e7 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -83,7 +83,7 @@ func genValueTx(nbytes int) func(int, *BlockGen) { return func(i int, gen *BlockGen) { toaddr := common.Address{} data := make([]byte, nbytes) - gas, _ := IntrinsicGas(data, nil, false, false, false, false) + gas, _ := IntrinsicGas(data, nil, false, params.NonActivatedConfig.Rules(new(big.Int), false, 0)) signer := gen.Signer() gasPrice := big.NewInt(0) if gen.header.BaseFee != nil { diff --git a/core/state_transition.go b/core/state_transition.go index 19c50bce9627..966584e6195e 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -67,10 +67,10 @@ func (result *ExecutionResult) Revert() []byte { } // IntrinsicGas computes the 'intrinsic gas' for a message with the given data. -func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation bool, isHomestead, isEIP2028, isEIP3860 bool) (uint64, error) { +func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation bool, rules params.Rules) (uint64, error) { // Set the starting gas for the raw transaction var gas uint64 - if isContractCreation && isHomestead { + if isContractCreation && rules.IsHomestead { gas = params.TxGasContractCreation } else { gas = params.TxGas @@ -87,7 +87,7 @@ func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation b } // Make sure we don't exceed uint64 for all data combinations nonZeroGas := params.TxDataNonZeroGasFrontier - if isEIP2028 { + if rules.IsIstanbul { nonZeroGas = params.TxDataNonZeroGasEIP2028 } if (math.MaxUint64-gas)/nonZeroGas < nz { @@ -101,7 +101,7 @@ func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation b } gas += z * params.TxDataZeroGas - if isContractCreation && isEIP3860 { + if isContractCreation && rules.IsShanghai { lenWords := toWordSize(dataLen) if (math.MaxUint64-gas)/params.InitCodeWordGas < lenWords { return 0, ErrGasUintOverflow @@ -395,7 +395,7 @@ func (st *StateTransition) transitionDb() (*ExecutionResult, error) { ) // Check clauses 4-5, subtract intrinsic gas if everything is correct - gas, err := IntrinsicGas(msg.Data, msg.AccessList, contractCreation, rules.IsHomestead, rules.IsIstanbul, rules.IsShanghai) + gas, err := IntrinsicGas(msg.Data, msg.AccessList, contractCreation, rules) if err != nil { return nil, err } diff --git a/core/txpool/validation.go b/core/txpool/validation.go index 596ed60daa3b..6a6015eafb94 100644 --- a/core/txpool/validation.go +++ b/core/txpool/validation.go @@ -102,7 +102,7 @@ func ValidateTransaction(tx *types.Transaction, head *types.Header, signer types } // Ensure the transaction has more gas than the bare minimum needed to cover // the transaction metadata - intrGas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, true, opts.Config.IsIstanbul(head.Number), opts.Config.IsShanghai(head.Number, head.Time)) + intrGas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, opts.Config.Rules(head.Number, true, head.Time)) if err != nil { return err } diff --git a/libevm/precompiles/parallel/parallel.go b/libevm/precompiles/parallel/parallel.go index b6674d5a3903..8a4126df0ad7 100644 --- a/libevm/precompiles/parallel/parallel.go +++ b/libevm/precompiles/parallel/parallel.go @@ -309,9 +309,7 @@ func intrinsicGas(data []byte, access types.AccessList, txTo *common.Address, ru data, access, create, - rules.IsHomestead, - rules.IsIstanbul, // EIP-2028 - rules.IsShanghai, // EIP-3860 + *rules, ) } diff --git a/tests/transaction_test_util.go b/tests/transaction_test_util.go index e4cc23a5ad28..c2b60de4bef5 100644 --- a/tests/transaction_test_util.go +++ b/tests/transaction_test_util.go @@ -55,7 +55,7 @@ func (tt *TransactionTest) Run(config *params.ChainConfig) error { return nil, nil, err } // Intrinsic gas - requiredGas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, isHomestead, isIstanbul, false) + requiredGas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, params.Rules{IsHomestead: isHomestead, IsIstanbul: isIstanbul}) if err != nil { return nil, nil, err }