UNPKG

@ledgerhq/coin-celo

Version:
48 lines 2.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createVoteMutation = void 0; const invariant_1 = __importDefault(require("invariant")); const bignumber_js_1 = __importDefault(require("bignumber.js")); const sampleSize_1 = __importDefault(require("lodash/sampleSize")); const index_1 = require("@ledgerhq/cryptoassets/index"); const parseCurrencyUnit_1 = require("@ledgerhq/coin-framework/currencies/parseCurrencyUnit"); const preload_1 = require("../../bridge/preload"); const logic_1 = require("../../logic"); const currency = (0, index_1.getCryptoCurrencyById)("celo"); const minimalAmount = (0, parseCurrencyUnit_1.parseCurrencyUnit)(currency.units[0], "0.001"); const createVoteMutation = () => ({ name: "Celo: Vote", feature: "staking", maxRun: 1, transaction: ({ account, bridge, maxSpendable }) => { (0, invariant_1.default)(maxSpendable.gt(minimalAmount), "Celo: Vote | balance is too low"); const { celoResources } = account; (0, invariant_1.default)(celoResources?.registrationStatus, "Celo: Vote | Account is not registered"); const nonvotingLockedBalance = celoResources?.nonvotingLockedBalance || new bignumber_js_1.default(0); (0, invariant_1.default)(nonvotingLockedBalance.gt(0), "Celo: Vote | No non voting locked balance"); const votes = celoResources.votes || []; const { validatorGroups } = (0, preload_1.getCurrentCeloPreloadData)(); // Get a random validator group that the account does not have locked tokens for. const validatorGroupWithoutVotes = (0, sampleSize_1.default)((0, logic_1.getValidatorGroupsWithoutVotes)(validatorGroups, votes), 1)[0]; const amount = nonvotingLockedBalance.times(0.5).precision(8).integerValue(); (0, invariant_1.default)(amount.gt(0), "Celo: Vote | Not enough funds to vote"); const transaction = { recipient: validatorGroupWithoutVotes.address, amount, }; return { transaction: bridge.createTransaction(account), updates: [ { mode: "vote", }, transaction, ], }; }, }); exports.createVoteMutation = createVoteMutation; //# sourceMappingURL=createVoteMutation.js.map