diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -74,11 +74,6 @@ // If Qt is used, parameters/bitcoin.conf are parsed in qt/bitcoin.cpp's // main() SetupServerArgs(); -#if HAVE_DECL_DAEMON - gArgs.AddArg("-daemon", - "Run in the background as a daemon and accept commands", false, - OptionsCategory::OPTIONS); -#endif std::string error; if (!gArgs.ParseParameters(argc, argv, error)) { fprintf(stderr, "Error parsing command line arguments: %s\n", diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -81,7 +81,7 @@ #if !(ENABLE_WALLET) class DummyWalletInit : public WalletInitInterface { public: - void AddWalletOptions() const override {} + void AddWalletOptions() const override; bool ParameterInteraction() const override { return true; } void RegisterRPC(CRPCTable &) const override {} bool Verify(const CChainParams &chainParams) const override { return true; } @@ -95,6 +95,18 @@ void Close() const override {} }; +void DummyWalletInit::AddWalletOptions() const { + std::vector opts = { + "-avoidpartialspends", "-disablewallet", "-fallbackfee=", + "-keypool=", "-maxtxfee=", "-mintxfee=", "-paytxfee=", + "-rescan", "-salvagewallet", "-spendzeroconfchange", "-upgradewallet", + "-wallet=", "-walletbroadcast", "-walletdir=", + "-walletnotify=", "-zapwallettxes=", + // Wallet debug options + "-dblogsize=", "-flushwallet", "-privdb", "-walletrejectlongchains"}; + gArgs.AddHiddenArgs(opts); +} + const WalletInitInterface &g_wallet_init_interface = DummyWalletInit(); #endif @@ -334,6 +346,19 @@ const auto testnetChainParams = CreateChainParams(CBaseChainParams::TESTNET); + // Hidden Options + std::vector hidden_args = { + "-rpcssl", "-benchmark", "-h", "-help", "-socks", "-tor", "-debugnet", + "-whitelistalwaysrelay", "-blockminsize", "-dbcrashratio", + "-forcecompactdb", "-usehd", "-parkdeepreorg", + "-replayprotectionactivationtime", + // GUI args. These will be overwritten by SetupUIArgs for the GUI + "-allowselfsignedrootcertificates", "-choosedatadir", "-lang=", + "-min", "-resetguisettings", "-rootcertificates=", "-splash", + "-uiplatform", + // TODO remove after the May 2020 upgrade + "-phononactivationtime"}; + // Set all of the args and their help // When adding new options to the categories, please keep and ensure // alphabetical ordering. Do not translate _(...) -help-debug options, Many @@ -463,6 +488,8 @@ "by a net-specific datadir location. (default: %s)", BITCOIN_PID_FILENAME), false, OptionsCategory::OPTIONS); +#else + hidden_args.emplace_back("-pid"); #endif gArgs.AddArg( "-prune=", @@ -492,6 +519,8 @@ "Create new files with system default permissions, instead of umask " "077 (only effective with disabled wallet functionality)", false, OptionsCategory::OPTIONS); +#else + hidden_args.emplace_back("-sysperms"); #endif gArgs.AddArg("-txindex", strprintf("Maintain a full transaction index, used by the " @@ -644,6 +673,8 @@ strprintf("Use UPnP to map the listening port (default: %u)", 0), false, OptionsCategory::CONNECTION); #endif +#else + hidden_args.emplace_back("-upnp"); #endif gArgs.AddArg("-whitebind=", "Bind to given address and whitelist peers connecting to it. " @@ -679,6 +710,11 @@ gArgs.AddArg("-zmqpubrawtx=
", "Enable publish raw transaction in
", false, OptionsCategory::ZMQ); +#else + hidden_args.emplace_back("-zmqpubhashblock=
"); + hidden_args.emplace_back("-zmqpubhashtx=
"); + hidden_args.emplace_back("-zmqpubrawblock=
"); + hidden_args.emplace_back("-zmqpubrawtx=
"); #endif gArgs.AddArg( @@ -969,25 +1005,16 @@ DEFAULT_HTTP_SERVER_TIMEOUT), true, OptionsCategory::RPC); - // Hidden options - gArgs.AddArg("-rpcssl", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-benchmark", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-h", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-help", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-socks", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-tor", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-debugnet", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-whitelistalwaysrelay", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-blockminsize", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-dbcrashratio", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-forcecompactdb", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-usehd", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-parkdeepreorg", "", false, OptionsCategory::HIDDEN); - gArgs.AddArg("-replayprotectionactivationtime", "", false, - OptionsCategory::HIDDEN); - - // TODO remove after the May 2020 upgrade - gArgs.AddArg("-phononactivationtime", "", false, OptionsCategory::HIDDEN); +#if HAVE_DECL_DAEMON + gArgs.AddArg("-daemon", + _("Run in the background as a daemon and accept commands"), + false, OptionsCategory::OPTIONS); +#else + hidden_args.emplace_back("-daemon"); +#endif + + // Add the hidden options + gArgs.AddHiddenArgs(hidden_args); } std::string LicenseInfo() { diff --git a/src/util/system.h b/src/util/system.h --- a/src/util/system.h +++ b/src/util/system.h @@ -275,6 +275,11 @@ // Remove an arg setting, used only in testing void ClearArg(const std::string &strArg); + /** + * Add many hidden arguments + */ + void AddHiddenArgs(const std::vector &args); + /** * Clear available arguments */ diff --git a/src/util/system.cpp b/src/util/system.cpp --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -623,6 +623,12 @@ assert(ret.second); } +void ArgsManager::AddHiddenArgs(const std::vector &names) { + for (const std::string &name : names) { + AddArg(name, "", false, OptionsCategory::HIDDEN); + } +} + void ArgsManager::ClearArg(const std::string &strArg) { LOCK(cs_args); m_override_args.erase(strArg); diff --git a/test/lint/check-doc.py b/test/lint/check-doc.py --- a/test/lint/check-doc.py +++ b/test/lint/check-doc.py @@ -30,6 +30,22 @@ '-zmqpubrawblock', '-zmqpubrawtx']) +# list false positive undocumented arguments +SET_FALSE_POSITIVE_UNDOCUMENTED = set(['-benchmark', + '-blockminsize', + '-dbcrashratio', + '-debugnet', + '-forcecompactdb', + '-parkdeepreorg', + # Remove after May 2020 upgrade + '-phononactivationtime', + '-replayprotectionactivationtime', + '-rpcssl', + '-socks', + '-tor', + '-usehd', + '-whitelistalwaysrelay']) + def main(): top_level = check_output(TOP_LEVEL, shell=True, @@ -54,6 +70,7 @@ args_docd |= set(re.findall(re.compile(REGEX_DOC), content)) args_used |= SET_FALSE_POSITIVE_UNKNOWNS + args_docd |= SET_FALSE_POSITIVE_UNDOCUMENTED args_need_doc = args_used - args_docd args_unknown = args_docd - args_used