From 04eec7bf56508cda83053357c3851274b8fb7dfb Mon Sep 17 00:00:00 2001 From: Sudarsan Balaji Date: Thu, 21 Oct 2021 14:40:26 +0530 Subject: [PATCH] Allow restoring extended keys from mnemonic --- src/bdk.udl | 2 ++ src/lib.rs | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/bdk.udl b/src/bdk.udl index d183e43..e830577 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -1,6 +1,8 @@ namespace bdk { [Throws=BdkError] ExtendedKeyInfo generate_extended_key(Network network, MnemonicType mnemonicType, string? password); + [Throws=BdkError] + ExtendedKeyInfo restore_extended_key(Network network, string mnemonic, string? password); }; [Error] diff --git a/src/lib.rs b/src/lib.rs index 8d26c70..8364ecf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -288,5 +288,21 @@ fn generate_extended_key( }) } +fn restore_extended_key( + network: Network, + mnemonic: String, + password: Option, +) -> Result { + let mnemonic = Mnemonic::from_phrase(mnemonic.as_ref(), Language::English).unwrap(); + let xkey: ExtendedKey = (mnemonic.clone(), password).into_extended_key()?; + let xprv = xkey.into_xprv(network).unwrap(); + let fingerprint = xprv.fingerprint(&Secp256k1::new()); + Ok(ExtendedKeyInfo { + mnemonic: mnemonic.to_string(), + xprv: xprv.to_string(), + fingerprint: fingerprint.to_string(), + }) +} + uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send); uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);