39 lines
1.2 KiB
Rust
39 lines
1.2 KiB
Rust
|
|
use bdk::{
|
||
|
|
bitcoin::Network,
|
||
|
|
database::MemoryDatabase,
|
||
|
|
keys::{
|
||
|
|
bip39::{Language, Mnemonic, WordCount},
|
||
|
|
DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey,
|
||
|
|
},
|
||
|
|
miniscript,
|
||
|
|
template::Bip84,
|
||
|
|
KeychainKind, Wallet,
|
||
|
|
};
|
||
|
|
|
||
|
|
pub async fn run() -> Result<(), anyhow::Error> {
|
||
|
|
// Generate a new mnemonic
|
||
|
|
let mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
|
||
|
|
Mnemonic::generate((WordCount::Words12, Language::English)).unwrap();
|
||
|
|
let mnemonic_words = mnemonic.to_string();
|
||
|
|
let mnemonic = Mnemonic::parse(&mnemonic_words).unwrap();
|
||
|
|
|
||
|
|
// Generate the extended key
|
||
|
|
let xkey: ExtendedKey = mnemonic.into_extended_key()?;
|
||
|
|
|
||
|
|
// Get private key from the extended key
|
||
|
|
let xprv = xkey.into_xprv(Network::Signet).unwrap();
|
||
|
|
|
||
|
|
// Create a BDK wallet using BIP 84 descriptor ("m/84h/1h/0h/0" and "m/84h/1h/0h/1")
|
||
|
|
let wallet = Wallet::new(
|
||
|
|
Bip84(xprv, KeychainKind::External),
|
||
|
|
Some(Bip84(xprv, KeychainKind::Internal)),
|
||
|
|
Network::Signet,
|
||
|
|
MemoryDatabase::default(),
|
||
|
|
)?;
|
||
|
|
|
||
|
|
let address = wallet.get_address(bdk::wallet::AddressIndex::New)?;
|
||
|
|
println!("Generated Address: {:?}", address);
|
||
|
|
|
||
|
|
Ok(())
|
||
|
|
}
|