import type { Client } from '../../clients/createClient.js' import type { Transport } from '../../clients/transports/createTransport.js' import { erc20Abi } from '../../constants/abis.js' import type { BlockTag } from '../../strk-types/lib.js' import type { Chain } from '../../types/chain.js' import { hexToNumber } from '../../utils/encoding/fromHex.js' import { type ReadContractParameters, readContract } from './readContract.js' export type GetBalanceParameters = { address: string blockNumber?: number blockTag?: BlockTag } export type GetBalanceReturnTypes = { balance: number decimals: number symbol: string formatted: string } export type GetBalanceErrorType = any export async function getBalance( client: Client, parameter: GetBalanceParameters, ): Promise { const chain = client.chain const { address, blockNumber, blockTag } = parameter const readContractArgs: ReadContractParameters = { address: chain?.nativeCurrency?.address as string, abi: erc20Abi, functionName: 'balanceOf', args: [address], blockNumber: blockNumber, blockTag, } const balance = await readContract(client, readContractArgs) const decimals = chain?.nativeCurrency?.decimals ?? 18 const symbol = chain?.nativeCurrency?.symbol ?? 'STRK' return { balance: hexToNumber(balance[0]), decimals: decimals, symbol: symbol, formatted: hexToNumber(balance[0]) / 10 ** decimals, } }