UNPKG

@ledgerhq/coin-celo

Version:
77 lines 4.12 kB
import { BigNumber } from "bignumber.js"; export const PRELOAD_MAX_AGE = 10 * 60 * 1000; // 10 minutes, used for max age in preload strategy const LEDGER_BY_FIGMENT_VALIDATOR_GROUP_ADDRESS = "0x0861a61Bf679A30680510EcC238ee43B82C5e843"; export const availablePendingWithdrawals = (account) => { const { pendingWithdrawals } = account.celoResources || {}; return (pendingWithdrawals || []).filter(withdrawal => new Date(withdrawal.time.toNumber() * 1000) < new Date()); }; export const withdrawableBalance = (account) => availablePendingWithdrawals(account).reduce((sum, withdrawal) => sum.plus(withdrawal.value), new BigNumber(0)); export const hasWithdrawableBalance = (account) => withdrawableBalance(account).isGreaterThan(0); export const defaultValidatorGroupAddress = () => LEDGER_BY_FIGMENT_VALIDATOR_GROUP_ADDRESS; export const isDefaultValidatorGroupAddress = (address) => address === LEDGER_BY_FIGMENT_VALIDATOR_GROUP_ADDRESS; export const isDefaultValidatorGroup = (validatorGroup) => isDefaultValidatorGroupAddress(validatorGroup.address); export const activatableVotes = (account) => { const { votes } = account.celoResources || {}; return (votes || []).filter(vote => vote.activatable); }; export const hasActivatableVotes = (account) => activatableVotes(account).length > 0; export const revokableVotes = (account) => { const { votes } = account.celoResources || {}; return (votes || []).filter(vote => vote.revokable); }; export const hasRevokableVotes = (account) => revokableVotes(account).length > 0; export const getVote = (account, validatorGroupAddress, index) => { const { votes } = account.celoResources || {}; return votes?.find(revoke => revoke.validatorGroup === validatorGroupAddress && revoke.index == index); }; export const voteStatus = (vote) => vote.type === "pending" && vote.activatable ? "awaitingActivation" : vote.type; export const fallbackValidatorGroup = (address) => ({ address: address, name: address, votes: new BigNumber(0), }); export 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; }; const isOperationTrulyPending = (operation, activeOperations) => { return !activeOperations.some(activeOperation => activeOperation.hash === operation.hash); }; export 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(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(0), lock: new BigNumber(0), }); return operationAmounts; }; const getValidatorGroupsByVotingActivity = (validatorGroups, votes, withVotes) => { return validatorGroups.filter(v => votes.some(d => d.validatorGroup === v.address) === withVotes); }; export const getValidatorGroupsWithVotes = (validatorGroups, votes) => getValidatorGroupsByVotingActivity(validatorGroups, votes || [], true); export const getValidatorGroupsWithoutVotes = (validatorGroups, votes = []) => getValidatorGroupsByVotingActivity(validatorGroups, votes || [], false); //# sourceMappingURL=logic.js.map