From: Antoine Poinsot Date: Mon, 20 Nov 2023 09:34:10 +0000 (+0100) Subject: esplora: fix incorrect gap limit check in blocking client X-Git-Tag: v1.0.0-alpha.3~12^2~3 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/enum.FileStoreError.html?a=commitdiff_plain;h=18bd3296170e64aee6870cd96dde52a0078bbcb1;p=bdk esplora: fix incorrect gap limit check in blocking client The gap limit was checked such as if the last_index was not None but the last_active_index was, we'd consider having reached it. But the last_index is never None for this check. This effectively made it so the gap limit was always 1: if the first address isn't used last_active_index will be None and we'd return immediately. Fix this by avoiding error-prone Option comparisons and correctly checking we've reached the gap limit before breaking out of the loop. --- diff --git a/crates/esplora/src/blocking_ext.rs b/crates/esplora/src/blocking_ext.rs index 9c259d58..bde24f83 100644 --- a/crates/esplora/src/blocking_ext.rs +++ b/crates/esplora/src/blocking_ext.rs @@ -250,7 +250,13 @@ impl EsploraExt for esplora_client::BlockingClient { } } - if last_index > last_active_index.map(|i| i.saturating_add(stop_gap as u32)) { + let last_index = last_index.expect("Must be set since handles wasn't empty."); + let past_gap_limit = if let Some(i) = last_active_index { + last_index > i.saturating_add(stop_gap as u32) + } else { + last_index >= stop_gap as u32 + }; + if past_gap_limit { break; } }