Allow generating extended keys
This commit is contained in:
parent
f34e59e289
commit
f1c2118b02
17
src/bdk.udl
17
src/bdk.udl
@ -1,5 +1,6 @@
|
||||
namespace bdk {
|
||||
|
||||
[Throws=BdkError]
|
||||
ExtendedKeyInfo generate_extended_key(Network network, MnemonicType mnemonicType, string? password);
|
||||
};
|
||||
|
||||
[Error]
|
||||
@ -146,3 +147,17 @@ interface PartiallySignedBitcoinTransaction {
|
||||
[Throws=BdkError]
|
||||
constructor([ByRef] OnlineWallet wallet, string recipient, u64 amount);
|
||||
};
|
||||
|
||||
dictionary ExtendedKeyInfo {
|
||||
string mnemonic;
|
||||
string xprv;
|
||||
string fingerprint;
|
||||
};
|
||||
|
||||
enum MnemonicType {
|
||||
"Words12",
|
||||
"Words15",
|
||||
"Words18",
|
||||
"Words21",
|
||||
"Words24",
|
||||
};
|
||||
|
28
src/lib.rs
28
src/lib.rs
@ -1,3 +1,4 @@
|
||||
use bdk::bitcoin::secp256k1::Secp256k1;
|
||||
use bdk::bitcoin::util::psbt::PartiallySignedTransaction;
|
||||
use bdk::bitcoin::{Address, Network};
|
||||
use bdk::blockchain::any::{AnyBlockchain, AnyBlockchainConfig};
|
||||
@ -7,6 +8,9 @@ use bdk::blockchain::{
|
||||
};
|
||||
use bdk::database::any::{AnyDatabase, SledDbConfiguration};
|
||||
use bdk::database::{AnyDatabaseConfig, ConfigurableDatabase};
|
||||
use bdk::keys::bip39::{Language, Mnemonic, MnemonicType};
|
||||
use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey};
|
||||
use bdk::miniscript::BareCtx;
|
||||
use bdk::wallet::AddressIndex;
|
||||
use bdk::{ConfirmationTime, Error, SignOptions, Wallet};
|
||||
use std::convert::TryFrom;
|
||||
@ -260,5 +264,29 @@ impl WalletHolder<AnyBlockchain> for OnlineWallet {
|
||||
|
||||
impl OfflineWalletOperations<AnyBlockchain> for OnlineWallet {}
|
||||
|
||||
pub struct ExtendedKeyInfo {
|
||||
mnemonic: String,
|
||||
xprv: String,
|
||||
fingerprint: String,
|
||||
}
|
||||
|
||||
fn generate_extended_key(
|
||||
network: Network,
|
||||
mnemonic_type: MnemonicType,
|
||||
password: Option<String>,
|
||||
) -> Result<ExtendedKeyInfo, Error> {
|
||||
let mnemonic: GeneratedKey<_, BareCtx> =
|
||||
Mnemonic::generate((mnemonic_type, Language::English)).unwrap();
|
||||
let mnemonic = mnemonic.into_key();
|
||||
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