@ledgerhq/coin-near
Version:
124 lines • 5.89 kB
JavaScript
;
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