Skip to content

Commit 0019f61

Browse files
committed
tests: Test importing of multipath descriptors
Test that both importmulti and importdescriptors behave as expected when importing a multipath descriptor.
1 parent f97d5c1 commit 0019f61

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

test/functional/wallet_importdescriptors.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
and test the values returned."""
1717

1818
import concurrent.futures
19+
import time
1920

2021
from test_framework.authproxy import JSONRPCException
2122
from test_framework.blocktools import COINBASE_MATURITY
@@ -708,5 +709,56 @@ def run_test(self):
708709

709710
assert_equal(temp_wallet.getbalance(), encrypted_wallet.getbalance())
710711

712+
self.log.info("Multipath descriptors")
713+
self.nodes[1].createwallet(wallet_name="multipath", descriptors=True, blank=True)
714+
w_multipath = self.nodes[1].get_wallet_rpc("multipath")
715+
self.nodes[1].createwallet(wallet_name="multipath_split", descriptors=True, blank=True)
716+
w_multisplit = self.nodes[1].get_wallet_rpc("multipath_split")
717+
timestamp = int(time.time())
718+
719+
self.test_importdesc({"desc": descsum_create(f"wpkh({xpriv}/<10;20>/0/*)"),
720+
"active": True,
721+
"range": 10,
722+
"timestamp": "now",
723+
"label": "some label"},
724+
success=False,
725+
error_code=-8,
726+
error_message="Multipath descriptors should not have a label",
727+
wallet=w_multipath)
728+
self.test_importdesc({"desc": descsum_create(f"wpkh({xpriv}/<10;20>/0/*)"),
729+
"active": True,
730+
"range": 10,
731+
"timestamp": timestamp,
732+
"internal": True},
733+
success=False,
734+
error_code=-5,
735+
error_message="Cannot have multipath descriptor while also specifying \'internal\'",
736+
wallet=w_multipath)
737+
738+
self.test_importdesc({"desc": descsum_create(f"wpkh({xpriv}/<10;20>/0/*)"),
739+
"active": True,
740+
"range": 10,
741+
"timestamp": timestamp},
742+
success=True,
743+
wallet=w_multipath)
744+
745+
self.test_importdesc({"desc": descsum_create(f"wpkh({xpriv}/10/0/*)"),
746+
"active": True,
747+
"range": 10,
748+
"timestamp": timestamp},
749+
success=True,
750+
wallet=w_multisplit)
751+
self.test_importdesc({"desc": descsum_create(f"wpkh({xpriv}/20/0/*)"),
752+
"active": True,
753+
"range": 10,
754+
"internal": True,
755+
"timestamp": timestamp},
756+
success=True,
757+
wallet=w_multisplit)
758+
for _ in range(0, 10):
759+
assert_equal(w_multipath.getnewaddress(address_type="bech32"), w_multisplit.getnewaddress(address_type="bech32"))
760+
assert_equal(w_multipath.getrawchangeaddress(address_type="bech32"), w_multisplit.getrawchangeaddress(address_type="bech32"))
761+
assert_equal(sorted(w_multipath.listdescriptors()["descriptors"], key=lambda x: x["desc"]), sorted(w_multisplit.listdescriptors()["descriptors"], key=lambda x: x["desc"]))
762+
711763
if __name__ == '__main__':
712764
ImportDescriptorsTest().main()

test/functional/wallet_importmulti.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,43 @@ def run_test(self):
896896
)
897897
assert result[0]['success']
898898

899+
self.log.info("Multipath descriptors")
900+
self.nodes[1].createwallet(wallet_name="multipath", blank=True, disable_private_keys=True)
901+
w_multipath = self.nodes[1].get_wallet_rpc("multipath")
902+
self.nodes[1].createwallet(wallet_name="multipath_split", blank=True, disable_private_keys=True)
903+
w_multisplit = self.nodes[1].get_wallet_rpc("multipath_split")
904+
905+
res = w_multipath.importmulti([{"desc": descsum_create(f"wpkh({xpub}/<10;20>/0/*)"),
906+
"keypool": True,
907+
"range": 10,
908+
"timestamp": "now",
909+
"internal": True}])
910+
assert_equal(res[0]["success"], False)
911+
assert_equal(res[0]["error"]["code"], -5)
912+
assert_equal(res[0]["error"]["message"], "Cannot have multipath descriptor while also specifying 'internal'")
913+
914+
res = w_multipath.importmulti([{"desc": descsum_create(f"wpkh({xpub}/<10;20>/0/*)"),
915+
"keypool": True,
916+
"range": 10,
917+
"timestamp": "now"}])
918+
assert_equal(res[0]["success"], True)
919+
920+
res = w_multisplit.importmulti([{"desc": descsum_create(f"wpkh({xpub}/10/0/*)"),
921+
"keypool": True,
922+
"range": 10,
923+
"timestamp": "now"}])
924+
assert_equal(res[0]["success"], True)
925+
res = w_multisplit.importmulti([{"desc": descsum_create(f"wpkh({xpub}/20/0/*)"),
926+
"keypool": True,
927+
"range": 10,
928+
"internal": True,
929+
"timestamp": timestamp}])
930+
assert_equal(res[0]["success"], True)
931+
932+
for _ in range(0, 9):
933+
assert_equal(w_multipath.getnewaddress(address_type="bech32"), w_multisplit.getnewaddress(address_type="bech32"))
934+
assert_equal(w_multipath.getrawchangeaddress(address_type="bech32"), w_multisplit.getrawchangeaddress(address_type="bech32"))
935+
899936

900937
if __name__ == '__main__':
901938
ImportMultiTest().main()

0 commit comments

Comments
 (0)