@@ -63,19 +63,27 @@ pub fn derive_key_pair_from_mnemonic(mnemonic: &str, account: u32, index: u32) -
6363 . derive ( ed25519_bip32:: DerivationScheme :: V2 , 0 )
6464 . derive ( ed25519_bip32:: DerivationScheme :: V2 , index)
6565 . extended_secret_key ( ) ;
66+ // stake key 1852'/1815'/<account>'/2/<index>
67+ let stake_xprv = & xprv
68+ . derive ( ed25519_bip32:: DerivationScheme :: V2 , harden_index ( 1852 ) )
69+ . derive ( ed25519_bip32:: DerivationScheme :: V2 , harden_index ( 1815 ) )
70+ . derive ( ed25519_bip32:: DerivationScheme :: V2 , harden_index ( account) )
71+ . derive ( ed25519_bip32:: DerivationScheme :: V2 , 2 )
72+ . derive ( ed25519_bip32:: DerivationScheme :: V2 , index)
73+ . extended_secret_key ( ) ;
6674 unsafe {
67- let sk = SecretKeyExtended :: from_bytes_unchecked ( * pay_xprv) ;
68- let vk = sk. public_key ( ) ;
75+ let pay_priv = SecretKeyExtended :: from_bytes_unchecked ( * pay_xprv) ;
76+ let pay_pub = pay_priv. public_key ( ) ;
77+ let stake_pub = SecretKeyExtended :: from_bytes_unchecked ( * stake_xprv) . public_key ( ) ;
6978
70- // Cardano (Shelley) address derivation
7179 let addr = ShelleyAddress :: new (
72- Network :: Mainnet , // Assuming Mainnet environment
73- ShelleyPaymentPart :: key_hash ( vk . compute_hash ( ) ) ,
74- ShelleyDelegationPart :: Null
80+ Network :: Mainnet ,
81+ ShelleyPaymentPart :: key_hash ( pay_pub . compute_hash ( ) ) ,
82+ ShelleyDelegationPart :: key_hash ( stake_pub . compute_hash ( ) )
7583 ) ;
76- let sk_flex: FlexibleSecretKey = FlexibleSecretKey :: Extended ( sk ) ;
84+ let sk_flex: FlexibleSecretKey = FlexibleSecretKey :: Extended ( pay_priv ) ;
7785
78- ( sk_flex, vk , addr)
86+ ( sk_flex, pay_pub , addr)
7987 }
8088
8189}
@@ -213,4 +221,4 @@ pub fn cip8_sign(kp: &KeyPairAndAddress, message: &str) -> (String, String) {
213221 let cose_sign1_cbor = pallas:: codec:: minicbor:: to_vec ( & cose_struct) . unwrap ( ) ;
214222
215223 ( hex:: encode ( & cose_sign1_cbor) . to_string ( ) , hex:: encode ( pubkey) . to_string ( ) )
216- }
224+ }
0 commit comments