UNPKG

@ledgerhq/coin-near

Version:
124 lines 5.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hydrate = exports.preload = exports.getPreloadStrategy = exports.getNearPreloadDataUpdates = exports.setNearPreloadData = exports.getCurrentNearPreloadData = void 0; const bignumber_js_1 = require("bignumber.js"); const rxjs_1 = require("rxjs"); const logs_1 = require("@ledgerhq/logs"); const api_1 = require("./api"); const constants_1 = require("./constants"); const errors_1 = require("./errors"); const PRELOAD_MAX_AGE = 30 * 60 * 1000; let currentPreloadedData = { storageCost: new bignumber_js_1.BigNumber(constants_1.FALLBACK_STORAGE_AMOUNT_PER_BYTE), gasPrice: new bignumber_js_1.BigNumber(0), createAccountCostSend: new bignumber_js_1.BigNumber(0), createAccountCostExecution: new bignumber_js_1.BigNumber(0), transferCostSend: new bignumber_js_1.BigNumber(0), transferCostExecution: new bignumber_js_1.BigNumber(0), addKeyCostSend: new bignumber_js_1.BigNumber(0), addKeyCostExecution: new bignumber_js_1.BigNumber(0), receiptCreationSend: new bignumber_js_1.BigNumber(0), receiptCreationExecution: new bignumber_js_1.BigNumber(0), validators: [], }; function fromHydratePreloadData(data) { const hydratedData = Object.assign({}, currentPreloadedData); if (typeof data === "object" && data) { if (data.storageCost) { hydratedData.storageCost = new bignumber_js_1.BigNumber(data.storageCost); } if (data.gasPrice) { hydratedData.gasPrice = new bignumber_js_1.BigNumber(data.gasPrice); } if (data.createAccountCostSend) { hydratedData.createAccountCostSend = new bignumber_js_1.BigNumber(data.createAccountCostSend); } if (data.createAccountCostExecution) { hydratedData.createAccountCostExecution = new bignumber_js_1.BigNumber(data.createAccountCostExecution); } if (data.transferCostSend) { hydratedData.transferCostSend = new bignumber_js_1.BigNumber(data.transferCostSend); } if (data.transferCostExecution) { hydratedData.transferCostExecution = new bignumber_js_1.BigNumber(data.transferCostExecution); } if (data.addKeyCostSend) { hydratedData.addKeyCostSend = new bignumber_js_1.BigNumber(data.addKeyCostSend); } if (data.addKeyCostExecution) { hydratedData.addKeyCostExecution = new bignumber_js_1.BigNumber(data.addKeyCostExecution); } if (data.receiptCreationSend) { hydratedData.receiptCreationSend = new bignumber_js_1.BigNumber(data.receiptCreationSend); } if (data.receiptCreationExecution) { hydratedData.receiptCreationExecution = new bignumber_js_1.BigNumber(data.receiptCreationExecution); } if (Array.isArray(data.validators) && data.validators.length) { hydratedData.validators = data.validators; } } return hydratedData; } const updates = new rxjs_1.Subject(); function getCurrentNearPreloadData() { return currentPreloadedData; } exports.getCurrentNearPreloadData = getCurrentNearPreloadData; function setNearPreloadData(data) { if (data === currentPreloadedData) return; currentPreloadedData = data; updates.next(data); } exports.setNearPreloadData = setNearPreloadData; function getNearPreloadDataUpdates() { return updates.asObservable(); } exports.getNearPreloadDataUpdates = getNearPreloadDataUpdates; const getPreloadStrategy = () => ({ preloadMaxAge: PRELOAD_MAX_AGE, }); exports.getPreloadStrategy = getPreloadStrategy; const preload = async () => { (0, logs_1.log)("near/preload", "preloading near data..."); const [protocolConfig, rawValidators, gasPrice] = await Promise.all([ (0, api_1.getProtocolConfig)(), (0, api_1.getValidators)(), (0, api_1.getGasPrice)(), ]); const validators = await Promise.all(rawValidators.map(async ({ account_id: validatorAddress, stake }) => { const commission = await (0, api_1.getCommission)(validatorAddress); return { validatorAddress, tokens: stake, commission, }; })); if (!protocolConfig) { throw new errors_1.NearProtocolConfigNotLoaded(); } const { storage_amount_per_byte, transaction_costs } = protocolConfig.runtime_config; const { action_creation_config, action_receipt_creation_config } = transaction_costs; return { storageCost: new bignumber_js_1.BigNumber(storage_amount_per_byte), gasPrice: new bignumber_js_1.BigNumber(gasPrice), createAccountCostSend: new bignumber_js_1.BigNumber(action_creation_config.create_account_cost.send_not_sir), createAccountCostExecution: new bignumber_js_1.BigNumber(action_creation_config.create_account_cost.execution), transferCostSend: new bignumber_js_1.BigNumber(action_creation_config.transfer_cost.send_not_sir), transferCostExecution: new bignumber_js_1.BigNumber(action_creation_config.transfer_cost.execution), addKeyCostSend: new bignumber_js_1.BigNumber(action_creation_config.add_key_cost.full_access_cost.send_not_sir), addKeyCostExecution: new bignumber_js_1.BigNumber(action_creation_config.add_key_cost.full_access_cost.execution), receiptCreationSend: new bignumber_js_1.BigNumber(action_receipt_creation_config.send_not_sir), receiptCreationExecution: new bignumber_js_1.BigNumber(action_receipt_creation_config.execution), validators, }; }; exports.preload = preload; const hydrate = (data) => { const hydrated = fromHydratePreloadData(data); (0, logs_1.log)("near/preload", `hydrated storageCost with ${hydrated.storageCost}`); setNearPreloadData(hydrated); }; exports.hydrate = hydrate; //# sourceMappingURL=preload.js.map