diff --git a/src/pages/Pools/PoolDetail.tsx b/src/pages/Pools/PoolDetail.tsx index a83f775f1..e9580fdf3 100644 --- a/src/pages/Pools/PoolDetail.tsx +++ b/src/pages/Pools/PoolDetail.tsx @@ -14,7 +14,8 @@ import { fetchRewardInfo, fetchRewardPerSecInfo, fetchStakingPoolInfo, - fetchPoolApr + fetchPoolApr, + getPairAmountInfo } from 'rest/api'; import { TokenItemType, tokenMap } from 'config/bridgeTokens'; @@ -104,48 +105,6 @@ const PoolDetail: React.FC = () => { setCachedLpPools(lpTokenData); }; - const getPairAmountInfo = async () => { - const poolData = await fetchPoolInfoAmount( - pairInfoData.token1, - pairInfoData.token2 - ); - - // default is usdt - let tokenPrice = 1; - let tokenValue = poolData.askPoolAmount; - - if (pairInfoData.token2.denom !== STABLE_DENOM) { - const poolOraiUsdData = await fetchPoolInfoAmount( - tokenMap[ORAI], - tokenMap[STABLE_DENOM] - ); - // orai price - tokenPrice = - poolOraiUsdData.askPoolAmount / poolOraiUsdData.offerPoolAmount; - tokenValue = poolData.offerPoolAmount; - // calculate indirect - if (pairInfoData.token1.denom !== ORAI) { - const poolOraiData = await fetchPoolInfoAmount( - pairInfoData.token2, - tokenMap[ORAI] - ); - tokenValue *= poolOraiData.askPoolAmount / poolOraiData.offerPoolAmount; - } - } - - const usdtValue = - toDisplay(tokenValue, pairInfoData.token2.decimals) * tokenPrice; - - return { - token1Amount: poolData.askPoolAmount, - token2Amount: poolData.offerPoolAmount, - token1Usd: usdtValue, - token2Usd: usdtValue, - usdAmount: 2 * usdtValue, - ratio: poolData.offerPoolAmount / poolData.askPoolAmount - }; - }; - const onBondingAction = () => { refetchRewardInfo(); }; @@ -162,7 +121,7 @@ const PoolDetail: React.FC = () => { let { data: pairAmountInfoData, refetch: refetchPairAmountInfo } = useQuery( ['pair-amount-info', pairInfoData], () => { - return getPairAmountInfo(); + return getPairAmountInfo(pairInfoData.token1, pairInfoData.token2); }, { enabled: !!pairInfoData, diff --git a/src/rest/api.ts b/src/rest/api.ts index 028788f9f..fb718b93c 100644 --- a/src/rest/api.ts +++ b/src/rest/api.ts @@ -1,11 +1,11 @@ import { network } from 'config/networks'; import { TokenItemType, tokenMap } from 'config/bridgeTokens'; import isEqual from 'lodash/isEqual'; -import { ORAI } from 'config/constants'; +import { ORAI, STABLE_DENOM } from 'config/constants'; import { getPair, Pair } from 'config/pools'; import axios from './request'; import { TokenInfo } from 'types/token'; -import { getSubAmountDetails } from 'libs/utils'; +import { getSubAmountDetails, toDisplay } from 'libs/utils'; import { Contract } from 'config/contracts'; import { AssetInfo, PairInfo, SwapOperation } from 'libs/contracts'; import { PoolResponse } from 'libs/contracts/OraiswapPair.types'; @@ -89,6 +89,44 @@ function parsePoolAmount(poolInfo: PoolResponse, trueAsset: AssetInfo) { ); } +async function getPairAmountInfo( + fromToken: TokenItemType, + toToken: TokenItemType +) { + const poolData = await fetchPoolInfoAmount(fromToken, toToken); + + // default is usdt + let tokenPrice = 1; + let tokenValue = poolData.askPoolAmount; + + if (toToken.denom !== STABLE_DENOM) { + const poolOraiUsdData = await fetchPoolInfoAmount( + tokenMap[ORAI], + tokenMap[STABLE_DENOM] + ); + // orai price + tokenPrice = + poolOraiUsdData.askPoolAmount / poolOraiUsdData.offerPoolAmount; + tokenValue = poolData.offerPoolAmount; + // calculate indirect + if (fromToken.denom !== ORAI) { + const poolOraiData = await fetchPoolInfoAmount(toToken, tokenMap[ORAI]); + tokenValue *= poolOraiData.askPoolAmount / poolOraiData.offerPoolAmount; + } + } + + const usdtValue = toDisplay(tokenValue, toToken.decimals) * tokenPrice; + + return { + token1Amount: poolData.offerPoolAmount, + token2Amount: poolData.askPoolAmount, + token1Usd: usdtValue, + token2Usd: usdtValue, + usdAmount: 2 * usdtValue, + ratio: poolData.offerPoolAmount / poolData.askPoolAmount + }; +} + async function fetchPoolInfoAmount( fromTokenInfo: TokenItemType, toTokenInfo: TokenItemType, @@ -740,6 +778,7 @@ export { fetchDistributionInfo, fetchAllPoolApr, fetchPoolApr, + getPairAmountInfo, getSubAmountDetails, generateConvertErc20Cw20Message, generateConvertCw20Erc20Message,