From f89d18c3b1c750150832eceb854d97c436d4c8cc Mon Sep 17 00:00:00 2001 From: rkrux Date: Fri, 24 Apr 2026 14:07:34 +0530 Subject: [PATCH] rpc, mempool: rpcdeprecate `fullrbf` key in getmempoolinfo RPC response mempoolfullrbf=1 behaviour has been the default since v28 and the argument has been removed since v29 subsequently. The getmempoolinfo RPC need not return the deprecated `fullrbf` key in the response anymore unless the user requests it via -deprecatedrpc=fullrbf node argument. --- src/rpc/mempool.cpp | 46 ++++++++++++++++++++-------------- test/functional/feature_rbf.py | 1 + 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/rpc/mempool.cpp b/src/rpc/mempool.cpp index 1a94d10bf9f..1b76f7d858a 100644 --- a/src/rpc/mempool.cpp +++ b/src/rpc/mempool.cpp @@ -1055,12 +1055,14 @@ UniValue MempoolInfoToJSON(const CTxMemPool& pool) ret.pushKV("minrelaytxfee", ValueFromAmount(pool.m_opts.min_relay_feerate.GetFeePerK())); ret.pushKV("incrementalrelayfee", ValueFromAmount(pool.m_opts.incremental_relay_feerate.GetFeePerK())); ret.pushKV("unbroadcastcount", pool.GetUnbroadcastTxs().size()); - ret.pushKV("fullrbf", true); ret.pushKV("permitbaremultisig", pool.m_opts.permit_bare_multisig); ret.pushKV("maxdatacarriersize", pool.m_opts.max_datacarrier_bytes.value_or(0)); ret.pushKV("limitclustercount", pool.m_opts.limits.cluster_count); ret.pushKV("limitclustersize", pool.m_opts.limits.cluster_size_vbytes); ret.pushKV("optimal", pool.m_txgraph->DoWork(0)); // 0 work is a quick check for known optimality + if (IsDeprecatedRPCEnabled("fullrbf")) { + ret.pushKV("fullrbf", true); + } return ret; } @@ -1071,24 +1073,30 @@ static RPCHelpMan getmempoolinfo() {}, RPCResult{ RPCResult::Type::OBJ, "", "", - { - {RPCResult::Type::BOOL, "loaded", "True if the initial load attempt of the persisted mempool finished"}, - {RPCResult::Type::NUM, "size", "Current tx count"}, - {RPCResult::Type::NUM, "bytes", "Sum of all virtual transaction sizes as defined in BIP 141. Differs from actual serialized size because witness data is discounted"}, - {RPCResult::Type::NUM, "usage", "Total memory usage for the mempool"}, - {RPCResult::Type::STR_AMOUNT, "total_fee", "Total fees for the mempool in " + CURRENCY_UNIT + ", ignoring modified fees through prioritisetransaction"}, - {RPCResult::Type::NUM, "maxmempool", "Maximum memory usage for the mempool"}, - {RPCResult::Type::STR_AMOUNT, "mempoolminfee", "Minimum fee rate in " + CURRENCY_UNIT + "/kvB for tx to be accepted. Is the maximum of minrelaytxfee and minimum mempool fee"}, - {RPCResult::Type::STR_AMOUNT, "minrelaytxfee", "Current minimum relay fee for transactions"}, - {RPCResult::Type::NUM, "incrementalrelayfee", "minimum fee rate increment for mempool limiting or replacement in " + CURRENCY_UNIT + "/kvB"}, - {RPCResult::Type::NUM, "unbroadcastcount", "Current number of transactions that haven't passed initial broadcast yet"}, - {RPCResult::Type::BOOL, "fullrbf", "True if the mempool accepts RBF without replaceability signaling inspection (DEPRECATED)"}, - {RPCResult::Type::BOOL, "permitbaremultisig", "True if the mempool accepts transactions with bare multisig outputs"}, - {RPCResult::Type::NUM, "maxdatacarriersize", "Maximum number of bytes that can be used by OP_RETURN outputs in the mempool"}, - {RPCResult::Type::NUM, "limitclustercount", "Maximum number of transactions that can be in a cluster (configured by -limitclustercount)"}, - {RPCResult::Type::NUM, "limitclustersize", "Maximum size of a cluster in virtual bytes (configured by -limitclustersize)"}, - {RPCResult::Type::BOOL, "optimal", "If the mempool is in a known-optimal transaction ordering"}, - }}, + [](){ + std::vector list = { + {RPCResult::Type::BOOL, "loaded", "True if the initial load attempt of the persisted mempool finished"}, + {RPCResult::Type::NUM, "size", "Current tx count"}, + {RPCResult::Type::NUM, "bytes", "Sum of all virtual transaction sizes as defined in BIP 141. Differs from actual serialized size because witness data is discounted"}, + {RPCResult::Type::NUM, "usage", "Total memory usage for the mempool"}, + {RPCResult::Type::STR_AMOUNT, "total_fee", "Total fees for the mempool in " + CURRENCY_UNIT + ", ignoring modified fees through prioritisetransaction"}, + {RPCResult::Type::NUM, "maxmempool", "Maximum memory usage for the mempool"}, + {RPCResult::Type::STR_AMOUNT, "mempoolminfee", "Minimum fee rate in " + CURRENCY_UNIT + "/kvB for tx to be accepted. Is the maximum of minrelaytxfee and minimum mempool fee"}, + {RPCResult::Type::STR_AMOUNT, "minrelaytxfee", "Current minimum relay fee for transactions"}, + {RPCResult::Type::NUM, "incrementalrelayfee", "minimum fee rate increment for mempool limiting or replacement in " + CURRENCY_UNIT + "/kvB"}, + {RPCResult::Type::NUM, "unbroadcastcount", "Current number of transactions that haven't passed initial broadcast yet"}, + {RPCResult::Type::BOOL, "permitbaremultisig", "True if the mempool accepts transactions with bare multisig outputs"}, + {RPCResult::Type::NUM, "maxdatacarriersize", "Maximum number of bytes that can be used by OP_RETURN outputs in the mempool"}, + {RPCResult::Type::NUM, "limitclustercount", "Maximum number of transactions that can be in a cluster (configured by -limitclustercount)"}, + {RPCResult::Type::NUM, "limitclustersize", "Maximum size of a cluster in virtual bytes (configured by -limitclustersize)"}, + {RPCResult::Type::BOOL, "optimal", "If the mempool is in a known-optimal transaction ordering"}, + }; + if (IsDeprecatedRPCEnabled("fullrbf")) { + list.emplace_back(RPCResult::Type::BOOL, "fullrbf", "True if the mempool accepts RBF without replaceability signaling inspection (DEPRECATED)"); + } + return list; + }() + }, RPCExamples{ HelpExampleCli("getmempoolinfo", "") + HelpExampleRpc("getmempoolinfo", "") diff --git a/test/functional/feature_rbf.py b/test/functional/feature_rbf.py index a2c8cb606e0..5527f7a946c 100755 --- a/test/functional/feature_rbf.py +++ b/test/functional/feature_rbf.py @@ -28,6 +28,7 @@ class ReplaceByFeeTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 2 self.uses_wallet = None + self.extra_args = [["-deprecatedrpc=fullrbf"], []] def run_test(self): self.wallet = MiniWallet(self.nodes[0])