From ec1123aed19f6e91bf07ad4e2b6c79867acf895a Mon Sep 17 00:00:00 2001 From: stickies-v Date: Tue, 7 Jul 2026 16:18:41 +0100 Subject: [PATCH] rpc: define and use new RPC_LIMIT_EXCEEDED error code The server isn't running out of memory when the private broadcast transaction queue is full. Add a new RPC_LIMIT_EXCEEDED code that can be used whenever a resource is bound and currently at capacity. Github-Pull: #35678 Rebased-From: 82a02a2a2208a94686949cf3b5991a834b37263a --- src/rpc/protocol.h | 1 + src/rpc/util.cpp | 2 +- test/functional/p2p_private_broadcast_cap.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rpc/protocol.h b/src/rpc/protocol.h index 3f18365c50b..4d2e35ec703 100644 --- a/src/rpc/protocol.h +++ b/src/rpc/protocol.h @@ -49,6 +49,7 @@ enum RPCErrorCode RPC_VERIFY_ALREADY_IN_UTXO_SET = -27, //!< Transaction already in utxo set RPC_IN_WARMUP = -28, //!< Client still warming up RPC_METHOD_DEPRECATED = -32, //!< RPC method is deprecated + RPC_LIMIT_EXCEEDED = -37, //!< A bounded resource is currently at capacity //! Aliases for backward compatibility RPC_TRANSACTION_ERROR = RPC_VERIFY_ERROR, diff --git a/src/rpc/util.cpp b/src/rpc/util.cpp index 912b4a3ed33..fbf497c930c 100644 --- a/src/rpc/util.cpp +++ b/src/rpc/util.cpp @@ -396,7 +396,7 @@ RPCErrorCode RPCErrorFromTransactionError(TransactionError terr) case TransactionError::ALREADY_IN_UTXO_SET: return RPC_VERIFY_ALREADY_IN_UTXO_SET; case TransactionError::PRIVATE_BROADCAST_FULL: - return RPC_OUT_OF_MEMORY; + return RPC_LIMIT_EXCEEDED; default: break; } return RPC_TRANSACTION_ERROR; diff --git a/test/functional/p2p_private_broadcast_cap.py b/test/functional/p2p_private_broadcast_cap.py index 154bf8b5c7d..81f00a89929 100755 --- a/test/functional/p2p_private_broadcast_cap.py +++ b/test/functional/p2p_private_broadcast_cap.py @@ -71,7 +71,7 @@ class PrivateBroadcastCapTest(BitcoinTestFramework): # queue is left unchanged (nothing evicted to make room). self.log.info(f"Submitting {OVER_CAP} more; each should be rejected (queue full)") for child in children[MAX_TRANSACTIONS:]: - assert_raises_rpc_error(-7, "Private broadcast queue is full", + assert_raises_rpc_error(-37, "Private broadcast queue is full", node.sendrawtransaction, child["hex"]) assert_equal(pbinfo["transactions"], node.getprivatebroadcastinfo()["transactions"])