|
|
|
@ -892,6 +892,7 @@ void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CB
|
|
|
|
|
const int nNewHeight = pindexNew->nHeight;
|
|
|
|
|
connman->SetBestHeight(nNewHeight);
|
|
|
|
|
|
|
|
|
|
g_initial_block_download_completed = !fInitialDownload;
|
|
|
|
|
if (!fInitialDownload) {
|
|
|
|
|
// Find the hashes of all blocks that weren't previously in the best chain.
|
|
|
|
|
std::vector<uint256> vHashes;
|
|
|
|
@ -1642,7 +1643,13 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
pfrom->cleanSubVer = cleanSubVer;
|
|
|
|
|
}
|
|
|
|
|
pfrom->nStartingHeight = nStartingHeight;
|
|
|
|
|
pfrom->fClient = !(nServices & NODE_NETWORK);
|
|
|
|
|
|
|
|
|
|
// set nodes not relaying blocks and tx and not serving (parts) of the historical blockchain as "clients"
|
|
|
|
|
pfrom->fClient = (!(nServices & NODE_NETWORK) && !(nServices & NODE_NETWORK_LIMITED));
|
|
|
|
|
|
|
|
|
|
// set nodes not capable of serving the complete blockchain history as "limited nodes"
|
|
|
|
|
pfrom->m_limited_node = (!(nServices & NODE_NETWORK) && (nServices & NODE_NETWORK_LIMITED));
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
LOCK(pfrom->cs_filter);
|
|
|
|
|
pfrom->fRelayTxes = fRelay; // set to true after we get the first filter* message
|
|
|
|
@ -3611,7 +3618,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto, std::atomic<bool>& interruptM
|
|
|
|
|
// Message: getdata (blocks)
|
|
|
|
|
//
|
|
|
|
|
std::vector<CInv> vGetData;
|
|
|
|
|
if (!pto->fClient && (fFetch || !IsInitialBlockDownload()) && state.nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
|
|
|
|
|
if (!pto->fClient && ((fFetch && !pto->m_limited_node) || !IsInitialBlockDownload()) && state.nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
|
|
|
|
|
std::vector<const CBlockIndex*> vToDownload;
|
|
|
|
|
NodeId staller = -1;
|
|
|
|
|
FindNextBlocksToDownload(pto->GetId(), MAX_BLOCKS_IN_TRANSIT_PER_PEER - state.nBlocksInFlight, vToDownload, staller, consensusParams);
|
|
|
|
|