From d6c118ca3b76a6485bfa12acb445c2aba45ba7e5 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Fri, 21 Jun 2024 18:18:52 +0100 Subject: [PATCH] Generating a new wallet with mnemonic works nicely --- side-node/src/clients/btc_other_rpc.rs | 38 ++++++++++++++++++++++++++ side-node/src/clients/mod.rs | 1 + side-node/src/lib.rs | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 side-node/src/clients/btc_other_rpc.rs diff --git a/side-node/src/clients/btc_other_rpc.rs b/side-node/src/clients/btc_other_rpc.rs new file mode 100644 index 0000000..9f0c523 --- /dev/null +++ b/side-node/src/clients/btc_other_rpc.rs @@ -0,0 +1,38 @@ +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(()) +} diff --git a/side-node/src/clients/mod.rs b/side-node/src/clients/mod.rs index 3190f48..c2f3427 100644 --- a/side-node/src/clients/mod.rs +++ b/side-node/src/clients/mod.rs @@ -1,2 +1,3 @@ +pub mod btc_other_rpc; pub mod btc_rpc; pub mod websocket; diff --git a/side-node/src/lib.rs b/side-node/src/lib.rs index 25387b6..9397bbf 100644 --- a/side-node/src/lib.rs +++ b/side-node/src/lib.rs @@ -31,7 +31,7 @@ pub async fn run() { node.start().await; } Some(Commands::Btc {}) => { - let _ = clients::btc_rpc::run().await; + let _ = clients::btc_other_rpc::run().await; } None => println!("No command provided. Exiting. See --help for more information."), }