1
- import { PERMIT2_ADDRESS , PermitTransferFrom } from '@uniswap/permit2-sdk' ;
2
-
3
1
import { useCallback } from 'react' ;
4
2
5
3
import { BigNumber , ethers } from 'ethers' ;
6
4
import { t } from 'i18next' ;
7
5
8
6
import { getAssetData , getProtocolContract } from '@sovryn/contracts' ;
9
- import { PermitTransactionResponse , SwapRoute } from '@sovryn/sdk' ;
7
+ import { SwapRoute } from '@sovryn/sdk' ;
10
8
11
9
import {
12
10
Transaction ,
@@ -19,18 +17,13 @@ import { useTransactionContext } from '../../../../contexts/TransactionContext';
19
17
import { useAccount } from '../../../../hooks/useAccount' ;
20
18
import { useCurrentChain } from '../../../../hooks/useChainStore' ;
21
19
import { translations } from '../../../../locales/i18n' ;
22
- import { COMMON_SYMBOLS } from '../../../../utils/asset' ;
23
20
import {
24
21
DEFAULT_SIGNATURE ,
25
22
EMPTY_PERMIT_TRANSFER_FROM ,
26
- getPermitTransferFrom ,
27
23
permitHandler ,
28
24
prepareApproveTransaction ,
29
- preparePermit2Transaction ,
30
- preparePermitTransaction ,
31
- UNSIGNED_PERMIT ,
25
+ prepareTypedDataTransaction ,
32
26
} from '../../../../utils/transactions' ;
33
- import { getRouteContract } from '../ConvertPage.utils' ;
34
27
35
28
export const useHandleConversion = (
36
29
sourceToken : string ,
@@ -138,91 +131,49 @@ export const useHandleConversion = (
138
131
return ;
139
132
}
140
133
141
- const requiresPermit2 =
142
- ! ! route && [ 'ZeroRedemption' , 'MocIntegration' ] . includes ( route . name ) ;
143
-
144
134
const [ sourceTokenDetails , destinationTokenDetails ] = await Promise . all ( [
145
135
getAssetData ( sourceToken , currentChainId ) ,
146
136
getAssetData ( destinationToken , currentChainId ) ,
147
137
] ) ;
148
138
149
- const approveTxData = await route . approve (
150
- sourceTokenDetails . address ,
151
- destinationTokenDetails . address ,
152
- weiAmount ,
153
- account ,
154
- ) ;
155
-
156
139
const transactions : Transaction [ ] = [ ] ;
157
140
158
- if ( requiresPermit2 ) {
159
- const approveTx = await prepareApproveTransaction ( {
160
- token : COMMON_SYMBOLS . DLLR ,
161
- spender : PERMIT2_ADDRESS ,
162
- amount : weiAmount ,
163
- signer,
164
- approveMaximumAmount : true ,
165
- } ) ;
166
-
167
- if ( approveTx ) {
168
- transactions . push ( approveTx ) ;
169
- }
170
- }
171
-
172
- if (
173
- ! requiresPermit2 &&
174
- approveTxData &&
175
- approveTxData . to &&
176
- approveTxData . data
177
- ) {
178
- transactions . push ( {
179
- title : t ( translations . convertPage . txDialog . approve , {
180
- asset : getTokenDisplayName ( sourceToken ) ,
181
- } ) ,
182
- request : {
183
- type : TransactionType . signTransactionData ,
184
- signer : signer ,
185
- to : approveTxData . to ,
186
- data : approveTxData . data ,
187
- gasLimit : approveTxData . gasLimit ?? GAS_LIMIT . APPROVE ,
188
- } ,
189
- onComplete,
190
- } ) ;
191
- }
192
-
193
141
const permitTxData = await route . permit (
194
142
sourceTokenDetails . address ,
195
143
destinationTokenDetails . address ,
196
144
weiAmount ,
197
145
account ,
198
146
) ;
199
147
200
- if ( ! requiresPermit2 && permitTxData ) {
148
+ if ( permitTxData ) {
201
149
transactions . push (
202
- await preparePermitTransaction ( {
203
- token : sourceTokenDetails . symbol ,
204
- signer,
205
- spender : permitTxData . spender ,
206
- value : permitTxData . value ?. toString ( ) ,
207
- deadline : permitTxData . deadline ,
208
- nonce : permitTxData . nonce ,
209
- } ) ,
150
+ await prepareTypedDataTransaction ( permitTxData , signer ) ,
210
151
) ;
211
152
}
212
153
213
- let permitTransferFrom : PermitTransferFrom ;
214
-
215
- if ( requiresPermit2 ) {
216
- const contract = await getRouteContract ( route , signer ) ;
217
-
218
- permitTransferFrom = await getPermitTransferFrom (
219
- contract . address ,
220
- weiAmount . toString ( ) ,
154
+ if ( ! permitTxData || permitTxData . approvalRequired ) {
155
+ const approveTxData = await route . approve (
156
+ sourceTokenDetails . address ,
157
+ destinationTokenDetails . address ,
158
+ weiAmount ,
159
+ account ,
221
160
) ;
222
161
223
- transactions . push (
224
- await preparePermit2Transaction ( permitTransferFrom , signer ) ,
225
- ) ;
162
+ if ( approveTxData ) {
163
+ transactions . push ( {
164
+ title : t ( translations . convertPage . txDialog . approve , {
165
+ asset : getTokenDisplayName ( sourceToken ) ,
166
+ } ) ,
167
+ request : {
168
+ type : TransactionType . signTransactionData ,
169
+ signer : signer ,
170
+ to : approveTxData . to ! ,
171
+ data : approveTxData . data ! ,
172
+ gasLimit : approveTxData . gasLimit ?? GAS_LIMIT . APPROVE ,
173
+ } ,
174
+ onComplete,
175
+ } ) ;
176
+ }
226
177
}
227
178
228
179
const txData = await route . swap (
@@ -231,59 +182,45 @@ export const useHandleConversion = (
231
182
weiAmount ,
232
183
account ,
233
184
{
234
- permit : permitTxData ? UNSIGNED_PERMIT : undefined ,
235
- permitTransferFrom : requiresPermit2
236
- ? EMPTY_PERMIT_TRANSFER_FROM
237
- : undefined ,
238
- signature : DEFAULT_SIGNATURE ,
185
+ typedDataValue : permitTxData
186
+ ? permitTxData . typedData . values
187
+ : EMPTY_PERMIT_TRANSFER_FROM ,
188
+ typedDataSignature : DEFAULT_SIGNATURE ,
239
189
slippage : Number ( slippageTolerance ) * 100 ,
240
190
} ,
241
191
) ;
242
192
243
- if ( txData && txData . to && txData . data ) {
193
+ if ( txData ) {
244
194
transactions . push ( {
245
195
title : t ( translations . convertPage . txDialog . convert , {
246
196
asset : getTokenDisplayName ( sourceToken ) ,
247
197
} ) ,
248
198
request : {
249
199
type : TransactionType . signTransactionData ,
250
200
signer : signer ,
251
- to : txData . to ,
252
- data : txData . data ,
201
+ to : txData . to ! ,
202
+ data : txData . data ! ,
253
203
value : txData . value ,
254
204
gasLimit : txData ?. gasLimit ?? GAS_LIMIT . CONVERT ,
255
205
gasPrice : txData ?. gasPrice ?. toString ( ) ,
256
206
} ,
257
207
onComplete,
258
208
updateHandler : permitHandler ( async ( req , res ) => {
259
209
if ( isSignTransactionDataRequest ( req ) ) {
260
- if ( ! requiresPermit2 && ! ! permitTxData ) {
210
+ if ( ! ! permitTxData ) {
261
211
const { data } = await route . swap (
262
212
sourceTokenDetails . address ,
263
213
destinationTokenDetails . address ,
264
214
weiAmount ,
265
215
account ,
266
216
{
267
- permit : res as PermitTransactionResponse ,
217
+ typedDataValue : permitTxData . typedData . values ,
218
+ typedDataSignature : res as string ,
268
219
slippage : Number ( slippageTolerance ) * 100 ,
269
220
} ,
270
221
) ;
271
222
req . data = data ! ;
272
223
}
273
-
274
- if ( requiresPermit2 && ! ! permitTransferFrom ) {
275
- const { data } = await route . swap (
276
- sourceTokenDetails . address ,
277
- destinationTokenDetails . address ,
278
- weiAmount ,
279
- account ,
280
- {
281
- permitTransferFrom,
282
- signature : typeof res === 'string' ? res : '' ,
283
- } ,
284
- ) ;
285
- req . data = data ! ;
286
- }
287
224
}
288
225
return req ;
289
226
} ) ,
0 commit comments