@@ -17,9 +17,9 @@ import {
17
17
useReadContract ,
18
18
useWriteContract ,
19
19
useSimulateContract ,
20
- useBalance ,
21
20
} from "wagmi" ;
22
21
import { parseEther , parseUnits } from "viem" ;
22
+ import { normalize } from 'viem/ens'
23
23
import { isUndefined } from "utils/index" ;
24
24
import { wrapWithToast } from "utils/wrapWithToast" ;
25
25
import { ethAddressPattern } from "utils/validateAddress" ;
@@ -58,7 +58,7 @@ const DepositPaymentButton: React.FC = () => {
58
58
const [ isSending , setIsSending ] = useState ( false ) ;
59
59
const [ isApproved , setIsApproved ] = useState ( false ) ;
60
60
const { address, chain } = useAccount ( ) ;
61
- const ensResult = useEnsAddress ( { name : sellerAddress , chainId : 1 } ) ;
61
+ const ensResult = useEnsAddress ( { name : normalize ( sellerAddress ) , chainId : 1 } ) ;
62
62
const deadlineTimestamp = useMemo ( ( ) => BigInt ( Math . floor ( new Date ( deadline ) . getTime ( ) / 1000 ) ) , [ deadline ] ) ;
63
63
const isNativeTransaction = sendingToken ?. address === "native" ;
64
64
const transactionValue = useMemo (
@@ -68,15 +68,21 @@ const DepositPaymentButton: React.FC = () => {
68
68
69
69
const finalRecipientAddress = ensResult . data || sellerAddress ;
70
70
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 } `] ,
74
76
} ) ;
75
77
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 ] ) ;
77
83
78
84
const { data : allowance , refetch : refetchAllowance } = useReadContract ( {
79
- query : { enabled : ! isNativeTransaction && chain ?. id } ,
85
+ query : { enabled : ! isNativeTransaction && chain ?. id && ! insufficientBalance } ,
80
86
address : sendingToken ?. address ,
81
87
abi : erc20Abi ,
82
88
functionName : "allowance" ,
@@ -91,7 +97,7 @@ const DepositPaymentButton: React.FC = () => {
91
97
92
98
const { data : createNativeTransactionConfig } = useSimulateEscrowUniversalCreateNativeTransaction ( {
93
99
query : {
94
- enabled : isNativeTransaction && ethAddressPattern . test ( finalRecipientAddress ) ,
100
+ enabled : isNativeTransaction && ethAddressPattern . test ( finalRecipientAddress ) && ! insufficientBalance ,
95
101
} ,
96
102
args : [ deadlineTimestamp , transactionUri , finalRecipientAddress ] ,
97
103
value : transactionValue ,
@@ -103,7 +109,8 @@ const DepositPaymentButton: React.FC = () => {
103
109
! isNativeTransaction &&
104
110
! isUndefined ( allowance ) &&
105
111
allowance >= transactionValue &&
106
- ethAddressPattern . test ( finalRecipientAddress ) ,
112
+ ethAddressPattern . test ( finalRecipientAddress ) &&
113
+ ! insufficientBalance ,
107
114
} ,
108
115
args : [ transactionValue , sendingToken ?. address , deadlineTimestamp , transactionUri , finalRecipientAddress ] ,
109
116
} ) ;
@@ -115,7 +122,7 @@ const DepositPaymentButton: React.FC = () => {
115
122
useWriteEscrowUniversalCreateErc20Transaction ( createERC20TransactionConfig ) ;
116
123
117
124
const { data : approveConfig } = useSimulateContract ( {
118
- query : { enabled : ! isNativeTransaction && chain ?. id } ,
125
+ query : { enabled : ! isNativeTransaction && chain ?. id && ! insufficientBalance } ,
119
126
address : sendingToken ?. address ,
120
127
abi : erc20Abi ,
121
128
functionName : "approve" ,
0 commit comments