123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- // Copyright 2015 The go-ethereum Authors
- // This file is part of go-ethereum.
- //
- // go-ethereum is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // go-ethereum is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
- // Contains the geth command usage template and generator.
- package main
- import (
- "io"
- "sort"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/flags"
- "gopkg.in/urfave/cli.v1"
- )
- // Quorum
- var quorumAccountFlagGroup = "QUORUM ACCOUNT"
- // End Quorum
- // AppHelpFlagGroups is the application flags, grouped by functionality.
- var AppHelpFlagGroups = []flags.FlagGroup{
- {
- Name: "ETHEREUM",
- Flags: []cli.Flag{
- configFileFlag,
- utils.DataDirFlag,
- utils.AncientFlag,
- utils.MinFreeDiskSpaceFlag,
- utils.KeyStoreDirFlag,
- utils.USBFlag,
- utils.SmartCardDaemonPathFlag,
- utils.NetworkIdFlag,
- utils.MainnetFlag,
- utils.GoerliFlag,
- utils.RinkebyFlag,
- utils.YoloV3Flag,
- utils.RopstenFlag,
- utils.SyncModeFlag,
- utils.ExitWhenSyncedFlag,
- utils.GCModeFlag,
- utils.TxLookupLimitFlag,
- utils.EthStatsURLFlag,
- utils.IdentityFlag,
- utils.LightKDFFlag,
- utils.AuthorizationListFlag,
- },
- },
- {
- Name: "LIGHT CLIENT",
- Flags: []cli.Flag{
- utils.LightServeFlag,
- utils.LightIngressFlag,
- utils.LightEgressFlag,
- utils.LightMaxPeersFlag,
- utils.UltraLightServersFlag,
- utils.UltraLightFractionFlag,
- utils.UltraLightOnlyAnnounceFlag,
- utils.LightNoPruneFlag,
- utils.LightNoSyncServeFlag,
- },
- },
- {
- Name: "DEVELOPER CHAIN",
- Flags: []cli.Flag{
- utils.DeveloperFlag,
- utils.DeveloperPeriodFlag,
- },
- },
- {
- Name: "ETHASH",
- Flags: []cli.Flag{
- utils.EthashCacheDirFlag,
- utils.EthashCachesInMemoryFlag,
- utils.EthashCachesOnDiskFlag,
- utils.EthashCachesLockMmapFlag,
- utils.EthashDatasetDirFlag,
- utils.EthashDatasetsInMemoryFlag,
- utils.EthashDatasetsOnDiskFlag,
- utils.EthashDatasetsLockMmapFlag,
- },
- },
- {
- Name: "TRANSACTION POOL",
- Flags: []cli.Flag{
- utils.TxPoolLocalsFlag,
- utils.TxPoolNoLocalsFlag,
- utils.TxPoolJournalFlag,
- utils.TxPoolRejournalFlag,
- utils.TxPoolPriceLimitFlag,
- utils.TxPoolPriceBumpFlag,
- utils.TxPoolAccountSlotsFlag,
- utils.TxPoolGlobalSlotsFlag,
- utils.TxPoolAccountQueueFlag,
- utils.TxPoolGlobalQueueFlag,
- utils.TxPoolLifetimeFlag,
- },
- },
- {
- Name: "PERFORMANCE TUNING",
- Flags: []cli.Flag{
- utils.CacheFlag,
- utils.CacheDatabaseFlag,
- utils.CacheTrieFlag,
- utils.CacheTrieJournalFlag,
- utils.CacheTrieRejournalFlag,
- utils.CacheGCFlag,
- utils.CacheSnapshotFlag,
- utils.CacheNoPrefetchFlag,
- utils.CachePreimagesFlag,
- },
- },
- {
- Name: "ACCOUNT",
- Flags: []cli.Flag{
- utils.UnlockedAccountFlag,
- utils.PasswordFileFlag,
- utils.ExternalSignerFlag,
- utils.InsecureUnlockAllowedFlag,
- },
- },
- {
- Name: "API AND CONSOLE",
- Flags: []cli.Flag{
- utils.IPCDisabledFlag,
- utils.IPCPathFlag,
- utils.HTTPEnabledFlag,
- utils.HTTPListenAddrFlag,
- utils.HTTPPortFlag,
- utils.HTTPApiFlag,
- utils.HTTPPathPrefixFlag,
- utils.HTTPCORSDomainFlag,
- utils.HTTPVirtualHostsFlag,
- utils.WSEnabledFlag,
- utils.WSListenAddrFlag,
- utils.WSPortFlag,
- utils.WSApiFlag,
- utils.WSPathPrefixFlag,
- utils.WSAllowedOriginsFlag,
- utils.GraphQLEnabledFlag,
- utils.GraphQLCORSDomainFlag,
- utils.GraphQLVirtualHostsFlag,
- utils.RPCGlobalGasCapFlag,
- utils.RPCGlobalTxFeeCapFlag,
- utils.AllowUnprotectedTxs,
- utils.JSpathFlag,
- utils.ExecFlag,
- utils.PreloadJSFlag,
- // Quorum
- utils.RPCClientToken,
- utils.RPCClientTLSInsecureSkipVerify,
- utils.RPCClientTLSCert,
- utils.RPCClientTLSCaCert,
- utils.RPCClientTLSCipherSuites,
- },
- },
- {
- Name: "NETWORKING",
- Flags: []cli.Flag{
- utils.BootnodesFlag,
- utils.DNSDiscoveryFlag,
- utils.ListenPortFlag,
- utils.MaxPeersFlag,
- utils.MaxPendingPeersFlag,
- utils.NATFlag,
- utils.NoDiscoverFlag,
- utils.DiscoveryV5Flag,
- utils.NetrestrictFlag,
- utils.NodeKeyFileFlag,
- utils.NodeKeyHexFlag,
- },
- },
- {
- Name: "MINER",
- Flags: []cli.Flag{
- utils.MiningEnabledFlag,
- utils.MinerThreadsFlag,
- utils.MinerNotifyFlag,
- utils.MinerNotifyFullFlag,
- utils.MinerGasPriceFlag,
- utils.MinerGasTargetFlag,
- utils.MinerGasLimitFlag,
- utils.MinerEtherbaseFlag,
- utils.MinerExtraDataFlag,
- utils.MinerRecommitIntervalFlag,
- utils.MinerNoVerfiyFlag,
- },
- },
- {
- Name: "GAS PRICE ORACLE",
- Flags: []cli.Flag{
- utils.GpoBlocksFlag,
- utils.GpoPercentileFlag,
- utils.GpoMaxGasPriceFlag,
- },
- },
- {
- Name: "VIRTUAL MACHINE",
- Flags: []cli.Flag{
- utils.VMEnableDebugFlag,
- utils.EVMInterpreterFlag,
- utils.EWASMInterpreterFlag,
- // Quorum - timout for calls
- utils.EVMCallTimeOutFlag,
- },
- },
- {
- Name: "LOGGING AND DEBUGGING",
- Flags: append([]cli.Flag{
- utils.FakePoWFlag,
- utils.NoCompactionFlag,
- }, debug.Flags...),
- },
- {
- Name: "METRICS AND STATS",
- Flags: metricsFlags,
- },
- {
- Name: "ALIASED (deprecated)",
- Flags: []cli.Flag{
- utils.NoUSBFlag,
- utils.LegacyRPCEnabledFlag,
- utils.LegacyRPCListenAddrFlag,
- utils.LegacyRPCPortFlag,
- utils.LegacyRPCCORSDomainFlag,
- utils.LegacyRPCVirtualHostsFlag,
- utils.LegacyRPCApiFlag,
- },
- },
- // QUORUM
- {
- Name: "QUORUM",
- Flags: []cli.Flag{
- utils.QuorumImmutabilityThreshold,
- utils.EnableNodePermissionFlag,
- utils.PluginSettingsFlag,
- utils.PluginSkipVerifyFlag,
- utils.PluginLocalVerifyFlag,
- utils.PluginPublicKeyFlag,
- utils.AllowedFutureBlockTimeFlag,
- utils.MultitenancyFlag,
- utils.RevertReasonFlag,
- utils.QuorumEnablePrivateTrieCache,
- utils.QuorumEnablePrivacyMarker,
- },
- },
- {
- Name: "QUORUM LIGHT CLIENT/SERVER",
- Flags: []cli.Flag{
- utils.QuorumLightServerFlag,
- utils.QuorumLightServerP2PListenPortFlag,
- utils.QuorumLightServerP2PMaxPeersFlag,
- utils.QuorumLightServerP2PNetrestrictFlag,
- utils.QuorumLightServerP2PPermissioningFlag,
- utils.QuorumLightServerP2PPermissioningPrefixFlag,
- utils.QuorumLightClientFlag,
- utils.QuorumLightClientPSIFlag,
- utils.QuorumLightClientTokenEnabledFlag,
- utils.QuorumLightClientTokenValueFlag,
- utils.QuorumLightClientTokenManagementFlag,
- utils.QuorumLightClientRPCTLSFlag,
- utils.QuorumLightClientRPCTLSInsecureSkipVerifyFlag,
- utils.QuorumLightClientRPCTLSCACertFlag,
- utils.QuorumLightClientRPCTLSCertFlag,
- utils.QuorumLightClientRPCTLSKeyFlag,
- utils.QuorumLightClientServerNodeFlag,
- utils.QuorumLightClientServerNodeRPCFlag,
- utils.QuorumLightTLSFlag,
- utils.QuorumLightTLSCertFlag,
- utils.QuorumLightTLSKeyFlag,
- utils.QuorumLightTLSCACertsFlag,
- utils.QuorumLightTLSClientAuthFlag,
- utils.QuorumLightTLSCipherSuitesFlag,
- },
- },
- {
- Name: "QUORUM PRIVATE TRANSACTION MANAGER",
- Flags: []cli.Flag{
- utils.QuorumPTMUnixSocketFlag,
- utils.QuorumPTMUrlFlag,
- utils.QuorumPTMTimeoutFlag,
- utils.QuorumPTMDialTimeoutFlag,
- utils.QuorumPTMHttpIdleTimeoutFlag,
- utils.QuorumPTMHttpWriteBufferSizeFlag,
- utils.QuorumPTMHttpReadBufferSizeFlag,
- utils.QuorumPTMTlsModeFlag,
- utils.QuorumPTMTlsRootCaFlag,
- utils.QuorumPTMTlsClientCertFlag,
- utils.QuorumPTMTlsClientKeyFlag,
- utils.QuorumPTMTlsInsecureSkipVerify,
- },
- },
- {
- Name: quorumAccountFlagGroup,
- Flags: []cli.Flag{
- utils.AccountPluginNewAccountConfigFlag,
- },
- },
- {
- Name: "RAFT",
- Flags: []cli.Flag{
- utils.RaftModeFlag,
- utils.RaftBlockTimeFlag,
- utils.RaftJoinExistingFlag,
- utils.RaftPortFlag,
- utils.RaftDNSEnabledFlag,
- },
- },
- {
- Name: "ISTANBUL",
- Flags: []cli.Flag{
- utils.IstanbulRequestTimeoutFlag,
- utils.IstanbulBlockPeriodFlag,
- },
- },
- // END QUORUM
- {
- Name: "MISC",
- Flags: []cli.Flag{
- utils.SnapshotFlag,
- utils.BloomFilterSizeFlag,
- cli.HelpFlag,
- utils.CatalystFlag,
- },
- },
- }
- func init() {
- // Override the default app help template
- cli.AppHelpTemplate = flags.AppHelpTemplate
- // Override the default app help printer, but only for the global app help
- originalHelpPrinter := cli.HelpPrinter
- cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) {
- if tmpl == flags.AppHelpTemplate {
- // Iterate over all the flags and add any uncategorized ones
- categorized := make(map[string]struct{})
- for _, group := range AppHelpFlagGroups {
- for _, flag := range group.Flags {
- categorized[flag.String()] = struct{}{}
- }
- }
- deprecated := make(map[string]struct{})
- for _, flag := range utils.DeprecatedFlags {
- deprecated[flag.String()] = struct{}{}
- }
- // Only add uncategorized flags if they are not deprecated
- var uncategorized []cli.Flag
- for _, flag := range data.(*cli.App).Flags {
- if _, ok := categorized[flag.String()]; !ok {
- if _, ok := deprecated[flag.String()]; !ok {
- uncategorized = append(uncategorized, flag)
- }
- }
- }
- if len(uncategorized) > 0 {
- // Append all ungategorized options to the misc group
- miscs := len(AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags)
- AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags = append(AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags, uncategorized...)
- // Make sure they are removed afterwards
- defer func() {
- AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags = AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags[:miscs]
- }()
- }
- // remove the Quorum account options from the main app usage as these should only be used by the geth account sub commands
- for i, group := range AppHelpFlagGroups {
- if group.Name == quorumAccountFlagGroup {
- AppHelpFlagGroups = append(AppHelpFlagGroups[:i], AppHelpFlagGroups[i+1:]...)
- }
- }
- // Render out custom usage screen
- originalHelpPrinter(w, tmpl, flags.HelpData{App: data, FlagGroups: AppHelpFlagGroups})
- } else if tmpl == flags.CommandHelpTemplate {
- // Iterate over all command specific flags and categorize them
- categorized := make(map[string][]cli.Flag)
- for _, flag := range data.(cli.Command).Flags {
- if _, ok := categorized[flag.String()]; !ok {
- categorized[flags.FlagCategory(flag, AppHelpFlagGroups)] = append(categorized[flags.FlagCategory(flag, AppHelpFlagGroups)], flag)
- }
- }
- // sort to get a stable ordering
- sorted := make([]flags.FlagGroup, 0, len(categorized))
- for cat, flgs := range categorized {
- sorted = append(sorted, flags.FlagGroup{Name: cat, Flags: flgs})
- }
- sort.Sort(flags.ByCategory(sorted))
- // add sorted array to data and render with default printer
- originalHelpPrinter(w, tmpl, map[string]interface{}{
- "cmd": data,
- "categorizedFlags": sorted,
- })
- } else {
- originalHelpPrinter(w, tmpl, data)
- }
- }
- }
|