Skip to content
Merged

Dev #31

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ora-stack",
"version": "0.3.1",
"version": "0.3.2",
"private": true,
"packageManager": "pnpm@9.7.0",
"description": "",
Expand Down
2 changes: 1 addition & 1 deletion packages/orap/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@ora-io/orap",
"type": "module",
"version": "0.3.1",
"version": "0.3.2",
"packageManager": "pnpm@8.10.5",
"description": "",
"author": "Norman (nom4dv3), MuRong",
Expand Down
4 changes: 2 additions & 2 deletions packages/orap/src/flow/event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Context } from '../task'
import type { TaskFlowParams } from '../flow/task'
import { TaskFlow } from '../flow/task'
import { StoreManager } from '../store'
import type { EventSignalRegisterParams } from '../signal'
import type { CrosscheckOptions, EventSignalRegisterParams } from '../signal'
import { EventVerse } from '../verse/event'
import type { TaskVerse } from '../verse/task'
import type { Flow, HandleFn } from './interface'
Expand Down Expand Up @@ -33,7 +33,7 @@ export class EventFlow implements Flow {
return this._taskFlows
}

crosscheck(options?: Omit<AutoCrossCheckParam, 'address' | 'topics' | 'onMissingLog'>) {
crosscheck(options?: CrosscheckOptions) {
this.partialCrosscheckOptions = options
return this
}
Expand Down
20 changes: 18 additions & 2 deletions packages/orap/src/signal/event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ export interface EventSignalRegisterParams {
// esig?: string,
}

export interface CrosscheckParams {
/**
* Disable crosscheck
*/
disabled?: boolean
}

export type CrosscheckOptions = CrosscheckParams & Omit<AutoCrossCheckParam, 'address' | 'topics' | 'onMissingLog'>

export type EventSignalCallback = ethers.Listener

export class EventSignal implements Signal {
Expand All @@ -25,11 +34,12 @@ export class EventSignal implements Signal {

crosschecker?: AutoCrossChecker
crosscheckerOptions?: AutoCrossCheckParam
crosscheckerParams?: CrosscheckParams

constructor(
public params: EventSignalRegisterParams,
public callback: EventSignalCallback,
crosscheckOptions?: Omit<AutoCrossCheckParam, 'address' | 'topics' | 'onMissingLog'>,
crosscheckOptions?: CrosscheckOptions,
) {
this.contract = new ethers.Contract(
params.address,
Expand Down Expand Up @@ -69,7 +79,7 @@ export class EventSignal implements Signal {
return new ContractUnknownEventPayload(this.contract, this.subscribeCallback, this.params.eventName, log)
}

private _setCrosscheckOptions(options: Omit<AutoCrossCheckParam, 'address' | 'topics' | 'onMissingLog'>) {
private _setCrosscheckOptions(options: CrosscheckOptions) {
const {
pollingInterval = ONE_MINUTE_MS * 60,
ignoreLogs = [],
Expand All @@ -83,6 +93,9 @@ export class EventSignal implements Signal {
pollingInterval,
ignoreLogs,
}
this.crosscheckerParams = {
disabled: options?.disabled,
}
}

// TODO: should be wsProvider only?
Expand Down Expand Up @@ -114,6 +127,9 @@ export class EventSignal implements Signal {
}

async startCrossChecker(provider?: Providers) {
if (this.crosscheckerParams?.disabled)
return

if (!this.crosscheckerOptions)
return
if (!provider)
Expand Down
2 changes: 1 addition & 1 deletion packages/reku/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@ora-io/reku",
"type": "module",
"version": "0.3.2",
"version": "0.3.3",
"packageManager": "pnpm@8.10.5",
"description": "",
"author": "Norman (nom4dv3), MuRong",
Expand Down
3 changes: 3 additions & 0 deletions packages/reku/src/provider/contract.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { ContractAddress, Fn } from '@ora-io/utils'
import type { Interface, InterfaceAbi } from 'ethers'
import { ethers } from 'ethers'
import { debug } from '../debug'

export class RekuContractManager {
private _contract?: ethers.Contract
Expand All @@ -22,12 +23,14 @@ export class RekuContractManager {
if (!this._listeners.has(event)) {
this._listeners.set(event, listener)
this._contract?.on(event, listener)
debug('add listener %s %s', this.address, event)
}
}

removeListener(event: ethers.ContractEventName, listener: ethers.Listener) {
this._contract?.removeListener(event, listener)
this._listeners.delete(event)
debug('remove listener %s %s', this.address, event)
}

removeAllListeners() {
Expand Down
10 changes: 10 additions & 0 deletions packages/reku/src/provider/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,13 @@ export class RekuProviderManager {

const contract = new RekuContractManager(address, abi, this._provider)
this._contracts.set(address, contract)
debug('add contract %s', address)
return contract
}
else if (abi instanceof ethers.Contract) {
const contract = new RekuContractManager(address, abi.interface, this._provider)
this._contracts.set(address, contract)
debug('add contract %s', address)
return contract
}
else {
Expand All @@ -87,20 +89,23 @@ export class RekuProviderManager {
}

removeAllListeners() {
debug('remove all listeners')
this._provider?.removeAllListeners()
this._contracts.forEach((contract) => {
contract.removeAllListeners()
})
}

removeAllContract() {
debug('remove all contracts')
this._contracts.forEach((contract) => {
contract.removeAllListeners()
})
this._contracts.clear()
}

retryAllListeners() {
debug('retry all listeners')
this._contracts.forEach((contract) => {
contract.retryAllListeners()
})
Expand All @@ -110,21 +115,25 @@ export class RekuProviderManager {
if (!this._event)
this._event = new EventEmitter()

debug('on %s', event)
this._event?.on(event, listener)
}

once(event: RekuProviderManagerEvent, listener: (...args: any[]) => void) {
if (!this._event)
this._event = new EventEmitter()

debug('once %s', event)
this._event?.once(event, listener)
}

removeEvent(event: RekuProviderManagerEvent, listener: (...args: any[]) => void) {
debug('remove event %s', event)
this._event?.removeListener(event, listener)
}

removeAllEvents() {
debug('remove all events')
this._event?.removeAllListeners()
}

Expand Down Expand Up @@ -185,6 +194,7 @@ export class RekuProviderManager {
.catch((err) => {
this.reconnect()
this._event?.emit('error', err)
debug('heartbeat error: %s', err)
})
}, this._heartbeatInterval)
}
Expand Down
Loading