Balance: {formatEther(balance.value)} SEI
+ ); +} +``` + +## Reading a Contract + +```tsx +import { useReadContract } from 'wagmi'; +import { parseAbi } from 'viem'; + +const ERC20_ABI = parseAbi([ + 'function balanceOf(address owner) view returns (uint256)', + 'function symbol() view returns (string)', +]); + +export function TokenBalance({ tokenAddress, owner }: { tokenAddress: `0x${string}`; owner: `0x${string}` }) { + const { data: balance } = useReadContract({ + address: tokenAddress, + abi: ERC20_ABI, + functionName: 'balanceOf', + args: [owner], + }); + + const { data: symbol } = useReadContract({ + address: tokenAddress, + abi: ERC20_ABI, + functionName: 'symbol', + }); + + if (balance === undefined) return null; + + return{balance.toString()} {symbol}
; +} +``` + +## Writing to a Contract + +Use `useWriteContract` for transactions that mutate state, and `useWaitForTransactionReceipt` to track confirmation: + +```tsx +import { useWriteContract, useWaitForTransactionReceipt } from 'wagmi'; +import { parseAbi, parseUnits } from 'viem'; + +const ERC20_ABI = parseAbi([ + 'function transfer(address to, uint256 amount) returns (bool)', +]); + +export function TransferButton({ tokenAddress }: { tokenAddress: `0x${string}` }) { + const { writeContract, data: hash, isPending } = useWriteContract(); + const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ hash }); + + function handleTransfer() { + writeContract({ + address: tokenAddress, + abi: ERC20_ABI, + functionName: 'transfer', + args: ['0xRecipient', parseUnits('10', 18)], + }); + } + + return ( +Transfer confirmed.
} +Connected to chain {chainId}
+ {chainId !== sei.id && ( + + )} +