@chain-registry/utils
Version:
Chain Registry Utils
98 lines (97 loc) • 4.71 kB
JavaScript
import { customFind } from './utils';
const getAssetByKeyValue = (assets, key, value, chainName) => {
const filteredAssets = assets
.filter((assetList) => !chainName || assetList.chainName === chainName)
.flatMap(({ assets }) => assets);
return customFind(filteredAssets, (asset) => asset[key] === value, `key:${key} value:${value} chainName:${chainName}`);
};
export const getAssetByDenom = (assets, denom, chainName) => {
const filteredAssets = assets
.filter((assetList) => !chainName || assetList.chainName === chainName)
.flatMap(({ assets }) => assets);
return customFind(filteredAssets, (asset) => {
const found = asset.denomUnits.find(unit => unit.denom === denom);
return !!found;
}, `denom:${denom} chainName:${chainName}`);
};
export const getAssetBySymbol = (assets, symbol, chainName) => {
return getAssetByKeyValue(assets, 'symbol', symbol, chainName);
};
export const getDenomByCoinGeckoId = (assets, coinGeckoId, chainName) => {
return getAssetByKeyValue(assets, 'coingeckoId', coinGeckoId, chainName)
?.base;
};
export const getDenomsByCoinGeckoId = (assets, coinGeckoId, chainName) => {
const filteredAssets = assets
.filter((assetList) => !chainName || assetList.chainName === chainName)
.flatMap(({ assets }) => assets);
const denoms = filteredAssets
.filter(a => a.coingeckoId === coinGeckoId)
.map(a => a.base);
return denoms;
};
export const getCoinGeckoIdByDenom = (assets, denom, { chainName, allowTestnet = false, customAssetFilter = () => true, excludedChainNames = [] } = {}) => {
const filteredAssetLists = assets.filter((assetList) => {
return ((!chainName || assetList.chainName === chainName) &&
(allowTestnet || !assetList.chainName.includes('testnet')) &&
!excludedChainNames.includes(assetList.chainName));
});
const filteredAssets = filteredAssetLists
.flatMap(({ assets }) => assets)
.filter(({ coingeckoId }) => coingeckoId)
.filter(customAssetFilter);
const asset = filteredAssets.find(({ base }) => base === denom);
return asset?.coingeckoId;
};
export const getSymbolByDenom = (assets, denom, chainName) => {
return getAssetByDenom(assets, denom, chainName)?.symbol;
};
export const getDenomBySymbol = (assets, symbol, chainName) => {
return getAssetByKeyValue(assets, 'symbol', symbol, chainName)?.base;
};
export const getExponentFromAsset = (asset) => {
return asset.denomUnits.find(({ denom }) => denom === asset.display)
?.exponent;
};
export const getExponentByDenomFromAsset = (asset, denom) => {
return asset.denomUnits.find((unit) => {
return unit.denom === denom || unit?.aliases?.find(a => a === denom);
})
?.exponent;
};
export const getExponentByDenom = (assets, denom, chainName) => {
const asset = getAssetByDenom(assets, denom, chainName);
return asset ? getExponentFromAsset(asset) : undefined;
};
export const getExponentBySymbol = (assets, symbol, chainName) => {
const asset = getAssetBySymbol(assets, symbol, chainName);
return asset ? getExponentFromAsset(asset) : undefined;
};
export const getNativeAssetByChainName = (assets, chainName) => {
const assetList = customFind(assets, (assetList) => assetList.chainName === chainName &&
!assetList.assets[0].base.startsWith('ibc/'), `chainName:${chainName}`);
return assetList?.assets[0];
};
export const getAssetLogoByDenom = (assets, denom, chainName) => {
const asset = getAssetByDenom(assets, denom, chainName);
return Object.values(asset?.logoURIs || {})[0];
};
export const getChainLogo = (assets, chainName) => {
const nativeAsset = getNativeAssetByChainName(assets, chainName);
return Object.values(nativeAsset?.logoURIs || {})[0];
};
export const getAssetNameByDenom = (assets, denom, chainName) => {
const asset = getAssetByDenom(assets, denom, chainName);
return asset?.name;
};
export const getChainNameByDenom = (assets, denom) => {
const isIbcDenom = denom.startsWith('ibc/');
if (isIbcDenom) {
const asset = getAssetByDenom(assets, denom);
return asset?.traces?.find((t) => t.type === 'ibc')?.counterparty
?.chainName;
}
return customFind(assets, (assetList) => assetList.assets.some((asset) => asset.base === denom), `denom:${denom}`)?.chainName;
};
export const getChainByStakingDenom = (chains, denom) => customFind(chains, (chain) => !!chain.staking?.stakingTokens.find((token) => token.denom === denom), `denom:${denom}`);
export const getChainNameByStakingDenom = (chains, denom) => getChainByStakingDenom(chains, denom)?.chainName;