Skip to content

Commit 81b1247

Browse files
committed
refactor: remove CActiveMasternodeManager global, move to NodeContext
1 parent c99fb42 commit 81b1247

18 files changed

+81
-62
lines changed

src/dsnotificationinterface.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@
2626
CDSNotificationInterface::CDSNotificationInterface(CConnman& connman,
2727
CMasternodeSync& mn_sync,
2828
CGovernanceManager& govman,
29+
const CActiveMasternodeManager* const mn_activeman,
2930
const std::unique_ptr<CDeterministicMNManager>& dmnman,
3031
const std::unique_ptr<LLMQContext>& llmq_ctx,
3132
const std::unique_ptr<CJContext>& cj_ctx)
3233
: m_connman(connman),
3334
m_mn_sync(mn_sync),
3435
m_govman(govman),
36+
m_mn_activeman(mn_activeman),
3537
m_dmnman(dmnman),
3638
m_llmq_ctx(llmq_ctx),
3739
m_cj_ctx(cj_ctx) {}
@@ -94,7 +96,7 @@ void CDSNotificationInterface::UpdatedBlockTip(const CBlockIndex *pindexNew, con
9496
m_llmq_ctx->qdkgsman->UpdatedBlockTip(pindexNew, fInitialDownload);
9597
m_llmq_ctx->ehfSignalsHandler->UpdatedBlockTip(pindexNew);
9698

97-
if (!fDisableGovernance) m_govman.UpdatedBlockTip(pindexNew, m_connman);
99+
if (!fDisableGovernance) m_govman.UpdatedBlockTip(pindexNew, m_connman, m_mn_activeman);
98100
}
99101

100102
void CDSNotificationInterface::TransactionAddedToMempool(const CTransactionRef& ptx, int64_t nAcceptTime)

src/dsnotificationinterface.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <validationinterface.h>
99

10+
class CActiveMasternodeManager;
1011
class CConnman;
1112
class CDeterministicMNManager;
1213
class CGovernanceManager;
@@ -20,6 +21,7 @@ class CDSNotificationInterface : public CValidationInterface
2021
explicit CDSNotificationInterface(CConnman& connman,
2122
CMasternodeSync& mn_sync,
2223
CGovernanceManager& govman,
24+
const CActiveMasternodeManager* const mn_activeman,
2325
const std::unique_ptr<CDeterministicMNManager>& dmnman,
2426
const std::unique_ptr<LLMQContext>& llmq_ctx,
2527
const std::unique_ptr<CJContext>& cj_ctx);
@@ -47,6 +49,7 @@ class CDSNotificationInterface : public CValidationInterface
4749
CMasternodeSync& m_mn_sync;
4850
CGovernanceManager& m_govman;
4951

52+
const CActiveMasternodeManager* const m_mn_activeman;
5053
const std::unique_ptr<CDeterministicMNManager>& m_dmnman;
5154
const std::unique_ptr<LLMQContext>& m_llmq_ctx;
5255
const std::unique_ptr<CJContext>& m_cj_ctx;

src/evo/mnauth.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
#include <util/time.h>
2020
#include <validation.h>
2121

22-
void CMNAuth::PushMNAUTH(CNode& peer, CConnman& connman, const CBlockIndex* tip)
22+
void CMNAuth::PushMNAUTH(CNode& peer, CConnman& connman, const CActiveMasternodeManager& mn_activeman,
23+
const CBlockIndex* tip)
2324
{
24-
if (!fMasternodeMode) return;
25+
assert(fMasternodeMode);
2526

2627
CMNAuth mnauth;
27-
if (::activeMasternodeManager->GetProTxHash().IsNull()) {
28+
if (mn_activeman.GetProTxHash().IsNull()) {
2829
return;
2930
}
3031

@@ -43,7 +44,7 @@ void CMNAuth::PushMNAUTH(CNode& peer, CConnman& connman, const CBlockIndex* tip)
4344
nOurNodeVersion = gArgs.GetArg("-pushversion", PROTOCOL_VERSION);
4445
}
4546
const bool is_basic_scheme_active{DeploymentActiveAfter(tip, Params().GetConsensus(), Consensus::DEPLOYMENT_V19)};
46-
auto pk = ::activeMasternodeManager->GetPubKey();
47+
auto pk = mn_activeman.GetPubKey();
4748
const CBLSPublicKeyVersionWrapper pubKey(pk, !is_basic_scheme_active);
4849
uint256 signHash = [&]() {
4950
if (peer.nVersion < MNAUTH_NODE_VER_VERSION || nOurNodeVersion < MNAUTH_NODE_VER_VERSION) {
@@ -53,15 +54,15 @@ void CMNAuth::PushMNAUTH(CNode& peer, CConnman& connman, const CBlockIndex* tip)
5354
}
5455
}();
5556

56-
mnauth.proRegTxHash = ::activeMasternodeManager->GetProTxHash();
57+
mnauth.proRegTxHash = mn_activeman.GetProTxHash();
5758

58-
mnauth.sig = ::activeMasternodeManager->Sign(signHash);
59+
mnauth.sig = mn_activeman.Sign(signHash);
5960

6061
LogPrint(BCLog::NET_NETCONN, "CMNAuth::%s -- Sending MNAUTH, peer=%d\n", __func__, peer.GetId());
6162
connman.PushMessage(&peer, CNetMsgMaker(peer.GetCommonVersion()).Make(NetMsgType::MNAUTH, mnauth));
6263
}
6364

64-
PeerMsgRet CMNAuth::ProcessMessage(CNode& peer, CConnman& connman, const CMasternodeSync& mn_sync,
65+
PeerMsgRet CMNAuth::ProcessMessage(CNode& peer, CConnman& connman, const CActiveMasternodeManager* const mn_activeman, const CMasternodeSync& mn_sync,
6566
const CDeterministicMNList& tip_mn_list, std::string_view msg_type, CDataStream& vRecv)
6667
{
6768
assert(::mmetaman->IsValid());
@@ -134,7 +135,7 @@ PeerMsgRet CMNAuth::ProcessMessage(CNode& peer, CConnman& connman, const CMaster
134135
}
135136

136137
const uint256 myProTxHash = fMasternodeMode ?
137-
::activeMasternodeManager->GetProTxHash() :
138+
Assert(mn_activeman)->GetProTxHash() :
138139
uint256();
139140

140141
connman.ForEachNode([&](CNode* pnode2) {

src/evo/mnauth.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <net_types.h>
1010
#include <serialize.h>
1111

12+
class CActiveMasternodeManager;
1213
class CBlockIndex;
1314
class CConnman;
1415
class CDataStream;
@@ -49,13 +50,14 @@ class CMNAuth
4950
READWRITE(obj.proRegTxHash, obj.sig);
5051
}
5152

52-
static void PushMNAUTH(CNode& peer, CConnman& connman, const CBlockIndex* tip);
53+
static void PushMNAUTH(CNode& peer, CConnman& connman, const CActiveMasternodeManager& mn_activeman,
54+
const CBlockIndex* tip);
5355

5456
/**
5557
* @pre CMasternodeMetaMan's database must be successfully loaded before
5658
* attempting to call this function regardless of sync state
5759
*/
58-
static PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, const CMasternodeSync& mn_sync,
60+
static PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, const CActiveMasternodeManager* const mn_activeman, const CMasternodeSync& mn_sync,
5961
const CDeterministicMNList& tip_mn_list, std::string_view msg_type, CDataStream& vRecv);
6062
static void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff, CConnman& connman);
6163
};

src/governance/governance.cpp

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,11 @@ std::optional<const CSuperblock> CGovernanceManager::CreateSuperblockCandidate(i
671671
return CSuperblock(nNextSuperblock, std::move(payments));
672672
}
673673

674-
std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, CConnman& connman)
674+
std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, CConnman& connman,
675+
const CActiveMasternodeManager* const mn_activeman)
675676
{
677+
if (!fMasternodeMode) return std::nullopt;
678+
676679
// no sb_opt, no trigger
677680
if (!sb_opt.has_value()) return std::nullopt;
678681

@@ -696,12 +699,12 @@ std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigg
696699
return std::nullopt;
697700
}
698701

699-
if (mn_payees.front()->proTxHash != ::activeMasternodeManager->GetProTxHash()) {
702+
if (mn_payees.front()->proTxHash != Assert(mn_activeman)->GetProTxHash()) {
700703
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s we are not the payee, skipping\n", __func__);
701704
return std::nullopt;
702705
}
703-
gov_sb.SetMasternodeOutpoint(::activeMasternodeManager->GetOutPoint());
704-
gov_sb.Sign(*::activeMasternodeManager);
706+
gov_sb.SetMasternodeOutpoint(mn_activeman->GetOutPoint());
707+
gov_sb.Sign(*mn_activeman);
705708

706709
if (std::string strError; !gov_sb.IsValidLocally(m_dmnman->GetListAtChainTip(), strError, true)) {
707710
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Created trigger is invalid:%s\n", __func__, strError);
@@ -718,11 +721,12 @@ std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigg
718721
return std::make_optional<CGovernanceObject>(gov_sb);
719722
}
720723

721-
void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman)
724+
void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman,
725+
const CActiveMasternodeManager* const mn_activeman)
722726
{
723727
// only active masternodes can vote on triggers
724728
if (!fMasternodeMode) return;
725-
if (::activeMasternodeManager->GetProTxHash().IsNull()) return;
729+
if (Assert(mn_activeman)->GetProTxHash().IsNull()) return;
726730

727731
LOCK2(cs_main, cs);
728732

@@ -731,7 +735,7 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
731735
assert(!votedFundingYesTriggerHash.has_value());
732736
// Vote YES-FUNDING for the trigger we like
733737
const uint256 gov_sb_hash = trigger_opt.value().GetHash();
734-
if (!VoteFundingTrigger(gov_sb_hash, VOTE_OUTCOME_YES, connman)) {
738+
if (!VoteFundingTrigger(gov_sb_hash, VOTE_OUTCOME_YES, connman, mn_activeman)) {
735739
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Voting YES-FUNDING for new trigger:%s failed\n", __func__, gov_sb_hash.ToString());
736740
// this should never happen, bail out
737741
return;
@@ -754,7 +758,7 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
754758
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Not voting NO-FUNDING for trigger:%s, we voted yes for it already\n", __func__, trigger_hash.ToString());
755759
continue;
756760
}
757-
if (!VoteFundingTrigger(trigger_hash, VOTE_OUTCOME_NO, connman)) {
761+
if (!VoteFundingTrigger(trigger_hash, VOTE_OUTCOME_NO, connman, mn_activeman)) {
758762
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Voting NO-FUNDING for trigger:%s failed\n", __func__, trigger_hash.ToString());
759763
// failing here is ok-ish
760764
continue;
@@ -763,11 +767,14 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
763767
}
764768
}
765769

766-
bool CGovernanceManager::VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman)
770+
bool CGovernanceManager::VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman,
771+
const CActiveMasternodeManager* const mn_activeman)
767772
{
768-
CGovernanceVote vote(::activeMasternodeManager->GetOutPoint(), nHash, VOTE_SIGNAL_FUNDING, outcome);
773+
if (!fMasternodeMode) return false;
774+
775+
CGovernanceVote vote(Assert(mn_activeman)->GetOutPoint(), nHash, VOTE_SIGNAL_FUNDING, outcome);
769776
vote.SetTime(GetAdjustedTime());
770-
vote.Sign(*::activeMasternodeManager);
777+
vote.Sign(*mn_activeman);
771778

772779
CGovernanceException exception;
773780
if (!ProcessVoteAndRelay(vote, exception, connman)) {
@@ -1466,7 +1473,7 @@ UniValue CGovernanceManager::ToJson() const
14661473
return jsonObj;
14671474
}
14681475

1469-
void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman)
1476+
void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, const CActiveMasternodeManager* const mn_activeman)
14701477
{
14711478
// Note this gets called from ActivateBestChain without cs_main being held
14721479
// so it should be safe to lock our mutex here without risking a deadlock
@@ -1478,8 +1485,8 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& co
14781485
}
14791486

14801487
const auto sb_opt = CreateSuperblockCandidate(pindex->nHeight);
1481-
const auto trigger_opt = CreateGovernanceTrigger(sb_opt, connman);
1482-
VoteGovernanceTriggers(trigger_opt, connman);
1488+
const auto trigger_opt = CreateGovernanceTrigger(sb_opt, connman, mn_activeman);
1489+
VoteGovernanceTriggers(trigger_opt, connman, mn_activeman);
14831490

14841491
nCachedBlockHeight = pindex->nHeight;
14851492
LogPrint(BCLog::GOBJECT, "CGovernanceManager::UpdatedBlockTip -- nCachedBlockHeight: %d\n", nCachedBlockHeight);

src/governance/governance.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ class CGovernanceManager : public GovernanceStore
311311

312312
UniValue ToJson() const;
313313

314-
void UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman);
314+
void UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, const CActiveMasternodeManager* const mn_activeman);
315315
int64_t GetLastDiffTime() const { return nTimeLastDiff; }
316316
void UpdateLastDiffTime(int64_t nTimeIn) { nTimeLastDiff = nTimeIn; }
317317

@@ -366,9 +366,12 @@ class CGovernanceManager : public GovernanceStore
366366

367367
private:
368368
std::optional<const CSuperblock> CreateSuperblockCandidate(int nHeight) const;
369-
std::optional<const CGovernanceObject> CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, CConnman& connman);
370-
void VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman);
371-
bool VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman);
369+
std::optional<const CGovernanceObject> CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, CConnman& connman,
370+
const CActiveMasternodeManager* const mn_activeman);
371+
void VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman,
372+
const CActiveMasternodeManager* const mn_activeman);
373+
bool VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman,
374+
const CActiveMasternodeManager* const mn_activeman);
372375
bool HasAlreadyVotedFundingTrigger() const;
373376

374377
void RequestGovernanceObject(CNode* pfrom, const uint256& nHash, CConnman& connman, bool fUseFilter = false) const;

src/init.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -368,9 +368,8 @@ void PrepareShutdown(NodeContext& node)
368368
pdsNotificationInterface = nullptr;
369369
}
370370
if (fMasternodeMode) {
371-
UnregisterValidationInterface(node.mn_activeman);
372-
node.mn_activeman = nullptr;
373-
::activeMasternodeManager.reset();
371+
UnregisterValidationInterface(node.mn_activeman.get());
372+
node.mn_activeman.reset();
374373
}
375374

376375
node.chain_clients.clear();
@@ -1727,17 +1726,16 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
17271726
}
17281727
fMasternodeMode = true;
17291728
{
1730-
// Create and register activeMasternodeManager, will init later in ThreadImport
1731-
::activeMasternodeManager = std::make_unique<CActiveMasternodeManager>(keyOperator, *node.connman, ::deterministicMNManager);
1732-
node.mn_activeman = ::activeMasternodeManager.get();
1733-
RegisterValidationInterface(node.mn_activeman);
1729+
// Create and register mn_activeman, will init later in ThreadImport
1730+
node.mn_activeman = std::make_unique<CActiveMasternodeManager>(keyOperator, *node.connman, ::deterministicMNManager);
1731+
RegisterValidationInterface(node.mn_activeman.get());
17341732
}
17351733
}
17361734

17371735
assert(!node.peerman);
17381736
node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(),
17391737
*node.scheduler, chainman, *node.mempool, *node.mn_metaman, *node.mn_sync,
1740-
*node.govman, *node.sporkman, ::deterministicMNManager,
1738+
*node.govman, *node.sporkman, node.mn_activeman.get(), ::deterministicMNManager,
17411739
node.cj_ctx, node.llmq_ctx, ignores_incoming_txs);
17421740
RegisterValidationInterface(node.peerman.get());
17431741

@@ -1862,7 +1860,7 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
18621860
#endif
18631861

18641862
pdsNotificationInterface = new CDSNotificationInterface(
1865-
*node.connman, *node.mn_sync, *node.govman, ::deterministicMNManager, node.llmq_ctx, node.cj_ctx
1863+
*node.connman, *node.mn_sync, *node.govman, node.mn_activeman.get(), ::deterministicMNManager, node.llmq_ctx, node.cj_ctx
18661864
);
18671865
RegisterValidationInterface(pdsNotificationInterface);
18681866

@@ -1961,7 +1959,7 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
19611959
}
19621960
node.llmq_ctx.reset();
19631961
node.llmq_ctx = std::make_unique<LLMQContext>(chainman.ActiveChainstate(), *node.connman, *node.dmnman, *node.evodb, *node.mnhf_manager, *node.sporkman,
1964-
*node.mempool, node.mn_activeman, *node.mn_sync, node.peerman, /* unit_tests = */ false, /* wipe = */ fReset || fReindexChainState);
1962+
*node.mempool, node.mn_activeman.get(), *node.mn_sync, node.peerman, /* unit_tests = */ false, /* wipe = */ fReset || fReindexChainState);
19651963
// Have to start it early to let VerifyDB check ChainLock signatures in coinbase
19661964
node.llmq_ctx->Start();
19671965

@@ -2206,7 +2204,7 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
22062204

22072205
// ********************************************************* Step 7c: Setup CoinJoin
22082206

2209-
node.cj_ctx = std::make_unique<CJContext>(chainman.ActiveChainstate(), *node.connman, *node.dmnman, *node.mempool, node.mn_activeman,
2207+
node.cj_ctx = std::make_unique<CJContext>(chainman.ActiveChainstate(), *node.connman, *node.dmnman, *node.mempool, node.mn_activeman.get(),
22102208
*node.mn_sync, !ignores_incoming_txs);
22112209

22122210
#ifdef ENABLE_WALLET
@@ -2379,7 +2377,7 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
23792377
}
23802378

23812379
chainman.m_load_block = std::thread(&util::TraceThread, "loadblk", [=, &args, &chainman, &node] {
2382-
ThreadImport(chainman, *node.dmnman, *pdsNotificationInterface, vImportFiles, args);
2380+
ThreadImport(chainman, *node.dmnman, *pdsNotificationInterface, vImportFiles, node.mn_activeman.get(), args);
23832381
});
23842382

23852383
// Wait for genesis block to be processed

src/masternode/node.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
#include <validation.h>
1616
#include <warnings.h>
1717

18-
// Keep track of the active Masternode
19-
std::unique_ptr<CActiveMasternodeManager> activeMasternodeManager;
20-
2118
CActiveMasternodeManager::CActiveMasternodeManager(const CBLSSecretKey& sk, CConnman& connman, const std::unique_ptr<CDeterministicMNManager>& dmnman) :
2219
m_info(sk, sk.GetPublicKey()),
2320
m_connman{connman},

src/masternode/node.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,4 @@ class CActiveMasternodeManager final : public CValidationInterface
8080
bool GetLocalAddress(CService& addrRet) EXCLUSIVE_LOCKS_REQUIRED(cs);
8181
};
8282

83-
extern std::unique_ptr<CActiveMasternodeManager> activeMasternodeManager;
84-
8583
#endif // BITCOIN_MASTERNODE_NODE_H

0 commit comments

Comments
 (0)