Skip to content

Commit c99fb42

Browse files
committed
refactor: remove CMasternodeSync global, move to NodeContext
1 parent a247a63 commit c99fb42

26 files changed

+91
-82
lines changed

src/coinjoin/client.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1890,7 +1890,6 @@ void CCoinJoinClientManager::GetJsonInfo(UniValue& obj) const
18901890
}
18911891

18921892
void CoinJoinWalletManager::Add(CWallet& wallet) {
1893-
assert(::masternodeSync != nullptr);
18941893
m_wallet_manager_map.try_emplace(
18951894
wallet.GetName(),
18961895
std::make_unique<CCoinJoinClientManager>(wallet, *this, m_dmnman, m_mn_sync, m_queueman)

src/evo/mnauth.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ void CMNAuth::PushMNAUTH(CNode& peer, CConnman& connman, const CBlockIndex* tip)
6161
connman.PushMessage(&peer, CNetMsgMaker(peer.GetCommonVersion()).Make(NetMsgType::MNAUTH, mnauth));
6262
}
6363

64-
PeerMsgRet CMNAuth::ProcessMessage(CNode& peer, CConnman& connman, const CDeterministicMNList& tip_mn_list, std::string_view msg_type, CDataStream& vRecv)
64+
PeerMsgRet CMNAuth::ProcessMessage(CNode& peer, CConnman& connman, const CMasternodeSync& mn_sync,
65+
const CDeterministicMNList& tip_mn_list, std::string_view msg_type, CDataStream& vRecv)
6566
{
6667
assert(::mmetaman->IsValid());
6768

68-
if (msg_type != NetMsgType::MNAUTH || !::masternodeSync->IsBlockchainSynced()) {
69+
if (msg_type != NetMsgType::MNAUTH || !mn_sync.IsBlockchainSynced()) {
6970
// we can't verify MNAUTH messages when we don't have the latest MN list
7071
return {};
7172
}

src/evo/mnauth.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class CDeterministicMN;
1616
class CDeterministicMNList;
1717
class CDeterministicMNListDiff;
1818
class CDeterministicMNManager;
19+
class CMasternodeSync;
1920
class CNode;
2021

2122
class UniValue;
@@ -54,7 +55,8 @@ class CMNAuth
5455
* @pre CMasternodeMetaMan's database must be successfully loaded before
5556
* attempting to call this function regardless of sync state
5657
*/
57-
static PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, const CDeterministicMNList& tip_mn_list, std::string_view msg_type, CDataStream& vRecv);
58+
static PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, const CMasternodeSync& mn_sync,
59+
const CDeterministicMNList& tip_mn_list, std::string_view msg_type, CDataStream& vRecv);
5860
static void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff, CConnman& connman);
5961
};
6062

src/governance/governance.cpp

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ GovernanceStore::GovernanceStore() :
4343
{
4444
}
4545

46-
CGovernanceManager::CGovernanceManager(CNetFulfilledRequestManager& netfulfilledman, const std::unique_ptr<CDeterministicMNManager>& dmnman) :
46+
CGovernanceManager::CGovernanceManager(CNetFulfilledRequestManager& netfulfilledman,
47+
const std::unique_ptr<CDeterministicMNManager>& dmnman,
48+
const std::unique_ptr<CMasternodeSync>& mn_sync) :
4749
m_db{std::make_unique<db_type>("governance.dat", "magicGovernanceCache")},
4850
m_netfulfilledman{netfulfilledman},
4951
m_dmnman{dmnman},
52+
m_mn_sync{mn_sync},
5053
nTimeLastDiff(0),
5154
nCachedBlockHeight(0),
5255
setRequestedObjects(),
@@ -118,15 +121,15 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
118121
PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, std::string_view msg_type, CDataStream& vRecv)
119122
{
120123
if (fDisableGovernance) return {};
121-
if (::masternodeSync == nullptr || !::masternodeSync->IsBlockchainSynced()) return {};
124+
if (m_mn_sync == nullptr || !m_mn_sync->IsBlockchainSynced()) return {};
122125

123126
const auto tip_mn_list = Assert(m_dmnman)->GetListAtChainTip();
124127
// ANOTHER USER IS ASKING US TO HELP THEM SYNC GOVERNANCE OBJECT DATA
125128
if (msg_type == NetMsgType::MNGOVERNANCESYNC) {
126129
// Ignore such requests until we are fully synced.
127130
// We could start processing this after masternode list is synced
128131
// but this is a heavy one so it's better to finish sync first.
129-
if (!::masternodeSync->IsSynced()) return {};
132+
if (!m_mn_sync->IsSynced()) return {};
130133

131134
uint256 nProp;
132135
CBloomFilter filter;
@@ -157,7 +160,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
157160
EraseObjectRequest(peer.GetId(), CInv(MSG_GOVERNANCE_OBJECT, nHash));
158161
}
159162

160-
if (!::masternodeSync->IsBlockchainSynced()) {
163+
if (!m_mn_sync->IsBlockchainSynced()) {
161164
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode list not synced\n");
162165
return {};
163166
}
@@ -225,7 +228,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
225228
}
226229

227230
// Ignore such messages until masternode list is synced
228-
if (!::masternodeSync->IsBlockchainSynced()) {
231+
if (!m_mn_sync->IsBlockchainSynced()) {
229232
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n");
230233
return {};
231234
}
@@ -243,11 +246,11 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
243246
CGovernanceException exception;
244247
if (ProcessVote(&peer, vote, exception, connman)) {
245248
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- %s new\n", strHash);
246-
::masternodeSync->BumpAssetLastTime("MNGOVERNANCEOBJECTVOTE");
247-
vote.Relay(connman, tip_mn_list);
249+
m_mn_sync->BumpAssetLastTime("MNGOVERNANCEOBJECTVOTE");
250+
vote.Relay(connman, *m_mn_sync, tip_mn_list);
248251
} else {
249252
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n", exception.what());
250-
if ((exception.GetNodePenalty() != 0) && ::masternodeSync->IsSynced()) {
253+
if ((exception.GetNodePenalty() != 0) && m_mn_sync->IsSynced()) {
251254
return tl::unexpected{exception.GetNodePenalty()};
252255
}
253256
return {};
@@ -273,7 +276,7 @@ void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CConnman& c
273276
if (pairVote.second < nNow) {
274277
fRemove = true;
275278
} else if (govobj.ProcessVote(*this, tip_mn_list, vote, e)) {
276-
vote.Relay(connman, tip_mn_list);
279+
vote.Relay(connman, *Assert(m_mn_sync), tip_mn_list);
277280
fRemove = true;
278281
}
279282
if (fRemove) {
@@ -327,12 +330,12 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman
327330
}
328331

329332
LogPrint(BCLog::GOBJECT, "CGovernanceManager::AddGovernanceObject -- %s new, received from peer %s\n", strHash, pfrom ? pfrom->GetLogString() : "nullptr");
330-
govobj.Relay(connman);
333+
govobj.Relay(connman, *Assert(m_mn_sync));
331334

332335
// Update the rate buffer
333336
MasternodeRateUpdate(govobj);
334337

335-
::masternodeSync->BumpAssetLastTime("CGovernanceManager::AddGovernanceObject");
338+
m_mn_sync->BumpAssetLastTime("CGovernanceManager::AddGovernanceObject");
336339

337340
// WE MIGHT HAVE PENDING/ORPHAN VOTES FOR THIS OBJECT
338341

@@ -347,7 +350,7 @@ void CGovernanceManager::CheckAndRemove()
347350
assert(::mmetaman->IsValid());
348351

349352
// Return on initial sync, spammed the debug.log and provided no use
350-
if (::masternodeSync == nullptr || !::masternodeSync->IsBlockchainSynced()) return;
353+
if (m_mn_sync == nullptr || !m_mn_sync->IsBlockchainSynced()) return;
351354

352355
LogPrint(BCLog::GOBJECT, "CGovernanceManager::UpdateCachesAndClean\n");
353356

@@ -562,7 +565,7 @@ struct sortProposalsByVotes {
562565
std::optional<const CSuperblock> CGovernanceManager::CreateSuperblockCandidate(int nHeight) const
563566
{
564567
if (!fMasternodeMode || fDisableGovernance) return std::nullopt;
565-
if (::masternodeSync == nullptr || !::masternodeSync->IsSynced()) return std::nullopt;
568+
if (m_mn_sync == nullptr || !m_mn_sync->IsSynced()) return std::nullopt;
566569
if (nHeight % Params().GetConsensus().nSuperblockCycle < Params().GetConsensus().nSuperblockCycle - Params().GetConsensus().nSuperblockMaturityWindow) return std::nullopt;
567570
if (HasAlreadyVotedFundingTrigger()) return std::nullopt;
568571

@@ -788,7 +791,7 @@ void CGovernanceManager::ResetVotedFundingTrigger()
788791
void CGovernanceManager::DoMaintenance(CConnman& connman)
789792
{
790793
if (fDisableGovernance) return;
791-
if (::masternodeSync == nullptr || !::masternodeSync->IsSynced()) return;
794+
if (m_mn_sync == nullptr || !m_mn_sync->IsSynced()) return;
792795
if (ShutdownRequested()) return;
793796

794797
// CHECK OBJECTS WE'VE ASKED FOR, REMOVE OLD ENTRIES
@@ -802,7 +805,7 @@ void CGovernanceManager::DoMaintenance(CConnman& connman)
802805
bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv)
803806
{
804807
// do not request objects until it's time to sync
805-
if (!::masternodeSync->IsBlockchainSynced()) return false;
808+
if (!Assert(m_mn_sync)->IsBlockchainSynced()) return false;
806809

807810
LOCK(cs);
808811

@@ -855,7 +858,7 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv)
855858
void CGovernanceManager::SyncSingleObjVotes(CNode& peer, const uint256& nProp, const CBloomFilter& filter, CConnman& connman)
856859
{
857860
// do not provide any data until our node is synced
858-
if (!::masternodeSync->IsSynced()) return;
861+
if (!Assert(m_mn_sync)->IsSynced()) return;
859862

860863
int nVoteCount = 0;
861864

@@ -907,7 +910,7 @@ PeerMsgRet CGovernanceManager::SyncObjects(CNode& peer, CConnman& connman) const
907910
assert(m_netfulfilledman.IsValid());
908911

909912
// do not provide any data until our node is synced
910-
if (!::masternodeSync->IsSynced()) return {};
913+
if (!Assert(m_mn_sync)->IsSynced()) return {};
911914

912915
if (m_netfulfilledman.HasFulfilledRequest(peer.addr, NetMsgType::MNGOVERNANCESYNC)) {
913916
// Asking for the whole list multiple times in a short period of time is no good
@@ -997,7 +1000,7 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo
9971000

9981001
fRateCheckBypassed = false;
9991002

1000-
if (!::masternodeSync->IsSynced() || !fRateChecksEnabled) {
1003+
if (!Assert(m_mn_sync)->IsSynced() || !fRateChecksEnabled) {
10011004
return true;
10021005
}
10031006

@@ -1055,6 +1058,15 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo
10551058
return false;
10561059
}
10571060

1061+
bool CGovernanceManager::ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman)
1062+
{
1063+
bool fOK = ProcessVote(/* pfrom = */ nullptr, vote, exception, connman);
1064+
if (fOK) {
1065+
vote.Relay(connman, *Assert(m_mn_sync), Assert(m_dmnman)->GetListAtChainTip());
1066+
}
1067+
return fOK;
1068+
}
1069+
10581070
bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman)
10591071
{
10601072
ENTER_CRITICAL_SECTION(cs);
@@ -1111,7 +1123,7 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote,
11111123

11121124
void CGovernanceManager::CheckPostponedObjects(CConnman& connman)
11131125
{
1114-
if (!::masternodeSync->IsSynced()) return;
1126+
if (!Assert(m_mn_sync)->IsSynced()) return;
11151127

11161128
LOCK2(cs_main, cs);
11171129

@@ -1159,7 +1171,7 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman)
11591171
if (fValid) {
11601172
if (fReady) {
11611173
LogPrint(BCLog::GOBJECT, "CGovernanceManager::CheckPostponedObjects -- additional relay: hash = %s\n", govobj.GetHash().ToString());
1162-
govobj.Relay(connman);
1174+
govobj.Relay(connman, *m_mn_sync);
11631175
} else {
11641176
it++;
11651177
continue;
@@ -1530,7 +1542,7 @@ void CGovernanceManager::CleanOrphanObjects()
15301542

15311543
void CGovernanceManager::RemoveInvalidVotes()
15321544
{
1533-
if (!::masternodeSync->IsSynced()) {
1545+
if (!Assert(m_mn_sync)->IsSynced()) {
15341546
return;
15351547
}
15361548

src/governance/governance.h

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#ifndef BITCOIN_GOVERNANCE_GOVERNANCE_H
66
#define BITCOIN_GOVERNANCE_GOVERNANCE_H
77

8-
#include <evo/deterministicmns.h>
98
#include <governance/classes.h>
109
#include <governance/object.h>
1110

@@ -26,6 +25,7 @@ class CDeterministicMNManager;
2625
class CGovernanceManager;
2726
class CGovernanceObject;
2827
class CGovernanceVote;
28+
class CMasternodeSync;
2929
class CNetFulfilledRequestManager;
3030
class CSporkManager;
3131

@@ -257,6 +257,7 @@ class CGovernanceManager : public GovernanceStore
257257

258258
CNetFulfilledRequestManager& m_netfulfilledman;
259259
const std::unique_ptr<CDeterministicMNManager>& m_dmnman;
260+
const std::unique_ptr<CMasternodeSync>& m_mn_sync;
260261

261262
int64_t nTimeLastDiff;
262263
// keep track of current block height
@@ -270,7 +271,9 @@ class CGovernanceManager : public GovernanceStore
270271
std::map<uint256, std::shared_ptr<CSuperblock>> mapTrigger;
271272

272273
public:
273-
explicit CGovernanceManager(CNetFulfilledRequestManager& netfulfilledman, const std::unique_ptr<CDeterministicMNManager>& dmnman);
274+
explicit CGovernanceManager(CNetFulfilledRequestManager& netfulfilledman,
275+
const std::unique_ptr<CDeterministicMNManager>& dmnman,
276+
const std::unique_ptr<CMasternodeSync>& mn_sync);
274277
~CGovernanceManager();
275278

276279
bool LoadCache(bool load_cache);
@@ -337,14 +340,7 @@ class CGovernanceManager : public GovernanceStore
337340

338341
bool MasternodeRateCheck(const CGovernanceObject& govobj, bool fUpdateFailStatus, bool fForce, bool& fRateCheckBypassed);
339342

340-
bool ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman)
341-
{
342-
bool fOK = ProcessVote(nullptr, vote, exception, connman);
343-
if (fOK) {
344-
vote.Relay(connman, Assert(m_dmnman)->GetListAtChainTip());
345-
}
346-
return fOK;
347-
}
343+
bool ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman);
348344

349345
void CheckPostponedObjects(CConnman& connman);
350346

src/governance/object.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,10 +628,10 @@ bool CGovernanceObject::GetCurrentMNVotes(const COutPoint& mnCollateralOutpoint,
628628
return true;
629629
}
630630

631-
void CGovernanceObject::Relay(CConnman& connman) const
631+
void CGovernanceObject::Relay(CConnman& connman, const CMasternodeSync& mn_sync) const
632632
{
633633
// Do not relay until fully synced
634-
if (!::masternodeSync->IsSynced()) {
634+
if (!mn_sync.IsSynced()) {
635635
LogPrint(BCLog::GOBJECT, "CGovernanceObject::Relay -- won't relay until fully synced\n");
636636
return;
637637
}

src/governance/object.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class CDeterministicMNList;
1919
class CGovernanceManager;
2020
class CGovernanceObject;
2121
class CGovernanceVote;
22+
class CMasternodeSync;
2223
class CNode;
2324

2425
extern RecursiveMutex cs_main;
@@ -247,7 +248,7 @@ class CGovernanceObject
247248

248249
UniValue GetJSONObject() const;
249250

250-
void Relay(CConnman& connman) const;
251+
void Relay(CConnman& connman, const CMasternodeSync& mn_sync) const;
251252

252253
uint256 GetHash() const;
253254
uint256 GetDataHash() const;

src/governance/vote.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ std::string CGovernanceVote::ToString(const CDeterministicMNList& tip_mn_list) c
122122
return ostr.str();
123123
}
124124

125-
void CGovernanceVote::Relay(CConnman& connman, const CDeterministicMNList& tip_mn_list) const
125+
void CGovernanceVote::Relay(CConnman& connman, const CMasternodeSync& mn_sync, const CDeterministicMNList& tip_mn_list) const
126126
{
127127
// Do not relay until fully synced
128-
if (!::masternodeSync->IsSynced()) {
128+
if (!mn_sync.IsSynced()) {
129129
LogPrint(BCLog::GOBJECT, "CGovernanceVote::Relay -- won't relay until fully synced\n");
130130
return;
131131
}

src/governance/vote.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class CBLSPublicKey;
1313
class CConnman;
1414
class CDeterministicMNList;
1515
class CGovernanceVote;
16+
class CMasternodeSync;
1617
class CKey;
1718
class CKeyID;
1819

@@ -104,7 +105,7 @@ class CGovernanceVote
104105
bool Sign(const CActiveMasternodeManager& mn_activeman);
105106
bool CheckSignature(const CBLSPublicKey& pubKey) const;
106107
bool IsValid(const CDeterministicMNList& tip_mn_list, bool useVotingKey) const;
107-
void Relay(CConnman& connman, const CDeterministicMNList& tip_mn_list) const;
108+
void Relay(CConnman& connman, const CMasternodeSync& mn_sync, const CDeterministicMNList& tip_mn_list) const;
108109

109110
const COutPoint& GetMasternodeOutpoint() const { return masternodeOutpoint; }
110111

src/init.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,7 @@ void PrepareShutdown(NodeContext& node)
305305

306306
// After all scheduled tasks have been flushed, destroy pointers
307307
// and reset all to nullptr.
308-
node.mn_sync = nullptr;
309-
::masternodeSync.reset();
308+
node.mn_sync.reset();
310309
node.sporkman.reset();
311310
node.govman.reset();
312311
node.netfulfilledman.reset();
@@ -1687,7 +1686,7 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
16871686
node.netfulfilledman = std::make_unique<CNetFulfilledRequestManager>();
16881687

16891688
assert(!node.govman);
1690-
node.govman = std::make_unique<CGovernanceManager>(*node.netfulfilledman, ::deterministicMNManager);
1689+
node.govman = std::make_unique<CGovernanceManager>(*node.netfulfilledman, ::deterministicMNManager, node.mn_sync);
16911690

16921691
assert(!node.sporkman);
16931692
node.sporkman = std::make_unique<CSporkManager>();
@@ -1716,9 +1715,8 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
17161715
}
17171716
}
17181717

1719-
assert(!::masternodeSync);
1720-
::masternodeSync = std::make_unique<CMasternodeSync>(*node.connman, *node.netfulfilledman, *node.govman);
1721-
node.mn_sync = ::masternodeSync.get();
1718+
assert(!node.mn_sync);
1719+
node.mn_sync = std::make_unique<CMasternodeSync>(*node.connman, *node.netfulfilledman, *node.govman);
17221720

17231721
fMasternodeMode = false;
17241722
std::string strMasterNodeBLSPrivKey = args.GetArg("-masternodeblsprivkey", "");
@@ -1962,7 +1960,8 @@ bool AppInitMain(const CoreContext& context, NodeContext& node, interfaces::Bloc
19621960
node.llmq_ctx->Stop();
19631961
}
19641962
node.llmq_ctx.reset();
1965-
node.llmq_ctx.reset(new LLMQContext(chainman.ActiveChainstate(), *node.connman, *node.dmnman, *node.evodb, *node.mnhf_manager, *node.sporkman, *node.mempool, node.mn_activeman, node.peerman, false, fReset || fReindexChainState));
1963+
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);
19661965
// Have to start it early to let VerifyDB check ChainLock signatures in coinbase
19671966
node.llmq_ctx->Start();
19681967

0 commit comments

Comments
 (0)