@chain-registry/utils
Version:
Chain Registry Utils
101 lines (100 loc) • 5.09 kB
JavaScript
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;
;