mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-06-04 08:22:36 +02:00
Merge #21425: refactor: Pass PeerManagerImpl members only once
fa2a80bf12
refactor: Pass PeerManagerImpl members only once (MarcoFalke) Pull request description: Member variables are already passed to methods via `this`, so no need to pass them another time as function parameter. ACKs for top commit: jnewbery: utACKfa2a80bf12
amitiuttarwar: utACKfa2a80bf12
Tree-SHA512: 1743825c7560cc748235e3db03e4cea02ad1f670f1b898d7757da644f12693ba9bb2d3eb09b64b3d10dd2e68f52dea31e26d5e97bdc013759baa0515d3c7055c
This commit is contained in:
commit
6834e02c89
@ -476,22 +476,19 @@ private:
|
|||||||
size_t vExtraTxnForCompactIt GUARDED_BY(g_cs_orphans) = 0;
|
size_t vExtraTxnForCompactIt GUARDED_BY(g_cs_orphans) = 0;
|
||||||
|
|
||||||
void ProcessBlockAvailability(NodeId nodeid) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
void ProcessBlockAvailability(NodeId nodeid) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
void UpdateBlockAvailability(NodeId nodeid, const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
void UpdateBlockAvailability(NodeId nodeid, const uint256& hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
bool CanDirectFetch(const Consensus::Params &consensusParams) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
bool CanDirectFetch() EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
bool BlockRequestAllowed(const CBlockIndex* pindex, const Consensus::Params& consensusParams) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
bool BlockRequestAllowed(const CBlockIndex* pindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
bool AlreadyHaveBlock(const uint256& block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
bool AlreadyHaveBlock(const uint256& block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
void ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChainParams& chainparams, const CInv& inv, CConnman& connman);
|
void ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& inv);
|
||||||
bool PrepareBlockFilterRequest(CNode& peer, const CChainParams& chain_params,
|
bool PrepareBlockFilterRequest(CNode& peer,
|
||||||
BlockFilterType filter_type, uint32_t start_height,
|
BlockFilterType filter_type, uint32_t start_height,
|
||||||
const uint256& stop_hash, uint32_t max_height_diff,
|
const uint256& stop_hash, uint32_t max_height_diff,
|
||||||
const CBlockIndex*& stop_index,
|
const CBlockIndex*& stop_index,
|
||||||
BlockFilterIndex*& filter_index);
|
BlockFilterIndex*& filter_index);
|
||||||
void ProcessGetCFilters(CNode& peer, CDataStream& vRecv, const CChainParams& chain_params,
|
void ProcessGetCFilters(CNode& peer, CDataStream& vRecv);
|
||||||
CConnman& connman);
|
void ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv);
|
||||||
void ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv, const CChainParams& chain_params,
|
void ProcessGetCFCheckPt(CNode& peer, CDataStream& vRecv);
|
||||||
CConnman& connman);
|
|
||||||
void ProcessGetCFCheckPt(CNode& peer, CDataStream& vRecv, const CChainParams& chain_params,
|
|
||||||
CConnman& connman);
|
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -730,9 +727,9 @@ bool PeerManagerImpl::TipMayBeStale()
|
|||||||
return m_last_tip_update < GetTime() - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty();
|
return m_last_tip_update < GetTime() - consensusParams.nPowTargetSpacing * 3 && mapBlocksInFlight.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PeerManagerImpl::CanDirectFetch(const Consensus::Params &consensusParams)
|
bool PeerManagerImpl::CanDirectFetch()
|
||||||
{
|
{
|
||||||
return m_chainman.ActiveChain().Tip()->GetBlockTime() > GetAdjustedTime() - consensusParams.nPowTargetSpacing * 20;
|
return m_chainman.ActiveChain().Tip()->GetBlockTime() > GetAdjustedTime() - m_chainparams.GetConsensus().nPowTargetSpacing * 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool PeerHasHeader(CNodeState *state, const CBlockIndex *pindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
static bool PeerHasHeader(CNodeState *state, const CBlockIndex *pindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
||||||
@ -1195,13 +1192,13 @@ bool PeerManagerImpl::MaybePunishNodeForTx(NodeId nodeid, const TxValidationStat
|
|||||||
// active chain if they are no more than a month older (both in time, and in
|
// active chain if they are no more than a month older (both in time, and in
|
||||||
// best equivalent proof of work) than the best header chain we know about and
|
// best equivalent proof of work) than the best header chain we know about and
|
||||||
// we fully-validated them at some point.
|
// we fully-validated them at some point.
|
||||||
bool PeerManagerImpl::BlockRequestAllowed(const CBlockIndex* pindex, const Consensus::Params& consensusParams)
|
bool PeerManagerImpl::BlockRequestAllowed(const CBlockIndex* pindex)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
if (m_chainman.ActiveChain().Contains(pindex)) return true;
|
if (m_chainman.ActiveChain().Contains(pindex)) return true;
|
||||||
return pindex->IsValid(BLOCK_VALID_SCRIPTS) && (pindexBestHeader != nullptr) &&
|
return pindex->IsValid(BLOCK_VALID_SCRIPTS) && (pindexBestHeader != nullptr) &&
|
||||||
(pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() < STALE_RELAY_AGE_LIMIT) &&
|
(pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() < STALE_RELAY_AGE_LIMIT) &&
|
||||||
(GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, *pindexBestHeader, consensusParams) < STALE_RELAY_AGE_LIMIT);
|
(GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, *pindexBestHeader, m_chainparams.GetConsensus()) < STALE_RELAY_AGE_LIMIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<PeerManager> PeerManager::make(const CChainParams& chainparams, CConnman& connman, BanMan* banman,
|
std::unique_ptr<PeerManager> PeerManager::make(const CChainParams& chainparams, CConnman& connman, BanMan* banman,
|
||||||
@ -1531,13 +1528,12 @@ static void RelayAddress(const CNode& originator,
|
|||||||
connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
|
connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChainParams& chainparams, const CInv& inv, CConnman& connman)
|
void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv& inv)
|
||||||
{
|
{
|
||||||
bool send = false;
|
bool send = false;
|
||||||
std::shared_ptr<const CBlock> a_recent_block;
|
std::shared_ptr<const CBlock> a_recent_block;
|
||||||
std::shared_ptr<const CBlockHeaderAndShortTxIDs> a_recent_compact_block;
|
std::shared_ptr<const CBlockHeaderAndShortTxIDs> a_recent_compact_block;
|
||||||
bool fWitnessesPresentInARecentCompactBlock;
|
bool fWitnessesPresentInARecentCompactBlock;
|
||||||
const Consensus::Params& consensusParams = chainparams.GetConsensus();
|
|
||||||
{
|
{
|
||||||
LOCK(cs_most_recent_block);
|
LOCK(cs_most_recent_block);
|
||||||
a_recent_block = most_recent_block;
|
a_recent_block = most_recent_block;
|
||||||
@ -1563,7 +1559,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
} // release cs_main before calling ActivateBestChain
|
} // release cs_main before calling ActivateBestChain
|
||||||
if (need_activate_chain) {
|
if (need_activate_chain) {
|
||||||
BlockValidationState state;
|
BlockValidationState state;
|
||||||
if (!m_chainman.ActiveChainstate().ActivateBestChain(state, chainparams, a_recent_block)) {
|
if (!m_chainman.ActiveChainstate().ActivateBestChain(state, m_chainparams, a_recent_block)) {
|
||||||
LogPrint(BCLog::NET, "failed to activate chain (%s)\n", state.ToString());
|
LogPrint(BCLog::NET, "failed to activate chain (%s)\n", state.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1571,7 +1567,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
const CBlockIndex* pindex = m_chainman.m_blockman.LookupBlockIndex(inv.hash);
|
const CBlockIndex* pindex = m_chainman.m_blockman.LookupBlockIndex(inv.hash);
|
||||||
if (pindex) {
|
if (pindex) {
|
||||||
send = BlockRequestAllowed(pindex, consensusParams);
|
send = BlockRequestAllowed(pindex);
|
||||||
if (!send) {
|
if (!send) {
|
||||||
LogPrint(BCLog::NET, "%s: ignoring request from peer=%i for old block that isn't in the main chain\n", __func__, pfrom.GetId());
|
LogPrint(BCLog::NET, "%s: ignoring request from peer=%i for old block that isn't in the main chain\n", __func__, pfrom.GetId());
|
||||||
}
|
}
|
||||||
@ -1579,7 +1575,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
const CNetMsgMaker msgMaker(pfrom.GetCommonVersion());
|
const CNetMsgMaker msgMaker(pfrom.GetCommonVersion());
|
||||||
// disconnect node in case we have reached the outbound limit for serving historical blocks
|
// disconnect node in case we have reached the outbound limit for serving historical blocks
|
||||||
if (send &&
|
if (send &&
|
||||||
connman.OutboundTargetReached(true) &&
|
m_connman.OutboundTargetReached(true) &&
|
||||||
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.IsMsgFilteredBlk()) &&
|
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.IsMsgFilteredBlk()) &&
|
||||||
!pfrom.HasPermission(PF_DOWNLOAD) // nodes with the download permission may exceed target
|
!pfrom.HasPermission(PF_DOWNLOAD) // nodes with the download permission may exceed target
|
||||||
) {
|
) {
|
||||||
@ -1610,23 +1606,24 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
// Fast-path: in this case it is possible to serve the block directly from disk,
|
// Fast-path: in this case it is possible to serve the block directly from disk,
|
||||||
// as the network format matches the format on disk
|
// as the network format matches the format on disk
|
||||||
std::vector<uint8_t> block_data;
|
std::vector<uint8_t> block_data;
|
||||||
if (!ReadRawBlockFromDisk(block_data, pindex, chainparams.MessageStart())) {
|
if (!ReadRawBlockFromDisk(block_data, pindex, m_chainparams.MessageStart())) {
|
||||||
assert(!"cannot load block from disk");
|
assert(!"cannot load block from disk");
|
||||||
}
|
}
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, MakeSpan(block_data)));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, MakeSpan(block_data)));
|
||||||
// Don't set pblock as we've sent the block
|
// Don't set pblock as we've sent the block
|
||||||
} else {
|
} else {
|
||||||
// Send block from disk
|
// Send block from disk
|
||||||
std::shared_ptr<CBlock> pblockRead = std::make_shared<CBlock>();
|
std::shared_ptr<CBlock> pblockRead = std::make_shared<CBlock>();
|
||||||
if (!ReadBlockFromDisk(*pblockRead, pindex, consensusParams))
|
if (!ReadBlockFromDisk(*pblockRead, pindex, m_chainparams.GetConsensus())) {
|
||||||
assert(!"cannot load block from disk");
|
assert(!"cannot load block from disk");
|
||||||
|
}
|
||||||
pblock = pblockRead;
|
pblock = pblockRead;
|
||||||
}
|
}
|
||||||
if (pblock) {
|
if (pblock) {
|
||||||
if (inv.IsMsgBlk()) {
|
if (inv.IsMsgBlk()) {
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, *pblock));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, *pblock));
|
||||||
} else if (inv.IsMsgWitnessBlk()) {
|
} else if (inv.IsMsgWitnessBlk()) {
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, *pblock));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, *pblock));
|
||||||
} else if (inv.IsMsgFilteredBlk()) {
|
} else if (inv.IsMsgFilteredBlk()) {
|
||||||
bool sendMerkleBlock = false;
|
bool sendMerkleBlock = false;
|
||||||
CMerkleBlock merkleBlock;
|
CMerkleBlock merkleBlock;
|
||||||
@ -1638,7 +1635,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sendMerkleBlock) {
|
if (sendMerkleBlock) {
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::MERKLEBLOCK, merkleBlock));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::MERKLEBLOCK, merkleBlock));
|
||||||
// CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
|
// CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
|
||||||
// This avoids hurting performance by pointlessly requiring a round-trip
|
// This avoids hurting performance by pointlessly requiring a round-trip
|
||||||
// Note that there is currently no way for a node to request any single transactions we didn't send here -
|
// Note that there is currently no way for a node to request any single transactions we didn't send here -
|
||||||
@ -1647,7 +1644,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
// however we MUST always provide at least what the remote peer needs
|
// however we MUST always provide at least what the remote peer needs
|
||||||
typedef std::pair<unsigned int, uint256> PairType;
|
typedef std::pair<unsigned int, uint256> PairType;
|
||||||
for (PairType& pair : merkleBlock.vMatchedTxn)
|
for (PairType& pair : merkleBlock.vMatchedTxn)
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::TX, *pblock->vtx[pair.first]));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::TX, *pblock->vtx[pair.first]));
|
||||||
}
|
}
|
||||||
// else
|
// else
|
||||||
// no response
|
// no response
|
||||||
@ -1658,15 +1655,15 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
// instead we respond with the full, non-compact block.
|
// instead we respond with the full, non-compact block.
|
||||||
bool fPeerWantsWitness = State(pfrom.GetId())->fWantsCmpctWitness;
|
bool fPeerWantsWitness = State(pfrom.GetId())->fWantsCmpctWitness;
|
||||||
int nSendFlags = fPeerWantsWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
|
int nSendFlags = fPeerWantsWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
|
||||||
if (CanDirectFetch(consensusParams) && pindex->nHeight >= m_chainman.ActiveChain().Height() - MAX_CMPCTBLOCK_DEPTH) {
|
if (CanDirectFetch() && pindex->nHeight >= m_chainman.ActiveChain().Height() - MAX_CMPCTBLOCK_DEPTH) {
|
||||||
if ((fPeerWantsWitness || !fWitnessesPresentInARecentCompactBlock) && a_recent_compact_block && a_recent_compact_block->header.GetHash() == pindex->GetBlockHash()) {
|
if ((fPeerWantsWitness || !fWitnessesPresentInARecentCompactBlock) && a_recent_compact_block && a_recent_compact_block->header.GetHash() == pindex->GetBlockHash()) {
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *a_recent_compact_block));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *a_recent_compact_block));
|
||||||
} else {
|
} else {
|
||||||
CBlockHeaderAndShortTxIDs cmpctblock(*pblock, fPeerWantsWitness);
|
CBlockHeaderAndShortTxIDs cmpctblock(*pblock, fPeerWantsWitness);
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1680,7 +1677,7 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CChain
|
|||||||
// wait for other stuff first.
|
// wait for other stuff first.
|
||||||
std::vector<CInv> vInv;
|
std::vector<CInv> vInv;
|
||||||
vInv.push_back(CInv(MSG_BLOCK, m_chainman.ActiveChain().Tip()->GetBlockHash()));
|
vInv.push_back(CInv(MSG_BLOCK, m_chainman.ActiveChain().Tip()->GetBlockHash()));
|
||||||
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::INV, vInv));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::INV, vInv));
|
||||||
peer.m_continuation_block.SetNull();
|
peer.m_continuation_block.SetNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1781,7 +1778,7 @@ void PeerManagerImpl::ProcessGetData(CNode& pfrom, Peer& peer, const std::atomic
|
|||||||
if (it != peer.m_getdata_requests.end() && !pfrom.fPauseSend) {
|
if (it != peer.m_getdata_requests.end() && !pfrom.fPauseSend) {
|
||||||
const CInv &inv = *it++;
|
const CInv &inv = *it++;
|
||||||
if (inv.IsGenBlkMsg()) {
|
if (inv.IsGenBlkMsg()) {
|
||||||
ProcessGetBlockData(pfrom, peer, m_chainparams, inv, m_connman);
|
ProcessGetBlockData(pfrom, peer, inv);
|
||||||
}
|
}
|
||||||
// else: If the first item on the queue is an unknown type, we erase it
|
// else: If the first item on the queue is an unknown type, we erase it
|
||||||
// and continue processing the queue on the next call.
|
// and continue processing the queue on the next call.
|
||||||
@ -1929,10 +1926,9 @@ void PeerManagerImpl::ProcessHeadersMessage(CNode& pfrom, const Peer& peer,
|
|||||||
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, m_chainman.ActiveChain().GetLocator(pindexLast), uint256()));
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, m_chainman.ActiveChain().GetLocator(pindexLast), uint256()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fCanDirectFetch = CanDirectFetch(m_chainparams.GetConsensus());
|
|
||||||
// If this set of headers is valid and ends in a block with at least as
|
// If this set of headers is valid and ends in a block with at least as
|
||||||
// much work as our tip, download as much as possible.
|
// much work as our tip, download as much as possible.
|
||||||
if (fCanDirectFetch && pindexLast->IsValid(BLOCK_VALID_TREE) && m_chainman.ActiveChain().Tip()->nChainWork <= pindexLast->nChainWork) {
|
if (CanDirectFetch() && pindexLast->IsValid(BLOCK_VALID_TREE) && m_chainman.ActiveChain().Tip()->nChainWork <= pindexLast->nChainWork) {
|
||||||
std::vector<const CBlockIndex*> vToFetch;
|
std::vector<const CBlockIndex*> vToFetch;
|
||||||
const CBlockIndex *pindexWalk = pindexLast;
|
const CBlockIndex *pindexWalk = pindexLast;
|
||||||
// Calculate all the blocks we'd need to switch to pindexLast, up to a limit.
|
// Calculate all the blocks we'd need to switch to pindexLast, up to a limit.
|
||||||
@ -2105,7 +2101,6 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||||||
* May disconnect from the peer in the case of a bad request.
|
* May disconnect from the peer in the case of a bad request.
|
||||||
*
|
*
|
||||||
* @param[in] peer The peer that we received the request from
|
* @param[in] peer The peer that we received the request from
|
||||||
* @param[in] chain_params Chain parameters
|
|
||||||
* @param[in] filter_type The filter type the request is for. Must be basic filters.
|
* @param[in] filter_type The filter type the request is for. Must be basic filters.
|
||||||
* @param[in] start_height The start height for the request
|
* @param[in] start_height The start height for the request
|
||||||
* @param[in] stop_hash The stop_hash for the request
|
* @param[in] stop_hash The stop_hash for the request
|
||||||
@ -2114,7 +2109,7 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||||||
* @param[out] filter_index The filter index, if the request can be serviced.
|
* @param[out] filter_index The filter index, if the request can be serviced.
|
||||||
* @return True if the request can be serviced.
|
* @return True if the request can be serviced.
|
||||||
*/
|
*/
|
||||||
bool PeerManagerImpl::PrepareBlockFilterRequest(CNode& peer, const CChainParams& chain_params,
|
bool PeerManagerImpl::PrepareBlockFilterRequest(CNode& peer,
|
||||||
BlockFilterType filter_type, uint32_t start_height,
|
BlockFilterType filter_type, uint32_t start_height,
|
||||||
const uint256& stop_hash, uint32_t max_height_diff,
|
const uint256& stop_hash, uint32_t max_height_diff,
|
||||||
const CBlockIndex*& stop_index,
|
const CBlockIndex*& stop_index,
|
||||||
@ -2135,7 +2130,7 @@ bool PeerManagerImpl::PrepareBlockFilterRequest(CNode& peer, const CChainParams&
|
|||||||
stop_index = m_chainman.m_blockman.LookupBlockIndex(stop_hash);
|
stop_index = m_chainman.m_blockman.LookupBlockIndex(stop_hash);
|
||||||
|
|
||||||
// Check that the stop block exists and the peer would be allowed to fetch it.
|
// Check that the stop block exists and the peer would be allowed to fetch it.
|
||||||
if (!stop_index || !BlockRequestAllowed(stop_index, chain_params.GetConsensus())) {
|
if (!stop_index || !BlockRequestAllowed(stop_index)) {
|
||||||
LogPrint(BCLog::NET, "peer %d requested invalid block hash: %s\n",
|
LogPrint(BCLog::NET, "peer %d requested invalid block hash: %s\n",
|
||||||
peer.GetId(), stop_hash.ToString());
|
peer.GetId(), stop_hash.ToString());
|
||||||
peer.fDisconnect = true;
|
peer.fDisconnect = true;
|
||||||
@ -2174,11 +2169,8 @@ bool PeerManagerImpl::PrepareBlockFilterRequest(CNode& peer, const CChainParams&
|
|||||||
*
|
*
|
||||||
* @param[in] peer The peer that we received the request from
|
* @param[in] peer The peer that we received the request from
|
||||||
* @param[in] vRecv The raw message received
|
* @param[in] vRecv The raw message received
|
||||||
* @param[in] chain_params Chain parameters
|
|
||||||
* @param[in] connman Pointer to the connection manager
|
|
||||||
*/
|
*/
|
||||||
void PeerManagerImpl::ProcessGetCFilters(CNode& peer, CDataStream& vRecv, const CChainParams& chain_params,
|
void PeerManagerImpl::ProcessGetCFilters(CNode& peer, CDataStream& vRecv)
|
||||||
CConnman& connman)
|
|
||||||
{
|
{
|
||||||
uint8_t filter_type_ser;
|
uint8_t filter_type_ser;
|
||||||
uint32_t start_height;
|
uint32_t start_height;
|
||||||
@ -2190,7 +2182,7 @@ void PeerManagerImpl::ProcessGetCFilters(CNode& peer, CDataStream& vRecv, const
|
|||||||
|
|
||||||
const CBlockIndex* stop_index;
|
const CBlockIndex* stop_index;
|
||||||
BlockFilterIndex* filter_index;
|
BlockFilterIndex* filter_index;
|
||||||
if (!PrepareBlockFilterRequest(peer, chain_params, filter_type, start_height, stop_hash,
|
if (!PrepareBlockFilterRequest(peer, filter_type, start_height, stop_hash,
|
||||||
MAX_GETCFILTERS_SIZE, stop_index, filter_index)) {
|
MAX_GETCFILTERS_SIZE, stop_index, filter_index)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2205,7 +2197,7 @@ void PeerManagerImpl::ProcessGetCFilters(CNode& peer, CDataStream& vRecv, const
|
|||||||
for (const auto& filter : filters) {
|
for (const auto& filter : filters) {
|
||||||
CSerializedNetMsg msg = CNetMsgMaker(peer.GetCommonVersion())
|
CSerializedNetMsg msg = CNetMsgMaker(peer.GetCommonVersion())
|
||||||
.Make(NetMsgType::CFILTER, filter);
|
.Make(NetMsgType::CFILTER, filter);
|
||||||
connman.PushMessage(&peer, std::move(msg));
|
m_connman.PushMessage(&peer, std::move(msg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2216,11 +2208,8 @@ void PeerManagerImpl::ProcessGetCFilters(CNode& peer, CDataStream& vRecv, const
|
|||||||
*
|
*
|
||||||
* @param[in] peer The peer that we received the request from
|
* @param[in] peer The peer that we received the request from
|
||||||
* @param[in] vRecv The raw message received
|
* @param[in] vRecv The raw message received
|
||||||
* @param[in] chain_params Chain parameters
|
|
||||||
* @param[in] connman Pointer to the connection manager
|
|
||||||
*/
|
*/
|
||||||
void PeerManagerImpl::ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv, const CChainParams& chain_params,
|
void PeerManagerImpl::ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv)
|
||||||
CConnman& connman)
|
|
||||||
{
|
{
|
||||||
uint8_t filter_type_ser;
|
uint8_t filter_type_ser;
|
||||||
uint32_t start_height;
|
uint32_t start_height;
|
||||||
@ -2232,7 +2221,7 @@ void PeerManagerImpl::ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv, const
|
|||||||
|
|
||||||
const CBlockIndex* stop_index;
|
const CBlockIndex* stop_index;
|
||||||
BlockFilterIndex* filter_index;
|
BlockFilterIndex* filter_index;
|
||||||
if (!PrepareBlockFilterRequest(peer, chain_params, filter_type, start_height, stop_hash,
|
if (!PrepareBlockFilterRequest(peer, filter_type, start_height, stop_hash,
|
||||||
MAX_GETCFHEADERS_SIZE, stop_index, filter_index)) {
|
MAX_GETCFHEADERS_SIZE, stop_index, filter_index)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2261,7 +2250,7 @@ void PeerManagerImpl::ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv, const
|
|||||||
stop_index->GetBlockHash(),
|
stop_index->GetBlockHash(),
|
||||||
prev_header,
|
prev_header,
|
||||||
filter_hashes);
|
filter_hashes);
|
||||||
connman.PushMessage(&peer, std::move(msg));
|
m_connman.PushMessage(&peer, std::move(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2271,11 +2260,8 @@ void PeerManagerImpl::ProcessGetCFHeaders(CNode& peer, CDataStream& vRecv, const
|
|||||||
*
|
*
|
||||||
* @param[in] peer The peer that we received the request from
|
* @param[in] peer The peer that we received the request from
|
||||||
* @param[in] vRecv The raw message received
|
* @param[in] vRecv The raw message received
|
||||||
* @param[in] chain_params Chain parameters
|
|
||||||
* @param[in] connman Pointer to the connection manager
|
|
||||||
*/
|
*/
|
||||||
void PeerManagerImpl::ProcessGetCFCheckPt(CNode& peer, CDataStream& vRecv, const CChainParams& chain_params,
|
void PeerManagerImpl::ProcessGetCFCheckPt(CNode& peer, CDataStream& vRecv)
|
||||||
CConnman& connman)
|
|
||||||
{
|
{
|
||||||
uint8_t filter_type_ser;
|
uint8_t filter_type_ser;
|
||||||
uint256 stop_hash;
|
uint256 stop_hash;
|
||||||
@ -2286,7 +2272,7 @@ void PeerManagerImpl::ProcessGetCFCheckPt(CNode& peer, CDataStream& vRecv, const
|
|||||||
|
|
||||||
const CBlockIndex* stop_index;
|
const CBlockIndex* stop_index;
|
||||||
BlockFilterIndex* filter_index;
|
BlockFilterIndex* filter_index;
|
||||||
if (!PrepareBlockFilterRequest(peer, chain_params, filter_type, /*start_height=*/0, stop_hash,
|
if (!PrepareBlockFilterRequest(peer, filter_type, /*start_height=*/0, stop_hash,
|
||||||
/*max_height_diff=*/std::numeric_limits<uint32_t>::max(),
|
/*max_height_diff=*/std::numeric_limits<uint32_t>::max(),
|
||||||
stop_index, filter_index)) {
|
stop_index, filter_index)) {
|
||||||
return;
|
return;
|
||||||
@ -2312,7 +2298,7 @@ void PeerManagerImpl::ProcessGetCFCheckPt(CNode& peer, CDataStream& vRecv, const
|
|||||||
filter_type_ser,
|
filter_type_ser,
|
||||||
stop_index->GetBlockHash(),
|
stop_index->GetBlockHash(),
|
||||||
headers);
|
headers);
|
||||||
connman.PushMessage(&peer, std::move(msg));
|
m_connman.PushMessage(&peer, std::move(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDataStream& vRecv,
|
void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDataStream& vRecv,
|
||||||
@ -2950,7 +2936,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!BlockRequestAllowed(pindex, m_chainparams.GetConsensus())) {
|
if (!BlockRequestAllowed(pindex)) {
|
||||||
LogPrint(BCLog::NET, "%s: ignoring request from peer=%i for old block header that isn't in the main chain\n", __func__, pfrom.GetId());
|
LogPrint(BCLog::NET, "%s: ignoring request from peer=%i for old block header that isn't in the main chain\n", __func__, pfrom.GetId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3288,8 +3274,9 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we're not close to tip yet, give up and let parallel block fetch work its magic
|
// If we're not close to tip yet, give up and let parallel block fetch work its magic
|
||||||
if (!fAlreadyInFlight && !CanDirectFetch(m_chainparams.GetConsensus()))
|
if (!fAlreadyInFlight && !CanDirectFetch()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsWitnessEnabled(pindex->pprev, m_chainparams.GetConsensus()) && !nodestate->fSupportsDesiredCmpctVersion) {
|
if (IsWitnessEnabled(pindex->pprev, m_chainparams.GetConsensus()) && !nodestate->fSupportsDesiredCmpctVersion) {
|
||||||
// Don't bother trying to process compact blocks from v1 peers
|
// Don't bother trying to process compact blocks from v1 peers
|
||||||
@ -3782,17 +3769,17 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::GETCFILTERS) {
|
if (msg_type == NetMsgType::GETCFILTERS) {
|
||||||
ProcessGetCFilters(pfrom, vRecv, m_chainparams, m_connman);
|
ProcessGetCFilters(pfrom, vRecv);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::GETCFHEADERS) {
|
if (msg_type == NetMsgType::GETCFHEADERS) {
|
||||||
ProcessGetCFHeaders(pfrom, vRecv, m_chainparams, m_connman);
|
ProcessGetCFHeaders(pfrom, vRecv);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::GETCFCHECKPT) {
|
if (msg_type == NetMsgType::GETCFCHECKPT) {
|
||||||
ProcessGetCFCheckPt(pfrom, vRecv, m_chainparams, m_connman);
|
ProcessGetCFCheckPt(pfrom, vRecv);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4107,7 +4094,7 @@ void PeerManagerImpl::CheckForStaleTipAndEvictPeers()
|
|||||||
m_stale_tip_check_time = time_in_seconds + STALE_CHECK_INTERVAL;
|
m_stale_tip_check_time = time_in_seconds + STALE_CHECK_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_initial_sync_finished && CanDirectFetch(m_chainparams.GetConsensus())) {
|
if (!m_initial_sync_finished && CanDirectFetch()) {
|
||||||
m_connman.StartExtraBlockRelayPeers();
|
m_connman.StartExtraBlockRelayPeers();
|
||||||
m_initial_sync_finished = true;
|
m_initial_sync_finished = true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user