@ledgerhq/coin-celo
Version:
97 lines • 5.78 kB
JavaScript
;
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