From: 志宇 Date: Fri, 2 Aug 2024 09:38:27 +0000 (+0000) Subject: fix: no premature collect X-Git-Tag: v1.0.0-beta.2~10^2~5 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/struct.EncoderStringWriter.html?a=commitdiff_plain;h=38f86fe780d698e81108677edd75b0f88176c12f;p=bdk fix: no premature collect --- diff --git a/crates/chain/src/spk_client.rs b/crates/chain/src/spk_client.rs index 21527372..3909d11f 100644 --- a/crates/chain/src/spk_client.rs +++ b/crates/chain/src/spk_client.rs @@ -110,14 +110,7 @@ impl SyncRequestBuilder<(K, u32 indexer: &crate::indexer::keychain_txout::KeychainTxOutIndex, spk_range: impl core::ops::RangeBounds, ) -> Self { - use crate::alloc::borrow::ToOwned; - use crate::alloc::vec::Vec; - self.spks_with_labels( - indexer - .revealed_spks(spk_range) - .map(|(i, spk)| (i, spk.to_owned())) - .collect::>(), - ) + self.spks_with_labels(indexer.revealed_spks(spk_range)) } /// Add [`Script`]s that are revealed by the `indexer` but currently unused. @@ -125,14 +118,7 @@ impl SyncRequestBuilder<(K, u32 self, indexer: &crate::indexer::keychain_txout::KeychainTxOutIndex, ) -> Self { - use crate::alloc::borrow::ToOwned; - use crate::alloc::vec::Vec; - self.spks_with_labels( - indexer - .unused_spks() - .map(|(i, spk)| (i, spk.to_owned())) - .collect::>(), - ) + self.spks_with_labels(indexer.unused_spks()) } } diff --git a/crates/electrum/src/bdk_electrum_client.rs b/crates/electrum/src/bdk_electrum_client.rs index 3584e8bb..1458e2bd 100644 --- a/crates/electrum/src/bdk_electrum_client.rs +++ b/crates/electrum/src/bdk_electrum_client.rs @@ -205,19 +205,16 @@ impl BdkElectrumClient { None => None, }; - let full_scan_request = FullScanRequest::builder() - .spks_for_keychain( - (), - request - .iter_spks() - .enumerate() - .map(|(i, spk)| (i as u32, spk)) - .collect::>(), - ) - .build(); - let mut graph_update = self - .full_scan(full_scan_request, usize::MAX, batch_size, false)? - .graph_update; + let mut graph_update = TxGraph::::default(); + self.populate_with_spks( + &mut graph_update, + request + .iter_spks() + .enumerate() + .map(|(i, spk)| (i as u32, spk)), + usize::MAX, + batch_size, + )?; self.populate_with_txids(&mut graph_update, request.iter_txids())?; self.populate_with_outpoints(&mut graph_update, request.iter_outpoints())?; diff --git a/example-crates/example_electrum/src/main.rs b/example-crates/example_electrum/src/main.rs index bcb0b3ed..7ef54f13 100644 --- a/example-crates/example_electrum/src/main.rs +++ b/example-crates/example_electrum/src/main.rs @@ -209,22 +209,11 @@ fn main() -> anyhow::Result<()> { }); if all_spks { - request = request.spks_with_labels( - graph - .index - .revealed_spks(..) - .map(|(index, spk)| (index, spk.to_owned())), - ); + request = request.spks_with_labels(graph.index.revealed_spks(..)); } if unused_spks { - request = request.spks_with_labels( - graph - .index - .unused_spks() - .map(|(index, spk)| (index, spk.to_owned())), - ); + request = request.spks_with_labels(graph.index.unused_spks()); } - if utxos { let init_outpoints = graph.index.outpoints(); request = request.outpoints( @@ -238,7 +227,6 @@ fn main() -> anyhow::Result<()> { .map(|(_, utxo)| utxo.outpoint), ); }; - if unconfirmed { request = request.txids( graph diff --git a/example-crates/example_esplora/src/main.rs b/example-crates/example_esplora/src/main.rs index 0ea99c77..7a28ee23 100644 --- a/example-crates/example_esplora/src/main.rs +++ b/example-crates/example_esplora/src/main.rs @@ -230,20 +230,10 @@ fn main() -> anyhow::Result<()> { let chain = chain.lock().unwrap(); if *all_spks { - request = request.spks_with_labels( - graph - .index - .revealed_spks(..) - .map(|(i, spk)| (i, spk.to_owned())), - ); + request = request.spks_with_labels(graph.index.revealed_spks(..)); } if unused_spks { - request = request.spks_with_labels( - graph - .index - .unused_spks() - .map(|(index, spk)| (index, spk.to_owned())), - ); + request = request.spks_with_labels(graph.index.unused_spks()); } if utxos { // We want to search for whether the UTXO is spent, and spent by which diff --git a/example-crates/wallet_electrum/src/main.rs b/example-crates/wallet_electrum/src/main.rs index cda1889d..e028b4be 100644 --- a/example-crates/wallet_electrum/src/main.rs +++ b/example-crates/wallet_electrum/src/main.rs @@ -57,10 +57,9 @@ fn main() -> Result<(), anyhow::Error> { let mut once = HashSet::::new(); move |k, spk_i, _| { if once.insert(k) { - print!("\nScanning keychain [{:?}]", k) - } else { - print!(" {:<3}", spk_i) + print!("\nScanning keychain [{:?}]", k); } + print!(" {:<3}", spk_i); stdout.flush().expect("must flush"); } });