Splitting key load / wallet creation so we can use keys in esplora client

This commit is contained in:
Dave Hrycyszyn
2024-06-24 17:20:52 +01:00
parent 5c03a77e56
commit 117915bded
4 changed files with 51 additions and 24 deletions

View File

@@ -1,8 +1,10 @@
use crate::{keys, utils};
use bdk::bitcoin::bip32::ExtendedPrivKey;
use bdk::bitcoin::psbt::PartiallySignedTransaction;
use bdk::blockchain::Blockchain;
use bdk::bitcoin::Network;
use bdk::database::MemoryDatabase;
use bdk::template::Bip84;
use bdk::wallet::AddressIndex::{self, New};
use bdk::wallet::AddressInfo;
use bdk::{blockchain::ElectrumBlockchain, electrum_client, SyncOptions};
@@ -11,8 +13,11 @@ use bdk::{FeeRate, SignOptions, TransactionDetails, Wallet};
pub async fn run() -> Result<(), anyhow::Error> {
let dave = utils::home(&"dave".to_string());
let sammy = utils::home(&"sammy".to_string());
let dave_wallet = keys::bitcoin::load_from_file(&dave).unwrap();
let sammy_wallet = keys::bitcoin::load_from_file(&sammy).unwrap();
let dave_keys = keys::bitcoin::load_from_file(&dave).unwrap();
let sammy_keys = keys::bitcoin::load_from_file(&sammy).unwrap();
let dave_wallet = create_wallet(dave_keys)?;
let sammy_wallet = create_wallet(sammy_keys)?;
let dave_address = dave_wallet.get_address(AddressIndex::Peek(0))?.to_string();
let sammy_address = sammy_wallet.get_address(AddressIndex::Peek(0))?.to_string();
@@ -36,14 +41,30 @@ pub async fn run() -> Result<(), anyhow::Error> {
println!("About to sign the transaction: {:?}", details);
dave_wallet.sign(&mut psbt, SignOptions::default())?;
let signed_tx = psbt.extract_tx();
let _signed_tx = psbt.extract_tx();
println!("Broadcasting...");
blockchain.broadcast(&signed_tx).expect("broadcast error");
println!("Transaction ID: {:?}", signed_tx.txid());
// println!("Broadcasting...");
// blockchain.broadcast(&signed_tx).expect("broadcast error");
// println!("Transaction ID: {:?}", signed_tx.txid());
Ok(())
}
/// Create a BDK wallet using BIP 84 descriptor ("m/84h/1h/0h/0" and "m/84h/1h/0h/1")
pub fn create_wallet(
keys: (Bip84<ExtendedPrivKey>, Option<Bip84<ExtendedPrivKey>>),
) -> anyhow::Result<Wallet<MemoryDatabase>> {
let (external_descriptor, internal_descriptor) = keys;
let wallet = Wallet::new(
external_descriptor,
internal_descriptor,
Network::Testnet,
MemoryDatabase::default(),
)?;
Ok(wallet)
}
fn display_balance(wallet: &Wallet<MemoryDatabase>) {
println!(
"Wallet balance for {} after syncing: {:?} sats on network {}",