You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(wallet): add multipath descriptor support for two-path descriptors
- Add create_from_two_path_descriptor() method to create wallets from BIP 389 multipath descriptors
- Support descriptors with exactly 2 paths (receive/change) using <0;1> syntax
- Update MultiPath error to clarify requirement for exactly 2 paths
- Add helper function make_two_path_descriptor_to_extract() for parsing two-path descriptors
- Add comprehensive tests for two-path wallet creation and validation
let descriptor = "wsh(multi(2,tpubD6NzVbkrYhZ4XHndKkuB8FifXm8r5FQHwrN6oZuWCz13qb93rtgKvD4PQsqC4HP4yhV3tA2fqr2RbY5mNXfM7RxXUoeABoDtsFUq2zJq6YK/0/*,tpubD6NzVbkrYhZ4XHndKkuB8FifXm8r5FQHwrN6oZuWCz13qb93rtgKvD4PQsqC4HP4yhV3tA2fqr2RbY5mNXfM7RxXUoeABoDtsFUq2zJq6YK/0/*))";
let two_path_descriptor = "wpkh([9a6a2580/84'/1'/0']tpubDDnGNapGEY6AZAdQbfRJgMg9fvz8pUBrLwvyvUqEgcUfgzM6zc2eVK4vY9x9L5FJWdX8WumXuLEDV5zDZnTfbn87vLe9XceCFwTu9so9Kks/<0;1>/*)";
2811
+
2812
+
// Test successful creation of a two-path wallet
2813
+
let params = Wallet::create_from_two_path_descriptor(two_path_descriptor);
2814
+
let wallet = params.network(Network::Testnet).create_wallet_no_persist();
2815
+
assert!(wallet.is_ok());
2816
+
2817
+
let wallet = wallet.unwrap();
2818
+
2819
+
// Verify that the wallet has both external and internal keychains
2820
+
let keychains:Vec<_> = wallet.keychains().collect();
2821
+
assert_eq!(keychains.len(),2);
2822
+
2823
+
// Verify that the descriptors are different (receive vs change)
let single_path_descriptor = "wpkh([9a6a2580/84'/1'/0']tpubDDnGNapGEY6AZAdQbfRJgMg9fvz8pUBrLwvyvUqEgcUfgzM6zc2eVK4vY9x9L5FJWdX8WumXuLEDV5zDZnTfbn87vLe9XceCFwTu9so9Kks/0/*)";
2846
+
let params = Wallet::create_from_two_path_descriptor(single_path_descriptor);
2847
+
let wallet = params.network(Network::Testnet).create_wallet_no_persist();
let three_path_descriptor = "wpkh([9a6a2580/84'/1'/0']tpubDDnGNapGEY6AZAdQbfRJgMg9fvz8pUBrLwvyvUqEgcUfgzM6zc2eVK4vY9x9L5FJWdX8WumXuLEDV5zDZnTfbn87vLe9XceCFwTu9so9Kks/<0;1;2>/*)";
2852
+
let params = Wallet::create_from_two_path_descriptor(three_path_descriptor);
2853
+
let wallet = params.network(Network::Testnet).create_wallet_no_persist();
0 commit comments