diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -35,8 +35,8 @@ static const bool DEFAULT_NAMED = false; static const int CONTINUE_EXECUTION = -1; -static void SetupCliArgs() { - SetupHelpOptions(gArgs); +static void SetupCliArgs(ArgsManager &argsman) { + SetupHelpOptions(argsman); const auto defaultBaseParams = CreateBaseChainParams(CBaseChainParams::MAIN); @@ -45,16 +45,17 @@ const auto regtestBaseParams = CreateBaseChainParams(CBaseChainParams::REGTEST); - gArgs.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, - OptionsCategory::OPTIONS); - gArgs.AddArg("-conf=", - strprintf("Specify configuration file. Relative paths will be " - "prefixed by datadir location. (default: %s)", - BITCOIN_CONF_FILENAME), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-datadir=", "Specify data directory", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, + OptionsCategory::OPTIONS); + argsman.AddArg( + "-conf=", + strprintf("Specify configuration file. Relative paths will be " + "prefixed by datadir location. (default: %s)", + BITCOIN_CONF_FILENAME), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-datadir=", "Specify data directory", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-getinfo", "Get general information from the remote server. Note that unlike " "server-side RPC calls, the results of -getinfo is the result of " @@ -62,61 +63,64 @@ "represent results from different states (e.g. wallet balance may be " "as of a different block from the chain state reported)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - SetupChainParamsBaseOptions(); - gArgs.AddArg( + SetupChainParamsBaseOptions(argsman); + argsman.AddArg( "-named", strprintf("Pass named instead of positional arguments (default: %s)", DEFAULT_NAMED), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( "-rpcconnect=", strprintf("Send commands to node running on (default: %s)", DEFAULT_RPCCONNECT), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-rpccookiefile=", - "Location of the auth cookie. Relative paths will be prefixed " - "by a net-specific datadir location. (default: data dir)", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-rpcport=", - strprintf("Connect to JSON-RPC on (default: %u, " - "testnet: %u, regtest: %u)", - defaultBaseParams->RPCPort(), - testnetBaseParams->RPCPort(), - regtestBaseParams->RPCPort()), - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::OPTIONS); - gArgs.AddArg("-rpcwait", "Wait for RPC server to start", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-rpcuser=", "Username for JSON-RPC connections", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-rpcpassword=", "Password for JSON-RPC connections", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-rpcclienttimeout=", - strprintf("Timeout in seconds during HTTP requests, or 0 for " - "no timeout. (default: %d)", - DEFAULT_HTTP_CLIENT_TIMEOUT), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - - gArgs.AddArg("-stdinrpcpass", - "Read RPC password from standard input as a single " - "line. When combined with -stdin, the first line " - "from standard input is used for the RPC password. When " - "combined with -stdinwalletpassphrase, -stdinrpcpass " - "consumes the first line, and -stdinwalletpassphrase " - "consumes the second.", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-stdinwalletpassphrase", - "Read wallet passphrase from standard input as a single " - "line. When combined with -stdin, the first line " - "from standard input is used for the wallet passphrase.", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-stdin", - "Read extra arguments from standard input, one per line until " - "EOF/Ctrl-D (recommended for sensitive information such as " - "passphrases). When combined with -stdinrpcpass, the first " - "line from standard input is used for the RPC password.", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( + "-rpccookiefile=", + "Location of the auth cookie. Relative paths will be prefixed " + "by a net-specific datadir location. (default: data dir)", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-rpcport=", + strprintf("Connect to JSON-RPC on (default: %u, " + "testnet: %u, regtest: %u)", + defaultBaseParams->RPCPort(), + testnetBaseParams->RPCPort(), + regtestBaseParams->RPCPort()), + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::OPTIONS); + argsman.AddArg("-rpcwait", "Wait for RPC server to start", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-rpcuser=", "Username for JSON-RPC connections", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-rpcpassword=", "Password for JSON-RPC connections", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( + "-rpcclienttimeout=", + strprintf("Timeout in seconds during HTTP requests, or 0 for " + "no timeout. (default: %d)", + DEFAULT_HTTP_CLIENT_TIMEOUT), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + + argsman.AddArg("-stdinrpcpass", + "Read RPC password from standard input as a single " + "line. When combined with -stdin, the first line " + "from standard input is used for the RPC password. When " + "combined with -stdinwalletpassphrase, -stdinrpcpass " + "consumes the first line, and -stdinwalletpassphrase " + "consumes the second.", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-stdinwalletpassphrase", + "Read wallet passphrase from standard input as a single " + "line. When combined with -stdin, the first line " + "from standard input is used for the wallet passphrase.", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( + "-stdin", + "Read extra arguments from standard input, one per line until " + "EOF/Ctrl-D (recommended for sensitive information such as " + "passphrases). When combined with -stdinrpcpass, the first " + "line from standard input is used for the RPC password.", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-rpcwallet=", "Send RPC for non-default wallet on RPC server (needs to exactly match " "corresponding -wallet option passed to bitcoind). This changes the " @@ -159,7 +163,7 @@ // // Parameters // - SetupCliArgs(); + SetupCliArgs(gArgs); std::string error; if (!gArgs.ParseParameters(argc, argv, error)) { tfm::format(std::cerr, "Error parsing command line arguments: %s\n", diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -35,64 +35,65 @@ const std::function G_TRANSLATION_FUN = nullptr; -static void SetupBitcoinTxArgs() { - SetupHelpOptions(gArgs); - - gArgs.AddArg("-create", "Create new, empty TX.", ArgsManager::ALLOW_ANY, - OptionsCategory::OPTIONS); - gArgs.AddArg("-json", "Select JSON output", ArgsManager::ALLOW_ANY, - OptionsCategory::OPTIONS); - gArgs.AddArg("-txid", - "Output only the hex-encoded transaction id of the resultant " - "transaction.", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - SetupChainParamsBaseOptions(); - - gArgs.AddArg("delin=N", "Delete input N from TX", ArgsManager::ALLOW_ANY, - OptionsCategory::COMMANDS); - gArgs.AddArg("delout=N", "Delete output N from TX", ArgsManager::ALLOW_ANY, - OptionsCategory::COMMANDS); - gArgs.AddArg("in=TXID:VOUT(:SEQUENCE_NUMBER)", "Add input to TX", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - gArgs.AddArg("locktime=N", "Set TX lock time to N", ArgsManager::ALLOW_ANY, - OptionsCategory::COMMANDS); - gArgs.AddArg("nversion=N", "Set TX version to N", ArgsManager::ALLOW_ANY, - OptionsCategory::COMMANDS); - gArgs.AddArg("outaddr=VALUE:ADDRESS", "Add address-based output to TX", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - gArgs.AddArg("outpubkey=VALUE:PUBKEY[:FLAGS]", - "Add pay-to-pubkey output to TX. " - "Optionally add the \"S\" flag to wrap the output in a " - "pay-to-script-hash.", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - gArgs.AddArg("outdata=[VALUE:]DATA", "Add data-based output to TX", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - gArgs.AddArg("outscript=VALUE:SCRIPT[:FLAGS]", - "Add raw script output to TX. " - "Optionally add the \"S\" flag to wrap the output in a " - "pay-to-script-hash.", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - gArgs.AddArg( +static void SetupBitcoinTxArgs(ArgsManager &argsman) { + SetupHelpOptions(argsman); + + argsman.AddArg("-create", "Create new, empty TX.", ArgsManager::ALLOW_ANY, + OptionsCategory::OPTIONS); + argsman.AddArg("-json", "Select JSON output", ArgsManager::ALLOW_ANY, + OptionsCategory::OPTIONS); + argsman.AddArg( + "-txid", + "Output only the hex-encoded transaction id of the resultant " + "transaction.", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + SetupChainParamsBaseOptions(argsman); + + argsman.AddArg("delin=N", "Delete input N from TX", ArgsManager::ALLOW_ANY, + OptionsCategory::COMMANDS); + argsman.AddArg("delout=N", "Delete output N from TX", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg("in=TXID:VOUT(:SEQUENCE_NUMBER)", "Add input to TX", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg("locktime=N", "Set TX lock time to N", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg("nversion=N", "Set TX version to N", ArgsManager::ALLOW_ANY, + OptionsCategory::COMMANDS); + argsman.AddArg("outaddr=VALUE:ADDRESS", "Add address-based output to TX", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg("outpubkey=VALUE:PUBKEY[:FLAGS]", + "Add pay-to-pubkey output to TX. " + "Optionally add the \"S\" flag to wrap the output in a " + "pay-to-script-hash.", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg("outdata=[VALUE:]DATA", "Add data-based output to TX", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg("outscript=VALUE:SCRIPT[:FLAGS]", + "Add raw script output to TX. " + "Optionally add the \"S\" flag to wrap the output in a " + "pay-to-script-hash.", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + argsman.AddArg( "outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS]", "Add Pay To n-of-m Multi-sig output to TX. n = REQUIRED, m = PUBKEYS. " "Optionally add the \"S\" flag to wrap the output in a " "pay-to-script-hash.", ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - gArgs.AddArg("sign=SIGHASH-FLAGS", - "Add zero or more signatures to transaction. " - "This command requires JSON registers:" - "prevtxs=JSON object, " - "privatekeys=JSON object. " - "See signrawtransactionwithkey docs for format of sighash " - "flags, JSON objects.", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); - - gArgs.AddArg("load=NAME:FILENAME", - "Load JSON file FILENAME into register NAME", - ArgsManager::ALLOW_ANY, OptionsCategory::REGISTER_COMMANDS); - gArgs.AddArg("set=NAME:JSON-STRING", - "Set register NAME to given JSON-STRING", - ArgsManager::ALLOW_ANY, OptionsCategory::REGISTER_COMMANDS); + argsman.AddArg("sign=SIGHASH-FLAGS", + "Add zero or more signatures to transaction. " + "This command requires JSON registers:" + "prevtxs=JSON object, " + "privatekeys=JSON object. " + "See signrawtransactionwithkey docs for format of sighash " + "flags, JSON objects.", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); + + argsman.AddArg("load=NAME:FILENAME", + "Load JSON file FILENAME into register NAME", + ArgsManager::ALLOW_ANY, OptionsCategory::REGISTER_COMMANDS); + argsman.AddArg("set=NAME:JSON-STRING", + "Set register NAME to given JSON-STRING", + ArgsManager::ALLOW_ANY, OptionsCategory::REGISTER_COMMANDS); } // @@ -103,7 +104,7 @@ // // Parameters // - SetupBitcoinTxArgs(); + SetupBitcoinTxArgs(gArgs); std::string error; if (!gArgs.ParseParameters(argc, argv, error)) { tfm::format(std::cerr, "Error parsing command line arguments: %s\n", diff --git a/src/bitcoin-wallet.cpp b/src/bitcoin-wallet.cpp --- a/src/bitcoin-wallet.cpp +++ b/src/bitcoin-wallet.cpp @@ -17,34 +17,35 @@ const std::function G_TRANSLATION_FUN = nullptr; -static void SetupWalletToolArgs() { - SetupHelpOptions(gArgs); - SetupChainParamsBaseOptions(); - - gArgs.AddArg("-datadir=", "Specify data directory", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-wallet=", "Specify wallet name", - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::OPTIONS); - gArgs.AddArg("-debug=", - "Output debugging information (default: 0).", - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-printtoconsole", - "Send trace/debug info to console (default: 1 when no -debug " - "is true, 0 otherwise).", - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - - gArgs.AddArg("info", "Get wallet info", ArgsManager::ALLOW_ANY, - OptionsCategory::COMMANDS); - gArgs.AddArg("create", "Create new wallet file", ArgsManager::ALLOW_ANY, - OptionsCategory::COMMANDS); - gArgs.AddArg("salvage", - "Attempt to recover private keys from a corrupt wallet", - ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); +static void SetupWalletToolArgs(ArgsManager &argsman) { + SetupHelpOptions(argsman); + SetupChainParamsBaseOptions(argsman); + + argsman.AddArg("-datadir=", "Specify data directory", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-wallet=", "Specify wallet name", + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::OPTIONS); + argsman.AddArg("-debug=", + "Output debugging information (default: 0).", + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + argsman.AddArg( + "-printtoconsole", + "Send trace/debug info to console (default: 1 when no -debug " + "is true, 0 otherwise).", + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + + argsman.AddArg("info", "Get wallet info", ArgsManager::ALLOW_ANY, + OptionsCategory::COMMANDS); + argsman.AddArg("create", "Create new wallet file", ArgsManager::ALLOW_ANY, + OptionsCategory::COMMANDS); + argsman.AddArg("salvage", + "Attempt to recover private keys from a corrupt wallet", + ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS); } static bool WalletAppInit(int argc, char *argv[]) { - SetupWalletToolArgs(); + SetupWalletToolArgs(gArgs); std::string error_message; if (!gArgs.ParseParameters(argc, argv, error_message)) { tfm::format(std::cerr, "Error parsing command line arguments: %s\n", diff --git a/src/chainparamsbase.h b/src/chainparamsbase.h --- a/src/chainparamsbase.h +++ b/src/chainparamsbase.h @@ -8,6 +8,8 @@ #include #include +class ArgsManager; + /** * CBaseChainParams defines the base parameters * (shared between bitcoin-cli and bitcoind) @@ -43,7 +45,7 @@ /** * Set the arguments for chainparams. */ -void SetupChainParamsBaseOptions(); +void SetupChainParamsBaseOptions(ArgsManager &argsman); /** * Return the currently selected parameters. This won't change after app diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp --- a/src/chainparamsbase.cpp +++ b/src/chainparamsbase.cpp @@ -14,20 +14,21 @@ const std::string CBaseChainParams::TESTNET = "test"; const std::string CBaseChainParams::REGTEST = "regtest"; -void SetupChainParamsBaseOptions() { - gArgs.AddArg("-chain=", - "Use the chain (default: main). Allowed values: main, " - "test, regtest", - ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); - gArgs.AddArg( +void SetupChainParamsBaseOptions(ArgsManager &argsman) { + argsman.AddArg( + "-chain=", + "Use the chain (default: main). Allowed values: main, " + "test, regtest", + ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); + argsman.AddArg( "-regtest", "Enter regression test mode, which uses a special chain in which " "blocks can be solved instantly. This is intended for regression " "testing tools and app development. Equivalent to -chain=regtest.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS); - gArgs.AddArg("-testnet", "Use the test chain. Equivalent to -chain=test.", - ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); + argsman.AddArg("-testnet", "Use the test chain. Equivalent to -chain=test.", + ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); } static std::unique_ptr globalChainBaseParams; diff --git a/src/dummywallet.cpp b/src/dummywallet.cpp --- a/src/dummywallet.cpp +++ b/src/dummywallet.cpp @@ -21,14 +21,14 @@ class DummyWalletInit : public WalletInitInterface { public: bool HasWalletSupport() const override { return false; } - void AddWalletOptions() const override; + void AddWalletOptions(ArgsManager &argsman) const override; bool ParameterInteraction() const override { return true; } void Construct(NodeContext &node) const override { LogPrintf("No wallet support compiled in!\n"); } }; -void DummyWalletInit::AddWalletOptions() const { +void DummyWalletInit::AddWalletOptions(ArgsManager &argsman) const { std::vector opts = { "-avoidpartialspends", "-disablewallet", "-fallbackfee=", "-keypool=", "-maxapsfee=", "-maxtxfee=", "-mintxfee=", @@ -37,7 +37,7 @@ "-walletdir=", "-walletnotify=", "-zapwallettxes=", // Wallet debug options "-dblogsize=", "-flushwallet", "-privdb", "-walletrejectlongchains"}; - gArgs.AddHiddenArgs(opts); + argsman.AddHiddenArgs(opts); } const WalletInitInterface &g_wallet_init_interface = DummyWalletInit(); diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -370,12 +370,13 @@ void SetupServerArgs(NodeContext &node) { assert(!node.args); node.args = &gArgs; + ArgsManager &argsman = *node.args; SetupHelpOptions(gArgs); // server-only for now - gArgs.AddArg("-help-debug", - "Print help message with debugging options and exit", false, - OptionsCategory::DEBUG_TEST); + argsman.AddArg("-help-debug", + "Print help message with debugging options and exit", false, + OptionsCategory::DEBUG_TEST); const auto defaultBaseParams = CreateBaseChainParams(CBaseChainParams::MAIN); @@ -406,15 +407,16 @@ // alphabetical ordering. Do not translate _(...) -help-debug options, Many // technical terms, and only a very small audience, so is unnecessary stress // to translators. - gArgs.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, - OptionsCategory::OPTIONS); + argsman.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, + OptionsCategory::OPTIONS); #if defined(HAVE_SYSTEM) - gArgs.AddArg("-alertnotify=", - "Execute command when a relevant alert is received or we see " - "a really long fork (%s in cmd is replaced by message)", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( + "-alertnotify=", + "Execute command when a relevant alert is received or we see " + "a really long fork (%s in cmd is replaced by message)", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); #endif - gArgs.AddArg( + argsman.AddArg( "-assumevalid=", strprintf( "If this block is in the chain assume that it and its ancestors " @@ -423,22 +425,22 @@ defaultChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnetChainParams->GetConsensus().defaultAssumeValid.GetHex()), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-blocksdir=", - "Specify directory to hold blocks subdirectory for *.dat " - "files (default: )", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-blocksdir=", + "Specify directory to hold blocks subdirectory for *.dat " + "files (default: )", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); #if defined(HAVE_SYSTEM) - gArgs.AddArg("-blocknotify=", - "Execute command when the best block changes (%s in cmd is " - "replaced by block hash)", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-blocknotify=", + "Execute command when the best block changes (%s in cmd is " + "replaced by block hash)", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); #endif - gArgs.AddArg("-blockreconstructionextratxn=", - strprintf("Extra transactions to keep in memory for compact " - "block reconstructions (default: %u)", - DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg("-blockreconstructionextratxn=", + strprintf("Extra transactions to keep in memory for compact " + "block reconstructions (default: %u)", + DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-blocksonly", strprintf( "Whether to reject transactions from network peers. Transactions " @@ -446,72 +448,74 @@ " not affected. (default: %u)", DEFAULT_BLOCKSONLY), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( "-conf=", strprintf("Specify path to read-only configuration file. Relative " "paths will be prefixed by datadir location. (default: %s)", BITCOIN_CONF_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-datadir=", "Specify data directory", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg("-datadir=", "Specify data directory", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-dbbatchsize", strprintf("Maximum database write batch size in bytes (default: %u)", DEFAULT_DB_BATCH_SIZE), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( "-dbcache=", strprintf("Set database cache size in MiB (%d to %d, default: %d)", MIN_DB_CACHE_MB, MAX_DB_CACHE_MB, DEFAULT_DB_CACHE_MB), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-debuglogfile=", - strprintf("Specify location of debug log file. Relative paths " - "will be prefixed by a net-specific datadir " - "location. (0 to disable; default: %s)", - DEFAULT_DEBUGLOGFILE), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-feefilter", - strprintf("Tell other nodes to filter invs to us by our " - "mempool min fee (default: %d)", - DEFAULT_FEEFILTER), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::OPTIONS); - gArgs.AddArg("-finalizationdelay=", - strprintf("Set the minimum amount of time to wait between a " - "block header reception and the block finalization. " - "Unit is seconds (default: %d)", - DEFAULT_MIN_FINALIZATION_DELAY), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( + "-debuglogfile=", + strprintf("Specify location of debug log file. Relative paths " + "will be prefixed by a net-specific datadir " + "location. (0 to disable; default: %s)", + DEFAULT_DEBUGLOGFILE), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-feefilter", + strprintf("Tell other nodes to filter invs to us by our " + "mempool min fee (default: %d)", + DEFAULT_FEEFILTER), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::OPTIONS); + argsman.AddArg( + "-finalizationdelay=", + strprintf("Set the minimum amount of time to wait between a " + "block header reception and the block finalization. " + "Unit is seconds (default: %d)", + DEFAULT_MIN_FINALIZATION_DELAY), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-includeconf=", "Specify additional configuration file, relative to the -datadir path " "(only useable from configuration file, not command line)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-maxreorgdepth=", - strprintf("Configure at what depth blocks are considered " - "final (default: %d). Use -1 to disable.", - DEFAULT_MAX_REORG_DEPTH), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-loadblock=", - "Imports blocks from external file on startup", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-maxmempool=", - strprintf("Keep the transaction memory pool below " - "megabytes (default: %u)", - DEFAULT_MAX_MEMPOOL_SIZE), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-maxorphantx=", - strprintf("Keep at most unconnectable transactions in " - "memory (default: %u)", - DEFAULT_MAX_ORPHAN_TRANSACTIONS), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-mempoolexpiry=", - strprintf("Do not keep transactions in the mempool longer " - "than hours (default: %u)", - DEFAULT_MEMPOOL_EXPIRY), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg("-maxreorgdepth=", + strprintf("Configure at what depth blocks are considered " + "final (default: %d). Use -1 to disable.", + DEFAULT_MAX_REORG_DEPTH), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-loadblock=", + "Imports blocks from external file on startup", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-maxmempool=", + strprintf("Keep the transaction memory pool below " + "megabytes (default: %u)", + DEFAULT_MAX_MEMPOOL_SIZE), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-maxorphantx=", + strprintf("Keep at most unconnectable transactions in " + "memory (default: %u)", + DEFAULT_MAX_ORPHAN_TRANSACTIONS), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-mempoolexpiry=", + strprintf("Do not keep transactions in the mempool longer " + "than hours (default: %u)", + DEFAULT_MEMPOOL_EXPIRY), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-minimumchainwork=", strprintf( "Minimum work assumed to exist on a valid chain in hex " @@ -520,24 +524,25 @@ testnetChainParams->GetConsensus().nMinimumChainWork.GetHex()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( "-par=", strprintf("Set the number of script verification threads (%u to %d, 0 " "= auto, <0 = leave that many cores free, default: %d)", -GetNumCores(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-persistmempool", - strprintf("Whether to save the mempool on shutdown and load " - "on restart (default: %u)", - DEFAULT_PERSIST_MEMPOOL), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-pid=", - strprintf("Specify pid file. Relative paths will be prefixed " - "by a net-specific datadir location. (default: %s)", - BITCOIN_PID_FILENAME), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg("-persistmempool", + strprintf("Whether to save the mempool on shutdown and load " + "on restart (default: %u)", + DEFAULT_PERSIST_MEMPOOL), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( + "-pid=", + strprintf("Specify pid file. Relative paths will be prefixed " + "by a net-specific datadir location. (default: %s)", + BITCOIN_PID_FILENAME), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-prune=", strprintf("Reduce storage requirements by enabling pruning (deleting) " "of old blocks. This allows the pruneblockchain RPC to be " @@ -550,16 +555,17 @@ "block files to stay under the specified target size in MiB)", MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-reindex-chainstate", - "Rebuild chain state from the currently indexed blocks. When " - "in pruning mode or if blocks on disk might be corrupted, use " - "full -reindex instead.", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( + "-reindex-chainstate", + "Rebuild chain state from the currently indexed blocks. When " + "in pruning mode or if blocks on disk might be corrupted, use " + "full -reindex instead.", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( "-reindex", "Rebuild chain state and block index from the blk*.dat files on disk", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg( + argsman.AddArg( "-settings=", strprintf( "Specify path to dynamic settings data file. Can be disabled with " @@ -569,7 +575,7 @@ BITCOIN_CONF_FILENAME, BITCOIN_SETTINGS_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); #ifndef WIN32 - gArgs.AddArg( + argsman.AddArg( "-sysperms", "Create new files with system default permissions, instead of umask " "077 (only effective with disabled wallet functionality)", @@ -577,185 +583,192 @@ #else hidden_args.emplace_back("-sysperms"); #endif - gArgs.AddArg("-txindex", - strprintf("Maintain a full transaction index, used by the " - "getrawtransaction rpc call (default: %d)", - DEFAULT_TXINDEX), - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-blockfilterindex=", - strprintf("Maintain an index of compact filters by block " - "(default: %s, values: %s).", - DEFAULT_BLOCKFILTERINDEX, ListBlockFilterTypes()) + - " If is not supplied or if = 1, indexes for " - "all known types are enabled.", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-usecashaddr", - "Use Cash Address for destination encoding instead of base58 " - "(activate by default on Jan, 14)", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - - gArgs.AddArg("-addnode=", - "Add a node to connect to and attempt to keep the connection " - "open (see the `addnode` RPC command help for more info)", - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::CONNECTION); - gArgs.AddArg("-asmap=", - strprintf("Specify asn mapping used for bucketing of the " - "peers (default: %s). Relative paths will be " - "prefixed by the net-specific datadir location.", - DEFAULT_ASMAP_FILENAME), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-banscore=", - strprintf("Threshold for disconnecting and discouraging " - "misbehaving peers (default: %u)", - DEFAULT_BANSCORE_THRESHOLD), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-bantime=", - strprintf("Default duration (in seconds) of manually " - "configured bans (default: %u)", - DEFAULT_MISBEHAVING_BANTIME), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-bind=", - "Bind to given address and always listen on it. Use " - "[host]:port notation for IPv6", - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg("-txindex", + strprintf("Maintain a full transaction index, used by the " + "getrawtransaction rpc call (default: %d)", + DEFAULT_TXINDEX), + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( + "-blockfilterindex=", + strprintf("Maintain an index of compact filters by block " + "(default: %s, values: %s).", + DEFAULT_BLOCKFILTERINDEX, ListBlockFilterTypes()) + + " If is not supplied or if = 1, indexes for " + "all known types are enabled.", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg( + "-usecashaddr", + "Use Cash Address for destination encoding instead of base58 " + "(activate by default on Jan, 14)", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + + argsman.AddArg( + "-addnode=", + "Add a node to connect to and attempt to keep the connection " + "open (see the `addnode` RPC command help for more info)", + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::CONNECTION); + argsman.AddArg("-asmap=", + strprintf("Specify asn mapping used for bucketing of the " + "peers (default: %s). Relative paths will be " + "prefixed by the net-specific datadir location.", + DEFAULT_ASMAP_FILENAME), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-banscore=", + strprintf("Threshold for disconnecting and discouraging " + "misbehaving peers (default: %u)", + DEFAULT_BANSCORE_THRESHOLD), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-bantime=", + strprintf("Default duration (in seconds) of manually " + "configured bans (default: %u)", + DEFAULT_MISBEHAVING_BANTIME), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-bind=", + "Bind to given address and always listen on it. Use " + "[host]:port notation for IPv6", + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::CONNECTION); + argsman.AddArg( "-connect=", "Connect only to the specified node(s); -connect=0 disables automatic " "connections (the rules for this peer are the same as for -addnode)", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); - gArgs.AddArg("-discover", - "Discover own IP addresses (default: 1 when listening and no " - "-externalip or -proxy)", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-dns", - strprintf("Allow DNS lookups for -addnode, -seednode and " - "-connect (default: %d)", - DEFAULT_NAME_LOOKUP), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-dnsseed", - "Query for peer addresses via DNS lookup, if low on addresses " - "(default: 1 unless -connect used)", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - - gArgs.AddArg("-externalip=", "Specify your own public address", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( + "-discover", + "Discover own IP addresses (default: 1 when listening and no " + "-externalip or -proxy)", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-dns", + strprintf("Allow DNS lookups for -addnode, -seednode and " + "-connect (default: %d)", + DEFAULT_NAME_LOOKUP), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( + "-dnsseed", + "Query for peer addresses via DNS lookup, if low on addresses " + "(default: 1 unless -connect used)", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + + argsman.AddArg("-externalip=", "Specify your own public address", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( "-forcednsseed", strprintf( "Always query for peer addresses via DNS lookup (default: %d)", DEFAULT_FORCEDNSSEED), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( "-listen", "Accept connections from outside (default: 1 if no -proxy or -connect)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( "-listenonion", strprintf("Automatically create Tor hidden service (default: %d)", DEFAULT_LISTEN_ONION), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( "-maxconnections=", strprintf("Maintain at most connections to peers. The effective " "limit depends on system limitations and might be lower than " "the specified value (default: %u)", DEFAULT_MAX_PEER_CONNECTIONS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-maxreceivebuffer=", - strprintf("Maximum per-connection receive buffer, *1000 " - "bytes (default: %u)", - DEFAULT_MAXRECEIVEBUFFER), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg("-maxreceivebuffer=", + strprintf("Maximum per-connection receive buffer, *1000 " + "bytes (default: %u)", + DEFAULT_MAXRECEIVEBUFFER), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( "-maxsendbuffer=", strprintf( "Maximum per-connection send buffer, *1000 bytes (default: %u)", DEFAULT_MAXSENDBUFFER), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( "-maxtimeadjustment", strprintf("Maximum allowed median peer time offset adjustment. Local " "perspective of time may be influenced by peers forward or " "backward by this amount. (default: %u seconds)", DEFAULT_MAX_TIME_ADJUSTMENT), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-onion=", - strprintf("Use separate SOCKS5 proxy to reach peers via Tor " - "hidden services (default: %s)", - "-proxy"), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg("-onion=", + strprintf("Use separate SOCKS5 proxy to reach peers via Tor " + "hidden services (default: %s)", + "-proxy"), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( "-onlynet=", "Make outgoing connections only through network (ipv4, ipv6 or " "onion). Incoming connections are not affected by this option. This " "option can be specified multiple times to allow multiple networks.", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-peerbloomfilters", - strprintf("Support filtering of blocks and transaction with " - "bloom filters (default: %d)", - DEFAULT_PEERBLOOMFILTERS), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg("-peerbloomfilters", + strprintf("Support filtering of blocks and transaction with " + "bloom filters (default: %d)", + DEFAULT_PEERBLOOMFILTERS), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( "-peerblockfilters", strprintf( "Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-permitbaremultisig", - strprintf("Relay non-P2SH multisig (default: %d)", - DEFAULT_PERMIT_BAREMULTISIG), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-port=", - strprintf("Listen for connections on (default: %u, " - "testnet: %u, regtest: %u)", - defaultChainParams->GetDefaultPort(), - testnetChainParams->GetDefaultPort(), - regtestChainParams->GetDefaultPort()), - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::CONNECTION); - gArgs.AddArg("-proxy=", "Connect through SOCKS5 proxy", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-proxyrandomize", - strprintf("Randomize credentials for every proxy connection. " - "This enables Tor stream isolation (default: %d)", - DEFAULT_PROXYRANDOMIZE), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-seednode=", - "Connect to a node to retrieve peer addresses, and disconnect", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-timeout=", - strprintf("Specify connection timeout in milliseconds " - "(minimum: 1, default: %d)", - DEFAULT_CONNECT_TIMEOUT), - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg("-permitbaremultisig", + strprintf("Relay non-P2SH multisig (default: %d)", + DEFAULT_PERMIT_BAREMULTISIG), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-port=", + strprintf("Listen for connections on (default: %u, " + "testnet: %u, regtest: %u)", + defaultChainParams->GetDefaultPort(), + testnetChainParams->GetDefaultPort(), + regtestChainParams->GetDefaultPort()), + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::CONNECTION); + argsman.AddArg("-proxy=", "Connect through SOCKS5 proxy", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( + "-proxyrandomize", + strprintf("Randomize credentials for every proxy connection. " + "This enables Tor stream isolation (default: %d)", + DEFAULT_PROXYRANDOMIZE), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( + "-seednode=", + "Connect to a node to retrieve peer addresses, and disconnect", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-timeout=", + strprintf("Specify connection timeout in milliseconds " + "(minimum: 1, default: %d)", + DEFAULT_CONNECT_TIMEOUT), + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( "-peertimeout=", strprintf("Specify p2p connection timeout in seconds. This option " "determines the amount of time a peer may be inactive before " "the connection to it is dropped. (minimum: 1, default: %d)", DEFAULT_PEER_CONNECT_TIMEOUT), true, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( "-torcontrol=:", strprintf( "Tor control port to use if onion listening enabled (default: %s)", DEFAULT_TOR_CONTROL), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-torpassword=", - "Tor control port password (default: empty)", - ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, - OptionsCategory::CONNECTION); + argsman.AddArg("-torpassword=", + "Tor control port password (default: empty)", + ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, + OptionsCategory::CONNECTION); #ifdef USE_UPNP #if USE_UPNP - gArgs.AddArg("-upnp", - "Use UPnP to map the listening port (default: 1 when " - "listening and no -proxy)", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-upnp", + "Use UPnP to map the listening port (default: 1 when " + "listening and no -proxy)", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); #else - gArgs.AddArg( + argsman.AddArg( "-upnp", strprintf("Use UPnP to map the listening port (default: %u)", 0), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); @@ -763,66 +776,71 @@ #else hidden_args.emplace_back("-upnp"); #endif - gArgs.AddArg("-whitebind=<[permissions@]addr>", - "Bind to given address and whitelist peers connecting to it." - " Use [host]:port notation for IPv6. Allowed permissions are " - "bloomfilter (allow requesting BIP37 filtered blocks and " - "transactions), noban (do not ban for misbehavior), " - "forcerelay (relay even non-standard transactions), " - "relay (relay even in -blocksonly mode), " - "and mempool (allow requesting BIP35 mempool contents). " - "Specify multiple permissions separated by commas (default: " - "noban,mempool,relay). Can be specified multiple times.", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - - gArgs.AddArg("-whitelist=<[permissions@]IP address or network>", - "Whitelist peers connecting from the given IP address " - "(e.g. 1.2.3.4) or CIDR notated network(e.g. 1.2.3.0/24). " - "Uses same permissions as -whitebind. Can be specified " - "multiple times.", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg( + argsman.AddArg( + "-whitebind=<[permissions@]addr>", + "Bind to given address and whitelist peers connecting to it." + " Use [host]:port notation for IPv6. Allowed permissions are " + "bloomfilter (allow requesting BIP37 filtered blocks and " + "transactions), noban (do not ban for misbehavior), " + "forcerelay (relay even non-standard transactions), " + "relay (relay even in -blocksonly mode), " + "and mempool (allow requesting BIP35 mempool contents). " + "Specify multiple permissions separated by commas (default: " + "noban,mempool,relay). Can be specified multiple times.", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + + argsman.AddArg("-whitelist=<[permissions@]IP address or network>", + "Whitelist peers connecting from the given IP address " + "(e.g. 1.2.3.4) or CIDR notated network(e.g. 1.2.3.0/24). " + "Uses same permissions as -whitebind. Can be specified " + "multiple times.", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg( "-maxuploadtarget=", strprintf("Tries to keep outbound traffic under the given target (in " "MiB per 24h), 0 = no limit (default: %d)", DEFAULT_MAX_UPLOAD_TARGET), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - g_wallet_init_interface.AddWalletOptions(); + g_wallet_init_interface.AddWalletOptions(argsman); #if ENABLE_ZMQ - gArgs.AddArg("-zmqpubhashblock=
", - "Enable publish hash block in
", - ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubhashtx=
", - "Enable publish hash transaction in
", - ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubrawblock=
", - "Enable publish raw block in
", - ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubrawtx=
", - "Enable publish raw transaction in
", - ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubhashblockhwm=", - strprintf("Set publish hash block outbound message high water " - "mark (default: %d)", - CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), - false, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubhashtxhwm=", - strprintf("Set publish hash transaction outbound message high " - "water mark (default: %d)", - CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), - false, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubrawblockhwm=", - strprintf("Set publish raw block outbound message high water " - "mark (default: %d)", - CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), - false, OptionsCategory::ZMQ); - gArgs.AddArg("-zmqpubrawtxhwm=", - strprintf("Set publish raw transaction outbound message high " - "water mark (default: %d)", - CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), - false, OptionsCategory::ZMQ); + argsman.AddArg("-zmqpubhashblock=
", + "Enable publish hash block in
", + ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); + argsman.AddArg("-zmqpubhashtx=
", + "Enable publish hash transaction in
", + ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); + argsman.AddArg("-zmqpubrawblock=
", + "Enable publish raw block in
", + ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); + argsman.AddArg("-zmqpubrawtx=
", + "Enable publish raw transaction in
", + ArgsManager::ALLOW_ANY, OptionsCategory::ZMQ); + argsman.AddArg( + "-zmqpubhashblockhwm=", + strprintf("Set publish hash block outbound message high water " + "mark (default: %d)", + CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), + false, OptionsCategory::ZMQ); + argsman.AddArg( + "-zmqpubhashtxhwm=", + strprintf("Set publish hash transaction outbound message high " + "water mark (default: %d)", + CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), + false, OptionsCategory::ZMQ); + argsman.AddArg( + "-zmqpubrawblockhwm=", + strprintf("Set publish raw block outbound message high water " + "mark (default: %d)", + CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), + false, OptionsCategory::ZMQ); + argsman.AddArg( + "-zmqpubrawtxhwm=", + strprintf("Set publish raw transaction outbound message high " + "water mark (default: %d)", + CZMQAbstractNotifier::DEFAULT_ZMQ_SNDHWM), + false, OptionsCategory::ZMQ); #else hidden_args.emplace_back("-zmqpubhashblock=
"); hidden_args.emplace_back("-zmqpubhashtx=
"); @@ -834,13 +852,13 @@ hidden_args.emplace_back("-zmqpubrawtxhwm="); #endif - gArgs.AddArg( + argsman.AddArg( "-checkblocks=", strprintf("How many blocks to check at startup (default: %u, 0 = all)", DEFAULT_CHECKBLOCKS), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( "-checklevel=", strprintf("How thorough the block verification of " "-checkblocks is: " @@ -854,15 +872,15 @@ DEFAULT_CHECKLEVEL), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-checkblockindex", - strprintf("Do a consistency check for the block tree, " - "chainstate, and other validation data structures " - "occasionally. (default: %u, regtest: %u)", - defaultChainParams->DefaultConsistencyChecks(), - regtestChainParams->DefaultConsistencyChecks()), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg("-checkblockindex", + strprintf("Do a consistency check for the block tree, " + "chainstate, and other validation data structures " + "occasionally. (default: %u, regtest: %u)", + defaultChainParams->DefaultConsistencyChecks(), + regtestChainParams->DefaultConsistencyChecks()), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-checkmempool=", strprintf( "Run checks every transactions (default: %u, regtest: %u)", @@ -870,159 +888,163 @@ regtestChainParams->DefaultConsistencyChecks()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-checkpoints", - strprintf("Only accept block chain matching built-in " - "checkpoints (default: %d)", - DEFAULT_CHECKPOINTS_ENABLED), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-deprecatedrpc=", - "Allows deprecated RPC method(s) to be used", - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-dropmessagestest=", - "Randomly drop 1 of every network messages", - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg("-checkpoints", + strprintf("Only accept block chain matching built-in " + "checkpoints (default: %d)", + DEFAULT_CHECKPOINTS_ENABLED), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg("-deprecatedrpc=", + "Allows deprecated RPC method(s) to be used", + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg("-dropmessagestest=", + "Randomly drop 1 of every network messages", + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-stopafterblockimport", strprintf("Stop running after importing blocks from disk (default: %d)", DEFAULT_STOPAFTERBLOCKIMPORT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-stopatheight", - strprintf("Stop running after reaching the given height in " - "the main chain (default: %u)", - DEFAULT_STOPATHEIGHT), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-limitancestorcount=", - strprintf("Do not accept transactions if number of in-mempool " - "ancestors is or more (default: %u)", - DEFAULT_ANCESTOR_LIMIT), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg("-stopatheight", + strprintf("Stop running after reaching the given height in " + "the main chain (default: %u)", + DEFAULT_STOPATHEIGHT), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg( + "-limitancestorcount=", + strprintf("Do not accept transactions if number of in-mempool " + "ancestors is or more (default: %u)", + DEFAULT_ANCESTOR_LIMIT), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-limitancestorsize=", strprintf("Do not accept transactions whose size with all in-mempool " "ancestors exceeds kilobytes (default: %u)", DEFAULT_ANCESTOR_SIZE_LIMIT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( "-limitdescendantcount=", strprintf("Do not accept transactions if any ancestor would have " "or more in-mempool descendants (default: %u)", DEFAULT_DESCENDANT_LIMIT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( "-limitdescendantsize=", strprintf("Do not accept transactions if any ancestor would have more " "than kilobytes of in-mempool descendants (default: %u).", DEFAULT_DESCENDANT_SIZE_LIMIT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-addrmantest", "Allows to test address relay on localhost", - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - - gArgs.AddArg("-debug=", - strprintf("Output debugging information (default: %u, " - "supplying is optional)", - 0) + - ". " + - "If is not supplied or if = 1, " - "output all debugging information." - " can be: " + - ListLogCategories() + ".", - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg("-addrmantest", "Allows to test address relay on localhost", + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + + argsman.AddArg("-debug=", + strprintf("Output debugging information (default: %u, " + "supplying is optional)", + 0) + + ". " + + "If is not supplied or if = 1, " + "output all debugging information." + " can be: " + + ListLogCategories() + ".", + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-debugexclude=", strprintf("Exclude debugging information for a category. Can be used " "in conjunction with -debug=1 to output debug logs for all " "categories except one or more specified categories."), ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-logips", - strprintf("Include IP addresses in debug output (default: %d)", - DEFAULT_LOGIPS), - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-logtimestamps", - strprintf("Prepend debug output with timestamp (default: %d)", - DEFAULT_LOGTIMESTAMPS), - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( + "-logips", + strprintf("Include IP addresses in debug output (default: %d)", + DEFAULT_LOGIPS), + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + argsman.AddArg( + "-logtimestamps", + strprintf("Prepend debug output with timestamp (default: %d)", + DEFAULT_LOGTIMESTAMPS), + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-logthreadnames", strprintf( "Prepend debug output with name of the originating thread (only " "available on platforms supporting thread_local) (default: %u)", DEFAULT_LOGTHREADNAMES), ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( "-logtimemicros", strprintf("Add microsecond precision to debug timestamps (default: %d)", DEFAULT_LOGTIMEMICROS), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-mocktime=", - "Replace actual time with " + UNIX_EPOCH_TIME + - " (default: 0)", - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg("-mocktime=", + "Replace actual time with " + UNIX_EPOCH_TIME + + " (default: 0)", + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-maxsigcachesize=", strprintf("Limit size of signature cache to MiB (default: %u)", DEFAULT_MAX_SIG_CACHE_SIZE), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( "-maxscriptcachesize=", strprintf("Limit size of script cache to MiB (default: %u)", DEFAULT_MAX_SCRIPT_CACHE_SIZE), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-maxtipage=", - strprintf("Maximum tip age in seconds to consider node in " - "initial block download (default: %u)", - DEFAULT_MAX_TIP_AGE), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - - gArgs.AddArg( + argsman.AddArg("-maxtipage=", + strprintf("Maximum tip age in seconds to consider node in " + "initial block download (default: %u)", + DEFAULT_MAX_TIP_AGE), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + + argsman.AddArg( "-printtoconsole", "Send trace/debug info to console instead of debug.log file (default: " "1 when no -daemon. To disable logging to file, set debuglogfile=0)", ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-printpriority", - strprintf("Log transaction priority and fee per kB when " - "mining blocks (default: %d)", - DEFAULT_PRINTPRIORITY), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg("-printpriority", + strprintf("Log transaction priority and fee per kB when " + "mining blocks (default: %d)", + DEFAULT_PRINTPRIORITY), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::DEBUG_TEST); + argsman.AddArg( "-shrinkdebugfile", "Shrink debug.log file on client startup (default: 1 when no -debug)", ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-uacomment=", "Append comment to the user agent string", - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + argsman.AddArg("-uacomment=", + "Append comment to the user agent string", + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - SetupChainParamsBaseOptions(); + SetupChainParamsBaseOptions(argsman); - gArgs.AddArg( + argsman.AddArg( "-acceptnonstdtxn", strprintf( "Relay and mine \"non-standard\" transactions (%sdefault: %u)", "testnet/regtest only; ", defaultChainParams->RequireStandard()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::NODE_RELAY); - gArgs.AddArg("-excessiveblocksize=", - strprintf("Do not accept blocks larger than this limit, in " - "bytes (default: %d)", - DEFAULT_MAX_BLOCK_SIZE), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::NODE_RELAY); - gArgs.AddArg( + argsman.AddArg("-excessiveblocksize=", + strprintf("Do not accept blocks larger than this limit, in " + "bytes (default: %d)", + DEFAULT_MAX_BLOCK_SIZE), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::NODE_RELAY); + argsman.AddArg( "-dustrelayfee=", strprintf("Fee rate (in %s/kB) used to define dust, the value of an " "output such that it will cost about 1/3 of its value in " @@ -1031,28 +1053,29 @@ ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::NODE_RELAY); - gArgs.AddArg("-bytespersigop", - strprintf("Equivalent bytes per sigop in transactions for " - "relay and mining (default: %u)", - DEFAULT_BYTES_PER_SIGOP), - ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); - gArgs.AddArg( + argsman.AddArg("-bytespersigop", + strprintf("Equivalent bytes per sigop in transactions for " + "relay and mining (default: %u)", + DEFAULT_BYTES_PER_SIGOP), + ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); + argsman.AddArg( "-datacarrier", strprintf("Relay and mine data carrier transactions (default: %d)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); - gArgs.AddArg("-datacarriersize", - strprintf("Maximum size of data in data carrier transactions " - "we relay and mine (default: %u)", - MAX_OP_RETURN_RELAY), - ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); - gArgs.AddArg( + argsman.AddArg( + "-datacarriersize", + strprintf("Maximum size of data in data carrier transactions " + "we relay and mine (default: %u)", + MAX_OP_RETURN_RELAY), + ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); + argsman.AddArg( "-minrelaytxfee=", strprintf("Fees (in %s/kB) smaller than this are rejected for " "relaying, mining and transaction creation (default: %s)", CURRENCY_UNIT, FormatMoney(DEFAULT_MIN_RELAY_TX_FEE_PER_KB)), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); - gArgs.AddArg( + argsman.AddArg( "-whitelistrelay", strprintf("Add 'relay' permission to whitelisted inbound peers " "with default permissions. This will accept relayed " @@ -1060,7 +1083,7 @@ "(default: %d)", DEFAULT_WHITELISTRELAY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); - gArgs.AddArg( + argsman.AddArg( "-whitelistforcerelay", strprintf("Add 'forcerelay' permission to whitelisted inbound peers" " with default permissions. This will relay transactions " @@ -1071,36 +1094,36 @@ // Not sure this really belongs here, but it will do for now. // FIXME: This doesn't work anyways. - gArgs.AddArg("-excessutxocharge=", - strprintf("Fees (in %s/kB) to charge per utxo created for " - "relaying, and mining (default: %s)", - CURRENCY_UNIT, FormatMoney(DEFAULT_UTXO_FEE)), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::NODE_RELAY); - - gArgs.AddArg("-blockmaxsize=", - strprintf("Set maximum block size in bytes (default: %d)", - DEFAULT_MAX_GENERATED_BLOCK_SIZE), - ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION); - gArgs.AddArg("-blockmintxfee=", - strprintf("Set lowest fee rate (in %s/kB) for transactions to " - "be included in block creation. (default: %s)", - CURRENCY_UNIT, - FormatMoney(DEFAULT_BLOCK_MIN_TX_FEE_PER_KB)), - ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION); - - gArgs.AddArg("-blockversion=", - "Override block version to test forking scenarios", - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::BLOCK_CREATION); - - gArgs.AddArg("-server", "Accept command line and JSON-RPC commands", - ArgsManager::ALLOW_ANY, OptionsCategory::RPC); - gArgs.AddArg("-rest", - strprintf("Accept public REST requests (default: %d)", - DEFAULT_REST_ENABLE), - ArgsManager::ALLOW_ANY, OptionsCategory::RPC); - gArgs.AddArg( + argsman.AddArg("-excessutxocharge=", + strprintf("Fees (in %s/kB) to charge per utxo created for " + "relaying, and mining (default: %s)", + CURRENCY_UNIT, FormatMoney(DEFAULT_UTXO_FEE)), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::NODE_RELAY); + + argsman.AddArg("-blockmaxsize=", + strprintf("Set maximum block size in bytes (default: %d)", + DEFAULT_MAX_GENERATED_BLOCK_SIZE), + ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION); + argsman.AddArg( + "-blockmintxfee=", + strprintf("Set lowest fee rate (in %s/kB) for transactions to " + "be included in block creation. (default: %s)", + CURRENCY_UNIT, FormatMoney(DEFAULT_BLOCK_MIN_TX_FEE_PER_KB)), + ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION); + + argsman.AddArg("-blockversion=", + "Override block version to test forking scenarios", + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::BLOCK_CREATION); + + argsman.AddArg("-server", "Accept command line and JSON-RPC commands", + ArgsManager::ALLOW_ANY, OptionsCategory::RPC); + argsman.AddArg("-rest", + strprintf("Accept public REST requests (default: %d)", + DEFAULT_REST_ENABLE), + ArgsManager::ALLOW_ANY, OptionsCategory::RPC); + argsman.AddArg( "-rpcbind=[:port]", "Bind to given address to listen for JSON-RPC connections. Do not " "expose the RPC server to untrusted networks such as the public " @@ -1111,17 +1134,18 @@ ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY | ArgsManager::SENSITIVE, OptionsCategory::RPC); - gArgs.AddArg("-rpccookiefile=", - "Location of the auth cookie. Relative paths will be prefixed " - "by a net-specific datadir location. (default: data dir)", - ArgsManager::ALLOW_ANY, OptionsCategory::RPC); - gArgs.AddArg("-rpcuser=", "Username for JSON-RPC connections", - ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, - OptionsCategory::RPC); - gArgs.AddArg("-rpcpassword=", "Password for JSON-RPC connections", - ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, - OptionsCategory::RPC); - gArgs.AddArg( + argsman.AddArg( + "-rpccookiefile=", + "Location of the auth cookie. Relative paths will be prefixed " + "by a net-specific datadir location. (default: data dir)", + ArgsManager::ALLOW_ANY, OptionsCategory::RPC); + argsman.AddArg("-rpcuser=", "Username for JSON-RPC connections", + ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, + OptionsCategory::RPC); + argsman.AddArg("-rpcpassword=", "Password for JSON-RPC connections", + ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, + OptionsCategory::RPC); + argsman.AddArg( "-rpcwhitelist=", "Set a whitelist to filter incoming RPC calls for a specific user. The " "field comes in the format: :,", "Username and HMAC-SHA-256 hashed password for JSON-RPC connections. " "The field comes in the format: :$. A " @@ -1146,73 +1170,74 @@ "connects normally using the rpcuser=/rpcpassword= " "pair of arguments. This option can be specified multiple times", ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, OptionsCategory::RPC); - gArgs.AddArg("-rpcport=", - strprintf("Listen for JSON-RPC connections on " - "(default: %u, testnet: %u, regtest: %u)", - defaultBaseParams->RPCPort(), - testnetBaseParams->RPCPort(), - regtestBaseParams->RPCPort()), - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::RPC); - gArgs.AddArg("-rpcallowip=", - "Allow JSON-RPC connections from specified source. Valid for " - " are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. " - "1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). " - "This option can be specified multiple times", - ArgsManager::ALLOW_ANY, OptionsCategory::RPC); - gArgs.AddArg( + argsman.AddArg("-rpcport=", + strprintf("Listen for JSON-RPC connections on " + "(default: %u, testnet: %u, regtest: %u)", + defaultBaseParams->RPCPort(), + testnetBaseParams->RPCPort(), + regtestBaseParams->RPCPort()), + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::RPC); + argsman.AddArg( + "-rpcallowip=", + "Allow JSON-RPC connections from specified source. Valid for " + " are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. " + "1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). " + "This option can be specified multiple times", + ArgsManager::ALLOW_ANY, OptionsCategory::RPC); + argsman.AddArg( "-rpcthreads=", strprintf( "Set the number of threads to service RPC calls (default: %d)", DEFAULT_HTTP_THREADS), ArgsManager::ALLOW_ANY, OptionsCategory::RPC); - gArgs.AddArg( + argsman.AddArg( "-rpccorsdomain=value", "Domain from which to accept cross origin requests (browser enforced)", ArgsManager::ALLOW_ANY, OptionsCategory::RPC); - gArgs.AddArg("-rpcworkqueue=", - strprintf("Set the depth of the work queue to service RPC " - "calls (default: %d)", - DEFAULT_HTTP_WORKQUEUE), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::RPC); - gArgs.AddArg("-rpcservertimeout=", - strprintf("Timeout during HTTP requests (default: %d)", - DEFAULT_HTTP_SERVER_TIMEOUT), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::RPC); + argsman.AddArg("-rpcworkqueue=", + strprintf("Set the depth of the work queue to service RPC " + "calls (default: %d)", + DEFAULT_HTTP_WORKQUEUE), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::RPC); + argsman.AddArg("-rpcservertimeout=", + strprintf("Timeout during HTTP requests (default: %d)", + DEFAULT_HTTP_SERVER_TIMEOUT), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::RPC); #if HAVE_DECL_DAEMON - gArgs.AddArg("-daemon", - "Run in the background as a daemon and accept commands", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-daemon", + "Run in the background as a daemon and accept commands", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); #else hidden_args.emplace_back("-daemon"); #endif // Avalanche options. - gArgs.AddArg( + argsman.AddArg( "-enableavalanche", strprintf("Enable avalanche (default: %u)", AVALANCHE_DEFAULT_ENABLED), ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); - gArgs.AddArg( + argsman.AddArg( "-avacooldown", strprintf("Mandatory cooldown between two avapoll (default: %u)", AVALANCHE_DEFAULT_COOLDOWN), ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); - gArgs.AddArg("-avaproof", - "Avalanche proof to be used by this node (default: none)", - ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); - gArgs.AddArg("-avamasterkey", - "Master key associated with the proof. If a proof is " - "required, this is mandatory.", - ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); - gArgs.AddArg("-avasessionkey", "Avalanche session key (default: random)", - ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); + argsman.AddArg("-avaproof", + "Avalanche proof to be used by this node (default: none)", + ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); + argsman.AddArg("-avamasterkey", + "Master key associated with the proof. If a proof is " + "required, this is mandatory.", + ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); + argsman.AddArg("-avasessionkey", "Avalanche session key (default: random)", + ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE); // Add the hidden options - gArgs.AddHiddenArgs(hidden_args); + argsman.AddHiddenArgs(hidden_args); } std::string LicenseInfo() { diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -433,39 +433,40 @@ return window->winId(); } -static void SetupUIArgs() { +static void SetupUIArgs(ArgsManager &argsman) { #if defined(ENABLE_WALLET) && defined(ENABLE_BIP70) - gArgs.AddArg("-allowselfsignedrootcertificates", - strprintf("Allow self signed root certificates (default: %d)", - DEFAULT_SELFSIGNED_ROOTCERTS), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::GUI); + argsman.AddArg( + "-allowselfsignedrootcertificates", + strprintf("Allow self signed root certificates (default: %d)", + DEFAULT_SELFSIGNED_ROOTCERTS), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::GUI); #endif - gArgs.AddArg("-choosedatadir", - strprintf("Choose data directory on startup (default: %d)", - DEFAULT_CHOOSE_DATADIR), - ArgsManager::ALLOW_ANY, OptionsCategory::GUI); - gArgs.AddArg("-lang=", - "Set language, for example \"de_DE\" (default: system locale)", - ArgsManager::ALLOW_ANY, OptionsCategory::GUI); - gArgs.AddArg("-min", "Start minimized", ArgsManager::ALLOW_ANY, - OptionsCategory::GUI); - gArgs.AddArg( + argsman.AddArg("-choosedatadir", + strprintf("Choose data directory on startup (default: %d)", + DEFAULT_CHOOSE_DATADIR), + ArgsManager::ALLOW_ANY, OptionsCategory::GUI); + argsman.AddArg( + "-lang=", + "Set language, for example \"de_DE\" (default: system locale)", + ArgsManager::ALLOW_ANY, OptionsCategory::GUI); + argsman.AddArg("-min", "Start minimized", ArgsManager::ALLOW_ANY, + OptionsCategory::GUI); + argsman.AddArg( "-rootcertificates=", "Set SSL root certificates for payment request (default: -system-)", ArgsManager::ALLOW_ANY, OptionsCategory::GUI); - gArgs.AddArg("-splash", - strprintf("Show splash screen on startup (default: %d)", - DEFAULT_SPLASHSCREEN), - ArgsManager::ALLOW_ANY, OptionsCategory::GUI); - gArgs.AddArg("-resetguisettings", "Reset all settings changed in the GUI", - ArgsManager::ALLOW_ANY, OptionsCategory::GUI); - gArgs.AddArg("-uiplatform", - strprintf("Select platform to customize UI for (one of " - "windows, macosx, other; default: %s)", - BitcoinGUI::DEFAULT_UIPLATFORM), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::GUI); + argsman.AddArg("-splash", + strprintf("Show splash screen on startup (default: %d)", + DEFAULT_SPLASHSCREEN), + ArgsManager::ALLOW_ANY, OptionsCategory::GUI); + argsman.AddArg("-resetguisettings", "Reset all settings changed in the GUI", + ArgsManager::ALLOW_ANY, OptionsCategory::GUI); + argsman.AddArg("-uiplatform", + strprintf("Select platform to customize UI for (one of " + "windows, macosx, other; default: %s)", + BitcoinGUI::DEFAULT_UIPLATFORM), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::GUI); } static void MigrateSettings() { @@ -571,7 +572,7 @@ /// error if there are problems parsing these // Command-line options take precedence: node->setupServerArgs(); - SetupUIArgs(); + SetupUIArgs(gArgs); std::string error; if (!node->parseParameters(argc, argv, error)) { node->initError( diff --git a/src/seeder/main.cpp b/src/seeder/main.cpp --- a/src/seeder/main.cpp +++ b/src/seeder/main.cpp @@ -63,7 +63,7 @@ ipv4_proxy(DEFAULT_IPV4_PROXY), ipv6_proxy(DEFAULT_IPV6_PROXY) {} int ParseCommandLine(int argc, char **argv) { - SetupSeederArgs(); + SetupSeederArgs(gArgs); std::string error; if (!gArgs.ParseParameters(argc, argv, error)) { tfm::format(std::cerr, "Error parsing command line arguments: %s\n", @@ -122,43 +122,43 @@ } private: - void SetupSeederArgs() { - SetupHelpOptions(gArgs); - gArgs.AddArg("-help-debug", - "Show all debugging options (usage: --help -help-debug)", - ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - - SetupChainParamsBaseOptions(); - - gArgs.AddArg("-version", "Print version and exit", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-host=", "Hostname of the DNS seed", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-ns=", "Hostname of the nameserver", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-mbox=", "E-Mail address reported in SOA records", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-threads=", - "Number of crawlers to run in parallel (default 96)", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-dnsthreads=", - "Number of DNS server threads (default 4)", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-port=", "UDP port to listen on (default 53)", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-onion=", "Tor proxy IP/Port", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-proxyipv4=", "IPV4 SOCKS5 proxy IP/Port", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-proxyipv6=", "IPV6 SOCKS5 proxy IP/Port", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-filter=", - "Allow these flag combinations as filters", - ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - gArgs.AddArg("-wipeban", "Wipe list of banned nodes", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - gArgs.AddArg("-wipeignore", "Wipe list of ignored nodes", - ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + void SetupSeederArgs(ArgsManager &argsman) { + SetupHelpOptions(argsman); + argsman.AddArg("-help-debug", + "Show all debugging options (usage: --help -help-debug)", + ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + + SetupChainParamsBaseOptions(argsman); + + argsman.AddArg("-version", "Print version and exit", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-host=", "Hostname of the DNS seed", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-ns=", "Hostname of the nameserver", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-mbox=", "E-Mail address reported in SOA records", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-threads=", + "Number of crawlers to run in parallel (default 96)", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-dnsthreads=", + "Number of DNS server threads (default 4)", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-port=", "UDP port to listen on (default 53)", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-onion=", "Tor proxy IP/Port", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-proxyipv4=", "IPV4 SOCKS5 proxy IP/Port", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-proxyipv6=", "IPV6 SOCKS5 proxy IP/Port", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-filter=", + "Allow these flag combinations as filters", + ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-wipeban", "Wipe list of banned nodes", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); + argsman.AddArg("-wipeignore", "Wipe list of ignored nodes", + ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); } }; diff --git a/src/wallet/init.cpp b/src/wallet/init.cpp --- a/src/wallet/init.cpp +++ b/src/wallet/init.cpp @@ -26,7 +26,7 @@ bool HasWalletSupport() const override { return true; } //! Return the wallets help message. - void AddWalletOptions() const override; + void AddWalletOptions(ArgsManager &argsman) const override; //! Wallets parameter interaction bool ParameterInteraction() const override; @@ -37,8 +37,8 @@ const WalletInitInterface &g_wallet_init_interface = WalletInit(); -void WalletInit::AddWalletOptions() const { - gArgs.AddArg( +void WalletInit::AddWalletOptions(ArgsManager &argsman) const { + argsman.AddArg( "-avoidpartialspends", strprintf("Group outputs by address, selecting all or none, instead of " "selecting on a per-output basis. Privacy is improved as an " @@ -50,16 +50,16 @@ DEFAULT_AVOIDPARTIALSPENDS), ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg("-disablewallet", - "Do not load the wallet and disable wallet RPC calls", - ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg("-fallbackfee=", - strprintf("A fee rate (in %s/kB) that will be used when fee " - "estimation has insufficient data. 0 to entirely " - "disable the fallbackfee feature. (default: %s)", - CURRENCY_UNIT, FormatMoney(DEFAULT_FALLBACK_FEE)), - ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg("-disablewallet", + "Do not load the wallet and disable wallet RPC calls", + ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); + argsman.AddArg("-fallbackfee=", + strprintf("A fee rate (in %s/kB) that will be used when fee " + "estimation has insufficient data. 0 to entirely " + "disable the fallbackfee feature. (default: %s)", + CURRENCY_UNIT, FormatMoney(DEFAULT_FALLBACK_FEE)), + ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); + argsman.AddArg( "-keypool=", strprintf("Set key pool size to (default: %u). Warning: Smaller " "sizes may increase the risk of losing funds when restoring " @@ -67,102 +67,105 @@ "original keypool have been used.", DEFAULT_KEYPOOL_SIZE), ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg( "-maxapsfee=", strprintf( "Spend up to this amount in additional (absolute) fees (in %s) if " "it allows the use of partial spend avoidance (default: %s)", CURRENCY_UNIT, FormatMoney(DEFAULT_MAX_AVOIDPARTIALSPEND_FEE)), ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg( "-maxtxfee=", strprintf("Maximum total fees (in %s) to use in a single wallet " "transaction or raw transaction; setting this too low may " "abort large transactions (default: %s)", CURRENCY_UNIT, FormatMoney(DEFAULT_TRANSACTION_MAXFEE)), ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); - gArgs.AddArg("-mintxfee=", - strprintf("Fees (in %s/kB) smaller than this are considered " - "zero fee for transaction creation (default: %s)", - CURRENCY_UNIT, - FormatMoney(DEFAULT_TRANSACTION_MINFEE_PER_KB)), - ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg("-mintxfee=", + strprintf("Fees (in %s/kB) smaller than this are considered " + "zero fee for transaction creation (default: %s)", + CURRENCY_UNIT, + FormatMoney(DEFAULT_TRANSACTION_MINFEE_PER_KB)), + ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); + argsman.AddArg( "-paytxfee=", strprintf( "Fee (in %s/kB) to add to transactions you send (default: %s)", CURRENCY_UNIT, FormatMoney(CFeeRate{DEFAULT_PAY_TX_FEE}.GetFeePerK())), ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg( "-rescan", "Rescan the block chain for missing wallet transactions on startup", ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg( "-spendzeroconfchange", strprintf( "Spend unconfirmed change when sending transactions (default: %d)", DEFAULT_SPEND_ZEROCONF_CHANGE), ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg("-wallet=", - "Specify wallet database path. Can be specified multiple " - "times to load multiple wallets. Path is interpreted relative " - "to if it is not absolute, and will be created if " - "it does not exist (as a directory containing a wallet.dat " - "file and log files). For backwards compatibility this will " - "also accept names of existing data files in .)", - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::WALLET); - gArgs.AddArg( + argsman.AddArg( + "-wallet=", + "Specify wallet database path. Can be specified multiple " + "times to load multiple wallets. Path is interpreted relative " + "to if it is not absolute, and will be created if " + "it does not exist (as a directory containing a wallet.dat " + "file and log files). For backwards compatibility this will " + "also accept names of existing data files in .)", + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::WALLET); + argsman.AddArg( "-walletbroadcast", strprintf("Make the wallet broadcast transactions (default: %d)", DEFAULT_WALLETBROADCAST), ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg("-walletdir=", - "Specify directory to hold wallets (default: " - "/wallets if it exists, otherwise )", - ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, - OptionsCategory::WALLET); + argsman.AddArg("-walletdir=", + "Specify directory to hold wallets (default: " + "/wallets if it exists, otherwise )", + ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, + OptionsCategory::WALLET); #if defined(HAVE_SYSTEM) - gArgs.AddArg("-walletnotify=", - "Execute command when a wallet transaction changes. %s in cmd " - "is replaced by TxID and %w is replaced by wallet name. %w is " - "not currently implemented on windows. On systems where %w is " - "supported, it should NOT be quoted because this would break " - "shell escaping used to invoke the command.", - ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); + argsman.AddArg( + "-walletnotify=", + "Execute command when a wallet transaction changes. %s in cmd " + "is replaced by TxID and %w is replaced by wallet name. %w is " + "not currently implemented on windows. On systems where %w is " + "supported, it should NOT be quoted because this would break " + "shell escaping used to invoke the command.", + ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); #endif - gArgs.AddArg( + argsman.AddArg( "-zapwallettxes=", "Delete all wallet transactions and only recover those parts of the " "blockchain through -rescan on startup (1 = keep tx meta data e.g. " "payment request information, 2 = drop tx meta data)", ArgsManager::ALLOW_ANY, OptionsCategory::WALLET); - gArgs.AddArg("-dblogsize=", - strprintf("Flush wallet database activity from memory to disk " - "log every megabytes (default: %u)", - DEFAULT_WALLET_DBLOGSIZE), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::WALLET_DEBUG_TEST); - gArgs.AddArg( + argsman.AddArg( + "-dblogsize=", + strprintf("Flush wallet database activity from memory to disk " + "log every megabytes (default: %u)", + DEFAULT_WALLET_DBLOGSIZE), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::WALLET_DEBUG_TEST); + argsman.AddArg( "-flushwallet", strprintf("Run a thread to flush wallet periodically (default: %d)", DEFAULT_FLUSHWALLET), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST); - gArgs.AddArg("-privdb", - strprintf("Sets the DB_PRIVATE flag in the wallet db " - "environment (default: %d)", - DEFAULT_WALLET_PRIVDB), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::WALLET_DEBUG_TEST); - gArgs.AddArg("-walletrejectlongchains", - strprintf("Wallet will not create transactions that violate " - "mempool chain limits (default: %d)", - DEFAULT_WALLET_REJECT_LONG_CHAINS), - ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, - OptionsCategory::WALLET_DEBUG_TEST); + argsman.AddArg("-privdb", + strprintf("Sets the DB_PRIVATE flag in the wallet db " + "environment (default: %d)", + DEFAULT_WALLET_PRIVDB), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::WALLET_DEBUG_TEST); + argsman.AddArg("-walletrejectlongchains", + strprintf("Wallet will not create transactions that violate " + "mempool chain limits (default: %d)", + DEFAULT_WALLET_REJECT_LONG_CHAINS), + ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, + OptionsCategory::WALLET_DEBUG_TEST); } bool WalletInit::ParameterInteraction() const { diff --git a/src/walletinitinterface.h b/src/walletinitinterface.h --- a/src/walletinitinterface.h +++ b/src/walletinitinterface.h @@ -5,6 +5,8 @@ #ifndef BITCOIN_WALLETINITINTERFACE_H #define BITCOIN_WALLETINITINTERFACE_H +class ArgsManager; + struct NodeContext; class WalletInitInterface { @@ -12,7 +14,7 @@ /** Is the wallet component enabled */ virtual bool HasWalletSupport() const = 0; /** Get wallet help string */ - virtual void AddWalletOptions() const = 0; + virtual void AddWalletOptions(ArgsManager &argsman) const = 0; /** Check wallet parameter interaction */ virtual bool ParameterInteraction() const = 0; /** Add wallets that should be opened to list of chain clients. */