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