Improve stdout output for wallet esplora/electrum examples

This commit is contained in:
志宇 2023-03-08 15:28:56 +13:00
parent eddd748870
commit 9d26121dbc
No known key found for this signature in database
GPG Key ID: F6345C9837C2BDE8
2 changed files with 42 additions and 6 deletions

View File

@ -1,4 +1,4 @@
use std::str::FromStr; use std::{io::Write, str::FromStr};
use bdk::{ use bdk::{
bitcoin::{Address, Network}, bitcoin::{Address, Network},
@ -35,12 +35,29 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let balance = wallet.get_balance(); let balance = wallet.get_balance();
println!("Wallet balance before syncing: {} sats", balance.total()); println!("Wallet balance before syncing: {} sats", balance.total());
println!("Syncing..."); print!("Syncing...");
// Scanning the chain... // Scanning the chain...
let electrum_url = "ssl://electrum.blockstream.info:60002"; let electrum_url = "ssl://electrum.blockstream.info:60002";
let client = electrum_client::Client::new(electrum_url)?; let client = electrum_client::Client::new(electrum_url)?;
let local_chain = wallet.checkpoints(); let local_chain = wallet.checkpoints();
let spks = wallet.spks_of_all_keychains(); let spks = wallet
.spks_of_all_keychains()
.into_iter()
.map(|(k, spks)| {
let mut first = true;
(
k,
spks.inspect(move |(spk_i, _)| {
if first {
first = false;
print!("\nScanning keychain [{:?}]:", k);
}
print!(" {}", spk_i);
let _ = std::io::stdout().flush();
}),
)
})
.collect();
let electrum_update = client let electrum_update = client
.scan( .scan(
local_chain, local_chain,
@ -51,6 +68,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
BATCH_SIZE, BATCH_SIZE,
)? )?
.into_confirmation_time_update(&client)?; .into_confirmation_time_update(&client)?;
println!();
let new_txs = client.batch_transaction_get(electrum_update.missing_full_txs(&wallet))?; let new_txs = client.batch_transaction_get(electrum_update.missing_full_txs(&wallet))?;
let update = electrum_update.into_keychain_scan(new_txs, &wallet)?; let update = electrum_update.into_keychain_scan(new_txs, &wallet)?;
wallet.apply_update(update)?; wallet.apply_update(update)?;

View File

@ -6,7 +6,7 @@ use bdk::{
use bdk_esplora::esplora_client; use bdk_esplora::esplora_client;
use bdk_esplora::EsploraExt; use bdk_esplora::EsploraExt;
use bdk_file_store::KeychainStore; use bdk_file_store::KeychainStore;
use std::str::FromStr; use std::{io::Write, str::FromStr};
const SEND_AMOUNT: u64 = 5000; const SEND_AMOUNT: u64 = 5000;
const STOP_GAP: usize = 50; const STOP_GAP: usize = 50;
@ -31,12 +31,29 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let balance = wallet.get_balance(); let balance = wallet.get_balance();
println!("Wallet balance before syncing: {} sats", balance.total()); println!("Wallet balance before syncing: {} sats", balance.total());
println!("Syncing..."); print!("Syncing...");
// Scanning the chain... // Scanning the chain...
let esplora_url = "https://mempool.space/testnet/api"; let esplora_url = "https://mempool.space/testnet/api";
let client = esplora_client::Builder::new(esplora_url).build_blocking()?; let client = esplora_client::Builder::new(esplora_url).build_blocking()?;
let spks = wallet.spks_of_all_keychains();
let checkpoints = wallet.checkpoints(); let checkpoints = wallet.checkpoints();
let spks = wallet
.spks_of_all_keychains()
.into_iter()
.map(|(k, spks)| {
let mut first = true;
(
k,
spks.inspect(move |(spk_i, _)| {
if first {
first = false;
print!("\nScanning keychain [{:?}]:", k);
}
print!(" {}", spk_i);
let _ = std::io::stdout().flush();
}),
)
})
.collect();
let update = client.scan( let update = client.scan(
checkpoints, checkpoints,
spks, spks,
@ -45,6 +62,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
STOP_GAP, STOP_GAP,
PARALLEL_REQUESTS, PARALLEL_REQUESTS,
)?; )?;
println!();
wallet.apply_update(update)?; wallet.apply_update(update)?;
wallet.commit()?; wallet.commit()?;