|
7 | 7 | from itertools import product
|
8 | 8 |
|
9 | 9 | from test_framework.blocktools import COINBASE_MATURITY
|
| 10 | +from test_framework.descriptors import descsum_create |
10 | 11 | from test_framework.test_framework import BitcoinTestFramework
|
11 | 12 | from test_framework.util import (
|
12 | 13 | assert_array_result,
|
@@ -700,6 +701,38 @@ def run_test(self):
|
700 | 701 | txid_feeReason_four = self.nodes[2].sendmany(dummy='', amounts={address: 5}, verbose=False)
|
701 | 702 | assert_equal(self.nodes[2].gettransaction(txid_feeReason_four)['txid'], txid_feeReason_four)
|
702 | 703 |
|
| 704 | + self.log.info("Testing 'listunspent' outputs the parent descriptor(s) of coins") |
| 705 | + # Create two multisig descriptors, and send a UTxO each. |
| 706 | + multi_a = descsum_create("wsh(multi(1,tpubD6NzVbkrYhZ4YBNjUo96Jxd1u4XKWgnoc7LsA1jz3Yc2NiDbhtfBhaBtemB73n9V5vtJHwU6FVXwggTbeoJWQ1rzdz8ysDuQkpnaHyvnvzR/*,tpubD6NzVbkrYhZ4YHdDGMAYGaWxMSC1B6tPRTHuU5t3BcfcS3nrF523iFm5waFd1pP3ZvJt4Jr8XmCmsTBNx5suhcSgtzpGjGMASR3tau1hJz4/*))") |
| 707 | + multi_b = descsum_create("wsh(multi(1,tpubD6NzVbkrYhZ4YHdDGMAYGaWxMSC1B6tPRTHuU5t3BcfcS3nrF523iFm5waFd1pP3ZvJt4Jr8XmCmsTBNx5suhcSgtzpGjGMASR3tau1hJz4/*,tpubD6NzVbkrYhZ4Y2RLiuEzNQkntjmsLpPYDm3LTRBYynUQtDtpzeUKAcb9sYthSFL3YR74cdFgF5mW8yKxv2W2CWuZDFR2dUpE5PF9kbrVXNZ/*))") |
| 708 | + addr_a = self.nodes[0].deriveaddresses(multi_a, 0)[0] |
| 709 | + addr_b = self.nodes[0].deriveaddresses(multi_b, 0)[0] |
| 710 | + txid_a = self.nodes[0].sendtoaddress(addr_a, 0.01) |
| 711 | + txid_b = self.nodes[0].sendtoaddress(addr_b, 0.01) |
| 712 | + self.generate(self.nodes[0], 1, sync_fun=self.no_op) |
| 713 | + # Now import the descriptors, make sure we can identify on which descriptor each coin was received. |
| 714 | + self.nodes[0].createwallet(wallet_name="wo", descriptors=True, disable_private_keys=True) |
| 715 | + wo_wallet = self.nodes[0].get_wallet_rpc("wo") |
| 716 | + wo_wallet.importdescriptors([ |
| 717 | + { |
| 718 | + "desc": multi_a, |
| 719 | + "active": False, |
| 720 | + "timestamp": "now", |
| 721 | + }, |
| 722 | + { |
| 723 | + "desc": multi_b, |
| 724 | + "active": False, |
| 725 | + "timestamp": "now", |
| 726 | + }, |
| 727 | + ]) |
| 728 | + coins = wo_wallet.listunspent(minconf=0) |
| 729 | + assert_equal(len(coins), 2) |
| 730 | + coin_a = next(c for c in coins if c["txid"] == txid_a) |
| 731 | + assert_equal(coin_a["parent_descs"][0], multi_a) |
| 732 | + coin_b = next(c for c in coins if c["txid"] == txid_b) |
| 733 | + assert_equal(coin_b["parent_descs"][0], multi_b) |
| 734 | + self.nodes[0].unloadwallet("wo") |
| 735 | + |
703 | 736 |
|
704 | 737 | if __name__ == '__main__':
|
705 | 738 | WalletTest().main()
|
0 commit comments