UNPKG

@ledgerhq/coin-celo

Version:
97 lines 5.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getValidatorGroupsWithoutVotes = exports.getValidatorGroupsWithVotes = exports.getPendingStakingOperationAmounts = exports.isAccountRegistrationPending = exports.fallbackValidatorGroup = exports.voteStatus = exports.getVote = exports.hasRevokableVotes = exports.revokableVotes = exports.hasActivatableVotes = exports.activatableVotes = exports.isDefaultValidatorGroup = exports.isDefaultValidatorGroupAddress = exports.defaultValidatorGroupAddress = exports.hasWithdrawableBalance = exports.withdrawableBalance = exports.availablePendingWithdrawals = exports.PRELOAD_MAX_AGE = void 0; const bignumber_js_1 = require("bignumber.js"); exports.PRELOAD_MAX_AGE = 10 * 60 * 1000; // 10 minutes, used for max age in preload strategy const LEDGER_BY_FIGMENT_VALIDATOR_GROUP_ADDRESS = "0x0861a61Bf679A30680510EcC238ee43B82C5e843"; const availablePendingWithdrawals = (account) => { const { pendingWithdrawals } = account.celoResources || {}; return (pendingWithdrawals || []).filter(withdrawal => new Date(withdrawal.time.toNumber() * 1000) < new Date()); }; exports.availablePendingWithdrawals = availablePendingWithdrawals; const withdrawableBalance = (account) => (0, exports.availablePendingWithdrawals)(account).reduce((sum, withdrawal) => sum.plus(withdrawal.value), new bignumber_js_1.BigNumber(0)); exports.withdrawableBalance = withdrawableBalance; const hasWithdrawableBalance = (account) => (0, exports.withdrawableBalance)(account).isGreaterThan(0); exports.hasWithdrawableBalance = hasWithdrawableBalance; const defaultValidatorGroupAddress = () => LEDGER_BY_FIGMENT_VALIDATOR_GROUP_ADDRESS; exports.defaultValidatorGroupAddress = defaultValidatorGroupAddress; const isDefaultValidatorGroupAddress = (address) => address === LEDGER_BY_FIGMENT_VALIDATOR_GROUP_ADDRESS; exports.isDefaultValidatorGroupAddress = isDefaultValidatorGroupAddress; const isDefaultValidatorGroup = (validatorGroup) => (0, exports.isDefaultValidatorGroupAddress)(validatorGroup.address); exports.isDefaultValidatorGroup = isDefaultValidatorGroup; const activatableVotes = (account) => { const { votes } = account.celoResources || {}; return (votes || []).filter(vote => vote.activatable); }; exports.activatableVotes = activatableVotes; const hasActivatableVotes = (account) => (0, exports.activatableVotes)(account).length > 0; exports.hasActivatableVotes = hasActivatableVotes; const revokableVotes = (account) => { const { votes } = account.celoResources || {}; return (votes || []).filter(vote => vote.revokable); }; exports.revokableVotes = revokableVotes; const hasRevokableVotes = (account) => (0, exports.revokableVotes)(account).length > 0; exports.hasRevokableVotes = hasRevokableVotes; const getVote = (account, validatorGroupAddress, index) => { const { votes } = account.celoResources || {}; return votes?.find(revoke => revoke.validatorGroup === validatorGroupAddress && revoke.index == index); }; exports.getVote = getVote; const voteStatus = (vote) => vote.type === "pending" && vote.activatable ? "awaitingActivation" : vote.type; exports.voteStatus = voteStatus; const fallbackValidatorGroup = (address) => ({ address: address, name: address, votes: new bignumber_js_1.BigNumber(0), }); exports.fallbackValidatorGroup = fallbackValidatorGroup; const isAccountRegistrationPending = (account) => { // If there's a pending "REGISTER" operation and the // account's registration status is false, then // we know that the account is truly not registered yet. const isAccountRegistrationPending = !!account && account.pendingOperations.some(currentAccount => currentAccount.type === "REGISTER") && !account.celoResources?.registrationStatus; return isAccountRegistrationPending; }; exports.isAccountRegistrationPending = isAccountRegistrationPending; const isOperationTrulyPending = (operation, activeOperations) => { return !activeOperations.some(activeOperation => activeOperation.hash === operation.hash); }; const getPendingStakingOperationAmounts = (account) => { const operationAmounts = account.pendingOperations.reduce((acc, currentOperation) => { if (currentOperation.type !== "VOTE" && currentOperation.type !== "LOCK") { return acc; } if (isOperationTrulyPending(currentOperation, account.operations)) { const value = new bignumber_js_1.BigNumber(currentOperation.value); switch (currentOperation.type) { case "VOTE": return { ...acc, vote: acc.vote.plus(value), }; case "LOCK": return { ...acc, lock: acc.lock.plus(value), }; } } return acc; }, { vote: new bignumber_js_1.BigNumber(0), lock: new bignumber_js_1.BigNumber(0), }); return operationAmounts; }; exports.getPendingStakingOperationAmounts = getPendingStakingOperationAmounts; const getValidatorGroupsByVotingActivity = (validatorGroups, votes, withVotes) => { return validatorGroups.filter(v => votes.some(d => d.validatorGroup === v.address) === withVotes); }; const getValidatorGroupsWithVotes = (validatorGroups, votes) => getValidatorGroupsByVotingActivity(validatorGroups, votes || [], true); exports.getValidatorGroupsWithVotes = getValidatorGroupsWithVotes; const getValidatorGroupsWithoutVotes = (validatorGroups, votes = []) => getValidatorGroupsByVotingActivity(validatorGroups, votes || [], false); exports.getValidatorGroupsWithoutVotes = getValidatorGroupsWithoutVotes; //# sourceMappingURL=logic.js.map