Skip to content

Commit 1a35a65

Browse files
committed
refactor: drop mn_activeman from CJContext
Now that we no longer assume that cj_ctx is always initialized, we can skip the whole process if we are in masternode mode.
1 parent 80c201b commit 1a35a65

File tree

8 files changed

+46
-47
lines changed

8 files changed

+46
-47
lines changed

src/coinjoin/context.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class CJContextImpl final : public CJContext
2525
{
2626
public:
2727
CJContextImpl(ChainstateManager& chainman, CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_metaman,
28-
CTxMemPool& mempool, const CActiveMasternodeManager* const mn_activeman,
29-
const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman, bool relay_txes);
28+
CTxMemPool& mempool, const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman,
29+
bool relay_txes);
3030
virtual ~CJContextImpl() = default;
3131

3232
public:
@@ -55,14 +55,14 @@ class CJContextImpl final : public CJContext
5555
const std::unique_ptr<CCoinJoinClientQueueManager> queueman;
5656
};
5757

58-
CJContextImpl::CJContextImpl(ChainstateManager& chainman, CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_metaman,
59-
CTxMemPool& mempool, const CActiveMasternodeManager* const mn_activeman,
60-
const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman, bool relay_txes) :
58+
CJContextImpl::CJContextImpl(ChainstateManager& chainman, CDeterministicMNManager& dmnman,
59+
CMasternodeMetaMan& mn_metaman, CTxMemPool& mempool, const CMasternodeSync& mn_sync,
60+
const llmq::CInstantSendManager& isman, bool relay_txes) :
6161
m_relay_txes{relay_txes},
6262
walletman{std::make_unique<CoinJoinWalletManager>(chainman, dmnman, mn_metaman, mempool, mn_sync, isman, queueman,
63-
/*is_masternode=*/mn_activeman != nullptr)},
63+
/*is_masternode=*/false)},
6464
queueman{m_relay_txes ? std::make_unique<CCoinJoinClientQueueManager>(*walletman, dmnman, mn_metaman, mn_sync,
65-
/*is_masternode=*/mn_activeman != nullptr)
65+
/*is_masternode=*/false)
6666
: nullptr}
6767
{
6868
}
@@ -152,12 +152,11 @@ void CJContextImpl::removeWallet(const std::string& name)
152152

153153
std::unique_ptr<CJContext> CJContext::make(ChainstateManager& chainman, CDeterministicMNManager& dmnman,
154154
CMasternodeMetaMan& mn_metaman, CTxMemPool& mempool,
155-
const CActiveMasternodeManager* const mn_activeman,
156155
const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman,
157156
bool relay_txes)
158157
{
159158
#ifdef ENABLE_WALLET
160-
return std::make_unique<CJContextImpl>(chainman, dmnman, mn_metaman, mempool, mn_activeman, mn_sync, isman, relay_txes);
159+
return std::make_unique<CJContextImpl>(chainman, dmnman, mn_metaman, mempool, mn_sync, isman, relay_txes);
161160
#else
162161
// Cannot be constructed if wallet support isn't built
163162
return nullptr;

src/coinjoin/context.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include <optional>
1414
#include <string_view>
1515

16-
class CActiveMasternodeManager;
1716
class CBlockIndex;
1817
class CChainState;
1918
class CCoinJoinClientManager;
@@ -39,7 +38,6 @@ class CJContext : public CValidationInterface
3938
public:
4039
static std::unique_ptr<CJContext> make(ChainstateManager& chainman, CDeterministicMNManager& dmnman,
4140
CMasternodeMetaMan& mn_metaman, CTxMemPool& mempool,
42-
const CActiveMasternodeManager* const mn_activeman,
4341
const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman,
4442
bool relay_txes);
4543
virtual ~CJContext() = default;

src/init.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2140,8 +2140,10 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
21402140
node.dstxman = std::make_unique<CDSTXManager>();
21412141

21422142
assert(!node.cj_ctx);
2143-
node.cj_ctx = CJContext::make(chainman, *node.dmnman, *node.mn_metaman, *node.mempool, node.mn_activeman.get(),
2144-
*node.mn_sync, *node.llmq_ctx->isman, !ignores_incoming_txs);
2143+
if (!node.mn_activeman) {
2144+
node.cj_ctx = CJContext::make(chainman, *node.dmnman, *node.mn_metaman, *node.mempool, *node.mn_sync,
2145+
*node.llmq_ctx->isman, !ignores_incoming_txs);
2146+
}
21452147
if (node.cj_ctx) {
21462148
RegisterValidationInterface(node.cj_ctx.get());
21472149
}
@@ -2150,7 +2152,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
21502152
node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(), *node.dstxman,
21512153
chainman, *node.mempool, *node.mn_metaman, *node.mn_sync,
21522154
*node.govman, *node.sporkman, node.mn_activeman.get(), node.dmnman,
2153-
node.active_ctx, node.cj_ctx, node.llmq_ctx, ignores_incoming_txs);
2155+
node.active_ctx, node.cj_ctx.get(), node.llmq_ctx, ignores_incoming_txs);
21542156
RegisterValidationInterface(node.peerman.get());
21552157

21562158
g_ds_notification_interface = std::make_unique<CDSNotificationInterface>(

src/net_processing.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ class PeerManagerImpl final : public PeerManager
592592
CMasternodeMetaMan& mn_metaman, CMasternodeSync& mn_sync, CGovernanceManager& govman,
593593
CSporkManager& sporkman, const CActiveMasternodeManager* const mn_activeman,
594594
const std::unique_ptr<CDeterministicMNManager>& dmnman,
595-
const std::unique_ptr<ActiveContext>& active_ctx, const std::unique_ptr<CJContext>& cj_ctx,
595+
const std::unique_ptr<ActiveContext>& active_ctx, CJContext* const cj_ctx,
596596
const std::unique_ptr<LLMQContext>& llmq_ctx, bool ignore_incoming_txs);
597597

598598
/** Overridden from CValidationInterface. */
@@ -788,7 +788,8 @@ class PeerManagerImpl final : public PeerManager
788788
std::unique_ptr<TxReconciliationTracker> m_txreconciliation;
789789
const std::unique_ptr<CDeterministicMNManager>& m_dmnman;
790790
const std::unique_ptr<ActiveContext>& m_active_ctx;
791-
const std::unique_ptr<CJContext>& m_cj_ctx;
791+
/** Pointer to this node's CJContext. May be nullptr - check existence before dereferencing. */
792+
CJContext* const m_cj_ctx;
792793
const std::unique_ptr<LLMQContext>& m_llmq_ctx;
793794
CMasternodeMetaMan& m_mn_metaman;
794795
CMasternodeSync& m_mn_sync;
@@ -1962,7 +1963,7 @@ std::unique_ptr<PeerManager> PeerManager::make(const CChainParams& chainparams,
19621963
const CActiveMasternodeManager* const mn_activeman,
19631964
const std::unique_ptr<CDeterministicMNManager>& dmnman,
19641965
const std::unique_ptr<ActiveContext>& active_ctx,
1965-
const std::unique_ptr<CJContext>& cj_ctx,
1966+
CJContext* const cj_ctx,
19661967
const std::unique_ptr<LLMQContext>& llmq_ctx, bool ignore_incoming_txs)
19671968
{
19681969
return std::make_unique<PeerManagerImpl>(chainparams, connman, addrman, banman, dstxman, chainman, pool, mn_metaman, mn_sync, govman, sporkman, mn_activeman, dmnman, active_ctx, cj_ctx, llmq_ctx, ignore_incoming_txs);
@@ -1974,7 +1975,7 @@ PeerManagerImpl::PeerManagerImpl(const CChainParams& chainparams, CConnman& conn
19741975
CSporkManager& sporkman, const CActiveMasternodeManager* const mn_activeman,
19751976
const std::unique_ptr<CDeterministicMNManager>& dmnman,
19761977
const std::unique_ptr<ActiveContext>& active_ctx,
1977-
const std::unique_ptr<CJContext>& cj_ctx,
1978+
CJContext* const cj_ctx,
19781979
const std::unique_ptr<LLMQContext>& llmq_ctx, bool ignore_incoming_txs)
19791980
: m_chainparams(chainparams),
19801981
m_connman(connman),

src/net_processing.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ class PeerManager : public CValidationInterface, public NetEventsInterface
6565
const CActiveMasternodeManager* const mn_activeman,
6666
const std::unique_ptr<CDeterministicMNManager>& dmnman,
6767
const std::unique_ptr<ActiveContext>& active_ctx,
68-
const std::unique_ptr<CJContext>& cj_ctx,
69-
const std::unique_ptr<LLMQContext>& llmq_ctx, bool ignore_incoming_txs);
68+
CJContext* const cj_ctx, const std::unique_ptr<LLMQContext>& llmq_ctx,
69+
bool ignore_incoming_txs);
7070
virtual ~PeerManager() { }
7171

7272
/**

src/test/denialofservice_tests.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE(stale_tip_peer_management)
151151
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, /*banman=*/nullptr, *m_node.dstxman,
152152
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
153153
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/ nullptr, m_node.dmnman,
154-
/*active_ctx=*/nullptr, m_node.cj_ctx, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
154+
/*active_ctx=*/nullptr, /*cj_ctx=*/nullptr, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
155155

156156
constexpr int max_outbound_full_relay = MAX_OUTBOUND_FULL_RELAY_CONNECTIONS;
157157
CConnman::Options options;
@@ -254,8 +254,8 @@ BOOST_AUTO_TEST_CASE(block_relay_only_eviction)
254254
auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman);
255255
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, /*banman=*/nullptr, *m_node.dstxman,
256256
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
257-
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/ nullptr, m_node.dmnman,
258-
/*active_ctx=*/nullptr, m_node.cj_ctx, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
257+
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/nullptr, m_node.dmnman,
258+
/*active_ctx=*/nullptr, /*cj_ctx=*/nullptr, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
259259

260260
constexpr int max_outbound_block_relay{MAX_BLOCK_RELAY_ONLY_CONNECTIONS};
261261
constexpr int64_t MINIMUM_CONNECT_TIME{30};
@@ -322,7 +322,7 @@ BOOST_AUTO_TEST_CASE(peer_discouragement)
322322
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, banman.get(), *m_node.dstxman,
323323
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
324324
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/nullptr, m_node.dmnman,
325-
/*active_ctx=*/nullptr, m_node.cj_ctx, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
325+
/*active_ctx=*/nullptr, /*cj_ctx=*/nullptr, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
326326

327327
CNetAddr tor_netaddr;
328328
BOOST_REQUIRE(
@@ -427,7 +427,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
427427
auto peerLogic = PeerManager::make(chainparams, *connman, *m_node.addrman, banman.get(), *m_node.dstxman,
428428
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
429429
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/nullptr, m_node.dmnman,
430-
/*active_ctx=*/nullptr, m_node.cj_ctx, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
430+
/*active_ctx=*/nullptr, /*cj_ctx=*/nullptr, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
431431

432432
banman->ClearBanned();
433433
int64_t nStartTime = GetTime();

src/test/net_peer_connection_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ BOOST_AUTO_TEST_CASE(test_addnode_getaddednodeinfo_and_connection_detection)
8888
auto peerman = PeerManager::make(chainparams, *connman, *m_node.addrman, /*banman=*/nullptr, *m_node.dstxman,
8989
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
9090
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/nullptr, m_node.dmnman,
91-
/*active_ctx=*/nullptr, m_node.cj_ctx, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
91+
/*active_ctx=*/nullptr, /*cj_ctx=*/nullptr, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
9292
NodeId id{0};
9393
std::vector<CNode*> nodes;
9494

src/test/util/setup_common.cpp

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -342,23 +342,12 @@ TestingSetup::TestingSetup(const std::string& chainName, const std::vector<const
342342
assert(!maybe_verify_error.has_value());
343343

344344
m_node.dstxman = std::make_unique<CDSTXManager>();
345-
m_node.banman = std::make_unique<BanMan>(m_args.GetDataDirBase() / "banlist", nullptr, DEFAULT_MISBEHAVING_BANTIME);
346-
m_node.peerman = PeerManager::make(chainparams, *m_node.connman, *m_node.addrman, m_node.banman.get(), *m_node.dstxman,
347-
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
348-
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/nullptr, m_node.dmnman,
349-
/*active_ctx=*/nullptr, m_node.cj_ctx, m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
350-
{
351-
CConnman::Options options;
352-
options.m_msgproc = m_node.peerman.get();
353-
options.socketEventsMode = ::g_socket_events_mode;
354-
m_node.connman->Init(options);
355-
}
356-
345+
#ifdef ENABLE_WALLET
346+
// The test suite doesn't use masternode mode, so we may initialize it
357347
m_node.cj_ctx = CJContext::make(*m_node.chainman, *m_node.dmnman, *m_node.mn_metaman, *m_node.mempool,
358-
/*mn_activeman=*/nullptr, *m_node.mn_sync, *m_node.llmq_ctx->isman,
359-
/*relay_txes=*/true);
348+
*m_node.mn_sync, *m_node.llmq_ctx->isman, /*relay_txes=*/true);
349+
assert(m_node.cj_ctx);
360350

361-
#ifdef ENABLE_WALLET
362351
// WalletInit::Construct()-like logic needed for wallet tests that run on
363352
// TestingSetup and its children (e.g. TestChain100Setup) instead of
364353
// WalletTestingSetup
@@ -369,6 +358,18 @@ TestingSetup::TestingSetup(const std::string& chainName, const std::vector<const
369358
m_node.chain_clients.emplace_back(std::move(wallet_loader));
370359
#endif // ENABLE_WALLET
371360

361+
m_node.banman = std::make_unique<BanMan>(m_args.GetDataDirBase() / "banlist", nullptr, DEFAULT_MISBEHAVING_BANTIME);
362+
m_node.peerman = PeerManager::make(chainparams, *m_node.connman, *m_node.addrman, m_node.banman.get(), *m_node.dstxman,
363+
*m_node.chainman, *m_node.mempool, *m_node.mn_metaman, *m_node.mn_sync,
364+
*m_node.govman, *m_node.sporkman, /*mn_activeman=*/nullptr, m_node.dmnman,
365+
/*active_ctx=*/nullptr, m_node.cj_ctx.get(), m_node.llmq_ctx, /*ignore_incoming_txs=*/false);
366+
{
367+
CConnman::Options options;
368+
options.m_msgproc = m_node.peerman.get();
369+
options.socketEventsMode = ::g_socket_events_mode;
370+
m_node.connman->Init(options);
371+
}
372+
372373
BlockValidationState state;
373374
if (!m_node.chainman->ActiveChainstate().ActivateBestChain(state)) {
374375
throw std::runtime_error(strprintf("ActivateBestChain failed. (%s)", state.ToString()));
@@ -377,15 +378,17 @@ TestingSetup::TestingSetup(const std::string& chainName, const std::vector<const
377378

378379
TestingSetup::~TestingSetup()
379380
{
381+
m_node.peerman.reset();
382+
m_node.banman.reset();
380383
#ifdef ENABLE_WALLET
381384
for (auto& client : m_node.chain_clients) {
382385
client.reset();
383386
}
384387
m_node.wallet_loader = nullptr;
385-
386388
m_node.coinjoin_loader.reset();
387-
#endif // ENABLE_WALLET
388389
m_node.cj_ctx.reset();
390+
#endif // ENABLE_WALLET
391+
m_node.dstxman.reset();
389392

390393
// Interrupt() and PrepareShutdown() routines
391394
if (m_node.llmq_ctx) {
@@ -399,10 +402,6 @@ TestingSetup::~TestingSetup()
399402
// DashChainstateSetup() is called by LoadChainstate() internally but
400403
// winding them down is our responsibility
401404
DashChainstateSetupClose(m_node);
402-
403-
m_node.peerman.reset();
404-
m_node.banman.reset();
405-
m_node.dstxman.reset();
406405
}
407406

408407
TestChain100Setup::TestChain100Setup(const std::string& chain_name, const std::vector<const char*>& extra_args)

0 commit comments

Comments
 (0)