Skip to content

Commit 6269e55

Browse files
rjl493456442karalabe
authored andcommitted
miner: polish miner configuration (ethereum#19480)
* cmd, eth, miner: disable advance sealing if user require * cmd, console, miner, les, eth: wrap the miner config * eth: remove todo * cmd, miner: revert noadvance flag The reason for this is: if the transaction execution is even longer than block time, then this kind of transactions is DoS attack.
1 parent d940369 commit 6269e55

File tree

11 files changed

+162
-162
lines changed

11 files changed

+162
-162
lines changed

cmd/utils/flags.go

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
"github.com/ethereum/go-ethereum/log"
5050
"github.com/ethereum/go-ethereum/metrics"
5151
"github.com/ethereum/go-ethereum/metrics/influxdb"
52+
"github.com/ethereum/go-ethereum/miner"
5253
"github.com/ethereum/go-ethereum/node"
5354
"github.com/ethereum/go-ethereum/p2p"
5455
"github.com/ethereum/go-ethereum/p2p/discv5"
@@ -375,27 +376,27 @@ var (
375376
MinerGasTargetFlag = cli.Uint64Flag{
376377
Name: "miner.gastarget",
377378
Usage: "Target gas floor for mined blocks",
378-
Value: eth.DefaultConfig.MinerGasFloor,
379+
Value: eth.DefaultConfig.Miner.GasFloor,
379380
}
380381
MinerLegacyGasTargetFlag = cli.Uint64Flag{
381382
Name: "targetgaslimit",
382383
Usage: "Target gas floor for mined blocks (deprecated, use --miner.gastarget)",
383-
Value: eth.DefaultConfig.MinerGasFloor,
384+
Value: eth.DefaultConfig.Miner.GasFloor,
384385
}
385386
MinerGasLimitFlag = cli.Uint64Flag{
386387
Name: "miner.gaslimit",
387388
Usage: "Target gas ceiling for mined blocks",
388-
Value: eth.DefaultConfig.MinerGasCeil,
389+
Value: eth.DefaultConfig.Miner.GasCeil,
389390
}
390391
MinerGasPriceFlag = BigFlag{
391392
Name: "miner.gasprice",
392393
Usage: "Minimum gas price for mining a transaction",
393-
Value: eth.DefaultConfig.MinerGasPrice,
394+
Value: eth.DefaultConfig.Miner.GasPrice,
394395
}
395396
MinerLegacyGasPriceFlag = BigFlag{
396397
Name: "gasprice",
397398
Usage: "Minimum gas price for mining a transaction (deprecated, use --miner.gasprice)",
398-
Value: eth.DefaultConfig.MinerGasPrice,
399+
Value: eth.DefaultConfig.Miner.GasPrice,
399400
}
400401
MinerEtherbaseFlag = cli.StringFlag{
401402
Name: "miner.etherbase",
@@ -418,7 +419,7 @@ var (
418419
MinerRecommitIntervalFlag = cli.DurationFlag{
419420
Name: "miner.recommit",
420421
Usage: "Time interval to recreate the block being mined",
421-
Value: eth.DefaultConfig.MinerRecommit,
422+
Value: eth.DefaultConfig.Miner.Recommit,
422423
}
423424
MinerNoVerfiyFlag = cli.BoolFlag{
424425
Name: "miner.noverify",
@@ -1023,7 +1024,7 @@ func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *eth.Config) {
10231024
if err != nil {
10241025
Fatalf("Invalid miner etherbase: %v", err)
10251026
}
1026-
cfg.Etherbase = account.Address
1027+
cfg.Miner.Etherbase = account.Address
10271028
} else {
10281029
Fatalf("No etherbase configured")
10291030
}
@@ -1231,6 +1232,39 @@ func setEthash(ctx *cli.Context, cfg *eth.Config) {
12311232
}
12321233
}
12331234

1235+
func setMiner(ctx *cli.Context, cfg *miner.Config) {
1236+
if ctx.GlobalIsSet(MinerNotifyFlag.Name) {
1237+
cfg.Notify = strings.Split(ctx.GlobalString(MinerNotifyFlag.Name), ",")
1238+
}
1239+
if ctx.GlobalIsSet(MinerLegacyExtraDataFlag.Name) {
1240+
cfg.ExtraData = []byte(ctx.GlobalString(MinerLegacyExtraDataFlag.Name))
1241+
}
1242+
if ctx.GlobalIsSet(MinerExtraDataFlag.Name) {
1243+
cfg.ExtraData = []byte(ctx.GlobalString(MinerExtraDataFlag.Name))
1244+
}
1245+
if ctx.GlobalIsSet(MinerLegacyGasTargetFlag.Name) {
1246+
cfg.GasFloor = ctx.GlobalUint64(MinerLegacyGasTargetFlag.Name)
1247+
}
1248+
if ctx.GlobalIsSet(MinerGasTargetFlag.Name) {
1249+
cfg.GasFloor = ctx.GlobalUint64(MinerGasTargetFlag.Name)
1250+
}
1251+
if ctx.GlobalIsSet(MinerGasLimitFlag.Name) {
1252+
cfg.GasCeil = ctx.GlobalUint64(MinerGasLimitFlag.Name)
1253+
}
1254+
if ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) {
1255+
cfg.GasPrice = GlobalBig(ctx, MinerLegacyGasPriceFlag.Name)
1256+
}
1257+
if ctx.GlobalIsSet(MinerGasPriceFlag.Name) {
1258+
cfg.GasPrice = GlobalBig(ctx, MinerGasPriceFlag.Name)
1259+
}
1260+
if ctx.GlobalIsSet(MinerRecommitIntervalFlag.Name) {
1261+
cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name)
1262+
}
1263+
if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) {
1264+
cfg.Noverify = ctx.Bool(MinerNoVerfiyFlag.Name)
1265+
}
1266+
}
1267+
12341268
func setWhitelist(ctx *cli.Context, cfg *eth.Config) {
12351269
whitelist := ctx.GlobalString(WhitelistFlag.Name)
12361270
if whitelist == "" {
@@ -1323,6 +1357,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
13231357
setGPO(ctx, &cfg.GPO)
13241358
setTxPool(ctx, &cfg.TxPool)
13251359
setEthash(ctx, cfg)
1360+
setMiner(ctx, &cfg.Miner)
13261361
setWhitelist(ctx, cfg)
13271362

13281363
if ctx.GlobalIsSet(SyncModeFlag.Name) {
@@ -1359,39 +1394,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
13591394
if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheGCFlag.Name) {
13601395
cfg.TrieDirtyCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheGCFlag.Name) / 100
13611396
}
1362-
if ctx.GlobalIsSet(MinerNotifyFlag.Name) {
1363-
cfg.MinerNotify = strings.Split(ctx.GlobalString(MinerNotifyFlag.Name), ",")
1364-
}
13651397
if ctx.GlobalIsSet(DocRootFlag.Name) {
13661398
cfg.DocRoot = ctx.GlobalString(DocRootFlag.Name)
13671399
}
1368-
if ctx.GlobalIsSet(MinerLegacyExtraDataFlag.Name) {
1369-
cfg.MinerExtraData = []byte(ctx.GlobalString(MinerLegacyExtraDataFlag.Name))
1370-
}
1371-
if ctx.GlobalIsSet(MinerExtraDataFlag.Name) {
1372-
cfg.MinerExtraData = []byte(ctx.GlobalString(MinerExtraDataFlag.Name))
1373-
}
1374-
if ctx.GlobalIsSet(MinerLegacyGasTargetFlag.Name) {
1375-
cfg.MinerGasFloor = ctx.GlobalUint64(MinerLegacyGasTargetFlag.Name)
1376-
}
1377-
if ctx.GlobalIsSet(MinerGasTargetFlag.Name) {
1378-
cfg.MinerGasFloor = ctx.GlobalUint64(MinerGasTargetFlag.Name)
1379-
}
1380-
if ctx.GlobalIsSet(MinerGasLimitFlag.Name) {
1381-
cfg.MinerGasCeil = ctx.GlobalUint64(MinerGasLimitFlag.Name)
1382-
}
1383-
if ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) {
1384-
cfg.MinerGasPrice = GlobalBig(ctx, MinerLegacyGasPriceFlag.Name)
1385-
}
1386-
if ctx.GlobalIsSet(MinerGasPriceFlag.Name) {
1387-
cfg.MinerGasPrice = GlobalBig(ctx, MinerGasPriceFlag.Name)
1388-
}
1389-
if ctx.GlobalIsSet(MinerRecommitIntervalFlag.Name) {
1390-
cfg.MinerRecommit = ctx.Duration(MinerRecommitIntervalFlag.Name)
1391-
}
1392-
if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) {
1393-
cfg.MinerNoverify = ctx.Bool(MinerNoVerfiyFlag.Name)
1394-
}
13951400
if ctx.GlobalIsSet(VMEnableDebugFlag.Name) {
13961401
// TODO(fjl): force-enable this in --dev mode
13971402
cfg.EnablePreimageRecording = ctx.GlobalBool(VMEnableDebugFlag.Name)
@@ -1449,7 +1454,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
14491454

14501455
cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.GlobalInt(DeveloperPeriodFlag.Name)), developer.Address)
14511456
if !ctx.GlobalIsSet(MinerGasPriceFlag.Name) && !ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) {
1452-
cfg.MinerGasPrice = big.NewInt(1)
1457+
cfg.Miner.GasPrice = big.NewInt(1)
14531458
}
14541459
}
14551460
}

console/console_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/ethereum/go-ethereum/core"
3232
"github.com/ethereum/go-ethereum/eth"
3333
"github.com/ethereum/go-ethereum/internal/jsre"
34+
"github.com/ethereum/go-ethereum/miner"
3435
"github.com/ethereum/go-ethereum/node"
3536
)
3637

@@ -96,8 +97,10 @@ func newTester(t *testing.T, confOverride func(*eth.Config)) *tester {
9697
t.Fatalf("failed to create node: %v", err)
9798
}
9899
ethConf := &eth.Config{
99-
Genesis: core.DeveloperGenesisBlock(15, common.Address{}),
100-
Etherbase: common.HexToAddress(testAddress),
100+
Genesis: core.DeveloperGenesisBlock(15, common.Address{}),
101+
Miner: miner.Config{
102+
Etherbase: common.HexToAddress(testAddress),
103+
},
101104
Ethash: ethash.Config{
102105
PowMode: ethash.ModeTest,
103106
},

eth/backend.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
109109
if !config.SyncMode.IsValid() {
110110
return nil, fmt.Errorf("invalid sync mode %d", config.SyncMode)
111111
}
112-
if config.MinerGasPrice == nil || config.MinerGasPrice.Cmp(common.Big0) <= 0 {
113-
log.Warn("Sanitizing invalid miner gas price", "provided", config.MinerGasPrice, "updated", DefaultConfig.MinerGasPrice)
114-
config.MinerGasPrice = new(big.Int).Set(DefaultConfig.MinerGasPrice)
112+
if config.Miner.GasPrice == nil || config.Miner.GasPrice.Cmp(common.Big0) <= 0 {
113+
log.Warn("Sanitizing invalid miner gas price", "provided", config.Miner.GasPrice, "updated", DefaultConfig.Miner.GasPrice)
114+
config.Miner.GasPrice = new(big.Int).Set(DefaultConfig.Miner.GasPrice)
115115
}
116116
if config.NoPruning && config.TrieDirtyCache > 0 {
117117
config.TrieCleanCache += config.TrieDirtyCache
@@ -135,11 +135,11 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
135135
chainDb: chainDb,
136136
eventMux: ctx.EventMux,
137137
accountManager: ctx.AccountManager,
138-
engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.MinerNotify, config.MinerNoverify, chainDb),
138+
engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.Miner.Notify, config.Miner.Noverify, chainDb),
139139
shutdownChan: make(chan bool),
140140
networkID: config.NetworkId,
141-
gasPrice: config.MinerGasPrice,
142-
etherbase: config.Etherbase,
141+
gasPrice: config.Miner.GasPrice,
142+
etherbase: config.Miner.Etherbase,
143143
bloomRequests: make(chan chan *bloombits.Retrieval),
144144
bloomIndexer: NewBloomIndexer(chainDb, params.BloomBitsBlocks, params.BloomConfirms),
145145
}
@@ -194,13 +194,13 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
194194
return nil, err
195195
}
196196

197-
eth.miner = miner.New(eth, chainConfig, eth.EventMux(), eth.engine, config.MinerRecommit, config.MinerGasFloor, config.MinerGasCeil, eth.isLocalBlock)
198-
eth.miner.SetExtra(makeExtraData(config.MinerExtraData))
197+
eth.miner = miner.New(eth, &config.Miner, chainConfig, eth.EventMux(), eth.engine, eth.isLocalBlock)
198+
eth.miner.SetExtra(makeExtraData(config.Miner.ExtraData))
199199

200200
eth.APIBackend = &EthAPIBackend{ctx.ExtRPCEnabled(), eth, nil}
201201
gpoParams := config.GPO
202202
if gpoParams.Default == nil {
203-
gpoParams.Default = config.MinerGasPrice
203+
gpoParams.Default = config.Miner.GasPrice
204204
}
205205
eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams)
206206

eth/config.go

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ import (
2525
"time"
2626

2727
"github.com/ethereum/go-ethereum/common"
28-
"github.com/ethereum/go-ethereum/common/hexutil"
2928
"github.com/ethereum/go-ethereum/consensus/ethash"
3029
"github.com/ethereum/go-ethereum/core"
3130
"github.com/ethereum/go-ethereum/eth/downloader"
3231
"github.com/ethereum/go-ethereum/eth/gasprice"
32+
"github.com/ethereum/go-ethereum/miner"
3333
"github.com/ethereum/go-ethereum/params"
3434
)
3535

@@ -49,11 +49,12 @@ var DefaultConfig = Config{
4949
TrieCleanCache: 256,
5050
TrieDirtyCache: 256,
5151
TrieTimeout: 60 * time.Minute,
52-
MinerGasFloor: 8000000,
53-
MinerGasCeil: 8000000,
54-
MinerGasPrice: big.NewInt(params.GWei),
55-
MinerRecommit: 3 * time.Second,
56-
52+
Miner: miner.Config{
53+
GasFloor: 8000000,
54+
GasCeil: 8000000,
55+
GasPrice: big.NewInt(params.GWei),
56+
Recommit: 3 * time.Second,
57+
},
5758
TxPool: core.DefaultTxPoolConfig,
5859
GPO: gasprice.Config{
5960
Blocks: 20,
@@ -82,7 +83,7 @@ func init() {
8283
}
8384
}
8485

85-
//go:generate gencodec -type Config -field-override configMarshaling -formats toml -out gen_config.go
86+
//go:generate gencodec -type Config -formats toml -out gen_config.go
8687

8788
type Config struct {
8889
// The genesis block, which is inserted if the database is empty.
@@ -118,15 +119,8 @@ type Config struct {
118119
TrieDirtyCache int
119120
TrieTimeout time.Duration
120121

121-
// Mining-related options
122-
Etherbase common.Address `toml:",omitempty"`
123-
MinerNotify []string `toml:",omitempty"`
124-
MinerExtraData []byte `toml:",omitempty"`
125-
MinerGasFloor uint64
126-
MinerGasCeil uint64
127-
MinerGasPrice *big.Int
128-
MinerRecommit time.Duration
129-
MinerNoverify bool
122+
// Mining options
123+
Miner miner.Config
130124

131125
// Ethash options
132126
Ethash ethash.Config
@@ -155,7 +149,3 @@ type Config struct {
155149
// RPCGasCap is the global gas cap for eth-call variants.
156150
RPCGasCap *big.Int `toml:",omitempty"`
157151
}
158-
159-
type configMarshaling struct {
160-
MinerExtraData hexutil.Bytes
161-
}

0 commit comments

Comments
 (0)