From d165ac8779b2b692007a7474c19cee4194946e75 Mon Sep 17 00:00:00 2001 From: Kristaps Kaupe Date: Wed, 24 Apr 2024 23:25:45 +0300 Subject: [PATCH] RPC: Return permitbaremultisig and maxdatacarriersize in getmempoolinfo Co-authored-by: Andrew Toth Co-authored-by: Sebastian Falbesoner --- src/rpc/mempool.cpp | 4 ++++ test/functional/mempool_accept.py | 2 ++ test/functional/mempool_datacarrier.py | 13 ++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/rpc/mempool.cpp b/src/rpc/mempool.cpp index 74f2249c07..b7225aed45 100644 --- a/src/rpc/mempool.cpp +++ b/src/rpc/mempool.cpp @@ -683,6 +683,8 @@ UniValue MempoolInfoToJSON(const CTxMemPool& pool) ret.pushKV("incrementalrelayfee", ValueFromAmount(pool.m_opts.incremental_relay_feerate.GetFeePerK())); ret.pushKV("unbroadcastcount", uint64_t{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)); return ret; } @@ -705,6 +707,8 @@ static RPCHelpMan getmempoolinfo() {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"}, }}, RPCExamples{ HelpExampleCli("getmempoolinfo", "") diff --git a/test/functional/mempool_accept.py b/test/functional/mempool_accept.py index ea609bbb34..f16ca02fad 100755 --- a/test/functional/mempool_accept.py +++ b/test/functional/mempool_accept.py @@ -74,6 +74,8 @@ class MempoolAcceptanceTest(BitcoinTestFramework): node = self.nodes[0] self.wallet = MiniWallet(node) + assert_equal(node.getmempoolinfo()['permitbaremultisig'], False) + self.log.info('Start with empty mempool, and 200 blocks') self.mempool_size = 0 assert_equal(node.getblockcount(), 200) diff --git a/test/functional/mempool_datacarrier.py b/test/functional/mempool_datacarrier.py index ed6ad8461a..b7b604ed2b 100755 --- a/test/functional/mempool_datacarrier.py +++ b/test/functional/mempool_datacarrier.py @@ -13,7 +13,10 @@ from test_framework.script import ( ) from test_framework.test_framework import BitcoinTestFramework from test_framework.test_node import TestNode -from test_framework.util import assert_raises_rpc_error +from test_framework.util import ( + assert_equal, + assert_raises_rpc_error, +) from test_framework.wallet import MiniWallet from random import randbytes @@ -46,6 +49,14 @@ class DataCarrierTest(BitcoinTestFramework): def run_test(self): self.wallet = MiniWallet(self.nodes[0]) + assert_equal(self.nodes[0].getmempoolinfo()["maxdatacarriersize"], MAX_OP_RETURN_RELAY) + assert_equal(self.nodes[1].getmempoolinfo()["maxdatacarriersize"], 0) + assert_equal(self.nodes[2].getmempoolinfo()["maxdatacarriersize"], MAX_OP_RETURN_RELAY - 1) + assert_equal(self.nodes[3].getmempoolinfo()["maxdatacarriersize"], 2) + + # Test that bare multisig is allowed by default. + assert_equal(self.nodes[0].getmempoolinfo()["permitbaremultisig"], True) + # By default, only 80 bytes are used for data (+1 for OP_RETURN, +2 for the pushdata opcodes). default_size_data = randbytes(MAX_OP_RETURN_RELAY - 3) too_long_data = randbytes(MAX_OP_RETURN_RELAY - 2)