Skip to content

Commit

Permalink
use chain registry util for useTotalAssets
Browse files Browse the repository at this point in the history
  • Loading branch information
cmaaawscodepipelinedeploy committed May 5, 2024
1 parent a9e2644 commit 108a156
Showing 1 changed file with 19 additions and 45 deletions.
64 changes: 19 additions & 45 deletions examples/asset-list/hooks/queries/useTotalAssets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ import { useChain } from '@cosmos-kit/react';
import { UseQueryResult } from '@tanstack/react-query';
import BigNumber from 'bignumber.js';
import { useEffect, useMemo } from 'react';
import { useChainUtils } from '../useChainUtils';
import { usePrices } from './usePrices';
import { defaultChainName as osmoChainName } from '@/config';
import { Pool } from 'osmo-query/dist/codegen/osmosis/gamm/pool-models/balancer/balancerPool';
import { convertGammTokenToDollarValue } from '@/utils';
import { useQueryHooks } from './useQueryHooks';
import { convertBaseUnitToDollarValueByDenom } from '@chain-registry/utils';
import { assets as assetsInRegistry } from '@/utils/local-chain-registry'
import { convertGammTokenToDollarValue, getPoolByGammName } from '@osmonauts/math'

(BigInt.prototype as any).toJSON = function () {
return this.toString();
Expand All @@ -30,6 +31,8 @@ export const useTotalAssets = (chainName: string) => {

const isOsmosisChain = chainName === osmoChainName;

const currentAssetList = assetsInRegistry.filter(a => a.chain_name === chainName)

const allBalancesQuery: UseQueryResult<Coin[]> =
cosmosQuery.bank.v1beta1.useAllBalances({
request: {
Expand Down Expand Up @@ -109,8 +112,6 @@ export const useTotalAssets = (chainName: string) => {
[Key in keyof AllQueries]: NonNullable<AllQueries[Key]['data']>;
};

const { calcCoinDollarValue } = useChainUtils(chainName);

const zero = new BigNumber(0);

const data = useMemo(() => {
Expand All @@ -129,58 +130,31 @@ export const useTotalAssets = (chainName: string) => {
} = queriesData;

const stakedTotal = delegations
?.map((coin) => calcCoinDollarValue(prices, coin))
?.map((coin) => convertBaseUnitToDollarValueByDenom(assetsInRegistry, prices, coin.denom, coin.amount, chainName))
.reduce((total, cur) => total.plus(cur), zero)
.toString();

const balancesTotal = allBalances
?.filter(({ denom }) => !denom.startsWith('gamm') && prices[denom])
.map((coin) => calcCoinDollarValue(prices, coin))
.map((coin) => convertBaseUnitToDollarValueByDenom(assetsInRegistry, prices, coin.denom, coin.amount, chainName))
.reduce((total, cur) => total.plus(cur), zero)
.toString();

let bondedTotal;
let liquidityTotal;

if (isOsmosisChain) {
const liquidityCoins = (allBalances ?? []).filter(({ denom }) =>
denom.startsWith('gamm')
);
const gammTokenDenoms = [
...(liquidityCoins ?? []),
...(lockedCoins ?? []),
].map(({ denom }) => denom);

const uniqueDenoms = [...new Set(gammTokenDenoms)];

const poolsMap: Record<string, Pool> = pools
.filter(({ totalShares }) => uniqueDenoms.includes(totalShares.denom))
.filter((pool) => !pool?.$typeUrl?.includes('stableswap'))
.filter(({ poolAssets }) => {
return poolAssets.every(({ token }) => {
const isGammToken = token.denom.startsWith('gamm/pool');
return !isGammToken && prices[token.denom];
});
})
.reduce((prev, cur) => ({ ...prev, [cur.totalShares.denom]: cur }), {});

bondedTotal = lockedCoins
.map((coin) => {
const poolData = poolsMap[coin.denom];
if (!poolData) return '0';
return convertGammTokenToDollarValue(coin, poolData, prices);
})
.reduce((total, cur) => total.plus(cur), zero)
.toString();

liquidityTotal = liquidityCoins
.map((coin) => {
const poolData = poolsMap[coin.denom];
if (!poolData) return '0';
return convertGammTokenToDollarValue(coin, poolData, prices);
})
.reduce((total, cur) => total.plus(cur), zero)
.toString();
liquidityTotal = lockedCoins.map(coin => {
const pool = getPoolByGammName(pools, coin.denom)
return convertGammTokenToDollarValue(currentAssetList.flatMap(a => a.assets) as any[], coin, pool, prices)
}).reduce((total, cur) => total.plus(cur || 0), zero).toString()

// bondedTotal = liquidityCoins
// .map((coin) => {
// const pool = getPoolByGammName(pools, coin.denom)
// return convertGammTokenToDollarValue(currentAssetList.flatMap(a => a.assets) as any[], coin, pool, prices)
// })
// .reduce((total, cur) => total.plus(cur), zero)
// .toString();
}

const total = [stakedTotal, balancesTotal, bondedTotal, liquidityTotal]
Expand Down

0 comments on commit 108a156

Please sign in to comment.