UNPKG

@ledgerhq/coin-icon

Version:
104 lines 3.34 kB
import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets"; import { BigNumber } from "bignumber.js"; import IconService from "icon-sdk-js"; const { IconAmount } = IconService; import { BERLIN_TESTNET_NID, MAINNET_NID } from "./constants"; /** * @param {string|number|BigNumber} value value as loop * @returns {BigNumber} value as ICX */ export const convertLoopToIcx = (value) => { return new BigNumber(IconAmount.fromLoop(value, IconAmount.Unit.ICX.toString())); }; /** * @param {string|number|BigNumber} value value as ICX * @returns {BigNumber} value as loop */ export const convertICXtoLoop = (value) => { return new BigNumber(IconAmount.toLoop(value, IconAmount.Unit.ICX.toString())); }; export const EXISTENTIAL_DEPOSIT = convertICXtoLoop(0.00125); export const EXISTENTIAL_DEPOSIT_RECOMMENDED_MARGIN = convertICXtoLoop(0.00125); export const FEES_SAFETY_BUFFER = convertICXtoLoop(0.00125); // Arbitrary buffer for paying fees of next transactions /** * Returns true if address is a valid md5 * * @param {string} address */ export const isValidAddress = (address) => { if (!address) return false; return !!address.match(/^[a-z0-9]{42}$/); }; /** * Returns true if transaction is a self transaction * * @param {Account} account * @param {Transaction} transaction */ export const isSelfTransaction = (account, transaction) => { return transaction.recipient === account.freshAddress; }; /** * Returns nonce for an account * * @param {Account} account */ export 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; }; /** * Returns true if the current currency is testnet * * @param {currency} CryptoCurrency */ export function isTestnet(currency) { return getCryptoCurrencyById(currency.id).isTestnetFor ? true : false; } export function getNid(currency) { let nid = MAINNET_NID; if (isTestnet(currency)) { nid = BERLIN_TESTNET_NID; } return nid; } /** * 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(0) : BigNumber(amount.toFixed(5)); }; /** * Calculates correct amount if useAllAmount * * @param {*} param */ export 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(0) : amount; }; export const getMinimumBalance = (account) => { const lockedBalance = account.balance.minus(account.spendableBalance); return lockedBalance.lte(EXISTENTIAL_DEPOSIT) ? EXISTENTIAL_DEPOSIT.minus(lockedBalance) : new BigNumber(0); }; //# sourceMappingURL=logic.js.map