@@ -17,9 +17,9 @@ import {
1717 useReadContract ,
1818 useWriteContract ,
1919 useSimulateContract ,
20- useBalance ,
2120} from "wagmi" ;
2221import { parseEther , parseUnits } from "viem" ;
22+ import { normalize } from 'viem/ens'
2323import { isUndefined } from "utils/index" ;
2424import { wrapWithToast } from "utils/wrapWithToast" ;
2525import { ethAddressPattern } from "utils/validateAddress" ;
@@ -58,7 +58,7 @@ const DepositPaymentButton: React.FC = () => {
5858 const [ isSending , setIsSending ] = useState ( false ) ;
5959 const [ isApproved , setIsApproved ] = useState ( false ) ;
6060 const { address, chain } = useAccount ( ) ;
61- const ensResult = useEnsAddress ( { name : sellerAddress , chainId : 1 } ) ;
61+ const ensResult = useEnsAddress ( { name : normalize ( sellerAddress ) , chainId : 1 } ) ;
6262 const deadlineTimestamp = useMemo ( ( ) => BigInt ( Math . floor ( new Date ( deadline ) . getTime ( ) / 1000 ) ) , [ deadline ] ) ;
6363 const isNativeTransaction = sendingToken ?. address === "native" ;
6464 const transactionValue = useMemo (
@@ -68,15 +68,21 @@ const DepositPaymentButton: React.FC = () => {
6868
6969 const finalRecipientAddress = ensResult . data || sellerAddress ;
7070
71- const { data : balanceData } = useBalance ( {
72- address : address as `0x${string } ` | undefined ,
73- token : isNativeTransaction ? undefined : ( sendingToken ?. address as `0x${string } ` | undefined ) ,
71+ const { data : balanceData } = useReadContract ( {
72+ address : isNativeTransaction ? undefined : sendingToken ?. address as `0x${string } `,
73+ abi : erc20Abi ,
74+ functionName : "balanceOf" ,
75+ args : [ address as `0x${string } `] ,
7476 } ) ;
7577
76- const insufficientBalance = parseFloat ( sendingQuantity ) > parseFloat ( balanceData ?. value . toString ( ) || "0" ) ;
78+ const insufficientBalance = useMemo ( ( ) => {
79+ if ( isUndefined ( sendingQuantity ) || isUndefined ( balanceData ) ) return true ;
80+
81+ return BigInt ( sendingQuantity . toString ( ) ) > BigInt ( balanceData . toString ( ) ) ;
82+ } , [ sendingQuantity , balanceData ] ) ;
7783
7884 const { data : allowance , refetch : refetchAllowance } = useReadContract ( {
79- query : { enabled : ! isNativeTransaction && chain ?. id } ,
85+ query : { enabled : ! isNativeTransaction && chain ?. id && ! insufficientBalance } ,
8086 address : sendingToken ?. address ,
8187 abi : erc20Abi ,
8288 functionName : "allowance" ,
@@ -91,7 +97,7 @@ const DepositPaymentButton: React.FC = () => {
9197
9298 const { data : createNativeTransactionConfig } = useSimulateEscrowUniversalCreateNativeTransaction ( {
9399 query : {
94- enabled : isNativeTransaction && ethAddressPattern . test ( finalRecipientAddress ) ,
100+ enabled : isNativeTransaction && ethAddressPattern . test ( finalRecipientAddress ) && ! insufficientBalance ,
95101 } ,
96102 args : [ deadlineTimestamp , transactionUri , finalRecipientAddress ] ,
97103 value : transactionValue ,
@@ -103,7 +109,8 @@ const DepositPaymentButton: React.FC = () => {
103109 ! isNativeTransaction &&
104110 ! isUndefined ( allowance ) &&
105111 allowance >= transactionValue &&
106- ethAddressPattern . test ( finalRecipientAddress ) ,
112+ ethAddressPattern . test ( finalRecipientAddress ) &&
113+ ! insufficientBalance ,
107114 } ,
108115 args : [ transactionValue , sendingToken ?. address , deadlineTimestamp , transactionUri , finalRecipientAddress ] ,
109116 } ) ;
@@ -115,7 +122,7 @@ const DepositPaymentButton: React.FC = () => {
115122 useWriteEscrowUniversalCreateErc20Transaction ( createERC20TransactionConfig ) ;
116123
117124 const { data : approveConfig } = useSimulateContract ( {
118- query : { enabled : ! isNativeTransaction && chain ?. id } ,
125+ query : { enabled : ! isNativeTransaction && chain ?. id && ! insufficientBalance } ,
119126 address : sendingToken ?. address ,
120127 abi : erc20Abi ,
121128 functionName : "approve" ,
0 commit comments