UNPKG

@ledgerhq/coin-icon

Version:
119 lines 4.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMinimumBalance = exports.calculateAmount = exports.getNid = exports.isTestnet = exports.getNonce = exports.isSelfTransaction = exports.isValidAddress = exports.FEES_SAFETY_BUFFER = exports.EXISTENTIAL_DEPOSIT_RECOMMENDED_MARGIN = exports.EXISTENTIAL_DEPOSIT = exports.convertICXtoLoop = exports.convertLoopToIcx = void 0; const cryptoassets_1 = require("@ledgerhq/cryptoassets"); const bignumber_js_1 = require("bignumber.js"); const icon_sdk_js_1 = __importDefault(require("icon-sdk-js")); const { IconAmount } = icon_sdk_js_1.default; const constants_1 = require("./constants"); /** * @param {string|number|BigNumber} value value as loop * @returns {BigNumber} value as ICX */ const convertLoopToIcx = (value) => { return new bignumber_js_1.BigNumber(IconAmount.fromLoop(value, IconAmount.Unit.ICX.toString())); }; exports.convertLoopToIcx = convertLoopToIcx; /** * @param {string|number|BigNumber} value value as ICX * @returns {BigNumber} value as loop */ const convertICXtoLoop = (value) => { return new bignumber_js_1.BigNumber(IconAmount.toLoop(value, IconAmount.Unit.ICX.toString())); }; exports.convertICXtoLoop = convertICXtoLoop; exports.EXISTENTIAL_DEPOSIT = (0, exports.convertICXtoLoop)(0.00125); exports.EXISTENTIAL_DEPOSIT_RECOMMENDED_MARGIN = (0, exports.convertICXtoLoop)(0.00125); exports.FEES_SAFETY_BUFFER = (0, exports.convertICXtoLoop)(0.00125); // Arbitrary buffer for paying fees of next transactions /** * Returns true if address is a valid md5 * * @param {string} address */ const isValidAddress = (address) => { if (!address) return false; return !!address.match(/^[a-z0-9]{42}$/); }; exports.isValidAddress = isValidAddress; /** * Returns true if transaction is a self transaction * * @param {Account} account * @param {Transaction} transaction */ const isSelfTransaction = (account, transaction) => { return transaction.recipient === account.freshAddress; }; exports.isSelfTransaction = isSelfTransaction; /** * Returns nonce for an account * * @param {Account} account */ const getNonce = (account) => { const lastPendingOp = account.pendingOperations[0]; const nonce = Math.max(account.iconResources?.nonce || 0, lastPendingOp && typeof lastPendingOp.transactionSequenceNumber === "number" ? lastPendingOp.transactionSequenceNumber + 1 : 0); return nonce; }; exports.getNonce = getNonce; /** * Returns true if the current currency is testnet * * @param {currency} CryptoCurrency */ function isTestnet(currency) { return (0, cryptoassets_1.getCryptoCurrencyById)(currency.id).isTestnetFor ? true : false; } exports.isTestnet = isTestnet; function getNid(currency) { let nid = constants_1.MAINNET_NID; if (isTestnet(currency)) { nid = constants_1.BERLIN_TESTNET_NID; } return nid; } exports.getNid = getNid; /** * Calculate the real spendable * * @param {*} account * @param {*} transaction */ const calculateMaxSend = (account, transaction) => { const amount = account.spendableBalance.minus(transaction.fees || 0); return amount.lt(0) ? new bignumber_js_1.BigNumber(0) : (0, bignumber_js_1.BigNumber)(amount.toFixed(5)); }; /** * Calculates correct amount if useAllAmount * * @param {*} param */ const calculateAmount = ({ account, transaction, }) => { let amount = transaction.amount; if (transaction.useAllAmount) { switch (transaction.mode) { case "send": amount = calculateMaxSend(account, transaction); break; default: amount = account.spendableBalance.minus(transaction.fees || 0); break; } } return amount.lt(0) ? new bignumber_js_1.BigNumber(0) : amount; }; exports.calculateAmount = calculateAmount; const getMinimumBalance = (account) => { const lockedBalance = account.balance.minus(account.spendableBalance); return lockedBalance.lte(exports.EXISTENTIAL_DEPOSIT) ? exports.EXISTENTIAL_DEPOSIT.minus(lockedBalance) : new bignumber_js_1.BigNumber(0); }; exports.getMinimumBalance = getMinimumBalance; //# sourceMappingURL=logic.js.map