]> Untitled Git - bdk/commitdiff
esplora: fix incorrect gap limit check in blocking client
authorAntoine Poinsot <darosior@protonmail.com>
Mon, 20 Nov 2023 09:34:10 +0000 (10:34 +0100)
committerAntoine Poinsot <darosior@protonmail.com>
Fri, 24 Nov 2023 11:21:12 +0000 (12:21 +0100)
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.

crates/esplora/src/blocking_ext.rs

index 9c259d5835d7c05636be0237c27dafd542168b14..bde24f832bfdd4f5456fb6c26585bc1906f2e26c 100644 (file)
@@ -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;
                 }
             }