UNPKG

@ledgerhq/coin-aptos

Version:
67 lines 2.71 kB
import BigNumber from "bignumber.js"; import { formatCurrencyUnit } from "@ledgerhq/coin-framework/currencies/formatCurrencyUnit"; import { MIN_COINS_ON_SHARES_POOL_IN_OCTAS } from "../constants"; import { getMaxSendBalance } from "../bridge/logic"; export const mapStakingPositions = (stakingPositions, validators, unit) => { return stakingPositions.map(sp => { const rank = validators.findIndex(v => v.address === sp.validatorId); const validator = validators[rank] ?? sp; const formatConfig = { disableRounding: false, alwaysShowSign: false, showCode: true, }; return { ...sp, formattedAmount: formatCurrencyUnit(unit, sp.active, formatConfig), formattedPending: formatCurrencyUnit(unit, sp.pendingInactive, formatConfig), formattedAvailable: formatCurrencyUnit(unit, sp.inactive, formatConfig), rank, validator, }; }); }; export const canStake = (account) => { return getMaxSendBalance(account) > MIN_COINS_ON_SHARES_POOL_IN_OCTAS; }; export const canUnstake = (stakingPosition) => { return stakingPosition.active.gt(0); }; export const canWithdraw = (stakingPosition) => { return stakingPosition.inactive.gt(0); }; export const canRestake = (stakingPosition) => { return stakingPosition.pendingInactive.gt(0); }; export const getStakingPosition = (account, validatorAddress) => (account.aptosResources?.stakingPositions ?? []).find(stakingPosition => stakingPosition.validatorId === validatorAddress); export const getDelegationOpMaxAmount = (account, validatorAddress, mode) => { let maxAmount; const stakingPosition = getStakingPosition(account, validatorAddress); switch (mode) { case "unstake": maxAmount = stakingPosition?.active; break; case "withdraw": maxAmount = stakingPosition?.inactive; break; case "restake": maxAmount = stakingPosition?.pendingInactive; } if (maxAmount === undefined || maxAmount.lt(0)) { return new BigNumber(0); } return maxAmount; }; export const formatUnlockTime = (epochSecs) => { const unlockTime = parseInt(epochSecs, 10) * 1000; // Convert to ms const now = Date.now(); const diffMs = unlockTime - now; if (diffMs <= 0) return "Unlocked"; const totalMinutes = Math.floor(diffMs / (1000 * 60)); const days = Math.floor(totalMinutes / (60 * 24)); const hours = Math.floor((totalMinutes % (60 * 24)) / 60); const minutes = totalMinutes % 60; return `${days}d ${hours}h ${minutes}m`; }; //# sourceMappingURL=staking.js.map