|
|
|
@ -157,14 +157,6 @@ var ( |
|
|
|
|
Usage: "Document Root for HTTPClient file scheme", |
|
|
|
|
Value: DirectoryString{homeDir()}, |
|
|
|
|
} |
|
|
|
|
FastSyncFlag = cli.BoolFlag{ |
|
|
|
|
Name: "fast", |
|
|
|
|
Usage: "Enable fast syncing through state downloads (replaced by --syncmode)", |
|
|
|
|
} |
|
|
|
|
LightModeFlag = cli.BoolFlag{ |
|
|
|
|
Name: "light", |
|
|
|
|
Usage: "Enable light client mode (replaced by --syncmode)", |
|
|
|
|
} |
|
|
|
|
defaultSyncMode = eth.DefaultConfig.SyncMode |
|
|
|
|
SyncModeFlag = TextMarshalerFlag{ |
|
|
|
|
Name: "syncmode", |
|
|
|
@ -321,29 +313,53 @@ var ( |
|
|
|
|
Usage: "Number of CPU threads to use for mining", |
|
|
|
|
Value: 0, |
|
|
|
|
} |
|
|
|
|
MinerLegacyThreadsFlag = cli.IntFlag{ |
|
|
|
|
Name: "minerthreads", |
|
|
|
|
Usage: "Number of CPU threads to use for mining (deprecated, use --miner.threads)", |
|
|
|
|
Value: 0, |
|
|
|
|
} |
|
|
|
|
MinerNotifyFlag = cli.StringFlag{ |
|
|
|
|
Name: "miner.notify", |
|
|
|
|
Usage: "Comma separated HTTP URL list to notify of new work packages", |
|
|
|
|
} |
|
|
|
|
TargetGasLimitFlag = cli.Uint64Flag{ |
|
|
|
|
MinerGasTargetFlag = cli.Uint64Flag{ |
|
|
|
|
Name: "miner.gastarget", |
|
|
|
|
Usage: "Target gas floor for mined blocks", |
|
|
|
|
Value: params.GenesisGasLimit, |
|
|
|
|
} |
|
|
|
|
MinerLegacyGasTargetFlag = cli.Uint64Flag{ |
|
|
|
|
Name: "targetgaslimit", |
|
|
|
|
Usage: "Target gas limit sets the artificial target gas floor for the blocks to mine", |
|
|
|
|
Usage: "Target gas floor for mined blocks (deprecated, use --miner.gastarget)", |
|
|
|
|
Value: params.GenesisGasLimit, |
|
|
|
|
} |
|
|
|
|
EtherbaseFlag = cli.StringFlag{ |
|
|
|
|
Name: "etherbase", |
|
|
|
|
Usage: "Public address for block mining rewards (default = first account created)", |
|
|
|
|
Value: "0", |
|
|
|
|
MinerGasPriceFlag = BigFlag{ |
|
|
|
|
Name: "miner.gasprice", |
|
|
|
|
Usage: "Minimal gas price for mining a transactions", |
|
|
|
|
Value: eth.DefaultConfig.GasPrice, |
|
|
|
|
} |
|
|
|
|
GasPriceFlag = BigFlag{ |
|
|
|
|
MinerLegacyGasPriceFlag = BigFlag{ |
|
|
|
|
Name: "gasprice", |
|
|
|
|
Usage: "Minimal gas price to accept for mining a transactions", |
|
|
|
|
Usage: "Minimal gas price for mining a transactions (deprecated, use --miner.gasprice)", |
|
|
|
|
Value: eth.DefaultConfig.GasPrice, |
|
|
|
|
} |
|
|
|
|
ExtraDataFlag = cli.StringFlag{ |
|
|
|
|
Name: "extradata", |
|
|
|
|
MinerEtherbaseFlag = cli.StringFlag{ |
|
|
|
|
Name: "miner.etherbase", |
|
|
|
|
Usage: "Public address for block mining rewards (default = first account)", |
|
|
|
|
Value: "0", |
|
|
|
|
} |
|
|
|
|
MinerLegacyEtherbaseFlag = cli.StringFlag{ |
|
|
|
|
Name: "etherbase", |
|
|
|
|
Usage: "Public address for block mining rewards (default = first account, deprecated, use --miner.etherbase)", |
|
|
|
|
Value: "0", |
|
|
|
|
} |
|
|
|
|
MinerExtraDataFlag = cli.StringFlag{ |
|
|
|
|
Name: "miner.extradata", |
|
|
|
|
Usage: "Block extra data set by the miner (default = client version)", |
|
|
|
|
} |
|
|
|
|
MinerLegacyExtraDataFlag = cli.StringFlag{ |
|
|
|
|
Name: "extradata", |
|
|
|
|
Usage: "Block extra data set by the miner (default = client version, deprecated, use --miner.extradata)", |
|
|
|
|
} |
|
|
|
|
// Account settings
|
|
|
|
|
UnlockedAccountFlag = cli.StringFlag{ |
|
|
|
|
Name: "unlock", |
|
|
|
@ -813,10 +829,19 @@ func MakeAddress(ks *keystore.KeyStore, account string) (accounts.Account, error |
|
|
|
|
// setEtherbase retrieves the etherbase either from the directly specified
|
|
|
|
|
// command line flags or from the keystore if CLI indexed.
|
|
|
|
|
func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *eth.Config) { |
|
|
|
|
if ctx.GlobalIsSet(EtherbaseFlag.Name) { |
|
|
|
|
account, err := MakeAddress(ks, ctx.GlobalString(EtherbaseFlag.Name)) |
|
|
|
|
// Extract the current etherbase, new flag overriding legacy one
|
|
|
|
|
var etherbase string |
|
|
|
|
if ctx.GlobalIsSet(MinerLegacyEtherbaseFlag.Name) { |
|
|
|
|
etherbase = ctx.GlobalString(MinerLegacyEtherbaseFlag.Name) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(MinerEtherbaseFlag.Name) { |
|
|
|
|
etherbase = ctx.GlobalString(MinerEtherbaseFlag.Name) |
|
|
|
|
} |
|
|
|
|
// Convert the etherbase into an address and configure it
|
|
|
|
|
if etherbase != "" { |
|
|
|
|
account, err := MakeAddress(ks, etherbase) |
|
|
|
|
if err != nil { |
|
|
|
|
Fatalf("Option %q: %v", EtherbaseFlag.Name, err) |
|
|
|
|
Fatalf("Invalid miner etherbase: %v", err) |
|
|
|
|
} |
|
|
|
|
cfg.Etherbase = account.Address |
|
|
|
|
} |
|
|
|
@ -847,7 +872,7 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { |
|
|
|
|
setBootstrapNodes(ctx, cfg) |
|
|
|
|
setBootstrapNodesV5(ctx, cfg) |
|
|
|
|
|
|
|
|
|
lightClient := ctx.GlobalBool(LightModeFlag.Name) || ctx.GlobalString(SyncModeFlag.Name) == "light" |
|
|
|
|
lightClient := ctx.GlobalString(SyncModeFlag.Name) == "light" |
|
|
|
|
lightServer := ctx.GlobalInt(LightServFlag.Name) != 0 |
|
|
|
|
lightPeers := ctx.GlobalInt(LightPeersFlag.Name) |
|
|
|
|
|
|
|
|
@ -1052,8 +1077,6 @@ func SetShhConfig(ctx *cli.Context, stack *node.Node, cfg *whisper.Config) { |
|
|
|
|
func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { |
|
|
|
|
// Avoid conflicting network flags
|
|
|
|
|
checkExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag) |
|
|
|
|
checkExclusive(ctx, FastSyncFlag, LightModeFlag, SyncModeFlag) |
|
|
|
|
checkExclusive(ctx, LightServFlag, LightModeFlag) |
|
|
|
|
checkExclusive(ctx, LightServFlag, SyncModeFlag, "light") |
|
|
|
|
|
|
|
|
|
ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) |
|
|
|
@ -1062,13 +1085,8 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { |
|
|
|
|
setTxPool(ctx, &cfg.TxPool) |
|
|
|
|
setEthash(ctx, cfg) |
|
|
|
|
|
|
|
|
|
switch { |
|
|
|
|
case ctx.GlobalIsSet(SyncModeFlag.Name): |
|
|
|
|
if ctx.GlobalIsSet(SyncModeFlag.Name) { |
|
|
|
|
cfg.SyncMode = *GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode) |
|
|
|
|
case ctx.GlobalBool(FastSyncFlag.Name): |
|
|
|
|
cfg.SyncMode = downloader.FastSync |
|
|
|
|
case ctx.GlobalBool(LightModeFlag.Name): |
|
|
|
|
cfg.SyncMode = downloader.LightSync |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(LightServFlag.Name) { |
|
|
|
|
cfg.LightServ = ctx.GlobalInt(LightServFlag.Name) |
|
|
|
@ -1093,6 +1111,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { |
|
|
|
|
if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheGCFlag.Name) { |
|
|
|
|
cfg.TrieCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheGCFlag.Name) / 100 |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(MinerLegacyThreadsFlag.Name) { |
|
|
|
|
cfg.MinerThreads = ctx.GlobalInt(MinerLegacyThreadsFlag.Name) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(MinerThreadsFlag.Name) { |
|
|
|
|
cfg.MinerThreads = ctx.GlobalInt(MinerThreadsFlag.Name) |
|
|
|
|
} |
|
|
|
@ -1102,11 +1123,17 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { |
|
|
|
|
if ctx.GlobalIsSet(DocRootFlag.Name) { |
|
|
|
|
cfg.DocRoot = ctx.GlobalString(DocRootFlag.Name) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(ExtraDataFlag.Name) { |
|
|
|
|
cfg.ExtraData = []byte(ctx.GlobalString(ExtraDataFlag.Name)) |
|
|
|
|
if ctx.GlobalIsSet(MinerLegacyExtraDataFlag.Name) { |
|
|
|
|
cfg.ExtraData = []byte(ctx.GlobalString(MinerLegacyExtraDataFlag.Name)) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(GasPriceFlag.Name) { |
|
|
|
|
cfg.GasPrice = GlobalBig(ctx, GasPriceFlag.Name) |
|
|
|
|
if ctx.GlobalIsSet(MinerExtraDataFlag.Name) { |
|
|
|
|
cfg.ExtraData = []byte(ctx.GlobalString(MinerExtraDataFlag.Name)) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) { |
|
|
|
|
cfg.GasPrice = GlobalBig(ctx, MinerLegacyGasPriceFlag.Name) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(MinerGasPriceFlag.Name) { |
|
|
|
|
cfg.GasPrice = GlobalBig(ctx, MinerGasPriceFlag.Name) |
|
|
|
|
} |
|
|
|
|
if ctx.GlobalIsSet(VMEnableDebugFlag.Name) { |
|
|
|
|
// TODO(fjl): force-enable this in --dev mode
|
|
|
|
@ -1148,7 +1175,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { |
|
|
|
|
log.Info("Using developer account", "address", developer.Address) |
|
|
|
|
|
|
|
|
|
cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.GlobalInt(DeveloperPeriodFlag.Name)), developer.Address) |
|
|
|
|
if !ctx.GlobalIsSet(GasPriceFlag.Name) { |
|
|
|
|
if !ctx.GlobalIsSet(MinerGasPriceFlag.Name) && !ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) { |
|
|
|
|
cfg.GasPrice = big.NewInt(1) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1223,7 +1250,10 @@ func RegisterEthStatsService(stack *node.Node, url string) { |
|
|
|
|
// SetupNetwork configures the system for either the main net or some test network.
|
|
|
|
|
func SetupNetwork(ctx *cli.Context) { |
|
|
|
|
// TODO(fjl): move target gas limit into config
|
|
|
|
|
params.TargetGasLimit = ctx.GlobalUint64(TargetGasLimitFlag.Name) |
|
|
|
|
params.TargetGasLimit = ctx.GlobalUint64(MinerLegacyGasTargetFlag.Name) |
|
|
|
|
if ctx.GlobalIsSet(MinerGasTargetFlag.Name) { |
|
|
|
|
params.TargetGasLimit = ctx.GlobalUint64(MinerGasTargetFlag.Name) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func SetupMetrics(ctx *cli.Context) { |
|
|
|
@ -1254,7 +1284,7 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { |
|
|
|
|
handles = makeDatabaseHandles() |
|
|
|
|
) |
|
|
|
|
name := "chaindata" |
|
|
|
|
if ctx.GlobalBool(LightModeFlag.Name) { |
|
|
|
|
if ctx.GlobalString(SyncModeFlag.Name) == "light" { |
|
|
|
|
name = "lightchaindata" |
|
|
|
|
} |
|
|
|
|
chainDb, err := stack.OpenDatabase(name, cache, handles) |
|
|
|
|