"use client"; import { useState } from "react"; import { AddressInput } from "@scaffold-ui/components"; import { IntegerInput } from "@scaffold-ui/debug-contracts"; import { useWatchBalance } from "@scaffold-ui/hooks"; import type { NextPage } from "next"; import { formatEther } from "viem"; import { useAccount } from "wagmi"; import { useDeployedContractInfo, useScaffoldReadContract, useScaffoldWriteContract } from "~~/hooks/scaffold-eth"; import { getTokenPrice, multiplyTo1e18 } from "~~/utils/scaffold-eth/priceInWei"; const TokenVendor: NextPage = () => { const [toAddress, setToAddress] = useState(""); const [tokensToSend, setTokensToSend] = useState(""); const [tokensToBuy, setTokensToBuy] = useState(""); const [isApproved, setIsApproved] = useState(false); const [tokensToSell, setTokensToSell] = useState(""); const { address } = useAccount(); const { data: yourTokenSymbol } = useScaffoldReadContract({ contractName: "YourToken", functionName: "symbol", }); const { data: yourTokenBalance } = useScaffoldReadContract({ contractName: "YourToken", functionName: "balanceOf", args: [address], }); const { data: vendorContractData } = useDeployedContractInfo({ contractName: "Vendor" }); const { writeContractAsync: writeVendorAsync } = useScaffoldWriteContract({ contractName: "Vendor" }); const { writeContractAsync: writeYourTokenAsync } = useScaffoldWriteContract({ contractName: "YourToken" }); const { data: vendorTokenBalance } = useScaffoldReadContract({ contractName: "YourToken", functionName: "balanceOf", args: [vendorContractData?.address], }); const { data: vendorEthBalance } = useWatchBalance({ address: vendorContractData?.address }); const { data: tokensPerEth } = useScaffoldReadContract({ contractName: "Vendor", functionName: "tokensPerEth", }); return ( <>
Your token balance:{" "}
{parseFloat(formatEther(yourTokenBalance || 0n)).toFixed(4)} {yourTokenSymbol}

Vendor token balance:{" "}
{Number(formatEther(vendorTokenBalance || 0n)).toFixed(4)} {yourTokenSymbol}
Vendor eth balance: {Number(formatEther(vendorEthBalance?.value || 0n)).toFixed(4)} ETH
Buy tokens
{tokensPerEth?.toString() || 0} tokens per ETH
setTokensToBuy(value)} disableMultiplyBy1e18 />
{!!yourTokenBalance && (
Transfer tokens
setToAddress(value)} /> setTokensToSend(value as string)} disableMultiplyBy1e18 />
)} {/* Sell Tokens */} {!!yourTokenBalance && (
Sell tokens
{tokensPerEth?.toString() || 0} tokens per ETH
setTokensToSell(value as string)} disabled={isApproved} disableMultiplyBy1e18 />
)}
); }; export default TokenVendor;