ci(release): publish latest release

parent b47b4097
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmTDH8VV44KFMkkHpig7crxe3CwJkXoQqkpHhTzCLUNtAo` - CIDv0: `QmZ2rcWNSrFp6V7Mnv1m74ca7U6icMVKqEy8PQ5jQEd7ph`
- CIDv1: `bafybeicim34aqvkuunmxx2z6s5utcpw243kfqyw66jb3njra5jn2d2dopq` - CIDv1: `bafybeie64ghzppo7dnlb2u2eg2iajamsdbhtovkdyogz2uf3rsexmrur6y`
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
...@@ -10,14 +10,14 @@ You can also access the Uniswap Interface from an IPFS gateway. ...@@ -10,14 +10,14 @@ You can also access the Uniswap Interface from an IPFS gateway.
Your Uniswap settings are never remembered across different URLs. Your Uniswap settings are never remembered across different URLs.
IPFS gateways: IPFS gateways:
- https://bafybeicim34aqvkuunmxx2z6s5utcpw243kfqyw66jb3njra5jn2d2dopq.ipfs.dweb.link/ - https://bafybeie64ghzppo7dnlb2u2eg2iajamsdbhtovkdyogz2uf3rsexmrur6y.ipfs.dweb.link/
- [ipfs://QmTDH8VV44KFMkkHpig7crxe3CwJkXoQqkpHhTzCLUNtAo/](ipfs://QmTDH8VV44KFMkkHpig7crxe3CwJkXoQqkpHhTzCLUNtAo/) - [ipfs://QmZ2rcWNSrFp6V7Mnv1m74ca7U6icMVKqEy8PQ5jQEd7ph/](ipfs://QmZ2rcWNSrFp6V7Mnv1m74ca7U6icMVKqEy8PQ5jQEd7ph/)
## 5.70.0 (2025-02-10) ### 5.70.1 (2025-02-10)
### Features ### Bug Fixes
* **web:** Web Prod Unichain Hotfixes (#16016) 17efb9e * **web:** bridge fallback display logic (#16140) (#16147) ebe05fb
web/5.70.0 web/5.70.1
\ No newline at end of file \ No newline at end of file
...@@ -14,7 +14,7 @@ import { Warning, WarningLabel } from 'uniswap/src/components/modals/WarningModa ...@@ -14,7 +14,7 @@ import { Warning, WarningLabel } from 'uniswap/src/components/modals/WarningModa
import { getCanonicalBridgingDappUrls } from 'uniswap/src/features/bridging/constants' import { getCanonicalBridgingDappUrls } from 'uniswap/src/features/bridging/constants'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { UniverseChainId } from 'uniswap/src/features/chains/types' import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { getChainLabel, toSupportedChainId } from 'uniswap/src/features/chains/utils' import { getChainLabel } from 'uniswap/src/features/chains/utils'
import { import {
useFormattedUniswapXGasFeeInfo, useFormattedUniswapXGasFeeInfo,
useGasFeeFormattedDisplayAmounts, useGasFeeFormattedDisplayAmounts,
...@@ -27,7 +27,7 @@ import { useSwapTxContext } from 'uniswap/src/features/transactions/swap/context ...@@ -27,7 +27,7 @@ import { useSwapTxContext } from 'uniswap/src/features/transactions/swap/context
import { NetworkFeeWarning } from 'uniswap/src/features/transactions/swap/modals/NetworkFeeWarning' import { NetworkFeeWarning } from 'uniswap/src/features/transactions/swap/modals/NetworkFeeWarning'
import { SwapRateRatio } from 'uniswap/src/features/transactions/swap/review/SwapRateRatio' import { SwapRateRatio } from 'uniswap/src/features/transactions/swap/review/SwapRateRatio'
import { IndicativeTrade, Trade } from 'uniswap/src/features/transactions/swap/types/trade' import { IndicativeTrade, Trade } from 'uniswap/src/features/transactions/swap/types/trade'
import { isBridge, isUniswapX } from 'uniswap/src/features/transactions/swap/utils/routing' import { isUniswapX } from 'uniswap/src/features/transactions/swap/utils/routing'
import { CurrencyField } from 'uniswap/src/types/currency' import { CurrencyField } from 'uniswap/src/types/currency'
import { useNetworkColors } from 'uniswap/src/utils/colors' import { useNetworkColors } from 'uniswap/src/utils/colors'
import { openUri } from 'uniswap/src/utils/linking' import { openUri } from 'uniswap/src/utils/linking'
...@@ -173,6 +173,10 @@ export function TradeInfoRow({ ...@@ -173,6 +173,10 @@ export function TradeInfoRow({
const warningColor = getAlertColor(warning?.severity) const warningColor = getAlertColor(warning?.severity)
const { isTestnetModeEnabled } = useEnabledChains() const { isTestnetModeEnabled } = useEnabledChains()
const {
derivedSwapInfo: { currencies },
} = useSwapFormContext()
if (isTestnetModeEnabled) { if (isTestnetModeEnabled) {
return null return null
} }
...@@ -182,12 +186,11 @@ export function TradeInfoRow({ ...@@ -182,12 +186,11 @@ export function TradeInfoRow({
} }
// On interface, if the warning is a no quotes found warning, we want to show an external link to a canonical bridge // On interface, if the warning is a no quotes found warning, we want to show an external link to a canonical bridge
const inputChainId = currencies.input?.currency.chainId
const outputChainId = currencies.output?.currency.chainId
const showCanonicalBridge = const showCanonicalBridge =
isInterface && isInterface && warning?.type === WarningLabel.NoQuotesFound && inputChainId !== outputChainId
warning?.type === WarningLabel.NoQuotesFound &&
!debouncedTrade?.indicative &&
debouncedTrade &&
isBridge(debouncedTrade)
return ( return (
<Flex centered row> <Flex centered row>
...@@ -209,9 +212,7 @@ export function TradeInfoRow({ ...@@ -209,9 +212,7 @@ export function TradeInfoRow({
</Flex> </Flex>
{showCanonicalBridge ? ( {showCanonicalBridge ? (
<CanonicalBridgeLink <CanonicalBridgeLink chainId={outputChainId ?? UniverseChainId.Mainnet} />
chainId={toSupportedChainId(debouncedTrade?.quote?.quote?.destinationChainId) ?? UniverseChainId.Mainnet}
/>
) : debouncedTrade ? ( ) : debouncedTrade ? (
<Accordion.Trigger <Accordion.Trigger
p="$none" p="$none"
......
...@@ -266,7 +266,10 @@ export function useParsedSwapWarnings(): ParsedWarnings { ...@@ -266,7 +266,10 @@ export function useParsedSwapWarnings(): ParsedWarnings {
} }
function getSwapWarningFromError(error: Error, t: TFunction, derivedSwapInfo: DerivedSwapInfo): Warning { function getSwapWarningFromError(error: Error, t: TFunction, derivedSwapInfo: DerivedSwapInfo): Warning {
const isBridgeTrade = derivedSwapInfo.trade.trade !== null && isBridge(derivedSwapInfo.trade.trade) // Trade object is null for quote not found case
const isBridgeTrade =
derivedSwapInfo.currencies.input?.currency.chainId !== derivedSwapInfo.currencies.output?.currency.chainId
if (error instanceof FetchError) { if (error instanceof FetchError) {
// Special case: rate limit errors are not parsed by errorCode // Special case: rate limit errors are not parsed by errorCode
if (isRateLimitFetchError(error)) { if (isRateLimitFetchError(error)) {
...@@ -291,18 +294,16 @@ function getSwapWarningFromError(error: Error, t: TFunction, derivedSwapInfo: De ...@@ -291,18 +294,16 @@ function getSwapWarningFromError(error: Error, t: TFunction, derivedSwapInfo: De
} }
} }
// no bridging quotes found warning
case Err404.errorCode.RESOURCE_NOT_FOUND && isBridgeTrade: {
return {
type: WarningLabel.NoQuotesFound,
severity: WarningSeverity.Low,
action: WarningAction.DisableReview,
title: t('swap.warning.noQuotesFound.title'),
message: t('swap.warning.noQuotesFound.bridging.message'),
}
}
case Err404.errorCode.RESOURCE_NOT_FOUND: { case Err404.errorCode.RESOURCE_NOT_FOUND: {
if (isBridgeTrade) {
return {
type: WarningLabel.NoQuotesFound,
severity: WarningSeverity.Low,
action: WarningAction.DisableReview,
title: t('swap.warning.noQuotesFound.title'),
message: t('swap.warning.noQuotesFound.bridging.message'),
}
}
return { return {
type: WarningLabel.NoRoutesError, type: WarningLabel.NoRoutesError,
severity: WarningSeverity.Low, severity: WarningSeverity.Low,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment