mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 12:23:34 -05:00

723440c5b8
test framework, wallet: rename get_scriptPubKey method to get_output_script (Alfonso Roman Zubeldia)fa0232a3e0
test: add validation for gettxout RPC response (Alfonso Roman Zubeldia) Pull request description: Added a new test in `test/functional/rpc_blockchain.py` to validate the gettxout RPC response. This new test ensures all response elements are verified, including `bestblock`, `confirmations`, `value`, `coinbase`, and `scriptPubKey` details. Also renamed the method `get_scriptPubKey` from `test/functional/test_framework/wallet.py` to the modern name `get_output_script` as suggested by maflcko (https://github.com/bitcoin/bitcoin/pull/30226#discussion_r1925491846) ACKs for top commit: fjahr: reACK723440c5b8
maflcko: lgtm ACK723440c5b8
brunoerg: code review ACK723440c5b8
Tree-SHA512: 3384578909d2e7548cef302c5b8a9fed5b82dfc942892503ad4a05e73f5cceafad1eab3af9a27e54aef3db7631f8935298d6b882c70d2f02a9a75b8e3c209b6c
68 lines
2.8 KiB
Python
Executable file
68 lines
2.8 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# Copyright (c) 2024 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
"""Test MiniWallet."""
|
|
import random
|
|
import string
|
|
|
|
from test_framework.blocktools import COINBASE_MATURITY
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.util import (
|
|
assert_equal,
|
|
)
|
|
from test_framework.wallet import (
|
|
MiniWallet,
|
|
MiniWalletMode,
|
|
)
|
|
|
|
|
|
class FeatureFrameworkMiniWalletTest(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.num_nodes = 1
|
|
|
|
def test_tx_padding(self):
|
|
"""Verify that MiniWallet's transaction padding (`target_vsize` parameter)
|
|
works accurately with all modes."""
|
|
for mode_name, wallet in self.wallets:
|
|
self.log.info(f"Test tx padding with MiniWallet mode {mode_name}...")
|
|
utxo = wallet.get_utxo(mark_as_spent=False)
|
|
for target_vsize in [250, 500, 1250, 2500, 5000, 12500, 25000, 50000, 1000000,
|
|
248, 501, 1085, 3343, 5805, 12289, 25509, 55855, 999998]:
|
|
tx = wallet.create_self_transfer(utxo_to_spend=utxo, target_vsize=target_vsize)
|
|
assert_equal(tx['tx'].get_vsize(), target_vsize)
|
|
child_tx = wallet.create_self_transfer_multi(utxos_to_spend=[tx["new_utxo"]], target_vsize=target_vsize)
|
|
assert_equal(child_tx['tx'].get_vsize(), target_vsize)
|
|
|
|
|
|
def test_wallet_tagging(self):
|
|
"""Verify that tagged wallet instances are able to send funds."""
|
|
self.log.info("Test tagged wallet instances...")
|
|
node = self.nodes[0]
|
|
untagged_wallet = self.wallets[0][1]
|
|
for i in range(10):
|
|
tag = ''.join(random.choice(string.ascii_letters) for _ in range(20))
|
|
self.log.debug(f"-> ({i}) tag name: {tag}")
|
|
tagged_wallet = MiniWallet(node, tag_name=tag)
|
|
untagged_wallet.send_to(from_node=node, scriptPubKey=tagged_wallet.get_output_script(), amount=100000)
|
|
tagged_wallet.rescan_utxos()
|
|
tagged_wallet.send_self_transfer(from_node=node)
|
|
self.generate(node, 1) # clear mempool
|
|
|
|
def run_test(self):
|
|
node = self.nodes[0]
|
|
self.wallets = [
|
|
("ADDRESS_OP_TRUE", MiniWallet(node, mode=MiniWalletMode.ADDRESS_OP_TRUE)),
|
|
("RAW_OP_TRUE", MiniWallet(node, mode=MiniWalletMode.RAW_OP_TRUE)),
|
|
("RAW_P2PK", MiniWallet(node, mode=MiniWalletMode.RAW_P2PK)),
|
|
]
|
|
for _, wallet in self.wallets:
|
|
self.generate(wallet, 10)
|
|
self.generate(wallet, COINBASE_MATURITY)
|
|
|
|
self.test_tx_padding()
|
|
self.test_wallet_tagging()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
FeatureFrameworkMiniWalletTest(__file__).main()
|