@@ -6,13 +6,21 @@ import {
66 hasFailedExit as hasCosmosFailedExit ,
77 isComplete as isCosmosComplete ,
88 nextState as cosmosNextState ,
9- TransferSubmission as CosmosTransferSubmission
9+ TransferSubmission as CosmosTransferSubmission ,
10+ SwitchChainState ,
11+ ApprovalSubmitState ,
12+ TransferSubmitState
1013} from "$lib/services/transfer-ucs03-cosmos"
1114import {
1215 hasFailedExit as hasEvmFailedExit ,
1316 isComplete as isEvmComplete ,
1417 nextState as evmNextState ,
15- TransferSubmission as EvmTransferSubmission
18+ TransferSubmission as EvmTransferSubmission ,
19+ SwitchChainState as EvmSwitchChainState ,
20+ ApprovalSubmitState as EvmApprovalSubmitState ,
21+ ApprovalReceiptState ,
22+ TransferSubmitState as EvmTransferSubmitState ,
23+ TransferReceiptState
1624} from "$lib/services/transfer-ucs03-evm"
1725import { chains } from "$lib/stores/chains.svelte.ts"
1826import { type Address , fromHex , type Hex } from "viem"
@@ -291,8 +299,45 @@ export class Transfer {
291299 const sourceChainValue = this . sourceChain . value
292300
293301 if ( sourceChainValue . rpc_type === "evm" ) {
294- const evmState =
295- this . state . _tag === "EVM" ? this . state . state : EvmTransferSubmission . Filling ( )
302+ let evmState : EvmTransferSubmission
303+ if ( this . state . _tag === "EVM" ) {
304+ // If failed, reset the failed step to InProgress
305+ if ( hasEvmFailedExit ( this . state . state ) ) {
306+ switch ( this . state . state . _tag ) {
307+ case "SwitchChain" :
308+ evmState = EvmTransferSubmission . SwitchChain ( {
309+ state : EvmSwitchChainState . InProgress ( )
310+ } )
311+ break
312+ case "ApprovalSubmit" :
313+ evmState = EvmTransferSubmission . ApprovalSubmit ( {
314+ state : EvmApprovalSubmitState . InProgress ( )
315+ } )
316+ break
317+ case "ApprovalReceipt" :
318+ evmState = EvmTransferSubmission . ApprovalReceipt ( {
319+ state : ApprovalReceiptState . InProgress ( { hash : this . state . state . state . hash } )
320+ } )
321+ break
322+ case "TransferSubmit" :
323+ evmState = EvmTransferSubmission . TransferSubmit ( {
324+ state : EvmTransferSubmitState . InProgress ( )
325+ } )
326+ break
327+ case "TransferReceipt" :
328+ evmState = EvmTransferSubmission . TransferReceipt ( {
329+ state : TransferReceiptState . InProgress ( { hash : this . state . state . state . hash } )
330+ } )
331+ break
332+ default :
333+ evmState = EvmTransferSubmission . Filling ( )
334+ }
335+ } else {
336+ evmState = this . state . state
337+ }
338+ } else {
339+ evmState = EvmTransferSubmission . Filling ( )
340+ }
296341
297342 const newState = await evmNextState ( evmState , this . transferResult . args , sourceChainValue )
298343 this . _stateOverride = newState !== null ? TransferState . EVM ( newState ) : TransferState . Empty ( )
@@ -311,8 +356,35 @@ export class Transfer {
311356 if ( currentEvmState !== null && isEvmComplete ( currentEvmState ) ) break
312357 }
313358 } else {
314- const cosmosState =
315- this . state . _tag === "Cosmos" ? this . state . state : CosmosTransferSubmission . Filling ( )
359+ let cosmosState : CosmosTransferSubmission
360+ if ( this . state . _tag === "Cosmos" ) {
361+ // If failed, reset the failed step to InProgress
362+ if ( hasCosmosFailedExit ( this . state . state ) ) {
363+ switch ( this . state . state . _tag ) {
364+ case "SwitchChain" :
365+ cosmosState = CosmosTransferSubmission . SwitchChain ( {
366+ state : SwitchChainState . InProgress ( )
367+ } )
368+ break
369+ case "ApprovalSubmit" :
370+ cosmosState = CosmosTransferSubmission . ApprovalSubmit ( {
371+ state : ApprovalSubmitState . InProgress ( )
372+ } )
373+ break
374+ case "TransferSubmit" :
375+ cosmosState = CosmosTransferSubmission . TransferSubmit ( {
376+ state : TransferSubmitState . InProgress ( )
377+ } )
378+ break
379+ default :
380+ cosmosState = CosmosTransferSubmission . Filling ( )
381+ }
382+ } else {
383+ cosmosState = this . state . state
384+ }
385+ } else {
386+ cosmosState = CosmosTransferSubmission . Filling ( )
387+ }
316388
317389 const newState = await cosmosNextState (
318390 cosmosState ,
0 commit comments