diff options
author | John Newbery <john@johnnewbery.com> | 2020-12-11 10:08:37 +0000 |
---|---|---|
committer | John Newbery <john@johnnewbery.com> | 2020-12-11 10:08:37 +0000 |
commit | 8b57013473c44fc87c9f1c4611224a89187c289a (patch) | |
tree | c41e9ad4f882c354158fae1fb1c2b8e6db1ec9f3 /src | |
parent | 6a48063671770e77266f8e441cc15487d1fff5ed (diff) |
[net processing] Remove nStartingHeight check from block relay
nStartingHeight was introduced in commit 7a47324c7 (Bitcoin version
0.2.9, P2P version 209) with the comment "better prevention of inventory
relaying during initial download". At that time, there was no function
to determine whether the node was still in Initial Block Download, so to
prevent syncing nodes from relaying old blocks to their peers, a check
was added to never relay a block to a peer where the height was lower
than 2000 less than the peer's best block. That check was updated
several times in later commits to ensure that we weren't relaying blocks
before the latest checkpoint if the peer didn't provide a
startingheight. The checkpoint comparison was changed to compare with an
estimate of the highest block in commit eae82d8e.
In commit 202e0194, all block relay was gated on being out of Initial
Block Download. In commit 0278fb5f, the comparison to nBlockEstimate was
removed since "we already checked IsIBD()".
We can remove the check against nStartingHeight entirely. If the node is
out of Initial Block Download, then its tip height must have been within
24 hours of current time, so should not be more than ~144 blocks behind
the most work tip.
Diffstat (limited to 'src')
-rw-r--r-- | src/net_processing.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 200c286f5d..6e9d8119ab 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1295,8 +1295,9 @@ void PeerManager::NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ void PeerManager::UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) { const int nNewHeight = pindexNew->nHeight; m_connman.SetBestHeight(nNewHeight); - SetServiceFlagsIBDCache(!fInitialDownload); + + // Relay inventory, but don't relay old inventory during initial block download. if (!fInitialDownload) { // Find the hashes of all blocks that weren't previously in the best chain. std::vector<uint256> vHashes; @@ -1310,13 +1311,10 @@ void PeerManager::UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockInde break; } } - // Relay inventory, but don't relay old inventory during initial block download. m_connman.ForEachNode([nNewHeight, &vHashes](CNode* pnode) { LOCK(pnode->cs_inventory); - if (nNewHeight > (pnode->nStartingHeight != -1 ? pnode->nStartingHeight - 2000 : 0)) { - for (const uint256& hash : reverse_iterate(vHashes)) { - pnode->vBlockHashesToAnnounce.push_back(hash); - } + for (const uint256& hash : reverse_iterate(vHashes)) { + pnode->vBlockHashesToAnnounce.push_back(hash); } }); m_connman.WakeMessageHandler(); |