1
1
import type { EventFragment , Log } from 'ethers'
2
2
import { ethers } from 'ethers'
3
- import { AutoCrossChecker , ONE_MINUTE_MS } from '@ora-io/rek'
3
+ import { AutoCrossChecker , ONE_MINUTE_MS , ProviderManager } from '@ora-io/rek'
4
4
import type { AutoCrossCheckParam } from '@ora-io/rek'
5
+ import type { Providers } from '../types'
5
6
import type { Signal } from './type'
6
7
7
8
export interface EventSignalRegisterParams {
@@ -14,7 +15,7 @@ export interface EventSignalRegisterParams {
14
15
export type EventSignalCallback = ethers . Listener
15
16
16
17
export class EventSignal implements Signal {
17
- provider ?: ethers . JsonRpcProvider | ethers . WebSocketProvider
18
+ provider ?: Providers
18
19
contract : ethers . Contract
19
20
esig : string
20
21
eventFragment : EventFragment
@@ -57,28 +58,36 @@ export class EventSignal implements Signal {
57
58
58
59
// TODO: how to integrate crosschecker
59
60
// TODO: should be wsProvider only?
60
- listen ( provider : ethers . WebSocketProvider , crosscheckProvider ?: ethers . JsonRpcProvider ) {
61
+ listen ( provider : Providers , crosscheckProvider ?: Providers ) {
61
62
this . provider = provider
62
63
63
64
// start event listener
64
- const listener = this . contract . connect ( provider )
65
- listener ?. on (
66
- this . params . eventName ,
67
- // TODO: calling this seems to be async, should we make it to sequential?
68
- this . subscribeCallback ,
69
- )
65
+ if ( provider instanceof ProviderManager ) {
66
+ provider . addContract ( this . params . address , this . contract )
67
+ provider . addListener ( this . params . address , this . params . eventName , this . subscribeCallback )
68
+ }
69
+ else {
70
+ const listener = this . contract . connect ( provider )
71
+ listener ?. on (
72
+ this . params . eventName ,
73
+ // TODO: calling this seems to be async, should we make it to sequential?
74
+ this . subscribeCallback ,
75
+ )
76
+ }
70
77
71
78
// start cross-checker if ever set
72
79
if ( this . crosscheckerOptions ) {
73
80
if ( ! crosscheckProvider )
74
81
throw new Error ( 'crosschecker set, please provide crosscheckProvider to listen function' )
75
- this . startCrossChecker ( crosscheckProvider )
82
+ const _crosscheckProvider = crosscheckProvider instanceof ProviderManager ? crosscheckProvider . provider : crosscheckProvider
83
+ if ( _crosscheckProvider )
84
+ this . startCrossChecker ( _crosscheckProvider )
76
85
}
77
86
78
87
return this
79
88
}
80
89
81
- async startCrossChecker ( provider : ethers . JsonRpcProvider ) {
90
+ async startCrossChecker ( provider : ethers . WebSocketProvider | ethers . JsonRpcProvider ) {
82
91
if ( ! this . crosscheckerOptions )
83
92
throw new Error ( 'no crosscheck set, can\'t start crosschecker' )
84
93
this . crosschecker = new AutoCrossChecker ( provider , this . crosscheckerOptions )
0 commit comments