@@ -168,23 +168,35 @@ def test_package_rbf_additional_fees(self):
168
168
self .assert_mempool_contents (expected = package_txns1 )
169
169
170
170
self .log .info ("Check replacement pays for incremental bandwidth" )
171
- package_hex3 , package_txns3 = self .create_simple_package (coin , parent_fee = DEFAULT_FEE , child_fee = DEFAULT_CHILD_FEE )
172
- pkg_results3 = node .submitpackage (package_hex3 )
173
- assert_equal (f"package RBF failed: insufficient anti-DoS fees, rejecting replacement { package_txns3 [1 ].rehash ()} , not enough additional fees to relay; 0.00 < 0.00000{ sum ([tx .get_vsize () for tx in package_txns3 ])} " , pkg_results3 ["package_msg" ])
174
-
171
+ _ , placeholder_txns3 = self .create_simple_package (coin )
172
+ package_3_size = sum ([tx .get_vsize () for tx in placeholder_txns3 ])
173
+ incremental_sats_required = Decimal (package_3_size ) / COIN
174
+ incremental_sats_short = incremental_sats_required - Decimal ("0.00000001" )
175
+ # Recreate the package with slightly higher fee once we know the size of the new package, but still short of required fee
176
+ failure_package_hex3 , failure_package_txns3 = self .create_simple_package (coin , parent_fee = DEFAULT_FEE , child_fee = DEFAULT_CHILD_FEE + incremental_sats_short )
177
+ assert_equal (package_3_size , sum ([tx .get_vsize () for tx in failure_package_txns3 ]))
178
+ pkg_results3 = node .submitpackage (failure_package_hex3 )
179
+ assert_equal (f"package RBF failed: insufficient anti-DoS fees, rejecting replacement { failure_package_txns3 [1 ].rehash ()} , not enough additional fees to relay; { incremental_sats_short } < { incremental_sats_required } " , pkg_results3 ["package_msg" ])
175
180
self .assert_mempool_contents (expected = package_txns1 )
181
+
182
+ success_package_hex3 , success_package_txns3 = self .create_simple_package (coin , parent_fee = DEFAULT_FEE , child_fee = DEFAULT_CHILD_FEE + incremental_sats_required )
183
+ node .submitpackage (success_package_hex3 )
184
+ self .assert_mempool_contents (expected = success_package_txns3 )
176
185
self .generate (node , 1 )
177
186
178
187
self .log .info ("Check Package RBF must have strict cpfp structure" )
179
188
coin = self .coins .pop ()
180
189
package_hex4 , package_txns4 = self .create_simple_package (coin , parent_fee = DEFAULT_FEE , child_fee = DEFAULT_CHILD_FEE )
181
190
node .submitpackage (package_hex4 )
182
191
self .assert_mempool_contents (expected = package_txns4 )
183
- package_hex5 , package_txns5 = self .create_simple_package (coin , parent_fee = DEFAULT_CHILD_FEE , child_fee = DEFAULT_CHILD_FEE - Decimal ( "0.00000001" ) )
192
+ package_hex5 , package_txns5 = self .create_simple_package (coin , parent_fee = DEFAULT_CHILD_FEE , child_fee = DEFAULT_CHILD_FEE )
184
193
pkg_results5 = node .submitpackage (package_hex5 )
185
- assert 'package RBF failed: package feerate is less than parent feerate' in pkg_results5 ["package_msg" ]
186
-
194
+ assert 'package RBF failed: package feerate is less than or equal to parent feerate' in pkg_results5 ["package_msg" ]
187
195
self .assert_mempool_contents (expected = package_txns4 )
196
+
197
+ package_hex5_1 , package_txns5_1 = self .create_simple_package (coin , parent_fee = DEFAULT_CHILD_FEE , child_fee = DEFAULT_CHILD_FEE + Decimal ("0.00000001" ))
198
+ node .submitpackage (package_hex5_1 )
199
+ self .assert_mempool_contents (expected = package_txns5_1 )
188
200
self .generate (node , 1 )
189
201
190
202
def test_package_rbf_max_conflicts (self ):
0 commit comments