@@ -9,6 +9,7 @@ use std::sync::Arc;
99
1010const EXTERNAL_DESCRIPTOR : & str = "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/1h/0/*)" ;
1111const INTERNAL_DESCRIPTOR : & str = "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/1h/1/*)" ;
12+ const TWO_PATH_DESCRIPTOR : & str = "wpkh([9a6a2580/84'/1'/0']tpubDDnGNapGEY6AZAdQbfRJgMg9fvz8pUBrLwvyvUqEgcUfgzM6zc2eVK4vY9x9L5FJWdX8WumXuLEDV5zDZnTfbn87vLe9XceCFwTu9so9Kks/<0;1>/*)" ;
1213const EXPECTED_FIRST_ADDRESS : & str = "tb1qhjys9wxlfykmte7ftryptx975uqgd6kcm6a7z4" ;
1314
1415fn external_descriptor ( ) -> Arc < Descriptor > {
@@ -19,6 +20,10 @@ fn internal_descriptor() -> Arc<Descriptor> {
1920 Arc :: new ( Descriptor :: new ( INTERNAL_DESCRIPTOR . to_string ( ) , Network :: Signet ) . unwrap ( ) )
2021}
2122
23+ fn two_path_descriptor ( ) -> Arc < Descriptor > {
24+ Arc :: new ( Descriptor :: new ( TWO_PATH_DESCRIPTOR . to_string ( ) , Network :: Signet ) . unwrap ( ) )
25+ }
26+
2227fn build_wallet ( ) -> Wallet {
2328 Wallet :: new (
2429 external_descriptor ( ) ,
@@ -58,26 +63,45 @@ fn test_reveal_next_address() {
5863
5964#[ test]
6065fn test_create_single_wallet ( ) {
61- let descriptor = external_descriptor ( ) ;
6266 let wallet = Wallet :: create_single (
63- descriptor . clone ( ) ,
67+ external_descriptor ( ) ,
6468 Network :: Signet ,
6569 Arc :: new ( Persister :: new_in_memory ( ) . unwrap ( ) ) ,
6670 25 ,
6771 )
6872 . unwrap ( ) ;
6973
70- assert_eq ! ( wallet. derivation_index( KeychainKind :: External ) , None ) ;
71-
7274 let address_info = wallet. reveal_next_address ( KeychainKind :: External ) ;
7375
7476 assert_eq ! ( address_info. index, 0 ) ;
7577 assert_eq ! ( address_info. keychain, KeychainKind :: External ) ;
7678 assert_eq ! ( address_info. address. to_string( ) , EXPECTED_FIRST_ADDRESS ) ;
77- assert_eq ! ( wallet. derivation_index( KeychainKind :: External ) , Some ( 0 ) ) ;
78- assert_eq ! ( wallet. next_derivation_index( KeychainKind :: External ) , 1 ) ;
79- assert_eq ! (
80- wallet. public_descriptor( KeychainKind :: External ) ,
81- descriptor. to_string( )
79+ }
80+
81+ #[ test]
82+ fn test_create_two_path_wallet ( ) {
83+ let wallet = Wallet :: create_from_two_path_descriptor (
84+ two_path_descriptor ( ) ,
85+ Network :: Signet ,
86+ Arc :: new ( Persister :: new_in_memory ( ) . unwrap ( ) ) ,
87+ 25 ,
88+ )
89+ . unwrap ( ) ;
90+
91+ assert_eq ! ( wallet. derivation_index( KeychainKind :: External ) , None ) ;
92+ assert_eq ! ( wallet. derivation_index( KeychainKind :: Internal ) , None ) ;
93+
94+ let external_address = wallet. reveal_next_address ( KeychainKind :: External ) ;
95+ let internal_address = wallet. reveal_next_address ( KeychainKind :: Internal ) ;
96+
97+ assert_eq ! ( external_address. index, 0 ) ;
98+ assert_eq ! ( external_address. keychain, KeychainKind :: External ) ;
99+ assert_eq ! ( internal_address. index, 0 ) ;
100+ assert_eq ! ( internal_address. keychain, KeychainKind :: Internal ) ;
101+ assert_ne ! (
102+ external_address. address. to_string( ) ,
103+ internal_address. address. to_string( )
82104 ) ;
105+ assert_eq ! ( wallet. derivation_index( KeychainKind :: External ) , Some ( 0 ) ) ;
106+ assert_eq ! ( wallet. derivation_index( KeychainKind :: Internal ) , Some ( 0 ) ) ;
83107}
0 commit comments