aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/mempool.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/rpc/mempool.cpp b/src/rpc/mempool.cpp
index 705608bd47..136969eb87 100644
--- a/src/rpc/mempool.cpp
+++ b/src/rpc/mempool.cpp
@@ -819,11 +819,11 @@ static RPCHelpMan savemempool()
static RPCHelpMan submitpackage()
{
return RPCHelpMan{"submitpackage",
- "Submit a package of raw transactions (serialized, hex-encoded) to local node (-regtest only).\n"
+ "Submit a package of raw transactions (serialized, hex-encoded) to local node.\n"
+ "The package must consist of a child with its parents, and none of the parents may depend on one another.\n"
"The package will be validated according to consensus and mempool policy rules. If all transactions pass, they will be accepted to mempool.\n"
"This RPC is experimental and the interface may be unstable. Refer to doc/policy/packages.md for documentation on package policies.\n"
- "Warning: until package relay is in use, successful submission does not mean the transaction will propagate to other nodes on the network.\n"
- "Currently, each transaction is broadcasted individually after submission, which means they must meet other nodes' feerate requirements alone.\n"
+ "Warning: successful submission does not mean the transactions will propagate throughout the network.\n"
,
{
{"package", RPCArg::Type::ARR, RPCArg::Optional::NO, "An array of raw transactions.",
@@ -862,9 +862,6 @@ static RPCHelpMan submitpackage()
},
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
{
- if (Params().GetChainType() != ChainType::REGTEST) {
- throw std::runtime_error("submitpackage is for regression testing (-regtest mode) only");
- }
const UniValue raw_transactions = request.params[0].get_array();
if (raw_transactions.size() < 1 || raw_transactions.size() > MAX_PACKAGE_COUNT) {
throw JSONRPCError(RPC_INVALID_PARAMETER,
@@ -881,6 +878,9 @@ static RPCHelpMan submitpackage()
}
txns.emplace_back(MakeTransactionRef(std::move(mtx)));
}
+ if (!IsChildWithParentsTree(txns)) {
+ throw JSONRPCTransactionError(TransactionError::INVALID_PACKAGE, "package topology disallowed. not child-with-parents or parents depend on each other.");
+ }
NodeContext& node = EnsureAnyNodeContext(request.context);
CTxMemPool& mempool = EnsureMemPool(node);
@@ -983,7 +983,7 @@ void RegisterMempoolRPCCommands(CRPCTable& t)
{"blockchain", &getrawmempool},
{"blockchain", &importmempool},
{"blockchain", &savemempool},
- {"hidden", &submitpackage},
+ {"rawtransactions", &submitpackage},
};
for (const auto& c : commands) {
t.appendCommand(c.name, &c);