UNPKG

0xweb

Version:

Contract package manager and other web3 tools

48 lines (36 loc) 1.38 kB
import { Web3ClientFactory } from '@dequanto/clients/Web3ClientFactory'; import { JsonArrayStore } from '@dequanto/json/JsonArrayStore'; import { TAddress } from '@dequanto/models/TAddress'; import { TPlatform } from '@dequanto/models/TPlatform'; import { $platform } from '@dequanto/utils/$platform'; import memd from 'memd'; interface IBlockNumberCache { address: TAddress blockNumber: number } export class BlockNumberCache { store: JsonArrayStore<IBlockNumberCache>; constructor (public platform: TPlatform, public name: string) { this.store = new JsonArrayStore<IBlockNumberCache>({ path: `/cache/${ $platform.toPath(platform) }/blockNumber-${name}.json`, key: x => x.address }); } async getCached (address: TAddress) { let entry = await this.store.getSingle(address); return entry ?? { address: address, blockNumber: null, }; } async saveCached (cache: IBlockNumberCache) { await this.store.upsert(cache); } async updateCache (cache: IBlockNumberCache) { let client = Web3ClientFactory.get(this.platform); let toleranz = 5; let number = await client.getBlockNumberCached() - toleranz; cache.blockNumber = Math.max(number, cache.blockNumber); await this.store.upsert(cache); } }