diff options
Diffstat (limited to 'test/functional/test_framework')
-rw-r--r-- | test/functional/test_framework/mempool_util.py | 20 |
1 files changed, 12 insertions, 8 deletions
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") |