UNPKG

@chain-registry/utils

Version:
101 lines (100 loc) 5.09 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertDisplayUnitToBaseUnit = exports.convertBaseUnitToDisplayUnitByDenom = exports.convertBaseUnitToDisplayUnit = exports.convertDollarValueToBaseUnit = exports.convertBaseUnitToDollarValueByDenom = exports.convertBaseUnitToDollarValue = exports.roundDown = exports.mapCoinGeckoPricesToDenoms = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const assets_1 = require("./assets"); const mapCoinGeckoPricesToDenoms = (assets, prices) => { return Object.keys(prices).reduce((res, geckoId) => { const denoms = (0, assets_1.getDenomsByCoinGeckoId)(assets, geckoId); if (!denoms.length) { throw new Error(`No denom found for CoinGecko ID: ${geckoId}`); } // some tokens list same coingeckoId denoms.forEach(d => { res[d] = prices[geckoId].usd; }); return res; }, {}); }; exports.mapCoinGeckoPricesToDenoms = mapCoinGeckoPricesToDenoms; const roundDown = (value) => { return new bignumber_js_1.default(value).decimalPlaces(0, bignumber_js_1.default.ROUND_DOWN).toString(); }; exports.roundDown = roundDown; const getAssetInfo = (assets, symbol, chainName) => { const asset = (0, assets_1.getAssetBySymbol)(assets, symbol, chainName); const denom = asset?.base; const exponent = asset ? (0, assets_1.getExponentFromAsset)(asset) : undefined; if (!denom || exponent === undefined) { throw new Error(`No denom or exponent found for symbol: ${symbol}`); } return { denom, exponent }; }; const getAssetInfoByDenom = (assets, denom, chainName) => { const asset = (0, assets_1.getAssetByDenom)(assets, denom, chainName); const exponent = asset ? (0, assets_1.getExponentByDenomFromAsset)(asset, denom) : undefined; if (exponent === undefined) { throw new Error(`No denom or exponent found for denom: ${denom}`); } return { denom, exponent }; }; const shiftDecimalPlaces = (amount, exponent, direction = 1) => { return new bignumber_js_1.default(amount).shiftedBy(exponent * direction).toString(); }; const convertBaseUnitToDollarValue = (assets, prices, symbol, amount, chainName) => { const { denom, exponent } = getAssetInfo(assets, symbol, chainName); const baseAmount = shiftDecimalPlaces(amount, exponent, -1); return new bignumber_js_1.default(baseAmount).multipliedBy(prices[denom]).toString(); }; exports.convertBaseUnitToDollarValue = convertBaseUnitToDollarValue; const convertBaseUnitToDollarValueByDenom = (assets, prices, denom, amount, chainName) => { const asset = (0, assets_1.getAssetByDenom)(assets, denom, chainName); if (!asset) { throw new Error(`no asset found from denom:${denom}`); } const assetBase = asset.base; const assetDisplay = asset.display; if (!(assetBase in prices)) { console.warn(`no price found from denom:${denom}`); return '0'; } const exponent = (0, assets_1.getExponentByDenomFromAsset)(asset, assetDisplay); if (exponent === undefined) { throw new Error(`No exponent found for denom: ${denom}`); } const baseAmount = shiftDecimalPlaces(amount, exponent, -1); return new bignumber_js_1.default(baseAmount).multipliedBy(prices[assetBase]).toString(); }; exports.convertBaseUnitToDollarValueByDenom = convertBaseUnitToDollarValueByDenom; const convertDollarValueToBaseUnit = (assets, prices, symbol, value, chainName) => { const { denom, exponent } = getAssetInfo(assets, symbol, chainName); const baseAmount = new bignumber_js_1.default(value).dividedBy(prices[denom]).toString(); return shiftDecimalPlaces(baseAmount, exponent); }; exports.convertDollarValueToBaseUnit = convertDollarValueToBaseUnit; const convertBaseUnitToDisplayUnit = (assets, symbol, amount, chainName) => { const { exponent } = getAssetInfo(assets, symbol, chainName); return shiftDecimalPlaces(amount, exponent, -1); }; exports.convertBaseUnitToDisplayUnit = convertBaseUnitToDisplayUnit; const convertBaseUnitToDisplayUnitByDenom = (assets, denom, amount, chainName) => { const asset = (0, assets_1.getAssetByDenom)(assets, denom, chainName); if (!asset) { throw new Error(`no asset found from denom:${denom}`); } const assetDisplay = asset.display; const exponent = (0, assets_1.getExponentByDenomFromAsset)(asset, assetDisplay); if (exponent === undefined) { throw new Error(`No exponent found for denom: ${denom}`); } return shiftDecimalPlaces(amount, exponent, -1); }; exports.convertBaseUnitToDisplayUnitByDenom = convertBaseUnitToDisplayUnitByDenom; const convertDisplayUnitToBaseUnit = (assets, symbol, amount, chainName) => { const { exponent } = getAssetInfo(assets, symbol, chainName); return shiftDecimalPlaces(amount, exponent); }; exports.convertDisplayUnitToBaseUnit = convertDisplayUnitToBaseUnit;