@ledgerhq/coin-hedera
Version:
Ledger Hedera Coin integration
76 lines • 3.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPreloadStrategy = void 0;
exports.preload = preload;
exports.hydrate = hydrate;
const logs_1 = require("@ledgerhq/logs");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const utils_1 = require("./logic/utils");
const api_1 = require("./network/api");
const preload_data_1 = require("./preload-data");
const getPreloadStrategy = () => ({
preloadMaxAge: 15 * 60 * 1000, // 15 minutes
});
exports.getPreloadStrategy = getPreloadStrategy;
async function preload(currency) {
(0, logs_1.log)("hedera/preload", "preloading hedera data...");
const result = await api_1.apiClient.getNodes({ fetchAllPages: true });
const validators = result.nodes.map(mirrorNode => {
const minStake = new bignumber_js_1.default(mirrorNode.min_stake);
const maxStake = new bignumber_js_1.default(mirrorNode.max_stake);
const activeStake = new bignumber_js_1.default(mirrorNode.stake_rewarded);
const activeStakePercentage = maxStake.gt(0)
? activeStake.dividedBy(maxStake).multipliedBy(100).dp(0, bignumber_js_1.default.ROUND_CEIL)
: new bignumber_js_1.default(0);
return {
nodeId: mirrorNode.node_id,
address: mirrorNode.node_account_id,
addressChecksum: (0, utils_1.getChecksum)(mirrorNode.node_account_id),
name: (0, utils_1.extractCompanyFromNodeDescription)(mirrorNode.description),
minStake,
maxStake,
activeStake,
activeStakePercentage,
overstaked: activeStake.gte(maxStake),
};
});
const sortedValidators = (0, utils_1.sortValidators)(validators);
const data = {
validators: sortedValidators,
};
(0, preload_data_1.setHederaPreloadData)(data, currency);
return data;
}
function mapRawValidatorToValidator(validatorRaw) {
return {
nodeId: validatorRaw.nodeId,
address: validatorRaw.address,
addressChecksum: validatorRaw.addressChecksum,
name: validatorRaw.name,
minStake: new bignumber_js_1.default(validatorRaw.minStake),
maxStake: new bignumber_js_1.default(validatorRaw.maxStake),
activeStake: new bignumber_js_1.default(validatorRaw.activeStake),
activeStakePercentage: new bignumber_js_1.default(validatorRaw.activeStakePercentage),
overstaked: validatorRaw.overstaked,
};
}
function fromHydratePreloadData(data) {
let validators = [];
if (data && typeof data === "object" && "validators" in data) {
if (Array.isArray(data.validators)) {
validators = data.validators.map(mapRawValidatorToValidator);
}
}
return {
validators,
};
}
function hydrate(data, currency) {
const hydrated = fromHydratePreloadData(data);
(0, logs_1.log)("hedera/preload", `hydrated ${hydrated.validators.length} hedera validators`);
(0, preload_data_1.setHederaPreloadData)(hydrated, currency);
}
//# sourceMappingURL=preload.js.map