Skip to content

Commit ad7f1f6

Browse files
committed
test package rbf boundary conditions more closely
1 parent ff4558d commit ad7f1f6

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

test/functional/mempool_package_rbf.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,23 +168,35 @@ def test_package_rbf_additional_fees(self):
168168
self.assert_mempool_contents(expected=package_txns1)
169169

170170
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"])
175180
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)
176185
self.generate(node, 1)
177186

178187
self.log.info("Check Package RBF must have strict cpfp structure")
179188
coin = self.coins.pop()
180189
package_hex4, package_txns4 = self.create_simple_package(coin, parent_fee=DEFAULT_FEE, child_fee=DEFAULT_CHILD_FEE)
181190
node.submitpackage(package_hex4)
182191
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)
184193
pkg_results5 = node.submitpackage(package_hex5)
185194
assert 'package RBF failed: package feerate is less than parent feerate' in pkg_results5["package_msg"]
186-
187195
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)
188200
self.generate(node, 1)
189201

190202
def test_package_rbf_max_conflicts(self):

0 commit comments

Comments
 (0)