mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-31 00:05:13 +02:00
Merge #9375: Relay compact block messages prior to full block connection
02ee4ebMake most_recent_compact_block a pointer to a const (Matt Corallo)73666adAdd comment to describe callers to ActivateBestChain (Matt Corallo)962f7f0Call ActivateBestChain without cs_main/with most_recent_block (Matt Corallo)0df777dUse a temp pindex to avoid a const_cast in ProcessNewBlockHeaders (Matt Corallo)c1ae4fcAvoid holding cs_most_recent_block while calling ReadBlockFromDisk (Matt Corallo)9eb67f5Ensure we meet the BIP 152 old-relay-types response requirements (Matt Corallo)5749a85Cache most-recently-connected compact block (Matt Corallo)9eaec08Cache most-recently-announced block's shared_ptr (Matt Corallo)c802092Relay compact block messages prior to full block connection (Matt Corallo)6987219Add a CValidationInterface::NewPoWValidBlock callback (Matt Corallo)180586fCall AcceptBlock with the block's shared_ptr instead of CBlock& (Matt Corallo)8baaba6[qa] Avoid race in preciousblock test. (Matt Corallo)9a0b2f4[qa] Make compact blocks test construction using fetch methods (Matt Corallo)8017547Make CBlockIndex*es in net_processing const (Matt Corallo)
This commit is contained in:
@@ -310,6 +310,9 @@ class CompactBlocksTest(BitcoinTestFramework):
|
||||
tip = int(node.getbestblockhash(), 16)
|
||||
assert(test_node.wait_for_block_announcement(tip))
|
||||
|
||||
# Make sure we will receive a fast-announce compact block
|
||||
self.request_cb_announcements(test_node, node, version)
|
||||
|
||||
# Now mine a block, and look at the resulting compact block.
|
||||
test_node.clear_block_announcement()
|
||||
block_hash = int(node.generate(1)[0], 16)
|
||||
@@ -319,27 +322,36 @@ class CompactBlocksTest(BitcoinTestFramework):
|
||||
[tx.calc_sha256() for tx in block.vtx]
|
||||
block.rehash()
|
||||
|
||||
# Don't care which type of announcement came back for this test; just
|
||||
# request the compact block if we didn't get one yet.
|
||||
# Wait until the block was announced (via compact blocks)
|
||||
wait_until(test_node.received_block_announcement, timeout=30)
|
||||
assert(test_node.received_block_announcement())
|
||||
|
||||
with mininode_lock:
|
||||
if test_node.last_cmpctblock is None:
|
||||
test_node.clear_block_announcement()
|
||||
inv = CInv(4, block_hash) # 4 == "CompactBlock"
|
||||
test_node.send_message(msg_getdata([inv]))
|
||||
|
||||
wait_until(test_node.received_block_announcement, timeout=30)
|
||||
assert(test_node.received_block_announcement())
|
||||
|
||||
# Now we should have the compactblock
|
||||
# Now fetch and check the compact block
|
||||
header_and_shortids = None
|
||||
with mininode_lock:
|
||||
assert(test_node.last_cmpctblock is not None)
|
||||
# Convert the on-the-wire representation to absolute indexes
|
||||
header_and_shortids = HeaderAndShortIDs(test_node.last_cmpctblock.header_and_shortids)
|
||||
self.check_compactblock_construction_from_block(version, header_and_shortids, block_hash, block)
|
||||
|
||||
# Now fetch the compact block using a normal non-announce getdata
|
||||
with mininode_lock:
|
||||
test_node.clear_block_announcement()
|
||||
inv = CInv(4, block_hash) # 4 == "CompactBlock"
|
||||
test_node.send_message(msg_getdata([inv]))
|
||||
|
||||
wait_until(test_node.received_block_announcement, timeout=30)
|
||||
assert(test_node.received_block_announcement())
|
||||
|
||||
# Now fetch and check the compact block
|
||||
header_and_shortids = None
|
||||
with mininode_lock:
|
||||
assert(test_node.last_cmpctblock is not None)
|
||||
# Convert the on-the-wire representation to absolute indexes
|
||||
header_and_shortids = HeaderAndShortIDs(test_node.last_cmpctblock.header_and_shortids)
|
||||
self.check_compactblock_construction_from_block(version, header_and_shortids, block_hash, block)
|
||||
|
||||
def check_compactblock_construction_from_block(self, version, header_and_shortids, block_hash, block):
|
||||
# Check that we got the right block!
|
||||
header_and_shortids.header.calc_sha256()
|
||||
assert_equal(header_and_shortids.header.sha256, block_hash)
|
||||
|
||||
@@ -102,7 +102,7 @@ class PreciousTest(BitcoinTestFramework):
|
||||
assert_equal(self.nodes[2].getblockcount(), 6)
|
||||
hashL = self.nodes[2].getbestblockhash()
|
||||
print("Connect nodes and check no reorg occurs")
|
||||
node_sync_via_rpc(self.nodes[0:3])
|
||||
node_sync_via_rpc(self.nodes[1:3])
|
||||
connect_nodes_bi(self.nodes,1,2)
|
||||
connect_nodes_bi(self.nodes,0,2)
|
||||
assert_equal(self.nodes[0].getbestblockhash(), hashH)
|
||||
|
||||
Reference in New Issue
Block a user