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
|
@ExperimentalUnsignedTypes
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
|
val network = Network.TESTNET
|
||||||
|
val mnemonicType = MnemonicType.WORDS12
|
||||||
|
val password: String? = null
|
||||||
println("Generating key...")
|
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..")
|
println("Configuring an in-memory wallet on electrum..")
|
||||||
val descriptor = "wpkh(tprv8ZgxMBicQKsPeSitUfdxhsVaf4BXAASVAbHypn2jnPcjmQZvqZYkeqx7EHQTWvdubTSDa5ben7zHC7sUsx4d8tbTvWdUtHzR8uhHg2CW7MT/*)"
|
val descriptor = "wpkh(tprv8ZgxMBicQKsPeSitUfdxhsVaf4BXAASVAbHypn2jnPcjmQZvqZYkeqx7EHQTWvdubTSDa5ben7zHC7sUsx4d8tbTvWdUtHzR8uhHg2CW7MT/*)"
|
||||||
val amount = 1000uL
|
val amount = 1000uL
|
||||||
@ -55,7 +62,7 @@ fun main(args: Array<String>) {
|
|||||||
BlockchainConfig.Electrum(
|
BlockchainConfig.Electrum(
|
||||||
ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5u, null, 10u)
|
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)
|
wallet.sync(LogProgress(), null)
|
||||||
println("Initial wallet balance: ${wallet.getBalance()}")
|
println("Initial wallet balance: ${wallet.getBalance()}")
|
||||||
println("Please send $amount satoshis to address: ${wallet.getNewAddress()}")
|
println("Please send $amount satoshis to address: ${wallet.getNewAddress()}")
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
namespace bdk {
|
namespace bdk {
|
||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
ExtendedKeyInfo generate_extended_key(Network network, MnemonicType mnemonicType, string? password);
|
ExtendedKeyInfo generate_extended_key(Network network, MnemonicType mnemonicType, string? password);
|
||||||
|
[Throws=BdkError]
|
||||||
|
ExtendedKeyInfo restore_extended_key(Network network, string mnemonic, string? password);
|
||||||
};
|
};
|
||||||
|
|
||||||
[Error]
|
[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!(OfflineWallet: Sync, Send);
|
||||||
uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);
|
uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user