diff options
author | Andreas Kouloumos <kouloumosa@gmail.com> | 2022-06-28 14:23:45 +0300 |
---|---|---|
committer | Andreas Kouloumos <kouloumosa@gmail.com> | 2022-08-01 19:11:36 +0300 |
commit | f2f6068b69b1b532db92b276f024c89b56f38294 (patch) | |
tree | d094944d6d52f3223c902701b1e667d200b738ce | |
parent | 1d6b438ef0ccd05e1522ac38b44f847c1d93e72f (diff) |
test: MiniWallet: add `send_self_transfer_chain` to create chain of txns
With this new method, a chain of transactions can be created. This
method is introduced to further simplify the mempool_package_limits.py
tests.
-rwxr-xr-x | test/functional/mempool_package_limits.py | 70 | ||||
-rw-r--r-- | test/functional/test_framework/wallet.py | 12 |
2 files changed, 36 insertions, 46 deletions
diff --git a/test/functional/mempool_package_limits.py b/test/functional/mempool_package_limits.py index 6404ffbd6f..3712f66a65 100755 --- a/test/functional/mempool_package_limits.py +++ b/test/functional/mempool_package_limits.py @@ -45,17 +45,12 @@ class MempoolPackageLimitsTest(BitcoinTestFramework): assert_equal(0, node.getmempoolinfo()["size"]) chain_hex = [] - chaintip_utxo = None - for i in range(mempool_count + package_count): + chaintip_utxo = self.wallet.send_self_transfer_chain(from_node=node, chain_length=mempool_count) + # in-package transactions + for _ in range(package_count): tx = self.wallet.create_self_transfer(utxo_to_spend=chaintip_utxo) chaintip_utxo = tx["new_utxo"] - if i < mempool_count: - # in-mempool transactions - txid = self.wallet.sendrawtransaction(from_node=node, tx_hex=tx["hex"]) - assert_equal(node.getmempoolentry(txid)["ancestorcount"], i + 1) - else: - # in-package transactions - chain_hex.append(tx["hex"]) + chain_hex.append(tx["hex"]) testres_too_long = node.testmempoolaccept(rawtxs=chain_hex) for txres in testres_too_long: assert_equal(txres["package-error"], "package-mempool-limits") @@ -104,25 +99,17 @@ class MempoolPackageLimitsTest(BitcoinTestFramework): m1_utxos = self.wallet.send_self_transfer_multi(from_node=node, num_outputs=2)['new_utxos'] package_hex = [] - # Chain A - chain_a_utxo = m1_utxos[0] - for i in range(12): - tx = self.wallet.create_self_transfer(utxo_to_spend=chain_a_utxo) - chain_a_utxo = tx["new_utxo"] - if i < 11: # M2a... M12a - self.wallet.sendrawtransaction(from_node=node, tx_hex=tx["hex"]) - else: # Pa - package_hex.append(tx["hex"]) - - # Chain B - chain_b_utxo = m1_utxos[1] - for i in range(13): - tx = self.wallet.create_self_transfer(utxo_to_spend=chain_b_utxo) - chain_b_utxo = tx["new_utxo"] - if i < 12: # M3b... M13b - self.wallet.sendrawtransaction(from_node=node, tx_hex=tx["hex"]) - else: # Pb - package_hex.append(tx["hex"]) + # Chain A (M2a... M12a) + chain_a_tip_utxo = self.wallet.send_self_transfer_chain(from_node=node, chain_length=11, utxo_to_spend=m1_utxos[0]) + # Pa + pa_hex = self.wallet.create_self_transfer(utxo_to_spend=chain_a_tip_utxo)["hex"] + package_hex.append(pa_hex) + + # Chain B (M2b... M13b) + chain_b_tip_utxo = self.wallet.send_self_transfer_chain(from_node=node, chain_length=12, utxo_to_spend=m1_utxos[1]) + # Pb + pb_hex = self.wallet.create_self_transfer(utxo_to_spend=chain_b_tip_utxo)["hex"] + package_hex.append(pb_hex) assert_equal(24, node.getmempoolinfo()["size"]) assert_equal(2, len(package_hex)) @@ -158,9 +145,7 @@ class MempoolPackageLimitsTest(BitcoinTestFramework): m1_utxos = self.wallet.send_self_transfer_multi(from_node=node, num_outputs=2)['new_utxos'] # Chain M2...M24 - chain_utxo = m1_utxos[0] - for _ in range(23): # M2...M24 - chain_utxo = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=chain_utxo)["new_utxo"] + self.wallet.send_self_transfer_chain(from_node=node, chain_length=23, utxo_to_spend=m1_utxos[0]) # P1 p1_tx = self.wallet.create_self_transfer(utxo_to_spend=m1_utxos[1]) @@ -206,15 +191,11 @@ class MempoolPackageLimitsTest(BitcoinTestFramework): # Two chains of 13 transactions each for _ in range(2): - chaintip_utxo = None - for i in range(13): - tx = self.wallet.create_self_transfer(utxo_to_spend=chaintip_utxo) - chaintip_utxo = tx["new_utxo"] - if i < 12: - self.wallet.sendrawtransaction(from_node=node, tx_hex=tx["hex"]) - else: # Save the 13th transaction for the package - package_hex.append(tx["hex"]) - pc_parent_utxos.append(chaintip_utxo) + chain_tip_utxo = self.wallet.send_self_transfer_chain(from_node=node, chain_length=12) + # Save the 13th transaction for the package + tx = self.wallet.create_self_transfer(utxo_to_spend=chain_tip_utxo) + package_hex.append(tx["hex"]) + pc_parent_utxos.append(tx["new_utxo"]) # Child Pc pc_hex = self.wallet.create_self_transfer_multi(utxos_to_spend=pc_parent_utxos)["hex"] @@ -253,12 +234,9 @@ class MempoolPackageLimitsTest(BitcoinTestFramework): self.log.info("Check that in-mempool and in-package ancestors are calculated properly in packages") # Two chains of 12 transactions each for _ in range(2): - chaintip_utxo = None - for i in range(12): - chaintip_utxo = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=chaintip_utxo)["new_utxo"] - if i == 11: - # last 2 transactions will be the parents of Pc - pc_parent_utxos.append(chaintip_utxo) + chaintip_utxo = self.wallet.send_self_transfer_chain(from_node=node, chain_length=12) + # last 2 transactions will be the parents of Pc + pc_parent_utxos.append(chaintip_utxo) # Child Pc pc_tx = self.wallet.create_self_transfer_multi(utxos_to_spend=pc_parent_utxos) diff --git a/test/functional/test_framework/wallet.py b/test/functional/test_framework/wallet.py index a04e8525c1..b671ecbaf2 100644 --- a/test/functional/test_framework/wallet.py +++ b/test/functional/test_framework/wallet.py @@ -335,6 +335,18 @@ class MiniWallet: self.scan_tx(from_node.decoderawtransaction(tx_hex)) return txid + def send_self_transfer_chain(self, *, from_node, chain_length, utxo_to_spend=None): + """Create and send a "chain" of chain_length transactions. The nth transaction in + the chain is a child of the n-1th transaction and parent of the n+1th transaction. + + Returns the chaintip (nth) utxo + """ + chaintip_utxo = utxo_to_spend or self.get_utxo() + for _ in range(chain_length): + chaintip_utxo = self.send_self_transfer(utxo_to_spend=chaintip_utxo, from_node=from_node)["new_utxo"] + return chaintip_utxo + + def getnewdestination(address_type='bech32m'): """Generate a random destination of the specified type and return the corresponding public key, scriptPubKey and address. Supported types are |