]> Untitled Git - bdk/commitdiff
Improve stdout output for wallet esplora/electrum examples
author志宇 <hello@evanlinjin.me>
Wed, 8 Mar 2023 02:28:56 +0000 (15:28 +1300)
committer志宇 <hello@evanlinjin.me>
Wed, 8 Mar 2023 02:28:56 +0000 (15:28 +1300)
example-crates/wallet_electrum/src/main.rs
example-crates/wallet_esplora/src/main.rs

index dabd66da9d0e94cee36f334b02aba143a7c4c5f6..20ae9d0f15ae6cb682d35ae6d2cf9e1a2537585f 100644 (file)
@@ -1,4 +1,4 @@
-use std::str::FromStr;
+use std::{io::Write, str::FromStr};
 
 use bdk::{
     bitcoin::{Address, Network},
@@ -35,12 +35,29 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
     let balance = wallet.get_balance();
     println!("Wallet balance before syncing: {} sats", balance.total());
 
-    println!("Syncing...");
+    print!("Syncing...");
     // Scanning the chain...
     let electrum_url = "ssl://electrum.blockstream.info:60002";
     let client = electrum_client::Client::new(electrum_url)?;
     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
         .scan(
             local_chain,
@@ -51,6 +68,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
             BATCH_SIZE,
         )?
         .into_confirmation_time_update(&client)?;
+    println!();
     let new_txs = client.batch_transaction_get(electrum_update.missing_full_txs(&wallet))?;
     let update = electrum_update.into_keychain_scan(new_txs, &wallet)?;
     wallet.apply_update(update)?;
index ee6a84f490783fc7c92faf7c101b16fd55733ab8..804139f83d6e5b88e7e612b86ac3a78b654300e1 100644 (file)
@@ -6,7 +6,7 @@ use bdk::{
 use bdk_esplora::esplora_client;
 use bdk_esplora::EsploraExt;
 use bdk_file_store::KeychainStore;
-use std::str::FromStr;
+use std::{io::Write, str::FromStr};
 
 const SEND_AMOUNT: u64 = 5000;
 const STOP_GAP: usize = 50;
@@ -31,12 +31,29 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
     let balance = wallet.get_balance();
     println!("Wallet balance before syncing: {} sats", balance.total());
 
-    println!("Syncing...");
+    print!("Syncing...");
     // Scanning the chain...
     let esplora_url = "https://mempool.space/testnet/api";
     let client = esplora_client::Builder::new(esplora_url).build_blocking()?;
-    let spks = wallet.spks_of_all_keychains();
     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(
         checkpoints,
         spks,
@@ -45,6 +62,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
         STOP_GAP,
         PARALLEL_REQUESTS,
     )?;
+    println!();
     wallet.apply_update(update)?;
     wallet.commit()?;