@@ -14,6 +14,7 @@ import {
1414 merge ,
1515 filter ,
1616 startWith ,
17+ delay ,
1718} from "rxjs" ;
1819import { StorageAdapterBlock , StoreEventsLog , SyncFilter } from "./common" ;
1920import { watchLogs } from "./watchLogs" ;
@@ -66,12 +67,15 @@ export function createPreconfirmedBlockStream(opts: PreconfirmedBlockStreamOptio
6667
6768 let processedBlockLogs : { [ blockNumber : string ] : { [ logIndex : number ] : boolean } } = { } ;
6869 let preconfirmedLogsState : "initializing" | "initialized" | "waiting" = "waiting" ;
70+ let attempt = 0 ;
6971 const preconfirmedLogs$ = recreatePreconfirmedStream$ . pipe (
7072 tap ( ( ) => {
71- debug ( " initializing preconfirmed logs stream" ) ;
73+ debug ( ` initializing preconfirmed logs stream in ${ attempt * 500 } ms` ) ;
7274 preconfirmedLogsState = "initializing" ;
7375 processedBlockLogs = { } ;
7476 } ) ,
77+ delay ( attempt * 500 ) ,
78+ tap ( ( ) => attempt ++ ) ,
7579 switchMap ( ( ) =>
7680 watchLogs ( {
7781 ...opts ,
@@ -81,13 +85,15 @@ export function createPreconfirmedBlockStream(opts: PreconfirmedBlockStreamOptio
8185 catchError ( ( e ) => {
8286 debug ( "Error in preconfirmed logs stream, recreating" , e ) ;
8387 recreatePreconfirmedStream$ . next ( ) ;
84- return throwError ( ( ) => e ) ;
88+ return of ( null ) ;
8589 } ) ,
8690 ) ,
8791 ) ,
92+ filter ( ( block ) => block != null ) ,
8893 tap ( ( block ) => {
8994 debug ( "preconfirmed block" , block . blockNumber , "with" , block . logs . length , "logs" ) ;
9095 preconfirmedLogsState = "initialized" ;
96+ attempt = 0 ;
9197 restartBlockNumber = block . blockNumber ;
9298 const seenLogs = ( processedBlockLogs [ String ( block . blockNumber ) ] ??= { } ) ;
9399 block . logs . forEach ( ( log ) => {
0 commit comments