mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 03:03:22 -03:00
test: wallet, add coverage for watch-only raw sh script migration
Github-Pull: #28067
Rebased-From: dd9633b516
This commit is contained in:
parent
6d5a510dcd
commit
513ca0a711
1 changed files with 50 additions and 0 deletions
|
@ -8,6 +8,8 @@ import os
|
|||
import random
|
||||
from test_framework.descriptors import descsum_create
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.messages import COIN, CTransaction, CTxOut
|
||||
from test_framework.script_util import key_to_p2pkh_script, script_to_p2sh_script, script_to_p2wsh_script
|
||||
from test_framework.util import (
|
||||
assert_equal,
|
||||
assert_raises_rpc_error,
|
||||
|
@ -605,6 +607,53 @@ class WalletMigrationTest(BitcoinTestFramework):
|
|||
for addr_info in [addr_external, addr_external_with_label]:
|
||||
check(addr_info, wallet_solvables)
|
||||
|
||||
def test_migrate_raw_p2sh(self):
|
||||
self.log.info("Test migration of watch-only raw p2sh script")
|
||||
df_wallet = self.nodes[0].get_wallet_rpc(self.default_wallet_name)
|
||||
wallet = self.create_legacy_wallet("raw_p2sh")
|
||||
|
||||
def send_to_script(script, amount):
|
||||
tx = CTransaction()
|
||||
tx.vout.append(CTxOut(nValue=amount*COIN, scriptPubKey=script))
|
||||
|
||||
hex_tx = df_wallet.fundrawtransaction(tx.serialize().hex())['hex']
|
||||
signed_tx = df_wallet.signrawtransactionwithwallet(hex_tx)
|
||||
df_wallet.sendrawtransaction(signed_tx['hex'])
|
||||
self.generate(self.nodes[0], 1)
|
||||
|
||||
# Craft sh(pkh(key)) script and send coins to it
|
||||
pubkey = df_wallet.getaddressinfo(df_wallet.getnewaddress())["pubkey"]
|
||||
script_pkh = key_to_p2pkh_script(pubkey)
|
||||
script_sh_pkh = script_to_p2sh_script(script_pkh)
|
||||
send_to_script(script=script_sh_pkh, amount=2)
|
||||
|
||||
# Import script and check balance
|
||||
wallet.rpc.importaddress(address=script_pkh.hex(), label="raw_spk", rescan=True, p2sh=True)
|
||||
assert_equal(wallet.getbalances()['watchonly']['trusted'], 2)
|
||||
|
||||
# Craft wsh(pkh(key)) and send coins to it
|
||||
pubkey = df_wallet.getaddressinfo(df_wallet.getnewaddress())["pubkey"]
|
||||
script_wsh_pkh = script_to_p2wsh_script(key_to_p2pkh_script(pubkey))
|
||||
send_to_script(script=script_wsh_pkh, amount=3)
|
||||
|
||||
# Import script and check balance
|
||||
wallet.rpc.importaddress(address=script_wsh_pkh.hex(), label="raw_spk2", rescan=True, p2sh=False)
|
||||
assert_equal(wallet.getbalances()['watchonly']['trusted'], 5)
|
||||
|
||||
# Migrate wallet and re-check balance
|
||||
info_migration = wallet.migratewallet()
|
||||
wallet_wo = self.nodes[0].get_wallet_rpc(info_migration["watchonly_name"])
|
||||
|
||||
# Watch-only balance is under "mine".
|
||||
assert_equal(wallet_wo.getbalances()['mine']['trusted'], 5)
|
||||
# The watch-only scripts are no longer part of the main wallet
|
||||
assert_equal(wallet.getbalances()['mine']['trusted'], 0)
|
||||
|
||||
# Just in case, also verify wallet restart
|
||||
self.nodes[0].unloadwallet(info_migration["watchonly_name"])
|
||||
self.nodes[0].loadwallet(info_migration["watchonly_name"])
|
||||
assert_equal(wallet_wo.getbalances()['mine']['trusted'], 5)
|
||||
|
||||
def run_test(self):
|
||||
self.generate(self.nodes[0], 101)
|
||||
|
||||
|
@ -618,6 +667,7 @@ class WalletMigrationTest(BitcoinTestFramework):
|
|||
self.test_unloaded()
|
||||
self.test_unloaded_by_path()
|
||||
self.test_addressbook()
|
||||
self.test_migrate_raw_p2sh()
|
||||
|
||||
if __name__ == '__main__':
|
||||
WalletMigrationTest().main()
|
||||
|
|
Loading…
Add table
Reference in a new issue