Skip to content

Commit 06df14b

Browse files
committed
test: add more TRUC reorg coverge
1 parent 26e71c2 commit 06df14b

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

test/functional/mempool_truc.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -165,23 +165,36 @@ def test_truc_replacement(self):
165165
def test_truc_reorg(self):
166166
node = self.nodes[0]
167167
self.log.info("Test that, during a reorg, TRUC rules are not enforced")
168-
tx_v2_block = self.wallet.send_self_transfer(from_node=node, version=2)
169-
tx_v3_block = self.wallet.send_self_transfer(from_node=node, version=3)
170-
tx_v3_block2 = self.wallet.send_self_transfer(from_node=node, version=3)
171-
self.check_mempool([tx_v3_block["txid"], tx_v2_block["txid"], tx_v3_block2["txid"]])
168+
self.check_mempool([])
169+
170+
# Testing 2<-3 versions allowed
171+
tx_v2_block = self.wallet.create_self_transfer(version=2)
172+
173+
# Testing 3<-2 versions allowed
174+
tx_v3_block = self.wallet.create_self_transfer(version=3)
175+
176+
# Testing overly-large child size
177+
tx_v3_block2 = self.wallet.create_self_transfer(version=3)
178+
179+
# Also create a linear chain of 3 TRUC transactions that will be directly mined, followed by one v2 in-mempool after block is made
180+
tx_chain_1 = self.wallet.create_self_transfer(version=3)
181+
tx_chain_2 = self.wallet.create_self_transfer(utxo_to_spend=tx_chain_1["new_utxo"], version=3)
182+
tx_chain_3 = self.wallet.create_self_transfer(utxo_to_spend=tx_chain_2["new_utxo"], version=3)
183+
184+
tx_to_mine = [tx_v3_block["hex"], tx_v2_block["hex"], tx_v3_block2["hex"], tx_chain_1["hex"], tx_chain_2["hex"], tx_chain_3["hex"]]
185+
block = self.generateblock(node, output="raw(42)", transactions=tx_to_mine)
172186

173-
block = self.generate(node, 1)
174187
self.check_mempool([])
175188
tx_v2_from_v3 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block["new_utxo"], version=2)
176189
tx_v3_from_v2 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v2_block["new_utxo"], version=3)
177190
tx_v3_child_large = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block2["new_utxo"], target_vsize=1250, version=3)
178191
assert_greater_than(node.getmempoolentry(tx_v3_child_large["txid"])["vsize"], TRUC_CHILD_MAX_VSIZE)
179-
self.check_mempool([tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"]])
180-
node.invalidateblock(block[0])
181-
self.check_mempool([tx_v3_block["txid"], tx_v2_block["txid"], tx_v3_block2["txid"], tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"]])
182-
# This is needed because generate() will create the exact same block again.
183-
node.reconsiderblock(block[0])
192+
tx_chain_4 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_chain_3["new_utxo"], version=2)
193+
self.check_mempool([tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"], tx_chain_4["txid"]])
184194

195+
# Reorg should have all block transactions re-accepted, ignoring TRUC enforcement
196+
node.invalidateblock(block["hash"])
197+
self.check_mempool([tx_v3_block["txid"], tx_v2_block["txid"], tx_v3_block2["txid"], tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"], tx_chain_1["txid"], tx_chain_2["txid"], tx_chain_3["txid"], tx_chain_4["txid"]])
185198

186199
@cleanup(extra_args=["-limitdescendantsize=10"])
187200
def test_nondefault_package_limits(self):

0 commit comments

Comments
 (0)