|
|
|
@ -1240,7 +1240,7 @@ void PeerLogicValidation::BlockChecked(const CBlock& block, const CValidationSta
|
|
|
|
|
// the tip yet so we have no way to check this directly here. Instead we
|
|
|
|
|
// just check that there are currently no other blocks in flight.
|
|
|
|
|
else if (state.IsValid() &&
|
|
|
|
|
!IsInitialBlockDownload() &&
|
|
|
|
|
!::ChainstateActive().IsInitialBlockDownload() &&
|
|
|
|
|
mapBlocksInFlight.count(hash) == mapBlocksInFlight.size()) {
|
|
|
|
|
if (it != mapBlockSource.end()) {
|
|
|
|
|
MaybeSetPeerAsAnnouncingHeaderAndIDs(it->second.first, connman);
|
|
|
|
@ -1728,7 +1728,7 @@ bool static ProcessHeadersMessage(CNode *pfrom, CConnman *connman, const std::ve
|
|
|
|
|
}
|
|
|
|
|
// If we're in IBD, we want outbound peers that will serve us a useful
|
|
|
|
|
// chain. Disconnect peers that are on chains with insufficient work.
|
|
|
|
|
if (IsInitialBlockDownload() && nCount != MAX_HEADERS_RESULTS) {
|
|
|
|
|
if (::ChainstateActive().IsInitialBlockDownload() && nCount != MAX_HEADERS_RESULTS) {
|
|
|
|
|
// When nCount < MAX_HEADERS_RESULTS, we know we have no more
|
|
|
|
|
// headers to fetch from this peer.
|
|
|
|
|
if (nodestate->pindexBestKnownBlock && nodestate->pindexBestKnownBlock->nChainWork < nMinimumChainWork) {
|
|
|
|
@ -1994,7 +1994,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
if (!pfrom->fInbound)
|
|
|
|
|
{
|
|
|
|
|
// Advertise our address
|
|
|
|
|
if (fListen && !IsInitialBlockDownload())
|
|
|
|
|
if (fListen && !::ChainstateActive().IsInitialBlockDownload())
|
|
|
|
|
{
|
|
|
|
|
CAddress addr = GetLocalAddress(&pfrom->addr, pfrom->GetLocalServices());
|
|
|
|
|
FastRandomContext insecure_rand;
|
|
|
|
@ -2229,7 +2229,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
pfrom->AddInventoryKnown(inv);
|
|
|
|
|
if (fBlocksOnly) {
|
|
|
|
|
LogPrint(BCLog::NET, "transaction (%s) inv sent in violation of protocol peer=%d\n", inv.hash.ToString(), pfrom->GetId());
|
|
|
|
|
} else if (!fAlreadyHave && !fImporting && !fReindex && !IsInitialBlockDownload()) {
|
|
|
|
|
} else if (!fAlreadyHave && !fImporting && !fReindex && !::ChainstateActive().IsInitialBlockDownload()) {
|
|
|
|
|
RequestTx(State(pfrom->GetId()), inv.hash, nNow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2387,7 +2387,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOCK(cs_main);
|
|
|
|
|
if (IsInitialBlockDownload() && !pfrom->fWhitelisted) {
|
|
|
|
|
if (::ChainstateActive().IsInitialBlockDownload() && !pfrom->fWhitelisted) {
|
|
|
|
|
LogPrint(BCLog::NET, "Ignoring getheaders from peer=%d because node is in initial block download\n", pfrom->GetId());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@ -2609,7 +2609,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
|
|
|
|
|
if (!LookupBlockIndex(cmpctblock.header.hashPrevBlock)) {
|
|
|
|
|
// Doesn't connect (or is genesis), instead of DoSing in AcceptBlockHeader, request deeper headers
|
|
|
|
|
if (!IsInitialBlockDownload())
|
|
|
|
|
if (!::ChainstateActive().IsInitialBlockDownload())
|
|
|
|
|
connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), uint256()));
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@ -3525,7 +3525,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
|
|
|
|
|
|
|
|
|
|
// Address refresh broadcast
|
|
|
|
|
int64_t nNow = GetTimeMicros();
|
|
|
|
|
if (!IsInitialBlockDownload() && pto->nNextLocalAddrSend < nNow) {
|
|
|
|
|
if (!::ChainstateActive().IsInitialBlockDownload() && pto->nNextLocalAddrSend < nNow) {
|
|
|
|
|
AdvertiseLocal(pto);
|
|
|
|
|
pto->nNextLocalAddrSend = PoissonNextSend(nNow, AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL);
|
|
|
|
|
}
|
|
|
|
@ -3926,7 +3926,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
|
|
|
|
|
// Message: getdata (blocks)
|
|
|
|
|
//
|
|
|
|
|
std::vector<CInv> vGetData;
|
|
|
|
|
if (!pto->fClient && ((fFetch && !pto->m_limited_node) || !IsInitialBlockDownload()) && state.nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) {
|
|
|
|
|
if (!pto->fClient && ((fFetch && !pto->m_limited_node) || !::ChainstateActive().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);
|
|
|
|
|