import { createPublicClient, http, parseAbi, formatUnits } from 'viem'
import { avalanche } from 'viem/chains'
const client = createPublicClient({
chain: avalanche,
transport: http(),
})
// ERC20 ABI (minimal)
const abi = parseAbi([
'function balanceOf(address) view returns (uint256)',
'function decimals() view returns (uint8)',
'function symbol() view returns (string)',
])
async function readToken() {
// USDC on Avalanche
const usdcAddress = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E'
const userAddress = '0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC'
// Read multiple values at once
const [balance, decimals, symbol] = await Promise.all([
client.readContract({
address: usdcAddress,
abi,
functionName: 'balanceOf',
args: [userAddress],
}),
client.readContract({
address: usdcAddress,
abi,
functionName: 'decimals',
}),
client.readContract({
address: usdcAddress,
abi,
functionName: 'symbol',
}),
])
console.log(`${symbol} Balance:`, formatUnits(balance, decimals))
}
readToken()