24 const std::pair<int, CMasternode*>& t2)
const 26 return (t1.first != t2.first) ? (t1.first < t2.first) : (t1.second->vin < t2.second->vin);
32 bool operator()(
const std::pair<arith_uint256, CMasternode*>& t1,
33 const std::pair<arith_uint256, CMasternode*>& t2)
const 35 return (t1.first != t2.first) ? (t1.first < t2.first) : (t1.second->vin < t2.second->vin);
52 mAskedUsForMasternodeList(),
53 mWeAskedForMasternodeList(),
54 mWeAskedForMasternodeListEntry(),
55 mWeAskedForVerification(),
56 mMnbRecoveryRequests(),
57 mMnbRecoveryGoodReplies(),
58 listScheduledMnbRequestConnections(),
59 fMasternodesAdded(false),
60 fMasternodesRemoved(false),
61 vecDirtyGovernanceObjectHashes(),
62 nLastWatchdogVoteTime(0),
63 mapSeenMasternodeBroadcast(),
64 mapSeenMasternodePing(),
74 LogPrint(
"masternode",
"CMasternodeMan::Add -- Adding new Masternode: addr=%s, %i now\n", mn.
addr.
ToString(),
size() + 1);
88 std::map<CNetAddr, int64_t>::iterator it2 = it1->second.find(pnode->
addr);
89 if (it2 != it1->second.end()) {
154 mnpair.second.Check();
162 LogPrintf(
"CMasternodeMan::CheckAndRemove\n");
175 std::map<COutPoint, CMasternode>::iterator it =
mapMasternodes.begin();
180 if (it->second.IsOutpointSpent()) {
181 LogPrint(
"masternode",
"CMasternodeMan::CheckAndRemove -- Removing Masternode: %s addr=%s %i now\n", it->second.GetStateString(), it->second.addr.ToString(),
size() - 1);
188 it->second.FlagGovernanceItemsAsDirty();
192 bool fAsk = (nAskForMnbRecovery > 0) &&
194 it->second.IsNewStartRequired() &&
198 std::set<CNetAddr> setRequested;
200 if(vecMasternodeRanks.empty()) {
204 bool fAskedForMnbRecovery =
false;
210 CService addr = vecMasternodeRanks[i].second.addr;
211 setRequested.insert(addr);
213 fAskedForMnbRecovery =
true;
215 if(fAskedForMnbRecovery) {
216 LogPrint(
"masternode",
"CMasternodeMan::CheckAndRemove -- Recovery initiated, masternode=%s\n", it->first.ToStringShort());
217 nAskForMnbRecovery--;
228 std::map<uint256, std::vector<CMasternodeBroadcast> >::iterator itMnbReplies =
mMnbRecoveryGoodReplies.begin();
234 LogPrint(
"masternode",
"CMasternodeMan::CheckAndRemove -- reprocessing mnb, masternode=%s\n", itMnbReplies->second[0].vin.prevout.ToStringShort());
237 itMnbReplies->second[0].fRecovery =
true;
240 LogPrint(
"masternode",
"CMasternodeMan::CheckAndRemove -- removing mnb recovery reply, masternode=%s, size=%d\n", itMnbReplies->second[0].vin.prevout.ToStringShort(), (int)itMnbReplies->second.size());
251 std::map<uint256, std::pair< int64_t, std::set<CNetAddr> > >::iterator itMnbRequest =
mMnbRecoveryRequests.begin();
265 if((*it1).second <
GetTime()) {
285 std::map<CNetAddr, int64_t>::iterator it3 = it2->second.begin();
286 while(it3 != it2->second.end()){
288 it2->second.erase(it3++);
293 if(it2->second.empty()) {
314 if((*it4).second.IsExpired()) {
315 LogPrint(
"masternode",
"CMasternodeMan::CheckAndRemove -- Removing expired Masternode ping: hash=%s\n", (*it4).second.GetHash().ToString());
326 LogPrint(
"masternode",
"CMasternodeMan::CheckAndRemove -- Removing expired Masternode verification: hash=%s\n", (*itv2).first.ToString());
361 if(mnpair.second.nProtocolVersion < nProtocolVersion)
continue;
375 if(mnpair.second.nProtocolVersion < nProtocolVersion || !mnpair.second.IsEnabled())
continue;
407 LogPrintf(
"CMasternodeMan::DsegUpdate -- we already asked %s for the list; skipping...\n", pnode->
addr.
ToString());
417 LogPrint(
"masternode",
"CMasternodeMan::DsegUpdate -- asked %s for the list\n", pnode->
addr.
ToString());
436 masternodeRet = it->second;
447 mnInfoRet = it->second.GetInfo();
455 if (mnpair.second.pubKeyMasternode == pubKeyMasternode) {
456 mnInfoRet = mnpair.second.GetInfo();
468 if (scriptCollateralAddress == payee) {
469 mnInfoRet = mnpair.second.GetInfo();
503 std::vector<std::pair<int, CMasternode*> > vecMasternodeLastPaid;
512 if(!mnpair.second.IsValidForPayment())
continue;
521 if(fFilterSigTime && mnpair.second.sigTime + (nMnCount*2.6*60) >
GetAdjustedTime())
continue;
526 vecMasternodeLastPaid.push_back(std::make_pair(mnpair.second.GetLastPaidBlock(), &mnpair.second));
529 nCountRet = (int)vecMasternodeLastPaid.size();
532 if(fFilterSigTime && nCountRet < nMnCount/3)
540 LogPrintf(
"CMasternode::GetNextMasternodeInQueueForPayment -- ERROR: GetBlockHash() failed at nBlockHeight %d\n", nBlockHeight - 101);
547 int nTenthNetwork = nMnCount/10;
553 if(nScore > nHighest){
555 pBestMasternode = s.second;
558 if(nCountTenth >= nTenthNetwork)
break;
560 if (pBestMasternode) {
561 mnInfoRet = pBestMasternode->
GetInfo();
573 int nCountNotExcluded = nCountEnabled - vecToExclude.size();
575 LogPrintf(
"CMasternodeMan::FindRandomNotInVec -- %d enabled masternodes, %d masternodes to choose from\n", nCountEnabled, nCountNotExcluded);
579 std::vector<CMasternode*> vpMasternodesShuffled;
581 vpMasternodesShuffled.push_back(&mnpair.second);
586 std::random_shuffle(vpMasternodesShuffled.begin(), vpMasternodesShuffled.end(), insecureRand);
590 BOOST_FOREACH(
CMasternode* pmn, vpMasternodesShuffled) {
593 BOOST_FOREACH(
const COutPoint &outpointToExclude, vecToExclude) {
599 if(fExclude)
continue;
605 LogPrint(
"masternode",
"CMasternodeMan::FindRandomNotInVec -- failed\n");
611 vecMasternodeScoresRet.clear();
623 if (mnpair.second.nProtocolVersion >= nMinProtocol) {
624 vecMasternodeScoresRet.push_back(std::make_pair(mnpair.second.CalculateScore(nBlockHash), &mnpair.second));
628 sort(vecMasternodeScoresRet.rbegin(), vecMasternodeScoresRet.rend(),
CompareScoreMN());
629 return !vecMasternodeScoresRet.empty();
642 LogPrintf(
"CMasternodeMan::%s -- ERROR: GetBlockHash() failed at nBlockHeight %d\n", __func__, nBlockHeight);
653 for (
auto& scorePair : vecMasternodeScores) {
655 if(scorePair.second->vin.prevout == outpoint) {
666 vecMasternodeRanksRet.clear();
674 LogPrintf(
"CMasternodeMan::%s -- ERROR: GetBlockHash() failed at nBlockHeight %d\n", __func__, nBlockHeight);
685 for (
auto& scorePair : vecMasternodeScores) {
687 vecMasternodeRanksRet.push_back(std::make_pair(nRank, *scorePair.second));
703 LogPrintf(
"CMasternodeMan::%s -- ERROR: GetBlockHash() failed at nBlockHeight %d\n", __func__, nBlockHeight);
713 if (vecMasternodeScores.size() < nRankIn)
717 for (
auto& scorePair : vecMasternodeScores) {
719 if(nRank == nRankIn) {
720 mnInfoRet = *scorePair.second;
735 if(privateSendClient.infoMixingMasternode.fInfoValid && pnode->addr == privateSendClient.infoMixingMasternode.addr)
737 LogPrintf(
"Closing Masternode connection: peer=%d, addr=%s\n", pnode->id, pnode->addr.ToString());
738 pnode->fDisconnect = true;
747 return std::make_pair(
CService(), std::set<uint256>());
750 std::set<uint256> setResult;
758 if(pairFront.first == it->first) {
759 setResult.insert(it->second);
767 return std::make_pair(pairFront.first, setResult);
783 LogPrint(
"masternode",
"MNANNOUNCE -- Masternode announce, masternode=%s\n", mnb.vin.prevout.ToStringShort());
790 }
else if(nDos > 0) {
806 LogPrint(
"masternode",
"MNPING -- Masternode ping, masternode=%s\n", mnp.vin.prevout.ToStringShort());
814 LogPrint(
"masternode",
"MNPING -- Masternode ping, masternode=%s new\n", mnp.vin.prevout.ToStringShort());
822 if(pmn && mnp.fSentinelIsCurrent)
826 if(pmn && pmn->IsNewStartRequired())
return;
829 if(mnp.CheckAndUpdate(pmn,
false, nDos, connman))
return;
834 }
else if(pmn != NULL) {
841 AskForMN(pfrom, mnp.vin.prevout, connman);
852 LogPrint(
"masternode",
"DSEG -- Masternode list, masternode=%s\n", vin.prevout.ToStringShort());
864 LogPrintf(
"DSEG -- peer already asked me for the list, peer=%d\n", pfrom->
id);
875 if (vin !=
CTxIn() && vin != mnpair.second.vin)
continue;
876 if (mnpair.second.addr.IsRFC1918() || mnpair.second.addr.IsLocal())
continue;
877 if (mnpair.second.IsUpdateRequired())
continue;
879 LogPrint(
"masternode",
"DSEG -- Sending Masternode entry: masternode=%s addr=%s\n", mnpair.first.ToStringShort(), mnpair.second.addr.ToString());
890 if (vin.prevout == mnpair.first) {
891 LogPrintf(
"DSEG -- Sent 1 Masternode inv to peer %d\n", pfrom->
id);
898 LogPrintf(
"DSEG -- Sent %d Masternode invs to peer %d\n", nInvCount, pfrom->
id);
902 LogPrint(
"masternode",
"DSEG -- No invs sent to peer %d\n", pfrom->
id);
912 if(mnv.vchSig1.empty()) {
915 }
else if (mnv.vchSig2.empty()) {
942 int nRanksTotal = (int)vecMasternodeRanks.size();
945 std::vector<std::pair<int, CMasternode> >::iterator it = vecMasternodeRanks.begin();
946 while(it != vecMasternodeRanks.end()) {
948 LogPrint(
"masternode",
"CMasternodeMan::DoFullVerificationStep -- Must be in top %d to send verify request\n",
954 LogPrint(
"masternode",
"CMasternodeMan::DoFullVerificationStep -- Found self at rank %d/%d, verifying up to %d masternodes\n",
962 if(nMyRank == -1)
return;
967 if(nOffset >= (
int)vecMasternodeRanks.size())
return;
969 std::vector<CMasternode*> vSortedByAddr;
971 vSortedByAddr.push_back(&mnpair.second);
974 sort(vSortedByAddr.begin(), vSortedByAddr.end(),
CompareByAddr());
976 it = vecMasternodeRanks.begin() + nOffset;
977 while(it != vecMasternodeRanks.end()) {
978 if(it->second.IsPoSeVerified() || it->second.IsPoSeBanned()) {
979 LogPrint(
"masternode",
"CMasternodeMan::DoFullVerificationStep -- Already %s%s%s masternode %s address %s, skipping...\n",
980 it->second.IsPoSeVerified() ?
"verified" :
"",
981 it->second.IsPoSeVerified() && it->second.IsPoSeBanned() ?
" and " :
"",
982 it->second.IsPoSeBanned() ?
"banned" :
"",
983 it->second.vin.prevout.ToStringShort(), it->second.addr.ToString());
985 if(nOffset >= (
int)vecMasternodeRanks.size())
break;
989 LogPrint(
"masternode",
"CMasternodeMan::DoFullVerificationStep -- Verifying masternode %s rank %d/%d address %s\n",
990 it->second.vin.prevout.ToStringShort(), it->first, nRanksTotal, it->second.addr.ToString());
996 if(nOffset >= (
int)vecMasternodeRanks.size())
break;
1000 LogPrint(
"masternode",
"CMasternodeMan::DoFullVerificationStep -- Sent verification requests to %d masternodes\n", nCount);
1012 std::vector<CMasternode*> vBan;
1013 std::vector<CMasternode*> vSortedByAddr;
1022 vSortedByAddr.push_back(&mnpair.second);
1025 sort(vSortedByAddr.begin(), vSortedByAddr.end(),
CompareByAddr());
1031 if(!pprevMasternode) {
1032 pprevMasternode = pmn;
1037 if(pmn->
addr == pprevMasternode->
addr) {
1038 if(pverifiedMasternode) {
1040 vBan.push_back(pmn);
1043 vBan.push_back(pprevMasternode);
1045 pverifiedMasternode = pmn;
1050 pprevMasternode = pmn;
1065 LogPrint(
"masternode",
"CMasternodeMan::SendVerifyRequest -- too many requests, skipping... addr=%s\n", addr.
ToString());
1071 LogPrintf(
"CMasternodeMan::SendVerifyRequest -- can't connect to node to verify it, addr=%s\n", addr.
ToString());
1079 LogPrintf(
"CMasternodeMan::SendVerifyRequest -- verifying node using nonce %d addr=%s\n", mnv.
nonce, addr.
ToString());
1096 LogPrintf(
"MasternodeMan::SendVerifyReply -- ERROR: peer already asked me recently, peer=%d\n", pnode->
id);
1103 LogPrintf(
"MasternodeMan::SendVerifyReply -- can't get block hash for unknown block height %d, peer=%d\n", mnv.
nBlockHeight, pnode->
id);
1110 LogPrintf(
"MasternodeMan::SendVerifyReply -- SignMessage() failed\n");
1114 std::string strError;
1117 LogPrintf(
"MasternodeMan::SendVerifyReply -- VerifyMessage() failed, error: %s\n", strError);
1127 std::string strError;
1131 LogPrintf(
"CMasternodeMan::ProcessVerifyReply -- ERROR: we didn't ask for verification of %s, peer=%d\n", pnode->
addr.
ToString(), pnode->
id);
1138 LogPrintf(
"CMasternodeMan::ProcessVerifyReply -- ERROR: wrong nounce: requested=%d, received=%d, peer=%d\n",
1146 LogPrintf(
"CMasternodeMan::ProcessVerifyReply -- ERROR: wrong nBlockHeight: requested=%d, received=%d, peer=%d\n",
1155 LogPrintf(
"MasternodeMan::ProcessVerifyReply -- can't get block hash for unknown block height %d, peer=%d\n", mnv.
nBlockHeight, pnode->
id);
1161 LogPrintf(
"CMasternodeMan::ProcessVerifyReply -- ERROR: already verified %s recently\n", pnode->
addr.
ToString());
1170 std::vector<CMasternode*> vpMasternodesToBan;
1176 prealMasternode = &mnpair.second;
1177 if(!mnpair.second.IsPoSeVerified()) {
1185 mnv.
addr = mnpair.second.addr;
1186 mnv.
vin1 = mnpair.second.vin;
1192 LogPrintf(
"MasternodeMan::ProcessVerifyReply -- SignMessage() failed\n");
1196 std::string strError;
1199 LogPrintf(
"MasternodeMan::ProcessVerifyReply -- VerifyMessage() failed, error: %s\n", strError);
1207 vpMasternodesToBan.push_back(&mnpair.second);
1212 if(!prealMasternode) {
1215 LogPrintf(
"CMasternodeMan::ProcessVerifyReply -- ERROR: no real masternode found for addr %s\n", pnode->
addr.
ToString());
1219 LogPrintf(
"CMasternodeMan::ProcessVerifyReply -- verified real masternode %s for addr %s\n",
1222 BOOST_FOREACH(
CMasternode* pmn, vpMasternodesToBan) {
1224 LogPrint(
"masternode",
"CMasternodeMan::ProcessVerifyBroadcast -- increased PoSe ban score for %s addr %s, new score %d\n",
1227 LogPrintf(
"CMasternodeMan::ProcessVerifyBroadcast -- PoSe score increased for %d fake masternodes, addr %s\n",
1228 (
int)vpMasternodesToBan.size(), pnode->
addr.
ToString());
1234 std::string strError;
1244 LogPrint(
"masternode",
"CMasternodeMan::ProcessVerifyBroadcast -- Outdated: current block %d, verification block %d, peer=%d\n",
1250 LogPrint(
"masternode",
"CMasternodeMan::ProcessVerifyBroadcast -- ERROR: same vins %s, peer=%d\n",
1261 LogPrintf(
"CMasternodeMan::ProcessVerifyBroadcast -- Can't get block hash for unknown block height %d, peer=%d\n", mnv.
nBlockHeight, pnode->
id);
1268 LogPrint(
"masternode",
"CMasternodeMan::ProcessVerifyBroadcast -- Can't calculate rank for masternode %s\n",
1274 LogPrint(
"masternode",
"CMasternodeMan::ProcessVerifyBroadcast -- Masternode %s is not in top %d, current rank %d, peer=%d\n",
1298 if(pmn1->addr != mnv.
addr) {
1304 LogPrintf(
"CMasternodeMan::ProcessVerifyBroadcast -- VerifyMessage() for masternode1 failed, error: %s\n", strError);
1309 LogPrintf(
"CMasternodeMan::ProcessVerifyBroadcast -- VerifyMessage() for masternode2 failed, error: %s\n", strError);
1313 if(!pmn1->IsPoSeVerified()) {
1314 pmn1->DecreasePoSeBanScore();
1318 LogPrintf(
"CMasternodeMan::ProcessVerifyBroadcast -- verified masternode %s for addr %s\n",
1319 pmn1->vin.prevout.ToStringShort(), pnode->
addr.
ToString());
1324 if(mnpair.second.addr != mnv.
addr || mnpair.first == mnv.
vin1.
prevout)
continue;
1325 mnpair.second.IncreasePoSeBanScore();
1327 LogPrint(
"masternode",
"CMasternodeMan::ProcessVerifyBroadcast -- increased PoSe ban score for %s addr %s, new score %d\n",
1328 mnpair.first.ToStringShort(), mnpair.second.addr.ToString(), mnpair.second.nPoSeBanScore);
1330 LogPrintf(
"CMasternodeMan::ProcessVerifyBroadcast -- PoSe score incresed for %d fake masternodes, addr %s\n",
1337 std::ostringstream info;
1363 if(pmn->UpdateFromNewBroadcast(mnb, connman)) {
1391 LogPrint(
"masternode",
"CMasternodeMan::CheckMnbAndUpdateMasternodeList -- mnb=%s seen request\n", hash.ToString());
1393 LogPrint(
"masternode",
"CMasternodeMan::CheckMnbAndUpdateMasternodeList -- mnb=%s seen request, addr=%s\n", hash.ToString(), pfrom->
addr.
ToString());
1425 if(!mnb.
Update(pmn, nDos, connman)) {
1429 if(hash != mnbOld.
GetHash()) {
1444 LogPrintf(
"CMasternodeMan::CheckMnbAndUpdateMasternodeList -- Got NEW Masternode entry: masternode=%s sigTime=%lld addr=%s\n",
1469 static bool IsFirstRun =
true;
1478 mnpair.second.UpdateLastPaid(pindex, nMaxBlocksToScanBack);
1517 mnpair.second.RemoveGovernanceObject(nGovernanceObjectHash);
1525 if (mnpair.second.pubKeyMasternode == pubKeyMasternode) {
1526 mnpair.second.Check(fForce);
1536 return pmn ? pmn->
IsPingedWithin(nSeconds, nTimeToCheckAt) :
false;
1578 bool fMasternodesAddedLocal =
false;
1579 bool fMasternodesRemovedLocal =
false;
1586 if(fMasternodesAddedLocal) {
1590 if(fMasternodesRemovedLocal) {
CMasternode * Find(const COutPoint &outpoint)
Find an entry.
bool CheckOutpoint(int &nDos)
masternode_info_t FindRandomNotInVec(const std::vector< COutPoint > &vecToExclude, int nProtocolVersion=-1)
Find a random entry.
bool GetBlockHash(uint256 &hashRet, int nBlockHeight)
CNode * ConnectNode(CAddress addrConnect, const char *pszDest=NULL, bool fConnectToMasternode=false)
static const int MNB_RECOVERY_QUORUM_TOTAL
CMasternodeSync masternodeSync
std::set< uint256 > setAskFor
static const int LAST_PAID_SCAN_BLOCKS
static const int MIN_POSE_PROTO_VERSION
bool Update(CMasternode *pmn, int &nDos, CConnman &connman)
bool CheckMnbAndUpdateMasternodeList(CNode *pfrom, CMasternodeBroadcast mnb, int &nDos, CConnman &connman)
Perform complete check and only then update list and maps.
std::string NetworkIDString() const
void UpdateWatchdogVoteTime(uint64_t nVoteTime=0)
CActiveMasternode activeMasternode
bool IsMnbRecoveryRequested(const uint256 &hash)
void Relay(CConnman &connman)
bool operator()(const CMasternode *t1, const CMasternode *t2) const
void AddFulfilledRequest(CAddress addr, std::string strRequest)
uint64_t GetHash(const uint256 &salt) const
void UpdatedBlockTip(const CBlockIndex *pindex)
void CheckMasternode(const CPubKey &pubKeyMasternode, bool fForce)
bool IsMasternodePingedWithin(const COutPoint &outpoint, int nSeconds, int64_t nTimeToCheckAt=-1)
bool Get(const COutPoint &outpoint, CMasternode &masternodeRet)
Versions of Find that are safe to use from outside the class.
void CheckAndRemove()
This is dummy overload to be used for dumping/loading mncache.dat.
std::map< uint256, std::vector< CMasternodeBroadcast > > mMnbRecoveryGoodReplies
bool operator()(const std::pair< arith_uint256, CMasternode *> &t1, const std::pair< arith_uint256, CMasternode *> &t2) const
bool GetMasternodeRanks(rank_pair_vec_t &vecMasternodeRanksRet, int nBlockHeight=-1, int nMinProtocol=0)
std::map< uint256, CMasternodePing > mapSeenMasternodePing
const char * SYNCSTATUSCOUNT
std::map< COutPoint, std::map< CNetAddr, int64_t > > mWeAskedForMasternodeListEntry
std::map< uint256, std::pair< int64_t, CMasternodeBroadcast > > mapSeenMasternodeBroadcast
void AskForMN(CNode *pnode, const COutPoint &outpoint, CConnman &connman)
Ask (source) node for mnb.
std::string ToString(bool fUseGetnameinfo=true) const
bool IsWinnersListSynced()
static const int MASTERNODE_NEW_START_REQUIRED_SECONDS
bool Add(CMasternode &mn)
Add an entry.
std::vector< score_pair_t > score_pair_vec_t
void AddNewAddress(const CAddress &addr, const CAddress &addrFrom, int64_t nTimePenalty=0)
bool HasFulfilledRequest(CAddress addr, std::string strRequest)
void SetMasternodeLastPing(const COutPoint &outpoint, const CMasternodePing &mnp)
void Check()
Check all Masternodes.
bool fMasternodesAdded
Set when masternodes are added, cleared when CGovernanceManager is notified.
static const int MASTERNODE_WATCHDOG_MAX_SECONDS
std::vector< unsigned char > vchSig1
std::string GetStateString() const
std::map< CNetAddr, int64_t > mAskedUsForMasternodeList
void UpdateLastPaid(const CBlockIndex *pindex)
#define AssertLockHeld(cs)
void Misbehaving(NodeId pnode, int howmuch)
arith_uint256 CalculateScore(const uint256 &blockHash)
std::map< CNetAddr, CMasternodeVerification > mWeAskedForVerification
CMasternodePayments mnpayments
bool DisallowMixing(const COutPoint &outpoint)
static int LogPrint(const char *category, const char *format)
void DoFullVerificationStep(CConnman &connman)
bool operator()(const std::pair< int, CMasternode *> &t1, const std::pair< int, CMasternode *> &t2) const
bool GetMasternodeInfo(const COutPoint &outpoint, masternode_info_t &mnInfoRet)
static const int DSEG_UPDATE_SECONDS
bool GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int &nCountRet, masternode_info_t &mnInfoRet)
Find an entry in the masternode list that is next to be paid.
static const int MASTERNODE_SYNC_LIST
bool IsScheduled(CMasternode &mn, int nNotBlockHeight)
int CountMasternodes(int nProtocolVersion=-1)
std::list< std::pair< CService, uint256 > > listScheduledMnbRequestConnections
void PushInventory(const CInv &inv)
void ProcessMessage(CNode *pfrom, std::string &strCommand, CDataStream &vRecv, CConnman &connman)
std::map< uint256, CMasternodeVerification > mapSeenMasternodeVerification
static const int MNB_RECOVERY_MAX_ASK_ENTRIES
void Check(bool fForce=false)
std::map< COutPoint, CMasternode > mapMasternodes
std::vector< rank_pair_t > rank_pair_vec_t
static bool VerifyMessage(const CPubKey pubkey, const std::vector< unsigned char > &vchSig, const std::string strMessage, std::string &strErrorRet)
Verify the message signature, returns true if succcessful.
void SendVerifyReply(CNode *pnode, CMasternodeVerification &mnv, CConnman &connman)
std::string ToString() const
CScript GetScriptForDestination(const CTxDestination &dest)
void ProcessMasternodeConnections(CConnman &connman)
bool AddGovernanceVote(const COutPoint &outpoint, uint256 nGovernanceObjectHash)
int size()
Return the number of (unique) Masternodes.
bool GetMasternodeByRank(int nRank, masternode_info_t &mnInfoRet, int nBlockHeight=-1, int nMinProtocol=0)
static const int MNB_RECOVERY_QUORUM_REQUIRED
static const int MNB_RECOVERY_RETRY_SECONDS
std::string ToString() const
static const int MASTERNODE_MIN_MNP_SECONDS
void UpdateCachesAndClean()
void ProcessVerifyReply(CNode *pnode, CMasternodeVerification &mnv)
void ManageState(CConnman &connman)
Manage state of active Masternode.
std::vector< unsigned char > vchSig2
void AddGovernanceVote(uint256 nGovernanceObjectHash)
void CheckMasternodeOrphanObjects(CConnman &connman)
bool GetMasternodeScores(const uint256 &nBlockHash, score_pair_vec_t &vecMasternodeScoresRet, int nMinProtocol=0)
void CheckMasternodeOrphanVotes(CConnman &connman)
void Clear()
Clear Masternode vector.
static const int MAX_POSE_BLOCKS
static const int MASTERNODE_POSE_BAN_MAX_SCORE
int CountEnabled(int nProtocolVersion=-1)
static const int MNB_RECOVERY_WAIT_SECONDS
const CChainParams & Params()
int GetUTXOConfirmations(const COutPoint &outpoint)
bool AllowMixing(const COutPoint &outpoint)
static const int PROTOCOL_VERSION
void UpdateWatchdogVoteTime(const COutPoint &outpoint, uint64_t nVoteTime=0)
static const std::string SERIALIZATION_VERSION_STRING
int64_t GetAdjustedTime()
bool IsBlockchainSynced()
void IncreasePoSeBanScore()
std::map< CNetAddr, int64_t > mWeAskedForMasternodeList
void ProcessVerifyBroadcast(CNode *pnode, const CMasternodeVerification &mnv)
CNetFulfilledRequestManager netfulfilledman
static bool IsValidStateForAutoStart(int nActiveStateIn)
bool SimpleCheck(int &nDos)
void NotifyMasternodeUpdates(CConnman &connman)
int64_t nLastWatchdogVoteTime
static const int MAX_POSE_CONNECTIONS
bool PoSeBan(const COutPoint &outpoint)
masternode_info_t GetInfo()
void RemoveGovernanceObject(uint256 nGovernanceObjectHash)
bool Has(const COutPoint &outpoint)
static const std::string MAIN
bool GetMasternodeRank(const COutPoint &outpoint, int &nRankRet, int nBlockHeight=-1, int nMinProtocol=0)
static bool SignMessage(const std::string strMessage, std::vector< unsigned char > &vchSigRet, const CKey key)
Sign the message, returns true if successful.
int64_t GetTime()
For unit testing.
std::pair< CService, std::set< uint256 > > PopScheduledMnbRequestConnection()
CGovernanceManager governance
void BumpAssetLastTime(std::string strFuncName)
int GetMinMasternodePaymentsProto()
void UpdateMasternodeList(CMasternodeBroadcast mnb, CConnman &connman)
Update masternode list and maps using provided CMasternodeBroadcast.
static constexpr const CAllNodes AllNodes
std::map< uint256, std::pair< int64_t, std::set< CNetAddr > > > mMnbRecoveryRequests
int nHeight
height of the entry in the chain. The genesis block has height 0
bool SendVerifyRequest(const CAddress &addr, const std::vector< CMasternode *> &vSortedByAddr, CConnman &connman)
void DsegUpdate(CNode *pnode, CConnman &connman)
Count Masternodes by network type - NET_IPV4, NET_IPV6, NET_TOR.
std::string ToStringShort() const
void ForEachNode(const Condition &cond, Callable &&func)
void DecreasePoSeBanScore()
static const int MAX_POSE_RANK
bool IsMasternodeListSynced()
void PushMessage(CNode *pnode, const std::string &sCommand, Args &&... args)
bool fMasternodesRemoved
Set when masternodes are removed, cleared when CGovernanceManager is notified.
bool IsPingedWithin(int nSeconds, int64_t nTimeToCheckAt=-1)
static const std::string REGTEST