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