67 lines
2.3 KiB
JavaScript
67 lines
2.3 KiB
JavaScript
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,
|
|
};
|
|
}
|