@@ -184,10 +184,10 @@ async fn fetch_latest_blocks<S: Sleeper>(
184184 client : & esplora_client:: AsyncClient < S > ,
185185) -> Result < BTreeMap < u32 , BlockHash > , Error > {
186186 Ok ( client
187- . get_blocks ( None )
187+ . get_block_infos ( None )
188188 . await ?
189189 . into_iter ( )
190- . map ( |b| ( b. time . height , b. id ) )
190+ . map ( |b| ( b. height , b. id ) )
191191 . collect ( ) )
192192}
193193
@@ -314,8 +314,11 @@ where
314314 type TxsOfSpkIndex = ( u32 , Vec < esplora_client:: Tx > , HashSet < Txid > ) ;
315315
316316 let mut update = TxUpdate :: < ConfirmationBlockTime > :: default ( ) ;
317- let mut last_index = Option :: < u32 > :: None ;
318317 let mut last_active_index = Option :: < u32 > :: None ;
318+ // Use consecutive_unused so unused count drives stop gap.
319+ let mut consecutive_unused = 0usize ;
320+ // Treat stop_gap = 0 as 1 while preserving original semantics for other values.
321+ let gap_limit = stop_gap. max ( 1 ) ;
319322
320323 loop {
321324 let handles = keychain_spks
@@ -352,8 +355,10 @@ where
352355 }
353356
354357 for ( index, txs, evicted) in handles. try_collect :: < Vec < TxsOfSpkIndex > > ( ) . await ? {
355- last_index = Some ( index) ;
356- if !txs. is_empty ( ) {
358+ if txs. is_empty ( ) {
359+ consecutive_unused = consecutive_unused. saturating_add ( 1 ) ;
360+ } else {
361+ consecutive_unused = 0 ;
357362 last_active_index = Some ( index) ;
358363 }
359364 for tx in txs {
@@ -368,13 +373,7 @@ where
368373 . extend ( evicted. into_iter ( ) . map ( |txid| ( txid, start_time) ) ) ;
369374 }
370375
371- let last_index = last_index. expect ( "Must be set since handles wasn't empty." ) ;
372- let gap_limit_reached = if let Some ( i) = last_active_index {
373- last_index >= i. saturating_add ( stop_gap as u32 )
374- } else {
375- last_index + 1 >= stop_gap as u32
376- } ;
377- if gap_limit_reached {
376+ if consecutive_unused >= gap_limit {
378377 break ;
379378 }
380379 }
@@ -599,7 +598,10 @@ mod test {
599598 let res = chain_update ( & client, & latest_blocks, & cp, & anchors) . await ;
600599 use esplora_client:: Error ;
601600 assert ! (
602- matches!( * res. unwrap_err( ) , Error :: HeaderHashNotFound ( hash) if hash == genesis_hash) ,
601+ matches!(
602+ * res. unwrap_err( ) ,
603+ Error :: HeaderHashNotFound ( hash) if hash == genesis_hash
604+ ) ,
603605 "`chain_update` should error if it can't connect to the local CP" ,
604606 ) ;
605607
0 commit comments