RequestLowDataPaymentBlocks should request unknown payment blocks too (#1255)

This commit is contained in:
UdjinM6 2017-01-11 03:00:06 +04:00 committed by GitHub
parent 3b9a748d5e
commit a930363366

View File

@ -843,15 +843,36 @@ void CMasternodePayments::Sync(CNode* pnode, int nCountNeeded)
pnode->PushMessage(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_MNW, nInvCount); pnode->PushMessage(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_MNW, nInvCount);
} }
// Request low data payment blocks in batches directly from some node instead of/after preliminary Sync. // Request low data/unknown payment blocks in batches directly from some node instead of/after preliminary Sync.
void CMasternodePayments::RequestLowDataPaymentBlocks(CNode* pnode) void CMasternodePayments::RequestLowDataPaymentBlocks(CNode* pnode)
{ {
// Old nodes can't process this // Old nodes can't process this
if(pnode->nVersion < 70202) return; if(pnode->nVersion < 70202) return;
if(!pCurrentBlockIndex) return;
LOCK2(cs_main, cs_mapMasternodeBlocks); LOCK2(cs_main, cs_mapMasternodeBlocks);
std::vector<CInv> vToFetch; std::vector<CInv> vToFetch;
int nLimit = GetStorageLimit();
const CBlockIndex *pindex = pCurrentBlockIndex;
while(pCurrentBlockIndex->nHeight - pindex->nHeight < nLimit) {
if(!mapMasternodeBlocks.count(pindex->nHeight)) {
// We have no idea about this block height, let's ask
vToFetch.push_back(CInv(MSG_MASTERNODE_PAYMENT_BLOCK, pindex->GetBlockHash()));
// We should not violate GETDATA rules
if(vToFetch.size() == MAX_INV_SZ) {
LogPrintf("CMasternodePayments::SyncLowDataPaymentBlocks -- asking peer %d for %d blocks\n", pnode->id, MAX_INV_SZ);
pnode->PushMessage(NetMsgType::GETDATA, vToFetch);
// Start filling new batch
vToFetch.clear();
}
}
if(!pindex->pprev) break;
pindex = pindex->pprev;
}
std::map<int, CMasternodeBlockPayees>::iterator it = mapMasternodeBlocks.begin(); std::map<int, CMasternodeBlockPayees>::iterator it = mapMasternodeBlocks.begin();
while(it != mapMasternodeBlocks.end()) { while(it != mapMasternodeBlocks.end()) {