From: LLFourn Date: Tue, 2 Nov 2021 05:49:19 +0000 (+1100) Subject: Always get up to chunk_size heights to request headers for X-Git-Tag: v0.15.0~10^2~9 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/database/memory/enum.FileError.html?a=commitdiff_plain;h=aaad560a91872318890208c4b3d5cb73a63029a8;p=bdk Always get up to chunk_size heights to request headers for --- diff --git a/src/blockchain/electrum.rs b/src/blockchain/electrum.rs index ae16d1a7..3d316a75 100644 --- a/src/blockchain/electrum.rs +++ b/src/blockchain/electrum.rs @@ -112,15 +112,26 @@ impl Blockchain for ElectrumBlockchain { } Request::Conftime(conftimereq) => { - let needs_block_height = conftimereq - .request() - .filter_map(|txid| txid_to_height.get(txid).cloned()) - .filter(|height| block_times.get(height).is_none()) - .take(chunk_size) - .collect::>(); - - let new_block_headers = - self.client.batch_block_header(needs_block_height.clone())?; + // collect up to chunk_size heights to fetch from electrum + let needs_block_height = { + let mut needs_block_height_iter = conftimereq + .request() + .filter_map(|txid| txid_to_height.get(txid).cloned()) + .filter(|height| block_times.get(height).is_none()); + let mut needs_block_height = HashSet::new(); + + while needs_block_height.len() < chunk_size { + match needs_block_height_iter.next() { + Some(height) => needs_block_height.insert(height), + None => break, + }; + } + needs_block_height + }; + + let new_block_headers = self + .client + .batch_block_header(needs_block_height.iter().cloned())?; for (height, header) in needs_block_height.into_iter().zip(new_block_headers) { block_times.insert(height, header.time);