ci(release): publish latest release

parent b47b4097
IPFS hash of the deployment:
- CIDv0: `QmTDH8VV44KFMkkHpig7crxe3CwJkXoQqkpHhTzCLUNtAo`
- CIDv1: `bafybeicim34aqvkuunmxx2z6s5utcpw243kfqyw66jb3njra5jn2d2dopq`
- CIDv0: `QmZ2rcWNSrFp6V7Mnv1m74ca7U6icMVKqEy8PQ5jQEd7ph`
- CIDv1: `bafybeie64ghzppo7dnlb2u2eg2iajamsdbhtovkdyogz2uf3rsexmrur6y`
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.
Your Uniswap settings are never remembered across different URLs.
IPFS gateways:
- https://bafybeicim34aqvkuunmxx2z6s5utcpw243kfqyw66jb3njra5jn2d2dopq.ipfs.dweb.link/
- [ipfs://QmTDH8VV44KFMkkHpig7crxe3CwJkXoQqkpHhTzCLUNtAo/](ipfs://QmTDH8VV44KFMkkHpig7crxe3CwJkXoQqkpHhTzCLUNtAo/)
- https://bafybeie64ghzppo7dnlb2u2eg2iajamsdbhtovkdyogz2uf3rsexmrur6y.ipfs.dweb.link/
- [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
\ No newline at end of file
web/5.70.1
\ No newline at end of file
......@@ -14,7 +14,7 @@ import { Warning, WarningLabel } from 'uniswap/src/components/modals/WarningModa
import { getCanonicalBridgingDappUrls } from 'uniswap/src/features/bridging/constants'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
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 {
useFormattedUniswapXGasFeeInfo,
useGasFeeFormattedDisplayAmounts,
......@@ -27,7 +27,7 @@ import { useSwapTxContext } from 'uniswap/src/features/transactions/swap/context
import { NetworkFeeWarning } from 'uniswap/src/features/transactions/swap/modals/NetworkFeeWarning'
import { SwapRateRatio } from 'uniswap/src/features/transactions/swap/review/SwapRateRatio'
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 { useNetworkColors } from 'uniswap/src/utils/colors'
import { openUri } from 'uniswap/src/utils/linking'
......@@ -173,6 +173,10 @@ export function TradeInfoRow({
const warningColor = getAlertColor(warning?.severity)
const { isTestnetModeEnabled } = useEnabledChains()
const {
derivedSwapInfo: { currencies },
} = useSwapFormContext()
if (isTestnetModeEnabled) {
return null
}
......@@ -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
const inputChainId = currencies.input?.currency.chainId
const outputChainId = currencies.output?.currency.chainId
const showCanonicalBridge =
isInterface &&
warning?.type === WarningLabel.NoQuotesFound &&
!debouncedTrade?.indicative &&
debouncedTrade &&
isBridge(debouncedTrade)
isInterface && warning?.type === WarningLabel.NoQuotesFound && inputChainId !== outputChainId
return (
<Flex centered row>
......@@ -209,9 +212,7 @@ export function TradeInfoRow({
</Flex>
{showCanonicalBridge ? (
<CanonicalBridgeLink
chainId={toSupportedChainId(debouncedTrade?.quote?.quote?.destinationChainId) ?? UniverseChainId.Mainnet}
/>
<CanonicalBridgeLink chainId={outputChainId ?? UniverseChainId.Mainnet} />
) : debouncedTrade ? (
<Accordion.Trigger
p="$none"
......
......@@ -266,7 +266,10 @@ export function useParsedSwapWarnings(): ParsedWarnings {
}
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) {
// Special case: rate limit errors are not parsed by errorCode
if (isRateLimitFetchError(error)) {
......@@ -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: {
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 {
type: WarningLabel.NoRoutesError,
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