@atomiqlabs/chain-starknet
Version:
Starknet specific base implementation
217 lines (216 loc) • 5.61 kB
TypeScript
import { ChainEvents, EventListener } from "@atomiqlabs/base";
import { StarknetSwapData } from "../swaps/StarknetSwapData";
import { StarknetSwapContract } from "../swaps/StarknetSwapContract";
import { Provider, SubscriptionStarknetEventsEvent, WebSocketChannel } from "starknet";
import { StarknetSpvVaultContract } from "../spv_swap/StarknetSpvVaultContract";
import { StarknetChainInterface } from "../chain/StarknetChainInterface";
/**
* Current state of the starknet event listener, contains the last processed
* block number and transaction hash of the last processed event
*
* @category Events
*/
export type StarknetEventListenerState = {
/**
* Block number of the last processed event
*/
lastBlockNumber: number;
/**
* Transaction hash of the last processed event
*/
lastTxHash?: string;
};
/**
* Starknet 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
*
* @category Events
*/
export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetSwapData, StarknetEventListenerState[]> {
private eventsProcessing;
private processedEvents;
/**
* @internal
*/
protected readonly Chain: StarknetChainInterface;
/**
* @internal
*/
protected readonly listeners: EventListener<StarknetSwapData>[];
/**
* @internal
*/
protected readonly wsChannel?: WebSocketChannel;
/**
* @internal
*/
protected readonly provider: Provider;
/**
* @internal
*/
protected readonly starknetSwapContract: StarknetSwapContract;
/**
* @internal
*/
protected readonly starknetSpvVaultContract: StarknetSpvVaultContract;
/**
* @internal
*/
protected readonly logger: import("../../utils/Utils").LoggerType;
/**
* @internal
*/
protected escrowContractSubscription?: SubscriptionStarknetEventsEvent;
/**
* @internal
*/
protected spvVaultContractSubscription?: SubscriptionStarknetEventsEvent;
/**
* @internal
*/
protected stopped: boolean;
/**
* @internal
*/
protected pollIntervalSeconds: number;
private timeout;
constructor(chainInterface: StarknetChainInterface, starknetSwapContract: StarknetSwapContract, starknetSpvVaultContract: StarknetSpvVaultContract, pollIntervalSeconds?: number);
/**
*
* @param event
* @private
*/
private getEventFingerprint;
/**
*
* @param event
* @private
*/
private addProcessedEvent;
/**
*
* @param eventOrFingerprint
* @private
*/
private isEventProcessed;
/**
* Returns async getter for fetching on-demand initialize event swap data
*
* @param event
* @param claimHandler
* @private
* @returns {() => Promise<StarknetSwapData>} getter to be passed to InitializeEvent constructor
*/
private getSwapDataGetter;
/**
*
* @param event
* @private
*/
private parseInitializeEvent;
/**
*
* @param event
* @private
*/
private parseRefundEvent;
/**
*
* @param event
* @private
*/
private parseClaimEvent;
/**
*
* @param event
* @private
*/
private parseSpvOpenEvent;
/**
*
* @param event
* @private
*/
private parseSpvDepositEvent;
/**
*
* @param event
* @private
*/
private parseSpvFrontEvent;
/**
*
* @param event
* @private
*/
private parseSpvClaimEvent;
/**
*
* @param event
* @private
*/
private parseSpvCloseEvent;
/**
* Processes event as received from the chain, parses it & calls event listeners
*
* @param events
* @param currentBlockNumber
* @param currentBlockTimestamp
* @private
*/
private processEvents;
/**
*
* @param currentBlock
* @param lastTxHash
* @param lastBlockNumber
* @private
*/
private checkEventsEcrowManager;
private checkEventsSpvVaults;
/**
* @inheritDoc
*/
poll(lastState?: StarknetEventListenerState[]): Promise<StarknetEventListenerState[]>;
/**
* Sets up event handlers listening for swap events over websocket
*
* @internal
*/
protected setupPoll(lastState?: StarknetEventListenerState[], saveLatestProcessedBlockNumber?: (newState: StarknetEventListenerState[]) => Promise<void>): Promise<void>;
/**
* @internal
*/
protected wsStarted: boolean;
/**
*
* @private
*/
private subscribeWsEscrowEvents;
/**
*
* @private
*/
private subscribeWsSpvVaultEvents;
/**
* @internal
*/
protected setupWebsocket(): Promise<void>;
/**
* @inheritDoc
*/
init(noAutomaticPoll?: boolean): Promise<void>;
/**
* Stops all event subscriptions and timers
*/
stop(): Promise<void>;
/**
* @inheritDoc
*/
registerListener(cbk: EventListener<StarknetSwapData>): void;
/**
* @inheritDoc
*/
unregisterListener(cbk: EventListener<StarknetSwapData>): boolean;
}