@ledgerhq/coin-casper
Version:
Ledger Casper integration
75 lines • 2.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTransactionStatus = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const errors_1 = require("@ledgerhq/errors");
const addresses_1 = require("./bridgeHelpers/addresses");
const transferId_1 = require("./bridgeHelpers/transferId");
const errors_2 = require("../errors");
const consts_1 = require("../consts");
const getTransactionStatus = async (account, transaction) => {
const errors = {};
const warnings = {};
const { balance, spendableBalance } = account;
const { address } = (0, addresses_1.getAddress)(account);
const { recipient, useAllAmount } = transaction;
let { amount } = transaction;
if (!recipient) {
errors.recipient = new errors_1.RecipientRequired();
}
else if (!(0, addresses_1.isAddressValid)(recipient)) {
errors.recipient = new errors_1.InvalidAddress("", {
currencyName: account.currency.name,
});
}
else if (recipient.toLowerCase() === address.toLowerCase()) {
errors.recipient = new errors_1.InvalidAddressBecauseDestinationIsAlsoSource();
}
if (!(0, addresses_1.isAddressValid)(address)) {
errors.sender = new errors_1.InvalidAddress("", {
currencyName: account.currency.name,
});
}
else if (!(0, transferId_1.isTransferIdValid)(transaction.transferId)) {
errors.sender = new errors_2.CasperInvalidTransferId("", {
maxTransferId: consts_1.CASPER_MAX_TRANSFER_ID,
});
}
const estimatedFees = transaction.fees;
let totalSpent = new bignumber_js_1.default(0);
if (useAllAmount) {
totalSpent = account.spendableBalance;
amount = totalSpent.minus(estimatedFees);
if (amount.lte(0) || totalSpent.gt(balance)) {
errors.amount = new errors_1.NotEnoughBalance();
}
}
if (!useAllAmount) {
totalSpent = amount.plus(estimatedFees);
if (amount.eq(0)) {
errors.amount = new errors_1.AmountRequired();
}
if (totalSpent.gt(account.spendableBalance)) {
errors.amount = new errors_1.NotEnoughBalance();
}
}
if (amount.lt(consts_1.CASPER_MINIMUM_VALID_AMOUNT_MOTES) && !errors.amount) {
errors.amount = consts_1.InvalidMinimumAmountError;
}
if (spendableBalance.minus(totalSpent).minus(estimatedFees).lt(consts_1.CASPER_MINIMUM_VALID_AMOUNT_MOTES)) {
warnings.amount = consts_1.MayBlockAccountError;
}
// log("debug", "[getTransactionStatus] finish fn");
return {
errors,
warnings,
estimatedFees,
amount,
totalSpent,
};
};
exports.getTransactionStatus = getTransactionStatus;
//# sourceMappingURL=getTransactionStatus.js.map