Simplified bdk client

This commit is contained in:
Dave Hrycyszyn
2024-06-24 13:56:57 +01:00
parent 9e19500ab0
commit 462590b82f

View File

@@ -1,9 +1,5 @@
use std::io::Write;
use bdk::{bitcoin::Script, KeychainKind};
use bdk_esplora::esplora_client;
use crate::{keys, utils};
use bdk::{blockchain::ElectrumBlockchain, electrum_client, SyncOptions};
pub async fn run() -> Result<(), anyhow::Error> {
let dave = utils::home(&"dave".to_string());
@@ -13,64 +9,29 @@ pub async fn run() -> Result<(), anyhow::Error> {
let dave_wallet = keys::bitcoin::load_from_file(&dave).unwrap();
let sammy_wallet = keys::bitcoin::load_from_file(&sammy).unwrap();
let dave_address = dave_wallet.get_address(bdk::wallet::AddressIndex::New)?;
println!("Dave address: {:?}", dave_address);
// let dave_address = dave_wallet.get_address(bdk::wallet::AddressIndex::New)?;
// println!("Dave address: {:?}", dave_address);
let sammy_address = sammy_wallet.get_address(bdk::wallet::AddressIndex::New)?;
println!("Sammy address: {:?}", sammy_address);
// let sammy_address = sammy_wallet.get_address(bdk::wallet::AddressIndex::New)?;
// println!("Sammy address: {:?}", sammy_address);
print!("Syncing...");
let client = esplora_client::Builder::new("http://signet.bitcoindevkit.net").build_async()?;
let blockchain = ElectrumBlockchain::from(electrum_client::Client::new(
"ssl://electrum.blockstream.info:60002",
)?);
fn generate_inspect(kind: KeychainKind) -> impl FnMut(u32, &Script) + Send + Sync + 'static {
let mut once = Some(());
let mut stdout = std::io::stdout();
move |spk_i, _| {
match once.take() {
Some(_) => print!("\nScanning keychain [{:?}]", kind),
None => print!(" {:<3}", spk_i),
};
stdout.flush().expect("must flush");
}
}
// let dave_balance = dave_wallet.get_balance()?;
// println!("Wallet balance before syncing: {} sats", dave_balance);
// let request = dave_wallet
// .start_full_scan()
// .inspect_spks_for_all_keychains({
// let mut once = BTreeSet::<KeychainKind>::new();
// move |keychain, spk_i, _| {
// match once.insert(keychain) {
// true => print!("\nScanning keychain [{:?}]", keychain),
// false => print!(" {:<3}", spk_i),
// }
// std::io::stdout().flush().expect("must flush")
// }
// })
// .inspect_spks_for_keychain(
// KeychainKind::External,
// generate_inspect(KeychainKind::External),
// )
// .inspect_spks_for_keychain(
// KeychainKind::Internal,
// generate_inspect(KeychainKind::Internal),
// );
// let sammy_balance = sammy_wallet.get_balance()?;
// println!("Wallet balance before syncing: {} sats", sammy_balance);
// let mut update = client
// .full_scan(request, STOP_GAP, PARALLEL_REQUESTS)
// .await?;
// let now = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs();
// let _ = update.graph_update.update_last_seen_unconfirmed(now);
// wallet.apply_update(update)?;
// if let Some(changeset) = wallet.take_staged() {
// db.write(&changeset)?;
// }
let dave_balance = dave_wallet.get_balance()?;
println!("Wallet balance before syncing: {} sats", dave_balance);
let sammy_balance = sammy_wallet.get_balance()?;
println!("Wallet balance before syncing: {} sats", sammy_balance);
println!("Syncing...");
dave_wallet.sync(&blockchain, SyncOptions::default())?;
println!(
"Wallet balance for {} after syncing: {:?} sats",
dave_wallet.get_address(bdk::wallet::AddressIndex::LastUnused)?,
dave_wallet.get_balance()?
);
Ok(())
}