@ledgerhq/coin-hedera
Version:
Ledger Hedera Coin integration
67 lines • 2.68 kB
JavaScript
import { log } from "@ledgerhq/logs";
import BigNumber from "bignumber.js";
import { extractCompanyFromNodeDescription, getChecksum, sortValidators } from "./logic/utils";
import { apiClient } from "./network/api";
import { setHederaPreloadData } from "./preload-data";
export const getPreloadStrategy = () => ({
preloadMaxAge: 15 * 60 * 1000, // 15 minutes
});
export async function preload(currency) {
log("hedera/preload", "preloading hedera data...");
const result = await apiClient.getNodes({ fetchAllPages: true });
const validators = result.nodes.map(mirrorNode => {
const minStake = new BigNumber(mirrorNode.min_stake);
const maxStake = new BigNumber(mirrorNode.max_stake);
const activeStake = new BigNumber(mirrorNode.stake_rewarded);
const activeStakePercentage = maxStake.gt(0)
? activeStake.dividedBy(maxStake).multipliedBy(100).dp(0, BigNumber.ROUND_CEIL)
: new BigNumber(0);
return {
nodeId: mirrorNode.node_id,
address: mirrorNode.node_account_id,
addressChecksum: getChecksum(mirrorNode.node_account_id),
name: extractCompanyFromNodeDescription(mirrorNode.description),
minStake,
maxStake,
activeStake,
activeStakePercentage,
overstaked: activeStake.gte(maxStake),
};
});
const sortedValidators = sortValidators(validators);
const data = {
validators: sortedValidators,
};
setHederaPreloadData(data, currency);
return data;
}
function mapRawValidatorToValidator(validatorRaw) {
return {
nodeId: validatorRaw.nodeId,
address: validatorRaw.address,
addressChecksum: validatorRaw.addressChecksum,
name: validatorRaw.name,
minStake: new BigNumber(validatorRaw.minStake),
maxStake: new BigNumber(validatorRaw.maxStake),
activeStake: new BigNumber(validatorRaw.activeStake),
activeStakePercentage: new BigNumber(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,
};
}
export function hydrate(data, currency) {
const hydrated = fromHydratePreloadData(data);
log("hedera/preload", `hydrated ${hydrated.validators.length} hedera validators`);
setHederaPreloadData(hydrated, currency);
}
//# sourceMappingURL=preload.js.map