[Pkg-bitcoin-commits] [bitcoin] 102/126: Accept unrequested blocks with work equal to our tip

Jonas Smedegaard dr at jones.dk
Mon Nov 13 20:02:59 UTC 2017


This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag debian/0.15.1_dfsg-1
in repository bitcoin.

commit 51001d684b1b26ea5109986b7317ffe24bf71b43
Author: Matt Corallo <git at bluematt.me>
Date:   Wed Oct 11 16:04:13 2017 -0400

    Accept unrequested blocks with work equal to our tip
    
    This is a simple change that makes our accept requirements the
    same as our request requirements, (ever so slightly) further
    decoupling our consensus logic from our FindNextBlocksToDownload
    logic in net_processing.
    
    Github-Pull: #11531
    Rebased-From: 932f118e6a3779bb3d6c3cc83963cf34ac150e42
---
 src/validation.cpp                 | 8 ++++----
 test/functional/p2p-acceptblock.py | 5 +----
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/src/validation.cpp b/src/validation.cpp
index c52f8bf..c641cae 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -3102,7 +3102,7 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation
     // process an unrequested block if it's new and has enough work to
     // advance our tip, and isn't too many blocks ahead.
     bool fAlreadyHave = pindex->nStatus & BLOCK_HAVE_DATA;
-    bool fHasMoreWork = (chainActive.Tip() ? pindex->nChainWork > chainActive.Tip()->nChainWork : true);
+    bool fHasMoreOrSameWork = (chainActive.Tip() ? pindex->nChainWork >= chainActive.Tip()->nChainWork : true);
     // Blocks that are too out-of-order needlessly limit the effectiveness of
     // pruning, because pruning will not delete block files that contain any
     // blocks which are too close in height to the tip.  Apply this test
@@ -3119,9 +3119,9 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation
     // and unrequested blocks.
     if (fAlreadyHave) return true;
     if (!fRequested) {  // If we didn't ask for it:
-        if (pindex->nTx != 0) return true;  // This is a previously-processed block that was pruned
-        if (!fHasMoreWork) return true;     // Don't process less-work chains
-        if (fTooFarAhead) return true;      // Block height is too high
+        if (pindex->nTx != 0) return true;    // This is a previously-processed block that was pruned
+        if (!fHasMoreOrSameWork) return true; // Don't process less-work chains
+        if (fTooFarAhead) return true;        // Block height is too high
 
         // Protect against DoS attacks from low-work chains.
         // If our tip is behind, a peer could try to send us
diff --git a/test/functional/p2p-acceptblock.py b/test/functional/p2p-acceptblock.py
index 9b2c1a7..36e0bd9 100755
--- a/test/functional/p2p-acceptblock.py
+++ b/test/functional/p2p-acceptblock.py
@@ -142,8 +142,7 @@ class AcceptBlockTest(BitcoinTestFramework):
         assert(tip_entry_found)
 
         # But this block should be accepted by node since it has equal work.
-        # TODO: We currently drop this block but likely shouldn't
-        #self.nodes[0].getblock(block_h2f.hash)
+        self.nodes[0].getblock(block_h2f.hash)
         self.log.info("Second height 2 block accepted, but not reorg'ed to")
 
         # 4b. Now send another block that builds on the forking chain.
@@ -215,7 +214,6 @@ class AcceptBlockTest(BitcoinTestFramework):
 
         test_node.wait_for_verack()
         test_node.send_message(msg_block(block_h1f))
-        test_node.send_message(msg_block(block_h2f)) # This should not be required
 
         test_node.sync_with_ping()
         assert_equal(self.nodes[0].getblockcount(), 2)
@@ -239,7 +237,6 @@ class AcceptBlockTest(BitcoinTestFramework):
 
         # 7. Send the missing block for the third time (now it is requested)
         test_node.send_message(msg_block(block_h1f))
-        test_node.send_message(msg_block(block_h2f)) # This should not be required
 
         test_node.sync_with_ping()
         assert_equal(self.nodes[0].getblockcount(), 290)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-bitcoin/bitcoin.git



More information about the Pkg-bitcoin-commits mailing list