@@ -36,12 +36,7 @@ use serde;
3636
3737use crate :: base58;
3838use crate :: crypto:: key:: { self , Keypair , PrivateKey , PublicKey } ;
39- use crate :: dip9:: {
40- DASH_BIP44_PATH_MAINNET , DASH_BIP44_PATH_TESTNET , IDENTITY_AUTHENTICATION_PATH_MAINNET ,
41- IDENTITY_AUTHENTICATION_PATH_TESTNET , IDENTITY_INVITATION_PATH_MAINNET ,
42- IDENTITY_INVITATION_PATH_TESTNET , IDENTITY_REGISTRATION_PATH_MAINNET ,
43- IDENTITY_REGISTRATION_PATH_TESTNET , IDENTITY_TOPUP_PATH_MAINNET , IDENTITY_TOPUP_PATH_TESTNET ,
44- } ;
39+ use crate :: dip9:: { COINJOIN_PATH_MAINNET , COINJOIN_PATH_TESTNET , DASH_BIP44_PATH_MAINNET , DASH_BIP44_PATH_TESTNET , IDENTITY_AUTHENTICATION_PATH_MAINNET , IDENTITY_AUTHENTICATION_PATH_TESTNET , IDENTITY_INVITATION_PATH_MAINNET , IDENTITY_INVITATION_PATH_TESTNET , IDENTITY_REGISTRATION_PATH_MAINNET , IDENTITY_REGISTRATION_PATH_TESTNET , IDENTITY_TOPUP_PATH_MAINNET , IDENTITY_TOPUP_PATH_TESTNET } ;
4540use crate :: hash_types:: XpubIdentifier ;
4641use crate :: internal_macros:: impl_bytes_newtype;
4742use crate :: io:: Write ;
@@ -494,6 +489,18 @@ impl DerivationPath {
494489 ] ) ;
495490 root_derivation_path
496491 }
492+ pub fn coinjoin_path (
493+ network : Network ,
494+ account : u32 ,
495+ ) -> Self {
496+ let mut root_derivation_path: DerivationPath = match network {
497+ Network :: Dash => COINJOIN_PATH_MAINNET ,
498+ _ => COINJOIN_PATH_TESTNET ,
499+ }
500+ . into ( ) ;
501+ root_derivation_path. 0 . extend ( & [ ChildNumber :: Hardened { index : account } ] ) ;
502+ root_derivation_path
503+ }
497504
498505 /// This might have been used in the past
499506 pub fn identity_registration_path_child_non_hardened ( network : Network , index : u32 ) -> Self {
@@ -2059,6 +2066,15 @@ mod tests {
20592066 assert_eq ! ( path. to_string( ) , "m/44'/1'/1'/0/42" ) ;
20602067 }
20612068
2069+ #[ test]
2070+ fn test_coinjoin_path ( ) {
2071+ let path = DerivationPath :: coinjoin_path ( Network :: Dash , 0 ) ;
2072+ assert_eq ! ( path. to_string( ) , "m/9'/5'/4'/0'" ) ;
2073+
2074+ let path = DerivationPath :: coinjoin_path ( Network :: Testnet , 1 ) ;
2075+ assert_eq ! ( path. to_string( ) , "m/9'/1'/4'/1'" ) ;
2076+ }
2077+
20622078 #[ test]
20632079 fn test_identity_registration_path ( ) {
20642080 let path = DerivationPath :: identity_registration_path ( Network :: Dash , 10 ) ;
0 commit comments