From 2ef6c980bce7eef7bf67b71330a7c73a732335e6 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Wed, 18 Sep 2024 17:31:12 -0500 Subject: [PATCH] Fix transfer completion bug in manual transfer claims When claiming a manual transfer, the useTrackTransfer hook sometimes marked the transfer as complete before the async function triggered by the claim button finished. This allowed users to start a new transfer prematurely, causing the new transfer to be erroneously marked as complete. We should rely solely on the useTrackTransfer hook to set the transfer as complete and handle the redeem transaction. This change prevents the bug and moves the transfer.redeem.start event trigger to before the routes redeem function call. --- wormhole-connect/src/views/v2/Redeem/index.tsx | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/wormhole-connect/src/views/v2/Redeem/index.tsx b/wormhole-connect/src/views/v2/Redeem/index.tsx index 80ac2ced1..1c6823942 100644 --- a/wormhole-connect/src/views/v2/Redeem/index.tsx +++ b/wormhole-connect/src/views/v2/Redeem/index.tsx @@ -26,7 +26,6 @@ import { RouteContext } from 'contexts/RouteContext'; import useTrackTransfer from 'hooks/useTrackTransfer'; import PoweredByIcon from 'icons/PoweredBy'; import { SDKv2Signer } from 'routes/sdkv2/signer'; -import { setRedeemTx, setTransferComplete } from 'store/redeem'; import { setRoute } from 'store/router'; import { displayAddress, millisToHumanString } from 'utils'; import { interpretTransferError } from 'utils/errors'; @@ -447,6 +446,11 @@ const Redeem = () => { let receipt: routes.Receipt | undefined; + config.triggerEvent({ + type: 'transfer.redeem.start', + details: transferDetails, + }); + if (isTxDestQueued && routes.isFinalizable(route)) { receipt = await route.finalize(signer, routeContext.receipt); } else if (!isTxDestQueued && routes.isManual(route)) { @@ -461,11 +465,6 @@ const Redeem = () => { txId = receipt.destinationTxs[receipt.destinationTxs.length - 1].txid; } - config.triggerEvent({ - type: 'transfer.redeem.start', - details: transferDetails, - }); - setIsClaimInProgress(false); setClaimError(''); } catch (e: any) { @@ -483,13 +482,6 @@ const Redeem = () => { console.error(e); } if (txId !== undefined) { - dispatch(setRedeemTx(txId)); - - // Transfer may require an additional step if this is a finalizable route - if (!routes.isFinalizable(route)) { - dispatch(setTransferComplete(true)); - } - config.triggerEvent({ type: 'transfer.redeem.success', details: transferDetails,