From b3b9dcd1ff1fc5fcaaaed26846a67baac5d54965 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Mon, 5 Dec 2022 09:36:24 -0800 Subject: [PATCH] refactor: return swap errors as string (#318) --- src/utils/swapErrorToUserReadableMessage.tsx | 68 ++++++-------------- 1 file changed, 20 insertions(+), 48 deletions(-) diff --git a/src/utils/swapErrorToUserReadableMessage.tsx b/src/utils/swapErrorToUserReadableMessage.tsx index 6f202cf49..694c07714 100644 --- a/src/utils/swapErrorToUserReadableMessage.tsx +++ b/src/utils/swapErrorToUserReadableMessage.tsx @@ -1,11 +1,17 @@ -import { Trans } from '@lingui/macro' -import { ReactNode } from 'react' +import { t } from '@lingui/macro' +import { ErrorCode } from 'constants/eip1193' /** * This is hacking out the revert reason from the ethers provider thrown error however it can. * This object seems to be undocumented by ethers. * @param error an error from the ethers provider */ -export function swapErrorToUserReadableMessage(error: any): ReactNode { +export function swapErrorToUserReadableMessage(error: any): string { + if (error.code) { + if (error.code === ErrorCode.USER_REJECTED_REQUEST) { + return t`transaction rejected.` + } + } + let reason: string | undefined while (Boolean(error)) { reason = error.reason ?? error.message ?? reason @@ -16,63 +22,29 @@ export function swapErrorToUserReadableMessage(error: any): ReactNode { switch (reason) { case 'UniswapV2Router: EXPIRED': - return ( - - The transaction could not be sent because the deadline has passed. Please check that your transaction deadline - is not too low. - - ) + return t`The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.` case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT': case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT': - return ( - - This transaction will not succeed either due to price movement or fee on transfer. Try increasing your - slippage tolerance. - - ) + return t`This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.` case 'TransferHelper: TRANSFER_FROM_FAILED': - return The input token cannot be transferred. There may be an issue with the input token. + return t`The input token cannot be transferred. There may be an issue with the input token.` case 'UniswapV2: TRANSFER_FAILED': - return The output token cannot be transferred. There may be an issue with the output token. + return t`The output token cannot be transferred. There may be an issue with the output token.` case 'UniswapV2: K': - return ( - - The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are - swapping incorporates custom behavior on transfer. - - ) + return t`The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.` case 'Too little received': case 'Too much requested': case 'STF': - return ( - - This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on - transfer and rebase tokens are incompatible with Uniswap V3. - - ) + return t`This transaction will not succeed due to price movement. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.` case 'TF': - return ( - - The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and - rebase tokens are incompatible with Uniswap V3. - - ) + return t`The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.` default: if (reason?.indexOf('undefined is not an object') !== -1) { console.error(error, reason) - return ( - - An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If - that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer - and rebase tokens are incompatible with Uniswap V3. - - ) + return t`An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.` } - return ( - - Unknown error{reason ? `: "${reason}"` : ''}. Try increasing your slippage tolerance. Note: fee on transfer - and rebase tokens are incompatible with Uniswap V3. - - ) + return t`Unknown error${ + reason ? `: "${reason}"` : '' + }. Try increasing your slippage tolerance. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.` } }