From a37af35c361eb7b61be6962402460909010f409e Mon Sep 17 00:00:00 2001 From: Jerry Date: Tue, 13 Dec 2022 15:17:29 -0800 Subject: [PATCH] Add default values to CLI helper and docs This commit adds default values to CLI helper and docs. When the default value of a string flag, slice string flag, or map string flag is empty, its helper message won't show any default value. --- docs/README.md | 2 + docs/cli/bootnode.md | 10 +- docs/cli/chain_sethead.md | 4 +- docs/cli/debug_block.md | 2 +- docs/cli/debug_pprof.md | 4 +- docs/cli/peers_add.md | 4 +- docs/cli/peers_list.md | 2 +- docs/cli/peers_remove.md | 4 +- docs/cli/peers_status.md | 2 +- docs/cli/removedb.md | 2 +- docs/cli/server.md | 144 ++++++++++++++-------------- internal/cli/flagset/flagset.go | 160 +++++++++++++++++++++----------- internal/cli/server/flags.go | 71 +++++++------- 13 files changed, 237 insertions(+), 174 deletions(-) diff --git a/docs/README.md b/docs/README.md index 45021e8c7f..4622bb8f00 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,6 +11,8 @@ $ bor server ``` + See [here](./cli/server.md) for more flag details. + - The `bor dumpconfig` sub-command prints the default configurations, in the TOML format, on the terminal. One can `pipe (>)` this to a file (say `config.toml`) and use it to start bor. - A toml file now can be used instead of flags and can contain all configuration for the node to run. To simply run bor with a configuration file, the following command can be used. diff --git a/docs/cli/bootnode.md b/docs/cli/bootnode.md index 48e933a934..064de39014 100644 --- a/docs/cli/bootnode.md +++ b/docs/cli/bootnode.md @@ -2,16 +2,16 @@ ## Options -- ```listen-addr```: listening address of bootnode (:) +- ```listen-addr```: listening address of bootnode (:) (default: 0.0.0.0:30303) -- ```v5```: Enable UDP v5 +- ```v5```: Enable UDP v5 (default: false) -- ```log-level```: Log level (trace|debug|info|warn|error|crit) +- ```log-level```: Log level (trace|debug|info|warn|error|crit) (default: info) -- ```nat```: port mapping mechanism (any|none|upnp|pmp|extip:) +- ```nat```: port mapping mechanism (any|none|upnp|pmp|extip:) (default: none) - ```node-key```: file or hex node key - ```save-key```: path to save the ecdsa private key -- ```dry-run```: validates parameters and prints bootnode configurations, but does not start bootnode \ No newline at end of file +- ```dry-run```: validates parameters and prints bootnode configurations, but does not start bootnode (default: false) \ No newline at end of file diff --git a/docs/cli/chain_sethead.md b/docs/cli/chain_sethead.md index bf97990e62..09cd37baa1 100644 --- a/docs/cli/chain_sethead.md +++ b/docs/cli/chain_sethead.md @@ -8,6 +8,6 @@ The ```chain sethead ``` command sets the current chain to a certain blo ## Options -- ```address```: Address of the grpc endpoint +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) -- ```yes```: Force set head \ No newline at end of file +- ```yes```: Force set head (default: false) \ No newline at end of file diff --git a/docs/cli/debug_block.md b/docs/cli/debug_block.md index ced7e482ee..efcead2626 100644 --- a/docs/cli/debug_block.md +++ b/docs/cli/debug_block.md @@ -4,6 +4,6 @@ The ```bor debug block ``` command will create an archive containing tra ## Options -- ```address```: Address of the grpc endpoint +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) - ```output```: Output directory \ No newline at end of file diff --git a/docs/cli/debug_pprof.md b/docs/cli/debug_pprof.md index 86a84b6065..2e7e40b677 100644 --- a/docs/cli/debug_pprof.md +++ b/docs/cli/debug_pprof.md @@ -4,8 +4,8 @@ The ```debug pprof ``` command will create an archive containing bor ppro ## Options -- ```address```: Address of the grpc endpoint +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) -- ```seconds```: seconds to trace +- ```seconds```: seconds to trace (default: 2) - ```output```: Output directory \ No newline at end of file diff --git a/docs/cli/peers_add.md b/docs/cli/peers_add.md index 5bc4ed1448..7b879cdf0d 100644 --- a/docs/cli/peers_add.md +++ b/docs/cli/peers_add.md @@ -4,6 +4,6 @@ The ```peers add ``` command joins the local client to another remote pee ## Options -- ```address```: Address of the grpc endpoint +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) -- ```trusted```: Add the peer as a trusted \ No newline at end of file +- ```trusted```: Add the peer as a trusted (default: false) \ No newline at end of file diff --git a/docs/cli/peers_list.md b/docs/cli/peers_list.md index 41f398b764..5d30d1d32e 100644 --- a/docs/cli/peers_list.md +++ b/docs/cli/peers_list.md @@ -4,4 +4,4 @@ The ```peers list``` command lists the connected peers. ## Options -- ```address```: Address of the grpc endpoint \ No newline at end of file +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) \ No newline at end of file diff --git a/docs/cli/peers_remove.md b/docs/cli/peers_remove.md index 2cac1e7656..f731f12f6f 100644 --- a/docs/cli/peers_remove.md +++ b/docs/cli/peers_remove.md @@ -4,6 +4,6 @@ The ```peers remove ``` command disconnects the local client from a conne ## Options -- ```address```: Address of the grpc endpoint +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) -- ```trusted```: Add the peer as a trusted \ No newline at end of file +- ```trusted```: Add the peer as a trusted (default: false) \ No newline at end of file diff --git a/docs/cli/peers_status.md b/docs/cli/peers_status.md index 65a0fe9d8f..9806bfb638 100644 --- a/docs/cli/peers_status.md +++ b/docs/cli/peers_status.md @@ -4,4 +4,4 @@ The ```peers status ``` command displays the status of a peer by its id ## Options -- ```address```: Address of the grpc endpoint \ No newline at end of file +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) \ No newline at end of file diff --git a/docs/cli/removedb.md b/docs/cli/removedb.md index 473d47ecef..7ee09568b9 100644 --- a/docs/cli/removedb.md +++ b/docs/cli/removedb.md @@ -4,6 +4,6 @@ The ```bor removedb``` command will remove the blockchain and state databases at ## Options -- ```address```: Address of the grpc endpoint +- ```address```: Address of the grpc endpoint (default: 127.0.0.1:3131) - ```datadir```: Path of the data directory to store information \ No newline at end of file diff --git a/docs/cli/server.md b/docs/cli/server.md index 4c291a74b9..777856de34 100644 --- a/docs/cli/server.md +++ b/docs/cli/server.md @@ -4,49 +4,51 @@ The ```bor server``` command runs the Bor client. ## Options -- ```chain```: Name of the chain to sync ('mumbai', 'mainnet') or path to a genesis file +- ```chain```: Name of the chain to sync ('mumbai', 'mainnet') or path to a genesis file (default: mainnet) - ```identity```: Name/Identity of the node -- ```log-level```: Set log level for the server +- ```log-level```: Set log level for the server (default: INFO) - ```datadir```: Path of the data directory to store information +- ```datadir.ancient```: Data directory for ancient chain segments (default = inside chaindata) + - ```keystore```: Path of the directory where keystores are located - ```config```: File for the config file -- ```syncmode```: Blockchain sync mode (only "full" sync supported) +- ```syncmode```: Blockchain sync mode (only "full" sync supported) (default: full) -- ```gcmode```: Blockchain garbage collection mode ("full", "archive") +- ```gcmode```: Blockchain garbage collection mode ("full", "archive") (default: full) - ```eth.requiredblocks```: Comma separated block number-to-hash mappings to require for peering (=) -- ```snapshot```: Enables the snapshot-database mode (default = true) +- ```snapshot```: Enables the snapshot-database mode (default: true) -- ```bor.logs```: Enables bor log retrieval (default = false) +- ```bor.logs```: Enables bor log retrieval (default: false) -- ```bor.heimdall```: URL of Heimdall service +- ```bor.heimdall```: URL of Heimdall service (default: http://localhost:1317) -- ```bor.withoutheimdall```: Run without Heimdall service (for testing purpose) +- ```bor.withoutheimdall```: Run without Heimdall service (for testing purpose) (default: false) - ```ethstats```: Reporting URL of a ethstats service (nodename:secret@host:port) -- ```gpo.blocks```: Number of recent blocks to check for gas prices +- ```gpo.blocks```: Number of recent blocks to check for gas prices (default: 20) -- ```gpo.percentile```: Suggested gas price is the given percentile of a set of recent transaction gas prices +- ```gpo.percentile```: Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60) -- ```gpo.maxprice```: Maximum gas price will be recommended by gpo +- ```gpo.maxprice```: Maximum gas price will be recommended by gpo (default: 5000000000000) -- ```gpo.ignoreprice```: Gas price below which gpo will ignore transactions +- ```gpo.ignoreprice```: Gas price below which gpo will ignore transactions (default: 2) -- ```disable-bor-wallet```: Disable the personal wallet endpoints +- ```disable-bor-wallet```: Disable the personal wallet endpoints (default: true) -- ```grpc.addr```: Address and port to bind the GRPC server +- ```grpc.addr```: Address and port to bind the GRPC server (default: :3131) -- ```dev```: Enable developer mode with ephemeral proof-of-authority network and a pre-funded developer account, mining enabled +- ```dev```: Enable developer mode with ephemeral proof-of-authority network and a pre-funded developer account, mining enabled (default: false) -- ```dev.period```: Block period to use in developer mode (0 = mine only if transaction pending) +- ```dev.period```: Block period to use in developer mode (0 = mine only if transaction pending) (default: 0) ### Account Management Options @@ -54,111 +56,111 @@ The ```bor server``` command runs the Bor client. - ```password```: Password file to use for non-interactive password input -- ```allow-insecure-unlock```: Allow insecure account unlocking when account-related RPCs are exposed by http +- ```allow-insecure-unlock```: Allow insecure account unlocking when account-related RPCs are exposed by http (default: false) -- ```lightkdf```: Reduce key-derivation RAM & CPU usage at some expense of KDF strength +- ```lightkdf```: Reduce key-derivation RAM & CPU usage at some expense of KDF strength (default: false) ### Cache Options -- ```cache```: Megabytes of memory allocated to internal caching (default = 4096 mainnet full node) +- ```cache```: Megabytes of memory allocated to internal caching (default: 1024) -- ```cache.database```: Percentage of cache memory allowance to use for database io +- ```cache.database```: Percentage of cache memory allowance to use for database io (default: 50) -- ```cache.trie```: Percentage of cache memory allowance to use for trie caching (default = 15% full mode, 30% archive mode) +- ```cache.trie```: Percentage of cache memory allowance to use for trie caching (default: 15) -- ```cache.trie.journal```: Disk journal directory for trie cache to survive node restarts +- ```cache.trie.journal```: Disk journal directory for trie cache to survive node restarts (default: triecache) -- ```cache.trie.rejournal```: Time interval to regenerate the trie cache journal +- ```cache.trie.rejournal```: Time interval to regenerate the trie cache journal (default: 1h0m0s) -- ```cache.gc```: Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode) +- ```cache.gc```: Percentage of cache memory allowance to use for trie pruning (default: 25) -- ```cache.snapshot```: Percentage of cache memory allowance to use for snapshot caching (default = 10% full mode, 20% archive mode) +- ```cache.snapshot```: Percentage of cache memory allowance to use for snapshot caching (default: 10) -- ```cache.noprefetch```: Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data) +- ```cache.noprefetch```: Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data) (default: false) -- ```cache.preimages```: Enable recording the SHA3/keccak preimages of trie keys +- ```cache.preimages```: Enable recording the SHA3/keccak preimages of trie keys (default: false) -- ```txlookuplimit```: Number of recent blocks to maintain transactions index for (default = about 56 days, 0 = entire chain) +- ```txlookuplimit```: Number of recent blocks to maintain transactions index for (default: 2350000) ### JsonRPC Options -- ```rpc.gascap```: Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite) +- ```rpc.gascap```: Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite) (default: 50000000) -- ```rpc.txfeecap```: Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) +- ```rpc.txfeecap```: Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 5) -- ```ipcdisable```: Disable the IPC-RPC server +- ```ipcdisable```: Disable the IPC-RPC server (default: false) - ```ipcpath```: Filename for IPC socket/pipe within the datadir (explicit paths escape it) -- ```http.corsdomain```: Comma separated list of domains from which to accept cross origin requests (browser enforced) +- ```http.corsdomain```: Comma separated list of domains from which to accept cross origin requests (browser enforced) (default: localhost) -- ```http.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. +- ```http.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: localhost) -- ```ws.origins```: Origins from which to accept websockets requests +- ```ws.origins```: Origins from which to accept websockets requests (default: localhost) -- ```graphql.corsdomain```: Comma separated list of domains from which to accept cross origin requests (browser enforced) +- ```graphql.corsdomain```: Comma separated list of domains from which to accept cross origin requests (browser enforced) (default: localhost) -- ```graphql.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. +- ```graphql.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: localhost) -- ```http```: Enable the HTTP-RPC server +- ```http```: Enable the HTTP-RPC server (default: false) -- ```http.addr```: HTTP-RPC server listening interface +- ```http.addr```: HTTP-RPC server listening interface (default: localhost) -- ```http.port```: HTTP-RPC server listening port +- ```http.port```: HTTP-RPC server listening port (default: 8545) - ```http.rpcprefix```: HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths. -- ```http.api```: API's offered over the HTTP-RPC interface +- ```http.api```: API's offered over the HTTP-RPC interface (default: eth,net,web3,txpool,bor) -- ```ws```: Enable the WS-RPC server +- ```ws```: Enable the WS-RPC server (default: false) -- ```ws.addr```: WS-RPC server listening interface +- ```ws.addr```: WS-RPC server listening interface (default: localhost) -- ```ws.port```: WS-RPC server listening port +- ```ws.port```: WS-RPC server listening port (default: 8546) - ```ws.rpcprefix```: HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths. -- ```ws.api```: API's offered over the WS-RPC interface +- ```ws.api```: API's offered over the WS-RPC interface (default: net,web3) -- ```graphql```: Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well. +- ```graphql```: Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well. (default: false) ### P2P Options -- ```bind```: Network binding address +- ```bind```: Network binding address (default: 0.0.0.0) -- ```port```: Network listening port +- ```port```: Network listening port (default: 30303) - ```bootnodes```: Comma separated enode URLs for P2P discovery bootstrap -- ```maxpeers```: Maximum number of network peers (network disabled if set to 0) +- ```maxpeers```: Maximum number of network peers (network disabled if set to 0) (default: 50) -- ```maxpendpeers```: Maximum number of pending connection attempts +- ```maxpendpeers```: Maximum number of pending connection attempts (default: 50) -- ```nat```: NAT port mapping mechanism (any|none|upnp|pmp|extip:) +- ```nat```: NAT port mapping mechanism (any|none|upnp|pmp|extip:) (default: any) -- ```nodiscover```: Disables the peer discovery mechanism (manual peer addition) +- ```nodiscover```: Disables the peer discovery mechanism (manual peer addition) (default: false) -- ```v5disc```: Enables the experimental RLPx V5 (Topic Discovery) mechanism +- ```v5disc```: Enables the experimental RLPx V5 (Topic Discovery) mechanism (default: false) ### Sealer Options -- ```mine```: Enable mining +- ```mine```: Enable mining (default: false) - ```miner.etherbase```: Public address for block mining rewards - ```miner.extradata```: Block extra data set by the miner (default = client version) -- ```miner.gaslimit```: Target gas ceiling (gas limit) for mined blocks +- ```miner.gaslimit```: Target gas ceiling (gas limit) for mined blocks (default: 30000000) -- ```miner.gasprice```: Minimum gas price for mining a transaction +- ```miner.gasprice```: Minimum gas price for mining a transaction (default: 1000000000) ### Telemetry Options -- ```metrics```: Enable metrics collection and reporting +- ```metrics```: Enable metrics collection and reporting (default: false) -- ```metrics.expensive```: Enable expensive metrics collection and reporting +- ```metrics.expensive```: Enable expensive metrics collection and reporting (default: false) -- ```metrics.influxdb```: Enable metrics export/push to an external InfluxDB database (v1) +- ```metrics.influxdb```: Enable metrics export/push to an external InfluxDB database (v1) (default: false) - ```metrics.influxdb.endpoint```: InfluxDB API endpoint to report metrics to @@ -170,11 +172,11 @@ The ```bor server``` command runs the Bor client. - ```metrics.influxdb.tags```: Comma-separated InfluxDB tags (key/values) attached to all measurements -- ```metrics.prometheus-addr```: Address for Prometheus Server +- ```metrics.prometheus-addr```: Address for Prometheus Server (default: 127.0.0.1:7071) -- ```metrics.opencollector-endpoint```: OpenCollector Endpoint (host:port) +- ```metrics.opencollector-endpoint```: OpenCollector Endpoint (host:port) (default: 127.0.0.1:4317) -- ```metrics.influxdbv2```: Enable metrics export/push to an external InfluxDB v2 database +- ```metrics.influxdbv2```: Enable metrics export/push to an external InfluxDB v2 database (default: false) - ```metrics.influxdb.token```: Token to authorize access to the database (v2 only) @@ -186,22 +188,22 @@ The ```bor server``` command runs the Bor client. - ```txpool.locals```: Comma separated accounts to treat as locals (no flush, priority inclusion) -- ```txpool.nolocals```: Disables price exemptions for locally submitted transactions +- ```txpool.nolocals```: Disables price exemptions for locally submitted transactions (default: false) -- ```txpool.journal```: Disk journal for local transaction to survive node restarts +- ```txpool.journal```: Disk journal for local transaction to survive node restarts (default: transactions.rlp) -- ```txpool.rejournal```: Time interval to regenerate the local transaction journal +- ```txpool.rejournal```: Time interval to regenerate the local transaction journal (default: 1h0m0s) -- ```txpool.pricelimit```: Minimum gas price limit to enforce for acceptance into the pool +- ```txpool.pricelimit```: Minimum gas price limit to enforce for acceptance into the pool (default: 1) -- ```txpool.pricebump```: Price bump percentage to replace an already existing transaction +- ```txpool.pricebump```: Price bump percentage to replace an already existing transaction (default: 10) -- ```txpool.accountslots```: Minimum number of executable transaction slots guaranteed per account +- ```txpool.accountslots```: Minimum number of executable transaction slots guaranteed per account (default: 16) -- ```txpool.globalslots```: Maximum number of executable transaction slots for all accounts +- ```txpool.globalslots```: Maximum number of executable transaction slots for all accounts (default: 32768) -- ```txpool.accountqueue```: Maximum number of non-executable transaction slots permitted per account +- ```txpool.accountqueue```: Maximum number of non-executable transaction slots permitted per account (default: 16) -- ```txpool.globalqueue```: Maximum number of non-executable transaction slots for all accounts +- ```txpool.globalqueue```: Maximum number of non-executable transaction slots for all accounts (default: 32768) -- ```txpool.lifetime```: Maximum amount of time non-executable transaction are queued \ No newline at end of file +- ```txpool.lifetime```: Maximum amount of time non-executable transaction are queued (default: 3h0m0s) \ No newline at end of file diff --git a/internal/cli/flagset/flagset.go b/internal/cli/flagset/flagset.go index 933fe59060..74249df395 100644 --- a/internal/cli/flagset/flagset.go +++ b/internal/cli/flagset/flagset.go @@ -24,9 +24,10 @@ func NewFlagSet(name string) *Flagset { } type FlagVar struct { - Name string - Usage string - Group string + Name string + Usage string + Group string + Default any } func (f *Flagset) addFlag(fl *FlagVar) { @@ -38,7 +39,11 @@ func (f *Flagset) Help() string { items := []string{} for _, item := range f.flags { - items = append(items, fmt.Sprintf(" -%s\n %s", item.Name, item.Usage)) + if item.Default != nil { + items = append(items, fmt.Sprintf(" -%s\n %s (default: %v)", item.Name, item.Usage, item.Default)) + } else { + items = append(items, fmt.Sprintf(" -%s\n %s", item.Name, item.Usage)) + } } return str + strings.Join(items, "\n\n") @@ -85,7 +90,11 @@ func (f *Flagset) MarkDown() string { } for _, item := range groups[k] { - items = append(items, fmt.Sprintf("- ```%s```: %s", item.Name, item.Usage)) + if item.Default != nil { + items = append(items, fmt.Sprintf("- ```%s```: %s (default: %v)", item.Name, item.Usage, item.Default)) + } else { + items = append(items, fmt.Sprintf("- ```%s```: %s", item.Name, item.Usage)) + } } } @@ -110,27 +119,39 @@ type BoolFlag struct { func (f *Flagset) BoolFlag(b *BoolFlag) { f.addFlag(&FlagVar{ - Name: b.Name, - Usage: b.Usage, - Group: b.Group, + Name: b.Name, + Usage: b.Usage, + Group: b.Group, + Default: b.Default, }) f.set.BoolVar(b.Value, b.Name, b.Default, b.Usage) } type StringFlag struct { - Name string - Usage string - Default string - Value *string - Group string + Name string + Usage string + Default string + Value *string + Group string + HideDefaultFromDoc bool } func (f *Flagset) StringFlag(b *StringFlag) { - f.addFlag(&FlagVar{ - Name: b.Name, - Usage: b.Usage, - Group: b.Group, - }) + if b.Default == "" || b.HideDefaultFromDoc { + f.addFlag(&FlagVar{ + Name: b.Name, + Usage: b.Usage, + Group: b.Group, + Default: nil, + }) + } else { + f.addFlag(&FlagVar{ + Name: b.Name, + Usage: b.Usage, + Group: b.Group, + Default: b.Default, + }) + } f.set.StringVar(b.Value, b.Name, b.Default, b.Usage) } @@ -144,9 +165,10 @@ type IntFlag struct { func (f *Flagset) IntFlag(i *IntFlag) { f.addFlag(&FlagVar{ - Name: i.Name, - Usage: i.Usage, - Group: i.Group, + Name: i.Name, + Usage: i.Usage, + Group: i.Group, + Default: i.Default, }) f.set.IntVar(i.Value, i.Name, i.Default, i.Usage) } @@ -161,18 +183,20 @@ type Uint64Flag struct { func (f *Flagset) Uint64Flag(i *Uint64Flag) { f.addFlag(&FlagVar{ - Name: i.Name, - Usage: i.Usage, - Group: i.Group, + Name: i.Name, + Usage: i.Usage, + Group: i.Group, + Default: fmt.Sprintf("%d", i.Default), }) f.set.Uint64Var(i.Value, i.Name, i.Default, i.Usage) } type BigIntFlag struct { - Name string - Usage string - Value *big.Int - Group string + Name string + Usage string + Value *big.Int + Group string + Default *big.Int } func (b *BigIntFlag) String() string { @@ -204,9 +228,10 @@ func (b *BigIntFlag) Set(value string) error { func (f *Flagset) BigIntFlag(b *BigIntFlag) { f.addFlag(&FlagVar{ - Name: b.Name, - Usage: b.Usage, - Group: b.Group, + Name: b.Name, + Usage: b.Usage, + Group: b.Group, + Default: b.Default, }) f.set.Var(b, b.Name, b.Usage) } @@ -247,11 +272,21 @@ func (i *SliceStringFlag) Set(value string) error { } func (f *Flagset) SliceStringFlag(s *SliceStringFlag) { - f.addFlag(&FlagVar{ - Name: s.Name, - Usage: s.Usage, - Group: s.Group, - }) + if s.Default == nil || len(s.Default) == 0 { + f.addFlag(&FlagVar{ + Name: s.Name, + Usage: s.Usage, + Group: s.Group, + Default: nil, + }) + } else { + f.addFlag(&FlagVar{ + Name: s.Name, + Usage: s.Usage, + Group: s.Group, + Default: strings.Join(s.Default, ","), + }) + } f.set.Var(s, s.Name, s.Usage) } @@ -265,33 +300,39 @@ type DurationFlag struct { func (f *Flagset) DurationFlag(d *DurationFlag) { f.addFlag(&FlagVar{ - Name: d.Name, - Usage: d.Usage, - Group: d.Group, + Name: d.Name, + Usage: d.Usage, + Group: d.Group, + Default: d.Default, }) f.set.DurationVar(d.Value, d.Name, d.Default, "") } type MapStringFlag struct { - Name string - Usage string - Value *map[string]string - Group string + Name string + Usage string + Value *map[string]string + Group string + Default map[string]string } -func (m *MapStringFlag) String() string { - if m.Value == nil { +func formatMapString(m map[string]string) string { + if len(m) == 0 { return "" } ls := []string{} - for k, v := range *m.Value { + for k, v := range m { ls = append(ls, k+"="+v) } return strings.Join(ls, ",") } +func (m *MapStringFlag) String() string { + return formatMapString(*m.Value) +} + func (m *MapStringFlag) Set(value string) error { if m.Value == nil { m.Value = &map[string]string{} @@ -311,11 +352,21 @@ func (m *MapStringFlag) Set(value string) error { } func (f *Flagset) MapStringFlag(m *MapStringFlag) { - f.addFlag(&FlagVar{ - Name: m.Name, - Usage: m.Usage, - Group: m.Group, - }) + if m.Default == nil || len(m.Default) == 0 { + f.addFlag(&FlagVar{ + Name: m.Name, + Usage: m.Usage, + Group: m.Group, + Default: nil, + }) + } else { + f.addFlag(&FlagVar{ + Name: m.Name, + Usage: m.Usage, + Group: m.Group, + Default: formatMapString(m.Default), + }) + } f.set.Var(m, m.Name, m.Usage) } @@ -329,9 +380,10 @@ type Float64Flag struct { func (f *Flagset) Float64Flag(i *Float64Flag) { f.addFlag(&FlagVar{ - Name: i.Name, - Usage: i.Usage, - Group: i.Group, + Name: i.Name, + Usage: i.Usage, + Group: i.Group, + Default: i.Default, }) f.set.Float64Var(i.Value, i.Name, i.Default, "") } diff --git a/internal/cli/server/flags.go b/internal/cli/server/flags.go index a53e1c3e46..c1560d9347 100644 --- a/internal/cli/server/flags.go +++ b/internal/cli/server/flags.go @@ -16,10 +16,11 @@ func (c *Command) Flags() *flagset.Flagset { Default: c.cliConfig.Chain, }) f.StringFlag(&flagset.StringFlag{ - Name: "identity", - Usage: "Name/Identity of the node", - Value: &c.cliConfig.Identity, - Default: c.cliConfig.Identity, + Name: "identity", + Usage: "Name/Identity of the node", + Value: &c.cliConfig.Identity, + Default: c.cliConfig.Identity, + HideDefaultFromDoc: true, }) f.StringFlag(&flagset.StringFlag{ Name: "log-level", @@ -28,10 +29,11 @@ func (c *Command) Flags() *flagset.Flagset { Default: c.cliConfig.LogLevel, }) f.StringFlag(&flagset.StringFlag{ - Name: "datadir", - Usage: "Path of the data directory to store information", - Value: &c.cliConfig.DataDir, - Default: c.cliConfig.DataDir, + Name: "datadir", + Usage: "Path of the data directory to store information", + Value: &c.cliConfig.DataDir, + Default: c.cliConfig.DataDir, + HideDefaultFromDoc: true, }) f.StringFlag(&flagset.StringFlag{ Name: "datadir.ancient", @@ -62,19 +64,20 @@ func (c *Command) Flags() *flagset.Flagset { Default: c.cliConfig.GcMode, }) f.MapStringFlag(&flagset.MapStringFlag{ - Name: "eth.requiredblocks", - Usage: "Comma separated block number-to-hash mappings to require for peering (=)", - Value: &c.cliConfig.RequiredBlocks, + Name: "eth.requiredblocks", + Usage: "Comma separated block number-to-hash mappings to require for peering (=)", + Value: &c.cliConfig.RequiredBlocks, + Default: c.cliConfig.RequiredBlocks, }) f.BoolFlag(&flagset.BoolFlag{ Name: "snapshot", - Usage: `Enables the snapshot-database mode (default = true)`, + Usage: `Enables the snapshot-database mode`, Value: &c.cliConfig.Snapshot, Default: c.cliConfig.Snapshot, }) f.BoolFlag(&flagset.BoolFlag{ Name: "bor.logs", - Usage: `Enables bor log retrieval (default = false)`, + Usage: `Enables bor log retrieval`, Value: &c.cliConfig.BorLogs, Default: c.cliConfig.BorLogs, }) @@ -202,10 +205,11 @@ func (c *Command) Flags() *flagset.Flagset { Group: "Sealer", }) f.BigIntFlag(&flagset.BigIntFlag{ - Name: "miner.gasprice", - Usage: "Minimum gas price for mining a transaction", - Value: c.cliConfig.Sealer.GasPrice, - Group: "Sealer", + Name: "miner.gasprice", + Usage: "Minimum gas price for mining a transaction", + Value: c.cliConfig.Sealer.GasPrice, + Group: "Sealer", + Default: c.cliConfig.Sealer.GasPrice, }) // ethstats @@ -230,20 +234,22 @@ func (c *Command) Flags() *flagset.Flagset { Default: c.cliConfig.Gpo.Percentile, }) f.BigIntFlag(&flagset.BigIntFlag{ - Name: "gpo.maxprice", - Usage: "Maximum gas price will be recommended by gpo", - Value: c.cliConfig.Gpo.MaxPrice, + Name: "gpo.maxprice", + Usage: "Maximum gas price will be recommended by gpo", + Value: c.cliConfig.Gpo.MaxPrice, + Default: c.cliConfig.Gpo.MaxPrice, }) f.BigIntFlag(&flagset.BigIntFlag{ - Name: "gpo.ignoreprice", - Usage: "Gas price below which gpo will ignore transactions", - Value: c.cliConfig.Gpo.IgnorePrice, + Name: "gpo.ignoreprice", + Usage: "Gas price below which gpo will ignore transactions", + Value: c.cliConfig.Gpo.IgnorePrice, + Default: c.cliConfig.Gpo.IgnorePrice, }) // cache options f.Uint64Flag(&flagset.Uint64Flag{ Name: "cache", - Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node)", + Usage: "Megabytes of memory allocated to internal caching", Value: &c.cliConfig.Cache.Cache, Default: c.cliConfig.Cache.Cache, Group: "Cache", @@ -257,7 +263,7 @@ func (c *Command) Flags() *flagset.Flagset { }) f.Uint64Flag(&flagset.Uint64Flag{ Name: "cache.trie", - Usage: "Percentage of cache memory allowance to use for trie caching (default = 15% full mode, 30% archive mode)", + Usage: "Percentage of cache memory allowance to use for trie caching", Value: &c.cliConfig.Cache.PercTrie, Default: c.cliConfig.Cache.PercTrie, Group: "Cache", @@ -278,14 +284,14 @@ func (c *Command) Flags() *flagset.Flagset { }) f.Uint64Flag(&flagset.Uint64Flag{ Name: "cache.gc", - Usage: "Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode)", + Usage: "Percentage of cache memory allowance to use for trie pruning", Value: &c.cliConfig.Cache.PercGc, Default: c.cliConfig.Cache.PercGc, Group: "Cache", }) f.Uint64Flag(&flagset.Uint64Flag{ Name: "cache.snapshot", - Usage: "Percentage of cache memory allowance to use for snapshot caching (default = 10% full mode, 20% archive mode)", + Usage: "Percentage of cache memory allowance to use for snapshot caching", Value: &c.cliConfig.Cache.PercSnapshot, Default: c.cliConfig.Cache.PercSnapshot, Group: "Cache", @@ -306,7 +312,7 @@ func (c *Command) Flags() *flagset.Flagset { }) f.Uint64Flag(&flagset.Uint64Flag{ Name: "txlookuplimit", - Usage: "Number of recent blocks to maintain transactions index for (default = about 56 days, 0 = entire chain)", + Usage: "Number of recent blocks to maintain transactions index for", Value: &c.cliConfig.Cache.TxLookupLimit, Default: c.cliConfig.Cache.TxLookupLimit, Group: "Cache", @@ -569,10 +575,11 @@ func (c *Command) Flags() *flagset.Flagset { Group: "Telemetry", }) f.MapStringFlag(&flagset.MapStringFlag{ - Name: "metrics.influxdb.tags", - Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", - Value: &c.cliConfig.Telemetry.InfluxDB.Tags, - Group: "Telemetry", + Name: "metrics.influxdb.tags", + Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", + Value: &c.cliConfig.Telemetry.InfluxDB.Tags, + Group: "Telemetry", + Default: c.cliConfig.Telemetry.InfluxDB.Tags, }) f.StringFlag(&flagset.StringFlag{ Name: "metrics.prometheus-addr",