diff --git a/packages/bridge-ui-v2/src/components/Bridge/Actions.svelte b/packages/bridge-ui-v2/src/components/Bridge/Actions.svelte index e11ab7f87c3..65cbba4e596 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/Actions.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/Actions.svelte @@ -1,9 +1,11 @@
diff --git a/packages/bridge-ui-v2/src/components/Bridge/Amount.svelte b/packages/bridge-ui-v2/src/components/Bridge/Amount.svelte index 7fb1d4fed4b..1d5558ff53b 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/Amount.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/Amount.svelte @@ -106,7 +106,6 @@ invalidInput = true; break; } - console.error('Error validating amount: ', err); } finally { $validatingAmount = false; } diff --git a/packages/bridge-ui-v2/src/components/Bridge/Bridge.svelte b/packages/bridge-ui-v2/src/components/Bridge/Bridge.svelte index 22f342c7848..6917df30f8b 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/Bridge.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/Bridge.svelte @@ -54,6 +54,7 @@ function onNetworkChange(newNetwork: Network, oldNetwork: Network) { resetForm(); + $selectedToken = ETHToken; if (newNetwork) { const destChainId = $destinationChain?.id; @@ -216,8 +217,11 @@ // Reset the form resetForm(); - // Refresh user's balance + // Refresh user's ETH balance refreshUserBalance(); + + // Update amount balance after bridging + if (amountComponent) amountComponent.updateBalance(); } catch (err) { console.error(err); handleBridgeError(err as Error); @@ -230,10 +234,6 @@ if (recipientComponent) recipientComponent.clearRecipient(); if (processingFeeComponent) processingFeeComponent.resetProcessingFee(); - // Update balance after bridging - if (amountComponent) amountComponent.updateBalance(); - - $selectedToken = ETHToken; bridging = false; }; diff --git a/packages/bridge-ui-v2/src/components/Bridge/IDInput/IDInput.svelte b/packages/bridge-ui-v2/src/components/Bridge/IDInput/IDInput.svelte index 5931ded1c32..61b6c1a569a 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/IDInput/IDInput.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/IDInput/IDInput.svelte @@ -1,5 +1,5 @@
diff --git a/packages/bridge-ui-v2/src/components/Bridge/NFTBridge.svelte b/packages/bridge-ui-v2/src/components/Bridge/NFTBridge.svelte index c462db68a10..f0ce40d9708 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/NFTBridge.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/NFTBridge.svelte @@ -111,7 +111,6 @@ $recipientAddress = $account?.address || null; bridgingStatus = 'pending'; - $selectedToken = ETHToken; importMethod === null; scanned = false; @@ -126,7 +125,9 @@ let activeStep: NFTSteps = NFTSteps.IMPORT; const nextStep = () => (activeStep = Math.min(activeStep + 1, NFTSteps.CONFIRM)); - const previousStep = () => (activeStep = Math.max(activeStep - 1, NFTSteps.IMPORT)); + const previousStep = () => { + activeStep = Math.max(activeStep - 1, NFTSteps.IMPORT); + }; let nftStepTitle: string; let nftStepDescription: string; @@ -316,7 +317,7 @@ >{$t('bridge.nft.step.confirm.button.back')} {:else} - {/if} diff --git a/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ConfirmationStep.svelte b/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ConfirmationStep.svelte index 481e0df4e5b..e2169ec7a3e 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ConfirmationStep.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ConfirmationStep.svelte @@ -14,9 +14,11 @@ import type { ERC1155Bridge } from '$libs/bridge/ERC1155Bridge'; import { getBridgeArgs } from '$libs/bridge/getBridgeArgs'; import { handleBridgeError } from '$libs/bridge/handleBridgeErrors'; + import { BridgePausedError } from '$libs/error'; import { bridgeTxService } from '$libs/storage'; import { TokenType } from '$libs/token'; import { getCrossChainAddress } from '$libs/token/getCrossChainAddress'; + import { isBridgePaused } from '$libs/util/checkForPausedContracts'; import { getConnectedWallet } from '$libs/util/getConnectedWallet'; import { account } from '$stores/account'; import { network } from '$stores/network'; @@ -86,6 +88,10 @@ }; async function approve() { + isBridgePaused().then((paused) => { + if (paused) throw new BridgePausedError('Bridge is paused'); + }); + try { if (!$selectedToken || !$network || !$destNetwork?.id) return; const type: TokenType = $selectedToken.type; diff --git a/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ImportStep.svelte b/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ImportStep.svelte index ec1e4426017..ee76cc98c64 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ImportStep.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ImportStep.svelte @@ -1,7 +1,7 @@
@@ -243,13 +246,10 @@ Manual NFT Input class="bg-neutral-background border-0 h-[56px]" on:addressvalidation={onAddressValidation} labelText={$t('inputs.address_input.label.contract')} /> - - {#if !interfaceSupported} +
- {#if !isOwnerOfAllToken && nftIdArray?.length > 0 && !validating} - + {#if displayOwnershipError} + {/if}
diff --git a/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ReviewStep.svelte b/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ReviewStep.svelte index 1e402ccfd55..f5c95f09ec6 100644 --- a/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ReviewStep.svelte +++ b/packages/bridge-ui-v2/src/components/Bridge/NFTBridgeSteps/ReviewStep.svelte @@ -12,18 +12,18 @@ import { shortenAddress } from '$libs/util/shortenAddress'; import { network } from '$stores/network'; + export let hasEnoughEth: boolean = false; + let recipientComponent: Recipient; let processingFeeComponent: ProcessingFee; - export let hasEnoughEth: boolean = false; const dispatch = createEventDispatcher(); - $: nftsToDisplay = $selectedNFTs ? $selectedNFTs : []; - enum NFTView { CARDS, LIST, } + let nftView: NFTView = NFTView.CARDS; const changeNFTView = () => { @@ -38,6 +38,8 @@ dispatch('editTransactionDetails'); }; + $: nftsToDisplay = $selectedNFTs ? $selectedNFTs : []; + // check if any of the selected NFTs are ERC1155 tokens $: isERC1155 = $selectedNFTs ? $selectedNFTs.some((nft) => nft.type === 'ERC1155') : false; diff --git a/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte b/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte index 17f9dce6558..e928867433c 100644 --- a/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte +++ b/packages/bridge-ui-v2/src/components/Faucet/Faucet.svelte @@ -15,7 +15,7 @@ import { TokenDropdown } from '$components/TokenDropdown'; import { chains } from '$libs/chain'; import { InsufficientBalanceError, MintError, TokenMintedError } from '$libs/error'; - import { checkMintable, mint, testERC20Tokens, type Token } from '$libs/token'; + import { checkMintable, mint, testERC20Tokens, testNFT, type Token } from '$libs/token'; import { account, network, pendingTransactions } from '$stores'; let minting = false; @@ -26,6 +26,7 @@ let mintButtonEnabled = false; let alertMessage = ''; let mintableTokens: Token[] = []; + const onlyMintable: boolean = true; async function switchNetworkToL1() { @@ -55,6 +56,7 @@ // Let's begin the minting process minting = true; + mintButtonEnabled = false; try { const txHash = await mint(selectedToken, $network.id); @@ -159,7 +161,10 @@ onMount(() => { // Only show tokens in the dropdown that are mintable - mintableTokens = testERC20Tokens.filter((token) => token.mintable); + const testERC20 = testERC20Tokens.filter((token) => token.mintable); + const testNFTs = testNFT.filter((token) => token.mintable); + + mintableTokens = [...testERC20, ...testNFTs]; }); $: connected = isUserConnected($account); diff --git a/packages/bridge-ui-v2/src/components/TokenDropdown/AddCustomERC20.svelte b/packages/bridge-ui-v2/src/components/TokenDropdown/AddCustomERC20.svelte index 2059c8e1d36..bcc564e3cc5 100644 --- a/packages/bridge-ui-v2/src/components/TokenDropdown/AddCustomERC20.svelte +++ b/packages/bridge-ui-v2/src/components/TokenDropdown/AddCustomERC20.svelte @@ -102,7 +102,17 @@ if (!tokenAddress) return; loadingTokenDetails = true; log('Fetching token details for address "%s"…', tokenAddress); - const type = await detectContractType(tokenAddress); + + let type: TokenType; + try { + type = await detectContractType(tokenAddress); + } catch (error) { + log('Failed to detect contract type: ', error); + loadingTokenDetails = false; + state = AddressInputState.NOT_ERC20; + return; + } + if (type !== TokenType.ERC20) { loadingTokenDetails = false; state = AddressInputState.NOT_ERC20; @@ -160,7 +170,6 @@