|
|
|
@ -1162,7 +1162,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t GetFetchFlags(CNode* pfrom, const CBlockIndex* pprev, const Consensus::Params& chainparams) {
|
|
|
|
|
uint32_t GetFetchFlags(CNode* pfrom) {
|
|
|
|
|
uint32_t nFetchFlags = 0;
|
|
|
|
|
if ((pfrom->GetLocalServices() & NODE_WITNESS) && State(pfrom->GetId())->fHaveWitness) {
|
|
|
|
|
nFetchFlags |= MSG_WITNESS_FLAG;
|
|
|
|
@ -1550,7 +1550,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
|
|
|
|
|
LOCK(cs_main);
|
|
|
|
|
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom, chainActive.Tip(), chainparams.GetConsensus());
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom);
|
|
|
|
|
|
|
|
|
|
std::vector<CInv> vToFetch;
|
|
|
|
|
|
|
|
|
@ -1903,7 +1903,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!fRejectedParents) {
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom, chainActive.Tip(), chainparams.GetConsensus());
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom);
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) {
|
|
|
|
|
CInv _inv(MSG_TX | nFetchFlags, txin.prevout.hash);
|
|
|
|
|
pfrom->AddInventoryKnown(_inv);
|
|
|
|
@ -2040,7 +2040,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
// We requested this block for some reason, but our mempool will probably be useless
|
|
|
|
|
// so we just grab the block via normal getdata
|
|
|
|
|
std::vector<CInv> vInv(1);
|
|
|
|
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom, pindex->pprev, chainparams.GetConsensus()), cmpctblock.header.GetHash());
|
|
|
|
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
|
|
|
|
connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
@ -2084,7 +2084,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
} else if (status == READ_STATUS_FAILED) {
|
|
|
|
|
// Duplicate txindexes, the block is now in-flight, so just request it
|
|
|
|
|
std::vector<CInv> vInv(1);
|
|
|
|
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom, pindex->pprev, chainparams.GetConsensus()), cmpctblock.header.GetHash());
|
|
|
|
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
|
|
|
|
connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@ -2127,7 +2127,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
// We requested this block, but its far into the future, so our
|
|
|
|
|
// mempool will probably be useless - request the block normally
|
|
|
|
|
std::vector<CInv> vInv(1);
|
|
|
|
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom, pindex->pprev, chainparams.GetConsensus()), cmpctblock.header.GetHash());
|
|
|
|
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
|
|
|
|
connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
@ -2198,7 +2198,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
} else if (status == READ_STATUS_FAILED) {
|
|
|
|
|
// Might have collided, fall back to getdata now :(
|
|
|
|
|
std::vector<CInv> invs;
|
|
|
|
|
invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom, chainActive.Tip(), chainparams.GetConsensus()), resp.blockhash));
|
|
|
|
|
invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom), resp.blockhash));
|
|
|
|
|
connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));
|
|
|
|
|
} else {
|
|
|
|
|
// Block is either okay, or possibly we received
|
|
|
|
@ -2366,7 +2366,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
// Can't download any more from this peer
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom, pindex->pprev, chainparams.GetConsensus());
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom);
|
|
|
|
|
vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash()));
|
|
|
|
|
MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), chainparams.GetConsensus(), pindex);
|
|
|
|
|
LogPrint(BCLog::NET, "Requesting block %s from peer=%d\n",
|
|
|
|
@ -3221,7 +3221,7 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr
|
|
|
|
|
NodeId staller = -1;
|
|
|
|
|
FindNextBlocksToDownload(pto->GetId(), MAX_BLOCKS_IN_TRANSIT_PER_PEER - state.nBlocksInFlight, vToDownload, staller, consensusParams);
|
|
|
|
|
BOOST_FOREACH(const CBlockIndex *pindex, vToDownload) {
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pto, pindex->pprev, consensusParams);
|
|
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pto);
|
|
|
|
|
vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash()));
|
|
|
|
|
MarkBlockAsInFlight(pto->GetId(), pindex->GetBlockHash(), consensusParams, pindex);
|
|
|
|
|
LogPrint(BCLog::NET, "Requesting block %s (%d) peer=%d\n", pindex->GetBlockHash().ToString(),
|
|
|
|
|