A contract is bytecode at an address. The ABI is what turns a name you type into the bytes it expects.
const abi = parseAbi([ 'function symbol() view returns (string)', ])
const symbol = await client.readContract({
address: addresses.AcademyToken, abi, functionName: 'symbol',
})
console.log(symbol)A view call costs nothing and is not a transaction.
// A token is deployed on this chain. // Its address is in `addresses.AcademyToken`.