Skip to content

Commit 2d7fb6f

Browse files
committed
feat: update logging of electrum examples
* Syncing with `example_electrum` now shows progress as a percentage. * Flush stdout more aggressively.
1 parent 775bbdd commit 2d7fb6f

File tree

2 files changed

+46
-13
lines changed

2 files changed

+46
-13
lines changed

example-crates/example_electrum/src/main.rs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,11 @@ fn main() -> anyhow::Result<()> {
172172
let mut once = BTreeSet::new();
173173
move |k, spk_i, _| {
174174
if once.insert(k) {
175-
eprint!("\nScanning {}: ", k);
175+
eprint!("\nScanning {}: {} ", k, spk_i);
176176
} else {
177177
eprint!("{} ", spk_i);
178178
}
179-
let _ = io::stdout().flush();
179+
io::stdout().flush().expect("must flush");
180180
}
181181
})
182182
};
@@ -221,7 +221,7 @@ fn main() -> anyhow::Result<()> {
221221
.map(|(k, i, spk)| (k.to_owned(), i, spk.to_owned()))
222222
.collect::<Vec<_>>();
223223
request = request.chain_spks(all_spks.into_iter().map(|(k, spk_i, spk)| {
224-
eprintln!("scanning {}: {}", k, spk_i);
224+
eprint!("Scanning {}: {}", k, spk_i);
225225
spk
226226
}));
227227
}
@@ -233,7 +233,7 @@ fn main() -> anyhow::Result<()> {
233233
.collect::<Vec<_>>();
234234
request =
235235
request.chain_spks(unused_spks.into_iter().map(move |(k, spk_i, spk)| {
236-
eprintln!(
236+
eprint!(
237237
"Checking if address {} {}:{} has been used",
238238
Address::from_script(&spk, args.network).unwrap(),
239239
k,
@@ -252,7 +252,7 @@ fn main() -> anyhow::Result<()> {
252252
.map(|(_, utxo)| utxo)
253253
.collect::<Vec<_>>();
254254
request = request.chain_outpoints(utxos.into_iter().map(|utxo| {
255-
eprintln!(
255+
eprint!(
256256
"Checking if outpoint {} (value: {}) has been spent",
257257
utxo.outpoint, utxo.txout.value
258258
);
@@ -271,10 +271,36 @@ fn main() -> anyhow::Result<()> {
271271
request = request.chain_txids(
272272
unconfirmed_txids
273273
.into_iter()
274-
.inspect(|txid| eprintln!("Checking if {} is confirmed yet", txid)),
274+
.inspect(|txid| eprint!("Checking if {} is confirmed yet", txid)),
275275
);
276276
}
277277

278+
let total_spks = request.spks.len();
279+
let total_txids = request.txids.len();
280+
let total_ops = request.outpoints.len();
281+
request = request
282+
.inspect_spks({
283+
let mut visited = 0;
284+
move |_| {
285+
visited += 1;
286+
eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_spks as f32)
287+
}
288+
})
289+
.inspect_txids({
290+
let mut visited = 0;
291+
move |_| {
292+
visited += 1;
293+
eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_txids as f32)
294+
}
295+
})
296+
.inspect_outpoints({
297+
let mut visited = 0;
298+
move |_| {
299+
visited += 1;
300+
eprintln!(" [ {:>6.2}% ]", (visited * 100) as f32 / total_ops as f32)
301+
}
302+
});
303+
278304
let res = client
279305
.sync(request, scan_options.batch_size)
280306
.context("scanning the blockchain")?;

example-crates/wallet_electrum/src/main.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const SEND_AMOUNT: Amount = Amount::from_sat(5000);
33
const STOP_GAP: usize = 50;
44
const BATCH_SIZE: usize = 5;
55

6+
use std::io::Write;
67
use std::str::FromStr;
78

89
use bdk::bitcoin::{Address, Amount};
@@ -38,13 +39,19 @@ fn main() -> Result<(), anyhow::Error> {
3839
print!("Syncing...");
3940
let client = electrum_client::Client::new("ssl://electrum.blockstream.info:60002")?;
4041

41-
let request = wallet.start_full_scan().inspect_spks_for_all_keychains({
42-
let mut once = HashSet::<KeychainKind>::new();
43-
move |k, spk_i, _| match once.insert(k) {
44-
true => print!("\nScanning keychain [{:?}]", k),
45-
false => print!(" {:<3}", spk_i),
46-
}
47-
});
42+
let request = wallet
43+
.start_full_scan()
44+
.inspect_spks_for_all_keychains({
45+
let mut once = HashSet::<KeychainKind>::new();
46+
move |k, spk_i, _| {
47+
if once.insert(k) {
48+
print!("\nScanning keychain [{:?}]", k)
49+
} else {
50+
print!(" {:<3}", spk_i)
51+
}
52+
}
53+
})
54+
.inspect_spks_for_all_keychains(|_, _, _| std::io::stdout().flush().expect("must flush"));
4855

4956
let mut update = client
5057
.full_scan(request, STOP_GAP, BATCH_SIZE)?

0 commit comments

Comments
 (0)