github.com/haliliceylan/bsc@v1.1.10-0.20220501224556-eb78d644ebcb/cmd/geth/usage.go (about) 1 // Copyright 2015 The go-ethereum Authors 2 // This file is part of go-ethereum. 3 // 4 // go-ethereum is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // go-ethereum is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>. 16 17 // Contains the geth command usage template and generator. 18 19 package main 20 21 import ( 22 "io" 23 "sort" 24 25 "github.com/ethereum/go-ethereum/cmd/utils" 26 "github.com/ethereum/go-ethereum/internal/debug" 27 "github.com/ethereum/go-ethereum/internal/flags" 28 "gopkg.in/urfave/cli.v1" 29 ) 30 31 // AppHelpFlagGroups is the application flags, grouped by functionality. 32 var AppHelpFlagGroups = []flags.FlagGroup{ 33 { 34 Name: "ETHEREUM", 35 Flags: []cli.Flag{ 36 configFileFlag, 37 utils.DataDirFlag, 38 utils.AncientFlag, 39 utils.MinFreeDiskSpaceFlag, 40 utils.KeyStoreDirFlag, 41 utils.NoUSBFlag, 42 utils.DirectBroadcastFlag, 43 utils.DisableSnapProtocolFlag, 44 utils.RangeLimitFlag, 45 utils.SmartCardDaemonPathFlag, 46 utils.NetworkIdFlag, 47 utils.MainnetFlag, 48 utils.GoerliFlag, 49 utils.RinkebyFlag, 50 utils.YoloV3Flag, 51 utils.RopstenFlag, 52 utils.SyncModeFlag, 53 utils.ExitWhenSyncedFlag, 54 utils.GCModeFlag, 55 utils.TxLookupLimitFlag, 56 utils.EthStatsURLFlag, 57 utils.IdentityFlag, 58 utils.LightKDFFlag, 59 utils.WhitelistFlag, 60 utils.TriesInMemoryFlag, 61 utils.BlockAmountReserved, 62 utils.CheckSnapshotWithMPT, 63 }, 64 }, 65 { 66 Name: "LIGHT CLIENT", 67 Flags: []cli.Flag{ 68 utils.LightServeFlag, 69 utils.LightIngressFlag, 70 utils.LightEgressFlag, 71 utils.LightMaxPeersFlag, 72 utils.UltraLightServersFlag, 73 utils.UltraLightFractionFlag, 74 utils.UltraLightOnlyAnnounceFlag, 75 utils.LightNoPruneFlag, 76 utils.LightNoSyncServeFlag, 77 }, 78 }, 79 { 80 Name: "DEVELOPER CHAIN", 81 Flags: []cli.Flag{ 82 utils.DeveloperFlag, 83 utils.DeveloperPeriodFlag, 84 }, 85 }, 86 { 87 Name: "ETHASH", 88 Flags: []cli.Flag{ 89 utils.EthashCacheDirFlag, 90 utils.EthashCachesInMemoryFlag, 91 utils.EthashCachesOnDiskFlag, 92 utils.EthashCachesLockMmapFlag, 93 utils.EthashDatasetDirFlag, 94 utils.EthashDatasetsInMemoryFlag, 95 utils.EthashDatasetsOnDiskFlag, 96 utils.EthashDatasetsLockMmapFlag, 97 }, 98 }, 99 { 100 Name: "TRANSACTION POOL", 101 Flags: []cli.Flag{ 102 utils.TxPoolLocalsFlag, 103 utils.TxPoolNoLocalsFlag, 104 utils.TxPoolJournalFlag, 105 utils.TxPoolRejournalFlag, 106 utils.TxPoolPriceLimitFlag, 107 utils.TxPoolPriceBumpFlag, 108 utils.TxPoolAccountSlotsFlag, 109 utils.TxPoolGlobalSlotsFlag, 110 utils.TxPoolAccountQueueFlag, 111 utils.TxPoolGlobalQueueFlag, 112 utils.TxPoolLifetimeFlag, 113 utils.TxPoolReannounceTimeFlag, 114 }, 115 }, 116 { 117 Name: "PERFORMANCE TUNING", 118 Flags: []cli.Flag{ 119 utils.CacheFlag, 120 utils.CacheDatabaseFlag, 121 utils.CacheTrieFlag, 122 utils.CacheTrieJournalFlag, 123 utils.CacheTrieRejournalFlag, 124 utils.CacheGCFlag, 125 utils.CacheSnapshotFlag, 126 utils.CachePreimagesFlag, 127 }, 128 }, 129 { 130 Name: "ACCOUNT", 131 Flags: []cli.Flag{ 132 utils.UnlockedAccountFlag, 133 utils.PasswordFileFlag, 134 utils.ExternalSignerFlag, 135 utils.InsecureUnlockAllowedFlag, 136 }, 137 }, 138 { 139 Name: "API AND CONSOLE", 140 Flags: []cli.Flag{ 141 utils.IPCDisabledFlag, 142 utils.IPCPathFlag, 143 utils.HTTPEnabledFlag, 144 utils.HTTPListenAddrFlag, 145 utils.HTTPPortFlag, 146 utils.HTTPApiFlag, 147 utils.HTTPPathPrefixFlag, 148 utils.HTTPCORSDomainFlag, 149 utils.HTTPVirtualHostsFlag, 150 utils.WSEnabledFlag, 151 utils.WSListenAddrFlag, 152 utils.WSPortFlag, 153 utils.WSApiFlag, 154 utils.WSPathPrefixFlag, 155 utils.WSAllowedOriginsFlag, 156 utils.GraphQLEnabledFlag, 157 utils.GraphQLCORSDomainFlag, 158 utils.GraphQLVirtualHostsFlag, 159 utils.RPCGlobalGasCapFlag, 160 utils.RPCGlobalTxFeeCapFlag, 161 utils.AllowUnprotectedTxs, 162 utils.JSpathFlag, 163 utils.ExecFlag, 164 utils.PreloadJSFlag, 165 }, 166 }, 167 { 168 Name: "NETWORKING", 169 Flags: []cli.Flag{ 170 utils.BootnodesFlag, 171 utils.DNSDiscoveryFlag, 172 utils.ListenPortFlag, 173 utils.MaxPeersFlag, 174 utils.MaxPendingPeersFlag, 175 utils.NATFlag, 176 utils.NoDiscoverFlag, 177 utils.DiscoveryV5Flag, 178 utils.NetrestrictFlag, 179 utils.NodeKeyFileFlag, 180 utils.NodeKeyHexFlag, 181 }, 182 }, 183 { 184 Name: "MINER", 185 Flags: []cli.Flag{ 186 utils.MiningEnabledFlag, 187 utils.MinerThreadsFlag, 188 utils.MinerNotifyFlag, 189 utils.MinerNotifyFullFlag, 190 utils.MinerGasPriceFlag, 191 utils.MinerGasTargetFlag, 192 utils.MinerGasLimitFlag, 193 utils.MinerEtherbaseFlag, 194 utils.MinerExtraDataFlag, 195 utils.MinerRecommitIntervalFlag, 196 utils.MinerDelayLeftoverFlag, 197 utils.MinerNoVerfiyFlag, 198 }, 199 }, 200 { 201 Name: "GAS PRICE ORACLE", 202 Flags: []cli.Flag{ 203 utils.GpoBlocksFlag, 204 utils.GpoPercentileFlag, 205 utils.GpoMaxGasPriceFlag, 206 }, 207 }, 208 { 209 Name: "VIRTUAL MACHINE", 210 Flags: []cli.Flag{ 211 utils.VMEnableDebugFlag, 212 utils.EVMInterpreterFlag, 213 utils.EWASMInterpreterFlag, 214 }, 215 }, 216 { 217 Name: "LOGGING AND DEBUGGING", 218 Flags: append([]cli.Flag{ 219 utils.FakePoWFlag, 220 utils.NoCompactionFlag, 221 }, debug.Flags...), 222 }, 223 { 224 Name: "METRICS AND STATS", 225 Flags: metricsFlags, 226 }, 227 { 228 Name: "ALIASED (deprecated)", 229 Flags: []cli.Flag{ 230 utils.NoUSBFlag, 231 utils.LegacyRPCEnabledFlag, 232 utils.LegacyRPCListenAddrFlag, 233 utils.LegacyRPCPortFlag, 234 utils.LegacyRPCCORSDomainFlag, 235 utils.LegacyRPCVirtualHostsFlag, 236 utils.LegacyRPCApiFlag, 237 }, 238 }, 239 { 240 Name: "MISC", 241 Flags: []cli.Flag{ 242 utils.SnapshotFlag, 243 utils.BloomFilterSizeFlag, 244 cli.HelpFlag, 245 utils.CatalystFlag, 246 }, 247 }, 248 } 249 250 func init() { 251 // Override the default app help template 252 cli.AppHelpTemplate = flags.AppHelpTemplate 253 254 // Override the default app help printer, but only for the global app help 255 originalHelpPrinter := cli.HelpPrinter 256 cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) { 257 if tmpl == flags.AppHelpTemplate { 258 // Iterate over all the flags and add any uncategorized ones 259 categorized := make(map[string]struct{}) 260 for _, group := range AppHelpFlagGroups { 261 for _, flag := range group.Flags { 262 categorized[flag.String()] = struct{}{} 263 } 264 } 265 deprecated := make(map[string]struct{}) 266 for _, flag := range utils.DeprecatedFlags { 267 deprecated[flag.String()] = struct{}{} 268 } 269 // Only add uncategorized flags if they are not deprecated 270 var uncategorized []cli.Flag 271 for _, flag := range data.(*cli.App).Flags { 272 if _, ok := categorized[flag.String()]; !ok { 273 if _, ok := deprecated[flag.String()]; !ok { 274 uncategorized = append(uncategorized, flag) 275 } 276 } 277 } 278 if len(uncategorized) > 0 { 279 // Append all ungategorized options to the misc group 280 miscs := len(AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags) 281 AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags = append(AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags, uncategorized...) 282 283 // Make sure they are removed afterwards 284 defer func() { 285 AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags = AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags[:miscs] 286 }() 287 } 288 // Render out custom usage screen 289 originalHelpPrinter(w, tmpl, flags.HelpData{App: data, FlagGroups: AppHelpFlagGroups}) 290 } else if tmpl == flags.CommandHelpTemplate { 291 // Iterate over all command specific flags and categorize them 292 categorized := make(map[string][]cli.Flag) 293 for _, flag := range data.(cli.Command).Flags { 294 if _, ok := categorized[flag.String()]; !ok { 295 categorized[flags.FlagCategory(flag, AppHelpFlagGroups)] = append(categorized[flags.FlagCategory(flag, AppHelpFlagGroups)], flag) 296 } 297 } 298 299 // sort to get a stable ordering 300 sorted := make([]flags.FlagGroup, 0, len(categorized)) 301 for cat, flgs := range categorized { 302 sorted = append(sorted, flags.FlagGroup{Name: cat, Flags: flgs}) 303 } 304 sort.Sort(flags.ByCategory(sorted)) 305 306 // add sorted array to data and render with default printer 307 originalHelpPrinter(w, tmpl, map[string]interface{}{ 308 "cmd": data, 309 "categorizedFlags": sorted, 310 }) 311 } else { 312 originalHelpPrinter(w, tmpl, data) 313 } 314 } 315 }