@atomiqlabs/chain-starknet
Version:
Starknet specific base implementation
68 lines (60 loc) • 2.31 kB
text/typescript
import {StarknetChainEventsBrowser} from "./StarknetChainEventsBrowser";
//@ts-ignore
import * as fs from "fs/promises";
import {StarknetSwapContract} from "../swaps/StarknetSwapContract";
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
import {StarknetSpvVaultContract} from "../spv_swap/StarknetSpvVaultContract";
const BLOCKHEIGHT_FILENAME = "/strk-blockheight.txt";
export class StarknetChainEvents extends StarknetChainEventsBrowser {
private readonly directory: string;
constructor(
directory: string,
chainInterface: StarknetChainInterface,
starknetSwapContract: StarknetSwapContract,
starknetSpvVaultContract: StarknetSpvVaultContract,
pollIntervalSeconds?: number
) {
super(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds);
this.directory = directory;
}
/**
* Retrieves last signature & slot from filesystem
*
* @private
*/
private async getLastEventData(): Promise<{blockNumber: number, txHashes: string[]}> {
try {
const txt: string = (await fs.readFile(this.directory+BLOCKHEIGHT_FILENAME)).toString();
const arr = txt.split(";");
if(arr.length<2) return {
blockNumber: parseInt(arr[0]),
txHashes: null
};
return {
blockNumber: parseInt(arr[0]),
txHashes: arr.slice(1)
};
} catch (e) {
return {
blockNumber: null,
txHashes: null
};
}
}
/**
* Saves last signature & slot to the filesystem
*
* @private
*/
private saveLastEventData(blockNumber: number, txHashes: string[]): Promise<void> {
return fs.writeFile(this.directory+BLOCKHEIGHT_FILENAME, blockNumber.toString()+";"+txHashes.join(";"));
}
async init(): Promise<void> {
const {blockNumber, txHashes} = await this.getLastEventData();
await this.setupPoll(
blockNumber,
txHashes,
(blockNumber: number, txHashes: string[]) => this.saveLastEventData(blockNumber, txHashes)
);
}
}