aboutsummaryrefslogtreecommitdiff
path: root/test/functional/mempool_accept_wtxid.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/mempool_accept_wtxid.py')
-rwxr-xr-xtest/functional/mempool_accept_wtxid.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/test/functional/mempool_accept_wtxid.py b/test/functional/mempool_accept_wtxid.py
index dd1f8997ad..63ecc8ee2a 100755
--- a/test/functional/mempool_accept_wtxid.py
+++ b/test/functional/mempool_accept_wtxid.py
@@ -16,6 +16,7 @@ from test_framework.messages import (
CTxOut,
sha256,
)
+from test_framework.p2p import P2PTxInvStore
from test_framework.script import (
CScript,
OP_0,
@@ -62,6 +63,8 @@ class MempoolWtxidTest(BitcoinTestFramework):
parent_txid = node.sendrawtransaction(hexstring=raw_parent, maxfeerate=0)
node.generate(1)
+ peer_wtxid_relay = node.add_p2p_connection(P2PTxInvStore())
+
# Create a new transaction with witness solving first branch
child_witness_script = CScript([OP_TRUE])
child_witness_program = sha256(child_witness_script)
@@ -87,10 +90,13 @@ class MempoolWtxidTest(BitcoinTestFramework):
assert_equal(child_one_txid, child_two_txid)
assert child_one_wtxid != child_two_wtxid
- self.log.info("Submit one child to the mempool")
+ self.log.info("Submit child_one to the mempool")
txid_submitted = node.sendrawtransaction(child_one.serialize().hex())
assert_equal(node.getrawmempool(True)[txid_submitted]['wtxid'], child_one_wtxid)
+ peer_wtxid_relay.wait_for_broadcast([child_one_wtxid])
+ assert_equal(node.getmempoolinfo()["unbroadcastcount"], 0)
+
# testmempoolaccept reports the "already in mempool" error
assert_equal(node.testmempoolaccept([child_one.serialize().hex()]), [{
"txid": child_one_txid,
@@ -108,9 +114,18 @@ class MempoolWtxidTest(BitcoinTestFramework):
# sendrawtransaction will not throw but quits early when the exact same transaction is already in mempool
node.sendrawtransaction(child_one.serialize().hex())
+
+ self.log.info("Connect another peer that hasn't seen child_one before")
+ peer_wtxid_relay_2 = node.add_p2p_connection(P2PTxInvStore())
+
+ self.log.info("Submit child_two to the mempool")
# sendrawtransaction will not throw but quits early when a transaction with the same non-witness data is already in mempool
node.sendrawtransaction(child_two.serialize().hex())
+ # The node should rebroadcast the transaction using the wtxid of the correct transaction
+ # (child_one, which is in its mempool).
+ peer_wtxid_relay_2.wait_for_broadcast([child_one_wtxid])
+ assert_equal(node.getmempoolinfo()["unbroadcastcount"], 0)
if __name__ == '__main__':
MempoolWtxidTest().main()