@@ -45,11 +45,12 @@ GovernanceStore::GovernanceStore() :
45
45
}
46
46
47
47
CGovernanceManager::CGovernanceManager (CMasternodeMetaMan& mn_metaman, CNetFulfilledRequestManager& netfulfilledman,
48
- const std::unique_ptr<CDeterministicMNManager>& dmnman,
48
+ const ChainstateManager& chainman, const std::unique_ptr<CDeterministicMNManager>& dmnman,
49
49
const std::unique_ptr<CMasternodeSync>& mn_sync) :
50
50
m_db{std::make_unique<db_type>(" governance.dat" , " magicGovernanceCache" )},
51
51
m_mn_metaman{mn_metaman},
52
52
m_netfulfilledman{netfulfilledman},
53
+ m_chainman{chainman},
53
54
m_dmnman{dmnman},
54
55
m_mn_sync{mn_sync},
55
56
nTimeLastDiff (0 ),
@@ -194,7 +195,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
194
195
// CHECK OBJECT AGAINST LOCAL BLOCKCHAIN
195
196
196
197
bool fMissingConfirmations = false ;
197
- bool fIsValid = govobj.IsValidLocally (tip_mn_list, strError, fMissingConfirmations , true );
198
+ bool fIsValid = govobj.IsValidLocally (tip_mn_list, m_chainman, strError, fMissingConfirmations , true );
198
199
199
200
if (fRateCheckBypassed && fIsValid && !MasternodeRateCheck (govobj, true )) {
200
201
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode rate check failed (after signature verification) - %s - (current block height %d)\n " , strHash, nCachedBlockHeight);
@@ -303,7 +304,7 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, PeerMana
303
304
304
305
// MAKE SURE THIS OBJECT IS OK
305
306
306
- if (!govobj.IsValidLocally (tip_mn_list, strError, true )) {
307
+ if (!govobj.IsValidLocally (tip_mn_list, m_chainman, strError, true )) {
307
308
LogPrint (BCLog::GOBJECT, " CGovernanceManager::AddGovernanceObject -- invalid governance object - %s - (nCachedBlockHeight %d) \n " , strError, nCachedBlockHeight);
308
309
return ;
309
310
}
@@ -387,7 +388,7 @@ void CGovernanceManager::CheckAndRemove()
387
388
// IF CACHE IS NOT DIRTY, WHY DO THIS?
388
389
if (pObj->IsSetDirtyCache ()) {
389
390
// UPDATE LOCAL VALIDITY AGAINST CRYPTO DATA
390
- pObj->UpdateLocalValidity (tip_mn_list);
391
+ pObj->UpdateLocalValidity (tip_mn_list, m_chainman );
391
392
392
393
// UPDATE SENTINEL SIGNALING VARIABLES
393
394
pObj->UpdateSentinelVariables (tip_mn_list);
@@ -612,7 +613,7 @@ std::optional<const CSuperblock> CGovernanceManager::CreateSuperblockCandidate(i
612
613
613
614
CSuperblock::GetNearestSuperblocksHeights (nHeight, nLastSuperblock, nNextSuperblock);
614
615
auto SBEpochTime = static_cast <int64_t >(GetTime<std::chrono::seconds>().count () + (nNextSuperblock - nHeight) * 2.62 * 60 );
615
- auto governanceBudget = CSuperblock::GetPaymentsLimit (nNextSuperblock);
616
+ auto governanceBudget = CSuperblock::GetPaymentsLimit (m_chainman. ActiveChain (), nNextSuperblock);
616
617
617
618
CAmount budgetAllocated{};
618
619
for (const auto & proposal : approvedProposals) {
@@ -690,7 +691,7 @@ std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigg
690
691
}
691
692
692
693
// Nobody submitted a trigger we'd like to see, so let's do it but only if we are the payee
693
- const CBlockIndex *tip = WITH_LOCK (::cs_main, return :: ChainActive ().Tip ());
694
+ const CBlockIndex *tip = WITH_LOCK (::cs_main, return m_chainman. ActiveChain ().Tip ());
694
695
const auto mnList = Assert (m_dmnman)->GetListForBlock (tip);
695
696
const auto mn_payees = mnList.GetProjectedMNPayees (tip);
696
697
@@ -706,7 +707,7 @@ std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigg
706
707
gov_sb.SetMasternodeOutpoint (mn_activeman.GetOutPoint ());
707
708
gov_sb.Sign (mn_activeman);
708
709
709
- if (std::string strError; !gov_sb.IsValidLocally (m_dmnman->GetListAtChainTip (), strError, true )) {
710
+ if (std::string strError; !gov_sb.IsValidLocally (m_dmnman->GetListAtChainTip (), m_chainman, strError, true )) {
710
711
LogPrint (BCLog::GOBJECT, " CGovernanceManager::%s Created trigger is invalid:%s\n " , __func__, strError);
711
712
return std::nullopt;
712
713
}
@@ -1140,8 +1141,8 @@ void CGovernanceManager::CheckPostponedObjects(PeerManager& peerman)
1140
1141
1141
1142
std::string strError;
1142
1143
bool fMissingConfirmations ;
1143
- if (govobj.IsCollateralValid (strError, fMissingConfirmations )) {
1144
- if (govobj.IsValidLocally (Assert (m_dmnman)->GetListAtChainTip (), strError, false )) {
1144
+ if (govobj.IsCollateralValid (m_chainman, strError, fMissingConfirmations )) {
1145
+ if (govobj.IsValidLocally (Assert (m_dmnman)->GetListAtChainTip (), m_chainman, strError, false )) {
1145
1146
AddGovernanceObject (govobj, peerman);
1146
1147
} else {
1147
1148
LogPrint (BCLog::GOBJECT, " CGovernanceManager::CheckPostponedObjects -- %s invalid\n " , nHash.ToString ());
0 commit comments