From aaad560a91872318890208c4b3d5cb73a63029a8 Mon Sep 17 00:00:00 2001 From: LLFourn Date: Tue, 2 Nov 2021 16:49:19 +1100 Subject: [PATCH] Always get up to chunk_size heights to request headers for --- src/blockchain/electrum.rs | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) 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::>(); + // 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(); - let new_block_headers = - self.client.batch_block_header(needs_block_height.clone())?; + 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);