From 0e200edf9b7462e8831c41efdcf2f48711cd0c3c Mon Sep 17 00:00:00 2001 From: Giulio Date: Thu, 10 Oct 2024 22:51:20 +0200 Subject: [PATCH] save --- cmd/geth/main.go | 4 ++++ cmd/utils/flags.go | 41 +++++++++++++++++++++++++++++++++++++++-- miner/miner.go | 13 ++++++++++--- miner/worker.go | 12 ++++++++++-- 4 files changed, 63 insertions(+), 7 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 2675a61675..a1f6dec2a7 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -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, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 6db88ff661..b53426d4b4 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -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) } diff --git a/miner/miner.go b/miner/miner.go index 9892c08ed6..295ddb0dbd 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -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() } diff --git a/miner/worker.go b/miner/worker.go index 51df2764fa..8d08d65662 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -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.