@broxus/js-core
Version:
MobX-based JavaScript Core library
49 lines (48 loc) • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFullContractState = getFullContractState;
const js_utils_1 = require("@broxus/js-utils");
const console_1 = require("../console");
const resolve_tvm_address_1 = require("../utils/resolve-tvm-address");
const cache = new Map();
const ttl = 10 * 1000;
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 => {
(0, js_utils_1.groupCollapsed)(`%cRPC%c Full contract state [%c${(0, js_utils_1.sliceAddress)(addr.toString())}%c] retrieved from cache`, console_1.baseLabelStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle);
(0, js_utils_1.debug)(`Address: %c${(0, js_utils_1.sliceAddress)(addr.toString())}%c ${(0, console_1.getScanLink)(addr.toString(), providerState.networkId.toString())}`, console_1.successTextStyle, console_1.inheritTextStyle);
(0, js_utils_1.debug)(`Last updated at: %c${new Date(timestamp).toLocaleString()}`, console_1.inheritTextStyle);
(0, js_utils_1.groupEnd)();
}).catch(() => undefined);
}
return await state;
}
}
const state = connection.getFullContractState({ address: (0, resolve_tvm_address_1.resolveTvmAddress)(address) })
.then(r => r.state)
.catch(e => {
cache.delete(addr);
throw e;
});
if (process.env.NODE_ENV !== 'production') {
connection.getProviderState().then(providerState => {
(0, js_utils_1.groupCollapsed)(`%cRPC%c Request a full contract state [%c${(0, js_utils_1.sliceAddress)(addr.toString())}%c]`, console_1.baseLabelStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle);
(0, js_utils_1.debug)(`Address: %c${(0, js_utils_1.sliceAddress)(addr.toString())}%c ${(0, console_1.getScanLink)(addr.toString(), providerState.networkId.toString())}`, console_1.successTextStyle, console_1.inheritTextStyle);
(0, js_utils_1.groupEnd)();
}).catch(() => undefined);
}
cache.set(addr, { state, timestamp: Date.now() });
return await state;
}
catch (e) {
cache.delete(addr);
return undefined;
}
}