refactor: Remove redundant call to IsArgSet

Checking for IsArgSet before calling GetArg while providing an arbitrary
default value as fallback is both confusing and fragile.

It is confusing, because the provided fallback is dead code. So it would
be better to just call GetArg without a fallback.

Even better would be to provide the true fallback value and sanitize it
as if it were user-input, but this can be done in a follow-up.

Removing the redundant call to IsArgSet will have to be done either way,
so do it now.
This commit is contained in:
MarcoFalke 2025-02-18 15:43:11 +01:00
parent fa29842c1f
commit fa2b529f92
No known key found for this signature in database
4 changed files with 39 additions and 40 deletions

View File

@ -1038,9 +1038,9 @@ bool AppInitParameterInteraction(const ArgsManager& args)
// Sanity check argument for min fee for including tx in block // Sanity check argument for min fee for including tx in block
// TODO: Harmonize which arguments need sanity checking and where that happens // TODO: Harmonize which arguments need sanity checking and where that happens
if (args.IsArgSet("-blockmintxfee")) { if (const auto arg{args.GetArg("-blockmintxfee")}) {
if (!ParseMoney(args.GetArg("-blockmintxfee", ""))) { if (!ParseMoney(*arg)) {
return InitError(AmountErrMsg("blockmintxfee", args.GetArg("-blockmintxfee", ""))); return InitError(AmountErrMsg("blockmintxfee", *arg));
} }
} }
@ -1183,11 +1183,10 @@ bool CheckHostPortOptions(const ArgsManager& args) {
"-port", "-port",
"-rpcport", "-rpcport",
}) { }) {
if (args.IsArgSet(port_option)) { if (const auto port{args.GetArg(port_option)}) {
const std::string port = args.GetArg(port_option, "");
uint16_t n; uint16_t n;
if (!ParseUInt16(port, &n) || n == 0) { if (!ParseUInt16(*port, &n) || n == 0) {
return InitError(InvalidPortErrMsg(port_option, port)); return InitError(InvalidPortErrMsg(port_option, *port));
} }
} }
} }

View File

@ -48,20 +48,20 @@ util::Result<void> ApplyArgsManOptions(const ArgsManager& argsman, const CChainP
// incremental relay fee sets the minimum feerate increase necessary for replacement in the mempool // incremental relay fee sets the minimum feerate increase necessary for replacement in the mempool
// and the amount the mempool min fee increases above the feerate of txs evicted due to mempool limiting. // and the amount the mempool min fee increases above the feerate of txs evicted due to mempool limiting.
if (argsman.IsArgSet("-incrementalrelayfee")) { if (const auto arg{argsman.GetArg("-incrementalrelayfee")}) {
if (std::optional<CAmount> inc_relay_fee = ParseMoney(argsman.GetArg("-incrementalrelayfee", ""))) { if (std::optional<CAmount> inc_relay_fee = ParseMoney(*arg)) {
mempool_opts.incremental_relay_feerate = CFeeRate{inc_relay_fee.value()}; mempool_opts.incremental_relay_feerate = CFeeRate{inc_relay_fee.value()};
} else { } else {
return util::Error{AmountErrMsg("incrementalrelayfee", argsman.GetArg("-incrementalrelayfee", ""))}; return util::Error{AmountErrMsg("incrementalrelayfee", *arg)};
} }
} }
if (argsman.IsArgSet("-minrelaytxfee")) { if (const auto arg{argsman.GetArg("-minrelaytxfee")}) {
if (std::optional<CAmount> min_relay_feerate = ParseMoney(argsman.GetArg("-minrelaytxfee", ""))) { if (std::optional<CAmount> min_relay_feerate = ParseMoney(*arg)) {
// High fee check is done afterward in CWallet::Create() // High fee check is done afterward in CWallet::Create()
mempool_opts.min_relay_feerate = CFeeRate{min_relay_feerate.value()}; mempool_opts.min_relay_feerate = CFeeRate{min_relay_feerate.value()};
} else { } else {
return util::Error{AmountErrMsg("minrelaytxfee", argsman.GetArg("-minrelaytxfee", ""))}; return util::Error{AmountErrMsg("minrelaytxfee", *arg)};
} }
} else if (mempool_opts.incremental_relay_feerate > mempool_opts.min_relay_feerate) { } else if (mempool_opts.incremental_relay_feerate > mempool_opts.min_relay_feerate) {
// Allow only setting incremental fee to control both // Allow only setting incremental fee to control both
@ -71,11 +71,11 @@ util::Result<void> ApplyArgsManOptions(const ArgsManager& argsman, const CChainP
// Feerate used to define dust. Shouldn't be changed lightly as old // Feerate used to define dust. Shouldn't be changed lightly as old
// implementations may inadvertently create non-standard transactions // implementations may inadvertently create non-standard transactions
if (argsman.IsArgSet("-dustrelayfee")) { if (const auto arg{argsman.GetArg("-dustrelayfee")}) {
if (std::optional<CAmount> parsed = ParseMoney(argsman.GetArg("-dustrelayfee", ""))) { if (std::optional<CAmount> parsed = ParseMoney(*arg)) {
mempool_opts.dust_relay_feerate = CFeeRate{parsed.value()}; mempool_opts.dust_relay_feerate = CFeeRate{parsed.value()};
} else { } else {
return util::Error{AmountErrMsg("dustrelayfee", argsman.GetArg("-dustrelayfee", ""))}; return util::Error{AmountErrMsg("dustrelayfee", *arg)};
} }
} }

View File

@ -140,9 +140,9 @@ Intro::Intro(QWidget *parent, int64_t blockchain_size_gb, int64_t chain_state_si
const int min_prune_target_GB = std::ceil(MIN_DISK_SPACE_FOR_BLOCK_FILES / 1e9); const int min_prune_target_GB = std::ceil(MIN_DISK_SPACE_FOR_BLOCK_FILES / 1e9);
ui->pruneGB->setRange(min_prune_target_GB, std::numeric_limits<int>::max()); ui->pruneGB->setRange(min_prune_target_GB, std::numeric_limits<int>::max());
if (gArgs.IsArgSet("-prune")) { if (const auto arg{gArgs.GetIntArg("-prune")}) {
m_prune_checkbox_is_default = false; m_prune_checkbox_is_default = false;
ui->prune->setChecked(gArgs.GetIntArg("-prune", 0) >= 1); ui->prune->setChecked(*arg >= 1);
ui->prune->setEnabled(false); ui->prune->setEnabled(false);
} }
ui->pruneGB->setValue(m_prune_target_gb); ui->pruneGB->setValue(m_prune_target_gb);

View File

@ -3124,10 +3124,10 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
walletInstance->m_default_change_type = parsed.value(); walletInstance->m_default_change_type = parsed.value();
} }
if (args.IsArgSet("-mintxfee")) { if (const auto arg{args.GetArg("-mintxfee")}) {
std::optional<CAmount> min_tx_fee = ParseMoney(args.GetArg("-mintxfee", "")); std::optional<CAmount> min_tx_fee = ParseMoney(*arg);
if (!min_tx_fee) { if (!min_tx_fee) {
error = AmountErrMsg("mintxfee", args.GetArg("-mintxfee", "")); error = AmountErrMsg("mintxfee", *arg);
return nullptr; return nullptr;
} else if (min_tx_fee.value() > HIGH_TX_FEE_PER_KB) { } else if (min_tx_fee.value() > HIGH_TX_FEE_PER_KB) {
warnings.push_back(AmountHighWarn("-mintxfee") + Untranslated(" ") + warnings.push_back(AmountHighWarn("-mintxfee") + Untranslated(" ") +
@ -3137,8 +3137,8 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
walletInstance->m_min_fee = CFeeRate{min_tx_fee.value()}; walletInstance->m_min_fee = CFeeRate{min_tx_fee.value()};
} }
if (args.IsArgSet("-maxapsfee")) { if (const auto arg{args.GetArg("-maxapsfee")}) {
const std::string max_aps_fee{args.GetArg("-maxapsfee", "")}; const std::string& max_aps_fee{*arg};
if (max_aps_fee == "-1") { if (max_aps_fee == "-1") {
walletInstance->m_max_aps_fee = -1; walletInstance->m_max_aps_fee = -1;
} else if (std::optional<CAmount> max_fee = ParseMoney(max_aps_fee)) { } else if (std::optional<CAmount> max_fee = ParseMoney(max_aps_fee)) {
@ -3153,10 +3153,10 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
} }
} }
if (args.IsArgSet("-fallbackfee")) { if (const auto arg{args.GetArg("-fallbackfee")}) {
std::optional<CAmount> fallback_fee = ParseMoney(args.GetArg("-fallbackfee", "")); std::optional<CAmount> fallback_fee = ParseMoney(*arg);
if (!fallback_fee) { if (!fallback_fee) {
error = strprintf(_("Invalid amount for %s=<amount>: '%s'"), "-fallbackfee", args.GetArg("-fallbackfee", "")); error = strprintf(_("Invalid amount for %s=<amount>: '%s'"), "-fallbackfee", *arg);
return nullptr; return nullptr;
} else if (fallback_fee.value() > HIGH_TX_FEE_PER_KB) { } else if (fallback_fee.value() > HIGH_TX_FEE_PER_KB) {
warnings.push_back(AmountHighWarn("-fallbackfee") + Untranslated(" ") + warnings.push_back(AmountHighWarn("-fallbackfee") + Untranslated(" ") +
@ -3168,10 +3168,10 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
// Disable fallback fee in case value was set to 0, enable if non-null value // Disable fallback fee in case value was set to 0, enable if non-null value
walletInstance->m_allow_fallback_fee = walletInstance->m_fallback_fee.GetFeePerK() != 0; walletInstance->m_allow_fallback_fee = walletInstance->m_fallback_fee.GetFeePerK() != 0;
if (args.IsArgSet("-discardfee")) { if (const auto arg{args.GetArg("-discardfee")}) {
std::optional<CAmount> discard_fee = ParseMoney(args.GetArg("-discardfee", "")); std::optional<CAmount> discard_fee = ParseMoney(*arg);
if (!discard_fee) { if (!discard_fee) {
error = strprintf(_("Invalid amount for %s=<amount>: '%s'"), "-discardfee", args.GetArg("-discardfee", "")); error = strprintf(_("Invalid amount for %s=<amount>: '%s'"), "-discardfee", *arg);
return nullptr; return nullptr;
} else if (discard_fee.value() > HIGH_TX_FEE_PER_KB) { } else if (discard_fee.value() > HIGH_TX_FEE_PER_KB) {
warnings.push_back(AmountHighWarn("-discardfee") + Untranslated(" ") + warnings.push_back(AmountHighWarn("-discardfee") + Untranslated(" ") +
@ -3180,12 +3180,12 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
walletInstance->m_discard_rate = CFeeRate{discard_fee.value()}; walletInstance->m_discard_rate = CFeeRate{discard_fee.value()};
} }
if (args.IsArgSet("-paytxfee")) { if (const auto arg{args.GetArg("-paytxfee")}) {
warnings.push_back(_("-paytxfee is deprecated and will be fully removed in v31.0.")); warnings.push_back(_("-paytxfee is deprecated and will be fully removed in v31.0."));
std::optional<CAmount> pay_tx_fee = ParseMoney(args.GetArg("-paytxfee", "")); std::optional<CAmount> pay_tx_fee = ParseMoney(*arg);
if (!pay_tx_fee) { if (!pay_tx_fee) {
error = AmountErrMsg("paytxfee", args.GetArg("-paytxfee", "")); error = AmountErrMsg("paytxfee", *arg);
return nullptr; return nullptr;
} else if (pay_tx_fee.value() > HIGH_TX_FEE_PER_KB) { } else if (pay_tx_fee.value() > HIGH_TX_FEE_PER_KB) {
warnings.push_back(AmountHighWarn("-paytxfee") + Untranslated(" ") + warnings.push_back(AmountHighWarn("-paytxfee") + Untranslated(" ") +
@ -3196,15 +3196,15 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
if (chain && walletInstance->m_pay_tx_fee < chain->relayMinFee()) { if (chain && walletInstance->m_pay_tx_fee < chain->relayMinFee()) {
error = strprintf(_("Invalid amount for %s=<amount>: '%s' (must be at least %s)"), error = strprintf(_("Invalid amount for %s=<amount>: '%s' (must be at least %s)"),
"-paytxfee", args.GetArg("-paytxfee", ""), chain->relayMinFee().ToString()); "-paytxfee", *arg, chain->relayMinFee().ToString());
return nullptr; return nullptr;
} }
} }
if (args.IsArgSet("-maxtxfee")) { if (const auto arg{args.GetArg("-maxtxfee")}) {
std::optional<CAmount> max_fee = ParseMoney(args.GetArg("-maxtxfee", "")); std::optional<CAmount> max_fee = ParseMoney(*arg);
if (!max_fee) { if (!max_fee) {
error = AmountErrMsg("maxtxfee", args.GetArg("-maxtxfee", "")); error = AmountErrMsg("maxtxfee", *arg);
return nullptr; return nullptr;
} else if (max_fee.value() > HIGH_MAX_TX_FEE) { } else if (max_fee.value() > HIGH_MAX_TX_FEE) {
warnings.push_back(strprintf(_("%s is set very high! Fees this large could be paid on a single transaction."), "-maxtxfee")); warnings.push_back(strprintf(_("%s is set very high! Fees this large could be paid on a single transaction."), "-maxtxfee"));
@ -3212,18 +3212,18 @@ std::shared_ptr<CWallet> CWallet::Create(WalletContext& context, const std::stri
if (chain && CFeeRate{max_fee.value(), 1000} < chain->relayMinFee()) { if (chain && CFeeRate{max_fee.value(), 1000} < chain->relayMinFee()) {
error = strprintf(_("Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)"), error = strprintf(_("Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions)"),
"-maxtxfee", args.GetArg("-maxtxfee", ""), chain->relayMinFee().ToString()); "-maxtxfee", *arg, chain->relayMinFee().ToString());
return nullptr; return nullptr;
} }
walletInstance->m_default_max_tx_fee = max_fee.value(); walletInstance->m_default_max_tx_fee = max_fee.value();
} }
if (args.IsArgSet("-consolidatefeerate")) { if (const auto arg{args.GetArg("-consolidatefeerate")}) {
if (std::optional<CAmount> consolidate_feerate = ParseMoney(args.GetArg("-consolidatefeerate", ""))) { if (std::optional<CAmount> consolidate_feerate = ParseMoney(*arg)) {
walletInstance->m_consolidate_feerate = CFeeRate(*consolidate_feerate); walletInstance->m_consolidate_feerate = CFeeRate(*consolidate_feerate);
} else { } else {
error = AmountErrMsg("consolidatefeerate", args.GetArg("-consolidatefeerate", "")); error = AmountErrMsg("consolidatefeerate", *arg);
return nullptr; return nullptr;
} }
} }