import { useReadContract, useReadContracts } from "wagmi"; import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; import { abi as UniswapV2Pair } from "../../abi/UniswapV2Pair.json"; import { abi as Erc20Abi } from "../../abi/ERC20.json"; import { getTokenAddress } from "../helpers"; export const useUniswapV2PairReserves = (chainId, rawContractAddress) => { const contractAddress = getTokenAddress(chainId, rawContractAddress); const { data: pairReserves, refetch: pairReservesRefetch } = useReadContract({ abi: UniswapV2Pair, address: contractAddress, functionName: "getReserves", scopeKey: `getReserves-${contractAddress}-${chainId}`, chainId: chainId, }); const { data: tokenAddresses } = useReadContracts({ contracts: [ { abi: UniswapV2Pair, address: contractAddress, functionName: "token0", scopeKey: `token0-${contractAddress}-${chainId}`, chainId: chainId, }, { abi: UniswapV2Pair, address: contractAddress, functionName: "token1", scopeKey: `token1-${contractAddress}-${chainId}`, chainId: chainId, } ] }); const { data: tokenDecimals } = useReadContracts({ contracts: tokenAddresses?.map((tokenAddress) => ({ abi: Erc20Abi, address: tokenAddress?.result ? tokenAddress.result : "", functionName: "decimals", scopeKey: `decimals-${tokenAddress}-${chainId}`, chainId: chainId, })) }) return { reserves: { reserve0: new DecimalBigNumber( pairReserves ? pairReserves[0] : 0n, tokenDecimals?.at(0).result ? tokenDecimals.at(0).result : 18 ), reserve1: new DecimalBigNumber( pairReserves ? pairReserves[1] : 0n, tokenDecimals?.at(1).result ? tokenDecimals.at(1).result : 18 ), }, tokens: { token0: tokenAddresses?.at(0).result ? tokenAddresses.at(0).result : "", token1: tokenAddresses?.at(1).result ? tokenAddresses.at(1).result : "", }, refetch: pairReservesRefetch, }; }