import { AsyncOrSync, DeepReadonly } from 'ts-essentials'; import { Log, Logger } from './types'; import { BlockHeader } from 'web3-eth'; import { EventSubscriber } from './dex-helper/iblock-manager'; import { IDexHelper } from './dex-helper'; export type InitializeStateOptions = { state?: DeepReadonly; initCallback?: (state: DeepReadonly) => void; forceRegenerate?: boolean; }; export declare abstract class StatefulEventSubscriber implements EventSubscriber { readonly parentName: string; protected dexHelper: IDexHelper; protected logger: Logger; private masterPoolNeeded; mapKey: string; protected state: DeepReadonly | null; protected stateBlockNumber: number; protected stateHistory: { [blockNumber: number]: DeepReadonly; }; protected invalid: boolean; protected inactive: boolean; isTracking: () => boolean; isInactive: () => boolean; isInvalid: () => boolean; addressesSubscribed: string[]; cacheName: string; name: string; isInitialized: boolean; private _aggregatedLogMessages; private _lastPublishedTimeMs; constructor(parentName: string, _name: string, dexHelper: IDexHelper, logger: Logger, masterPoolNeeded?: boolean, mapKey?: string); getStateBlockNumber(): Readonly; initialize(blockNumber: number, options?: InitializeStateOptions): Promise; updatePoolState(blockNumber: number): Promise; protected getPoolIdentifierData(): void; protected abstract processLog(state: DeepReadonly, log: Readonly, blockHeader: Readonly): AsyncOrSync | null>; protected processBlockLogs(state: DeepReadonly, logs: Readonly[], blockHeader: Readonly): Promise | null>; abstract generateState(blockNumber?: number | 'latest'): AsyncOrSync>; restart(blockNumber: number): void; update(logs: Readonly[], blockHeaders: Readonly<{ [blockNumber: number]: Readonly; }>): Promise; rollback(blockNumber: number): void; inactivate(): void; invalidate(): void; getState(minBlockNumber: number): DeepReadonly | null; getStaleState(): DeepReadonly | null; _setState(state: DeepReadonly | null, blockNumber: number, reason?: string): void; _logBatchTypicalMessages(message: string, level: 'warn' | 'info', publishPeriod?: number): void; setState(state: DeepReadonly, blockNumber: number, reason?: string): void; }