mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-17 18:30:45 +00:00
Revert "core, light, params: implement eip2028 (#19931)"
This reverts commit 67825d860b.
This commit is contained in:
parent
24fa7e3996
commit
7cce425000
5 changed files with 30 additions and 48 deletions
|
|
@ -85,7 +85,7 @@ func genValueTx(nbytes int) func(int, *BlockGen) {
|
||||||
return func(i int, gen *BlockGen) {
|
return func(i int, gen *BlockGen) {
|
||||||
toaddr := common.Address{}
|
toaddr := common.Address{}
|
||||||
data := make([]byte, nbytes)
|
data := make([]byte, nbytes)
|
||||||
gas, _ := IntrinsicGas(data, false, false, false)
|
gas, _ := IntrinsicGas(data, false, false)
|
||||||
tx, _ := types.SignTx(types.NewTransaction(gen.TxNonce(benchRootAddr), toaddr, big.NewInt(1), gas, nil, data), types.HomesteadSigner{}, benchRootKey)
|
tx, _ := types.SignTx(types.NewTransaction(gen.TxNonce(benchRootAddr), toaddr, big.NewInt(1), gas, nil, data), types.HomesteadSigner{}, benchRootKey)
|
||||||
gen.AddTx(tx)
|
gen.AddTx(tx)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,10 +42,8 @@ The state transitioning model does all all the necessary work to work out a vali
|
||||||
3) Create a new state object if the recipient is \0*32
|
3) Create a new state object if the recipient is \0*32
|
||||||
4) Value transfer
|
4) Value transfer
|
||||||
== If contract creation ==
|
== If contract creation ==
|
||||||
|
4a) Attempt to run transaction data
|
||||||
4a) Attempt to run transaction data
|
4b) If valid, use result as code for the new state object
|
||||||
4b) If valid, use result as code for the new state object
|
|
||||||
|
|
||||||
== end ==
|
== end ==
|
||||||
5) Run Script section
|
5) Run Script section
|
||||||
6) Derive new state root
|
6) Derive new state root
|
||||||
|
|
@ -79,10 +77,10 @@ type Message interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
// IntrinsicGas computes the 'intrinsic gas' for a message with the given data.
|
// IntrinsicGas computes the 'intrinsic gas' for a message with the given data.
|
||||||
func IntrinsicGas(data []byte, contractCreation, isEIP155 bool, isEIP2028 bool) (uint64, error) {
|
func IntrinsicGas(data []byte, contractCreation, homestead bool) (uint64, error) {
|
||||||
// Set the starting gas for the raw transaction
|
// Set the starting gas for the raw transaction
|
||||||
var gas uint64
|
var gas uint64
|
||||||
if contractCreation && isEIP155 {
|
if contractCreation && homestead {
|
||||||
gas = params.TxGasContractCreation
|
gas = params.TxGasContractCreation
|
||||||
} else {
|
} else {
|
||||||
gas = params.TxGas
|
gas = params.TxGas
|
||||||
|
|
@ -97,14 +95,10 @@ func IntrinsicGas(data []byte, contractCreation, isEIP155 bool, isEIP2028 bool)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Make sure we don't exceed uint64 for all data combinations
|
// Make sure we don't exceed uint64 for all data combinations
|
||||||
nonZeroGas := params.TxDataNonZeroGasFrontier
|
if (math.MaxUint64-gas)/params.TxDataNonZeroGas < nz {
|
||||||
if isEIP2028 {
|
|
||||||
nonZeroGas = params.TxDataNonZeroGasEIP2028
|
|
||||||
}
|
|
||||||
if (math.MaxUint64-gas)/nonZeroGas < nz {
|
|
||||||
return 0, vm.ErrOutOfGas
|
return 0, vm.ErrOutOfGas
|
||||||
}
|
}
|
||||||
gas += nz * nonZeroGas
|
gas += nz * params.TxDataNonZeroGas
|
||||||
|
|
||||||
z := uint64(len(data)) - nz
|
z := uint64(len(data)) - nz
|
||||||
if (math.MaxUint64-gas)/params.TxDataZeroGas < z {
|
if (math.MaxUint64-gas)/params.TxDataZeroGas < z {
|
||||||
|
|
@ -229,11 +223,10 @@ func (st *StateTransition) TransitionDb(owner common.Address) (ret []byte, usedG
|
||||||
sender := st.from() // err checked in preCheck
|
sender := st.from() // err checked in preCheck
|
||||||
|
|
||||||
homestead := st.evm.ChainConfig().IsHomestead(st.evm.BlockNumber)
|
homestead := st.evm.ChainConfig().IsHomestead(st.evm.BlockNumber)
|
||||||
istanbul := st.evm.ChainConfig().IsIstanbul(st.evm.BlockNumber)
|
|
||||||
contractCreation := msg.To() == nil
|
contractCreation := msg.To() == nil
|
||||||
|
|
||||||
// Pay intrinsic gas
|
// Pay intrinsic gas
|
||||||
gas, err := IntrinsicGas(st.data, contractCreation, homestead, istanbul)
|
gas, err := IntrinsicGas(st.data, contractCreation, homestead)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, false, err, nil
|
return nil, 0, false, err, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -237,8 +237,6 @@ type TxPool struct {
|
||||||
signer types.Signer
|
signer types.Signer
|
||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
|
|
||||||
istanbul bool // Fork indicator whether we are in the istanbul stage.
|
|
||||||
|
|
||||||
currentState *state.StateDB // Current state in the blockchain head
|
currentState *state.StateDB // Current state in the blockchain head
|
||||||
pendingNonces *txNoncer // Pending state tracking virtual nonces
|
pendingNonces *txNoncer // Pending state tracking virtual nonces
|
||||||
currentMaxGas uint64 // Current gas limit for transaction caps
|
currentMaxGas uint64 // Current gas limit for transaction caps
|
||||||
|
|
@ -608,7 +606,7 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error {
|
||||||
|
|
||||||
if tx.To() == nil || (tx.To() != nil && !tx.IsSpecialTransaction()) {
|
if tx.To() == nil || (tx.To() != nil && !tx.IsSpecialTransaction()) {
|
||||||
// Ensure the transaction has more gas than the basic tx fee.
|
// Ensure the transaction has more gas than the basic tx fee.
|
||||||
intrGas, err := IntrinsicGas(tx.Data(), tx.To() == nil, true, pool.istanbul)
|
intrGas, err := IntrinsicGas(tx.Data(), tx.To() == nil, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -1260,10 +1258,6 @@ func (pool *TxPool) reset(oldHead, newHead *types.Header) {
|
||||||
log.Debug("Reinjecting stale transactions", "count", len(reinject))
|
log.Debug("Reinjecting stale transactions", "count", len(reinject))
|
||||||
senderCacher.recover(pool.signer, reinject)
|
senderCacher.recover(pool.signer, reinject)
|
||||||
pool.addTxsLocked(reinject, false)
|
pool.addTxsLocked(reinject, false)
|
||||||
|
|
||||||
// Update all fork indicator by next pending block number.
|
|
||||||
next := new(big.Int).Add(newHead.Number, big.NewInt(1))
|
|
||||||
pool.istanbul = pool.chainconfig.IsIstanbul(next)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// promoteExecutables moves transactions that have become processable from the
|
// promoteExecutables moves transactions that have become processable from the
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ package light
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -67,7 +66,7 @@ type TxPool struct {
|
||||||
mined map[common.Hash][]*types.Transaction // mined transactions by block hash
|
mined map[common.Hash][]*types.Transaction // mined transactions by block hash
|
||||||
clearIdx uint64 // earliest block nr that can contain mined tx info
|
clearIdx uint64 // earliest block nr that can contain mined tx info
|
||||||
|
|
||||||
istanbul bool // Fork indicator whether we are in the istanbul stage.
|
homestead bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// TxRelayBackend provides an interface to the mechanism that forwards transacions
|
// TxRelayBackend provides an interface to the mechanism that forwards transacions
|
||||||
|
|
@ -311,10 +310,7 @@ func (pool *TxPool) setNewHead(head *types.Header) {
|
||||||
txc, _ := pool.reorgOnNewHead(ctx, head)
|
txc, _ := pool.reorgOnNewHead(ctx, head)
|
||||||
m, r := txc.getLists()
|
m, r := txc.getLists()
|
||||||
pool.relay.NewHead(pool.head, m, r)
|
pool.relay.NewHead(pool.head, m, r)
|
||||||
|
pool.homestead = pool.config.IsHomestead(head.Number)
|
||||||
// Update fork indicator by next pending block number
|
|
||||||
next := new(big.Int).Add(head.Number, big.NewInt(1))
|
|
||||||
pool.istanbul = pool.config.IsIstanbul(next)
|
|
||||||
pool.signer = types.MakeSigner(pool.config, head.Number)
|
pool.signer = types.MakeSigner(pool.config, head.Number)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -407,7 +403,7 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should supply enough intrinsic gas
|
// Should supply enough intrinsic gas
|
||||||
gas, err := core.IntrinsicGas(tx.Data(), tx.To() == nil, true, pool.istanbul)
|
gas, err := core.IntrinsicGas(tx.Data(), tx.To() == nil, pool.homestead)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,10 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations.
|
GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations.
|
||||||
MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be.
|
MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be.
|
||||||
MaxGasLimit uint64 = 0x7fffffffffffffff // Maximum the gas limit (2^63-1).
|
MaxGasLimit uint64 = 0x7fffffffffffffff // Maximum the gas limit (2^63-1).
|
||||||
GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block.
|
GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block.
|
||||||
XDCGenesisGasLimit uint64 = 84000000
|
XDCGenesisGasLimit uint64 = 84000000
|
||||||
|
|
||||||
MaximumExtraDataSize uint64 = 32 // Maximum size extra data may be after Genesis.
|
MaximumExtraDataSize uint64 = 32 // Maximum size extra data may be after Genesis.
|
||||||
|
|
@ -50,23 +50,17 @@ const (
|
||||||
JumpdestGas uint64 = 1 // Refunded gas, once per SSTORE operation if the zeroness changes to zero.
|
JumpdestGas uint64 = 1 // Refunded gas, once per SSTORE operation if the zeroness changes to zero.
|
||||||
EpochDuration uint64 = 30000 // Duration between proof-of-work epochs.
|
EpochDuration uint64 = 30000 // Duration between proof-of-work epochs.
|
||||||
CallGas uint64 = 40 // Once per CALL operation & message call transaction.
|
CallGas uint64 = 40 // Once per CALL operation & message call transaction.
|
||||||
|
CreateDataGas uint64 = 200 //
|
||||||
CreateDataGas uint64 = 200 //
|
CallCreateDepth uint64 = 1024 // Maximum depth of call/create stack.
|
||||||
CallCreateDepth uint64 = 1024 // Maximum depth of call/create stack.
|
ExpGas uint64 = 10 // Once per EXP instruction
|
||||||
ExpGas uint64 = 10 // Once per EXP instruction
|
LogGas uint64 = 375 // Per LOG* operation.
|
||||||
LogGas uint64 = 375 // Per LOG* operation.
|
CopyGas uint64 = 3 //
|
||||||
CopyGas uint64 = 3 //
|
StackLimit uint64 = 1024 // Maximum size of VM stack allowed.
|
||||||
StackLimit uint64 = 1024 // Maximum size of VM stack allowed.
|
TierStepGas uint64 = 0 // Once per operation, for a selection of them.
|
||||||
TierStepGas uint64 = 0 // Once per operation, for a selection of them.
|
LogTopicGas uint64 = 375 // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.
|
||||||
LogTopicGas uint64 = 375 // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.
|
CreateGas uint64 = 32000 // Once per CREATE operation & contract-creation transaction.
|
||||||
CreateGas uint64 = 32000 // Once per CREATE operation & contract-creation transaction.
|
|
||||||
Create2Gas uint64 = 32000 // Once per CREATE2 operation
|
|
||||||
SelfdestructRefundGas uint64 = 24000 // Refunded following a selfdestruct operation.
|
|
||||||
MemoryGas uint64 = 3 // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
|
|
||||||
TxDataNonZeroGasFrontier uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
|
|
||||||
TxDataNonZeroGasEIP2028 uint64 = 16 // Per byte of non zero data attached to a transaction after EIP 2028 (part in Istanbul)
|
|
||||||
|
|
||||||
SuicideRefundGas uint64 = 24000 // Refunded following a suicide operation.
|
SuicideRefundGas uint64 = 24000 // Refunded following a suicide operation.
|
||||||
|
MemoryGas uint64 = 3 // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
|
||||||
TxDataNonZeroGas uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
|
TxDataNonZeroGas uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
|
||||||
|
|
||||||
MaxCodeSize = 24576 // Maximum bytecode to permit for a contract
|
MaxCodeSize = 24576 // Maximum bytecode to permit for a contract
|
||||||
|
|
@ -110,6 +104,11 @@ const (
|
||||||
SstoreResetGasEIP2200 uint64 = 5000 // Once per SSTORE operation from clean non-zero to something else
|
SstoreResetGasEIP2200 uint64 = 5000 // Once per SSTORE operation from clean non-zero to something else
|
||||||
SstoreClearsScheduleRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot
|
SstoreClearsScheduleRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot
|
||||||
|
|
||||||
|
Create2Gas uint64 = 32000 // Once per CREATE2 operation
|
||||||
|
SelfdestructRefundGas uint64 = 24000 // Refunded following a selfdestruct operation.
|
||||||
|
TxDataNonZeroGasFrontier uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
|
||||||
|
TxDataNonZeroGasEIP2028 uint64 = 16 // Per byte of non zero data attached to a transaction after EIP 2028 (part in Istanbul)
|
||||||
|
|
||||||
// These have been changed during the course of the chain
|
// These have been changed during the course of the chain
|
||||||
CallGasFrontier uint64 = 40 // Once per CALL operation & message call transaction.
|
CallGasFrontier uint64 = 40 // Once per CALL operation & message call transaction.
|
||||||
CallGasEIP150 uint64 = 700 // Static portion of gas for CALL-derivates after EIP 150 (Tangerine)
|
CallGasEIP150 uint64 = 700 // Static portion of gas for CALL-derivates after EIP 150 (Tangerine)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue