From cd153bddc622d805f88c030c4e9494d287ee0ec7 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Thu, 8 May 2025 22:56:56 +0800 Subject: [PATCH 1/8] config: apply two default miner option --- miner/minerconfig/config.go | 38 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/miner/minerconfig/config.go b/miner/minerconfig/config.go index 7c37112d44..2641b92c4b 100644 --- a/miner/minerconfig/config.go +++ b/miner/minerconfig/config.go @@ -28,7 +28,9 @@ import ( ) var ( - defaultDelayLeftOver = 50 * time.Millisecond + defaultDelayLeftOver = 50 * time.Millisecond + defaultRecommit = 10 * time.Second + defaultMaxWaitProposalInSecs = uint64(45) // default configurations for MEV defaultGreedyMergeTx bool = true defaultValidatorCommission uint64 = 100 @@ -39,17 +41,16 @@ var ( // Config is the configuration parameters of mining. type Config struct { - Etherbase common.Address `toml:",omitempty"` // Public address for block mining rewards - ExtraData hexutil.Bytes `toml:",omitempty"` // Block extra data set by the miner - DelayLeftOver *time.Duration `toml:",omitempty"` // Time reserved to finalize a block(calculate root, distribute income...) - GasFloor uint64 // Target gas floor 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. - VoteEnable bool // Whether to vote when mining - MaxWaitProposalInSecs uint64 // The maximum time to wait for the proposal to be done, it's aimed to prevent validator being slashed when restarting - - DisableVoteAttestation bool // Whether to skip assembling vote attestation + Etherbase common.Address `toml:",omitempty"` // Public address for block mining rewards + ExtraData hexutil.Bytes `toml:",omitempty"` // Block extra data set by the miner + DelayLeftOver *time.Duration `toml:",omitempty"` // Time reserved to finalize a block(calculate root, distribute income...) + GasFloor uint64 // Target gas floor 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. + VoteEnable bool // Whether to vote when mining + MaxWaitProposalInSecs *uint64 // The maximum time to wait for the proposal to be done, it's aimed to prevent validator being slashed when restarting + DisableVoteAttestation bool // Whether to skip assembling vote attestation Mev MevConfig // Mev configuration } @@ -63,12 +64,12 @@ var DefaultConfig = Config{ // consensus-layer usually will wait a half slot of time(6s) // for payload generation. It should be enough for Geth to // run 3 rounds. - Recommit: 3 * time.Second, + Recommit: &defaultRecommit, DelayLeftOver: &defaultDelayLeftOver, // The default value is set to 30 seconds. // Because the avg restart time in mainnet is around 30s, so the node try to wait for the next multi-proposals to be done. - MaxWaitProposalInSecs: 30, + MaxWaitProposalInSecs: &defaultMaxWaitProposalInSecs, Mev: DefaultMevConfig, } @@ -106,11 +107,20 @@ func ApplyDefaultMinerConfig(cfg *Config) { log.Warn("ApplyDefaultMinerConfig cfg == nil") return } + // check [Eth.Miner] if cfg.DelayLeftOver == nil { cfg.DelayLeftOver = &defaultDelayLeftOver log.Info("ApplyDefaultMinerConfig", "DelayLeftOver", *cfg.DelayLeftOver) } + if cfg.MaxWaitProposalInSecs == nil { + cfg.MaxWaitProposalInSecs = &defaultMaxWaitProposalInSecs + log.Info("ApplyDefaultMinerConfig", "MaxWaitProposalInSecs", *cfg.MaxWaitProposalInSecs) + } + if cfg.Recommit == nil { + cfg.Recommit = &defaultRecommit + log.Info("ApplyDefaultMinerConfig", "Recommit", *cfg.Recommit) + } // check [Eth.Miner.Mev] if cfg.Mev.GreedyMergeTx == nil { From 8a872875f578979debf84517bb4c60eeda578b02 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 09:49:40 +0800 Subject: [PATCH 2/8] fix: failed compile --- miner/worker.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index 8fc515a125..a5b448d9c1 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -282,7 +282,7 @@ func newWorker(config *minerconfig.Config, engine consensus.Engine, eth Backend, worker.chainHeadSub = eth.BlockChain().SubscribeChainHeadEvent(worker.chainHeadCh) // Sanitize recommit interval if the user-specified one is too short. - recommit := worker.config.Recommit + recommit := *worker.config.Recommit if recommit < minRecommitInterval { log.Warn("Sanitizing miner recommit interval", "provided", recommit, "updated", minRecommitInterval) recommit = minRecommitInterval @@ -1168,7 +1168,7 @@ func (w *worker) generateWork(params *generateParams, witness bool) *newPayloadR if !params.noTxs { interrupt := new(atomic.Int32) - timer := time.AfterFunc(w.config.Recommit, func() { + timer := time.AfterFunc(*w.config.Recommit, func() { interrupt.Store(commitInterruptTimeout) }) defer timer.Stop() @@ -1547,7 +1547,7 @@ func (w *worker) tryWaitProposalDoneWhenStopping() { } log.Info("Checking miner's next proposal block", "current", currentBlock, - "proposalStart", startBlock, "proposalEnd", endBlock, "maxWait", w.config.MaxWaitProposalInSecs) + "proposalStart", startBlock, "proposalEnd", endBlock, "maxWait", *w.config.MaxWaitProposalInSecs) if endBlock <= currentBlock { log.Warn("next proposal end block has passed, ignore") return @@ -1556,7 +1556,7 @@ func (w *worker) tryWaitProposalDoneWhenStopping() { if err != nil { log.Debug("failed to get BlockInterval when tryWaitProposalDoneWhenStopping") } - if startBlock > currentBlock && ((startBlock-currentBlock)*blockInterval/1000) > w.config.MaxWaitProposalInSecs { + if startBlock > currentBlock && ((startBlock-currentBlock)*blockInterval/1000) > *w.config.MaxWaitProposalInSecs { log.Warn("the next proposal start block is too far, just skip waiting") return } From a1bda3312dc5a66f754af68125ba2e9b3e9afb89 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 10:04:52 +0800 Subject: [PATCH 3/8] fix: compile --- cmd/utils/flags.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 08dd9f3414..3acb6758d6 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -641,7 +641,7 @@ var ( MinerRecommitIntervalFlag = &cli.DurationFlag{ Name: "miner.recommit", Usage: "Time interval to recreate the block being mined", - Value: ethconfig.Defaults.Miner.Recommit, + Value: *ethconfig.Defaults.Miner.Recommit, Category: flags.MinerCategory, } MinerDelayLeftoverFlag = &cli.DurationFlag{ @@ -1908,7 +1908,8 @@ func setMiner(ctx *cli.Context, cfg *minerconfig.Config) { cfg.GasPrice = flags.GlobalBig(ctx, MinerGasPriceFlag.Name) } if ctx.IsSet(MinerRecommitIntervalFlag.Name) { - cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name) + recommitIntervalFlag := ctx.Duration(MinerRecommitIntervalFlag.Name) + cfg.Recommit = &recommitIntervalFlag } if ctx.IsSet(MinerDelayLeftoverFlag.Name) { minerDelayLeftover := ctx.Duration(MinerDelayLeftoverFlag.Name) @@ -1919,7 +1920,8 @@ func setMiner(ctx *cli.Context, cfg *minerconfig.Config) { } if ctx.IsSet(MinerNewPayloadTimeoutFlag.Name) { log.Warn("The flag --miner.newpayload-timeout is deprecated and will be removed, please use --miner.recommit") - cfg.Recommit = ctx.Duration(MinerNewPayloadTimeoutFlag.Name) + recommitIntervalFlag := ctx.Duration(MinerRecommitIntervalFlag.Name) + cfg.Recommit = &recommitIntervalFlag } if ctx.Bool(DisableVoteAttestationFlag.Name) { cfg.DisableVoteAttestation = true From d148717fa71a8202f05e9b58d64be3103965ec12 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 10:08:30 +0800 Subject: [PATCH 4/8] fix: ut --- cmd/utils/flags_legacy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/utils/flags_legacy.go b/cmd/utils/flags_legacy.go index f1a91515b7..4e46b058c8 100644 --- a/cmd/utils/flags_legacy.go +++ b/cmd/utils/flags_legacy.go @@ -133,7 +133,7 @@ var ( MinerNewPayloadTimeoutFlag = &cli.DurationFlag{ Name: "miner.newpayload-timeout", Usage: "Specify the maximum time allowance for creating a new payload (deprecated)", - Value: ethconfig.Defaults.Miner.Recommit, + Value: *ethconfig.Defaults.Miner.Recommit, Category: flags.DeprecatedCategory, } MetricsEnabledExpensiveFlag = &cli.BoolFlag{ From 462f183af77e722adcedf07c5cd29a1241cde8b5 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 10:15:11 +0800 Subject: [PATCH 5/8] fix: ci --- miner/worker_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/miner/worker_test.go b/miner/worker_test.go index 47d63105d6..b162c22ec2 100644 --- a/miner/worker_test.go +++ b/miner/worker_test.go @@ -66,9 +66,9 @@ var ( // Test transactions pendingTxs []*types.Transaction newTxs []*types.Transaction - + oneSecond = time.Second testConfig = &minerconfig.Config{ - Recommit: time.Second, + Recommit: &oneSecond, GasCeil: params.GenesisGasLimit, } ) From 87668a8d0b951cf2cd1eea466e3e422376ea57f4 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 11:32:49 +0800 Subject: [PATCH 6/8] fix: comments --- miner/minerconfig/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/miner/minerconfig/config.go b/miner/minerconfig/config.go index 2641b92c4b..29d30add96 100644 --- a/miner/minerconfig/config.go +++ b/miner/minerconfig/config.go @@ -67,8 +67,8 @@ var DefaultConfig = Config{ Recommit: &defaultRecommit, DelayLeftOver: &defaultDelayLeftOver, - // The default value is set to 30 seconds. - // Because the avg restart time in mainnet is around 30s, so the node try to wait for the next multi-proposals to be done. + // The default value is set to 45 seconds. + // Because the avg restart time in mainnet could be 30+ seconds, so the node try to wait for the next multi-proposals to be done. MaxWaitProposalInSecs: &defaultMaxWaitProposalInSecs, Mev: DefaultMevConfig, From fea699c5e529a56e3b6bfcf8258cc03bbab6f758 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 13:51:53 +0800 Subject: [PATCH 7/8] fix: ut --- miner/worker.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index a5b448d9c1..367c21c998 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -282,7 +282,10 @@ func newWorker(config *minerconfig.Config, engine consensus.Engine, eth Backend, worker.chainHeadSub = eth.BlockChain().SubscribeChainHeadEvent(worker.chainHeadCh) // Sanitize recommit interval if the user-specified one is too short. - recommit := *worker.config.Recommit + recommit := minRecommitInterval + if worker.config.Recommit != nil && *worker.config.Recommit > minRecommitInterval { + recommit = *worker.config.Recommit + } if recommit < minRecommitInterval { log.Warn("Sanitizing miner recommit interval", "provided", recommit, "updated", minRecommitInterval) recommit = minRecommitInterval From 2dd60b362054f933f312277eb42f200106f7347e Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Fri, 9 May 2025 14:38:52 +0800 Subject: [PATCH 8/8] fix: ut --- miner/minerconfig/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/miner/minerconfig/config.go b/miner/minerconfig/config.go index 29d30add96..d9d0fb9e27 100644 --- a/miner/minerconfig/config.go +++ b/miner/minerconfig/config.go @@ -47,9 +47,9 @@ type Config struct { GasFloor uint64 // Target gas floor 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. + Recommit *time.Duration `toml:",omitempty"` // The time interval for miner to re-create mining work. VoteEnable bool // Whether to vote when mining - MaxWaitProposalInSecs *uint64 // The maximum time to wait for the proposal to be done, it's aimed to prevent validator being slashed when restarting + MaxWaitProposalInSecs *uint64 `toml:",omitempty"` // The maximum time to wait for the proposal to be done, it's aimed to prevent validator being slashed when restarting DisableVoteAttestation bool // Whether to skip assembling vote attestation Mev MevConfig // Mev configuration