From dd8fa861939d5b8bdd844ad7cab015d08533a91a Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Tue, 16 Apr 2024 02:30:51 +0200 Subject: test: use tagged ephemeral MiniWallet instance in fill_mempool --- test/functional/mempool_limit.py | 6 +++--- test/functional/p2p_1p1c_network.py | 3 +-- test/functional/p2p_opportunistic_1p1c.py | 3 +-- test/functional/p2p_tx_download.py | 2 +- test/functional/rpc_packages.py | 2 +- test/functional/test_framework/mempool_util.py | 20 ++++++++++++-------- 6 files changed, 19 insertions(+), 17 deletions(-) (limited to 'test') diff --git a/test/functional/mempool_limit.py b/test/functional/mempool_limit.py index fccb386430..d46924f4ce 100755 --- a/test/functional/mempool_limit.py +++ b/test/functional/mempool_limit.py @@ -95,7 +95,7 @@ class MempoolLimitTest(BitcoinTestFramework): assert_equal(node.getmempoolinfo()['minrelaytxfee'], Decimal('0.00001000')) assert_equal(node.getmempoolinfo()['mempoolminfee'], Decimal('0.00001000')) - fill_mempool(self, node, self.wallet) + fill_mempool(self, node) current_info = node.getmempoolinfo() mempoolmin_feerate = current_info["mempoolminfee"] @@ -185,7 +185,7 @@ class MempoolLimitTest(BitcoinTestFramework): assert_equal(node.getmempoolinfo()['minrelaytxfee'], Decimal('0.00001000')) assert_equal(node.getmempoolinfo()['mempoolminfee'], Decimal('0.00001000')) - fill_mempool(self, node, self.wallet) + fill_mempool(self, node) current_info = node.getmempoolinfo() mempoolmin_feerate = current_info["mempoolminfee"] @@ -259,7 +259,7 @@ class MempoolLimitTest(BitcoinTestFramework): assert_equal(node.getmempoolinfo()['minrelaytxfee'], Decimal('0.00001000')) assert_equal(node.getmempoolinfo()['mempoolminfee'], Decimal('0.00001000')) - fill_mempool(self, node, self.wallet) + fill_mempool(self, node) # Deliberately try to create a tx with a fee less than the minimum mempool fee to assert that it does not get added to the mempool self.log.info('Create a mempool tx that will not pass mempoolminfee') diff --git a/test/functional/p2p_1p1c_network.py b/test/functional/p2p_1p1c_network.py index 57de90a91e..ea59248506 100755 --- a/test/functional/p2p_1p1c_network.py +++ b/test/functional/p2p_1p1c_network.py @@ -47,8 +47,7 @@ class PackageRelayTest(BitcoinTestFramework): self.supports_cli = False def raise_network_minfee(self): - filler_wallet = MiniWallet(self.nodes[0]) - fill_mempool(self, self.nodes[0], filler_wallet) + fill_mempool(self, self.nodes[0]) self.log.debug("Wait for the network to sync mempools") self.sync_mempools() diff --git a/test/functional/p2p_opportunistic_1p1c.py b/test/functional/p2p_opportunistic_1p1c.py index 0381cfb126..aec6e95fbc 100755 --- a/test/functional/p2p_opportunistic_1p1c.py +++ b/test/functional/p2p_opportunistic_1p1c.py @@ -388,8 +388,7 @@ class PackageRelayTest(BitcoinTestFramework): self.generate(self.wallet_nonsegwit, 10) self.generate(self.wallet, 20) - filler_wallet = MiniWallet(node) - fill_mempool(self, node, filler_wallet) + fill_mempool(self, node) self.log.info("Check opportunistic 1p1c logic when parent (txid != wtxid) is received before child") self.test_basic_parent_then_child(self.wallet) diff --git a/test/functional/p2p_tx_download.py b/test/functional/p2p_tx_download.py index 20dc7455fe..0af6b1d2c9 100755 --- a/test/functional/p2p_tx_download.py +++ b/test/functional/p2p_tx_download.py @@ -250,7 +250,7 @@ class TxDownloadTest(BitcoinTestFramework): def test_rejects_filter_reset(self): self.log.info('Check that rejected tx is not requested again') node = self.nodes[0] - fill_mempool(self, node, self.wallet) + fill_mempool(self, node) self.wallet.rescan_utxos() mempoolminfee = node.getmempoolinfo()['mempoolminfee'] peer = node.add_p2p_connection(TestP2PConn()) diff --git a/test/functional/rpc_packages.py b/test/functional/rpc_packages.py index 67bdaf7d18..2b1de67506 100755 --- a/test/functional/rpc_packages.py +++ b/test/functional/rpc_packages.py @@ -390,7 +390,7 @@ class RPCPackagesTest(BitcoinTestFramework): ]) self.wallet.rescan_utxos() - fill_mempool(self, node, self.wallet) + fill_mempool(self, node) minrelay = node.getmempoolinfo()["minrelaytxfee"] parent = self.wallet.create_self_transfer( diff --git a/test/functional/test_framework/mempool_util.py b/test/functional/test_framework/mempool_util.py index 230a95855b..148cc935ed 100644 --- a/test/functional/test_framework/mempool_util.py +++ b/test/functional/test_framework/mempool_util.py @@ -14,9 +14,12 @@ from .util import ( create_lots_of_big_transactions, gen_return_txouts, ) +from .wallet import ( + MiniWallet, +) -def fill_mempool(test_framework, node, miniwallet): +def fill_mempool(test_framework, node): """Fill mempool until eviction. Allows for simpler testing of scenarios with floating mempoolminfee > minrelay @@ -25,8 +28,8 @@ def fill_mempool(test_framework, node, miniwallet): It will not ensure mempools become synced as it is based on a single node and assumes -minrelaytxfee is 1 sat/vbyte. - To avoid unintentional tx dependencies, it is recommended to use separate miniwallets for - mempool filling vs transactions in tests. + To avoid unintentional tx dependencies, the mempool filling txs are created with a + tagged ephemeral miniwallet instance. """ test_framework.log.info("Fill the mempool until eviction is triggered and the mempoolminfee rises") txouts = gen_return_txouts() @@ -39,19 +42,20 @@ def fill_mempool(test_framework, node, miniwallet): # Generate UTXOs to flood the mempool # 1 to create a tx initially that will be evicted from the mempool later # 75 transactions each with a fee rate higher than the previous one - test_framework.generate(miniwallet, 1 + (num_of_batches * tx_batch_size)) + ephemeral_miniwallet = MiniWallet(node, tag_name="fill_mempool_ephemeral_wallet") + test_framework.generate(ephemeral_miniwallet, 1 + num_of_batches * tx_batch_size) # Mine enough blocks so that the UTXOs are allowed to be spent test_framework.generate(node, COINBASE_MATURITY - 1) # Get all UTXOs up front to ensure none of the transactions spend from each other, as that may # change their effective feerate and thus the order in which they are selected for eviction. - confirmed_utxos = [miniwallet.get_utxo(confirmed_only=True) for _ in range(num_of_batches * tx_batch_size + 1)] + confirmed_utxos = [ephemeral_miniwallet.get_utxo(confirmed_only=True) for _ in range(num_of_batches * tx_batch_size + 1)] assert_equal(len(confirmed_utxos), num_of_batches * tx_batch_size + 1) test_framework.log.debug("Create a mempool tx that will be evicted") - tx_to_be_evicted_id = miniwallet.send_self_transfer(from_node=node, utxo_to_spend=confirmed_utxos[0], fee_rate=relayfee)["txid"] - del confirmed_utxos[0] + tx_to_be_evicted_id = ephemeral_miniwallet.send_self_transfer( + from_node=node, utxo_to_spend=confirmed_utxos.pop(0), fee_rate=relayfee)["txid"] # Increase the tx fee rate to give the subsequent transactions a higher priority in the mempool # The tx has an approx. vsize of 65k, i.e. multiplying the previous fee rate (in sats/kvB) @@ -63,7 +67,7 @@ def fill_mempool(test_framework, node, miniwallet): for batch_of_txid in range(num_of_batches): fee = (batch_of_txid + 1) * base_fee utxos = confirmed_utxos[:tx_batch_size] - create_lots_of_big_transactions(miniwallet, node, fee, tx_batch_size, txouts, utxos) + create_lots_of_big_transactions(ephemeral_miniwallet, node, fee, tx_batch_size, txouts, utxos) del confirmed_utxos[:tx_batch_size] test_framework.log.debug("The tx should be evicted by now") -- cgit v1.2.3