@@ -18,7 +18,8 @@ use bdk_chain::tx_graph::ChangeSet as BdkTxGraphChangeSet;
1818use bdk_chain:: ConfirmationBlockTime ;
1919use bdk_wallet:: ChangeSet as BdkWalletChangeSet ;
2020use bip39:: Mnemonic ;
21- use bitcoin:: bip32:: Xpriv ;
21+ use bitcoin:: bip32:: { ChildNumber , Xpriv } ;
22+ use bitcoin:: secp256k1:: Secp256k1 ;
2223use bitcoin:: Network ;
2324use lightning:: io:: Cursor ;
2425use lightning:: ln:: msgs:: DecodeError ;
@@ -83,24 +84,19 @@ pub fn generate_entropy_mnemonic(word_count: Option<WordCount>) -> Mnemonic {
8384pub fn derive_node_secret_from_mnemonic (
8485 mnemonic : String , passphrase : Option < String > ,
8586) -> Result < Vec < u8 > , Error > {
86- use bitcoin:: bip32:: ChildNumber ;
87- use bitcoin:: secp256k1:: Secp256k1 ;
88-
8987 let parsed_mnemonic = Mnemonic :: parse ( & mnemonic) . map_err ( |_| Error :: InvalidMnemonic ) ?;
9088 let seed = parsed_mnemonic. to_seed ( passphrase. as_deref ( ) . unwrap_or ( "" ) ) ;
9189
92- // First BIP32 derivation: 64-byte BIP39 seed → 32-byte master private key
93- let xpriv =
90+ let master_xpriv =
9491 Xpriv :: new_master ( Network :: Bitcoin , & seed) . map_err ( |_| Error :: InvalidMnemonic ) ?;
95- let ldk_seed: [ u8 ; 32 ] = xpriv. private_key . secret_bytes ( ) ;
96-
97- // Second BIP32 derivation: KeysManager treats the 32-byte key as a new seed
98- // and derives node_secret at path m/0'
99- let secp = Secp256k1 :: new ( ) ;
100- let keys_master =
101- Xpriv :: new_master ( Network :: Bitcoin , & ldk_seed) . map_err ( |_| Error :: InvalidMnemonic ) ?;
102- let node_secret_xpriv = keys_master
103- . derive_priv ( & secp, & [ ChildNumber :: from_hardened_idx ( 0 ) . unwrap ( ) ] )
92+
93+ let ldk_seed_bytes: [ u8 ; 32 ] = master_xpriv. private_key . secret_bytes ( ) ;
94+
95+ let keys_manager_master = Xpriv :: new_master ( Network :: Bitcoin , & ldk_seed_bytes)
96+ . map_err ( |_| Error :: InvalidMnemonic ) ?;
97+
98+ let node_secret_xpriv = keys_manager_master
99+ . derive_priv ( & Secp256k1 :: new ( ) , & [ ChildNumber :: from_hardened_idx ( 0 ) . unwrap ( ) ] )
104100 . map_err ( |_| Error :: InvalidMnemonic ) ?;
105101
106102 Ok ( node_secret_xpriv. private_key . secret_bytes ( ) . to_vec ( ) )
0 commit comments