From 75ac7fd632dbb658e38f729ab52d31cf78aad175 Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:05:41 -0500 Subject: [PATCH 01/15] governance.* formatting and copyright bump --- src/governance.cpp | 432 +++++++++++++++++++++------------------------ src/governance.h | 80 +++++---- 2 files changed, 248 insertions(+), 264 deletions(-) diff --git a/src/governance.cpp b/src/governance.cpp index f9f231f511df..67ae01e539bf 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -1,45 +1,46 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "consensus/validation.h" -#include "validationinterface.h" #include "governance.h" +#include "consensus/validation.h" +#include "governance-classes.h" #include "governance-object.h" #include "governance-validators.h" #include "governance-vote.h" -#include "governance-classes.h" -#include "net_processing.h" -#include "netmessagemaker.h" -#include "masternode.h" #include "masternode-sync.h" +#include "masternode.h" #include "masternodeman.h" #include "messagesigner.h" +#include "net_processing.h" #include "netfulfilledman.h" +#include "netmessagemaker.h" #include "util.h" +#include "validationinterface.h" CGovernanceManager governance; int nSubmittedFinalBudget; const std::string CGovernanceManager::SERIALIZATION_VERSION_STRING = "CGovernanceManager-Version-13"; -const int CGovernanceManager::MAX_TIME_FUTURE_DEVIATION = 60*60; +const int CGovernanceManager::MAX_TIME_FUTURE_DEVIATION = 60 * 60; const int CGovernanceManager::RELIABLE_PROPAGATION_TIME = 60; -CGovernanceManager::CGovernanceManager() - : nTimeLastDiff(0), - nCachedBlockHeight(0), - mapObjects(), - mapErasedGovernanceObjects(), - mapMasternodeOrphanObjects(), - cmapVoteToObject(MAX_CACHE_SIZE), - cmapInvalidVotes(MAX_CACHE_SIZE), - cmmapOrphanVotes(MAX_CACHE_SIZE), - mapLastMasternodeObject(), - setRequestedObjects(), - fRateChecksEnabled(true), - cs() -{} +CGovernanceManager::CGovernanceManager() : + nTimeLastDiff(0), + nCachedBlockHeight(0), + mapObjects(), + mapErasedGovernanceObjects(), + mapMasternodeOrphanObjects(), + cmapVoteToObject(MAX_CACHE_SIZE), + cmapInvalidVotes(MAX_CACHE_SIZE), + cmmapOrphanVotes(MAX_CACHE_SIZE), + mapLastMasternodeObject(), + setRequestedObjects(), + fRateChecksEnabled(true), + cs() +{ +} // Accessors for thread-safe access to maps bool CGovernanceManager::HaveObjectForHash(const uint256& nHash) const @@ -80,23 +81,20 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream& LOCK(cs); CGovernanceObject* pGovobj = nullptr; - return cmapVoteToObject.Get(nHash,pGovobj) && pGovobj->GetVoteFile().SerializeVoteToStream(nHash, ss); + return cmapVoteToObject.Get(nHash, pGovobj) && pGovobj->GetVoteFile().SerializeVoteToStream(nHash, ss); } void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, CConnman& connman) { // lite mode is not supported - if(fLiteMode) return; - if(!masternodeSync.IsBlockchainSynced()) return; + if (fLiteMode) return; + if (!masternodeSync.IsBlockchainSynced()) return; // ANOTHER USER IS ASKING US TO HELP THEM SYNC GOVERNANCE OBJECT DATA - if (strCommand == NetMsgType::MNGOVERNANCESYNC) - { - - if(pfrom->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) { + if (strCommand == NetMsgType::MNGOVERNANCESYNC) { + if (pfrom->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) { LogPrint("gobject", "MNGOVERNANCESYNC -- peer=%d using obsolete version %i\n", pfrom->id, pfrom->nVersion); - connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE, - strprintf("Version must be %d or greater", MIN_GOVERNANCE_PEER_PROTO_VERSION))); + connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE, strprintf("Version must be %d or greater", MIN_GOVERNANCE_PEER_PROTO_VERSION))); return; } @@ -110,15 +108,14 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm vRecv >> nProp; - if(pfrom->nVersion >= GOVERNANCE_FILTER_PROTO_VERSION) { + if (pfrom->nVersion >= GOVERNANCE_FILTER_PROTO_VERSION) { vRecv >> filter; filter.UpdateEmptyFull(); - } - else { + } else { filter.clear(); } - if(nProp == uint256()) { + if (nProp == uint256()) { SyncAll(pfrom, connman); } else { SyncSingleObjAndItsVotes(pfrom, nProp, filter, connman); @@ -127,8 +124,7 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm } // A NEW GOVERNANCE OBJECT HAS ARRIVED - else if (strCommand == NetMsgType::MNGOVERNANCEOBJECT) - { + else if (strCommand == NetMsgType::MNGOVERNANCEOBJECT) { // MAKE SURE WE HAVE A VALID REFERENCE TO THE TIP BEFORE CONTINUING CGovernanceObject govobj; @@ -138,14 +134,13 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm pfrom->setAskFor.erase(nHash); - if(pfrom->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) { + if (pfrom->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) { LogPrint("gobject", "MNGOVERNANCEOBJECT -- peer=%d using obsolete version %i\n", pfrom->id, pfrom->nVersion); - connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE, - strprintf("Version must be %d or greater", MIN_GOVERNANCE_PEER_PROTO_VERSION))); + connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE, strprintf("Version must be %d or greater", MIN_GOVERNANCE_PEER_PROTO_VERSION))); return; } - if(!masternodeSync.IsMasternodeListSynced()) { + if (!masternodeSync.IsMasternodeListSynced()) { LogPrint("gobject", "MNGOVERNANCEOBJECT -- masternode list not synced\n"); return; } @@ -154,22 +149,22 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm LogPrint("gobject", "MNGOVERNANCEOBJECT -- Received object: %s\n", strHash); - if(!AcceptObjectMessage(nHash)) { + if (!AcceptObjectMessage(nHash)) { LogPrintf("MNGOVERNANCEOBJECT -- Received unrequested object: %s\n", strHash); return; } LOCK2(cs_main, cs); - if(mapObjects.count(nHash) || mapPostponedObjects.count(nHash) || - mapErasedGovernanceObjects.count(nHash) || mapMasternodeOrphanObjects.count(nHash)) { + if (mapObjects.count(nHash) || mapPostponedObjects.count(nHash) || + mapErasedGovernanceObjects.count(nHash) || mapMasternodeOrphanObjects.count(nHash)) { // TODO - print error code? what if it's GOVOBJ_ERROR_IMMATURE? LogPrint("gobject", "MNGOVERNANCEOBJECT -- Received already seen object: %s\n", strHash); return; } bool fRateCheckBypassed = false; - if(!MasternodeRateCheck(govobj, true, false, fRateCheckBypassed)) { + if (!MasternodeRateCheck(govobj, true, false, fRateCheckBypassed)) { LogPrintf("MNGOVERNANCEOBJECT -- masternode rate check failed - %s - (current block height %d) \n", strHash, nCachedBlockHeight); return; } @@ -181,16 +176,15 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm bool fMissingConfirmations = false; bool fIsValid = govobj.IsValidLocally(strError, fMasternodeMissing, fMissingConfirmations, true); - if(fRateCheckBypassed && (fIsValid || fMasternodeMissing)) { - if(!MasternodeRateCheck(govobj, true)) { + if (fRateCheckBypassed && (fIsValid || fMasternodeMissing)) { + if (!MasternodeRateCheck(govobj, true)) { LogPrintf("MNGOVERNANCEOBJECT -- masternode rate check failed (after signature verification) - %s - (current block height %d) \n", strHash, nCachedBlockHeight); return; } } - if(!fIsValid) { - if(fMasternodeMissing) { - + if (!fIsValid) { + if (fMasternodeMissing) { int& count = mapMasternodeOrphanCounter[govobj.GetMasternodeOutpoint()]; if (count >= 10) { LogPrint("gobject", "MNGOVERNANCEOBJECT -- Too many orphan objects, missing masternode=%s\n", govobj.GetMasternodeOutpoint().ToStringShort()); @@ -204,7 +198,7 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm ExpirationInfo info(pfrom->GetId(), GetAdjustedTime() + GOVERNANCE_ORPHAN_EXPIRATION_TIME); mapMasternodeOrphanObjects.insert(std::make_pair(nHash, object_info_pair_t(govobj, info))); LogPrintf("MNGOVERNANCEOBJECT -- Missing masternode for: %s, strError = %s\n", strHash, strError); - } else if(fMissingConfirmations) { + } else if (fMissingConfirmations) { AddPostponedObject(govobj); LogPrintf("MNGOVERNANCEOBJECT -- Not enough fee confirmations for: %s, strError = %s\n", strHash, strError); } else { @@ -220,8 +214,7 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm } // A NEW GOVERNANCE OBJECT VOTE HAS ARRIVED - else if (strCommand == NetMsgType::MNGOVERNANCEOBJECTVOTE) - { + else if (strCommand == NetMsgType::MNGOVERNANCEOBJECTVOTE) { CGovernanceVote vote; vRecv >> vote; @@ -229,14 +222,13 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm pfrom->setAskFor.erase(nHash); - if(pfrom->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) { + if (pfrom->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) { LogPrint("gobject", "MNGOVERNANCEOBJECTVOTE -- peer=%d using obsolete version %i\n", pfrom->id, pfrom->nVersion); - connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE, - strprintf("Version must be %d or greater", MIN_GOVERNANCE_PEER_PROTO_VERSION))); + connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::REJECT, strCommand, REJECT_OBSOLETE, strprintf("Version must be %d or greater", MIN_GOVERNANCE_PEER_PROTO_VERSION))); } // Ignore such messages until masternode list is synced - if(!masternodeSync.IsMasternodeListSynced()) { + if (!masternodeSync.IsMasternodeListSynced()) { LogPrint("gobject", "MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n"); return; } @@ -245,21 +237,20 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm std::string strHash = nHash.ToString(); - if(!AcceptVoteMessage(nHash)) { + if (!AcceptVoteMessage(nHash)) { LogPrint("gobject", "MNGOVERNANCEOBJECTVOTE -- Received unrequested vote object: %s, hash: %s, peer = %d\n", - vote.ToString(), strHash, pfrom->GetId()); + vote.ToString(), strHash, pfrom->GetId()); return; } CGovernanceException exception; - if(ProcessVote(pfrom, vote, exception, connman)) { + if (ProcessVote(pfrom, vote, exception, connman)) { LogPrint("gobject", "MNGOVERNANCEOBJECTVOTE -- %s new\n", strHash); masternodeSync.BumpAssetLastTime("MNGOVERNANCEOBJECTVOTE"); vote.Relay(connman); - } - else { + } else { LogPrint("gobject", "MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n", exception.what()); - if((exception.GetNodePenalty() != 0) && masternodeSync.IsSynced()) { + if ((exception.GetNodePenalty() != 0) && masternodeSync.IsSynced()) { LOCK(cs_main); Misbehaving(pfrom->GetId(), exception.GetNodePenalty()); } @@ -279,19 +270,18 @@ void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CGovernance ScopedLockBool guard(cs, fRateChecksEnabled, false); int64_t nNow = GetAdjustedTime(); - for(size_t i = 0; i < vecVotePairs.size(); ++i) { + for (size_t i = 0; i < vecVotePairs.size(); ++i) { bool fRemove = false; vote_time_pair_t& pairVote = vecVotePairs[i]; CGovernanceVote& vote = pairVote.first; CGovernanceException exception; - if(pairVote.second < nNow) { + if (pairVote.second < nNow) { fRemove = true; - } - else if(govobj.ProcessVote(nullptr, vote, exception, connman)) { + } else if (govobj.ProcessVote(nullptr, vote, exception, connman)) { vote.Relay(connman); fRemove = true; } - if(fRemove) { + if (fRemove) { cmmapOrphanVotes.Erase(nHash, pairVote); } } @@ -299,7 +289,7 @@ void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CGovernance void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman& connman, CNode* pfrom) { - DBG( std::cout << "CGovernanceManager::AddGovernanceObject START" << std::endl; ); + DBG(std::cout << "CGovernanceManager::AddGovernanceObject START" << std::endl;); uint256 nHash = govobj.GetHash(); std::string strHash = nHash.ToString(); @@ -313,7 +303,7 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman // MAKE SURE THIS OBJECT IS OK - if(!govobj.IsValidLocally(strError, true)) { + if (!govobj.IsValidLocally(strError, true)) { LogPrintf("CGovernanceManager::AddGovernanceObject -- invalid governance object - %s - (nCachedBlockHeight %d) \n", strError, nCachedBlockHeight); return; } @@ -324,20 +314,20 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman // IF WE HAVE THIS OBJECT ALREADY, WE DON'T WANT ANOTHER COPY auto objpair = mapObjects.emplace(nHash, govobj); - if(!objpair.second) { + if (!objpair.second) { LogPrintf("CGovernanceManager::AddGovernanceObject -- already have governance object %s\n", nHash.ToString()); return; } // SHOULD WE ADD THIS OBJECT TO ANY OTHER MANANGERS? - DBG( std::cout << "CGovernanceManager::AddGovernanceObject Before trigger block, GetDataAsPlainString = " - << govobj.GetDataAsPlainString() - << ", nObjectType = " << govobj.nObjectType - << std::endl; ); + DBG(std::cout << "CGovernanceManager::AddGovernanceObject Before trigger block, GetDataAsPlainString = " + << govobj.GetDataAsPlainString() + << ", nObjectType = " << govobj.nObjectType + << std::endl;); if (govobj.nObjectType == GOVERNANCE_OBJECT_TRIGGER) { - DBG( std::cout << "CGovernanceManager::AddGovernanceObject Before AddNewTrigger" << std::endl; ); + DBG(std::cout << "CGovernanceManager::AddGovernanceObject Before AddNewTrigger" << std::endl;); if (!triggerman.AddNewTrigger(nHash)) { LogPrint("gobject", "CGovernanceManager::AddGovernanceObject -- undo adding invalid trigger object: hash = %s\n", nHash.ToString()); CGovernanceObject& objref = objpair.first->second; @@ -347,7 +337,7 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman } return; } - DBG( std::cout << "CGovernanceManager::AddGovernanceObject After AddNewTrigger" << std::endl; ); + DBG(std::cout << "CGovernanceManager::AddGovernanceObject After AddNewTrigger" << std::endl;); } LogPrintf("CGovernanceManager::AddGovernanceObject -- %s new, received from %s\n", strHash, pfrom ? pfrom->GetAddrName() : "nullptr"); @@ -367,7 +357,7 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman GetMainSignals().NotifyGovernanceObject(govobj); - DBG( std::cout << "CGovernanceManager::AddGovernanceObject END" << std::endl; ); + DBG(std::cout << "CGovernanceManager::AddGovernanceObject END" << std::endl;); } void CGovernanceManager::UpdateCachesAndClean() @@ -378,9 +368,9 @@ void CGovernanceManager::UpdateCachesAndClean() LOCK2(cs_main, cs); - for(size_t i = 0; i < vecDirtyHashes.size(); ++i) { + for (size_t i = 0; i < vecDirtyHashes.size(); ++i) { object_m_it it = mapObjects.find(vecDirtyHashes[i]); - if(it == mapObjects.end()) { + if (it == mapObjects.end()) { continue; } it->second.ClearMasternodeVotes(); @@ -395,11 +385,10 @@ void CGovernanceManager::UpdateCachesAndClean() object_m_it it = mapObjects.begin(); int64_t nNow = GetAdjustedTime(); - while(it != mapObjects.end()) - { + while (it != mapObjects.end()) { CGovernanceObject* pObj = &((*it).second); - if(!pObj) { + if (!pObj) { ++it; continue; } @@ -408,7 +397,7 @@ void CGovernanceManager::UpdateCachesAndClean() std::string strHash = nHash.ToString(); // IF CACHE IS NOT DIRTY, WHY DO THIS? - if(pObj->IsSetDirtyCache()) { + if (pObj->IsSetDirtyCache()) { // UPDATE LOCAL VALIDITY AGAINST CRYPTO DATA pObj->UpdateLocalValidity(); @@ -421,30 +410,29 @@ void CGovernanceManager::UpdateCachesAndClean() int64_t nTimeSinceDeletion = nNow - pObj->GetDeletionTime(); LogPrint("gobject", "CGovernanceManager::UpdateCachesAndClean -- Checking object for deletion: %s, deletion time = %d, time since deletion = %d, delete flag = %d, expired flag = %d\n", - strHash, pObj->GetDeletionTime(), nTimeSinceDeletion, pObj->IsSetCachedDelete(), pObj->IsSetExpired()); + strHash, pObj->GetDeletionTime(), nTimeSinceDeletion, pObj->IsSetCachedDelete(), pObj->IsSetExpired()); - if((pObj->IsSetCachedDelete() || pObj->IsSetExpired()) && - (nTimeSinceDeletion >= GOVERNANCE_DELETION_DELAY)) { + if ((pObj->IsSetCachedDelete() || pObj->IsSetExpired()) && + (nTimeSinceDeletion >= GOVERNANCE_DELETION_DELAY)) { LogPrintf("CGovernanceManager::UpdateCachesAndClean -- erase obj %s\n", (*it).first.ToString()); mnodeman.RemoveGovernanceObject(pObj->GetHash()); // Remove vote references const object_ref_cm_t::list_t& listItems = cmapVoteToObject.GetItemList(); object_ref_cm_t::list_cit lit = listItems.begin(); - while(lit != listItems.end()) { - if(lit->value == pObj) { + while (lit != listItems.end()) { + if (lit->value == pObj) { uint256 nKey = lit->key; ++lit; cmapVoteToObject.Erase(nKey); - } - else { + } else { ++lit; } } int64_t nTimeExpired{0}; - if(pObj->GetObjectType() == GOVERNANCE_OBJECT_PROPOSAL) { + if (pObj->GetObjectType() == GOVERNANCE_OBJECT_PROPOSAL) { // keep hashes of deleted proposals forever nTimeExpired = std::numeric_limits::max(); } else { @@ -472,8 +460,8 @@ void CGovernanceManager::UpdateCachesAndClean() // forget about expired deleted objects hash_time_m_it s_it = mapErasedGovernanceObjects.begin(); - while(s_it != mapErasedGovernanceObjects.end()) { - if(s_it->second < nNow) + while (s_it != mapErasedGovernanceObjects.end()) { + if (s_it->second < nNow) mapErasedGovernanceObjects.erase(s_it++); else ++s_it; @@ -486,7 +474,7 @@ CGovernanceObject* CGovernanceManager::FindGovernanceObject(const uint256& nHash { LOCK(cs); - if(mapObjects.count(nHash)) + if (mapObjects.count(nHash)) return &mapObjects[nHash]; return nullptr; @@ -498,7 +486,7 @@ std::vector CGovernanceManager::GetMatchingVotes(const uint256& std::vector vecResult; object_m_cit it = mapObjects.find(nParentHash); - if(it == mapObjects.end()) { + if (it == mapObjects.end()) { return vecResult; } @@ -512,20 +500,19 @@ std::vector CGovernanceManager::GetCurrentVotes(const uint256& // Find the governance object or short-circuit. object_m_cit it = mapObjects.find(nParentHash); - if(it == mapObjects.end()) return vecResult; + if (it == mapObjects.end()) return vecResult; const CGovernanceObject& govobj = it->second; CMasternode mn; std::map mapMasternodes; - if(mnCollateralOutpointFilter.IsNull()) { + if (mnCollateralOutpointFilter.IsNull()) { mapMasternodes = mnodeman.GetFullMasternodeMap(); } else if (mnodeman.Get(mnCollateralOutpointFilter, mn)) { mapMasternodes[mnCollateralOutpointFilter] = mn; } // Loop thru each MN collateral outpoint and get the votes for the `nParentHash` governance object - for (const auto& mnpair : mapMasternodes) - { + for (const auto& mnpair : mapMasternodes) { // get a vote_rec_t from the govobj vote_rec_t voteRecord; if (!govobj.GetCurrentMNVotes(mnpair.first, voteRecord)) continue; @@ -553,7 +540,7 @@ std::vector CGovernanceManager::GetAllNewerThan(int64_ for (const auto& objPair : mapObjects) { // IF THIS OBJECT IS OLDER THAN TIME, CONTINUE - if(objPair.second.GetCreationTime() < nMoreThanTime) { + if (objPair.second.GetCreationTime() < nMoreThanTime) { continue; } @@ -569,7 +556,8 @@ std::vector CGovernanceManager::GetAllNewerThan(int64_ // Sort by votes, if there's a tie sort by their feeHash TX // struct sortProposalsByVotes { - bool operator()(const std::pair &left, const std::pair &right) { + bool operator()(const std::pair& left, const std::pair& right) + { if (left.second != right.second) return (left.second > right.second); return (UintToArith256(left.first->GetCollateralHash()) > UintToArith256(right.first->GetCollateralHash())); @@ -578,7 +566,7 @@ struct sortProposalsByVotes { void CGovernanceManager::DoMaintenance(CConnman& connman) { - if(fLiteMode || !masternodeSync.IsSynced()) return; + if (fLiteMode || !masternodeSync.IsSynced()) return; // CHECK OBJECTS WE'VE ASKED FOR, REMOVE OLD ENTRIES @@ -594,30 +582,26 @@ void CGovernanceManager::DoMaintenance(CConnman& connman) bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv) { // do not request objects until it's time to sync - if(!masternodeSync.IsWinnersListSynced()) return false; + if (!masternodeSync.IsWinnersListSynced()) return false; LOCK(cs); LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest inv = %s\n", inv.ToString()); // First check if we've already recorded this object - switch(inv.type) { - case MSG_GOVERNANCE_OBJECT: - { - if(mapObjects.count(inv.hash) == 1 || mapPostponedObjects.count(inv.hash) == 1) { + switch (inv.type) { + case MSG_GOVERNANCE_OBJECT: { + if (mapObjects.count(inv.hash) == 1 || mapPostponedObjects.count(inv.hash) == 1) { LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest already have governance object, returning false\n"); return false; } - } - break; - case MSG_GOVERNANCE_OBJECT_VOTE: - { - if(cmapVoteToObject.HasKey(inv.hash)) { + } break; + case MSG_GOVERNANCE_OBJECT_VOTE: { + if (cmapVoteToObject.HasKey(inv.hash)) { LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest already have governance vote, returning false\n"); return false; } - } - break; + } break; default: LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest unknown type, returning false\n"); return false; @@ -625,7 +609,7 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv) hash_s_t* setHash = nullptr; - switch(inv.type) { + switch (inv.type) { case MSG_GOVERNANCE_OBJECT: setHash = &setRequestedObjects; break; @@ -637,7 +621,7 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv) } hash_s_cit it = setHash->find(inv.hash); - if(it == setHash->end()) { + if (it == setHash->end()) { setHash->insert(inv.hash); LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest added inv to requested set\n"); } @@ -649,7 +633,7 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv) void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& nProp, const CBloomFilter& filter, CConnman& connman) { // do not provide any data until our node is synced - if(!masternodeSync.IsSynced()) return; + if (!masternodeSync.IsSynced()) return; int nVoteCount = 0; @@ -661,7 +645,7 @@ void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& n // single valid object and its valid votes object_m_it it = mapObjects.find(nProp); - if(it == mapObjects.end()) { + if (it == mapObjects.end()) { LogPrint("gobject", "CGovernanceManager::%s -- no matching object for hash %s, peer=%d\n", __func__, nProp.ToString(), pnode->id); return; } @@ -670,9 +654,9 @@ void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& n LogPrint("gobject", "CGovernanceManager::%s -- attempting to sync govobj: %s, peer=%d\n", __func__, strHash, pnode->id); - if(govobj.IsSetCachedDelete() || govobj.IsSetExpired()) { + if (govobj.IsSetCachedDelete() || govobj.IsSetExpired()) { LogPrintf("CGovernanceManager::%s -- not syncing deleted/expired govobj: %s, peer=%d\n", __func__, - strHash, pnode->id); + strHash, pnode->id); return; } @@ -687,7 +671,7 @@ void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& n bool onlyOwnerAllowed = govobj.GetObjectType() == GOVERNANCE_OBJECT_PROPOSAL; - if(filter.contains(nVoteHash) || !vote.IsValid(onlyOwnerAllowed)) { + if (filter.contains(nVoteHash) || !vote.IsValid(onlyOwnerAllowed)) { continue; } pnode->PushInventory(CInv(MSG_GOVERNANCE_OBJECT_VOTE, nVoteHash)); @@ -703,9 +687,9 @@ void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& n void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const { // do not provide any data until our node is synced - if(!masternodeSync.IsSynced()) return; + if (!masternodeSync.IsSynced()) return; - if(netfulfilledman.HasFulfilledRequest(pnode->addr, NetMsgType::MNGOVERNANCESYNC)) { + if (netfulfilledman.HasFulfilledRequest(pnode->addr, NetMsgType::MNGOVERNANCESYNC)) { LOCK(cs_main); // Asking for the whole list multiple times in a short period of time is no good LogPrint("gobject", "CGovernanceManager::%s -- peer already asked me for the list\n", __func__); @@ -731,9 +715,9 @@ void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const LogPrint("gobject", "CGovernanceManager::%s -- attempting to sync govobj: %s, peer=%d\n", __func__, strHash, pnode->id); - if(govobj.IsSetCachedDelete() || govobj.IsSetExpired()) { + if (govobj.IsSetCachedDelete() || govobj.IsSetExpired()) { LogPrintf("CGovernanceManager::%s -- not syncing deleted/expired govobj: %s, peer=%d\n", __func__, - strHash, pnode->id); + strHash, pnode->id); continue; } @@ -751,13 +735,13 @@ void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const void CGovernanceManager::MasternodeRateUpdate(const CGovernanceObject& govobj) { - if(govobj.GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) + if (govobj.GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) return; const COutPoint& masternodeOutpoint = govobj.GetMasternodeOutpoint(); - txout_m_it it = mapLastMasternodeObject.find(masternodeOutpoint); + txout_m_it it = mapLastMasternodeObject.find(masternodeOutpoint); - if(it == mapLastMasternodeObject.end()) + if (it == mapLastMasternodeObject.end()) it = mapLastMasternodeObject.insert(txout_m_t::value_type(masternodeOutpoint, last_object_rec(true))).first; int64_t nTimestamp = govobj.GetCreationTime(); @@ -783,15 +767,15 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo fRateCheckBypassed = false; - if(!masternodeSync.IsSynced()) { + if (!masternodeSync.IsSynced()) { return true; } - if(!fRateChecksEnabled) { + if (!fRateChecksEnabled) { return true; } - if(govobj.GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) { + if (govobj.GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) { return true; } @@ -802,23 +786,23 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo std::string strHash = govobj.GetHash().ToString(); - if(nTimestamp < nNow - 2 * nSuperblockCycleSeconds) { + if (nTimestamp < nNow - 2 * nSuperblockCycleSeconds) { LogPrintf("CGovernanceManager::MasternodeRateCheck -- object %s rejected due to too old timestamp, masternode = %s, timestamp = %d, current time = %d\n", - strHash, masternodeOutpoint.ToStringShort(), nTimestamp, nNow); + strHash, masternodeOutpoint.ToStringShort(), nTimestamp, nNow); return false; } - if(nTimestamp > nNow + MAX_TIME_FUTURE_DEVIATION) { + if (nTimestamp > nNow + MAX_TIME_FUTURE_DEVIATION) { LogPrintf("CGovernanceManager::MasternodeRateCheck -- object %s rejected due to too new (future) timestamp, masternode = %s, timestamp = %d, current time = %d\n", - strHash, masternodeOutpoint.ToStringShort(), nTimestamp, nNow); + strHash, masternodeOutpoint.ToStringShort(), nTimestamp, nNow); return false; } - txout_m_it it = mapLastMasternodeObject.find(masternodeOutpoint); - if(it == mapLastMasternodeObject.end()) + txout_m_it it = mapLastMasternodeObject.find(masternodeOutpoint); + if (it == mapLastMasternodeObject.end()) return true; - if(it->second.fStatusOK && !fForce) { + if (it->second.fStatusOK && !fForce) { fRateCheckBypassed = true; return true; } @@ -832,12 +816,12 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo buffer.AddTimestamp(nTimestamp); double dRate = buffer.GetRate(); - if(dRate < dMaxRate) { + if (dRate < dMaxRate) { return true; } LogPrintf("CGovernanceManager::MasternodeRateCheck -- Rate too high: object hash = %s, masternode = %s, object timestamp = %d, rate = %f, max rate = %f\n", - strHash, masternodeOutpoint.ToStringShort(), nTimestamp, dRate, dMaxRate); + strHash, masternodeOutpoint.ToStringShort(), nTimestamp, dRate, dMaxRate); if (fUpdateFailStatus) it->second.fStatusOK = false; @@ -851,17 +835,17 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote, uint256 nHashVote = vote.GetHash(); uint256 nHashGovobj = vote.GetParentHash(); - if(cmapVoteToObject.HasKey(nHashVote)) { + if (cmapVoteToObject.HasKey(nHashVote)) { LogPrint("gobject", "CGovernanceObject::ProcessVote -- skipping known valid vote %s for object %s\n", nHashVote.ToString(), nHashGovobj.ToString()); LEAVE_CRITICAL_SECTION(cs); return false; } - if(cmapInvalidVotes.HasKey(nHashVote)) { + if (cmapInvalidVotes.HasKey(nHashVote)) { std::ostringstream ostr; ostr << "CGovernanceManager::ProcessVote -- Old invalid vote " - << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort() - << ", governance object hash = " << nHashGovobj.ToString(); + << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort() + << ", governance object hash = " << nHashGovobj.ToString(); LogPrintf("%s\n", ostr.str()); exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_PERMANENT_ERROR, 20); LEAVE_CRITICAL_SECTION(cs); @@ -869,12 +853,12 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote, } object_m_it it = mapObjects.find(nHashGovobj); - if(it == mapObjects.end()) { + if (it == mapObjects.end()) { std::ostringstream ostr; ostr << "CGovernanceManager::ProcessVote -- Unknown parent object " << nHashGovobj.ToString() << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort(); exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING); - if(cmmapOrphanVotes.Insert(nHashGovobj, vote_time_pair_t(vote, GetAdjustedTime() + GOVERNANCE_ORPHAN_EXPIRATION_TIME))) { + if (cmmapOrphanVotes.Insert(nHashGovobj, vote_time_pair_t(vote, GetAdjustedTime() + GOVERNANCE_ORPHAN_EXPIRATION_TIME))) { LEAVE_CRITICAL_SECTION(cs); RequestGovernanceObject(pfrom, nHashGovobj, connman); LogPrintf("%s\n", ostr.str()); @@ -888,7 +872,7 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote, CGovernanceObject& govobj = it->second; - if(govobj.IsSetCachedDelete() || govobj.IsSetExpired()) { + if (govobj.IsSetCachedDelete() || govobj.IsSetExpired()) { LogPrint("gobject", "CGovernanceObject::ProcessVote -- ignoring vote for expired or deleted object, hash = %s\n", nHashGovobj.ToString()); LEAVE_CRITICAL_SECTION(cs); return false; @@ -916,19 +900,19 @@ void CGovernanceManager::CheckMasternodeOrphanObjects(CConnman& connman) int64_t nNow = GetAdjustedTime(); ScopedLockBool guard(cs, fRateChecksEnabled, false); object_info_m_it it = mapMasternodeOrphanObjects.begin(); - while(it != mapMasternodeOrphanObjects.end()) { + while (it != mapMasternodeOrphanObjects.end()) { object_info_pair_t& pair = it->second; CGovernanceObject& govobj = pair.first; - if(pair.second.nExpirationTime >= nNow) { + if (pair.second.nExpirationTime >= nNow) { std::string strError; bool fMasternodeMissing = false; bool fConfirmationsMissing = false; bool fIsValid = govobj.IsValidLocally(strError, fMasternodeMissing, fConfirmationsMissing, true); - if(fIsValid) { + if (fIsValid) { AddGovernanceObject(govobj, connman); - } else if(fMasternodeMissing) { + } else if (fMasternodeMissing) { ++it; continue; } @@ -938,7 +922,7 @@ void CGovernanceManager::CheckMasternodeOrphanObjects(CConnman& connman) } auto it_count = mapMasternodeOrphanCounter.find(govobj.GetMasternodeOutpoint()); - if(--it_count->second == 0) + if (--it_count->second == 0) mapMasternodeOrphanCounter.erase(it_count); mapMasternodeOrphanObjects.erase(it++); @@ -947,13 +931,12 @@ void CGovernanceManager::CheckMasternodeOrphanObjects(CConnman& connman) void CGovernanceManager::CheckPostponedObjects(CConnman& connman) { - if(!masternodeSync.IsSynced()) return; + if (!masternodeSync.IsSynced()) return; LOCK2(cs_main, cs); // Check postponed proposals - for(object_m_it it = mapPostponedObjects.begin(); it != mapPostponedObjects.end();) { - + for (object_m_it it = mapPostponedObjects.begin(); it != mapPostponedObjects.end();) { const uint256& nHash = it->first; CGovernanceObject& govobj = it->second; @@ -961,14 +944,13 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman) std::string strError; bool fMissingConfirmations; - if (govobj.IsCollateralValid(strError, fMissingConfirmations)) - { - if(govobj.IsValidLocally(strError, false)) + if (govobj.IsCollateralValid(strError, fMissingConfirmations)) { + if (govobj.IsValidLocally(strError, false)) AddGovernanceObject(govobj, connman); else LogPrintf("CGovernanceManager::CheckPostponedObjects -- %s invalid\n", nHash.ToString()); - } else if(fMissingConfirmations) { + } else if (fMissingConfirmations) { // wait for more confirmations ++it; continue; @@ -983,11 +965,9 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman) int64_t nNow = GetAdjustedTime(); int64_t nSuperblockCycleSeconds = Params().GetConsensus().nSuperblockCycle * Params().GetConsensus().nPowTargetSpacing; - for(hash_s_it it = setAdditionalRelayObjects.begin(); it != setAdditionalRelayObjects.end();) { - + for (hash_s_it it = setAdditionalRelayObjects.begin(); it != setAdditionalRelayObjects.end();) { object_m_it itObject = mapObjects.find(*it); - if(itObject != mapObjects.end()) { - + if (itObject != mapObjects.end()) { CGovernanceObject& govobj = itObject->second; int64_t nTimestamp = govobj.GetCreationTime(); @@ -995,8 +975,8 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman) bool fValid = (nTimestamp <= nNow + MAX_TIME_FUTURE_DEVIATION) && (nTimestamp >= nNow - 2 * nSuperblockCycleSeconds); bool fReady = (nTimestamp <= nNow + MAX_TIME_FUTURE_DEVIATION - RELIABLE_PROPAGATION_TIME); - if(fValid) { - if(fReady) { + if (fValid) { + if (fReady) { LogPrintf("CGovernanceManager::CheckPostponedObjects -- additional relay: hash = %s\n", govobj.GetHash().ToString()); govobj.Relay(connman); } else { @@ -1015,7 +995,7 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman) void CGovernanceManager::RequestGovernanceObject(CNode* pfrom, const uint256& nHash, CConnman& connman, bool fUseFilter) { - if(!pfrom) { + if (!pfrom) { return; } @@ -1023,7 +1003,7 @@ void CGovernanceManager::RequestGovernanceObject(CNode* pfrom, const uint256& nH CNetMsgMaker msgMaker(pfrom->GetSendVersion()); - if(pfrom->nVersion < GOVERNANCE_FILTER_PROTO_VERSION) { + if (pfrom->nVersion < GOVERNANCE_FILTER_PROTO_VERSION) { connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::MNGOVERNANCESYNC, nHash)); return; } @@ -1032,15 +1012,15 @@ void CGovernanceManager::RequestGovernanceObject(CNode* pfrom, const uint256& nH filter.clear(); int nVoteCount = 0; - if(fUseFilter) { + if (fUseFilter) { LOCK(cs); CGovernanceObject* pObj = FindGovernanceObject(nHash); - if(pObj) { + if (pObj) { filter = CBloomFilter(Params().GetConsensus().nGovernanceFilterElements, GOVERNANCE_FILTER_FP_RATE, GetRandInt(999999), BLOOM_UPDATE_ALL); std::vector vecVotes = pObj->GetVoteFile().GetVotes(); nVoteCount = vecVotes.size(); - for(size_t i = 0; i < vecVotes.size(); ++i) { + for (size_t i = 0; i < vecVotes.size(); ++i) { filter.insert(vecVotes[i].GetHash()); } } @@ -1052,7 +1032,7 @@ void CGovernanceManager::RequestGovernanceObject(CNode* pfrom, const uint256& nH int CGovernanceManager::RequestGovernanceObjectVotes(CNode* pnode, CConnman& connman) { - if(pnode->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) return -3; + if (pnode->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) return -3; std::vector vNodesCopy; vNodesCopy.push_back(pnode); return RequestGovernanceObjectVotes(vNodesCopy, connman); @@ -1062,7 +1042,7 @@ int CGovernanceManager::RequestGovernanceObjectVotes(const std::vector& { static std::map > mapAskedRecently; - if(vNodesCopy.empty()) return -1; + if (vNodesCopy.empty()) return -1; int64_t nNow = GetTime(); int nTimeout = 60 * 60; @@ -1078,30 +1058,30 @@ int CGovernanceManager::RequestGovernanceObjectVotes(const std::vector& // On mainnet nMaxObjRequestsPerNode is always set to 1. int nMaxObjRequestsPerNode = 1; size_t nProjectedVotes = 2000; - if(Params().NetworkIDString() != CBaseChainParams::MAIN) { + if (Params().NetworkIDString() != CBaseChainParams::MAIN) { nMaxObjRequestsPerNode = std::max(1, int(nProjectedVotes / std::max(1, mnodeman.size()))); } { LOCK2(cs_main, cs); - if(mapObjects.empty()) return -2; + if (mapObjects.empty()) return -2; for (const auto& objPair : mapObjects) { uint256 nHash = objPair.first; - if(mapAskedRecently.count(nHash)) { + if (mapAskedRecently.count(nHash)) { auto it = mapAskedRecently[nHash].begin(); - while(it != mapAskedRecently[nHash].end()) { - if(it->second < nNow) { + while (it != mapAskedRecently[nHash].end()) { + if (it->second < nNow) { mapAskedRecently[nHash].erase(it++); } else { ++it; } } - if(mapAskedRecently[nHash].size() >= nPeersPerHashMax) continue; + if (mapAskedRecently[nHash].size() >= nPeersPerHashMax) continue; } - if(objPair.second.nObjectType == GOVERNANCE_OBJECT_TRIGGER) { + if (objPair.second.nObjectType == GOVERNANCE_OBJECT_TRIGGER) { vTriggerObjHashes.push_back(nHash); } else { vOtherObjHashes.push_back(nHash); @@ -1110,7 +1090,7 @@ int CGovernanceManager::RequestGovernanceObjectVotes(const std::vector& } LogPrint("gobject", "CGovernanceManager::RequestGovernanceObjectVotes -- start: vTriggerObjHashes %d vOtherObjHashes %d mapAskedRecently %d\n", - vTriggerObjHashes.size(), vOtherObjHashes.size(), mapAskedRecently.size()); + vTriggerObjHashes.size(), vOtherObjHashes.size(), mapAskedRecently.size()); FastRandomContext insecure_rand; std::random_shuffle(vTriggerObjHashes.begin(), vTriggerObjHashes.end(), insecure_rand); @@ -1120,10 +1100,10 @@ int CGovernanceManager::RequestGovernanceObjectVotes(const std::vector& uint256 nHashGovobj; // ask for triggers first - if(vTriggerObjHashes.size()) { + if (vTriggerObjHashes.size()) { nHashGovobj = vTriggerObjHashes.back(); } else { - if(vOtherObjHashes.empty()) break; + if (vOtherObjHashes.empty()) break; nHashGovobj = vOtherObjHashes.back(); } bool fAsked = false; @@ -1132,31 +1112,31 @@ int CGovernanceManager::RequestGovernanceObjectVotes(const std::vector& // they stay connected for a short period of time and it's possible that we won't get everything we should. // Only use outbound connections - inbound connection could be a "masternode" connection // initiated from another node, so skip it too. - if(pnode->fMasternode || (fMasternodeMode && pnode->fInbound)) continue; + if (pnode->fMasternode || (fMasternodeMode && pnode->fInbound)) continue; // only use up to date peers - if(pnode->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) continue; + if (pnode->nVersion < MIN_GOVERNANCE_PEER_PROTO_VERSION) continue; // stop early to prevent setAskFor overflow size_t nProjectedSize = pnode->setAskFor.size() + nProjectedVotes; - if(nProjectedSize > SETASKFOR_MAX_SZ/2) continue; + if (nProjectedSize > SETASKFOR_MAX_SZ / 2) continue; // to early to ask the same node - if(mapAskedRecently[nHashGovobj].count(pnode->addr)) continue; + if (mapAskedRecently[nHashGovobj].count(pnode->addr)) continue; RequestGovernanceObject(pnode, nHashGovobj, connman, true); mapAskedRecently[nHashGovobj][pnode->addr] = nNow + nTimeout; fAsked = true; // stop loop if max number of peers per obj was asked - if(mapAskedRecently[nHashGovobj].size() >= nPeersPerHashMax) break; + if (mapAskedRecently[nHashGovobj].size() >= nPeersPerHashMax) break; } // NOTE: this should match `if` above (the one before `while`) - if(vTriggerObjHashes.size()) { + if (vTriggerObjHashes.size()) { vTriggerObjHashes.pop_back(); } else { vOtherObjHashes.pop_back(); } - if(!fAsked) i--; + if (!fAsked) i--; } LogPrint("gobject", "CGovernanceManager::RequestGovernanceObjectVotes -- end: vTriggerObjHashes %d vOtherObjHashes %d mapAskedRecently %d\n", - vTriggerObjHashes.size(), vOtherObjHashes.size(), mapAskedRecently.size()); + vTriggerObjHashes.size(), vOtherObjHashes.size(), mapAskedRecently.size()); return int(vTriggerObjHashes.size() + vOtherObjHashes.size()); } @@ -1176,7 +1156,7 @@ bool CGovernanceManager::AcceptVoteMessage(const uint256& nHash) bool CGovernanceManager::AcceptMessage(const uint256& nHash, hash_s_t& setHash) { hash_s_it it = setHash.find(nHash); - if(it == setHash.end()) { + if (it == setHash.end()) { // We never requested this return false; } @@ -1193,7 +1173,7 @@ void CGovernanceManager::RebuildIndexes() for (auto& objPair : mapObjects) { CGovernanceObject& govobj = objPair.second; std::vector vecVotes = govobj.GetVoteFile().GetVotes(); - for(size_t i = 0; i < vecVotes.size(); ++i) { + for (size_t i = 0; i < vecVotes.size(); ++i) { cmapVoteToObject.Insert(vecVotes[i].GetHash(), &govobj); } } @@ -1206,7 +1186,7 @@ void CGovernanceManager::AddCachedTriggers() for (auto& objpair : mapObjects) { CGovernanceObject& govobj = objpair.second; - if(govobj.nObjectType != GOVERNANCE_OBJECT_TRIGGER) { + if (govobj.nObjectType != GOVERNANCE_OBJECT_TRIGGER) { continue; } @@ -1239,23 +1219,23 @@ std::string CGovernanceManager::ToString() const int nOtherCount = 0; for (const auto& objPair : mapObjects) { - switch(objPair.second.GetObjectType()) { - case GOVERNANCE_OBJECT_PROPOSAL: - nProposalCount++; - break; - case GOVERNANCE_OBJECT_TRIGGER: - nTriggerCount++; - break; - default: - nOtherCount++; - break; + switch (objPair.second.GetObjectType()) { + case GOVERNANCE_OBJECT_PROPOSAL: + nProposalCount++; + break; + case GOVERNANCE_OBJECT_TRIGGER: + nTriggerCount++; + break; + default: + nOtherCount++; + break; } } return strprintf("Governance Objects: %d (Proposals: %d, Triggers: %d, Other: %d; Erased: %d), Votes: %d", - (int)mapObjects.size(), - nProposalCount, nTriggerCount, nOtherCount, (int)mapErasedGovernanceObjects.size(), - (int)cmapVoteToObject.GetSize()); + (int)mapObjects.size(), + nProposalCount, nTriggerCount, nOtherCount, (int)mapErasedGovernanceObjects.size(), + (int)cmapVoteToObject.GetSize()); } UniValue CGovernanceManager::ToJson() const @@ -1267,16 +1247,16 @@ UniValue CGovernanceManager::ToJson() const int nOtherCount = 0; for (const auto& objpair : mapObjects) { - switch(objpair.second.GetObjectType()) { - case GOVERNANCE_OBJECT_PROPOSAL: - nProposalCount++; - break; - case GOVERNANCE_OBJECT_TRIGGER: - nTriggerCount++; - break; - default: - nOtherCount++; - break; + switch (objpair.second.GetObjectType()) { + case GOVERNANCE_OBJECT_PROPOSAL: + nProposalCount++; + break; + case GOVERNANCE_OBJECT_TRIGGER: + nTriggerCount++; + break; + default: + nOtherCount++; + break; } } @@ -1290,14 +1270,14 @@ UniValue CGovernanceManager::ToJson() const return jsonObj; } -void CGovernanceManager::UpdatedBlockTip(const CBlockIndex *pindex, CConnman& connman) +void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman) { // Note this gets called from ActivateBestChain without cs_main being held // so it should be safe to lock our mutex here without risking a deadlock // On the other hand it should be safe for us to access pindex without holding a lock // on cs_main because the CBlockIndex objects are dynamically allocated and // presumably never deleted. - if(!pindex) { + if (!pindex) { return; } @@ -1318,20 +1298,20 @@ void CGovernanceManager::RequestOrphanObjects(CConnman& connman) std::vector vecHashes; LOCK(cs); cmmapOrphanVotes.GetKeys(vecHashes); - for(size_t i = 0; i < vecHashes.size(); ++i) { + for (size_t i = 0; i < vecHashes.size(); ++i) { const uint256& nHash = vecHashes[i]; - if(mapObjects.find(nHash) == mapObjects.end()) { + if (mapObjects.find(nHash) == mapObjects.end()) { vecHashesFiltered.push_back(nHash); } } } LogPrint("gobject", "CGovernanceObject::RequestOrphanObjects -- number objects = %d\n", vecHashesFiltered.size()); - for(size_t i = 0; i < vecHashesFiltered.size(); ++i) { + for (size_t i = 0; i < vecHashesFiltered.size(); ++i) { const uint256& nHash = vecHashesFiltered[i]; - for(size_t j = 0; j < vNodesCopy.size(); ++j) { + for (size_t j = 0; j < vNodesCopy.size(); ++j) { CNode* pnode = vNodesCopy[j]; - if(pnode->fMasternode) { + if (pnode->fMasternode) { continue; } RequestGovernanceObject(pnode, nHash, connman); @@ -1349,11 +1329,11 @@ void CGovernanceManager::CleanOrphanObjects() int64_t nNow = GetAdjustedTime(); vote_cmm_t::list_cit it = items.begin(); - while(it != items.end()) { + while (it != items.end()) { vote_cmm_t::list_cit prevIt = it; ++it; const vote_time_pair_t& pairVote = prevIt->value; - if(pairVote.second < nNow) { + if (pairVote.second < nNow) { cmmapOrphanVotes.Erase(prevIt->key, prevIt->value); } } diff --git a/src/governance.h b/src/governance.h index 9a0bac58d1b3..6d07fdcafbbc 100644 --- a/src/governance.h +++ b/src/governance.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -29,7 +29,8 @@ class CGovernanceVote; extern CGovernanceManager governance; struct ExpirationInfo { - ExpirationInfo(int64_t _nExpirationTime, int _idFrom) : nExpirationTime(_nExpirationTime), idFrom(_idFrom) {} + ExpirationInfo(int64_t _nExpirationTime, int _idFrom) : + nExpirationTime(_nExpirationTime), idFrom(_idFrom) {} int64_t nExpirationTime; NodeId idFrom; @@ -51,16 +52,17 @@ class CRateCheckBuffer bool fBufferEmpty; public: - CRateCheckBuffer() - : vecTimestamps(RATE_BUFFER_SIZE), - nDataStart(0), - nDataEnd(0), - fBufferEmpty(true) - {} + CRateCheckBuffer() : + vecTimestamps(RATE_BUFFER_SIZE), + nDataStart(0), + nDataEnd(0), + fBufferEmpty(true) + { + } void AddTimestamp(int64_t nTimestamp) { - if((nDataEnd == nDataStart) && !fBufferEmpty) { + if ((nDataEnd == nDataStart) && !fBufferEmpty) { // Buffer full, discard 1st element nDataStart = (nDataStart + 1) % RATE_BUFFER_SIZE; } @@ -73,15 +75,15 @@ class CRateCheckBuffer { int nIndex = nDataStart; int64_t nMin = std::numeric_limits::max(); - if(fBufferEmpty) { + if (fBufferEmpty) { return nMin; } do { - if(vecTimestamps[nIndex] < nMin) { + if (vecTimestamps[nIndex] < nMin) { nMin = vecTimestamps[nIndex]; } nIndex = (nIndex + 1) % RATE_BUFFER_SIZE; - } while(nIndex != nDataEnd); + } while (nIndex != nDataEnd); return nMin; } @@ -89,28 +91,27 @@ class CRateCheckBuffer { int nIndex = nDataStart; int64_t nMax = 0; - if(fBufferEmpty) { + if (fBufferEmpty) { return nMax; } do { - if(vecTimestamps[nIndex] > nMax) { + if (vecTimestamps[nIndex] > nMax) { nMax = vecTimestamps[nIndex]; } nIndex = (nIndex + 1) % RATE_BUFFER_SIZE; - } while(nIndex != nDataEnd); + } while (nIndex != nDataEnd); return nMax; } int GetCount() { int nCount = 0; - if(fBufferEmpty) { + if (fBufferEmpty) { return 0; } - if(nDataEnd > nDataStart) { + if (nDataEnd > nDataStart) { nCount = nDataEnd - nDataStart; - } - else { + } else { nCount = RATE_BUFFER_SIZE - nDataStart + nDataEnd; } @@ -120,12 +121,12 @@ class CRateCheckBuffer double GetRate() { int nCount = GetCount(); - if(nCount < RATE_BUFFER_SIZE) { + if (nCount < RATE_BUFFER_SIZE) { return 0.0; } int64_t nMin = GetMinTimestamp(); int64_t nMax = GetMaxTimestamp(); - if(nMin == nMax) { + if (nMin == nMax) { // multiple objects with the same timestamp => infinite rate return 1.0e10; } @@ -153,10 +154,11 @@ class CGovernanceManager public: // Types struct last_object_rec { - last_object_rec(bool fStatusOKIn = true) - : triggerBuffer(), - fStatusOK(fStatusOKIn) - {} + last_object_rec(bool fStatusOKIn = true) : + triggerBuffer(), + fStatusOK(fStatusOKIn) + { + } ADD_SERIALIZE_METHODS; @@ -192,7 +194,7 @@ class CGovernanceManager typedef object_m_t::size_type size_type; - typedef std::map txout_m_t; + typedef std::map txout_m_t; typedef txout_m_t::iterator txout_m_it; @@ -265,7 +267,8 @@ class CGovernanceManager bool fPrevValue; public: - ScopedLockBool(CCriticalSection& _cs, bool& _ref, bool _value) : ref(_ref) + ScopedLockBool(CCriticalSection& _cs, bool& _ref, bool _value) : + ref(_ref) { AssertLockHeld(_cs); fPrevValue = ref; @@ -311,7 +314,7 @@ class CGovernanceManager void UpdateCachesAndClean(); - void CheckAndRemove() {UpdateCachesAndClean();} + void CheckAndRemove() { UpdateCachesAndClean(); } void Clear() { @@ -332,13 +335,13 @@ class CGovernanceManager ADD_SERIALIZE_METHODS; template - inline void SerializationOp(Stream& s, Operation ser_action) { + inline void SerializationOp(Stream& s, Operation ser_action) + { LOCK(cs); std::string strVersion; - if(ser_action.ForRead()) { + if (ser_action.ForRead()) { READWRITE(strVersion); - } - else { + } else { strVersion = SERIALIZATION_VERSION_STRING; READWRITE(strVersion); } @@ -348,13 +351,13 @@ class CGovernanceManager READWRITE(cmmapOrphanVotes); READWRITE(mapObjects); READWRITE(mapLastMasternodeObject); - if(ser_action.ForRead() && (strVersion != SERIALIZATION_VERSION_STRING)) { + if (ser_action.ForRead() && (strVersion != SERIALIZATION_VERSION_STRING)) { Clear(); return; } } - void UpdatedBlockTip(const CBlockIndex *pindex, CConnman& connman); + void UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman); int64_t GetLastDiffTime() const { return nTimeLastDiff; } void UpdateLastDiffTime(int64_t nTimeIn) { nTimeLastDiff = nTimeIn; } @@ -387,9 +390,10 @@ class CGovernanceManager bool MasternodeRateCheck(const CGovernanceObject& govobj, bool fUpdateFailStatus, bool fForce, bool& fRateCheckBypassed); - bool ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman) { + bool ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman) + { bool fOK = ProcessVote(nullptr, vote, exception, connman); - if(fOK) { + if (fOK) { vote.Relay(connman); } return fOK; @@ -401,7 +405,8 @@ class CGovernanceManager void CheckPostponedObjects(CConnman& connman); - bool AreRateChecksEnabled() const { + bool AreRateChecksEnabled() const + { LOCK(cs); return fRateChecksEnabled; } @@ -443,7 +448,6 @@ class CGovernanceManager void RequestOrphanObjects(CConnman& connman); void CleanOrphanObjects(); - }; #endif From 03eed5a1f4d34f841aef78ed0aed6ae84df2c860 Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:14:36 -0500 Subject: [PATCH 02/15] manual changes gov.cpp --- src/governance.cpp | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/governance.cpp b/src/governance.cpp index 67ae01e539bf..3169d1ccda98 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -461,10 +461,11 @@ void CGovernanceManager::UpdateCachesAndClean() // forget about expired deleted objects hash_time_m_it s_it = mapErasedGovernanceObjects.begin(); while (s_it != mapErasedGovernanceObjects.end()) { - if (s_it->second < nNow) + if (s_it->second < nNow) { mapErasedGovernanceObjects.erase(s_it++); - else + } else { ++s_it; + } } LogPrintf("CGovernanceManager::UpdateCachesAndClean -- %s\n", ToString()); @@ -474,8 +475,7 @@ CGovernanceObject* CGovernanceManager::FindGovernanceObject(const uint256& nHash { LOCK(cs); - if (mapObjects.count(nHash)) - return &mapObjects[nHash]; + if (mapObjects.count(nHash)) return &mapObjects[nHash]; return nullptr; } @@ -558,8 +558,7 @@ std::vector CGovernanceManager::GetAllNewerThan(int64_ struct sortProposalsByVotes { bool operator()(const std::pair& left, const std::pair& right) { - if (left.second != right.second) - return (left.second > right.second); + if (left.second != right.second) return (left.second > right.second); return (UintToArith256(left.first->GetCollateralHash()) > UintToArith256(right.first->GetCollateralHash())); } }; @@ -735,14 +734,14 @@ void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const void CGovernanceManager::MasternodeRateUpdate(const CGovernanceObject& govobj) { - if (govobj.GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) - return; + if (govobj.GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) return; const COutPoint& masternodeOutpoint = govobj.GetMasternodeOutpoint(); txout_m_it it = mapLastMasternodeObject.find(masternodeOutpoint); - if (it == mapLastMasternodeObject.end()) + if (it == mapLastMasternodeObject.end()) { it = mapLastMasternodeObject.insert(txout_m_t::value_type(masternodeOutpoint, last_object_rec(true))).first; + } int64_t nTimestamp = govobj.GetCreationTime(); it->second.triggerBuffer.AddTimestamp(nTimestamp); @@ -767,11 +766,7 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo fRateCheckBypassed = false; - if (!masternodeSync.IsSynced()) { - return true; - } - - if (!fRateChecksEnabled) { + if (!masternodeSync.IsSynced() || !fRateChecksEnabled) { return true; } @@ -799,8 +794,7 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo } txout_m_it it = mapLastMasternodeObject.find(masternodeOutpoint); - if (it == mapLastMasternodeObject.end()) - return true; + if (it == mapLastMasternodeObject.end()) return true; if (it->second.fStatusOK && !fForce) { fRateCheckBypassed = true; @@ -823,8 +817,7 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo LogPrintf("CGovernanceManager::MasternodeRateCheck -- Rate too high: object hash = %s, masternode = %s, object timestamp = %d, rate = %f, max rate = %f\n", strHash, masternodeOutpoint.ToStringShort(), nTimestamp, dRate, dMaxRate); - if (fUpdateFailStatus) - it->second.fStatusOK = false; + if (fUpdateFailStatus) it->second.fStatusOK = false; return false; } @@ -945,10 +938,11 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman) std::string strError; bool fMissingConfirmations; if (govobj.IsCollateralValid(strError, fMissingConfirmations)) { - if (govobj.IsValidLocally(strError, false)) + if (govobj.IsValidLocally(strError, false)) { AddGovernanceObject(govobj, connman); - else + } else { LogPrintf("CGovernanceManager::CheckPostponedObjects -- %s invalid\n", nHash.ToString()); + } } else if (fMissingConfirmations) { // wait for more confirmations From 7659d13a5f811db3c10eee0394060d70be6d9496 Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:33:12 -0500 Subject: [PATCH 03/15] clang and copyright bump --- src/governance-classes.cpp | 311 ++++++++++++++++++------------------- src/governance-classes.h | 41 +++-- 2 files changed, 170 insertions(+), 182 deletions(-) diff --git a/src/governance-classes.cpp b/src/governance-classes.cpp index e21232fa6252..8af9fe0c9695 100644 --- a/src/governance-classes.cpp +++ b/src/governance-classes.cpp @@ -1,14 +1,14 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. //#define ENABLE_DASH_DEBUG -#include "core_io.h" #include "governance-classes.h" +#include "core_io.h" #include "init.h" -#include "validation.h" #include "utilstrencodings.h" +#include "validation.h" #include @@ -24,19 +24,19 @@ std::vector SplitBy(const std::string& strCommand, const std::strin std::vector vParts; boost::split(vParts, strCommand, boost::is_any_of(strDelimit)); - for(int q=0; q<(int)vParts.size(); q++) { - if(strDelimit.find(vParts[q]) != std::string::npos) { - vParts.erase(vParts.begin()+q); + for (int q = 0; q < (int)vParts.size(); q++) { + if (strDelimit.find(vParts[q]) != std::string::npos) { + vParts.erase(vParts.begin() + q); --q; } } - return vParts; + return vParts; } CAmount ParsePaymentAmount(const std::string& strAmount) { - DBG( std::cout << "ParsePaymentAmount Start: strAmount = " << strAmount << std::endl; ); + DBG(std::cout << "ParsePaymentAmount Start: strAmount = " << strAmount << std::endl;); CAmount nAmount = 0; if (strAmount.empty()) { @@ -44,7 +44,7 @@ CAmount ParsePaymentAmount(const std::string& strAmount) ostr << "ParsePaymentAmount: Amount is empty"; throw std::runtime_error(ostr.str()); } - if(strAmount.size() > 20) { + if (strAmount.size() > 20) { // String is much too long, the functions below impose stricter // requirements std::ostringstream ostr; @@ -70,7 +70,7 @@ CAmount ParsePaymentAmount(const std::string& strAmount) } // Make sure there's no more than 1 decimal point - if ((pos != std::string::npos) && (strAmount.find(".", pos+1) != std::string::npos)) { + if ((pos != std::string::npos) && (strAmount.find(".", pos + 1) != std::string::npos)) { std::ostringstream ostr; ostr << "ParsePaymentAmount: Invalid amount string, too many decimal points"; throw std::runtime_error(ostr.str()); @@ -91,7 +91,7 @@ CAmount ParsePaymentAmount(const std::string& strAmount) throw std::runtime_error(ostr.str()); } - DBG( std::cout << "ParsePaymentAmount Returning true nAmount = " << nAmount << std::endl; ); + DBG(std::cout << "ParsePaymentAmount Returning true nAmount = " << nAmount << std::endl;); return nAmount; } @@ -102,44 +102,42 @@ CAmount ParsePaymentAmount(const std::string& strAmount) bool CGovernanceTriggerManager::AddNewTrigger(uint256 nHash) { - DBG( std::cout << "CGovernanceTriggerManager::AddNewTrigger: Start" << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::AddNewTrigger: Start" << std::endl;); AssertLockHeld(governance.cs); // IF WE ALREADY HAVE THIS HASH, RETURN - if(mapTrigger.count(nHash)) { + if (mapTrigger.count(nHash)) { DBG( std::cout << "CGovernanceTriggerManager::AddNewTrigger: Already have hash" - << ", nHash = " << nHash.GetHex() - << ", count = " << mapTrigger.count(nHash) - << ", mapTrigger.size() = " << mapTrigger.size() - << std::endl; ); + << ", nHash = " << nHash.GetHex() + << ", count = " << mapTrigger.count(nHash) + << ", mapTrigger.size() = " << mapTrigger.size() + << std::endl;); return false; } CSuperblock_sptr pSuperblock; - try { + try { CSuperblock_sptr pSuperblockTmp(new CSuperblock(nHash)); pSuperblock = pSuperblockTmp; - } - catch(std::exception& e) { - DBG( std::cout << "CGovernanceTriggerManager::AddNewTrigger Error creating superblock" - << ", e.what() = " << e.what() - << std::endl; ); + } catch (std::exception& e) { + DBG(std::cout << "CGovernanceTriggerManager::AddNewTrigger Error creating superblock" + << ", e.what() = " << e.what() + << std::endl;); LogPrintf("CGovernanceTriggerManager::AddNewTrigger -- Error creating superblock: %s\n", e.what()); return false; - } - catch(...) { + } catch (...) { LogPrintf("CGovernanceTriggerManager::AddNewTrigger: Unknown Error creating superblock\n"); - DBG( std::cout << "CGovernanceTriggerManager::AddNewTrigger Error creating superblock catchall" << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::AddNewTrigger Error creating superblock catchall" << std::endl;); return false; } pSuperblock->SetStatus(SEEN_OBJECT_IS_VALID); - DBG( std::cout << "CGovernanceTriggerManager::AddNewTrigger: Inserting trigger" << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::AddNewTrigger: Inserting trigger" << std::endl;); mapTrigger.insert(std::make_pair(nHash, pSuperblock)); - DBG( std::cout << "CGovernanceTriggerManager::AddNewTrigger: End" << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::AddNewTrigger: End" << std::endl;); return true; } @@ -153,33 +151,33 @@ bool CGovernanceTriggerManager::AddNewTrigger(uint256 nHash) void CGovernanceTriggerManager::CleanAndRemove() { LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- Start\n"); - DBG( std::cout << "CGovernanceTriggerManager::CleanAndRemove: Start" << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::CleanAndRemove: Start" << std::endl;); AssertLockHeld(governance.cs); // Remove triggers that are invalid or expired - DBG( std::cout << "CGovernanceTriggerManager::CleanAndRemove: mapTrigger.size() = " << mapTrigger.size() << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::CleanAndRemove: mapTrigger.size() = " << mapTrigger.size() << std::endl;); LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- mapTrigger.size() = %d\n", mapTrigger.size()); trigger_m_it it = mapTrigger.begin(); - while(it != mapTrigger.end()) { + while (it != mapTrigger.end()) { bool remove = false; CGovernanceObject* pObj = nullptr; CSuperblock_sptr& pSuperblock = it->second; - if(!pSuperblock) { - DBG( std::cout << "CGovernanceTriggerManager::CleanAndRemove: NULL superblock marked for removal" << std::endl; ); + if (!pSuperblock) { + DBG(std::cout << "CGovernanceTriggerManager::CleanAndRemove: NULL superblock marked for removal" << std::endl;); LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- NULL superblock marked for removal\n"); remove = true; } else { pObj = governance.FindGovernanceObject(it->first); - if(!pObj || pObj->GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) { - DBG( std::cout << "CGovernanceTriggerManager::CleanAndRemove: Unknown or non-trigger superblock" << std::endl; ); + if (!pObj || pObj->GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) { + DBG(std::cout << "CGovernanceTriggerManager::CleanAndRemove: Unknown or non-trigger superblock" << std::endl;); LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- Unknown or non-trigger superblock\n"); pSuperblock->SetStatus(SEEN_OBJECT_ERROR_INVALID); } - DBG( std::cout << "CGovernanceTriggerManager::CleanAndRemove: superblock status = " << pSuperblock->GetStatus() << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::CleanAndRemove: superblock status = " << pSuperblock->GetStatus() << std::endl;); LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- superblock status = %d\n", pSuperblock->GetStatus()); - switch(pSuperblock->GetStatus()) { + switch (pSuperblock->GetStatus()) { case SEEN_OBJECT_ERROR_INVALID: case SEEN_OBJECT_UNKNOWN: LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- Unknown or invalid trigger found\n"); @@ -195,16 +193,15 @@ void CGovernanceTriggerManager::CleanAndRemove() } LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- %smarked for removal\n", remove ? "" : "NOT "); - if(remove) { + if (remove) { DBG( std::string strDataAsPlainString = "NULL"; - if(pObj) { + if (pObj) { strDataAsPlainString = pObj->GetDataAsPlainString(); - } - std::cout << "CGovernanceTriggerManager::CleanAndRemove: Removing object: " - << strDataAsPlainString - << std::endl; - ); + } std::cout + << "CGovernanceTriggerManager::CleanAndRemove: Removing object: " + << strDataAsPlainString + << std::endl;); LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- Removing trigger object\n"); // mark corresponding object for deletion if (pObj) { @@ -215,13 +212,12 @@ void CGovernanceTriggerManager::CleanAndRemove() } // delete the trigger mapTrigger.erase(it++); - } - else { + } else { ++it; } } - DBG( std::cout << "CGovernanceTriggerManager::CleanAndRemove: End" << std::endl; ); + DBG(std::cout << "CGovernanceTriggerManager::CleanAndRemove: End" << std::endl;); } /** @@ -236,18 +232,18 @@ std::vector CGovernanceTriggerManager::GetActiveTriggers() AssertLockHeld(governance.cs); std::vector vecResults; - DBG( std::cout << "GetActiveTriggers: mapTrigger.size() = " << mapTrigger.size() << std::endl; ); + DBG(std::cout << "GetActiveTriggers: mapTrigger.size() = " << mapTrigger.size() << std::endl;); // LOOK AT THESE OBJECTS AND COMPILE A VALID LIST OF TRIGGERS for (const auto& pair : mapTrigger) { CGovernanceObject* pObj = governance.FindGovernanceObject(pair.first); - if(pObj) { - DBG( std::cout << "GetActiveTriggers: pObj->GetDataAsPlainString() = " << pObj->GetDataAsPlainString() << std::endl; ); + if (pObj) { + DBG(std::cout << "GetActiveTriggers: pObj->GetDataAsPlainString() = " << pObj->GetDataAsPlainString() << std::endl;); vecResults.push_back(pair.second); } } - DBG( std::cout << "GetActiveTriggers: vecResults.size() = " << vecResults.size() << std::endl; ); + DBG(std::cout << "GetActiveTriggers: vecResults.size() = " << vecResults.size() << std::endl;); return vecResults; } @@ -271,21 +267,20 @@ bool CSuperblockManager::IsSuperblockTriggered(int nBlockHeight) LogPrint("gobject", "CSuperblockManager::IsSuperblockTriggered -- vecTriggers.size() = %d\n", vecTriggers.size()); - DBG( std::cout << "IsSuperblockTriggered Number triggers = " << vecTriggers.size() << std::endl; ); + DBG(std::cout << "IsSuperblockTriggered Number triggers = " << vecTriggers.size() << std::endl;); - for (const auto& pSuperblock : vecTriggers) - { - if(!pSuperblock) { + for (const auto& pSuperblock : vecTriggers) { + if (!pSuperblock) { LogPrintf("CSuperblockManager::IsSuperblockTriggered -- Non-superblock found, continuing\n"); - DBG( std::cout << "IsSuperblockTriggered Not a superblock, continuing " << std::endl; ); + DBG(std::cout << "IsSuperblockTriggered Not a superblock, continuing " << std::endl;); continue; } CGovernanceObject* pObj = pSuperblock->GetGovernanceObject(); - if(!pObj) { + if (!pObj) { LogPrintf("CSuperblockManager::IsSuperblockTriggered -- pObj == nullptr, continuing\n"); - DBG( std::cout << "IsSuperblockTriggered pObj is NULL, continuing" << std::endl; ); + DBG(std::cout << "IsSuperblockTriggered pObj is NULL, continuing" << std::endl;); continue; } @@ -293,14 +288,14 @@ bool CSuperblockManager::IsSuperblockTriggered(int nBlockHeight) // note : 12.1 - is epoch calculation correct? - if(nBlockHeight != pSuperblock->GetBlockHeight()) { + if (nBlockHeight != pSuperblock->GetBlockHeight()) { LogPrint("gobject", "CSuperblockManager::IsSuperblockTriggered -- block height doesn't match nBlockHeight = %d, blockStart = %d, continuing\n", - nBlockHeight, - pSuperblock->GetBlockHeight()); - DBG( std::cout << "IsSuperblockTriggered Not the target block, continuing" - << ", nBlockHeight = " << nBlockHeight - << ", superblock->GetBlockHeight() = " << pSuperblock->GetBlockHeight() - << std::endl; ); + nBlockHeight, + pSuperblock->GetBlockHeight()); + DBG(std::cout << "IsSuperblockTriggered Not the target block, continuing" + << ", nBlockHeight = " << nBlockHeight + << ", superblock->GetBlockHeight() = " << pSuperblock->GetBlockHeight() + << std::endl;); continue; } @@ -308,14 +303,13 @@ bool CSuperblockManager::IsSuperblockTriggered(int nBlockHeight) pObj->UpdateSentinelVariables(); - if(pObj->IsSetCachedFunding()) { + if (pObj->IsSetCachedFunding()) { LogPrint("gobject", "CSuperblockManager::IsSuperblockTriggered -- fCacheFunding = true, returning true\n"); - DBG( std::cout << "IsSuperblockTriggered returning true" << std::endl; ); + DBG(std::cout << "IsSuperblockTriggered returning true" << std::endl;); return true; - } - else { + } else { LogPrint("gobject", "CSuperblockManager::IsSuperblockTriggered -- fCacheFunding = false, continuing\n"); - DBG( std::cout << "IsSuperblockTriggered No fCachedFunding, continuing" << std::endl; ); + DBG(std::cout << "IsSuperblockTriggered No fCachedFunding, continuing" << std::endl;); } } @@ -325,7 +319,7 @@ bool CSuperblockManager::IsSuperblockTriggered(int nBlockHeight) bool CSuperblockManager::GetBestSuperblock(CSuperblock_sptr& pSuperblockRet, int nBlockHeight) { - if(!CSuperblock::IsValidBlockHeight(nBlockHeight)) { + if (!CSuperblock::IsValidBlockHeight(nBlockHeight)) { return false; } @@ -334,31 +328,31 @@ bool CSuperblockManager::GetBestSuperblock(CSuperblock_sptr& pSuperblockRet, int int nYesCount = 0; for (const auto& pSuperblock : vecTriggers) { - if(!pSuperblock) { - DBG( std::cout << "GetBestSuperblock Not a superblock, continuing" << std::endl; ); + if (!pSuperblock) { + DBG(std::cout << "GetBestSuperblock Not a superblock, continuing" << std::endl;); continue; } CGovernanceObject* pObj = pSuperblock->GetGovernanceObject(); - if(!pObj) { - DBG( std::cout << "GetBestSuperblock pObj is NULL, continuing" << std::endl; ); + if (!pObj) { + DBG(std::cout << "GetBestSuperblock pObj is NULL, continuing" << std::endl;); continue; } - if(nBlockHeight != pSuperblock->GetBlockHeight()) { - DBG( std::cout << "GetBestSuperblock Not the target block, continuing" << std::endl; ); + if (nBlockHeight != pSuperblock->GetBlockHeight()) { + DBG(std::cout << "GetBestSuperblock Not the target block, continuing" << std::endl;); continue; } // DO WE HAVE A NEW WINNER? int nTempYesCount = pObj->GetAbsoluteYesCount(VOTE_SIGNAL_FUNDING); - DBG( std::cout << "GetBestSuperblock nTempYesCount = " << nTempYesCount << std::endl; ); - if(nTempYesCount > nYesCount) { + DBG(std::cout << "GetBestSuperblock nTempYesCount = " << nTempYesCount << std::endl;); + if (nTempYesCount > nYesCount) { nYesCount = nTempYesCount; pSuperblockRet = pSuperblock; - DBG( std::cout << "GetBestSuperblock Valid superblock found, pSuperblock set" << std::endl; ); + DBG(std::cout << "GetBestSuperblock Valid superblock found, pSuperblock set" << std::endl;); } } @@ -373,16 +367,16 @@ bool CSuperblockManager::GetBestSuperblock(CSuperblock_sptr& pSuperblockRet, int bool CSuperblockManager::GetSuperblockPayments(int nBlockHeight, std::vector& voutSuperblockRet) { - DBG( std::cout << "CSuperblockManager::GetSuperblockPayments Start" << std::endl; ); + DBG(std::cout << "CSuperblockManager::GetSuperblockPayments Start" << std::endl;); LOCK(governance.cs); // GET THE BEST SUPERBLOCK FOR THIS BLOCK HEIGHT CSuperblock_sptr pSuperblock; - if(!CSuperblockManager::GetBestSuperblock(pSuperblock, nBlockHeight)) { + if (!CSuperblockManager::GetBestSuperblock(pSuperblock, nBlockHeight)) { LogPrint("gobject", "CSuperblockManager::GetSuperblockPayments -- Can't find superblock for height %d\n", nBlockHeight); - DBG( std::cout << "CSuperblockManager::GetSuperblockPayments Failed to get superblock for height, returning" << std::endl; ); + DBG(std::cout << "CSuperblockManager::GetSuperblockPayments Failed to get superblock for height, returning" << std::endl;); return false; } @@ -392,17 +386,17 @@ bool CSuperblockManager::GetSuperblockPayments(int nBlockHeight, std::vectorCountPayments() << std::endl; ); + DBG(std::cout << "CSuperblockManager::GetSuperblockPayments Number payments: " << pSuperblock->CountPayments() << std::endl;); // TODO: How many payments can we add before things blow up? // Consider at least following limits: // - max coinbase tx size // - max "budget" available - for(int i = 0; i < pSuperblock->CountPayments(); i++) { + for (int i = 0; i < pSuperblock->CountPayments(); i++) { CGovernancePayment payment; - DBG( std::cout << "CSuperblockManager::GetSuperblockPayments i = " << i << std::endl; ); - if(pSuperblock->GetPayment(i, payment)) { - DBG( std::cout << "CSuperblockManager::GetSuperblockPayments Payment found " << std::endl; ); + DBG(std::cout << "CSuperblockManager::GetSuperblockPayments i = " << i << std::endl;); + if (pSuperblock->GetPayment(i, payment)) { + DBG(std::cout << "CSuperblockManager::GetSuperblockPayments Payment found " << std::endl;); // SET COINBASE OUTPUT TO SUPERBLOCK SETTING CTxOut txout = CTxOut(payment.nAmount, payment.script); @@ -416,15 +410,15 @@ bool CSuperblockManager::GetSuperblockPayments(int nBlockHeight, std::vectorIsValid(txNew, nBlockHeight, blockReward); } @@ -447,7 +441,7 @@ void CSuperblockManager::ExecuteBestSuperblock(int nBlockHeight) LOCK(governance.cs); CSuperblock_sptr pSuperblock; - if(GetBestSuperblock(pSuperblock, nBlockHeight)) { + if (GetBestSuperblock(pSuperblock, nBlockHeight)) { // All checks are done in CSuperblock::IsValid via IsBlockValueValid and IsBlockPayeeValid, // tip wouldn't be updated if anything was wrong. Mark this trigger as executed. pSuperblock->SetExecuted(); @@ -455,36 +449,37 @@ void CSuperblockManager::ExecuteBestSuperblock(int nBlockHeight) } CSuperblock:: -CSuperblock() - : nGovObjHash(), - nBlockHeight(0), - nStatus(SEEN_OBJECT_UNKNOWN), - vecPayments() -{} + CSuperblock() : + nGovObjHash(), + nBlockHeight(0), + nStatus(SEEN_OBJECT_UNKNOWN), + vecPayments() +{ +} CSuperblock:: -CSuperblock(uint256& nHash) - : nGovObjHash(nHash), - nBlockHeight(0), - nStatus(SEEN_OBJECT_UNKNOWN), - vecPayments() + CSuperblock(uint256& nHash) : + nGovObjHash(nHash), + nBlockHeight(0), + nStatus(SEEN_OBJECT_UNKNOWN), + vecPayments() { - DBG( std::cout << "CSuperblock Constructor Start" << std::endl; ); + DBG(std::cout << "CSuperblock Constructor Start" << std::endl;); CGovernanceObject* pGovObj = GetGovernanceObject(); - if(!pGovObj) { - DBG( std::cout << "CSuperblock Constructor pGovObjIn is NULL, returning" << std::endl; ); + if (!pGovObj) { + DBG(std::cout << "CSuperblock Constructor pGovObjIn is NULL, returning" << std::endl;); throw std::runtime_error("CSuperblock: Failed to find Governance Object"); } - DBG( std::cout << "CSuperblock Constructor pGovObj : " - << pGovObj->GetDataAsPlainString() - << ", nObjectType = " << pGovObj->GetObjectType() - << std::endl; ); + DBG(std::cout << "CSuperblock Constructor pGovObj : " + << pGovObj->GetDataAsPlainString() + << ", nObjectType = " << pGovObj->GetObjectType() + << std::endl;); if (pGovObj->GetObjectType() != GOVERNANCE_OBJECT_TRIGGER) { - DBG( std::cout << "CSuperblock Constructor pGovObj not a trigger, returning" << std::endl; ); + DBG(std::cout << "CSuperblock Constructor pGovObj not a trigger, returning" << std::endl;); throw std::runtime_error("CSuperblock: Governance Object not a trigger"); } @@ -499,9 +494,9 @@ CSuperblock(uint256& nHash) ParsePaymentSchedule(strAddresses, strAmounts); LogPrint("gobject", "CSuperblock -- nBlockHeight = %d, strAddresses = %s, strAmounts = %s, vecPayments.size() = %d\n", - nBlockHeight, strAddresses, strAmounts, vecPayments.size()); + nBlockHeight, strAddresses, strAmounts, vecPayments.size()); - DBG( std::cout << "CSuperblock Constructor End" << std::endl; ); + DBG(std::cout << "CSuperblock Constructor End" << std::endl;); } /** @@ -514,7 +509,7 @@ bool CSuperblock::IsValidBlockHeight(int nBlockHeight) { // SUPERBLOCKS CAN HAPPEN ONLY after hardfork and only ONCE PER CYCLE return nBlockHeight >= Params().GetConsensus().nSuperblockStartBlock && - ((nBlockHeight % Params().GetConsensus().nSuperblockCycle) == 0); + ((nBlockHeight % Params().GetConsensus().nSuperblockCycle) == 0); } void CSuperblock::GetNearestSuperblocksHeights(int nBlockHeight, int& nLastSuperblockRet, int& nNextSuperblockRet) @@ -527,7 +522,7 @@ void CSuperblock::GetNearestSuperblocksHeights(int nBlockHeight, int& nLastSuper int nFirstSuperblockOffset = (nSuperblockCycle - nSuperblockStartBlock % nSuperblockCycle) % nSuperblockCycle; int nFirstSuperblock = nSuperblockStartBlock + nFirstSuperblockOffset; - if(nBlockHeight < nFirstSuperblock) { + if (nBlockHeight < nFirstSuperblock) { nLastSuperblockRet = 0; nNextSuperblockRet = nFirstSuperblock; } else { @@ -540,7 +535,7 @@ CAmount CSuperblock::GetPaymentsLimit(int nBlockHeight) { const Consensus::Params& consensusParams = Params().GetConsensus(); - if(!IsValidBlockHeight(nBlockHeight)) { + if (!IsValidBlockHeight(nBlockHeight)) { return 0; } @@ -585,13 +580,13 @@ void CSuperblock::ParsePaymentSchedule(const std::string& strPaymentAddresses, c AMOUNTS = [AMOUNT1|2|3|4|5|6] */ - DBG( std::cout << "CSuperblock::ParsePaymentSchedule vecParsed1.size() = " << vecParsed1.size() << std::endl; ); + DBG(std::cout << "CSuperblock::ParsePaymentSchedule vecParsed1.size() = " << vecParsed1.size() << std::endl;); for (int i = 0; i < (int)vecParsed1.size(); i++) { CBitcoinAddress address(vecParsed1[i]); if (!address.IsValid()) { std::ostringstream ostr; - ostr << "CSuperblock::ParsePaymentSchedule -- Invalid Dash Address : " << vecParsed1[i]; + ostr << "CSuperblock::ParsePaymentSchedule -- Invalid Dash Address : " << vecParsed1[i]; LogPrintf("%s\n", ostr.str()); throw std::runtime_error(ostr.str()); } @@ -601,29 +596,28 @@ void CSuperblock::ParsePaymentSchedule(const std::string& strPaymentAddresses, c - There might be an issue with multisig in the coinbase on mainnet, we will add support for it in a future release. - Post 12.3+ (test multisig coinbase transaction) */ - if(address.IsScript()) { + if (address.IsScript()) { std::ostringstream ostr; - ostr << "CSuperblock::ParsePaymentSchedule -- Script addresses are not supported yet : " << vecParsed1[i]; + ostr << "CSuperblock::ParsePaymentSchedule -- Script addresses are not supported yet : " << vecParsed1[i]; LogPrintf("%s\n", ostr.str()); throw std::runtime_error(ostr.str()); } - DBG( std::cout << "CSuperblock::ParsePaymentSchedule i = " << i - << ", vecParsed2[i] = " << vecParsed2[i] - << std::endl; ); + DBG(std::cout << "CSuperblock::ParsePaymentSchedule i = " << i + << ", vecParsed2[i] = " << vecParsed2[i] + << std::endl;); CAmount nAmount = ParsePaymentAmount(vecParsed2[i]); - DBG( std::cout << "CSuperblock::ParsePaymentSchedule: " - << "amount string = " << vecParsed2[i] - << ", nAmount = " << nAmount - << std::endl; ); + DBG(std::cout << "CSuperblock::ParsePaymentSchedule: " + << "amount string = " << vecParsed2[i] + << ", nAmount = " << nAmount + << std::endl;); CGovernancePayment payment(address, nAmount); - if(payment.IsValid()) { + if (payment.IsValid()) { vecPayments.push_back(payment); - } - else { + } else { vecPayments.clear(); std::ostringstream ostr; ostr << "CSuperblock::ParsePaymentSchedule -- Invalid payment found: address = " << address.ToString() @@ -636,7 +630,7 @@ void CSuperblock::ParsePaymentSchedule(const std::string& strPaymentAddresses, c bool CSuperblock::GetPayment(int nPaymentIndex, CGovernancePayment& paymentRet) { - if((nPaymentIndex<0) || (nPaymentIndex >= (int)vecPayments.size())) { + if ((nPaymentIndex < 0) || (nPaymentIndex >= (int)vecPayments.size())) { return false; } @@ -649,7 +643,7 @@ CAmount CSuperblock::GetPaymentsTotalAmount() CAmount nPaymentsTotalAmount = 0; int nPayments = CountPayments(); - for(int i = 0; i < nPayments; i++) { + for (int i = 0; i < nPayments; i++) { nPaymentsTotalAmount += vecPayments[i].nAmount; } @@ -669,7 +663,7 @@ bool CSuperblock::IsValid(const CTransaction& txNew, int nBlockHeight, CAmount b // internal to *this and since CSuperblock's are accessed only through // shared pointers there's no way our object can get deleted while this // code is running. - if(!IsValidBlockHeight(nBlockHeight)) { + if (!IsValidBlockHeight(nBlockHeight)) { LogPrintf("CSuperblock::IsValid -- ERROR: Block invalid, incorrect block height\n"); return false; } @@ -683,12 +677,12 @@ bool CSuperblock::IsValid(const CTransaction& txNew, int nBlockHeight, CAmount b int nMinerAndMasternodePayments = nOutputs - nPayments; LogPrint("gobject", "CSuperblock::IsValid nOutputs = %d, nPayments = %d, GetDataAsHexString = %s\n", - nOutputs, nPayments, GetGovernanceObject()->GetDataAsHexString()); + nOutputs, nPayments, GetGovernanceObject()->GetDataAsHexString()); // We require an exact match (including order) between the expected // superblock payments and the payments actually in the block. - if(nMinerAndMasternodePayments < 0) { + if (nMinerAndMasternodePayments < 0) { // This means the block cannot have all the superblock payments // so it is not valid. // TODO: could that be that we just hit coinbase size limit? @@ -699,22 +693,22 @@ bool CSuperblock::IsValid(const CTransaction& txNew, int nBlockHeight, CAmount b // payments should not exceed limit CAmount nPaymentsTotalAmount = GetPaymentsTotalAmount(); CAmount nPaymentsLimit = GetPaymentsLimit(nBlockHeight); - if(nPaymentsTotalAmount > nPaymentsLimit) { + if (nPaymentsTotalAmount > nPaymentsLimit) { LogPrintf("CSuperblock::IsValid -- ERROR: Block invalid, payments limit exceeded: payments %lld, limit %lld\n", nPaymentsTotalAmount, nPaymentsLimit); return false; } // miner and masternodes should not get more than they would usually get CAmount nBlockValue = txNew.GetValueOut(); - if(nBlockValue > blockReward + nPaymentsTotalAmount) { + if (nBlockValue > blockReward + nPaymentsTotalAmount) { LogPrintf("CSuperblock::IsValid -- ERROR: Block invalid, block value limit exceeded: block %lld, limit %lld\n", nBlockValue, blockReward + nPaymentsTotalAmount); return false; } int nVoutIndex = 0; - for(int i = 0; i < nPayments; i++) { + for (int i = 0; i < nPayments; i++) { CGovernancePayment payment; - if(!GetPayment(i, payment)) { + if (!GetPayment(i, payment)) { // This shouldn't happen so log a warning LogPrintf("CSuperblock::IsValid -- WARNING: Failed to find payment: %d of %d total payments\n", i, nPayments); continue; @@ -733,7 +727,7 @@ bool CSuperblock::IsValid(const CTransaction& txNew, int nBlockHeight, CAmount b } } - if(!fPaymentMatch) { + if (!fPaymentMatch) { // Superblock payment not found! CTxDestination address1; @@ -755,26 +749,26 @@ bool CSuperblock::IsExpired() // Executed triggers are kept for another superblock cycle (approximately 1 month), // other valid triggers are kept for ~1 day only, everything else is pruned after ~1h. switch (nStatus) { - case SEEN_OBJECT_EXECUTED: - nExpirationBlocks = Params().GetConsensus().nSuperblockCycle; - break; - case SEEN_OBJECT_IS_VALID: - nExpirationBlocks = 576; - break; - default: - nExpirationBlocks = 24; - break; + case SEEN_OBJECT_EXECUTED: + nExpirationBlocks = Params().GetConsensus().nSuperblockCycle; + break; + case SEEN_OBJECT_IS_VALID: + nExpirationBlocks = 576; + break; + default: + nExpirationBlocks = 24; + break; } int nExpirationBlock = nBlockHeight + nExpirationBlocks; LogPrint("gobject", "CSuperblock::IsExpired -- nBlockHeight = %d, nExpirationBlock = %d\n", nBlockHeight, nExpirationBlock); - if(governance.GetCachedBlockHeight() > nExpirationBlock) { + if (governance.GetCachedBlockHeight() > nExpirationBlock) { LogPrint("gobject", "CSuperblock::IsExpired -- Outdated trigger found\n"); fExpired = true; CGovernanceObject* pgovobj = GetGovernanceObject(); - if(pgovobj) { + if (pgovobj) { LogPrint("gobject", "CSuperblock::IsExpired -- Expiring outdated object: %s\n", pgovobj->GetHash().ToString()); pgovobj->fExpired = true; pgovobj->nDeletionTime = GetAdjustedTime(); @@ -798,16 +792,16 @@ std::string CSuperblockManager::GetRequiredPaymentsString(int nBlockHeight) // GET BEST SUPERBLOCK CSuperblock_sptr pSuperblock; - if(!GetBestSuperblock(pSuperblock, nBlockHeight)) { + if (!GetBestSuperblock(pSuperblock, nBlockHeight)) { LogPrint("gobject", "CSuperblockManager::GetRequiredPaymentsString -- Can't find superblock for height %d\n", nBlockHeight); return "error"; } // LOOP THROUGH SUPERBLOCK PAYMENTS, CONFIGURE OUTPUT STRING - for(int i = 0; i < pSuperblock->CountPayments(); i++) { + for (int i = 0; i < pSuperblock->CountPayments(); i++) { CGovernancePayment payment; - if(pSuperblock->GetPayment(i, payment)) { + if (pSuperblock->GetPayment(i, payment)) { // PRINT NICE LOG OUTPUT FOR SUPERBLOCK PAYMENT CTxDestination address1; @@ -816,10 +810,9 @@ std::string CSuperblockManager::GetRequiredPaymentsString(int nBlockHeight) // RETURN NICE OUTPUT FOR CONSOLE - if(ret != "Unknown") { + if (ret != "Unknown") { ret += ", " + address2.ToString(); - } - else { + } else { ret = address2.ToString(); } } diff --git a/src/governance-classes.h b/src/governance-classes.h index 6584f56c433d..2e0946bea62c 100644 --- a/src/governance-classes.h +++ b/src/governance-classes.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef GOVERNANCE_CLASSES_H @@ -44,7 +44,8 @@ class CGovernanceTriggerManager void CleanAndRemove(); public: - CGovernanceTriggerManager() : mapTrigger() {} + CGovernanceTriggerManager() : + mapTrigger() {} }; /** @@ -59,7 +60,6 @@ class CSuperblockManager static bool GetBestSuperblock(CSuperblock_sptr& pSuperblockRet, int nBlockHeight); public: - static bool IsSuperblockTriggered(int nBlockHeight); static bool GetSuperblockPayments(int nBlockHeight, std::vector& voutSuperblockRet); @@ -83,33 +83,29 @@ class CGovernancePayment CScript script; CAmount nAmount; - CGovernancePayment() - :fValid(false), - script(), - nAmount(0) - {} + CGovernancePayment() : + fValid(false), + script(), + nAmount(0) + { + } - CGovernancePayment(CBitcoinAddress addrIn, CAmount nAmountIn) - :fValid(false), - script(), - nAmount(0) + CGovernancePayment(CBitcoinAddress addrIn, CAmount nAmountIn) : + fValid(false), + script(), + nAmount(0) { - try - { + try { CTxDestination dest = addrIn.Get(); script = GetScriptForDestination(dest); nAmount = nAmountIn; fValid = true; - } - catch(std::exception& e) - { + } catch (std::exception& e) { LogPrintf("CGovernancePayment Payment not valid: addrIn = %s, nAmountIn = %d, what = %s\n", - addrIn.ToString(), nAmountIn, e.what()); - } - catch(...) - { + addrIn.ToString(), nAmountIn, e.what()); + } catch (...) { LogPrintf("CGovernancePayment Payment not valid: addrIn = %s, nAmountIn = %d\n", - addrIn.ToString(), nAmountIn); + addrIn.ToString(), nAmountIn); } } @@ -146,7 +142,6 @@ class CSuperblock : public CGovernanceObject void ParsePaymentSchedule(const std::string& strPaymentAddresses, const std::string& strPaymentAmounts); public: - CSuperblock(); CSuperblock(uint256& nHash); From a5636779b8950f240e1a96a81bbb6aea1713bb37 Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:34:33 -0500 Subject: [PATCH 04/15] gov-exc.h clang and copyright bump --- src/governance-exceptions.h | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/governance-exceptions.h b/src/governance-exceptions.h index 6df354f71133..100c4e4942dd 100644 --- a/src/governance-exceptions.h +++ b/src/governance-exceptions.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -25,7 +25,7 @@ enum governance_exception_type_enum_t { inline std::ostream& operator<<(std::ostream& os, governance_exception_type_enum_t eType) { - switch(eType) { + switch (eType) { case GOVERNANCE_EXCEPTION_NONE: os << "GOVERNANCE_EXCEPTION_NONE"; break; @@ -63,11 +63,11 @@ class CGovernanceException : public std::exception public: CGovernanceException(const std::string& strMessageIn = "", - governance_exception_type_enum_t eTypeIn = GOVERNANCE_EXCEPTION_NONE, - int nNodePenaltyIn = 0) - : strMessage(), - eType(eTypeIn), - nNodePenalty(nNodePenaltyIn) + governance_exception_type_enum_t eTypeIn = GOVERNANCE_EXCEPTION_NONE, + int nNodePenaltyIn = 0) : + strMessage(), + eType(eTypeIn), + nNodePenalty(nNodePenaltyIn) { std::ostringstream ostr; ostr << eType << ":" << strMessageIn; @@ -76,7 +76,7 @@ class CGovernanceException : public std::exception virtual ~CGovernanceException() throw() {} - virtual const char* what() const throw() override + virtual const char* what() const throw() override { return strMessage.c_str(); } @@ -91,7 +91,8 @@ class CGovernanceException : public std::exception return eType; } - int GetNodePenalty() const { + int GetNodePenalty() const + { return nNodePenalty; } }; From 8284ca186d55070050ebc2a9e3102d12d7338259 Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:37:43 -0500 Subject: [PATCH 05/15] gov-obj.* clang and copyright bump --- src/governance-object.cpp | 295 +++++++++++++++++++------------------- src/governance-object.h | 83 ++++++----- 2 files changed, 192 insertions(+), 186 deletions(-) diff --git a/src/governance-object.cpp b/src/governance-object.cpp index 0fd2d876b00b..225e1323ab7e 100644 --- a/src/governance-object.cpp +++ b/src/governance-object.cpp @@ -1,23 +1,23 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "governance-object.h" #include "core_io.h" -#include "governance.h" #include "governance-classes.h" -#include "governance-object.h" -#include "governance-vote.h" #include "governance-validators.h" +#include "governance-vote.h" +#include "governance.h" #include "instantx.h" #include "masternode-sync.h" #include "masternodeman.h" #include "messagesigner.h" #include "util.h" -#include #include +#include -CGovernanceObject::CGovernanceObject(): +CGovernanceObject::CGovernanceObject() : cs(), nObjectType(GOVERNANCE_OBJECT_UNKNOWN), nHashParent(), @@ -45,7 +45,7 @@ CGovernanceObject::CGovernanceObject(): LoadData(); } -CGovernanceObject::CGovernanceObject(const uint256& nHashParentIn, int nRevisionIn, int64_t nTimeIn, const uint256& nCollateralHashIn, const std::string& strDataHexIn): +CGovernanceObject::CGovernanceObject(const uint256& nHashParentIn, int nRevisionIn, int64_t nTimeIn, const uint256& nCollateralHashIn, const std::string& strDataHexIn) : cs(), nObjectType(GOVERNANCE_OBJECT_UNKNOWN), nHashParent(nHashParentIn), @@ -73,7 +73,7 @@ CGovernanceObject::CGovernanceObject(const uint256& nHashParentIn, int nRevision LoadData(); } -CGovernanceObject::CGovernanceObject(const CGovernanceObject& other): +CGovernanceObject::CGovernanceObject(const CGovernanceObject& other) : cs(), nObjectType(other.nObjectType), nHashParent(other.nHashParent), @@ -96,12 +96,13 @@ CGovernanceObject::CGovernanceObject(const CGovernanceObject& other): mapCurrentMNVotes(other.mapCurrentMNVotes), cmmapOrphanVotes(other.cmmapOrphanVotes), fileVotes(other.fileVotes) -{} +{ +} bool CGovernanceObject::ProcessVote(CNode* pfrom, - const CGovernanceVote& vote, - CGovernanceException& exception, - CConnman& connman) + const CGovernanceVote& vote, + CGovernanceException& exception, + CConnman& connman) { LOCK(cs); @@ -115,17 +116,16 @@ bool CGovernanceObject::ProcessVote(CNode* pfrom, return false; } - if(!mnodeman.Has(vote.GetMasternodeOutpoint())) { + if (!mnodeman.Has(vote.GetMasternodeOutpoint())) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Masternode " << vote.GetMasternodeOutpoint().ToStringShort() << " not found"; exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING); - if(cmmapOrphanVotes.Insert(vote.GetMasternodeOutpoint(), vote_time_pair_t(vote, GetAdjustedTime() + GOVERNANCE_ORPHAN_EXPIRATION_TIME))) { - if(pfrom) { + if (cmmapOrphanVotes.Insert(vote.GetMasternodeOutpoint(), vote_time_pair_t(vote, GetAdjustedTime() + GOVERNANCE_ORPHAN_EXPIRATION_TIME))) { + if (pfrom) { mnodeman.AskForMN(pfrom, vote.GetMasternodeOutpoint(), connman); } LogPrintf("%s\n", ostr.str()); - } - else { + } else { LogPrint("gobject", "%s\n", ostr.str()); } return false; @@ -134,14 +134,14 @@ bool CGovernanceObject::ProcessVote(CNode* pfrom, vote_m_it it = mapCurrentMNVotes.emplace(vote_m_t::value_type(vote.GetMasternodeOutpoint(), vote_rec_t())).first; vote_rec_t& voteRecordRef = it->second; vote_signal_enum_t eSignal = vote.GetSignal(); - if(eSignal == VOTE_SIGNAL_NONE) { + if (eSignal == VOTE_SIGNAL_NONE) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Vote signal: none"; LogPrint("gobject", "%s\n", ostr.str()); exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING); return false; } - if(eSignal > MAX_SUPPORTED_VOTE_SIGNAL) { + if (eSignal > MAX_SUPPORTED_VOTE_SIGNAL) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Unsupported vote signal: " << CGovernanceVoting::ConvertSignalToString(vote.GetSignal()); LogPrintf("%s\n", ostr.str()); @@ -152,7 +152,7 @@ bool CGovernanceObject::ProcessVote(CNode* pfrom, vote_instance_t& voteInstanceRef = it2->second; // Reject obsolete votes - if(vote.GetTimestamp() < voteInstanceRef.nCreationTime) { + if (vote.GetTimestamp() < voteInstanceRef.nCreationTime) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Obsolete vote"; LogPrint("gobject", "%s\n", ostr.str()); @@ -162,9 +162,9 @@ bool CGovernanceObject::ProcessVote(CNode* pfrom, int64_t nNow = GetAdjustedTime(); int64_t nVoteTimeUpdate = voteInstanceRef.nTime; - if(governance.AreRateChecksEnabled()) { + if (governance.AreRateChecksEnabled()) { int64_t nTimeDelta = nNow - voteInstanceRef.nTime; - if(nTimeDelta < GOVERNANCE_UPDATE_MIN) { + if (nTimeDelta < GOVERNANCE_UPDATE_MIN) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Masternode voting too often" << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort() @@ -180,19 +180,19 @@ bool CGovernanceObject::ProcessVote(CNode* pfrom, bool onlyOwnerAllowed = nObjectType == GOVERNANCE_OBJECT_PROPOSAL; // Finally check that the vote is actually valid (done last because of cost of signature verification) - if(!vote.IsValid(onlyOwnerAllowed)) { + if (!vote.IsValid(onlyOwnerAllowed)) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Invalid vote" - << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort() - << ", governance object hash = " << GetHash().ToString() - << ", vote hash = " << vote.GetHash().ToString(); + << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort() + << ", governance object hash = " << GetHash().ToString() + << ", vote hash = " << vote.GetHash().ToString(); LogPrintf("%s\n", ostr.str()); exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_PERMANENT_ERROR, 20); governance.AddInvalidVote(vote); return false; } - if(!mnodeman.AddGovernanceVote(vote.GetMasternodeOutpoint(), vote.GetParentHash())) { + if (!mnodeman.AddGovernanceVote(vote.GetMasternodeOutpoint(), vote.GetParentHash())) { std::ostringstream ostr; ostr << "CGovernanceObject::ProcessVote -- Unable to add governance vote" << ", MN outpoint = " << vote.GetMasternodeOutpoint().ToStringShort() @@ -213,12 +213,11 @@ void CGovernanceObject::ClearMasternodeVotes() LOCK(cs); vote_m_it it = mapCurrentMNVotes.begin(); - while(it != mapCurrentMNVotes.end()) { - if(!mnodeman.Has(it->first)) { + while (it != mapCurrentMNVotes.end()) { + if (!mnodeman.Has(it->first)) { fileVotes.RemoveVotesFromMasternode(it->first); mapCurrentMNVotes.erase(it++); - } - else { + } else { ++it; } } @@ -228,11 +227,11 @@ std::string CGovernanceObject::GetSignatureMessage() const { LOCK(cs); std::string strMessage = nHashParent.ToString() + "|" + - std::to_string(nRevision) + "|" + - std::to_string(nTime) + "|" + - GetDataAsHexString() + "|" + - masternodeOutpoint.ToStringShort() + "|" + - nCollateralHash.ToString(); + std::to_string(nRevision) + "|" + + std::to_string(nTime) + "|" + + GetDataAsHexString() + "|" + + masternodeOutpoint.ToStringShort() + "|" + + nCollateralHash.ToString(); return strMessage; } @@ -252,7 +251,7 @@ uint256 CGovernanceObject::GetHash() const ss << vchSig; // fee_tx is left out on purpose - DBG( printf("CGovernanceObject::GetHash %i %li %s\n", nRevision, nTime, GetDataAsHexString().c_str()); ); + DBG(printf("CGovernanceObject::GetHash %i %li %s\n", nRevision, nTime, GetDataAsHexString().c_str());); return ss.GetHash(); } @@ -290,14 +289,14 @@ bool CGovernanceObject::Sign(const CKey& key, const CKeyID& keyID) return false; } - if(!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { + if (!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { LogPrintf("CGovernanceObject::Sign -- VerifyMessage() failed, error: %s\n", strError); return false; } } LogPrint("gobject", "CGovernanceObject::Sign -- pubkey id = %s, masternode = %s\n", - keyID.ToString(), masternodeOutpoint.ToStringShort()); + keyID.ToString(), masternodeOutpoint.ToStringShort()); return true; } @@ -313,7 +312,7 @@ bool CGovernanceObject::CheckSignature(const CKeyID& keyID) const // could be an old object std::string strMessage = GetSignatureMessage(); - if(!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { + if (!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { // nope, not in old format either LogPrintf("CGovernance::CheckSignature -- VerifyMessage() failed, error: %s\n", strError); return false; @@ -339,7 +338,7 @@ bool CGovernanceObject::CheckSignature(const CKeyID& keyID) const UniValue CGovernanceObject::GetJSONObject() { UniValue obj(UniValue::VOBJ); - if(vchData.empty()) { + if (vchData.empty()) { return obj; } @@ -350,8 +349,8 @@ UniValue CGovernanceObject::GetJSONObject() obj = objResult; } else { std::vector arr1 = objResult.getValues(); - std::vector arr2 = arr1.at( 0 ).getValues(); - obj = arr2.at( 1 ); + std::vector arr2 = arr1.at(0).getValues(); + obj = arr2.at(1); } return obj; @@ -370,36 +369,34 @@ void CGovernanceObject::LoadData() // todo : 12.1 - resolved //return; - if(vchData.empty()) { + if (vchData.empty()) { return; } - try { + try { // ATTEMPT TO LOAD JSON STRING FROM VCHDATA UniValue objResult(UniValue::VOBJ); GetData(objResult); - DBG( std::cout << "CGovernanceObject::LoadData GetDataAsPlainString = " - << GetDataAsPlainString() - << std::endl; ); + DBG(std::cout << "CGovernanceObject::LoadData GetDataAsPlainString = " + << GetDataAsPlainString() + << std::endl;); UniValue obj = GetJSONObject(); nObjectType = obj["type"].get_int(); - } - catch(std::exception& e) { + } catch (std::exception& e) { fUnparsable = true; std::ostringstream ostr; ostr << "CGovernanceObject::LoadData Error parsing JSON" << ", e.what() = " << e.what(); - DBG( std::cout << ostr.str() << std::endl; ); + DBG(std::cout << ostr.str() << std::endl;); LogPrintf("%s\n", ostr.str()); return; - } - catch(...) { + } catch (...) { fUnparsable = true; std::ostringstream ostr; ostr << "CGovernanceObject::LoadData Unknown Error parsing JSON"; - DBG( std::cout << ostr.str() << std::endl; ); + DBG(std::cout << ostr.str() << std::endl;); LogPrintf("%s\n", ostr.str()); return; } @@ -463,77 +460,79 @@ bool CGovernanceObject::IsValidLocally(std::string& strError, bool& fMissingMast return false; } - switch(nObjectType) { - case GOVERNANCE_OBJECT_WATCHDOG: { - // watchdogs are deprecated + switch (nObjectType) { + case GOVERNANCE_OBJECT_WATCHDOG: { + // watchdogs are deprecated + return false; + } + case GOVERNANCE_OBJECT_PROPOSAL: { + CProposalValidator validator(GetDataAsHexString()); + // Note: It's ok to have expired proposals + // they are going to be cleared by CGovernanceManager::UpdateCachesAndClean() + // TODO: should they be tagged as "expired" to skip vote downloading? + if (!validator.Validate(false)) { + strError = strprintf("Invalid proposal data, error messages: %s", validator.GetErrorMessages()); return false; } - case GOVERNANCE_OBJECT_PROPOSAL: { - CProposalValidator validator(GetDataAsHexString()); - // Note: It's ok to have expired proposals - // they are going to be cleared by CGovernanceManager::UpdateCachesAndClean() - // TODO: should they be tagged as "expired" to skip vote downloading? - if (!validator.Validate(false)) { - strError = strprintf("Invalid proposal data, error messages: %s", validator.GetErrorMessages()); - return false; - } - if (fCheckCollateral && !IsCollateralValid(strError, fMissingConfirmations)) { - strError = "Invalid proposal collateral"; - return false; - } - return true; + if (fCheckCollateral && !IsCollateralValid(strError, fMissingConfirmations)) { + strError = "Invalid proposal collateral"; + return false; } - case GOVERNANCE_OBJECT_TRIGGER: { - if (!fCheckCollateral) - // nothing else we can check here (yet?) - return true; - - std::string strOutpoint = masternodeOutpoint.ToStringShort(); - masternode_info_t infoMn; - if (!mnodeman.GetMasternodeInfo(masternodeOutpoint, infoMn)) { - - CMasternode::CollateralStatus err = CMasternode::CheckCollateral(masternodeOutpoint, CKeyID()); - if (err == CMasternode::COLLATERAL_UTXO_NOT_FOUND) { - strError = "Failed to find Masternode UTXO, missing masternode=" + strOutpoint + "\n"; - } else if (err == CMasternode::COLLATERAL_UTXO_NOT_PROTX) { - strError = "Masternode UTXO is not a ProTx, missing masternode=" + strOutpoint + "\n"; - } else if (err == CMasternode::COLLATERAL_INVALID_AMOUNT) { - strError = "Masternode UTXO should have 1000 DASH, missing masternode=" + strOutpoint + "\n"; - } else if (err == CMasternode::COLLATERAL_INVALID_PUBKEY) { - fMissingMasternode = true; - strError = "Masternode not found: " + strOutpoint; - } else if (err == CMasternode::COLLATERAL_OK) { - // this should never happen with CPubKey() as a param - strError = "CheckCollateral critical failure! Masternode: " + strOutpoint; - } - - return false; - } + return true; + } + case GOVERNANCE_OBJECT_TRIGGER: { + if (!fCheckCollateral) + // nothing else we can check here (yet?) + return true; - // Check that we have a valid MN signature - if (!CheckSignature(infoMn.keyIDOperator)) { - strError = "Invalid masternode signature for: " + strOutpoint + ", pubkey id = " + infoMn.keyIDOperator.ToString(); - return false; + std::string strOutpoint = masternodeOutpoint.ToStringShort(); + masternode_info_t infoMn; + if (!mnodeman.GetMasternodeInfo(masternodeOutpoint, infoMn)) { + CMasternode::CollateralStatus err = CMasternode::CheckCollateral(masternodeOutpoint, CKeyID()); + if (err == CMasternode::COLLATERAL_UTXO_NOT_FOUND) { + strError = "Failed to find Masternode UTXO, missing masternode=" + strOutpoint + "\n"; + } else if (err == CMasternode::COLLATERAL_UTXO_NOT_PROTX) { + strError = "Masternode UTXO is not a ProTx, missing masternode=" + strOutpoint + "\n"; + } else if (err == CMasternode::COLLATERAL_INVALID_AMOUNT) { + strError = "Masternode UTXO should have 1000 DASH, missing masternode=" + strOutpoint + "\n"; + } else if (err == CMasternode::COLLATERAL_INVALID_PUBKEY) { + fMissingMasternode = true; + strError = "Masternode not found: " + strOutpoint; + } else if (err == CMasternode::COLLATERAL_OK) { + // this should never happen with CPubKey() as a param + strError = "CheckCollateral critical failure! Masternode: " + strOutpoint; } - return true; + return false; } - default: { - strError = strprintf("Invalid object type %d", nObjectType); + + // Check that we have a valid MN signature + if (!CheckSignature(infoMn.keyIDOperator)) { + strError = "Invalid masternode signature for: " + strOutpoint + ", pubkey id = " + infoMn.keyIDOperator.ToString(); return false; } - } + return true; + } + default: { + strError = strprintf("Invalid object type %d", nObjectType); + return false; + } + } } CAmount CGovernanceObject::GetMinCollateralFee() const { // Only 1 type has a fee for the moment but switch statement allows for future object types - switch(nObjectType) { - case GOVERNANCE_OBJECT_PROPOSAL: return GOVERNANCE_PROPOSAL_FEE_TX; - case GOVERNANCE_OBJECT_TRIGGER: return 0; - case GOVERNANCE_OBJECT_WATCHDOG: return 0; - default: return MAX_MONEY; + switch (nObjectType) { + case GOVERNANCE_OBJECT_PROPOSAL: + return GOVERNANCE_PROPOSAL_FEE_TX; + case GOVERNANCE_OBJECT_TRIGGER: + return 0; + case GOVERNANCE_OBJECT_WATCHDOG: + return 0; + default: + return MAX_MONEY; } } @@ -549,19 +548,19 @@ bool CGovernanceObject::IsCollateralValid(std::string& strError, bool& fMissingC // RETRIEVE TRANSACTION IN QUESTION - if(!GetTransaction(nCollateralHash, txCollateral, Params().GetConsensus(), nBlockHash, true)){ + if (!GetTransaction(nCollateralHash, txCollateral, Params().GetConsensus(), nBlockHash, true)) { strError = strprintf("Can't find collateral tx %s", nCollateralHash.ToString()); LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); return false; } - if(nBlockHash == uint256()) { + if (nBlockHash == uint256()) { strError = strprintf("Collateral tx %s is not mined yet", txCollateral->ToString()); LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); return false; } - if(txCollateral->vout.size() < 1) { + if (txCollateral->vout.size() < 1) { strError = strprintf("tx vout size less than 1 | %d", txCollateral->vout.size()); LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); return false; @@ -572,37 +571,35 @@ bool CGovernanceObject::IsCollateralValid(std::string& strError, bool& fMissingC CScript findScript; findScript << OP_RETURN << ToByteVector(nExpectedHash); - DBG( std::cout << "IsCollateralValid: txCollateral->vout.size() = " << txCollateral->vout.size() << std::endl; ); + DBG(std::cout << "IsCollateralValid: txCollateral->vout.size() = " << txCollateral->vout.size() << std::endl;); - DBG( std::cout << "IsCollateralValid: findScript = " << ScriptToAsmStr( findScript, false ) << std::endl; ); + DBG(std::cout << "IsCollateralValid: findScript = " << ScriptToAsmStr(findScript, false) << std::endl;); - DBG( std::cout << "IsCollateralValid: nMinFee = " << nMinFee << std::endl; ); + DBG(std::cout << "IsCollateralValid: nMinFee = " << nMinFee << std::endl;); bool foundOpReturn = false; for (const auto& output : txCollateral->vout) { - DBG( std::cout << "IsCollateralValid txout : " << output.ToString() - << ", output.nValue = " << output.nValue - << ", output.scriptPubKey = " << ScriptToAsmStr( output.scriptPubKey, false ) - << std::endl; ); - if(!output.scriptPubKey.IsPayToPublicKeyHash() && !output.scriptPubKey.IsUnspendable()) { + DBG(std::cout << "IsCollateralValid txout : " << output.ToString() + << ", output.nValue = " << output.nValue + << ", output.scriptPubKey = " << ScriptToAsmStr(output.scriptPubKey, false) + << std::endl;); + if (!output.scriptPubKey.IsPayToPublicKeyHash() && !output.scriptPubKey.IsUnspendable()) { strError = strprintf("Invalid Script %s", txCollateral->ToString()); - LogPrintf ("CGovernanceObject::IsCollateralValid -- %s\n", strError); + LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); return false; } - if(output.scriptPubKey == findScript && output.nValue >= nMinFee) { - DBG( std::cout << "IsCollateralValid foundOpReturn = true" << std::endl; ); + if (output.scriptPubKey == findScript && output.nValue >= nMinFee) { + DBG(std::cout << "IsCollateralValid foundOpReturn = true" << std::endl;); foundOpReturn = true; + } else { + DBG(std::cout << "IsCollateralValid No match, continuing" << std::endl;); } - else { - DBG( std::cout << "IsCollateralValid No match, continuing" << std::endl; ); - } - } - if(!foundOpReturn){ + if (!foundOpReturn) { strError = strprintf("Couldn't find opReturn %s in %s", nExpectedHash.ToString(), txCollateral->ToString()); - LogPrintf ("CGovernanceObject::IsCollateralValid -- %s\n", strError); + LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); return false; } @@ -620,8 +617,8 @@ bool CGovernanceObject::IsCollateralValid(std::string& strError, bool& fMissingC } } - if((nConfirmationsIn < GOVERNANCE_FEE_CONFIRMATIONS) && - (!instantsend.IsLockedInstantSendTransaction(nCollateralHash))){ + if ((nConfirmationsIn < GOVERNANCE_FEE_CONFIRMATIONS) && + (!instantsend.IsLockedInstantSendTransaction(nCollateralHash))) { strError = strprintf("Collateral requires at least %d confirmations to be relayed throughout the network (it has only %d)", GOVERNANCE_FEE_CONFIRMATIONS, nConfirmationsIn); if (nConfirmationsIn >= GOVERNANCE_MIN_RELAY_FEE_CONFIRMATIONS) { fMissingConfirmations = true; @@ -629,7 +626,7 @@ bool CGovernanceObject::IsCollateralValid(std::string& strError, bool& fMissingC } else { strError += ", rejected -- try again later"; } - LogPrintf ("CGovernanceObject::IsCollateralValid -- %s\n", strError); + LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); return false; } @@ -646,7 +643,7 @@ int CGovernanceObject::CountMatchingVotes(vote_signal_enum_t eVoteSignalIn, vote for (const auto& votepair : mapCurrentMNVotes) { const vote_rec_t& recVote = votepair.second; vote_instance_m_cit it2 = recVote.mapInstances.find(eVoteSignalIn); - if(it2 != recVote.mapInstances.end() && it2->second.eOutcome == eVoteOutcomeIn) { + if (it2 != recVote.mapInstances.end() && it2->second.eOutcome == eVoteOutcomeIn) { ++nCount; } } @@ -691,13 +688,13 @@ bool CGovernanceObject::GetCurrentMNVotes(const COutPoint& mnCollateralOutpoint, return false; } voteRecord = it->second; - return true; + return true; } void CGovernanceObject::Relay(CConnman& connman) { // Do not relay until fully synced - if(!masternodeSync.IsSynced()) { + if (!masternodeSync.IsSynced()) { LogPrint("gobject", "CGovernanceObject::Relay -- won't relay until fully synced\n"); return; } @@ -711,7 +708,7 @@ void CGovernanceObject::UpdateSentinelVariables() // CALCULATE MINIMUM SUPPORT LEVELS REQUIRED int nMnCount = mnodeman.CountEnabled(); - if(nMnCount == 0) return; + if (nMnCount == 0) return; // CALCULATE THE MINUMUM VOTE COUNT REQUIRED FOR FULL SIGNAL @@ -728,16 +725,16 @@ void CGovernanceObject::UpdateSentinelVariables() // SET SENTINEL FLAGS TO TRUE IF MIMIMUM SUPPORT LEVELS ARE REACHED // ARE ANY OF THESE FLAGS CURRENTLY ACTIVATED? - if(GetAbsoluteYesCount(VOTE_SIGNAL_FUNDING) >= nAbsVoteReq) fCachedFunding = true; - if((GetAbsoluteYesCount(VOTE_SIGNAL_DELETE) >= nAbsDeleteReq) && !fCachedDelete) { + if (GetAbsoluteYesCount(VOTE_SIGNAL_FUNDING) >= nAbsVoteReq) fCachedFunding = true; + if ((GetAbsoluteYesCount(VOTE_SIGNAL_DELETE) >= nAbsDeleteReq) && !fCachedDelete) { fCachedDelete = true; - if(nDeletionTime == 0) { + if (nDeletionTime == 0) { nDeletionTime = GetAdjustedTime(); } } - if(GetAbsoluteYesCount(VOTE_SIGNAL_ENDORSED) >= nAbsVoteReq) fCachedEndorsed = true; + if (GetAbsoluteYesCount(VOTE_SIGNAL_ENDORSED) >= nAbsVoteReq) fCachedEndorsed = true; - if(GetAbsoluteNoCount(VOTE_SIGNAL_VALID) >= nAbsVoteReq) fCachedValid = false; + if (GetAbsoluteNoCount(VOTE_SIGNAL_VALID) >= nAbsVoteReq) fCachedValid = false; } void CGovernanceObject::CheckOrphanVotes(CConnman& connman) @@ -745,28 +742,26 @@ void CGovernanceObject::CheckOrphanVotes(CConnman& connman) int64_t nNow = GetAdjustedTime(); const vote_cmm_t::list_t& listVotes = cmmapOrphanVotes.GetItemList(); vote_cmm_t::list_cit it = listVotes.begin(); - while(it != listVotes.end()) { + while (it != listVotes.end()) { bool fRemove = false; const COutPoint& key = it->key; const vote_time_pair_t& pairVote = it->value; const CGovernanceVote& vote = pairVote.first; - if(pairVote.second < nNow) { + if (pairVote.second < nNow) { fRemove = true; - } - else if(!mnodeman.Has(vote.GetMasternodeOutpoint())) { + } else if (!mnodeman.Has(vote.GetMasternodeOutpoint())) { ++it; continue; } CGovernanceException exception; - if(!ProcessVote(nullptr, vote, exception, connman)) { + if (!ProcessVote(nullptr, vote, exception, connman)) { LogPrintf("CGovernanceObject::CheckOrphanVotes -- Failed to add orphan vote: %s\n", exception.what()); - } - else { + } else { vote.Relay(connman); fRemove = true; } ++it; - if(fRemove) { + if (fRemove) { cmmapOrphanVotes.Erase(key, pairVote); } } diff --git a/src/governance-object.h b/src/governance-object.h index 20613bf0a713..58b8e8967df1 100644 --- a/src/governance-object.h +++ b/src/governance-object.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -34,20 +34,20 @@ static const int GOVERNANCE_OBJECT_PROPOSAL = 1; static const int GOVERNANCE_OBJECT_TRIGGER = 2; static const int GOVERNANCE_OBJECT_WATCHDOG = 3; -static const CAmount GOVERNANCE_PROPOSAL_FEE_TX = (5.0*COIN); +static const CAmount GOVERNANCE_PROPOSAL_FEE_TX = (5.0 * COIN); static const int64_t GOVERNANCE_FEE_CONFIRMATIONS = 6; static const int64_t GOVERNANCE_MIN_RELAY_FEE_CONFIRMATIONS = 1; -static const int64_t GOVERNANCE_UPDATE_MIN = 60*60; -static const int64_t GOVERNANCE_DELETION_DELAY = 10*60; -static const int64_t GOVERNANCE_ORPHAN_EXPIRATION_TIME = 10*60; +static const int64_t GOVERNANCE_UPDATE_MIN = 60 * 60; +static const int64_t GOVERNANCE_DELETION_DELAY = 10 * 60; +static const int64_t GOVERNANCE_ORPHAN_EXPIRATION_TIME = 10 * 60; // FOR SEEN MAP ARRAYS - GOVERNANCE OBJECTS AND VOTES static const int SEEN_OBJECT_IS_VALID = 0; static const int SEEN_OBJECT_ERROR_INVALID = 1; static const int SEEN_OBJECT_ERROR_IMMATURE = 2; static const int SEEN_OBJECT_EXECUTED = 3; //used for triggers -static const int SEEN_OBJECT_UNKNOWN = 4; // the default +static const int SEEN_OBJECT_UNKNOWN = 4; // the default typedef std::pair vote_time_pair_t; @@ -57,16 +57,16 @@ inline bool operator<(const vote_time_pair_t& p1, const vote_time_pair_t& p2) } struct vote_instance_t { - vote_outcome_enum_t eOutcome; int64_t nTime; int64_t nCreationTime; - vote_instance_t(vote_outcome_enum_t eOutcomeIn = VOTE_OUTCOME_NONE, int64_t nTimeIn = 0, int64_t nCreationTimeIn = 0) - : eOutcome(eOutcomeIn), - nTime(nTimeIn), - nCreationTime(nCreationTimeIn) - {} + vote_instance_t(vote_outcome_enum_t eOutcomeIn = VOTE_OUTCOME_NONE, int64_t nTimeIn = 0, int64_t nCreationTimeIn = 0) : + eOutcome(eOutcomeIn), + nTime(nTimeIn), + nCreationTime(nCreationTimeIn) + { + } ADD_SERIALIZE_METHODS; @@ -77,13 +77,13 @@ struct vote_instance_t { READWRITE(nOutcome); READWRITE(nTime); READWRITE(nCreationTime); - if(ser_action.ForRead()) { + if (ser_action.ForRead()) { eOutcome = vote_outcome_enum_t(nOutcome); } } }; -typedef std::map vote_instance_m_t; +typedef std::map vote_instance_m_t; typedef vote_instance_m_t::iterator vote_instance_m_it; @@ -94,11 +94,11 @@ struct vote_rec_t { ADD_SERIALIZE_METHODS; - template - inline void SerializationOp(Stream& s, Operation ser_action) - { - READWRITE(mapInstances); - } + template + inline void SerializationOp(Stream& s, Operation ser_action) + { + READWRITE(mapInstances); + } }; /** @@ -195,51 +195,63 @@ class CGovernanceObject // Public Getter methods - int64_t GetCreationTime() const { + int64_t GetCreationTime() const + { return nTime; } - int64_t GetDeletionTime() const { + int64_t GetDeletionTime() const + { return nDeletionTime; } - int GetObjectType() const { + int GetObjectType() const + { return nObjectType; } - const uint256& GetCollateralHash() const { + const uint256& GetCollateralHash() const + { return nCollateralHash; } - const COutPoint& GetMasternodeOutpoint() const { + const COutPoint& GetMasternodeOutpoint() const + { return masternodeOutpoint; } - bool IsSetCachedFunding() const { + bool IsSetCachedFunding() const + { return fCachedFunding; } - bool IsSetCachedValid() const { + bool IsSetCachedValid() const + { return fCachedValid; } - bool IsSetCachedDelete() const { + bool IsSetCachedDelete() const + { return fCachedDelete; } - bool IsSetCachedEndorsed() const { + bool IsSetCachedEndorsed() const + { return fCachedEndorsed; } - bool IsSetDirtyCache() const { + bool IsSetDirtyCache() const + { return fDirtyCache; } - bool IsSetExpired() const { + bool IsSetExpired() const + { return fExpired; } - const CGovernanceObjectVoteFile& GetVoteFile() const { + const CGovernanceObjectVoteFile& GetVoteFile() const + { return fileVotes; } @@ -308,7 +320,7 @@ class CGovernanceObject if (!(s.GetType() & SER_GETHASH)) { READWRITE(vchSig); } - if(s.GetType() & SER_DISK) { + if (s.GetType() & SER_DISK) { // Only include these for the disk file format LogPrint("gobject", "CGovernanceObject::SerializationOp Reading/writing votes from/to disk\n"); READWRITE(nDeletionTime); @@ -327,15 +339,14 @@ class CGovernanceObject void GetData(UniValue& objResult); bool ProcessVote(CNode* pfrom, - const CGovernanceVote& vote, - CGovernanceException& exception, - CConnman& connman); + const CGovernanceVote& vote, + CGovernanceException& exception, + CConnman& connman); /// Called when MN's which have voted on this object have been removed void ClearMasternodeVotes(); void CheckOrphanVotes(CConnman& connman); - }; From 044d0e21da3d731044cbac58799c0ed2527f897b Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:39:38 -0500 Subject: [PATCH 06/15] gov-val.* clang and copyright bump --- src/governance-validators.cpp | 105 ++++++++++++++++------------------ src/governance-validators.h | 8 +-- 2 files changed, 52 insertions(+), 61 deletions(-) diff --git a/src/governance-validators.cpp b/src/governance-validators.cpp index dc70494a3f91..3e9a36a1a377 100644 --- a/src/governance-validators.cpp +++ b/src/governance-validators.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -11,15 +11,15 @@ #include -const size_t MAX_DATA_SIZE = 512; -const size_t MAX_NAME_SIZE = 40; +const size_t MAX_DATA_SIZE = 512; +const size_t MAX_NAME_SIZE = 40; CProposalValidator::CProposalValidator(const std::string& strHexData) : objJSON(UniValue::VOBJ), fJSONValid(false), strErrorMessages() { - if(!strHexData.empty()) { + if (!strHexData.empty()) { ParseStrHexData(strHexData); } } @@ -36,27 +36,27 @@ void CProposalValidator::ParseStrHexData(const std::string& strHexData) bool CProposalValidator::Validate(bool fCheckExpiration) { - if(!fJSONValid) { + if (!fJSONValid) { strErrorMessages += "JSON parsing error;"; return false; } - if(!ValidateName()) { + if (!ValidateName()) { strErrorMessages += "Invalid name;"; return false; } - if(!ValidateStartEndEpoch(fCheckExpiration)) { + if (!ValidateStartEndEpoch(fCheckExpiration)) { strErrorMessages += "Invalid start:end range;"; return false; } - if(!ValidatePaymentAmount()) { + if (!ValidatePaymentAmount()) { strErrorMessages += "Invalid payment amount;"; return false; } - if(!ValidatePaymentAddress()) { + if (!ValidatePaymentAddress()) { strErrorMessages += "Invalid payment address;"; return false; } - if(!ValidateURL()) { + if (!ValidateURL()) { strErrorMessages += "Invalid URL;"; return false; } @@ -66,12 +66,12 @@ bool CProposalValidator::Validate(bool fCheckExpiration) bool CProposalValidator::ValidateName() { std::string strName; - if(!GetDataValue("name", strName)) { + if (!GetDataValue("name", strName)) { strErrorMessages += "name field not found;"; return false; } - if(strName.size() > MAX_NAME_SIZE) { + if (strName.size() > MAX_NAME_SIZE) { strErrorMessages += strprintf("name exceeds %lu characters;", MAX_NAME_SIZE); return false; } @@ -80,7 +80,7 @@ bool CProposalValidator::ValidateName() std::transform(strName.begin(), strName.end(), strName.begin(), ::tolower); - if(strName.find_first_not_of(strAllowedChars) != std::string::npos) { + if (strName.find_first_not_of(strAllowedChars) != std::string::npos) { strErrorMessages += "name contains invalid characters;"; return false; } @@ -93,22 +93,22 @@ bool CProposalValidator::ValidateStartEndEpoch(bool fCheckExpiration) int64_t nStartEpoch = 0; int64_t nEndEpoch = 0; - if(!GetDataValue("start_epoch", nStartEpoch)) { + if (!GetDataValue("start_epoch", nStartEpoch)) { strErrorMessages += "start_epoch field not found;"; return false; } - if(!GetDataValue("end_epoch", nEndEpoch)) { + if (!GetDataValue("end_epoch", nEndEpoch)) { strErrorMessages += "end_epoch field not found;"; return false; } - if(nEndEpoch <= nStartEpoch) { + if (nEndEpoch <= nStartEpoch) { strErrorMessages += "end_epoch <= start_epoch;"; return false; } - if(fCheckExpiration && nEndEpoch <= GetAdjustedTime()) { + if (fCheckExpiration && nEndEpoch <= GetAdjustedTime()) { strErrorMessages += "expired;"; return false; } @@ -120,12 +120,12 @@ bool CProposalValidator::ValidatePaymentAmount() { double dValue = 0.0; - if(!GetDataValue("payment_amount", dValue)) { + if (!GetDataValue("payment_amount", dValue)) { strErrorMessages += "payment_amount field not found;"; return false; } - if(dValue <= 0.0) { + if (dValue <= 0.0) { strErrorMessages += "payment_amount is negative;"; return false; } @@ -141,23 +141,23 @@ bool CProposalValidator::ValidatePaymentAddress() { std::string strPaymentAddress; - if(!GetDataValue("payment_address", strPaymentAddress)) { + if (!GetDataValue("payment_address", strPaymentAddress)) { strErrorMessages += "payment_address field not found;"; return false; } - if(std::find_if(strPaymentAddress.begin(), strPaymentAddress.end(), ::isspace) != strPaymentAddress.end()) { + if (std::find_if(strPaymentAddress.begin(), strPaymentAddress.end(), ::isspace) != strPaymentAddress.end()) { strErrorMessages += "payment_address can't have whitespaces;"; return false; } CBitcoinAddress address(strPaymentAddress); - if(!address.IsValid()) { + if (!address.IsValid()) { strErrorMessages += "payment_address is invalid;"; return false; } - if(address.IsScript()) { + if (address.IsScript()) { strErrorMessages += "script addresses are not supported;"; return false; } @@ -168,22 +168,22 @@ bool CProposalValidator::ValidatePaymentAddress() bool CProposalValidator::ValidateURL() { std::string strURL; - if(!GetDataValue("url", strURL)) { + if (!GetDataValue("url", strURL)) { strErrorMessages += "url field not found;"; return false; } - if(std::find_if(strURL.begin(), strURL.end(), ::isspace) != strURL.end()) { + if (std::find_if(strURL.begin(), strURL.end(), ::isspace) != strURL.end()) { strErrorMessages += "url can't have whitespaces;"; return false; } - if(strURL.size() < 4U) { + if (strURL.size() < 4U) { strErrorMessages += "url too short;"; return false; } - if(!CheckURL(strURL)) { + if (!CheckURL(strURL)) { strErrorMessages += "url invalid;"; return false; } @@ -195,7 +195,7 @@ void CProposalValidator::ParseJSONData(const std::string& strJSONData) { fJSONValid = false; - if(strJSONData.empty()) { + if (strJSONData.empty()) { return; } @@ -213,11 +213,9 @@ void CProposalValidator::ParseJSONData(const std::string& strJSONData) } fJSONValid = true; - } - catch(std::exception& e) { + } catch (std::exception& e) { strErrorMessages += std::string(e.what()) + std::string(";"); - } - catch(...) { + } catch (...) { strErrorMessages += "Unknown exception;"; } } @@ -225,14 +223,12 @@ void CProposalValidator::ParseJSONData(const std::string& strJSONData) bool CProposalValidator::GetDataValue(const std::string& strKey, std::string& strValueRet) { bool fOK = false; - try { + try { strValueRet = objJSON[strKey].get_str(); fOK = true; - } - catch(std::exception& e) { + } catch (std::exception& e) { strErrorMessages += std::string(e.what()) + std::string(";"); - } - catch(...) { + } catch (...) { strErrorMessages += "Unknown exception;"; } return fOK; @@ -241,9 +237,9 @@ bool CProposalValidator::GetDataValue(const std::string& strKey, std::string& st bool CProposalValidator::GetDataValue(const std::string& strKey, int64_t& nValueRet) { bool fOK = false; - try { + try { const UniValue uValue = objJSON[strKey]; - switch(uValue.getType()) { + switch (uValue.getType()) { case UniValue::VNUM: nValueRet = uValue.get_int64(); fOK = true; @@ -251,11 +247,9 @@ bool CProposalValidator::GetDataValue(const std::string& strKey, int64_t& nValue default: break; } - } - catch(std::exception& e) { + } catch (std::exception& e) { strErrorMessages += std::string(e.what()) + std::string(";"); - } - catch(...) { + } catch (...) { strErrorMessages += "Unknown exception;"; } return fOK; @@ -264,9 +258,9 @@ bool CProposalValidator::GetDataValue(const std::string& strKey, int64_t& nValue bool CProposalValidator::GetDataValue(const std::string& strKey, double& dValueRet) { bool fOK = false; - try { + try { const UniValue uValue = objJSON[strKey]; - switch(uValue.getType()) { + switch (uValue.getType()) { case UniValue::VNUM: dValueRet = uValue.get_real(); fOK = true; @@ -274,11 +268,9 @@ bool CProposalValidator::GetDataValue(const std::string& strKey, double& dValueR default: break; } - } - catch(std::exception& e) { + } catch (std::exception& e) { strErrorMessages += std::string(e.what()) + std::string(";"); - } - catch(...) { + } catch (...) { strErrorMessages += "Unknown exception;"; } return fOK; @@ -295,32 +287,31 @@ bool CProposalValidator::CheckURL(const std::string& strURLIn) std::string strRest(strURLIn); std::string::size_type nPos = strRest.find(':'); - if(nPos != std::string::npos) { + if (nPos != std::string::npos) { //std::string strSchema = strRest.substr(0,nPos); - if(nPos < strRest.size()) { + if (nPos < strRest.size()) { strRest = strRest.substr(nPos + 1); - } - else { + } else { strRest = ""; } } // Process netloc - if((strRest.size() > 2) && (strRest.substr(0,2) == "//")) { + if ((strRest.size() > 2) && (strRest.substr(0, 2) == "//")) { static const std::string strNetlocDelimiters = "/?#"; strRest = strRest.substr(2); std::string::size_type nPos2 = strRest.find_first_of(strNetlocDelimiters); - std::string strNetloc = strRest.substr(0,nPos2); + std::string strNetloc = strRest.substr(0, nPos2); - if((strNetloc.find('[') != std::string::npos) && (strNetloc.find(']') == std::string::npos)) { + if ((strNetloc.find('[') != std::string::npos) && (strNetloc.find(']') == std::string::npos)) { return false; } - if((strNetloc.find(']') != std::string::npos) && (strNetloc.find('[') == std::string::npos)) { + if ((strNetloc.find(']') != std::string::npos) && (strNetloc.find('[') == std::string::npos)) { return false; } } diff --git a/src/governance-validators.h b/src/governance-validators.h index bcdb49fc883f..e9de02ae1079 100644 --- a/src/governance-validators.h +++ b/src/governance-validators.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -12,9 +12,9 @@ class CProposalValidator { private: - UniValue objJSON; - bool fJSONValid; - std::string strErrorMessages; + UniValue objJSON; + bool fJSONValid; + std::string strErrorMessages; public: CProposalValidator(const std::string& strDataHexIn = std::string()); From 953bc7c889d54980263636e54381a90c08c9f96f Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:42:03 -0500 Subject: [PATCH 07/15] gov-vote.* clang and copyright bump --- src/governance-vote.cpp | 165 ++++++++++++++++++++-------------------- src/governance-vote.h | 29 ++++--- 2 files changed, 98 insertions(+), 96 deletions(-) diff --git a/src/governance-vote.cpp b/src/governance-vote.cpp index 0dd0a382e515..9f7b523a9e82 100644 --- a/src/governance-vote.cpp +++ b/src/governance-vote.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -11,16 +11,19 @@ std::string CGovernanceVoting::ConvertOutcomeToString(vote_outcome_enum_t nOutcome) { - switch(nOutcome) - { - case VOTE_OUTCOME_NONE: - return "NONE"; break; - case VOTE_OUTCOME_YES: - return "YES"; break; - case VOTE_OUTCOME_NO: - return "NO"; break; - case VOTE_OUTCOME_ABSTAIN: - return "ABSTAIN"; break; + switch (nOutcome) { + case VOTE_OUTCOME_NONE: + return "NONE"; + break; + case VOTE_OUTCOME_YES: + return "YES"; + break; + case VOTE_OUTCOME_NO: + return "NO"; + break; + case VOTE_OUTCOME_ABSTAIN: + return "ABSTAIN"; + break; } return "error"; } @@ -28,23 +31,22 @@ std::string CGovernanceVoting::ConvertOutcomeToString(vote_outcome_enum_t nOutco std::string CGovernanceVoting::ConvertSignalToString(vote_signal_enum_t nSignal) { std::string strReturn = "NONE"; - switch(nSignal) - { - case VOTE_SIGNAL_NONE: - strReturn = "NONE"; - break; - case VOTE_SIGNAL_FUNDING: - strReturn = "FUNDING"; - break; - case VOTE_SIGNAL_VALID: - strReturn = "VALID"; - break; - case VOTE_SIGNAL_DELETE: - strReturn = "DELETE"; - break; - case VOTE_SIGNAL_ENDORSED: - strReturn = "ENDORSED"; - break; + switch (nSignal) { + case VOTE_SIGNAL_NONE: + strReturn = "NONE"; + break; + case VOTE_SIGNAL_FUNDING: + strReturn = "FUNDING"; + break; + case VOTE_SIGNAL_VALID: + strReturn = "VALID"; + break; + case VOTE_SIGNAL_DELETE: + strReturn = "DELETE"; + break; + case VOTE_SIGNAL_ENDORSED: + strReturn = "ENDORSED"; + break; } return strReturn; @@ -54,13 +56,11 @@ std::string CGovernanceVoting::ConvertSignalToString(vote_signal_enum_t nSignal) vote_outcome_enum_t CGovernanceVoting::ConvertVoteOutcome(const std::string& strVoteOutcome) { vote_outcome_enum_t eVote = VOTE_OUTCOME_NONE; - if(strVoteOutcome == "yes") { + if (strVoteOutcome == "yes") { eVote = VOTE_OUTCOME_YES; - } - else if(strVoteOutcome == "no") { + } else if (strVoteOutcome == "no") { eVote = VOTE_OUTCOME_NO; - } - else if(strVoteOutcome == "abstain") { + } else if (strVoteOutcome == "abstain") { eVote = VOTE_OUTCOME_ABSTAIN; } return eVote; @@ -68,12 +68,11 @@ vote_outcome_enum_t CGovernanceVoting::ConvertVoteOutcome(const std::string& str vote_signal_enum_t CGovernanceVoting::ConvertVoteSignal(const std::string& strVoteSignal) { - static const std::map mapStrVoteSignals = { - {"funding", VOTE_SIGNAL_FUNDING}, - {"valid", VOTE_SIGNAL_VALID}, - {"delete", VOTE_SIGNAL_DELETE}, - {"endorsed", VOTE_SIGNAL_ENDORSED} - }; + static const std::map mapStrVoteSignals = { + {"funding", VOTE_SIGNAL_FUNDING}, + {"valid", VOTE_SIGNAL_VALID}, + {"delete", VOTE_SIGNAL_DELETE}, + {"endorsed", VOTE_SIGNAL_ENDORSED}}; const auto& it = mapStrVoteSignals.find(strVoteSignal); if (it == mapStrVoteSignals.end()) { @@ -83,26 +82,27 @@ vote_signal_enum_t CGovernanceVoting::ConvertVoteSignal(const std::string& strVo return it->second; } -CGovernanceVote::CGovernanceVote() - : fValid(true), - fSynced(false), - nVoteSignal(int(VOTE_SIGNAL_NONE)), - masternodeOutpoint(), - nParentHash(), - nVoteOutcome(int(VOTE_OUTCOME_NONE)), - nTime(0), - vchSig() -{} - -CGovernanceVote::CGovernanceVote(const COutPoint& outpointMasternodeIn, const uint256& nParentHashIn, vote_signal_enum_t eVoteSignalIn, vote_outcome_enum_t eVoteOutcomeIn) - : fValid(true), - fSynced(false), - nVoteSignal(eVoteSignalIn), - masternodeOutpoint(outpointMasternodeIn), - nParentHash(nParentHashIn), - nVoteOutcome(eVoteOutcomeIn), - nTime(GetAdjustedTime()), - vchSig() +CGovernanceVote::CGovernanceVote() : + fValid(true), + fSynced(false), + nVoteSignal(int(VOTE_SIGNAL_NONE)), + masternodeOutpoint(), + nParentHash(), + nVoteOutcome(int(VOTE_OUTCOME_NONE)), + nTime(0), + vchSig() +{ +} + +CGovernanceVote::CGovernanceVote(const COutPoint& outpointMasternodeIn, const uint256& nParentHashIn, vote_signal_enum_t eVoteSignalIn, vote_outcome_enum_t eVoteOutcomeIn) : + fValid(true), + fSynced(false), + nVoteSignal(eVoteSignalIn), + masternodeOutpoint(outpointMasternodeIn), + nParentHash(nParentHashIn), + nVoteOutcome(eVoteOutcomeIn), + nTime(GetAdjustedTime()), + vchSig() { UpdateHash(); } @@ -120,7 +120,7 @@ std::string CGovernanceVote::ToString() const void CGovernanceVote::Relay(CConnman& connman) const { // Do not relay until fully synced - if(!masternodeSync.IsSynced()) { + if (!masternodeSync.IsSynced()) { LogPrint("gobject", "CGovernanceVote::Relay -- won't relay until fully synced\n"); return; } @@ -159,7 +159,7 @@ bool CGovernanceVote::Sign(const CKey& key, const CKeyID& keyID) if (sporkManager.IsSporkActive(SPORK_6_NEW_SIGS)) { uint256 hash = GetSignatureHash(); - if(!CHashSigner::SignHash(hash, key, vchSig)) { + if (!CHashSigner::SignHash(hash, key, vchSig)) { LogPrintf("CGovernanceVote::Sign -- SignHash() failed\n"); return false; } @@ -169,16 +169,15 @@ bool CGovernanceVote::Sign(const CKey& key, const CKeyID& keyID) return false; } } else { - std::string strMessage = masternodeOutpoint.ToStringShort() + "|" + nParentHash.ToString() + "|" + - std::to_string(nVoteSignal) + "|" + std::to_string(nVoteOutcome) + "|" + std::to_string(nTime); + std::to_string(nVoteSignal) + "|" + std::to_string(nVoteOutcome) + "|" + std::to_string(nTime); - if(!CMessageSigner::SignMessage(strMessage, vchSig, key)) { + if (!CMessageSigner::SignMessage(strMessage, vchSig, key)) { LogPrintf("CGovernanceVote::Sign -- SignMessage() failed\n"); return false; } - if(!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { + if (!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { LogPrintf("CGovernanceVote::Sign -- VerifyMessage() failed, error: %s\n", strError); return false; } @@ -197,11 +196,11 @@ bool CGovernanceVote::CheckSignature(const CKeyID& keyID) const if (!CHashSigner::VerifyHash(hash, keyID, vchSig, strError)) { // could be a signature in old format std::string strMessage = masternodeOutpoint.ToStringShort() + "|" + nParentHash.ToString() + "|" + - std::to_string(nVoteSignal) + "|" + - std::to_string(nVoteOutcome) + "|" + - std::to_string(nTime); + std::to_string(nVoteSignal) + "|" + + std::to_string(nVoteOutcome) + "|" + + std::to_string(nTime); - if(!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { + if (!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { // nope, not in old format either LogPrint("gobject", "CGovernanceVote::IsValid -- VerifyMessage() failed, error: %s\n", strError); return false; @@ -209,11 +208,11 @@ bool CGovernanceVote::CheckSignature(const CKeyID& keyID) const } } else { std::string strMessage = masternodeOutpoint.ToStringShort() + "|" + nParentHash.ToString() + "|" + - std::to_string(nVoteSignal) + "|" + - std::to_string(nVoteOutcome) + "|" + - std::to_string(nTime); + std::to_string(nVoteSignal) + "|" + + std::to_string(nVoteOutcome) + "|" + + std::to_string(nTime); - if(!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { + if (!CMessageSigner::VerifyMessage(keyID, vchSig, strMessage, strError)) { LogPrint("gobject", "CGovernanceVote::IsValid -- VerifyMessage() failed, error: %s\n", strError); return false; } @@ -224,27 +223,25 @@ bool CGovernanceVote::CheckSignature(const CKeyID& keyID) const bool CGovernanceVote::IsValid(bool useVotingKey) const { - if(nTime > GetAdjustedTime() + (60*60)) { - LogPrint("gobject", "CGovernanceVote::IsValid -- vote is too far ahead of current time - %s - nTime %lli - Max Time %lli\n", GetHash().ToString(), nTime, GetAdjustedTime() + (60*60)); + if (nTime > GetAdjustedTime() + (60 * 60)) { + LogPrint("gobject", "CGovernanceVote::IsValid -- vote is too far ahead of current time - %s - nTime %lli - Max Time %lli\n", GetHash().ToString(), nTime, GetAdjustedTime() + (60 * 60)); return false; } // support up to MAX_SUPPORTED_VOTE_SIGNAL, can be extended - if(nVoteSignal > MAX_SUPPORTED_VOTE_SIGNAL) - { + if (nVoteSignal > MAX_SUPPORTED_VOTE_SIGNAL) { LogPrint("gobject", "CGovernanceVote::IsValid -- Client attempted to vote on invalid signal(%d) - %s\n", nVoteSignal, GetHash().ToString()); return false; } // 0=none, 1=yes, 2=no, 3=abstain. Beyond that reject votes - if(nVoteOutcome > 3) - { + if (nVoteOutcome > 3) { LogPrint("gobject", "CGovernanceVote::IsValid -- Client attempted to vote on invalid outcome(%d) - %s\n", nVoteSignal, GetHash().ToString()); return false; } masternode_info_t infoMn; - if(!mnodeman.GetMasternodeInfo(masternodeOutpoint, infoMn)) { + if (!mnodeman.GetMasternodeInfo(masternodeOutpoint, infoMn)) { LogPrint("gobject", "CGovernanceVote::IsValid -- Unknown Masternode - %s\n", masternodeOutpoint.ToStringShort()); return false; } @@ -265,25 +262,25 @@ bool operator==(const CGovernanceVote& vote1, const CGovernanceVote& vote2) bool operator<(const CGovernanceVote& vote1, const CGovernanceVote& vote2) { bool fResult = (vote1.masternodeOutpoint < vote2.masternodeOutpoint); - if(!fResult) { + if (!fResult) { return false; } fResult = (vote1.masternodeOutpoint == vote2.masternodeOutpoint); fResult = fResult && (vote1.nParentHash < vote2.nParentHash); - if(!fResult) { + if (!fResult) { return false; } fResult = fResult && (vote1.nParentHash == vote2.nParentHash); fResult = fResult && (vote1.nVoteOutcome < vote2.nVoteOutcome); - if(!fResult) { + if (!fResult) { return false; } fResult = fResult && (vote1.nVoteOutcome == vote2.nVoteOutcome); fResult = fResult && (vote1.nVoteSignal == vote2.nVoteSignal); - if(!fResult) { + if (!fResult) { return false; } fResult = fResult && (vote1.nVoteSignal == vote2.nVoteSignal); diff --git a/src/governance-vote.h b/src/governance-vote.h index 67b79ca3700b..dac33c0d657e 100644 --- a/src/governance-vote.h +++ b/src/governance-vote.h @@ -1,7 +1,7 @@ -// Copyright (c) 2014-2017 The Dash Core developers - +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef GOVERNANCE_VOTE_H #define GOVERNANCE_VOTE_H @@ -12,7 +12,7 @@ class CGovernanceVote; class CConnman; // INTENTION OF MASTERNODES REGARDING ITEM -enum vote_outcome_enum_t { +enum vote_outcome_enum_t { VOTE_OUTCOME_NONE = 0, VOTE_OUTCOME_YES = 1, VOTE_OUTCOME_NO = 2, @@ -21,7 +21,7 @@ enum vote_outcome_enum_t { // SIGNAL VARIOUS THINGS TO HAPPEN: -enum vote_signal_enum_t { +enum vote_signal_enum_t { VOTE_SIGNAL_NONE = 0, VOTE_SIGNAL_FUNDING = 1, // -- fund this object for it's stated amount VOTE_SIGNAL_VALID = 2, // -- this object checks out in sentinel engine @@ -57,8 +57,8 @@ class CGovernanceVote friend bool operator<(const CGovernanceVote& vote1, const CGovernanceVote& vote2); private: - bool fValid; //if the vote is currently valid / counted - bool fSynced; //if we've sent this to our peers + bool fValid; //if the vote is currently valid / counted + bool fSynced; //if we've sent this to our peers int nVoteSignal; // see VOTE_ACTIONS above COutPoint masternodeOutpoint; uint256 nParentHash; @@ -80,13 +80,17 @@ class CGovernanceVote int64_t GetTimestamp() const { return nTime; } - vote_signal_enum_t GetSignal() const { return vote_signal_enum_t(nVoteSignal); } + vote_signal_enum_t GetSignal() const { return vote_signal_enum_t(nVoteSignal); } - vote_outcome_enum_t GetOutcome() const { return vote_outcome_enum_t(nVoteOutcome); } + vote_outcome_enum_t GetOutcome() const { return vote_outcome_enum_t(nVoteOutcome); } const uint256& GetParentHash() const { return nParentHash; } - void SetTime(int64_t nTimeIn) { nTime = nTimeIn; UpdateHash(); } + void SetTime(int64_t nTimeIn) + { + nTime = nTimeIn; + UpdateHash(); + } void SetSignature(const std::vector& vchSigIn) { vchSig = vchSigIn; } @@ -95,7 +99,8 @@ class CGovernanceVote bool IsValid(bool useVotingKey) const; void Relay(CConnman& connman) const; - std::string GetVoteString() const { + std::string GetVoteString() const + { return CGovernanceVoting::ConvertOutcomeToString(GetOutcome()); } @@ -115,7 +120,8 @@ class CGovernanceVote ADD_SERIALIZE_METHODS; template - inline void SerializationOp(Stream& s, Operation ser_action) { + inline void SerializationOp(Stream& s, Operation ser_action) + { READWRITE(masternodeOutpoint); READWRITE(nParentHash); READWRITE(nVoteOutcome); @@ -127,7 +133,6 @@ class CGovernanceVote if (ser_action.ForRead()) UpdateHash(); } - }; #endif From ef2984f2e17e331e10d95443fb3854a28d0ed718 Mon Sep 17 00:00:00 2001 From: Pasta Date: Wed, 26 Sep 2018 17:43:19 -0500 Subject: [PATCH 08/15] gov-votedb.* clang and copyright bump --- src/governance-votedb.cpp | 39 +++++++++++++++++++-------------------- src/governance-votedb.h | 11 ++++++----- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/governance-votedb.cpp b/src/governance-votedb.cpp index 403c0e882911..9f67e166155c 100644 --- a/src/governance-votedb.cpp +++ b/src/governance-votedb.cpp @@ -1,19 +1,20 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "governance-votedb.h" -CGovernanceObjectVoteFile::CGovernanceObjectVoteFile() - : nMemoryVotes(0), - listVotes(), - mapVoteIndex() -{} +CGovernanceObjectVoteFile::CGovernanceObjectVoteFile() : + nMemoryVotes(0), + listVotes(), + mapVoteIndex() +{ +} -CGovernanceObjectVoteFile::CGovernanceObjectVoteFile(const CGovernanceObjectVoteFile& other) - : nMemoryVotes(other.nMemoryVotes), - listVotes(other.listVotes), - mapVoteIndex() +CGovernanceObjectVoteFile::CGovernanceObjectVoteFile(const CGovernanceObjectVoteFile& other) : + nMemoryVotes(other.nMemoryVotes), + listVotes(other.listVotes), + mapVoteIndex() { RebuildIndex(); } @@ -37,7 +38,7 @@ bool CGovernanceObjectVoteFile::HasVote(const uint256& nHash) const bool CGovernanceObjectVoteFile::SerializeVoteToStream(const uint256& nHash, CDataStream& ss) const { vote_m_cit it = mapVoteIndex.find(nHash); - if(it == mapVoteIndex.end()) { + if (it == mapVoteIndex.end()) { return false; } ss << *(it->second); @@ -47,7 +48,7 @@ bool CGovernanceObjectVoteFile::SerializeVoteToStream(const uint256& nHash, CDat std::vector CGovernanceObjectVoteFile::GetVotes() const { std::vector vecResult; - for(vote_l_cit it = listVotes.begin(); it != listVotes.end(); ++it) { + for (vote_l_cit it = listVotes.begin(); it != listVotes.end(); ++it) { vecResult.push_back(*it); } return vecResult; @@ -56,13 +57,12 @@ std::vector CGovernanceObjectVoteFile::GetVotes() const void CGovernanceObjectVoteFile::RemoveVotesFromMasternode(const COutPoint& outpointMasternode) { vote_l_it it = listVotes.begin(); - while(it != listVotes.end()) { - if(it->GetMasternodeOutpoint() == outpointMasternode) { + while (it != listVotes.end()) { + if (it->GetMasternodeOutpoint() == outpointMasternode) { --nMemoryVotes; mapVoteIndex.erase(it->GetHash()); listVotes.erase(it++); - } - else { + } else { ++it; } } @@ -73,15 +73,14 @@ void CGovernanceObjectVoteFile::RebuildIndex() mapVoteIndex.clear(); nMemoryVotes = 0; vote_l_it it = listVotes.begin(); - while(it != listVotes.end()) { + while (it != listVotes.end()) { CGovernanceVote& vote = *it; uint256 nHash = vote.GetHash(); - if(mapVoteIndex.find(nHash) == mapVoteIndex.end()) { + if (mapVoteIndex.find(nHash) == mapVoteIndex.end()) { mapVoteIndex[nHash] = it; ++nMemoryVotes; ++it; - } - else { + } else { listVotes.erase(it++); } } diff --git a/src/governance-votedb.h b/src/governance-votedb.h index 73638c8694ef..c3b42f593be5 100644 --- a/src/governance-votedb.h +++ b/src/governance-votedb.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Dash Core developers +// Copyright (c) 2014-2018 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -30,7 +30,7 @@ class CGovernanceObjectVoteFile typedef vote_l_t::const_iterator vote_l_cit; - typedef std::map vote_m_t; + typedef std::map vote_m_t; typedef vote_m_t::iterator vote_m_it; @@ -65,7 +65,8 @@ class CGovernanceObjectVoteFile */ bool SerializeVoteToStream(const uint256& nHash, CDataStream& ss) const; - int GetVoteCount() { + int GetVoteCount() + { return nMemoryVotes; } @@ -80,13 +81,13 @@ class CGovernanceObjectVoteFile { READWRITE(nMemoryVotes); READWRITE(listVotes); - if(ser_action.ForRead()) { + if (ser_action.ForRead()) { RebuildIndex(); } } + private: void RebuildIndex(); - }; #endif From 53cd80967ce4a5eda82095c2a8708af0d989a3ce Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 19:07:54 -0500 Subject: [PATCH 09/15] fix some weirdness --- src/governance-classes.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/governance-classes.cpp b/src/governance-classes.cpp index 8af9fe0c9695..89a8b75056df 100644 --- a/src/governance-classes.cpp +++ b/src/governance-classes.cpp @@ -198,10 +198,10 @@ void CGovernanceTriggerManager::CleanAndRemove() std::string strDataAsPlainString = "NULL"; if (pObj) { strDataAsPlainString = pObj->GetDataAsPlainString(); - } std::cout - << "CGovernanceTriggerManager::CleanAndRemove: Removing object: " - << strDataAsPlainString - << std::endl;); + } + std::cout << "CGovernanceTriggerManager::CleanAndRemove: Removing object: " + << strDataAsPlainString + << std::endl;); LogPrint("gobject", "CGovernanceTriggerManager::CleanAndRemove -- Removing trigger object\n"); // mark corresponding object for deletion if (pObj) { From 41bc3d3d863076cd5e6b10ca7706100963cd51b0 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 19:33:55 -0500 Subject: [PATCH 10/15] Modernize ConvertVoteOutcome, ConvertSignalToString and ConvertOutcomeToString --- src/governance-vote.cpp | 75 +++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/src/governance-vote.cpp b/src/governance-vote.cpp index 9f7b523a9e82..4e6109efb8a9 100644 --- a/src/governance-vote.cpp +++ b/src/governance-vote.cpp @@ -11,59 +11,52 @@ std::string CGovernanceVoting::ConvertOutcomeToString(vote_outcome_enum_t nOutcome) { - switch (nOutcome) { - case VOTE_OUTCOME_NONE: - return "NONE"; - break; - case VOTE_OUTCOME_YES: - return "YES"; - break; - case VOTE_OUTCOME_NO: - return "NO"; - break; - case VOTE_OUTCOME_ABSTAIN: - return "ABSTAIN"; - break; + static const std::map mapOutcomeString = { + { VOTE_OUTCOME_NONE, "none" }, + { VOTE_OUTCOME_YES, "yes" }, + { VOTE_OUTCOME_NO, "no" }, + { VOTE_OUTCOME_ABSTAIN, "abstain" } }; + + const auto& it = mapOutcomeString.find(nOutcome); + if (it == mapOutcomeString.end()) { + LogPrintf("CGovernanceVoting::%s -- ERROR: Unknown outcome %s\n", __func__, nOutcome); + return "error"; } - return "error"; + return it->second; } std::string CGovernanceVoting::ConvertSignalToString(vote_signal_enum_t nSignal) { - std::string strReturn = "NONE"; - switch (nSignal) { - case VOTE_SIGNAL_NONE: - strReturn = "NONE"; - break; - case VOTE_SIGNAL_FUNDING: - strReturn = "FUNDING"; - break; - case VOTE_SIGNAL_VALID: - strReturn = "VALID"; - break; - case VOTE_SIGNAL_DELETE: - strReturn = "DELETE"; - break; - case VOTE_SIGNAL_ENDORSED: - strReturn = "ENDORSED"; - break; + static const std::map mapSignalsString = { + { VOTE_SIGNAL_FUNDING, "funding" }, + { VOTE_SIGNAL_VALID, "valid" }, + { VOTE_SIGNAL_DELETE, "delete" }, + { VOTE_SIGNAL_ENDORSED, "endorsed" } }; + + const auto& it = mapSignalsString.find(nSignal); + if (it == mapSignalsString.end()) { + LogPrintf("CGovernanceVoting::%s -- ERROR: Unknown signal %s\n", __func__, nSignal); + return "NONE"; } - - return strReturn; + return it->second; } vote_outcome_enum_t CGovernanceVoting::ConvertVoteOutcome(const std::string& strVoteOutcome) { - vote_outcome_enum_t eVote = VOTE_OUTCOME_NONE; - if (strVoteOutcome == "yes") { - eVote = VOTE_OUTCOME_YES; - } else if (strVoteOutcome == "no") { - eVote = VOTE_OUTCOME_NO; - } else if (strVoteOutcome == "abstain") { - eVote = VOTE_OUTCOME_ABSTAIN; + static const std::map mapStringOutcome = { + { "none", VOTE_OUTCOME_NONE }, + { "yes", VOTE_OUTCOME_YES }, + { "no", VOTE_OUTCOME_NO }, + { "abstain", VOTE_OUTCOME_ABSTAIN } }; + + const auto& it = mapStringOutcome.find(strVoteOutcome); + if (it == mapStringOutcome.end()) { + LogPrintf("CGovernanceVoting::%s -- ERROR: Unknown outcome %s\n", __func__, strVoteOutcome); + return VOTE_OUTCOME_NONE; } - return eVote; + return it->second; + } vote_signal_enum_t CGovernanceVoting::ConvertVoteSignal(const std::string& strVoteSignal) From 60fbfb12edeb0c5a337e2d4897010f331949c658 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 19:34:38 -0500 Subject: [PATCH 11/15] add braces --- src/governance-object.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/governance-object.cpp b/src/governance-object.cpp index 225e1323ab7e..839352efa681 100644 --- a/src/governance-object.cpp +++ b/src/governance-object.cpp @@ -481,9 +481,10 @@ bool CGovernanceObject::IsValidLocally(std::string& strError, bool& fMissingMast return true; } case GOVERNANCE_OBJECT_TRIGGER: { - if (!fCheckCollateral) + if (!fCheckCollateral) { // nothing else we can check here (yet?) return true; + } std::string strOutpoint = masternodeOutpoint.ToStringShort(); masternode_info_t infoMn; From 711f94a43585e085317a0356603f517fdff5cd06 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 19:36:47 -0500 Subject: [PATCH 12/15] move breaks --- src/governance.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/governance.cpp b/src/governance.cpp index 3169d1ccda98..e94996c2b3d0 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -594,13 +594,15 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv) LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest already have governance object, returning false\n"); return false; } - } break; + break; + } case MSG_GOVERNANCE_OBJECT_VOTE: { if (cmapVoteToObject.HasKey(inv.hash)) { LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest already have governance vote, returning false\n"); return false; } - } break; + break; + } default: LogPrint("gobject", "CGovernanceManager::ConfirmInventoryRequest unknown type, returning false\n"); return false; From f114e011d1b698d679724437286d1e0b65264734 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 19:37:25 -0500 Subject: [PATCH 13/15] add braces instead of inlining --- src/governance.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/governance.cpp b/src/governance.cpp index e94996c2b3d0..92bc1132976c 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -819,7 +819,9 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo LogPrintf("CGovernanceManager::MasternodeRateCheck -- Rate too high: object hash = %s, masternode = %s, object timestamp = %d, rate = %f, max rate = %f\n", strHash, masternodeOutpoint.ToStringShort(), nTimestamp, dRate, dMaxRate); - if (fUpdateFailStatus) it->second.fStatusOK = false; + if (fUpdateFailStatus) { + it->second.fStatusOK = false; + } return false; } From 59a9ee114efb270e9eebcd6eda21e90a68039a3d Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 21:10:32 -0500 Subject: [PATCH 14/15] Revert "Modernize ConvertVoteOutcome, ConvertSignalToString and ConvertOutcomeToString" This reverts commit 41bc3d3d863076cd5e6b10ca7706100963cd51b0. --- src/governance-vote.cpp | 75 ++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/governance-vote.cpp b/src/governance-vote.cpp index 4e6109efb8a9..9f7b523a9e82 100644 --- a/src/governance-vote.cpp +++ b/src/governance-vote.cpp @@ -11,52 +11,59 @@ std::string CGovernanceVoting::ConvertOutcomeToString(vote_outcome_enum_t nOutcome) { - static const std::map mapOutcomeString = { - { VOTE_OUTCOME_NONE, "none" }, - { VOTE_OUTCOME_YES, "yes" }, - { VOTE_OUTCOME_NO, "no" }, - { VOTE_OUTCOME_ABSTAIN, "abstain" } }; - - const auto& it = mapOutcomeString.find(nOutcome); - if (it == mapOutcomeString.end()) { - LogPrintf("CGovernanceVoting::%s -- ERROR: Unknown outcome %s\n", __func__, nOutcome); - return "error"; + switch (nOutcome) { + case VOTE_OUTCOME_NONE: + return "NONE"; + break; + case VOTE_OUTCOME_YES: + return "YES"; + break; + case VOTE_OUTCOME_NO: + return "NO"; + break; + case VOTE_OUTCOME_ABSTAIN: + return "ABSTAIN"; + break; } - return it->second; + return "error"; } std::string CGovernanceVoting::ConvertSignalToString(vote_signal_enum_t nSignal) { - static const std::map mapSignalsString = { - { VOTE_SIGNAL_FUNDING, "funding" }, - { VOTE_SIGNAL_VALID, "valid" }, - { VOTE_SIGNAL_DELETE, "delete" }, - { VOTE_SIGNAL_ENDORSED, "endorsed" } }; - - const auto& it = mapSignalsString.find(nSignal); - if (it == mapSignalsString.end()) { - LogPrintf("CGovernanceVoting::%s -- ERROR: Unknown signal %s\n", __func__, nSignal); - return "NONE"; + std::string strReturn = "NONE"; + switch (nSignal) { + case VOTE_SIGNAL_NONE: + strReturn = "NONE"; + break; + case VOTE_SIGNAL_FUNDING: + strReturn = "FUNDING"; + break; + case VOTE_SIGNAL_VALID: + strReturn = "VALID"; + break; + case VOTE_SIGNAL_DELETE: + strReturn = "DELETE"; + break; + case VOTE_SIGNAL_ENDORSED: + strReturn = "ENDORSED"; + break; } - return it->second; + + return strReturn; } vote_outcome_enum_t CGovernanceVoting::ConvertVoteOutcome(const std::string& strVoteOutcome) { - static const std::map mapStringOutcome = { - { "none", VOTE_OUTCOME_NONE }, - { "yes", VOTE_OUTCOME_YES }, - { "no", VOTE_OUTCOME_NO }, - { "abstain", VOTE_OUTCOME_ABSTAIN } }; - - const auto& it = mapStringOutcome.find(strVoteOutcome); - if (it == mapStringOutcome.end()) { - LogPrintf("CGovernanceVoting::%s -- ERROR: Unknown outcome %s\n", __func__, strVoteOutcome); - return VOTE_OUTCOME_NONE; + vote_outcome_enum_t eVote = VOTE_OUTCOME_NONE; + if (strVoteOutcome == "yes") { + eVote = VOTE_OUTCOME_YES; + } else if (strVoteOutcome == "no") { + eVote = VOTE_OUTCOME_NO; + } else if (strVoteOutcome == "abstain") { + eVote = VOTE_OUTCOME_ABSTAIN; } - return it->second; - + return eVote; } vote_signal_enum_t CGovernanceVoting::ConvertVoteSignal(const std::string& strVoteSignal) From f17c0156660fdf9ad228cb819f9c81278f1c5bf2 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 26 Sep 2018 21:12:40 -0500 Subject: [PATCH 15/15] drop unused function --- src/governance-vote.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/governance-vote.h b/src/governance-vote.h index dac33c0d657e..0a2ac0489f48 100644 --- a/src/governance-vote.h +++ b/src/governance-vote.h @@ -99,11 +99,6 @@ class CGovernanceVote bool IsValid(bool useVotingKey) const; void Relay(CConnman& connman) const; - std::string GetVoteString() const - { - return CGovernanceVoting::ConvertOutcomeToString(GetOutcome()); - } - const COutPoint& GetMasternodeOutpoint() const { return masternodeOutpoint; } /**