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 ,
@@ -584,7 +583,7 @@ def test_replacement_relay_fee(self):
584
583
tx = self .wallet .send_self_transfer (from_node = self .nodes [0 ])['tx' ]
585
584
586
585
# Higher fee, higher feerate, different txid, but the replacement does not provide a relay
587
- # fee conforming to node's `incrementalrelayfee` policy of 1000 sat per KB.
586
+ # fee conforming to node's `incrementalrelayfee` policy of 100 sat per KB.
588
587
assert_equal (self .nodes [0 ].getmempoolinfo ()["incrementalrelayfee" ], Decimal ("0.000001" ))
589
588
tx .vout [0 ].nValue -= 1
590
589
assert_raises_rpc_error (- 26 , "insufficient fee" , self .nodes [0 ].sendrawtransaction , tx .serialize ().hex ())
@@ -594,7 +593,7 @@ def test_incremental_relay_feerates(self):
594
593
node = self .nodes [0 ]
595
594
for incremental_setting in (0 , 5 , 10 , 50 , 100 , 234 , 1000 , 5000 , 21000 ):
596
595
incremental_setting_decimal = incremental_setting / Decimal (COIN )
597
- self .log .info (f"-> Test -incrementalrelayfee={ incremental_setting_decimal :.8f} sat/kvB..." )
596
+ self .log .info (f"-> Test -incrementalrelayfee={ incremental_setting :.8f} sat/kvB..." )
598
597
self .restart_node (0 , extra_args = [f"-incrementalrelayfee={ incremental_setting_decimal :.8f} " , "-persistmempool=0" ])
599
598
600
599
# When incremental relay feerate is higher than min relay feerate, min relay feerate is automatically increased.
@@ -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