"Invalidating the post-upgrade blocks returns the transactions to mempool")
node.invalidateblock(postupgrade_block.hash)
assert_equal(set(node.getrawmempool()), {
ecdsa0tx_2.hash, schnorr1tx.hash})
self.log.info(
"Invalidating the upgrade block evicts the transactions valid only after upgrade")
node.invalidateblock(upgrade_block.hash)
assert_equal(set(node.getrawmempool()), {
- ecdsa0tx_2.hash, ecdsa1tx.hash})
+ ecdsa0tx_2.hash})
self.log.info("Return to our tip")
node.reconsiderblock(upgrade_block.hash)
node.reconsiderblock(postupgrade_block.hash)
assert_equal(node.getbestblockhash(), tip.hash)
assert_equal(node.getrawmempool(), [])
self.log.info(
"Create an empty-block reorg that forks from pre-upgrade")
tip = preupgrade_block
blocks = []
for _ in range(10):
tip = self.build_block(tip)
blocks.append(tip)
node.p2p.send_blocks_and_test(blocks, node)
self.log.info("Transactions from orphaned blocks are sent into mempool ready to be mined again, including upgrade-dependent ones even though the fork deactivated and reactivated the upgrade.")
assert_equal(set(node.getrawmempool()), {
ecdsa0tx_2.hash, schnorr1tx.hash})
node.generate(1)
tip = self.getbestblock(node)
assert set(tx.rehash() for tx in tip.vtx).issuperset(