"use client"; import { useEffect, useState } from "react"; import { Curve } from "./_components"; import type { NextPage } from "next"; import { Address as AddressType, formatEther, isAddress, parseEther } from "viem"; import { useAccount } from "wagmi"; import { Address, AddressInput, Balance, EtherInput, IntegerInput } from "~~/components/scaffold-eth"; import { useDeployedContractInfo, useScaffoldReadContract, useScaffoldWriteContract } from "~~/hooks/scaffold-eth"; import { useWatchBalance } from "~~/hooks/scaffold-eth/useWatchBalance"; // REGEX for number inputs (only allow numbers and a single decimal point) const NUMBER_REGEX = /^\.?\d+\.?\d*$/; const Dex: NextPage = () => { const [isLoading, setIsLoading] = useState(true); const [ethToTokenAmount, setEthToTokenAmount] = useState(""); const [tokenToETHAmount, setTokenToETHAmount] = useState(""); const [depositAmount, setDepositAmount] = useState(""); const [withdrawAmount, setWithdrawAmount] = useState(""); const [approveSpender, setApproveSpender] = useState(""); const [approveAmount, setApproveAmount] = useState(""); const [accountBalanceOf, setAccountBalanceOf] = useState(""); const { data: DEXInfo } = useDeployedContractInfo({ contractName: "DEX" }); const { data: BalloonsInfo } = useDeployedContractInfo({ contractName: "Balloons" }); const { address: connectedAccount } = useAccount(); const { data: DEXBalloonBalance } = useScaffoldReadContract({ contractName: "Balloons", functionName: "balanceOf", args: [DEXInfo?.address?.toString()], }); useEffect(() => { if (DEXBalloonBalance !== undefined) { setIsLoading(false); } }, [DEXBalloonBalance]); const { data: DEXtotalLiquidity } = useScaffoldReadContract({ contractName: "DEX", functionName: "totalLiquidity", }); const { writeContractAsync: writeDexContractAsync } = useScaffoldWriteContract({ contractName: "DEX" }); const { writeContractAsync: writeBalloonsContractAsync } = useScaffoldWriteContract({ contractName: "Balloons" }); const { data: balanceOfWrite } = useScaffoldReadContract({ contractName: "Balloons", functionName: "balanceOf", args: [accountBalanceOf as AddressType], query: { enabled: isAddress(accountBalanceOf), }, }); const { data: contractBalance } = useScaffoldReadContract({ contractName: "Balloons", functionName: "balanceOf", args: [DEXInfo?.address], }); const { data: userBalloons } = useScaffoldReadContract({ contractName: "Balloons", functionName: "balanceOf", args: [connectedAccount], }); const { data: userLiquidity } = useScaffoldReadContract({ contractName: "DEX", functionName: "getLiquidity", args: [connectedAccount], }); const { data: contractETHBalance } = useWatchBalance({ address: DEXInfo?.address }); return ( <>
Liquidity ({DEXtotalLiquidity ? parseFloat(formatEther(DEXtotalLiquidity || 0n)).toFixed(4) : "None"})