mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
test: Use wtxid relay generally in functional tests
This commit is contained in:
parent
8d8099e97a
commit
cacd85209e
6 changed files with 20 additions and 11 deletions
|
@ -69,14 +69,19 @@ class MempoolPackagesTest(BitcoinTestFramework):
|
||||||
fee = Decimal("0.0001")
|
fee = Decimal("0.0001")
|
||||||
# MAX_ANCESTORS transactions off a confirmed tx should be fine
|
# MAX_ANCESTORS transactions off a confirmed tx should be fine
|
||||||
chain = []
|
chain = []
|
||||||
|
witness_chain = []
|
||||||
for i in range(MAX_ANCESTORS):
|
for i in range(MAX_ANCESTORS):
|
||||||
(txid, sent_value) = self.chain_transaction(self.nodes[0], txid, 0, value, fee, 1)
|
(txid, sent_value) = self.chain_transaction(self.nodes[0], txid, 0, value, fee, 1)
|
||||||
value = sent_value
|
value = sent_value
|
||||||
chain.append(txid)
|
chain.append(txid)
|
||||||
|
# We need the wtxids to check P2P announcements
|
||||||
|
fulltx = self.nodes[0].getrawtransaction(txid)
|
||||||
|
witnesstx = self.nodes[0].decoderawtransaction(fulltx, True)
|
||||||
|
witness_chain.append(witnesstx['hash'])
|
||||||
|
|
||||||
# Wait until mempool transactions have passed initial broadcast (sent inv and received getdata)
|
# Wait until mempool transactions have passed initial broadcast (sent inv and received getdata)
|
||||||
# Otherwise, getrawmempool may be inconsistent with getmempoolentry if unbroadcast changes in between
|
# Otherwise, getrawmempool may be inconsistent with getmempoolentry if unbroadcast changes in between
|
||||||
self.nodes[0].p2p.wait_for_broadcast(chain)
|
self.nodes[0].p2p.wait_for_broadcast(witness_chain)
|
||||||
|
|
||||||
# Check mempool has MAX_ANCESTORS transactions in it, and descendant and ancestor
|
# Check mempool has MAX_ANCESTORS transactions in it, and descendant and ancestor
|
||||||
# count and fees should look correct
|
# count and fees should look correct
|
||||||
|
|
|
@ -52,7 +52,7 @@ class P2PBlocksOnly(BitcoinTestFramework):
|
||||||
self.log.info('Check that txs from rpc are not rejected and relayed to other peers')
|
self.log.info('Check that txs from rpc are not rejected and relayed to other peers')
|
||||||
assert_equal(self.nodes[0].getpeerinfo()[0]['relaytxes'], True)
|
assert_equal(self.nodes[0].getpeerinfo()[0]['relaytxes'], True)
|
||||||
txid = self.nodes[0].testmempoolaccept([sigtx])[0]['txid']
|
txid = self.nodes[0].testmempoolaccept([sigtx])[0]['txid']
|
||||||
with self.nodes[0].assert_debug_log(['received getdata for: tx {} peer=1'.format(txid)]):
|
with self.nodes[0].assert_debug_log(['received getdata for: wtx {} peer=1'.format(txid)]):
|
||||||
self.nodes[0].sendrawtransaction(sigtx)
|
self.nodes[0].sendrawtransaction(sigtx)
|
||||||
self.nodes[0].p2p.wait_for_tx(txid)
|
self.nodes[0].p2p.wait_for_tx(txid)
|
||||||
assert_equal(self.nodes[0].getmempoolinfo()['size'], 1)
|
assert_equal(self.nodes[0].getmempoolinfo()['size'], 1)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from test_framework.messages import MSG_TX, msg_feefilter
|
from test_framework.messages import MSG_TX, MSG_WTX, msg_feefilter
|
||||||
from test_framework.mininode import mininode_lock, P2PInterface
|
from test_framework.mininode import mininode_lock, P2PInterface
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import assert_equal
|
from test_framework.util import assert_equal
|
||||||
|
@ -45,7 +45,7 @@ class TestP2PConn(P2PInterface):
|
||||||
|
|
||||||
def on_inv(self, message):
|
def on_inv(self, message):
|
||||||
for i in message.inv:
|
for i in message.inv:
|
||||||
if (i.type == MSG_TX):
|
if (i.type == MSG_TX) or (i.type == MSG_WTX):
|
||||||
self.txinvs.append(hashToHex(i.hash))
|
self.txinvs.append(hashToHex(i.hash))
|
||||||
|
|
||||||
def clear_invs(self):
|
def clear_invs(self):
|
||||||
|
|
|
@ -36,7 +36,6 @@ from test_framework.messages import (
|
||||||
msg_block,
|
msg_block,
|
||||||
msg_no_witness_tx,
|
msg_no_witness_tx,
|
||||||
msg_verack,
|
msg_verack,
|
||||||
msg_wtxidrelay,
|
|
||||||
ser_uint256,
|
ser_uint256,
|
||||||
ser_vector,
|
ser_vector,
|
||||||
sha256,
|
sha256,
|
||||||
|
@ -161,8 +160,10 @@ class TestP2PConn(P2PInterface):
|
||||||
|
|
||||||
def on_version(self, message):
|
def on_version(self, message):
|
||||||
if self.wtxidrelay:
|
if self.wtxidrelay:
|
||||||
self.send_message(msg_wtxidrelay())
|
super().on_version(message)
|
||||||
super().on_version(message)
|
else:
|
||||||
|
self.send_message(msg_verack())
|
||||||
|
self.nServices = message.nServices
|
||||||
|
|
||||||
def on_getdata(self, message):
|
def on_getdata(self, message):
|
||||||
self.lastgetdata = message.inv
|
self.lastgetdata = message.inv
|
||||||
|
|
|
@ -12,6 +12,7 @@ from test_framework.messages import (
|
||||||
FromHex,
|
FromHex,
|
||||||
MSG_TX,
|
MSG_TX,
|
||||||
MSG_TYPE_MASK,
|
MSG_TYPE_MASK,
|
||||||
|
MSG_WTX,
|
||||||
msg_inv,
|
msg_inv,
|
||||||
msg_notfound,
|
msg_notfound,
|
||||||
)
|
)
|
||||||
|
@ -36,7 +37,7 @@ class TestP2PConn(P2PInterface):
|
||||||
|
|
||||||
def on_getdata(self, message):
|
def on_getdata(self, message):
|
||||||
for i in message.inv:
|
for i in message.inv:
|
||||||
if i.type & MSG_TYPE_MASK == MSG_TX:
|
if i.type & MSG_TYPE_MASK == MSG_TX or i.type & MSG_TYPE_MASK == MSG_WTX:
|
||||||
self.tx_getdata_count += 1
|
self.tx_getdata_count += 1
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,7 +65,7 @@ class TxDownloadTest(BitcoinTestFramework):
|
||||||
txid = 0xdeadbeef
|
txid = 0xdeadbeef
|
||||||
|
|
||||||
self.log.info("Announce the txid from each incoming peer to node 0")
|
self.log.info("Announce the txid from each incoming peer to node 0")
|
||||||
msg = msg_inv([CInv(t=MSG_TX, h=txid)])
|
msg = msg_inv([CInv(t=MSG_WTX, h=txid)])
|
||||||
for p in self.nodes[0].p2ps:
|
for p in self.nodes[0].p2ps:
|
||||||
p.send_and_ping(msg)
|
p.send_and_ping(msg)
|
||||||
|
|
||||||
|
@ -136,13 +137,13 @@ class TxDownloadTest(BitcoinTestFramework):
|
||||||
with mininode_lock:
|
with mininode_lock:
|
||||||
p.tx_getdata_count = 0
|
p.tx_getdata_count = 0
|
||||||
|
|
||||||
p.send_message(msg_inv([CInv(t=MSG_TX, h=i) for i in txids]))
|
p.send_message(msg_inv([CInv(t=MSG_WTX, h=i) for i in txids]))
|
||||||
wait_until(lambda: p.tx_getdata_count >= MAX_GETDATA_IN_FLIGHT, lock=mininode_lock)
|
wait_until(lambda: p.tx_getdata_count >= MAX_GETDATA_IN_FLIGHT, lock=mininode_lock)
|
||||||
with mininode_lock:
|
with mininode_lock:
|
||||||
assert_equal(p.tx_getdata_count, MAX_GETDATA_IN_FLIGHT)
|
assert_equal(p.tx_getdata_count, MAX_GETDATA_IN_FLIGHT)
|
||||||
|
|
||||||
self.log.info("Now check that if we send a NOTFOUND for a transaction, we'll get one more request")
|
self.log.info("Now check that if we send a NOTFOUND for a transaction, we'll get one more request")
|
||||||
p.send_message(msg_notfound(vec=[CInv(t=MSG_TX, h=txids[0])]))
|
p.send_message(msg_notfound(vec=[CInv(t=MSG_WTX, h=txids[0])]))
|
||||||
wait_until(lambda: p.tx_getdata_count >= MAX_GETDATA_IN_FLIGHT + 1, timeout=10, lock=mininode_lock)
|
wait_until(lambda: p.tx_getdata_count >= MAX_GETDATA_IN_FLIGHT + 1, timeout=10, lock=mininode_lock)
|
||||||
with mininode_lock:
|
with mininode_lock:
|
||||||
assert_equal(p.tx_getdata_count, MAX_GETDATA_IN_FLIGHT + 1)
|
assert_equal(p.tx_getdata_count, MAX_GETDATA_IN_FLIGHT + 1)
|
||||||
|
|
|
@ -377,6 +377,8 @@ class P2PInterface(P2PConnection):
|
||||||
|
|
||||||
def on_version(self, message):
|
def on_version(self, message):
|
||||||
assert message.nVersion >= MIN_VERSION_SUPPORTED, "Version {} received. Test framework only supports versions greater than {}".format(message.nVersion, MIN_VERSION_SUPPORTED)
|
assert message.nVersion >= MIN_VERSION_SUPPORTED, "Version {} received. Test framework only supports versions greater than {}".format(message.nVersion, MIN_VERSION_SUPPORTED)
|
||||||
|
if message.nVersion >= 70016:
|
||||||
|
self.send_message(msg_wtxidrelay())
|
||||||
self.send_message(msg_verack())
|
self.send_message(msg_verack())
|
||||||
self.nServices = message.nServices
|
self.nServices = message.nServices
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue