From 915068945fa2939cee951045ab9f72c10516b215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Haf?= Date: Fri, 28 Mar 2025 15:39:52 +0100 Subject: [PATCH] Policy: warn if `-minrelaytxfee` is too high --- src/node/mempool_args.cpp | 5 ++++- src/util/moneystr.cpp | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/node/mempool_args.cpp b/src/node/mempool_args.cpp index 52c16227a0..194b17bcb7 100644 --- a/src/node/mempool_args.cpp +++ b/src/node/mempool_args.cpp @@ -110,7 +110,10 @@ util::Result ApplyArgsManOptions(const ArgsManager& argsman, const CChainP } if (argsman.IsArgSet("-minrelaytxfee")) { - if (std::optional min_relay_feerate = ParseMoney(argsman.GetArg("-minrelaytxfee", ""))) { + std::optional min_relay_feerate = ParseMoney(argsman.GetArg("-minrelaytxfee", "")); + if (min_relay_feerate >= 100000000 && (std::string(1, std::string(argsman.GetArg("-minrelaytxfee", "")).at(0)) != "f")) { + return util::Error{_("-minrelaytxfee is very high! Prefix with f to force this fee rate")}; + } else if (min_relay_feerate) { // High fee check is done afterward in CWallet::Create() mempool_opts.min_relay_feerate = CFeeRate{min_relay_feerate.value()}; } else { diff --git a/src/util/moneystr.cpp b/src/util/moneystr.cpp index 1ed3b2ac96..0e32fdeb96 100644 --- a/src/util/moneystr.cpp +++ b/src/util/moneystr.cpp @@ -55,7 +55,8 @@ std::optional ParseMoney(const std::string& money_string) std::string strWhole; int64_t nUnits = 0; const char* p = str.c_str(); - for (; *p; p++) + int position =0; + for (; *p; p++, position++) { if (*p == '.') { @@ -70,9 +71,11 @@ std::optional ParseMoney(const std::string& money_string) } if (IsSpace(*p)) return std::nullopt; - if (!IsDigit(*p)) - return std::nullopt; + if (!(position == 0 && *p == 'f')) { + if (!IsDigit(*p)) + return std::nullopt; strWhole.insert(strWhole.end(), *p); + } } if (*p) { return std::nullopt;