@@ -80,8 +80,13 @@ class PreparedTopicFilter implements DeferredTopicFilter {
8080 const resolver = canResolve ( runner ) ? runner : null ;
8181 this . #filter = ( async function ( ) {
8282 const resolvedArgs = await Promise . all ( fragment . inputs . map ( ( param , index ) => {
83+ const arg = args [ index ] ;
84+ if ( arg == null ) { return null ; }
85+
8386 return param . walkAsync ( args [ index ] , ( type , value ) => {
84- if ( type === "address" ) { return resolveAddress ( value , resolver ) ; }
87+ if ( type === "address" ) {
88+ return resolveAddress ( value , resolver ) ;
89+ }
8590 return value ;
8691 } ) ;
8792 } ) ) ;
@@ -443,17 +448,21 @@ async function getSub(contract: BaseContract, operation: string, event: Contract
443448 }
444449 } ;
445450
446- let started = false ;
451+ let starting : Array < Promise < any > > = [ ] ;
447452 const start = ( ) => {
448- if ( started ) { return ; }
449- provider . on ( filter , listener ) ;
450- started = true ;
453+ if ( starting . length ) { return ; }
454+ starting . push ( provider . on ( filter , listener ) ) ;
451455 } ;
452- const stop = ( ) => {
453- if ( ! started ) { return ; }
456+
457+ const stop = async ( ) => {
458+ if ( starting . length == 0 ) { return ; }
459+
460+ let started = starting ;
461+ starting = [ ] ;
462+ await Promise . all ( started ) ;
454463 provider . off ( filter , listener ) ;
455- started = false ;
456464 } ;
465+
457466 sub = { tag, listeners : [ ] , start, stop } ;
458467 subs . set ( tag , sub ) ;
459468 }
0 commit comments