From f76c9fbedeedc35dbd21c8b35c7e107cb5a742ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 13 May 2026 08:37:29 +0000 Subject: [PATCH 1/3] Initial plan From dd54fa38eea5429645d613f5e3491581d7561b2b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 13 May 2026 08:53:17 +0000 Subject: [PATCH 2/3] fix: ignore nonce call preflight exceptions in reserve swap error modal Agent-Logs-Url: https://github.com/GoodDollar/GoodProtocolUI/sessions/375a3933-7180-41f6-9020-70f85fe2bf1e --- src/pages/gd/Swap/SwapCore/mentoReserve.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pages/gd/Swap/SwapCore/mentoReserve.tsx b/src/pages/gd/Swap/SwapCore/mentoReserve.tsx index e0feb1017..8295f35c1 100644 --- a/src/pages/gd/Swap/SwapCore/mentoReserve.tsx +++ b/src/pages/gd/Swap/SwapCore/mentoReserve.tsx @@ -32,6 +32,9 @@ import useSendAnalyticsData from 'hooks/useSendAnalyticsData' import { useReserveToken } from 'hooks/useReserveToken' import { decodeTransactionErrorReason } from 'utils/transactionErrors' +const isNonceCallException = (errorMessage?: string) => + Boolean(errorMessage && /call_exception/i.test(errorMessage) && /method="?nonce\(\)"?/i.test(errorMessage)) + const MentoSwap = memo(() => { const CUSD = useReserveToken() const { i18n } = useLingui() @@ -112,13 +115,13 @@ const MentoSwap = memo(() => { const sendData = useSendAnalyticsData() useEffect(() => { - if (swap?.state?.status === 'Exception') { + if (swap?.state?.status === 'Exception' && !isNonceCallException(swap?.state?.errorMessage)) { setError({ message: i18n._(t`Swap transaction failed, please try again.`), reason: decodeTransactionErrorReason(swap.state.errorMessage), }) } - if (approve?.state?.status === 'Exception') { + if (approve?.state?.status === 'Exception' && !isNonceCallException(approve?.state?.errorMessage)) { setError({ message: i18n._(t`Approve transaction failed, please try again.`), reason: decodeTransactionErrorReason(approve.state.errorMessage), From 9c4914603b6b11f50097c45b43cc9f42005a5b2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 13 May 2026 09:02:36 +0000 Subject: [PATCH 3/3] refactor: inline nonce preflight filter checks for reserve swap exceptions Agent-Logs-Url: https://github.com/GoodDollar/GoodProtocolUI/sessions/375a3933-7180-41f6-9020-70f85fe2bf1e --- src/pages/gd/Swap/SwapCore/mentoReserve.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/pages/gd/Swap/SwapCore/mentoReserve.tsx b/src/pages/gd/Swap/SwapCore/mentoReserve.tsx index 8295f35c1..8aa02849a 100644 --- a/src/pages/gd/Swap/SwapCore/mentoReserve.tsx +++ b/src/pages/gd/Swap/SwapCore/mentoReserve.tsx @@ -32,8 +32,8 @@ import useSendAnalyticsData from 'hooks/useSendAnalyticsData' import { useReserveToken } from 'hooks/useReserveToken' import { decodeTransactionErrorReason } from 'utils/transactionErrors' -const isNonceCallException = (errorMessage?: string) => - Boolean(errorMessage && /call_exception/i.test(errorMessage) && /method="?nonce\(\)"?/i.test(errorMessage)) +const NONCE_METHOD_REGEX = /method\s*=\s*"nonce\(\)"/i +const CALL_EXCEPTION_REGEX = /call_exception/i const MentoSwap = memo(() => { const CUSD = useReserveToken() @@ -115,13 +115,24 @@ const MentoSwap = memo(() => { const sendData = useSendAnalyticsData() useEffect(() => { - if (swap?.state?.status === 'Exception' && !isNonceCallException(swap?.state?.errorMessage)) { + const isSwapPreflightNonceException = Boolean( + swap?.state?.errorMessage && + CALL_EXCEPTION_REGEX.test(swap.state.errorMessage) && + NONCE_METHOD_REGEX.test(swap.state.errorMessage) + ) + const isApprovePreflightNonceException = Boolean( + approve?.state?.errorMessage && + CALL_EXCEPTION_REGEX.test(approve.state.errorMessage) && + NONCE_METHOD_REGEX.test(approve.state.errorMessage) + ) + + if (swap?.state?.status === 'Exception' && !isSwapPreflightNonceException) { setError({ message: i18n._(t`Swap transaction failed, please try again.`), reason: decodeTransactionErrorReason(swap.state.errorMessage), }) } - if (approve?.state?.status === 'Exception' && !isNonceCallException(approve?.state?.errorMessage)) { + if (approve?.state?.status === 'Exception' && !isApprovePreflightNonceException) { setError({ message: i18n._(t`Approve transaction failed, please try again.`), reason: decodeTransactionErrorReason(approve.state.errorMessage),