UNPKG

@broxus/js-core

Version:

MobX-based JavaScript Core library

47 lines (46 loc) 2.43 kB
import { debug, groupCollapsed, groupEnd, sliceString } from '@broxus/js-utils'; import { baseLabelStyle, inheritTextStyle, successTextStyle } from '../console'; import { getScanLink } from '../utils/get-scan-link'; import { resolveTvmAddress } from '../utils/resolve-tvm-address'; const cache = new Map(); const ttl = 10 * 1000; export async function getFullContractState(connection, address, options) { const addr = address.toString().toLowerCase(); try { const cached = cache.get(addr); if (cached && !options?.force) { const _ttl = options?.ttl ?? ttl; const { state, timestamp } = cached; if (Date.now() - timestamp < _ttl && state) { if (process.env.NODE_ENV !== 'production') { connection.getProviderState().then(providerState => { groupCollapsed(`%cjRPC%c Full contract state %c${sliceString(addr.toString())}%c retrieved from cache`, baseLabelStyle, inheritTextStyle, successTextStyle, inheritTextStyle); debug(`Address: %c${sliceString(addr.toString())}%c ${getScanLink(addr.toString(), providerState.networkId.toString())}`, successTextStyle, inheritTextStyle); debug(`Last updated at: %c${new Date(timestamp).toLocaleString()}`, inheritTextStyle); groupEnd(); }).catch(() => undefined); } return await state; } } const state = connection.getFullContractState({ address: resolveTvmAddress(address) }) .then(r => r.state) .catch(e => { cache.delete(addr); throw e; }); if (process.env.NODE_ENV !== 'production') { connection.getProviderState().then(providerState => { groupCollapsed(`%cjRPC%c Request a full contract state %c${sliceString(addr.toString())}%c`, baseLabelStyle, inheritTextStyle, successTextStyle, inheritTextStyle); debug(`Address: %c${sliceString(addr.toString())}%c ${getScanLink(addr.toString(), providerState.networkId.toString())}`, successTextStyle, inheritTextStyle); groupEnd(); }).catch(() => undefined); } cache.set(addr, { state, timestamp: Date.now() }); return await state; } catch (e) { cache.delete(addr); return undefined; } }