@ledgerhq/coin-icon
Version:
Ledger Icon Coin integration
119 lines • 4.4 kB
JavaScript
;
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 && bignumber_js_1.BigNumber.isBigNumber(lastPendingOp.transactionSequenceNumber)
? lastPendingOp.transactionSequenceNumber.plus(1).toNumber()
: 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