Files
assetx/webapp/hooks/useTokenDecimals.ts

39 lines
1.1 KiB
TypeScript
Raw Normal View History

import { useReadContract } from 'wagmi'
/** 最小 ERC20 decimals ABI无需引入完整 ABI 文件 */
const DECIMALS_ABI = [
{
inputs: [],
name: 'decimals',
outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }],
stateMutability: 'view',
type: 'function',
},
] as const
/**
* API contractAddress
* decimals() 退 fallback token.decimals
*
* @param contractAddress /Token
* @param fallback token.decimals
*/
export function useTokenDecimalsFromAddress(
contractAddress: string | undefined,
fallback: number = 18
): number {
const { data, isError } = useReadContract({
address: contractAddress as `0x${string}` | undefined,
abi: DECIMALS_ABI,
functionName: 'decimals',
query: {
enabled: !!contractAddress,
staleTime: Infinity,
gcTime: Infinity,
retry: 2,
},
})
return (data !== undefined && !isError) ? Number(data) : fallback
}