This commit is contained in:
Giulio 2024-10-10 22:51:20 +02:00
parent f2ecd7a833
commit 0e200edf9b
4 changed files with 63 additions and 7 deletions

View file

@ -117,6 +117,10 @@ var (
utils.MaxPendingPeersFlag,
utils.MiningEnabledFlag, // deprecated
utils.MinerGasLimitFlag,
utils.MinerEIP7783BlockNumStartFlag,
utils.MinerEIP7783GasLimitCapFlag,
utils.MinerEIP7783IncreaseRateFlag,
utils.MinerEIP7783InitialGasLimitFlag,
utils.MinerGasPriceFlag,
utils.MinerEtherbaseFlag, // deprecated
utils.MinerExtraDataFlag,

View file

@ -478,7 +478,30 @@ var (
MinerGasLimitFlag = &cli.Uint64Flag{
Name: "miner.gaslimit",
Usage: "Target gas ceiling for mined blocks",
Value: ethconfig.Defaults.Miner.GasCeil,
Category: flags.MinerCategory,
}
MinerEIP7783BlockNumStartFlag = &flags.BigFlag{
Name: "miner.eip7783.blocknumstart",
Usage: "The block number to start using EIP-7783 gas limit calculation",
Value: ethconfig.Defaults.Miner.EIP7783BlockNumStart,
Category: flags.MinerCategory,
}
MinerEIP7783InitialGasLimitFlag = &cli.Uint64Flag{
Name: "miner.eip7783.initialgaslimit",
Usage: "The initial gas limit to use before EIP-7783 calculation",
Value: ethconfig.Defaults.Miner.EIP7783InitialGasLimit,
Category: flags.MinerCategory,
}
MinerEIP7783IncreaseRateFlag = &cli.Uint64Flag{
Name: "miner.eip7783.increaserate",
Usage: "The rate of gas limit increase per block",
Value: ethconfig.Defaults.Miner.Eip7783IncreaseRate,
Category: flags.MinerCategory,
}
MinerEIP7783GasLimitCapFlag = &cli.Uint64Flag{
Name: "miner.eip7783.gaslimitcap",
Usage: "The maximum gas limit to use after EIP-7783 calculation",
Value: ethconfig.Defaults.Miner.EIP7783GasLimitCap,
Category: flags.MinerCategory,
}
MinerGasPriceFlag = &flags.BigFlag{
@ -1553,8 +1576,22 @@ func setMiner(ctx *cli.Context, cfg *miner.Config) {
cfg.ExtraData = []byte(ctx.String(MinerExtraDataFlag.Name))
}
if ctx.IsSet(MinerGasLimitFlag.Name) {
cfg.GasCeil = ctx.Uint64(MinerGasLimitFlag.Name)
cfg.GasCeil = new(uint64)
*cfg.GasCeil = ctx.Uint64(MinerGasLimitFlag.Name)
}
if ctx.IsSet(MinerEIP7783BlockNumStartFlag.Name) {
cfg.EIP7783BlockNumStart = flags.GlobalBig(ctx, MinerEIP7783BlockNumStartFlag.Name)
}
if ctx.IsSet(MinerEIP7783GasLimitCapFlag.Name) {
cfg.EIP7783GasLimitCap = ctx.Uint64(MinerEIP7783GasLimitCapFlag.Name)
}
if ctx.IsSet(MinerEIP7783IncreaseRateFlag.Name) {
cfg.Eip7783IncreaseRate = ctx.Uint64(MinerEIP7783IncreaseRateFlag.Name)
}
if ctx.IsSet(MinerEIP7783InitialGasLimitFlag.Name) {
cfg.EIP7783InitialGasLimit = ctx.Uint64(MinerEIP7783InitialGasLimitFlag.Name)
}
if ctx.IsSet(MinerGasPriceFlag.Name) {
cfg.GasPrice = flags.GlobalBig(ctx, MinerGasPriceFlag.Name)
}

View file

@ -45,14 +45,20 @@ type Config struct {
Etherbase common.Address `toml:"-"` // Deprecated
PendingFeeRecipient common.Address `toml:"-"` // Address for pending block rewards.
ExtraData hexutil.Bytes `toml:",omitempty"` // Block extra data set by the miner
GasCeil uint64 // Target gas ceiling for mined blocks.
GasCeil *uint64 // Target gas ceiling for mined blocks.
GasPrice *big.Int // Minimum gas price for mining a transaction
Recommit time.Duration // The time interval for miner to re-create mining work.
// EIP-7783 parameters
EIP7783BlockNumStart *big.Int // The block number to start using EIP-7783 gas limit calculation
EIP7783InitialGasLimit uint64 // The initial gas limit to use before EIP-7783 calculation
Eip7783IncreaseRate uint64 // The rate of gas limit increase per block
EIP7783GasLimitCap uint64 // The maximum gas limit to use after EIP-7783 calculation
}
// DefaultConfig contains default settings for miner.
var DefaultConfig = Config{
GasCeil: 30_000_000,
//GasCeil: 30_000_000,
GasPrice: big.NewInt(params.GWei / 1000),
// The default recommit time is chosen as two seconds since
@ -113,7 +119,8 @@ func (miner *Miner) SetExtra(extra []byte) error {
// For pre-1559 blocks, it sets the ceiling.
func (miner *Miner) SetGasCeil(ceil uint64) {
miner.confMu.Lock()
miner.config.GasCeil = ceil
miner.config.GasCeil = new(uint64)
*miner.config.GasCeil = ceil
miner.confMu.Unlock()
}

View file

@ -26,6 +26,7 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/consensus/misc/eip1559"
"github.com/ethereum/go-ethereum/consensus/misc/eip4844"
"github.com/ethereum/go-ethereum/consensus/misc/eip7783"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/stateless"
@ -171,11 +172,18 @@ func (miner *Miner) prepareWork(genParams *generateParams, witness bool) (*envir
}
timestamp = parent.Time + 1
}
useEip7783 := miner.config.GasCeil == nil
var gasLimit uint64
if useEip7783 {
gasLimit = eip7783.CalcGasLimitEIP7783(parent.Number, miner.config.EIP7783BlockNumStart, miner.config.EIP7783InitialGasLimit, miner.config.Eip7783IncreaseRate, miner.config.EIP7783GasLimitCap)
} else {
gasLimit = core.CalcGasLimit(parent.GasLimit, *miner.config.GasCeil)
}
// Construct the sealing block header.
header := &types.Header{
ParentHash: parent.Hash(),
Number: new(big.Int).Add(parent.Number, common.Big1),
GasLimit: core.CalcGasLimit(parent.GasLimit, miner.config.GasCeil),
GasLimit: gasLimit,
Time: timestamp,
Coinbase: genParams.coinbase,
}
@ -192,7 +200,7 @@ func (miner *Miner) prepareWork(genParams *generateParams, witness bool) (*envir
header.BaseFee = eip1559.CalcBaseFee(miner.chainConfig, parent)
if !miner.chainConfig.IsLondon(parent.Number) {
parentGasLimit := parent.GasLimit * miner.chainConfig.ElasticityMultiplier()
header.GasLimit = core.CalcGasLimit(parentGasLimit, miner.config.GasCeil)
header.GasLimit = core.CalcGasLimit(parentGasLimit, gasLimit)
}
}
// Run the consensus preparation with the default or customized consensus engine.