@@ -43,10 +43,13 @@ GovernanceStore::GovernanceStore() :
43
43
{
44
44
}
45
45
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) :
47
49
m_db{std::make_unique<db_type>(" governance.dat" , " magicGovernanceCache" )},
48
50
m_netfulfilledman{netfulfilledman},
49
51
m_dmnman{dmnman},
52
+ m_mn_sync{mn_sync},
50
53
nTimeLastDiff (0 ),
51
54
nCachedBlockHeight(0 ),
52
55
setRequestedObjects(),
@@ -118,15 +121,15 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
118
121
PeerMsgRet CGovernanceManager::ProcessMessage (CNode& peer, CConnman& connman, std::string_view msg_type, CDataStream& vRecv)
119
122
{
120
123
if (fDisableGovernance ) return {};
121
- if (::masternodeSync == nullptr || !::masternodeSync ->IsBlockchainSynced ()) return {};
124
+ if (m_mn_sync == nullptr || !m_mn_sync ->IsBlockchainSynced ()) return {};
122
125
123
126
const auto tip_mn_list = Assert (m_dmnman)->GetListAtChainTip ();
124
127
// ANOTHER USER IS ASKING US TO HELP THEM SYNC GOVERNANCE OBJECT DATA
125
128
if (msg_type == NetMsgType::MNGOVERNANCESYNC) {
126
129
// Ignore such requests until we are fully synced.
127
130
// We could start processing this after masternode list is synced
128
131
// 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 {};
130
133
131
134
uint256 nProp;
132
135
CBloomFilter filter;
@@ -157,7 +160,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
157
160
EraseObjectRequest (peer.GetId (), CInv (MSG_GOVERNANCE_OBJECT, nHash));
158
161
}
159
162
160
- if (!::masternodeSync ->IsBlockchainSynced ()) {
163
+ if (!m_mn_sync ->IsBlockchainSynced ()) {
161
164
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode list not synced\n " );
162
165
return {};
163
166
}
@@ -225,7 +228,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
225
228
}
226
229
227
230
// Ignore such messages until masternode list is synced
228
- if (!::masternodeSync ->IsBlockchainSynced ()) {
231
+ if (!m_mn_sync ->IsBlockchainSynced ()) {
229
232
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n " );
230
233
return {};
231
234
}
@@ -243,11 +246,11 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
243
246
CGovernanceException exception;
244
247
if (ProcessVote (&peer, vote, exception, connman)) {
245
248
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);
248
251
} else {
249
252
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 ()) {
251
254
return tl::unexpected{exception.GetNodePenalty ()};
252
255
}
253
256
return {};
@@ -273,7 +276,7 @@ void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CConnman& c
273
276
if (pairVote.second < nNow) {
274
277
fRemove = true ;
275
278
} 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);
277
280
fRemove = true ;
278
281
}
279
282
if (fRemove ) {
@@ -327,12 +330,12 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman
327
330
}
328
331
329
332
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) );
331
334
332
335
// Update the rate buffer
333
336
MasternodeRateUpdate (govobj);
334
337
335
- ::masternodeSync ->BumpAssetLastTime (" CGovernanceManager::AddGovernanceObject" );
338
+ m_mn_sync ->BumpAssetLastTime (" CGovernanceManager::AddGovernanceObject" );
336
339
337
340
// WE MIGHT HAVE PENDING/ORPHAN VOTES FOR THIS OBJECT
338
341
@@ -347,7 +350,7 @@ void CGovernanceManager::CheckAndRemove()
347
350
assert (::mmetaman->IsValid ());
348
351
349
352
// 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 ;
351
354
352
355
LogPrint (BCLog::GOBJECT, " CGovernanceManager::UpdateCachesAndClean\n " );
353
356
@@ -562,7 +565,7 @@ struct sortProposalsByVotes {
562
565
std::optional<const CSuperblock> CGovernanceManager::CreateSuperblockCandidate (int nHeight) const
563
566
{
564
567
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 ;
566
569
if (nHeight % Params ().GetConsensus ().nSuperblockCycle < Params ().GetConsensus ().nSuperblockCycle - Params ().GetConsensus ().nSuperblockMaturityWindow ) return std::nullopt ;
567
570
if (HasAlreadyVotedFundingTrigger ()) return std::nullopt ;
568
571
@@ -788,7 +791,7 @@ void CGovernanceManager::ResetVotedFundingTrigger()
788
791
void CGovernanceManager::DoMaintenance (CConnman& connman)
789
792
{
790
793
if (fDisableGovernance ) return ;
791
- if (::masternodeSync == nullptr || !::masternodeSync ->IsSynced ()) return ;
794
+ if (m_mn_sync == nullptr || !m_mn_sync ->IsSynced ()) return ;
792
795
if (ShutdownRequested ()) return ;
793
796
794
797
// CHECK OBJECTS WE'VE ASKED FOR, REMOVE OLD ENTRIES
@@ -802,7 +805,7 @@ void CGovernanceManager::DoMaintenance(CConnman& connman)
802
805
bool CGovernanceManager::ConfirmInventoryRequest (const CInv& inv)
803
806
{
804
807
// 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 ;
806
809
807
810
LOCK (cs);
808
811
@@ -855,7 +858,7 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv)
855
858
void CGovernanceManager::SyncSingleObjVotes (CNode& peer, const uint256& nProp, const CBloomFilter& filter, CConnman& connman)
856
859
{
857
860
// do not provide any data until our node is synced
858
- if (!::masternodeSync ->IsSynced ()) return ;
861
+ if (!Assert (m_mn_sync) ->IsSynced ()) return ;
859
862
860
863
int nVoteCount = 0 ;
861
864
@@ -907,7 +910,7 @@ PeerMsgRet CGovernanceManager::SyncObjects(CNode& peer, CConnman& connman) const
907
910
assert (m_netfulfilledman.IsValid ());
908
911
909
912
// do not provide any data until our node is synced
910
- if (!::masternodeSync ->IsSynced ()) return {};
913
+ if (!Assert (m_mn_sync) ->IsSynced ()) return {};
911
914
912
915
if (m_netfulfilledman.HasFulfilledRequest (peer.addr , NetMsgType::MNGOVERNANCESYNC)) {
913
916
// 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
997
1000
998
1001
fRateCheckBypassed = false ;
999
1002
1000
- if (!::masternodeSync ->IsSynced () || !fRateChecksEnabled ) {
1003
+ if (!Assert (m_mn_sync) ->IsSynced () || !fRateChecksEnabled ) {
1001
1004
return true ;
1002
1005
}
1003
1006
@@ -1055,6 +1058,15 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo
1055
1058
return false ;
1056
1059
}
1057
1060
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
+
1058
1070
bool CGovernanceManager::ProcessVote (CNode* pfrom, const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman)
1059
1071
{
1060
1072
ENTER_CRITICAL_SECTION (cs);
@@ -1111,7 +1123,7 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote,
1111
1123
1112
1124
void CGovernanceManager::CheckPostponedObjects (CConnman& connman)
1113
1125
{
1114
- if (!::masternodeSync ->IsSynced ()) return ;
1126
+ if (!Assert (m_mn_sync) ->IsSynced ()) return ;
1115
1127
1116
1128
LOCK2 (cs_main, cs);
1117
1129
@@ -1159,7 +1171,7 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman)
1159
1171
if (fValid ) {
1160
1172
if (fReady ) {
1161
1173
LogPrint (BCLog::GOBJECT, " CGovernanceManager::CheckPostponedObjects -- additional relay: hash = %s\n " , govobj.GetHash ().ToString ());
1162
- govobj.Relay (connman);
1174
+ govobj.Relay (connman, *m_mn_sync );
1163
1175
} else {
1164
1176
it++;
1165
1177
continue ;
@@ -1530,7 +1542,7 @@ void CGovernanceManager::CleanOrphanObjects()
1530
1542
1531
1543
void CGovernanceManager::RemoveInvalidVotes ()
1532
1544
{
1533
- if (!::masternodeSync ->IsSynced ()) {
1545
+ if (!Assert (m_mn_sync) ->IsSynced ()) {
1534
1546
return ;
1535
1547
}
1536
1548
0 commit comments