import { PERMIT2_MAP } from '@prex0/prex-structs'; import { Address, erc20Abi, PublicActions } from 'viem'; export async function fetchBalanceCall( client: PublicActions, chainId: number, token: Address, user: Address ) { const results = await client.multicall({ contracts: [ { address: token, abi: erc20Abi, functionName: 'balanceOf', args: [user], }, { address: token, abi: erc20Abi, functionName: 'allowance', args: [user, PERMIT2_MAP[chainId]], }, ], }); return { balance: results[0].status === 'success' ? BigInt(results[0].result) : undefined, allowance: results[1].status === 'success' ? BigInt(results[1].result) : undefined, }; } export async function fetchBalanceBatch( client: PublicActions, tokens: Address[], user: Address ) { const results = await client.multicall({ contracts: tokens.map((token) => ({ address: token, abi: erc20Abi, functionName: 'balanceOf', args: [user], })), }); return results.map((result, index) => ({ token: tokens[index], balance: result.status === 'success' ? BigInt(result.result) : undefined, isSuccess: result.status === 'success', })); }