@ledgerhq/coin-multiversx
Version:
Ledger MultiversX Coin integration
72 lines • 3.02 kB
JavaScript
;
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 = await 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