mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 20:03:34 -03:00
Merge bitcoin/bitcoin#24896: test: use MiniWallet for p2p_segwit.py
917a89a814
test: use MiniWallet for p2p_segwit.py (Sebastian Falbesoner)
Pull request description:
This PR enables one more of the non-wallet functional tests (p2p_segwit.py) to be run even with the Bitcoin Code wallet by using the MiniWallet instead, as proposed in https://github.com/bitcoin/bitcoin/issues/20078.
This change only affects the subtest `test_superfluous_witness`. Note that instead of creating a raw transaction first and then signing it, we go the other direction here: MiniWallet creates a transaction spending a segwit v1 output (i.e. including a witness), then we turn it into a raw transaction by dropping the witness. Therefore, the debug log asserts are swapped.
Top commit has no ACKs.
Tree-SHA512: 163a93a527f60100487f0aff49a9d7baf392ceb4417c54521157b2678685f5728dd751a9747c6cf51666aae78252dd3bc44130e659f7a1262ec1c86e30225622
This commit is contained in:
commit
8d3743a365
1 changed files with 9 additions and 18 deletions
|
@ -43,7 +43,6 @@ from test_framework.messages import (
|
|||
ser_uint256,
|
||||
ser_vector,
|
||||
sha256,
|
||||
tx_from_hex,
|
||||
)
|
||||
from test_framework.p2p import (
|
||||
P2PInterface,
|
||||
|
@ -89,6 +88,8 @@ from test_framework.util import (
|
|||
softfork_active,
|
||||
assert_raises_rpc_error,
|
||||
)
|
||||
from test_framework.wallet import MiniWallet
|
||||
|
||||
|
||||
MAX_SIGOP_COST = 80000
|
||||
|
||||
|
@ -221,9 +222,6 @@ class SegWitTest(BitcoinTestFramework):
|
|||
]
|
||||
self.supports_cli = False
|
||||
|
||||
def skip_test_if_missing_module(self):
|
||||
self.skip_if_no_wallet()
|
||||
|
||||
# Helper functions
|
||||
|
||||
def build_next_block(self):
|
||||
|
@ -259,6 +257,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||
|
||||
self.log.info("Starting tests before segwit activation")
|
||||
self.segwit_active = False
|
||||
self.wallet = MiniWallet(self.nodes[0])
|
||||
|
||||
self.test_non_witness_transaction()
|
||||
self.test_v0_outputs_arent_spendable()
|
||||
|
@ -307,7 +306,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||
self.test_node.send_and_ping(msg_no_witness_block(block)) # make sure the block was processed
|
||||
txid = block.vtx[0].sha256
|
||||
|
||||
self.generate(self.nodes[0], 99) # let the block mature
|
||||
self.generate(self.wallet, 99) # let the block mature
|
||||
|
||||
# Create a transaction that spends the coinbase
|
||||
tx = CTransaction()
|
||||
|
@ -1999,22 +1998,14 @@ class SegWitTest(BitcoinTestFramework):
|
|||
def serialize(self):
|
||||
return serialize_with_bogus_witness(self.tx)
|
||||
|
||||
self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(address_type='bech32'), 5)
|
||||
self.generate(self.nodes[0], 1)
|
||||
unspent = next(u for u in self.nodes[0].listunspent() if u['spendable'] and u['address'].startswith('bcrt'))
|
||||
|
||||
raw = self.nodes[0].createrawtransaction([{"txid": unspent['txid'], "vout": unspent['vout']}], {self.nodes[0].getnewaddress(): 1})
|
||||
tx = tx_from_hex(raw)
|
||||
assert_raises_rpc_error(-22, "TX decode failed", self.nodes[0].decoderawtransaction, hexstring=serialize_with_bogus_witness(tx).hex(), iswitness=True)
|
||||
with self.nodes[0].assert_debug_log(['Superfluous witness record']):
|
||||
self.test_node.send_and_ping(msg_bogus_tx(tx))
|
||||
raw = self.nodes[0].signrawtransactionwithwallet(raw)
|
||||
assert raw['complete']
|
||||
raw = raw['hex']
|
||||
tx = tx_from_hex(raw)
|
||||
tx = self.wallet.create_self_transfer(from_node=self.nodes[0])['tx']
|
||||
assert_raises_rpc_error(-22, "TX decode failed", self.nodes[0].decoderawtransaction, hexstring=serialize_with_bogus_witness(tx).hex(), iswitness=True)
|
||||
with self.nodes[0].assert_debug_log(['Unknown transaction optional data']):
|
||||
self.test_node.send_and_ping(msg_bogus_tx(tx))
|
||||
tx.wit.vtxinwit = [] # drop witness
|
||||
assert_raises_rpc_error(-22, "TX decode failed", self.nodes[0].decoderawtransaction, hexstring=serialize_with_bogus_witness(tx).hex(), iswitness=True)
|
||||
with self.nodes[0].assert_debug_log(['Superfluous witness record']):
|
||||
self.test_node.send_and_ping(msg_bogus_tx(tx))
|
||||
|
||||
@subtest
|
||||
def test_wtxid_relay(self):
|
||||
|
|
Loading…
Reference in a new issue