@@ -224,160 +224,139 @@ const transfer = async () => {
224
224
return
225
225
}
226
226
}
227
+ } else if (sourceChain .rpc_type === " evm" ) {
228
+ const connectorClient = await getConnectorClient (config )
229
+ const selectedChain = evmChainFromChainId (sourceChain .chain_id )
230
+
231
+ const unionClient = createUnionClient ({
232
+ account: connectorClient .account ,
233
+ chainId: sourceChain .chain_id as EvmChainId ,
234
+ transport: custom (window .ethereum ) as unknown as HttpTransport
235
+ })
236
+
237
+ if (! selectedChain ) {
238
+ toast .error (" From chain not found or supported" )
239
+ return
240
+ }
241
+
242
+ if ($userAddrEvm === null ) return toast .error (" No Cosmos user address found" )
243
+
244
+ if (window .ethereum === undefined ) raise (" no ethereum browser extension" )
245
+
246
+ if (stepBefore ($transferState , " SWITCHING_TO_CHAIN" )) {
247
+ transferState .set ({ kind: " SWITCHING_TO_CHAIN" })
248
+ }
249
+
250
+ if ($transferState .kind === " SWITCHING_TO_CHAIN" ) {
251
+ if ($transferState .warning ) {
252
+ transferState .set ({ kind: " APPROVING_ASSET" })
253
+ transfer ()
254
+ return
255
+ }
256
+ // ^ the user is continuing continuing after having seen the warning
257
+
258
+ try {
259
+ await switchChain (config , { chainId: selectedChain .id })
260
+ } catch (error ) {
261
+ if (error instanceof Error ) {
262
+ transferState .set ({ kind: " SWITCHING_TO_CHAIN" , warning: error })
263
+ }
264
+ return
265
+ }
266
+ transferState .set ({ kind: " APPROVING_ASSET" })
267
+ }
268
+
269
+ if ($transferState .kind === " APPROVING_ASSET" ) {
270
+ let hash: ` 0x${string } ` | null = null
271
+
272
+ try {
273
+ const approve = await unionClient .approveErc20 (transferArgs )
274
+
275
+ if (approve .isErr ()) throw approve .error
276
+ hash = approve .value
277
+ } catch (error ) {
278
+ if (error instanceof Error ) {
279
+ transferState .set ({ kind: " APPROVING_ASSET" , error })
280
+ }
281
+ return
282
+ }
283
+ transferState .set ({ kind: " AWAITING_APPROVAL_RECEIPT" , hash })
284
+ }
285
+
286
+ if ($transferState .kind === " AWAITING_APPROVAL_RECEIPT" ) {
287
+ try {
288
+ await waitForTransactionReceipt (config , { hash: $transferState .hash })
289
+ } catch (error ) {
290
+ if (error instanceof Error ) {
291
+ transferState .set ({
292
+ kind: " AWAITING_APPROVAL_RECEIPT" ,
293
+ hash: $transferState .hash ,
294
+ error
295
+ })
296
+ }
297
+ return
298
+ }
299
+ transferState .set ({ kind: " SIMULATING_TRANSFER" })
300
+ }
301
+
302
+ if ($transferState .kind === " SIMULATING_TRANSFER" ) {
303
+ console .log (" simulating transfer step" )
304
+
305
+ if ($transferState .warning ) {
306
+ transferState .set ({ kind: " CONFIRMING_TRANSFER" , contractRequest: null })
307
+ transfer ()
308
+ return
309
+ }
310
+
311
+ // ^ the user is continuing continuing after having seen the warning
312
+
313
+ console .log (" confirming transfers test" )
314
+
315
+ try {
316
+ transferState .set ({ kind: " CONFIRMING_TRANSFER" , contractRequest: null })
317
+ } catch (error ) {
318
+ if (error instanceof Error ) {
319
+ transferState .set ({ kind: " SIMULATING_TRANSFER" , warning: error })
320
+ }
321
+ return
322
+ }
323
+ }
324
+
325
+ if ($transferState .kind === " CONFIRMING_TRANSFER" ) {
326
+ try {
327
+ const transfer = await unionClient .transferAsset (transferArgs )
328
+ if (transfer .isErr ()) throw transfer .error
329
+ transferState .set ({ kind: " AWAITING_TRANSFER_RECEIPT" , transferHash: transfer .value })
330
+ } catch (error ) {
331
+ if (error instanceof Error ) {
332
+ transferState .set ({
333
+ kind: " CONFIRMING_TRANSFER" ,
334
+ contractRequest: $transferState .contractRequest ,
335
+ error
336
+ })
337
+ }
338
+ }
339
+ }
340
+
341
+ if ($transferState .kind === " AWAITING_TRANSFER_RECEIPT" ) {
342
+ try {
343
+ await waitForTransactionReceipt (config , {
344
+ hash: $transferState .transferHash
345
+ })
346
+ transferState .set ({ kind: " TRANSFERRING" , transferHash: $transferState .transferHash })
347
+ } catch (error ) {
348
+ if (error instanceof Error ) {
349
+ transferState .set ({
350
+ kind: " AWAITING_TRANSFER_RECEIPT" ,
351
+ transferHash: $transferState .transferHash ,
352
+ error
353
+ })
354
+ }
355
+ }
356
+ }
357
+ } else {
358
+ console .error (" invalid rpc type" )
227
359
}
228
- // else if ($validation.transfer.sourceChain.rpc_type === "evm") {
229
- // const connectorClient = await getConnectorClient(config)
230
- // const selectedChain = evmChainFromChainId($validation.transfer.sourceChain.chain_id)
231
- //
232
- // const unionClient = createUnionClient({
233
- // account: connectorClient.account,
234
- // chainId: $validation.transfer.sourceChain.chain_id as EvmChainId,
235
- // transport: custom(window.ethereum) as unknown as HttpTransport
236
- // })
237
- //
238
- // if (!selectedChain) {
239
- // toast.error("From chain not found or supported")
240
- // return
241
- // }
242
- //
243
- // if ($userAddrEvm === null) return toast.error("No Cosmos user address found")
244
- //
245
- // if (window.ethereum === undefined) raise("no ethereum browser extension")
246
- //
247
- // if (stepBefore($transferState, "SWITCHING_TO_CHAIN")) {
248
- // transferState.set({ kind: "SWITCHING_TO_CHAIN" })
249
- // }
250
- //
251
- // if ($transferState.kind === "SWITCHING_TO_CHAIN") {
252
- // if ($transferState.warning) {
253
- // transferState.set({ kind: "APPROVING_ASSET" })
254
- // transfer()
255
- // return
256
- // }
257
- // // ^ the user is continuing continuing after having seen the warning
258
- //
259
- // try {
260
- // await switchChain(config, { chainId: selectedChain.id })
261
- // } catch (error) {
262
- // if (error instanceof Error) {
263
- // transferState.set({ kind: "SWITCHING_TO_CHAIN", warning: error })
264
- // }
265
- // return
266
- // }
267
- // transferState.set({ kind: "APPROVING_ASSET" })
268
- // }
269
- //
270
- // if ($transferState.kind === "APPROVING_ASSET") {
271
- // let hash: `0x${string}` | null = null
272
- //
273
- // try {
274
- // console.log({
275
- // amount: parsedAmount,
276
- // receiver: $validation.transfer.receiver,
277
- // denomAddress: getAddress($validation.transfer.asset.metadata.denom),
278
- // // TODO: verify chain id is correct
279
- // destinationChainId: $validation.transfer.destinationChain.chain_id as ChainId
280
- // })
281
- //
282
- // const approve = await unionClient.approveTransaction({
283
- // amount: parsedAmount,
284
- // receiver: $validation.transfer.receiver,
285
- // denomAddress: getAddress($validation.transfer.asset.metadata.denom),
286
- // // TODO: verify chain id is correct
287
- // destinationChainId: $validation.transfer.destinationChain.chain_id as ChainId
288
- // })
289
- //
290
- // if (approve.isErr()) throw approve.error
291
- // hash = approve.value
292
- // } catch (error) {
293
- // if (error instanceof Error) {
294
- // transferState.set({ kind: "APPROVING_ASSET", error })
295
- // }
296
- // return
297
- // }
298
- // transferState.set({ kind: "AWAITING_APPROVAL_RECEIPT", hash })
299
- // }
300
- //
301
- // if ($transferState.kind === "AWAITING_APPROVAL_RECEIPT") {
302
- // try {
303
- // await waitForTransactionReceipt(config, { hash: $transferState.hash })
304
- // } catch (error) {
305
- // if (error instanceof Error) {
306
- // transferState.set({
307
- // kind: "AWAITING_APPROVAL_RECEIPT",
308
- // hash: $transferState.hash,
309
- // error
310
- // })
311
- // }
312
- // return
313
- // }
314
- // transferState.set({ kind: "SIMULATING_TRANSFER" })
315
- // }
316
- //
317
- // if ($transferState.kind === "SIMULATING_TRANSFER") {
318
- // console.log("simulating transfer step")
319
- //
320
- // if ($transferState.warning) {
321
- // transferState.set({ kind: "CONFIRMING_TRANSFER", contractRequest: null })
322
- // transfer()
323
- // return
324
- // }
325
- //
326
- // // ^ the user is continuing continuing after having seen the warning
327
- //
328
- // console.log("confirming transfers test")
329
- //
330
- // try {
331
- // transferState.set({ kind: "CONFIRMING_TRANSFER", contractRequest: null })
332
- // } catch (error) {
333
- // if (error instanceof Error) {
334
- // transferState.set({ kind: "SIMULATING_TRANSFER", warning: error })
335
- // }
336
- // return
337
- // }
338
- // }
339
- //
340
- // if ($transferState.kind === "CONFIRMING_TRANSFER") {
341
- // try {
342
- // const transfer = await unionClient.transferAsset({
343
- // autoApprove: false,
344
- // amount: parsedAmount,
345
- // receiver: $validation.transfer.receiver,
346
- // denomAddress: getAddress($validation.transfer.asset.metadata.denom),
347
- // destinationChainId: $validation.transfer.destinationChain.chain_id as ChainId
348
- // })
349
- // if (transfer.isErr()) throw transfer.error
350
- // transferState.set({ kind: "AWAITING_TRANSFER_RECEIPT", transferHash: transfer.value })
351
- // } catch (error) {
352
- // if (error instanceof Error) {
353
- // transferState.set({
354
- // kind: "CONFIRMING_TRANSFER",
355
- // contractRequest: $transferState.contractRequest,
356
- // error
357
- // })
358
- // }
359
- // }
360
- // }
361
- //
362
- // if ($transferState.kind === "AWAITING_TRANSFER_RECEIPT") {
363
- // try {
364
- // await waitForTransactionReceipt(config, {
365
- // hash: $transferState.transferHash
366
- // })
367
- // transferState.set({ kind: "TRANSFERRING", transferHash: $transferState.transferHash })
368
- // } catch (error) {
369
- // if (error instanceof Error) {
370
- // transferState.set({
371
- // kind: "AWAITING_TRANSFER_RECEIPT",
372
- // transferHash: $transferState.transferHash,
373
- // error
374
- // })
375
- // }
376
- // }
377
- // }
378
- // } else {
379
- // console.error("invalid rpc type")
380
- // }
381
360
382
361
if ($transferState .kind === " TRANSFERRING" ) {
383
362
await sleep (REDIRECT_DELAY_MS )
0 commit comments