From 8342e350b10f727af29730f474eef80036d27b94 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 18 Apr 2023 17:00:54 +0000 Subject: [PATCH] test: Avoid generating a chain fork in `mempool_packages` RPC test There was a race condition here between the block generated by node 0 being broadcast to node 1, and being invalidated by node 0. Due to the changes we made to the difficulty adjustment algorithm, the invalidated block and the block replacing it generated by node 0 would have the same chain work; thus if node 1 observed the invalidated block, it would never reorg to the replacement block. We fix this by having node 0 reconsider the invalidated block before generating its next block. This avoids the chain fork, and also clears the mempool to provide better separation between test stages. Co-authored-by: Daira Hopwood --- qa/rpc-tests/mempool_packages.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/qa/rpc-tests/mempool_packages.py b/qa/rpc-tests/mempool_packages.py index 7e4cc01fe..e74f116b9 100755 --- a/qa/rpc-tests/mempool_packages.py +++ b/qa/rpc-tests/mempool_packages.py @@ -103,9 +103,10 @@ class MempoolPackagesTest(BitcoinTestFramework): print("too-long-ancestor-chain successfully rejected") # Check that prioritising a tx before it's added to the mempool works - self.nodes[0].generate(1) + [blockhash] = self.nodes[0].generate(1) + assert_equal(self.nodes[0].getrawmempool(True), {}) self.nodes[0].prioritisetransaction(chain[-1], None, 2000) - self.nodes[0].invalidateblock(self.nodes[0].getbestblockhash()) + self.nodes[0].invalidateblock(blockhash) mempool = self.nodes[0].getrawmempool(True) descendant_fees = 0 @@ -117,6 +118,11 @@ class MempoolPackagesTest(BitcoinTestFramework): # TODO: check that node1's mempool is as expected + # Reconsider the above block to clear the mempool again before the next test phase. + self.nodes[0].reconsiderblock(blockhash) + assert_equal(self.nodes[0].getbestblockhash(), blockhash) + assert_equal(self.nodes[0].getrawmempool(True), {}) + # TODO: test ancestor size limits # Now test descendant chain limits