|
6 | 6 |
|
7 | 7 | from test_framework.address import key_to_p2wpkh
|
8 | 8 | from test_framework.blocktools import COINBASE_MATURITY
|
| 9 | +from test_framework.descriptors import descsum_create |
9 | 10 | from test_framework.key import ECKey
|
10 | 11 | from test_framework.test_framework import BitcoinTestFramework
|
11 | 12 | from test_framework.messages import MAX_BIP125_RBF_SEQUENCE
|
@@ -39,6 +40,7 @@ def run_test(self):
|
39 | 40 | self.test_double_send()
|
40 | 41 | self.double_spends_filtered()
|
41 | 42 | self.test_targetconfirmations()
|
| 43 | + self.test_desc() |
42 | 44 |
|
43 | 45 | def test_no_blockhash(self):
|
44 | 46 | self.log.info("Test no blockhash")
|
@@ -383,5 +385,44 @@ def double_spends_filtered(self):
|
383 | 385 | assert_equal(original_found, False)
|
384 | 386 | assert_equal(double_found, False)
|
385 | 387 |
|
| 388 | + def test_desc(self): |
| 389 | + """Make sure we can track coins by descriptor.""" |
| 390 | + self.log.info("Test descriptor lookup by scriptPubKey.") |
| 391 | + |
| 392 | + # Create a watchonly wallet tracking two multisig descriptors. |
| 393 | + multi_a = descsum_create("wsh(multi(1,tpubD6NzVbkrYhZ4YBNjUo96Jxd1u4XKWgnoc7LsA1jz3Yc2NiDbhtfBhaBtemB73n9V5vtJHwU6FVXwggTbeoJWQ1rzdz8ysDuQkpnaHyvnvzR/*,tpubD6NzVbkrYhZ4YHdDGMAYGaWxMSC1B6tPRTHuU5t3BcfcS3nrF523iFm5waFd1pP3ZvJt4Jr8XmCmsTBNx5suhcSgtzpGjGMASR3tau1hJz4/*))") |
| 394 | + multi_b = descsum_create("wsh(multi(1,tpubD6NzVbkrYhZ4YHdDGMAYGaWxMSC1B6tPRTHuU5t3BcfcS3nrF523iFm5waFd1pP3ZvJt4Jr8XmCmsTBNx5suhcSgtzpGjGMASR3tau1hJz4/*,tpubD6NzVbkrYhZ4Y2RLiuEzNQkntjmsLpPYDm3LTRBYynUQtDtpzeUKAcb9sYthSFL3YR74cdFgF5mW8yKxv2W2CWuZDFR2dUpE5PF9kbrVXNZ/*))") |
| 395 | + self.nodes[0].createwallet(wallet_name="wo", descriptors=True, disable_private_keys=True) |
| 396 | + wo_wallet = self.nodes[0].get_wallet_rpc("wo") |
| 397 | + wo_wallet.importdescriptors([ |
| 398 | + { |
| 399 | + "desc": multi_a, |
| 400 | + "active": False, |
| 401 | + "timestamp": "now", |
| 402 | + }, |
| 403 | + { |
| 404 | + "desc": multi_b, |
| 405 | + "active": False, |
| 406 | + "timestamp": "now", |
| 407 | + }, |
| 408 | + ]) |
| 409 | + |
| 410 | + # Send a coin to each descriptor. |
| 411 | + assert_equal(len(wo_wallet.listsinceblock()["transactions"]), 0) |
| 412 | + addr_a = self.nodes[0].deriveaddresses(multi_a, 0)[0] |
| 413 | + addr_b = self.nodes[0].deriveaddresses(multi_b, 0)[0] |
| 414 | + self.nodes[2].sendtoaddress(addr_a, 1) |
| 415 | + self.nodes[2].sendtoaddress(addr_b, 2) |
| 416 | + self.generate(self.nodes[2], 1) |
| 417 | + |
| 418 | + # We can identify on which descriptor each coin was received. |
| 419 | + coins = wo_wallet.listsinceblock()["transactions"] |
| 420 | + assert_equal(len(coins), 2) |
| 421 | + coin_a = next(c for c in coins if c["amount"] == 1) |
| 422 | + assert_equal(coin_a["parent_descs"][0], multi_a) |
| 423 | + coin_b = next(c for c in coins if c["amount"] == 2) |
| 424 | + assert_equal(coin_b["parent_descs"][0], multi_b) |
| 425 | + |
| 426 | + |
386 | 427 | if __name__ == '__main__':
|
387 | 428 | ListSinceBlockTest().main()
|
0 commit comments