Changeset View
Changeset View
Standalone View
Standalone View
test/functional/p2p_fingerprint.py
Show First 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | class P2PFingerprintTest(BitcoinTestFramework): | ||||
# last month but that have over a month's worth of work are also withheld. | # last month but that have over a month's worth of work are also withheld. | ||||
def run_test(self): | def run_test(self): | ||||
node0 = self.nodes[0].add_p2p_connection(P2PInterface()) | node0 = self.nodes[0].add_p2p_connection(P2PInterface()) | ||||
# Set node time to 60 days ago | # Set node time to 60 days ago | ||||
self.nodes[0].setmocktime(int(time.time()) - 60 * 24 * 60 * 60) | self.nodes[0].setmocktime(int(time.time()) - 60 * 24 * 60 * 60) | ||||
# Generating a chain of 10 blocks | # Generating a chain of 10 blocks | ||||
block_hashes = self.generatetoaddress(self.nodes[0], | block_hashes = self.generatetoaddress( | ||||
10, self.nodes[0].get_deterministic_priv_key().address) | self.nodes[0], 10, self.nodes[0].get_deterministic_priv_key().address | ||||
) | |||||
# Create longer chain starting 2 blocks before current tip | # Create longer chain starting 2 blocks before current tip | ||||
height = len(block_hashes) - 2 | height = len(block_hashes) - 2 | ||||
block_hash = block_hashes[height - 1] | block_hash = block_hashes[height - 1] | ||||
block_time = self.nodes[0].getblockheader(block_hash)["mediantime"] + 1 | block_time = self.nodes[0].getblockheader(block_hash)["mediantime"] + 1 | ||||
new_blocks = self.build_chain(5, block_hash, height, block_time) | new_blocks = self.build_chain(5, block_hash, height, block_time) | ||||
# Force reorg to a longer chain | # Force reorg to a longer chain | ||||
Show All 13 Lines | def run_test(self): | ||||
node0.wait_for_block(stale_hash, timeout=3) | node0.wait_for_block(stale_hash, timeout=3) | ||||
# Check that getheader request for stale block header succeeds | # Check that getheader request for stale block header succeeds | ||||
self.send_header_request(stale_hash, node0) | self.send_header_request(stale_hash, node0) | ||||
node0.wait_for_header(hex(stale_hash), timeout=3) | node0.wait_for_header(hex(stale_hash), timeout=3) | ||||
# Longest chain is extended so stale is much older than chain tip | # Longest chain is extended so stale is much older than chain tip | ||||
self.nodes[0].setmocktime(0) | self.nodes[0].setmocktime(0) | ||||
block_hash = int(self.generatetoaddress(self.nodes[0], | block_hash = int( | ||||
1, self.nodes[0].get_deterministic_priv_key().address)[-1], 16) | self.generatetoaddress( | ||||
self.nodes[0], 1, self.nodes[0].get_deterministic_priv_key().address | |||||
)[-1], | |||||
16, | |||||
) | |||||
assert_equal(self.nodes[0].getblockcount(), 14) | assert_equal(self.nodes[0].getblockcount(), 14) | ||||
node0.wait_for_block(block_hash, timeout=3) | node0.wait_for_block(block_hash, timeout=3) | ||||
# Request for very old stale block should now fail | # Request for very old stale block should now fail | ||||
with p2p_lock: | with p2p_lock: | ||||
node0.last_message.pop("block", None) | node0.last_message.pop("block", None) | ||||
self.send_block_request(stale_hash, node0) | self.send_block_request(stale_hash, node0) | ||||
node0.sync_with_ping() | node0.sync_with_ping() | ||||
Show All 14 Lines | def run_test(self): | ||||
self.send_block_request(block_hash, node0) | self.send_block_request(block_hash, node0) | ||||
node0.wait_for_block(block_hash, timeout=3) | node0.wait_for_block(block_hash, timeout=3) | ||||
self.send_header_request(block_hash, node0) | self.send_header_request(block_hash, node0) | ||||
node0.wait_for_header(hex(block_hash), timeout=3) | node0.wait_for_header(hex(block_hash), timeout=3) | ||||
if __name__ == '__main__': | if __name__ == "__main__": | ||||
P2PFingerprintTest().main() | P2PFingerprintTest().main() |