Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/consts/wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,11 @@ export const SANCTIONED_WALLETS = Object.freeze(
'TMuCgBejD5RsNANZdjGtaM3YyKGNgDoy7N',
'TNmRfnSUXZoWWzxcDDbf95eGQYXt1mJDt8',
'TNZxGWCwvsHr6JxQxzoeDXV597Yf7Zb7nV',
'TQ5H49Wz3K57zNHmuXVp6uLzFwitxviABs',
'TQ5mpZPbQMSq2s1vSM3RJgiB1AsTsiTpFZ',
'TRakpsE1mZjCUMNPyozR4BW2ZtJsF7ZWFN',
'TRBACioxdrdsYEZHvJWiUDZcMdBPpEe5Ub',
'TSxAAo67VTDgKT537EVXxdogkJtk9c6ojz',
'TTAHMdqoom4f2VTWniroPWQHcTRZ4caoH4',
'TTgcTTNbNuFdbrhvbjMZVrdU5KALyzDaPw',
'TTKnV2S1295UrPr7N67Tp9ykNL7xX2Z4Uj',
Expand All @@ -236,6 +239,7 @@ export const SANCTIONED_WALLETS = Object.freeze(
'TX5GV4DyfxNB3rPkzZJhmqZ1efVmL4rEqG',
'TXEaKf4rT3rMoD3Vuqnuhwr6vLq6BL5t33',
'TXEsK1sEsKjZ1xtHitnyAAoqw3WLdYdRNW',
'TYDUutYN4YLKUPeT7TG27Yyqw6kNVLq9QZ',
'XnPFsRWTaSgiVauosEwQ6dEitGYXgwznz2',
'Xs3vzQmNvAxRa3Xo8XzQqUb3BMgb9EogF4',
'XyARKoupuArYtToA2S6yMdnoquDCDaBsaT',
Expand All @@ -259,6 +263,7 @@ export const SANCTIONED_WALLETS = Object.freeze(
'0x43fa21d92141BA9db43052492E0DeEE5aa5f0A93',
'0x4F47Bc496083C727c5fbe3CE9CDf2B0f6496270c',
'0x530A64c0Ce595026a4A556b703644228179E2d57',
'0x532B77B33A040587e9FD1800088225f99b8B0E8A',
'0x53b6936513e738f44FB50d2b9476730C0Ab3Bfc1',
'0x57EC89A0C056163A0314e413320f9B3ABe761259',
'0x5A7a51bFb49F190e5A6060a5bc6052Ac14a3b59f',
Expand All @@ -284,7 +289,9 @@ export const SANCTIONED_WALLETS = Object.freeze(
'0xd5ED34b52AC4ab84d8FA8A231a3218bbF01Ed510',
'0xD8500C631dC32FA18645B7436344a99E4825e10e',
'0xd882cFc20F52f2599D84b8e8D58C7FB62cfE344b',
'0xDb2720ebAd55399117ddB4C4a4afd9a4CCAda8fE',
'0xdcbEfFBECcE100cCE9E4b153C4e15cB885643193',
'0xE3D35f68383732649669aA990832E017340DbcA5',
'0xE950DC316b836e4EeFb8308bf32Bf7C72a1358FF',
'0xeD6e0A7e4Ac94D976eeBfB82ccf777A3c6baD921',
'0xf3701F445b6BDaFeDbcA97D1e477357839e4120D',
Expand Down
31 changes: 19 additions & 12 deletions src/utils/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,22 @@ import {
} from 'telemetry/types';
import { InsufficientFundsForGasError } from 'sdklegacy';
import { routes, amount as sdkAmount } from '@wormhole-foundation/sdk';
import { chainDisplayName, getGasToken, getTokenSymbol } from 'utils';

// TODO SDKV2
// attempt to capture errors using regex
export const INSUFFICIENT_ALLOWANCE_REGEX = /insufficient token allowance/im;
export const INSUFFICIENT_LAMPORTS_REGEX =
/insufficient lamports.*?(\d+).*?(\d+)/im;
export const SIMULATION_ACCOUNT_NOT_FOUND_REGEX =
/simulation failed:.*accountnotfound/i;
export const USER_REJECTED_REGEX = new RegExp(
'user rejected|rejected the request|rejected from user|user cancel|aborted by user|plugin closed|denied request signature',
'mi',
);
export const AMOUNT_IN_TOO_SMALL = new RegExp('AmountInTooSmall', 'm');
const INSUFFICIENT_FUNDS_FOR_GAS_ERROR =
'Insufficient funds for network fees. Please add more funds and try again';

export function interpretTransferError(
e: any,
Expand All @@ -50,7 +55,7 @@ export function interpretTransferError(
uiErrorMessage = 'Transfer timed out, please try again';
internalErrorCode = ERR_TIMEOUT;
} else if (InsufficientFundsForGasError.MESSAGE_REGEX.test(e?.message)) {
uiErrorMessage = 'Insufficient funds';
uiErrorMessage = INSUFFICIENT_FUNDS_FOR_GAS_ERROR;
internalErrorCode = ERR_INSUFFICIENT_GAS;
} else if (USER_REJECTED_REGEX.test(e?.message)) {
uiErrorMessage = 'Transfer rejected in wallet, please try again';
Expand All @@ -74,17 +79,19 @@ export function interpretTransferError(
: '';
uiErrorMessage = `Amount exceeds Circle limit${limitString}. Please reduce transfer amount.`;
internalErrorCode = ERR_AMOUNT_TOO_LARGE;
} else if (INSUFFICIENT_LAMPORTS_REGEX.test(e?.message)) {
const lamportMatches = e?.message.match(INSUFFICIENT_LAMPORTS_REGEX);
const currentLamports = lamportMatches?.[1];
const requiredLamports = lamportMatches?.[2];
uiErrorMessage = `Insufficient funds for gas.`;
if (currentLamports && requiredLamports) {
const currentAmount = sdkAmount.fromBaseUnits(currentLamports, 9);
const requiredAmount = sdkAmount.fromBaseUnits(requiredLamports, 9);
uiErrorMessage += ` Current balance is ${sdkAmount.display(
currentAmount,
)} SOL, but required ${sdkAmount.display(requiredAmount)} SOL`;
} else if (
SIMULATION_ACCOUNT_NOT_FOUND_REGEX.test(e?.message) ||
INSUFFICIENT_LAMPORTS_REGEX.test(e?.message)
) {
const gasChain = transferDetails.fromChain;
try {
const gasToken = getGasToken(gasChain);
const gasSymbol = getTokenSymbol(gasToken);
const chainName = chainDisplayName(gasChain);
const chainSuffix = chainName ? ` on ${chainName}` : '';
uiErrorMessage = `Insufficient ${gasSymbol} for fees${chainSuffix}. Please add more ${gasSymbol} and try again`;
} catch {
uiErrorMessage = INSUFFICIENT_FUNDS_FOR_GAS_ERROR;
}
internalErrorCode = ERR_INSUFFICIENT_GAS;
}
Expand Down
Loading