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 {
|
namespace bdk {
|
||||||
|
[Throws=BdkError]
|
||||||
|
ExtendedKeyInfo generate_extended_key(Network network, MnemonicType mnemonicType, string? password);
|
||||||
};
|
};
|
||||||
|
|
||||||
[Error]
|
[Error]
|
||||||
@ -146,3 +147,17 @@ interface PartiallySignedBitcoinTransaction {
|
|||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
constructor([ByRef] OnlineWallet wallet, string recipient, u64 amount);
|
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::util::psbt::PartiallySignedTransaction;
|
||||||
use bdk::bitcoin::{Address, Network};
|
use bdk::bitcoin::{Address, Network};
|
||||||
use bdk::blockchain::any::{AnyBlockchain, AnyBlockchainConfig};
|
use bdk::blockchain::any::{AnyBlockchain, AnyBlockchainConfig};
|
||||||
@ -7,6 +8,9 @@ use bdk::blockchain::{
|
|||||||
};
|
};
|
||||||
use bdk::database::any::{AnyDatabase, SledDbConfiguration};
|
use bdk::database::any::{AnyDatabase, SledDbConfiguration};
|
||||||
use bdk::database::{AnyDatabaseConfig, ConfigurableDatabase};
|
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::wallet::AddressIndex;
|
||||||
use bdk::{ConfirmationTime, Error, SignOptions, Wallet};
|
use bdk::{ConfirmationTime, Error, SignOptions, Wallet};
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
@ -260,5 +264,29 @@ impl WalletHolder<AnyBlockchain> for OnlineWallet {
|
|||||||
|
|
||||||
impl OfflineWalletOperations<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!(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