From 344d6f95cf07b9337cd686be6ffe3304991f4955 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 3 May 2022 14:46:17 +0800 Subject: [PATCH] cmd: group network and db path flags together (#24698) This PR groups all built-in network flags together and list them in the command as a whole. And all database path flags(datadir, ancient) are also grouped, since usually these two are used together. --- cmd/devp2p/internal/ethtest/snap.go | 14 ++-- cmd/geth/chaincmd.go | 41 ++++----- cmd/geth/config.go | 2 +- cmd/geth/consolecmd.go | 8 +- cmd/geth/dbcmd.go | 125 ++++++---------------------- cmd/geth/main.go | 32 ++++--- cmd/geth/snapshot.go | 56 ++----------- cmd/geth/usage.go | 12 +-- cmd/utils/flags.go | 42 ++++++++-- 9 files changed, 113 insertions(+), 219 deletions(-) diff --git a/cmd/devp2p/internal/ethtest/snap.go b/cmd/devp2p/internal/ethtest/snap.go index 95dd90fd3..d4833526b 100644 --- a/cmd/devp2p/internal/ethtest/snap.go +++ b/cmd/devp2p/internal/ethtest/snap.go @@ -372,8 +372,8 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { { root: s.chain.RootAt(999), paths: []snap.TrieNodePathSet{ - snap.TrieNodePathSet{}, // zero-length pathset should 'abort' and kick us off - snap.TrieNodePathSet{[]byte{0}}, + {}, // zero-length pathset should 'abort' and kick us off + {[]byte{0}}, }, nBytes: 5000, expHashes: []common.Hash{}, @@ -382,8 +382,8 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { { root: s.chain.RootAt(999), paths: []snap.TrieNodePathSet{ - snap.TrieNodePathSet{[]byte{0}}, - snap.TrieNodePathSet{[]byte{1}, []byte{0}}, + {[]byte{0}}, + {[]byte{1}, []byte{0}}, }, nBytes: 5000, //0x6b3724a41b8c38b46d4d02fba2bb2074c47a507eb16a9a4b978f91d32e406faf @@ -392,7 +392,7 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { { // nonsensically long path root: s.chain.RootAt(999), paths: []snap.TrieNodePathSet{ - snap.TrieNodePathSet{[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, + {[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8}}, }, nBytes: 5000, @@ -401,8 +401,8 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { { root: s.chain.RootAt(0), paths: []snap.TrieNodePathSet{ - snap.TrieNodePathSet{[]byte{0}}, - snap.TrieNodePathSet{[]byte{1}, []byte{0}}, + {[]byte{0}}, + {[]byte{1}, []byte{0}}, }, nBytes: 5000, expHashes: []common.Hash{}, diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 6077c43cc..a0f9e5773 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -47,10 +47,8 @@ var ( Name: "init", Usage: "Bootstrap and initialize a new genesis block", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, - }, - Category: "BLOCKCHAIN COMMANDS", + Flags: utils.DatabasePathFlags, + Category: "BLOCKCHAIN COMMANDS", Description: ` The init command initializes a new genesis block and definition for the network. This is a destructive action and changes the network in which you will be @@ -63,14 +61,8 @@ It expects the genesis file as argument.`, Name: "dumpgenesis", Usage: "Dumps genesis block JSON configuration to stdout", ArgsUsage: "", - Flags: []cli.Flag{ - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, - Category: "BLOCKCHAIN COMMANDS", + Flags: utils.NetworkFlags, + Category: "BLOCKCHAIN COMMANDS", Description: ` The dumpgenesis command dumps the genesis block configuration in JSON format to stdout.`, } @@ -79,8 +71,7 @@ The dumpgenesis command dumps the genesis block configuration in JSON format to Name: "import", Usage: "Import a blockchain file", ArgsUsage: " ( ... ) ", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: append([]cli.Flag{ utils.CacheFlag, utils.SyncModeFlag, utils.GCModeFlag, @@ -102,7 +93,7 @@ The dumpgenesis command dumps the genesis block configuration in JSON format to utils.MetricsInfluxDBBucketFlag, utils.MetricsInfluxDBOrganizationFlag, utils.TxLookupLimitFlag, - }, + }, utils.DatabasePathFlags...), Category: "BLOCKCHAIN COMMANDS", Description: ` The import command imports blocks from an RLP-encoded form. The form can be one file @@ -116,11 +107,10 @@ processing will proceed even if an individual RLP-file import failure occurs.`, Name: "export", Usage: "Export blockchain into file", ArgsUsage: " [ ]", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: append([]cli.Flag{ utils.CacheFlag, utils.SyncModeFlag, - }, + }, utils.DatabasePathFlags...), Category: "BLOCKCHAIN COMMANDS", Description: ` Requires a first argument of the file to write to. @@ -134,11 +124,10 @@ be gzipped.`, Name: "import-preimages", Usage: "Import the preimage database from an RLP stream", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: append([]cli.Flag{ utils.CacheFlag, utils.SyncModeFlag, - }, + }, utils.DatabasePathFlags...), Category: "BLOCKCHAIN COMMANDS", Description: ` The import-preimages command imports hash preimages from an RLP encoded stream. @@ -150,11 +139,10 @@ It's deprecated, please use "geth db import" instead. Name: "export-preimages", Usage: "Export the preimage database into an RLP stream", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: append([]cli.Flag{ utils.CacheFlag, utils.SyncModeFlag, - }, + }, utils.DatabasePathFlags...), Category: "BLOCKCHAIN COMMANDS", Description: ` The export-preimages command exports hash preimages to an RLP encoded stream. @@ -166,8 +154,7 @@ It's deprecated, please use "geth db export" instead. Name: "dump", Usage: "Dump a specific block from storage", ArgsUsage: "[? | ]", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: append([]cli.Flag{ utils.CacheFlag, utils.IterativeOutputFlag, utils.ExcludeCodeFlag, @@ -175,7 +162,7 @@ It's deprecated, please use "geth db export" instead. utils.IncludeIncompletesFlag, utils.StartKeyFlag, utils.DumpLimitFlag, - }, + }, utils.DatabasePathFlags...), Category: "BLOCKCHAIN COMMANDS", Description: ` This command dumps out the state for a given block (or latest, if none provided). diff --git a/cmd/geth/config.go b/cmd/geth/config.go index d7b8b55d1..bb003c4c1 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -48,7 +48,7 @@ var ( Name: "dumpconfig", Usage: "Show configuration values", ArgsUsage: "", - Flags: append(nodeFlags, rpcFlags...), + Flags: utils.GroupFlags(nodeFlags, rpcFlags), Category: "MISCELLANEOUS COMMANDS", Description: `The dumpconfig command shows configuration values.`, } diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index efe3e2110..5167f8536 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -36,7 +36,7 @@ var ( Action: utils.MigrateFlags(localConsole), Name: "console", Usage: "Start an interactive JavaScript environment", - Flags: append(append(nodeFlags, rpcFlags...), consoleFlags...), + Flags: utils.GroupFlags(nodeFlags, rpcFlags, consoleFlags), Category: "CONSOLE COMMANDS", Description: ` The Geth console is an interactive shell for the JavaScript runtime environment @@ -49,7 +49,7 @@ See https://geth.ethereum.org/docs/interface/javascript-console.`, Name: "attach", Usage: "Start an interactive JavaScript environment (connect to node)", ArgsUsage: "[endpoint]", - Flags: append(consoleFlags, utils.DataDirFlag), + Flags: utils.GroupFlags([]cli.Flag{utils.DataDirFlag}, consoleFlags), Category: "CONSOLE COMMANDS", Description: ` The Geth console is an interactive shell for the JavaScript runtime environment @@ -63,7 +63,7 @@ This command allows to open a console on a running geth node.`, Name: "js", Usage: "Execute the specified JavaScript files", ArgsUsage: " [jsfile...]", - Flags: append(nodeFlags, consoleFlags...), + Flags: utils.GroupFlags(nodeFlags, consoleFlags), Category: "CONSOLE COMMANDS", Description: ` The JavaScript VM exposes a node admin interface as well as the Ðapp @@ -141,6 +141,8 @@ func remoteConsole(ctx *cli.Context) error { path = filepath.Join(path, "goerli") } else if ctx.GlobalBool(utils.SepoliaFlag.Name) { path = filepath.Join(path, "sepolia") + } else if ctx.GlobalBool(utils.KilnFlag.Name) { + path = filepath.Join(path, "kiln") } } endpoint = fmt.Sprintf("%s/geth.ipc", path) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 1b5a0c314..f99942f67 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -48,10 +48,8 @@ var ( Name: "removedb", Usage: "Remove blockchain and state databases", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, - }, - Category: "DATABASE COMMANDS", + Flags: utils.DatabasePathFlags, + Category: "DATABASE COMMANDS", Description: ` Remove blockchain and state databases`, } @@ -79,16 +77,9 @@ Remove blockchain and state databases`, Action: utils.MigrateFlags(inspect), Name: "inspect", ArgsUsage: " ", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Usage: "Inspect the storage size for each type of data in the database", Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, } @@ -96,31 +87,19 @@ Remove blockchain and state databases`, Action: utils.MigrateFlags(dbStats), Name: "stats", Usage: "Print leveldb statistics", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), } dbCompactCmd = cli.Command{ Action: utils.MigrateFlags(dbCompact), Name: "compact", Usage: "Compact leveldb database. WARNING: May take a very long time", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, utils.CacheFlag, utils.CacheDatabaseFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: `This command performs a database compaction. WARNING: This operation may take a very long time to finish, and may cause database corruption if it is aborted during execution'!`, @@ -130,15 +109,9 @@ corruption if it is aborted during execution'!`, Name: "get", Usage: "Show the value of a database key", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: "This command looks up the specified database key from the database.", } dbDeleteCmd = cli.Command{ @@ -146,15 +119,9 @@ corruption if it is aborted during execution'!`, Name: "delete", Usage: "Delete a database key (WARNING: may corrupt your database)", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: `This command deletes the specified database key from the database. WARNING: This is a low-level operation which may cause database corruption!`, } @@ -163,15 +130,9 @@ WARNING: This is a low-level operation which may cause database corruption!`, Name: "put", Usage: "Set the value of a database key (WARNING: may corrupt your database)", ArgsUsage: " ", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: `This command sets a given database key to the given value. WARNING: This is a low-level operation which may cause database corruption!`, } @@ -180,15 +141,9 @@ WARNING: This is a low-level operation which may cause database corruption!`, Name: "dumptrie", Usage: "Show the storage key/values of a given storage trie", ArgsUsage: " ", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: "This command looks up the specified database key from the database.", } dbDumpFreezerIndex = cli.Command{ @@ -196,15 +151,9 @@ WARNING: This is a low-level operation which may cause database corruption!`, Name: "freezer-index", Usage: "Dump out the index of a given freezer type", ArgsUsage: " ", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: "This command displays information about the freezer index.", } dbImportCmd = cli.Command{ @@ -212,14 +161,9 @@ WARNING: This is a low-level operation which may cause database corruption!`, Name: "import", Usage: "Imports leveldb-data from an exported RLP dump.", ArgsUsage: " has .gz suffix, gzip compression will be used.", ArgsUsage: " ", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: "Exports the specified chain data to an RLP encoded stream, optionally gzip-compressed.", } dbMetadataCmd = cli.Command{ Action: utils.MigrateFlags(showMetaData), Name: "metadata", Usage: "Shows metadata about the chain status.", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: "Shows metadata about the chain status.", } dbMigrateFreezerCmd = cli.Command{ @@ -257,15 +190,9 @@ WARNING: This is a low-level operation which may cause database corruption!`, Name: "freezer-migrate", Usage: "Migrate legacy parts of the freezer. (WARNING: may take a long time)", ArgsUsage: "", - Flags: []cli.Flag{ - utils.DataDirFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.SyncModeFlag, - utils.MainnetFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: `The freezer-migrate command checks your database for receipts in a legacy format and updates those. WARNING: please back-up the receipt files in your ancients before running this command.`, } diff --git a/cmd/geth/main.go b/cmd/geth/main.go index bf99483cd..a3e965109 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -58,13 +58,11 @@ var ( // The app that holds all commands and flags. app = flags.NewApp(gitCommit, gitDate, "the go-ethereum command line interface") // flags that configure the node - nodeFlags = []cli.Flag{ + nodeFlags = utils.GroupFlags([]cli.Flag{ utils.IdentityFlag, utils.UnlockedAccountFlag, utils.PasswordFileFlag, utils.BootnodesFlag, - utils.DataDirFlag, - utils.AncientFlag, utils.MinFreeDiskSpaceFlag, utils.KeyStoreDirFlag, utils.ExternalSignerFlag, @@ -140,15 +138,9 @@ var ( utils.NodeKeyFileFlag, utils.NodeKeyHexFlag, utils.DNSDiscoveryFlag, - utils.MainnetFlag, utils.DeveloperFlag, utils.DeveloperPeriodFlag, utils.DeveloperGasLimitFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - utils.KilnFlag, utils.VMEnableDebugFlag, utils.NetworkIdFlag, utils.EthStatsURLFlag, @@ -160,7 +152,7 @@ var ( utils.GpoIgnoreGasPriceFlag, utils.MinerNotifyFullFlag, configFileFlag, - } + }, utils.NetworkFlags, utils.DatabasePathFlags) rpcFlags = []cli.Flag{ utils.HTTPEnabledFlag, @@ -249,11 +241,11 @@ func init() { } sort.Sort(cli.CommandsByName(app.Commands)) - app.Flags = append(app.Flags, nodeFlags...) - app.Flags = append(app.Flags, rpcFlags...) - app.Flags = append(app.Flags, consoleFlags...) - app.Flags = append(app.Flags, debug.Flags...) - app.Flags = append(app.Flags, metricsFlags...) + app.Flags = utils.GroupFlags(nodeFlags, + rpcFlags, + consoleFlags, + debug.Flags, + metricsFlags) app.Before = func(ctx *cli.Context) error { return debug.Setup(ctx) @@ -280,15 +272,18 @@ func prepare(ctx *cli.Context) { case ctx.GlobalIsSet(utils.RopstenFlag.Name): log.Info("Starting Geth on Ropsten testnet...") - case ctx.GlobalIsSet(utils.SepoliaFlag.Name): - log.Info("Starting Geth on Sepolia testnet...") - case ctx.GlobalIsSet(utils.RinkebyFlag.Name): log.Info("Starting Geth on Rinkeby testnet...") case ctx.GlobalIsSet(utils.GoerliFlag.Name): log.Info("Starting Geth on Görli testnet...") + case ctx.GlobalIsSet(utils.SepoliaFlag.Name): + log.Info("Starting Geth on Sepolia testnet...") + + case ctx.GlobalIsSet(utils.KilnFlag.Name): + log.Info("Starting Geth on Kiln testnet...") + case ctx.GlobalIsSet(utils.DeveloperFlag.Name): log.Info("Starting Geth in ephemeral dev mode...") @@ -302,6 +297,7 @@ func prepare(ctx *cli.Context) { !ctx.GlobalIsSet(utils.SepoliaFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && + !ctx.GlobalIsSet(utils.KilnFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { // Nope, we're really on mainnet. Bump that cache up! log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096) diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index e9a51d805..7582b4c4d 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -60,16 +60,10 @@ var ( ArgsUsage: "", Action: utils.MigrateFlags(pruneState), Category: "MISCELLANEOUS COMMANDS", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.CacheTrieJournalFlag, utils.BloomFilterSizeFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: ` geth snapshot prune-state will prune historical state data with the help of the state snapshot. @@ -91,14 +85,7 @@ the trie clean cache with default directory will be deleted. ArgsUsage: "", Action: utils.MigrateFlags(verifyState), Category: "MISCELLANEOUS COMMANDS", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + Flags: utils.GroupFlags(utils.NetworkFlags, utils.DatabasePathFlags), Description: ` geth snapshot verify-state will traverse the whole accounts and storages set based on the specified @@ -112,14 +99,7 @@ In other words, this command does the snapshot to trie conversion. ArgsUsage: "", Action: utils.MigrateFlags(checkDanglingStorage), Category: "MISCELLANEOUS COMMANDS", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + Flags: utils.GroupFlags(utils.NetworkFlags, utils.DatabasePathFlags), Description: ` geth snapshot check-dangling-storage traverses the snap storage data, and verifies that all snapshot storage data has a corresponding account. @@ -131,14 +111,7 @@ data, and verifies that all snapshot storage data has a corresponding account. ArgsUsage: "", Action: utils.MigrateFlags(traverseState), Category: "MISCELLANEOUS COMMANDS", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + Flags: utils.GroupFlags(utils.NetworkFlags, utils.DatabasePathFlags), Description: ` geth snapshot traverse-state will traverse the whole state from the given state root and will abort if any @@ -154,14 +127,7 @@ It's also usable without snapshot enabled. ArgsUsage: "", Action: utils.MigrateFlags(traverseRawState), Category: "MISCELLANEOUS COMMANDS", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, - }, + Flags: utils.GroupFlags(utils.NetworkFlags, utils.DatabasePathFlags), Description: ` geth snapshot traverse-rawstate will traverse the whole state from the given root and will abort if any referenced @@ -178,18 +144,12 @@ It's also usable without snapshot enabled. ArgsUsage: "[? | ]", Action: utils.MigrateFlags(dumpState), Category: "MISCELLANEOUS COMMANDS", - Flags: []cli.Flag{ - utils.DataDirFlag, - utils.AncientFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.RinkebyFlag, - utils.GoerliFlag, + Flags: utils.GroupFlags([]cli.Flag{ utils.ExcludeCodeFlag, utils.ExcludeStorageFlag, utils.StartKeyFlag, utils.DumpLimitFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), Description: ` This command is semantically equivalent to 'geth dump', but uses the snapshots as the backend data source, making this command a lot faster. diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index 0916b14be..ff13ee468 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -32,21 +32,13 @@ import ( var AppHelpFlagGroups = []flags.FlagGroup{ { Name: "ETHEREUM", - Flags: []cli.Flag{ + Flags: utils.GroupFlags([]cli.Flag{ configFileFlag, - utils.DataDirFlag, - utils.AncientFlag, utils.MinFreeDiskSpaceFlag, utils.KeyStoreDirFlag, utils.USBFlag, utils.SmartCardDaemonPathFlag, utils.NetworkIdFlag, - utils.MainnetFlag, - utils.GoerliFlag, - utils.RinkebyFlag, - utils.RopstenFlag, - utils.SepoliaFlag, - utils.KilnFlag, utils.SyncModeFlag, utils.ExitWhenSyncedFlag, utils.GCModeFlag, @@ -55,7 +47,7 @@ var AppHelpFlagGroups = []flags.FlagGroup{ utils.IdentityFlag, utils.LightKDFFlag, utils.EthPeerRequiredBlocksFlag, - }, + }, utils.NetworkFlags, utils.DatabasePathFlags), }, { Name: "LIGHT CLIENT", diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 58b93c73f..515942be8 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -144,17 +144,17 @@ var ( Name: "mainnet", Usage: "Ethereum mainnet", } - GoerliFlag = cli.BoolFlag{ - Name: "goerli", - Usage: "Görli network: pre-configured proof-of-authority test network", + RopstenFlag = cli.BoolFlag{ + Name: "ropsten", + Usage: "Ropsten network: pre-configured proof-of-work test network", } RinkebyFlag = cli.BoolFlag{ Name: "rinkeby", Usage: "Rinkeby network: pre-configured proof-of-authority test network", } - RopstenFlag = cli.BoolFlag{ - Name: "ropsten", - Usage: "Ropsten network: pre-configured proof-of-work test network", + GoerliFlag = cli.BoolFlag{ + Name: "goerli", + Usage: "Görli network: pre-configured proof-of-authority test network", } SepoliaFlag = cli.BoolFlag{ Name: "sepolia", @@ -823,6 +823,36 @@ var ( } ) +var ( + // TestnetFlags is the flag group of all built-in supported testnets. + TestnetFlags = []cli.Flag{ + RopstenFlag, + RinkebyFlag, + GoerliFlag, + SepoliaFlag, + KilnFlag, + } + // NetworkFlags is the flag group of all built-in supported networks. + NetworkFlags = append([]cli.Flag{ + MainnetFlag, + }, TestnetFlags...) + + // DatabasePathFlags is the flag group of all database path flags. + DatabasePathFlags = []cli.Flag{ + DataDirFlag, + AncientFlag, + } +) + +// GroupFlags combines the given flag slices together and returns the merged one. +func GroupFlags(groups ...[]cli.Flag) []cli.Flag { + var ret []cli.Flag + for _, group := range groups { + ret = append(ret, group...) + } + return ret +} + // MakeDataDir retrieves the currently requested data directory, terminating // if none (or the empty string) is specified. If the node is starting a testnet, // then a subdirectory of the specified datadir will be used.