@ledgerhq/coin-celo
Version:
77 lines • 4.12 kB
JavaScript
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