From 61138a88b529d70df0e81468052971a4fc4fde16 Mon Sep 17 00:00:00 2001 From: Francisco Ramos Date: Thu, 20 Jul 2023 23:19:27 +0200 Subject: [PATCH] fix(bridge-ui-v2): processing fee and amount input validation (#14220) --- .../Amount.svelte} | 104 +++++++++++------- .../{AmountInput => Amount}/Balance.svelte | 4 +- .../src/components/Bridge/Amount/index.ts | 1 + .../components/Bridge/AmountInput/index.ts | 1 - .../src/components/Bridge/Bridge.svelte | 10 +- .../Bridge/ProcessingFee/NoneOption.svelte | 3 +- .../Bridge/ProcessingFee/ProcessingFee.svelte | 36 +++++- .../ProcessingFee/RecommendedFee.svelte | 3 +- .../Recipient.svelte} | 0 .../src/components/Bridge/Recipient/index.ts | 1 + .../components/Bridge/RecipientInput/index.ts | 1 - .../Bridge/SwitchChainsButton.svelte | 13 ++- .../src/components/Button/Button.svelte | 2 +- .../src/components/Faucet/Faucet.svelte | 28 +++-- .../NotificationToast/ItemToast.svelte | 2 +- packages/bridge-ui-v2/src/i18n/en.json | 14 ++- .../src/libs/bridge/ERC20Bridge.ts | 2 +- .../bridge-ui-v2/src/libs/bridge/ETHBridge.ts | 4 +- .../src/libs/bridge/checkBalanceToBridge.ts | 87 +++++++++++++++ ...MaxToBridge.ts => getMaxAmountToBridge.ts} | 47 ++++---- .../bridge-ui-v2/src/libs/bridge/index.ts | 2 + .../bridge-ui-v2/src/libs/error/errors.ts | 3 + packages/bridge-ui-v2/src/libs/error/index.ts | 1 + .../src/libs/fee/recommendProcessingFee.ts | 10 +- .../src/libs/token/checkMintable.test.ts | 8 +- .../src/libs/token/checkMintable.ts | 11 +- .../src/libs/token/getAddress.test.ts | 20 ++-- .../bridge-ui-v2/src/libs/token/getAddress.ts | 38 +++---- .../src/libs/token/getBalance.test.ts | 27 +++-- .../bridge-ui-v2/src/libs/token/getBalance.ts | 18 +-- .../libs/token/getCrossChainAddress.test.ts | 5 + .../src/libs/token/getCrossChainAddress.ts | 33 ++++++ packages/bridge-ui-v2/src/libs/token/index.ts | 1 + .../src/libs/token/isDeployedCrossChain.ts | 24 ++++ .../bridge-ui-v2/src/libs/token/mint.test.ts | 8 +- packages/bridge-ui-v2/src/libs/token/mint.ts | 9 +- packages/bridge-ui-v2/src/libs/token/types.ts | 5 - .../src/libs/util/getConnectedWallet.test.ts | 5 + .../{getWallet.ts => getConnectedWallet.ts} | 4 +- .../src/libs/util/truncateDecimal.test.ts | 9 ++ .../src/libs/util/truncateString.test.ts | 9 ++ 41 files changed, 435 insertions(+), 178 deletions(-) rename packages/bridge-ui-v2/src/components/Bridge/{AmountInput/AmountInput.svelte => Amount/Amount.svelte} (58%) rename packages/bridge-ui-v2/src/components/Bridge/{AmountInput => Amount}/Balance.svelte (95%) create mode 100644 packages/bridge-ui-v2/src/components/Bridge/Amount/index.ts delete mode 100644 packages/bridge-ui-v2/src/components/Bridge/AmountInput/index.ts rename packages/bridge-ui-v2/src/components/Bridge/{RecipientInput/RecipientInput.svelte => Recipient/Recipient.svelte} (100%) create mode 100644 packages/bridge-ui-v2/src/components/Bridge/Recipient/index.ts delete mode 100644 packages/bridge-ui-v2/src/components/Bridge/RecipientInput/index.ts create mode 100644 packages/bridge-ui-v2/src/libs/bridge/checkBalanceToBridge.ts rename packages/bridge-ui-v2/src/libs/bridge/{getMaxToBridge.ts => getMaxAmountToBridge.ts} (52%) create mode 100644 packages/bridge-ui-v2/src/libs/error/errors.ts create mode 100644 packages/bridge-ui-v2/src/libs/error/index.ts create mode 100644 packages/bridge-ui-v2/src/libs/token/getCrossChainAddress.test.ts create mode 100644 packages/bridge-ui-v2/src/libs/token/getCrossChainAddress.ts create mode 100644 packages/bridge-ui-v2/src/libs/token/isDeployedCrossChain.ts create mode 100644 packages/bridge-ui-v2/src/libs/util/getConnectedWallet.test.ts rename packages/bridge-ui-v2/src/libs/util/{getWallet.ts => getConnectedWallet.ts} (54%) create mode 100644 packages/bridge-ui-v2/src/libs/util/truncateDecimal.test.ts create mode 100644 packages/bridge-ui-v2/src/libs/util/truncateString.test.ts diff --git a/packages/bridge-ui-v2/src/components/Bridge/AmountInput/AmountInput.svelte b/packages/bridge-ui-v2/src/components/Bridge/Amount/Amount.svelte similarity index 58% rename from packages/bridge-ui-v2/src/components/Bridge/AmountInput/AmountInput.svelte rename to packages/bridge-ui-v2/src/components/Bridge/Amount/Amount.svelte index 02e0875364..9775ac2855 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/AmountInput/AmountInput.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/Amount/Amount.svelte @@ -1,12 +1,13 @@ diff --git a/packages/bridge-ui-v2/src/components/Button/Button.svelte b/packages/bridge-ui-v2/src/components/Button/Button.svelte index 0bcab9c66f..b93c011bb4 100644 --- a/packages/bridge-ui-v2/src/components/Button/Button.svelte +++ b/packages/bridge-ui-v2/src/components/Button/Button.svelte @@ -45,7 +45,7 @@ }; $: classes = classNames( - 'btn w-full h-auto min-h-fit border-0', + 'btn h-auto min-h-fit border-0', type === 'primary' ? 'body-bold' : 'body-regular', diff --git a/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte b/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte index 2b7e621a56..95216792d9 100644 --- a/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte +++ b/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte @@ -11,7 +11,8 @@ import { successToast, warningToast } from '$components/NotificationToast'; import { TokenDropdown } from '$components/TokenDropdown'; import { PUBLIC_L1_CHAIN_ID, PUBLIC_L1_CHAIN_NAME, PUBLIC_L1_EXPLORER_URL } from '$env/static/public'; - import { MintableError, testERC20Tokens, type Token } from '$libs/token'; + import { InsufficientBalanceError, TokenMintedError } from '$libs/error'; + import { testERC20Tokens, type Token } from '$libs/token'; import { checkMintable, mint } from '$libs/token'; import { account } from '$stores/account'; import { network } from '$stores/network'; @@ -46,14 +47,14 @@ // During loading state we make sure the user cannot use this function if (checkingMintable || minting) return; - // A token and a source chain must be selected in order to be able to mint + // Token and source chain are needed to mint if (!selectedToken || !$network) return; // Let's begin the minting process minting = true; try { - const txHash = await mint(selectedToken); + const txHash = await mint(selectedToken, $network.id); successToast( $t('faucet.minting_tx', { @@ -69,7 +70,10 @@ } catch (err) { console.error(err); - // const { cause } = error as Error; + const { cause } = err as Error; + if (cause instanceof UserRejectedRequestError) { + warningToast($t('messages.mint.rejected')); + } } finally { minting = false; } @@ -99,13 +103,11 @@ } catch (err) { console.error(err); - const { cause } = err as Error; - - switch (cause) { - case MintableError.INSUFFICIENT_BALANCE: + switch (true) { + case err instanceof InsufficientBalanceError: reasonNotMintable = $t('faucet.warning.insufficient_balance'); break; - case MintableError.TOKEN_MINTED: + case err instanceof TokenMintedError: reasonNotMintable = $t('faucet.warning.token_minted'); break; default: @@ -145,7 +147,11 @@ {#if connected && wrongChain} -