https://github.com/sumeetweb/bitcoin/commit/fa178bde60dfaa38a8fec0ad333c7d8d07db7682
Created
August 14, 2022 19:21
-
-
Save sumeetweb/89be20034f5b5bd7698b10a9603a387e to your computer and use it in GitHub Desktop.
Mine another block and check it in node 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Disconnect p2p from node 2 | |
self.nodes[2].disconnect_p2ps() | |
peer_messaging = self.nodes[0].add_p2p_connection(BaseNode()) | |
self.log.info("Create some more blocks") | |
self.tip = int(self.nodes[0].getbestblockhash(), 16) | |
self.block_time = self.nodes[0].getblock(self.nodes[0].getbestblockhash())['time'] + 1 | |
height = self.nodes[0].getblockcount() | |
for _ in range(10): | |
# Use the blocktools functionality to manually build a block. | |
# Calling the generate() rpc is easier, but this allows us to exactly | |
# control the blocks and transactions. | |
block = create_block(self.tip, create_coinbase(height+1), self.block_time) | |
block.solve() | |
block_message = msg_block(block) | |
# Send message is used to send a P2P message to the node over our P2PInterface | |
peer_messaging.send_message(block_message) | |
self.tip = block.sha256 | |
blocks.append(self.tip) | |
self.block_time += 1 | |
height += 1 | |
self.log.info("Wait for node1 to reach current tip (height 12) using RPC") | |
self.nodes[1].waitforblockheight(12) | |
self.log.info("Wait for node2 to receive all the blocks from node1") | |
self.sync_all() | |
self.log.info("Add P2P connection to node2") | |
self.nodes[0].disconnect_p2ps() | |
peer_receiving = self.nodes[2].add_p2p_connection(BaseNode()) | |
self.log.info("Test that node2 propagates all the blocks to us") | |
getdata_request = msg_getdata() | |
for block in blocks: | |
getdata_request.inv.append(CInv(MSG_BLOCK, block)) | |
peer_receiving.send_message(getdata_request) | |
# wait_until() will loop until a predicate condition is met. Use it to test properties of the | |
# P2PInterface objects. | |
peer_receiving.wait_until(lambda: sorted(blocks) == sorted(list(peer_receiving.block_receive_map.keys())), timeout=5) | |
self.log.info("Check that each block was received only once") | |
# The network thread uses a global lock on data access to the P2PConnection objects when sending and receiving | |
# messages. The test thread should acquire the global lock before accessing any P2PConnection data to avoid locking | |
# and synchronization issues. Note p2p.wait_until() acquires this global lock internally when testing the predicate. | |
with p2p_lock: | |
for block in peer_receiving.block_receive_map.values(): | |
assert_equal(block, 1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment