Shouldn't we do this in PeerManagerImpl::PeerManagerImpl instead?
If so, would it be possible to cover this case with a test? I'm surprised they all passed.
Here we could log instead:
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 9d0eb588db..23a840daa2 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -2026,6 +2026,10 @@ PeerManagerImpl::PeerManagerImpl(CConnman& connman, AddrMan& addrman,
m_warnings{warnings},
m_opts{opts}
{
+ if (m_opts.private_broadcast) {
+ m_tx_for_private_broadcast.emplace();
+ }
+
// While Erlay support is incomplete, it must be enabled explicitly via -txreconciliation.
// This argument can go away after Erlay support is complete.
if (opts.reconcile_txs) {
@@ -2276,11 +2280,12 @@ void PeerManagerImpl::InitiateTxBroadcastToAll(const Txid& txid, const Wtxid& wt
void PeerManagerImpl::InitiateTxBroadcastPrivate(const CTransactionRef& tx)
{
- // Lazily initialize `m_tx_for_private_broadcast` the first time it is needed.
+ const auto txstr{strprintf("txid=%s, wtxid=%s", tx->GetHash().ToString(), tx->GetWitnessHash().ToString())};
if (!m_tx_for_private_broadcast.has_value()) {
- m_tx_for_private_broadcast.emplace();
+ LogDebug(BCLog::PRIVBROADCAST, "Ignoring request to privately broadcast transaction because private broadcast is not enabled: %s", txstr);
+ return;
}
- const auto txstr{strprintf("txid=%s, wtxid=%s", tx->GetHash().ToString(), tx->GetWitnessHash().ToString())};
+
if (m_tx_for_private_broadcast->Add(tx)) {
LogDebug(BCLog::PRIVBROADCAST, "Requesting %d new connections due to %s", NUM_PRIVATE_BROADCAST_PER_TX, txstr);
m_connman.m_private_broadcast.NumToOpenAdd(NUM_PRIVATE_BROADCAST_PER_TX);
we could likely verify that a peer manager constructed without private broadcast enabled does not create private-broadcast queue state or request private-broadcast connections when InitiateTxBroadcastPrivate is called directly, something like:
diff --git a/src/test/peerman_tests.cpp b/src/test/peerman_tests.cpp
--- a/src/test/peerman_tests.cpp (revision 419182b0c6b622eee9d19dbd3938c396a494a1ae)
+++ b/src/test/peerman_tests.cpp (revision 22b159e9217b2fbe125e8d6a8fc7baac1359dfc6)
@@ -6,6 +6,7 @@
#include <node/miner.h>
#include <net_processing.h>
#include <pow.h>
+#include <primitives/transaction.h>
#include <test/util/setup_common.h>
#include <validation.h>
@@ -75,4 +76,18 @@
BOOST_CHECK(peerman->GetDesirableServiceFlags(peer_flags) == ServiceFlags(NODE_NETWORK | NODE_WITNESS));
}
+BOOST_AUTO_TEST_CASE(private_broadcast_disabled_ignores_initiate)
+{
+ BOOST_REQUIRE_EQUAL(m_node.connman->m_private_broadcast.NumToOpen(), 0U);
+
+ const auto peerman{PeerManager::make(*m_node.connman, *m_node.addrman, /*banman=*/nullptr, *m_node.chainman, *m_node.mempool, *m_node.warnings, {.private_broadcast = false})};
+ peerman->InitiateTxBroadcastPrivate(MakeTransactionRef(CMutableTransaction{}));
+
+ BOOST_CHECK(peerman->GetPrivateBroadcastInfo().empty());
+ BOOST_CHECK_EQUAL(m_node.connman->m_private_broadcast.NumToOpen(), 0U);
+}
+
BOOST_AUTO_TEST_SUITE_END()