UNPKG

@ledgerhq/coin-multiversx

Version:
72 lines 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareTransaction = void 0; const bignumber_js_1 = require("bignumber.js"); const api_1 = require("./api"); const constants_1 = require("./constants"); const encode_1 = require("./encode"); const logic_1 = require("./logic"); /** * Prepare t before checking status * * @param {MultiversXAccount} account * @param {Transaction} transaction */ const prepareTransaction = async (account, transaction) => { // What's the point of this extra variable ? const preparedTx = transaction; const tokenAccount = (transaction.subAccountId && account.subAccounts && account.subAccounts.find(ta => ta.id === transaction.subAccountId)) || null; if (tokenAccount) { preparedTx.data = encode_1.MultiversXEncodeTransaction.ESDTTransfer(transaction, tokenAccount); preparedTx.gasLimit = constants_1.GAS.ESDT_TRANSFER; } else { switch (transaction.mode) { case "delegate": preparedTx.gasLimit = constants_1.GAS.DELEGATE; preparedTx.data = encode_1.MultiversXEncodeTransaction.delegate(); break; case "claimRewards": preparedTx.gasLimit = constants_1.GAS.CLAIM; preparedTx.data = encode_1.MultiversXEncodeTransaction.claimRewards(); break; case "withdraw": preparedTx.gasLimit = constants_1.GAS.DELEGATE; preparedTx.data = encode_1.MultiversXEncodeTransaction.withdraw(); break; case "reDelegateRewards": preparedTx.gasLimit = constants_1.GAS.DELEGATE; preparedTx.data = encode_1.MultiversXEncodeTransaction.reDelegateRewards(); break; case "unDelegate": preparedTx.gasLimit = constants_1.GAS.DELEGATE; preparedTx.data = encode_1.MultiversXEncodeTransaction.unDelegate(transaction); break; case "send": break; default: throw new Error("Unsupported transaction mode: " + transaction.mode); } } if (transaction.useAllAmount) { // Set the max amount preparedTx.amount = tokenAccount ? tokenAccount.balance : account.spendableBalance; // Compute estimated fees for that amount preparedTx.fees = await (0, api_1.getFees)(preparedTx); // Adjust max amount according to computed fees if (!tokenAccount && (0, logic_1.isAmountSpentFromBalance)(transaction.mode)) { preparedTx.amount = preparedTx.amount.gt(preparedTx.fees) ? preparedTx.amount.minus(preparedTx.fees) : new bignumber_js_1.BigNumber(0); } } else { preparedTx.fees = await (0, api_1.getFees)(preparedTx); } return preparedTx; }; exports.prepareTransaction = prepareTransaction; //# sourceMappingURL=prepareTransaction.js.map