Merge pull request #29 from notmandatory/allow-restoring-extended-key-from-mnemonic
Allow restoring extended key from mnemonic
This commit is contained in:
commit
cda099a2f2
@ -44,8 +44,15 @@ val unconfirmedFirstThenByTimestampDescending =
|
||||
|
||||
@ExperimentalUnsignedTypes
|
||||
fun main(args: Array<String>) {
|
||||
val network = Network.TESTNET
|
||||
val mnemonicType = MnemonicType.WORDS12
|
||||
val password: String? = null
|
||||
println("Generating key...")
|
||||
println("${generateExtendedKey(Network.TESTNET, MnemonicType.WORDS12, null)}")
|
||||
val extendedKey = generateExtendedKey(network, mnemonicType, password)
|
||||
println("generated key: $extendedKey")
|
||||
println("Attempting restore extended key...")
|
||||
val restoredKey = restoreExtendedKey(network, extendedKey.mnemonic, password)
|
||||
println("restored key: $restoredKey")
|
||||
println("Configuring an in-memory wallet on electrum..")
|
||||
val descriptor = "wpkh(tprv8ZgxMBicQKsPeSitUfdxhsVaf4BXAASVAbHypn2jnPcjmQZvqZYkeqx7EHQTWvdubTSDa5ben7zHC7sUsx4d8tbTvWdUtHzR8uhHg2CW7MT/*)"
|
||||
val amount = 1000uL
|
||||
@ -55,7 +62,7 @@ fun main(args: Array<String>) {
|
||||
BlockchainConfig.Electrum(
|
||||
ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5u, null, 10u)
|
||||
)
|
||||
val wallet = OnlineWallet(descriptor, Network.TESTNET, db, client)
|
||||
val wallet = OnlineWallet(descriptor, network, db, client)
|
||||
wallet.sync(LogProgress(), null)
|
||||
println("Initial wallet balance: ${wallet.getBalance()}")
|
||||
println("Please send $amount satoshis to address: ${wallet.getNewAddress()}")
|
||||
|
@ -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]
|
||||
|
16
src/lib.rs
16
src/lib.rs
@ -288,5 +288,21 @@ fn generate_extended_key(
|
||||
})
|
||||
}
|
||||
|
||||
fn restore_extended_key(
|
||||
network: Network,
|
||||
mnemonic: String,
|
||||
password: Option<String>,
|
||||
) -> Result<ExtendedKeyInfo, Error> {
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user