diff options
-rw-r--r-- | src/init.cpp | 10 | ||||
-rw-r--r-- | src/kernel/mempool_options.h | 1 | ||||
-rw-r--r-- | src/mempool_args.cpp | 10 | ||||
-rw-r--r-- | src/node/interfaces.cpp | 12 | ||||
-rw-r--r-- | src/policy/settings.cpp | 2 | ||||
-rw-r--r-- | src/policy/settings.h | 2 | ||||
-rw-r--r-- | src/txmempool.cpp | 1 | ||||
-rw-r--r-- | src/txmempool.h | 1 | ||||
-rw-r--r-- | src/validation.cpp | 2 | ||||
-rw-r--r-- | src/wallet/fees.cpp | 2 |
10 files changed, 25 insertions, 18 deletions
diff --git a/src/init.cpp b/src/init.cpp index b358a59dc6..a0e2b7fcfd 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -971,16 +971,6 @@ bool AppInitParameterInteraction(const ArgsManager& args, bool use_syscall_sandb } } - // Feerate used to define dust. Shouldn't be changed lightly as old - // implementations may inadvertently create non-standard transactions - if (args.IsArgSet("-dustrelayfee")) { - if (std::optional<CAmount> parsed = ParseMoney(args.GetArg("-dustrelayfee", ""))) { - dustRelayFee = CFeeRate{parsed.value()}; - } else { - return InitError(AmountErrMsg("dustrelayfee", args.GetArg("-dustrelayfee", ""))); - } - } - nBytesPerSigOp = args.GetIntArg("-bytespersigop", nBytesPerSigOp); if (!g_wallet_init_interface.ParameterInteraction()) return false; diff --git a/src/kernel/mempool_options.h b/src/kernel/mempool_options.h index 3e9be06a77..384532ae39 100644 --- a/src/kernel/mempool_options.h +++ b/src/kernel/mempool_options.h @@ -39,6 +39,7 @@ struct MemPoolOptions { CFeeRate incremental_relay_feerate{DEFAULT_INCREMENTAL_RELAY_FEE}; /** A fee rate smaller than this is considered zero fee (for relaying, mining and transaction creation) */ CFeeRate min_relay_feerate{DEFAULT_MIN_RELAY_TX_FEE}; + CFeeRate dust_relay_feerate{DUST_RELAY_TX_FEE}; bool require_standard{true}; bool full_rbf{DEFAULT_MEMPOOL_FULL_RBF}; MemPoolLimits limits{}; diff --git a/src/mempool_args.cpp b/src/mempool_args.cpp index f67eb993c8..745d7b0316 100644 --- a/src/mempool_args.cpp +++ b/src/mempool_args.cpp @@ -67,6 +67,16 @@ std::optional<bilingual_str> ApplyArgsManOptions(const ArgsManager& argsman, con LogPrintf("Increasing minrelaytxfee to %s to match incrementalrelayfee\n", mempool_opts.min_relay_feerate.ToString()); } + // Feerate used to define dust. Shouldn't be changed lightly as old + // implementations may inadvertently create non-standard transactions + if (argsman.IsArgSet("-dustrelayfee")) { + if (std::optional<CAmount> parsed = ParseMoney(argsman.GetArg("-dustrelayfee", ""))) { + mempool_opts.dust_relay_feerate = CFeeRate{parsed.value()}; + } else { + return AmountErrMsg("dustrelayfee", argsman.GetArg("-dustrelayfee", "")); + } + } + mempool_opts.require_standard = !argsman.GetBoolArg("-acceptnonstdtxn", !chainparams.RequireStandard()); if (!chainparams.IsTestChain() && !mempool_opts.require_standard) { return strprintf(Untranslated("acceptnonstdtxn is not currently supported for %s chain"), chainparams.NetworkIDString()); diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp index 597b473d4f..2c845d0127 100644 --- a/src/node/interfaces.cpp +++ b/src/node/interfaces.cpp @@ -301,7 +301,11 @@ public: } } bool getNetworkActive() override { return m_context->connman && m_context->connman->GetNetworkActive(); } - CFeeRate getDustRelayFee() override { return ::dustRelayFee; } + CFeeRate getDustRelayFee() override + { + if (!m_context->mempool) return CFeeRate{DUST_RELAY_TX_FEE}; + return m_context->mempool->m_dust_relay_feerate; + } UniValue executeRpc(const std::string& command, const UniValue& params, const std::string& uri) override { JSONRPCRequest req; @@ -686,7 +690,11 @@ public: if (!m_node.mempool) return CFeeRate{DEFAULT_INCREMENTAL_RELAY_FEE}; return m_node.mempool->m_incremental_relay_feerate; } - CFeeRate relayDustFee() override { return ::dustRelayFee; } + CFeeRate relayDustFee() override + { + if (!m_node.mempool) return CFeeRate{DUST_RELAY_TX_FEE}; + return m_node.mempool->m_dust_relay_feerate; + } bool havePruned() override { LOCK(::cs_main); diff --git a/src/policy/settings.cpp b/src/policy/settings.cpp index a4177f7184..6b15d31d68 100644 --- a/src/policy/settings.cpp +++ b/src/policy/settings.cpp @@ -5,9 +5,7 @@ #include <policy/settings.h> -#include <policy/feerate.h> #include <policy/policy.h> bool fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG; -CFeeRate dustRelayFee = CFeeRate(DUST_RELAY_TX_FEE); unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP; diff --git a/src/policy/settings.h b/src/policy/settings.h index 0f82969f7e..df0bfff394 100644 --- a/src/policy/settings.h +++ b/src/policy/settings.h @@ -6,14 +6,12 @@ #ifndef BITCOIN_POLICY_SETTINGS_H #define BITCOIN_POLICY_SETTINGS_H -#include <policy/feerate.h> #include <policy/policy.h> #include <cstdint> class CTransaction; -extern CFeeRate dustRelayFee; extern unsigned int nBytesPerSigOp; extern bool fIsBareMultisigStd; diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 5a47700bc8..4745b99620 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -460,6 +460,7 @@ CTxMemPool::CTxMemPool(const Options& opts) m_expiry{opts.expiry}, m_incremental_relay_feerate{opts.incremental_relay_feerate}, m_min_relay_feerate{opts.min_relay_feerate}, + m_dust_relay_feerate{opts.dust_relay_feerate}, m_require_standard{opts.require_standard}, m_full_rbf{opts.full_rbf}, m_limits{opts.limits} diff --git a/src/txmempool.h b/src/txmempool.h index af5e95a3ec..84e5e9ed48 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -570,6 +570,7 @@ public: const std::chrono::seconds m_expiry; const CFeeRate m_incremental_relay_feerate; const CFeeRate m_min_relay_feerate; + const CFeeRate m_dust_relay_feerate; const bool m_require_standard; const bool m_full_rbf; diff --git a/src/validation.cpp b/src/validation.cpp index 0840e3fc42..22913b763b 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -700,7 +700,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) // Rather not work on nonstandard transactions (unless -testnet/-regtest) std::string reason; - if (m_pool.m_require_standard && !IsStandardTx(tx, ::fIsBareMultisigStd, ::dustRelayFee, reason)) { + if (m_pool.m_require_standard && !IsStandardTx(tx, ::fIsBareMultisigStd, m_pool.m_dust_relay_feerate, reason)) { return state.Invalid(TxValidationResult::TX_NOT_STANDARD, reason); } diff --git a/src/wallet/fees.cpp b/src/wallet/fees.cpp index 6f81fa30a1..3514d018b7 100644 --- a/src/wallet/fees.cpp +++ b/src/wallet/fees.cpp @@ -87,7 +87,7 @@ CFeeRate GetDiscardRate(const CWallet& wallet) CFeeRate discard_rate = wallet.chain().estimateSmartFee(highest_target, false /* conservative */); // Don't let discard_rate be greater than longest possible fee estimate if we get a valid fee estimate discard_rate = (discard_rate == CFeeRate(0)) ? wallet.m_discard_rate : std::min(discard_rate, wallet.m_discard_rate); - // Discard rate must be at least dustRelayFee + // Discard rate must be at least dust relay feerate discard_rate = std::max(discard_rate, wallet.chain().relayDustFee()); return discard_rate; } |