UNPKG

@atomiqlabs/chain-evm

Version:

EVM specific base implementation

87 lines (86 loc) 4.78 kB
import { ChainEvents, ClaimEvent, EventListener, InitializeEvent, RefundEvent, SpvVaultClaimEvent, SpvVaultCloseEvent, SpvVaultDepositEvent, SpvVaultFrontEvent, SpvVaultOpenEvent } from "@atomiqlabs/base"; import { IClaimHandler } from "../swaps/handlers/claim/ClaimHandlers"; import { EVMSwapData } from "../swaps/EVMSwapData"; import { Block, JsonRpcApiProvider } from "ethers"; import { EVMSwapContract } from "../swaps/EVMSwapContract"; import { EVMSpvVaultContract } from "../spv_swap/EVMSpvVaultContract"; import { EVMChainInterface } from "../chain/EVMChainInterface"; import { TypedEventLog } from "../typechain/common"; import { EscrowManager } from "../swaps/EscrowManagerTypechain"; import { SpvVaultManager } from "../spv_swap/SpvVaultContractTypechain"; import { EVMTxTrace } from "../chain/modules/EVMTransactions"; export type EVMEventListenerState = { lastBlockNumber: number; lastEvent?: { blockHash: string; logIndex: number; }; }; /** * EVM on-chain event handler for front-end systems without access to fs, uses WS or long-polling to subscribe, might lose * out on some events if the network is unreliable, front-end systems should take this into consideration and not * rely purely on events */ export declare class EVMChainEventsBrowser implements ChainEvents<EVMSwapData> { protected readonly listeners: EventListener<EVMSwapData>[]; protected readonly provider: JsonRpcApiProvider; protected readonly chainInterface: EVMChainInterface; protected readonly evmSwapContract: EVMSwapContract; protected readonly evmSpvVaultContract: EVMSpvVaultContract<any>; protected readonly logger: import("../../utils/Utils").LoggerType; protected stopped: boolean; protected pollIntervalSeconds: number; private timeout; constructor(chainInterface: EVMChainInterface, evmSwapContract: EVMSwapContract, evmSpvVaultContract: EVMSpvVaultContract<any>, pollIntervalSeconds?: number); findInitSwapData(call: EVMTxTrace, escrowHash: string, claimHandler: IClaimHandler<any, any>): EVMSwapData; /** * Returns async getter for fetching on-demand initialize event swap data * * @param event * @param claimHandler * @private * @returns {() => Promise<EVMSwapData>} getter to be passed to InitializeEvent constructor */ private getSwapDataGetter; protected parseInitializeEvent(event: TypedEventLog<EscrowManager["filters"]["Initialize"]>): InitializeEvent<EVMSwapData>; protected parseRefundEvent(event: TypedEventLog<EscrowManager["filters"]["Refund"]>): RefundEvent<EVMSwapData>; protected parseClaimEvent(event: TypedEventLog<EscrowManager["filters"]["Claim"]>): ClaimEvent<EVMSwapData>; protected parseSpvOpenEvent(event: TypedEventLog<SpvVaultManager["filters"]["Opened"]>): SpvVaultOpenEvent; protected parseSpvDepositEvent(event: TypedEventLog<SpvVaultManager["filters"]["Deposited"]>): SpvVaultDepositEvent; protected parseSpvFrontEvent(event: TypedEventLog<SpvVaultManager["filters"]["Fronted"]>): SpvVaultFrontEvent; protected parseSpvClaimEvent(event: TypedEventLog<SpvVaultManager["filters"]["Claimed"]>): SpvVaultClaimEvent; protected parseSpvCloseEvent(event: TypedEventLog<SpvVaultManager["filters"]["Closed"]>): SpvVaultCloseEvent; /** * Processes event as received from the chain, parses it & calls event listeners * * @param events * @param currentBlock * @protected */ protected processEvents(events: (TypedEventLog<EscrowManager["filters"]["Initialize" | "Refund" | "Claim"]> | TypedEventLog<SpvVaultManager["filters"]["Opened" | "Deposited" | "Fronted" | "Claimed" | "Closed"]>)[], currentBlock: Block): Promise<void>; protected checkEventsEcrowManager(currentBlock: Block, lastProcessedEvent?: { blockHash: string; logIndex: number; }, lastBlockNumber?: number): Promise<[{ blockHash: string; logIndex: number; }, number]>; protected checkEventsSpvVaults(currentBlock: Block, lastProcessedEvent?: { blockHash: string; logIndex: number; }, lastBlockNumber?: number): Promise<[{ blockHash: string; logIndex: number; }, number]>; protected checkEvents(lastState: EVMEventListenerState[]): Promise<EVMEventListenerState[]>; /** * Sets up event handlers listening for swap events over websocket * * @protected */ protected setupPoll(lastState?: EVMEventListenerState[], saveLatestProcessedBlockNumber?: (newState: EVMEventListenerState[]) => Promise<void>): Promise<void>; init(): Promise<void>; stop(): Promise<void>; registerListener(cbk: EventListener<EVMSwapData>): void; unregisterListener(cbk: EventListener<EVMSwapData>): boolean; }