@@ -80,8 +80,13 @@ class PreparedTopicFilter implements DeferredTopicFilter {
80
80
const resolver = canResolve ( runner ) ? runner : null ;
81
81
this . #filter = ( async function ( ) {
82
82
const resolvedArgs = await Promise . all ( fragment . inputs . map ( ( param , index ) => {
83
+ const arg = args [ index ] ;
84
+ if ( arg == null ) { return null ; }
85
+
83
86
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
+ }
85
90
return value ;
86
91
} ) ;
87
92
} ) ) ;
@@ -443,17 +448,21 @@ async function getSub(contract: BaseContract, operation: string, event: Contract
443
448
}
444
449
} ;
445
450
446
- let started = false ;
451
+ let starting : Array < Promise < any > > = [ ] ;
447
452
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 ) ) ;
451
455
} ;
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 ) ;
454
463
provider . off ( filter , listener ) ;
455
- started = false ;
456
464
} ;
465
+
457
466
sub = { tag, listeners : [ ] , start, stop } ;
458
467
subs . set ( tag , sub ) ;
459
468
}
0 commit comments