Skip to content

Commit

Permalink
test: add conflicting topology test case
Browse files Browse the repository at this point in the history
We want to ensure that even if topologies
that are acceptable are relaxed, like
removing package-not-child-with-unconfirmed-parents,
that we don't end up accepting packages we shouldn't.
  • Loading branch information
instagibbs committed May 14, 2024
1 parent 43a66c5 commit 9365baa
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions test/functional/rpc_packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
fill_mempool,
)
from test_framework.wallet import (
COIN,
DEFAULT_FEE,
MiniWallet,
)
Expand Down Expand Up @@ -237,6 +238,37 @@ def test_conflicting(self):
{"txid": tx2["txid"], "wtxid": tx2["wtxid"], "package-error": "conflict-in-package"}
])

# Add a child that spends both at high feerate to submit via submitpackage
tx_child = self.wallet.create_self_transfer_multi(
fee_per_output=int(DEFAULT_FEE * 5 * COIN),
utxos_to_spend=[tx1["new_utxo"], tx2["new_utxo"]],
)

testres = node.testmempoolaccept([tx1["hex"], tx2["hex"], tx_child["hex"]])

assert_equal(testres, [
{"txid": tx1["txid"], "wtxid": tx1["wtxid"], "package-error": "conflict-in-package"},
{"txid": tx2["txid"], "wtxid": tx2["wtxid"], "package-error": "conflict-in-package"},
{"txid": tx_child["txid"], "wtxid": tx_child["wtxid"], "package-error": "conflict-in-package"}
])

submitres = node.submitpackage([tx1["hex"], tx2["hex"], tx_child["hex"]])
assert_equal(submitres, {'package_msg': 'conflict-in-package', 'tx-results': {}, 'replaced-transactions': []})

# Submit tx1 to mempool, then try the same package again
node.sendrawtransaction(tx1["hex"])

submitres = node.submitpackage([tx1["hex"], tx2["hex"], tx_child["hex"]])
assert_equal(submitres, {'package_msg': 'conflict-in-package', 'tx-results': {}, 'replaced-transactions': []})
assert tx_child["txid"] not in node.getrawmempool()

# ... and without the in-mempool ancestor tx1 included in the call
submitres = node.submitpackage([tx2["hex"], tx_child["hex"]])
assert_equal(submitres, {'package_msg': 'package-not-child-with-unconfirmed-parents', 'tx-results': {}, 'replaced-transactions': []})

# Regardless of error type, the child can never enter the mempool
assert tx_child["txid"] not in node.getrawmempool()

def test_rbf(self):
node = self.nodes[0]

Expand Down

0 comments on commit 9365baa

Please sign in to comment.