|
13 | 13 | from test_framework.test_framework import BitcoinTestFramework |
14 | 14 | from test_framework.util import ( |
15 | 15 | assert_equal, |
16 | | - assert_greater_than, |
17 | 16 | assert_greater_than_or_equal, |
18 | 17 | assert_raises_rpc_error, |
19 | 18 | get_fee, |
@@ -603,23 +602,27 @@ def test_incremental_relay_feerates(self): |
603 | 602 |
|
604 | 603 | low_feerate = min_relay_feerate * 2 |
605 | 604 | confirmed_utxo = self.wallet.get_utxo(confirmed_only=True) |
606 | | - replacee_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee_rate=low_feerate, target_vsize=5000) |
| 605 | + # Use different versions to avoid creating an identical transaction when failed_replacement_tx is created. |
| 606 | + # Use a target vsize that is small, but something larger than the minimum so that we can create a transaction that is 1vB smaller later. |
| 607 | + replacee_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee_rate=low_feerate, version=3, target_vsize=200) |
607 | 608 | node.sendrawtransaction(replacee_tx['hex']) |
608 | 609 |
|
609 | | - replacement_placeholder_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo) |
| 610 | + replacement_placeholder_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, target_vsize=200) |
610 | 611 | replacement_expected_size = replacement_placeholder_tx['tx'].get_vsize() |
611 | 612 | replacement_required_fee = get_fee(replacement_expected_size, incremental_setting_decimal) + replacee_tx['fee'] |
612 | 613 |
|
613 | | - # Should always be required to pay additional fees |
614 | | - if incremental_setting > 0: |
615 | | - assert_greater_than(replacement_required_fee, replacee_tx['fee']) |
616 | | - |
617 | | - # 1 satoshi shy of the required fee |
618 | | - failed_replacement_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee=replacement_required_fee - Decimal("0.00000001")) |
| 614 | + # Show that replacement fails when paying 1 satoshi shy of the required fee |
| 615 | + failed_replacement_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee=replacement_required_fee - Decimal("0.00000001"), version=2, target_vsize=200) |
619 | 616 | assert_raises_rpc_error(-26, "insufficient fee", node.sendrawtransaction, failed_replacement_tx['hex']) |
| 617 | + replacement_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee=replacement_required_fee, version=2, target_vsize=200) |
620 | 618 |
|
621 | | - replacement_tx = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee=replacement_required_fee) |
622 | | - node.sendrawtransaction(replacement_tx['hex']) |
| 619 | + if incremental_setting == 0: |
| 620 | + # When incremental relay feerate is 0, additional fees are not required, but higher feerate is still required. |
| 621 | + assert_raises_rpc_error(-26, "insufficient fee", node.sendrawtransaction, replacement_tx['hex']) |
| 622 | + replacement_tx_smaller = self.wallet.create_self_transfer(utxo_to_spend=confirmed_utxo, fee=replacement_required_fee, version=2, target_vsize=199) |
| 623 | + node.sendrawtransaction(replacement_tx_smaller['hex']) |
| 624 | + else: |
| 625 | + node.sendrawtransaction(replacement_tx['hex']) |
623 | 626 |
|
624 | 627 | def test_fullrbf(self): |
625 | 628 | # BIP125 signaling is not respected |
|
0 commit comments