ci(release): publish latest release

parent 755020c1
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmVpD9pf9NG2wERetMBbCqV83YvdvgPsRRCTdxNSYewAJx` - CIDv0: `QmVSCwN4FJ1Dz9ektaM2hE2SgFwxneE8qNDTsTiFQ9sWav`
- CIDv1: `bafybeidpcewjnfhxawg76jxxrlwqvxx4witgnsiz7jyq6ldroa7oirmygu` - CIDv1: `bafybeidjnytuwuppye6qvlapvslldvomy3l6tfb54lqy7weebvcacwkgom`
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://bafybeidpcewjnfhxawg76jxxrlwqvxx4witgnsiz7jyq6ldroa7oirmygu.ipfs.dweb.link/ - https://bafybeidjnytuwuppye6qvlapvslldvomy3l6tfb54lqy7weebvcacwkgom.ipfs.dweb.link/
- [ipfs://QmVpD9pf9NG2wERetMBbCqV83YvdvgPsRRCTdxNSYewAJx/](ipfs://QmVpD9pf9NG2wERetMBbCqV83YvdvgPsRRCTdxNSYewAJx/) - [ipfs://QmVSCwN4FJ1Dz9ektaM2hE2SgFwxneE8qNDTsTiFQ9sWav/](ipfs://QmVSCwN4FJ1Dz9ektaM2hE2SgFwxneE8qNDTsTiFQ9sWav/)
### 5.69.1 (2025-02-06) ### 5.69.2 (2025-02-07)
### Bug Fixes ### Bug Fixes
* **web:** hide unichain explore behind feature flag (#16017) 55c5679 * **web:** block unichain leaks via url pathways (#16070) ab61225
web/5.69.1 web/5.69.2
\ No newline at end of file \ No newline at end of file
...@@ -29,6 +29,7 @@ import { DeprecatedButton, Flex, Main, Switch, Text, styled } from 'ui/src' ...@@ -29,6 +29,7 @@ import { DeprecatedButton, Flex, Main, Switch, Text, styled } from 'ui/src'
import { InfoCircleFilled } from 'ui/src/components/icons/InfoCircleFilled' import { InfoCircleFilled } from 'ui/src/components/icons/InfoCircleFilled'
import { useGetPositionQuery } from 'uniswap/src/data/rest/getPosition' import { useGetPositionQuery } from 'uniswap/src/data/rest/getPosition'
import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { getChainInfo } from 'uniswap/src/features/chains/chainInfo'
import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId'
import { UniverseChainId } from 'uniswap/src/features/chains/types' import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag, useFeatureFlagWithLoading } from 'uniswap/src/features/gating/hooks' import { useFeatureFlag, useFeatureFlagWithLoading } from 'uniswap/src/features/gating/hooks'
...@@ -119,6 +120,7 @@ function PositionPage() { ...@@ -119,6 +120,7 @@ function PositionPage() {
const chainId = useChainIdFromUrlParam() const chainId = useChainIdFromUrlParam()
const chainInfo = chainId ? getChainInfo(chainId) : undefined const chainInfo = chainId ? getChainInfo(chainId) : undefined
const account = useAccount() const account = useAccount()
const supportedAccountChainId = useSupportedChainId(account.chainId)
const { pathname } = useLocation() const { pathname } = useLocation()
const { const {
data, data,
...@@ -132,7 +134,7 @@ function PositionPage() { ...@@ -132,7 +134,7 @@ function PositionPage() {
? ProtocolVersion.V4 ? ProtocolVersion.V4
: ProtocolVersion.UNSPECIFIED, : ProtocolVersion.UNSPECIFIED,
tokenId: tokenIdFromUrl, tokenId: tokenIdFromUrl,
chainId: chainId ?? account.chainId, chainId: chainId ?? supportedAccountChainId,
}) })
const position = data?.position const position = data?.position
const positionInfo = useMemo(() => parseRestPosition(position), [position]) const positionInfo = useMemo(() => parseRestPosition(position), [position])
......
...@@ -23,6 +23,7 @@ import { usePendingLPTransactionsChangeListener } from 'state/transactions/hooks ...@@ -23,6 +23,7 @@ import { usePendingLPTransactionsChangeListener } from 'state/transactions/hooks
import { usePairAdder } from 'state/user/hooks' import { usePairAdder } from 'state/user/hooks'
import { Circle, DeprecatedButton, Flex, Main, Shine, Text, styled } from 'ui/src' import { Circle, DeprecatedButton, Flex, Main, Shine, Text, styled } from 'ui/src'
import { useGetPositionQuery } from 'uniswap/src/data/rest/getPosition' import { useGetPositionQuery } from 'uniswap/src/data/rest/getPosition'
import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId'
import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlagWithLoading } from 'uniswap/src/features/gating/hooks' import { useFeatureFlagWithLoading } from 'uniswap/src/features/gating/hooks'
import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext' import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
...@@ -79,6 +80,7 @@ function V2PositionPage() { ...@@ -79,6 +80,7 @@ function V2PositionPage() {
const { pairAddress } = useParams<{ pairAddress: string }>() const { pairAddress } = useParams<{ pairAddress: string }>()
const chainId = useChainIdFromUrlParam() const chainId = useChainIdFromUrlParam()
const account = useAccount() const account = useAccount()
const supportedAccountChainId = useSupportedChainId(account.chainId)
const { const {
data, data,
...@@ -88,7 +90,7 @@ function V2PositionPage() { ...@@ -88,7 +90,7 @@ function V2PositionPage() {
owner: account?.address ?? ZERO_ADDRESS, owner: account?.address ?? ZERO_ADDRESS,
protocolVersion: ProtocolVersion.V2, protocolVersion: ProtocolVersion.V2,
pairAddress, pairAddress,
chainId: chainId ?? account.chainId, chainId: chainId ?? supportedAccountChainId,
}) })
const position = data?.position const position = data?.position
const positionInfo = useMemo(() => parseRestPosition(position), [position]) const positionInfo = useMemo(() => parseRestPosition(position), [position])
......
...@@ -21,6 +21,7 @@ import { ThemeProvider } from 'theme' ...@@ -21,6 +21,7 @@ import { ThemeProvider } from 'theme'
import { nativeOnChain } from 'uniswap/src/constants/tokens' import { nativeOnChain } from 'uniswap/src/constants/tokens'
import { useTokenWebQuery } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { useTokenWebQuery } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { getChainInfo } from 'uniswap/src/features/chains/chainInfo'
import { useIsSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId'
import { UniverseChainId } from 'uniswap/src/features/chains/types' import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { isAddress } from 'utilities/src/addresses' import { isAddress } from 'utilities/src/addresses'
import { useChainIdFromUrlParam } from 'utils/chainParams' import { useChainIdFromUrlParam } from 'utils/chainParams'
...@@ -159,6 +160,7 @@ export default function TokenDetailsPage() { ...@@ -159,6 +160,7 @@ export default function TokenDetailsPage() {
const pageChainId = account.chainId ?? UniverseChainId.Mainnet const pageChainId = account.chainId ?? UniverseChainId.Mainnet
const contextValue = useCreateTDPContext() const contextValue = useCreateTDPContext()
const { tokenColor, address, currency, currencyChain, currencyChainId, tokenQuery } = contextValue const { tokenColor, address, currency, currencyChain, currencyChainId, tokenQuery } = contextValue
const isSupportedChain = useIsSupportedChainId(currencyChainId)
const tokenQueryData = tokenQuery.data?.token const tokenQueryData = tokenQuery.data?.token
const metatagProperties = useMemo(() => { const metatagProperties = useMemo(() => {
...@@ -185,7 +187,7 @@ export default function TokenDetailsPage() { ...@@ -185,7 +187,7 @@ export default function TokenDetailsPage() {
))} ))}
</Helmet> </Helmet>
{(() => { {(() => {
if (currency) { if (currency && isSupportedChain) {
return ( return (
<TDPProvider contextValue={contextValue}> <TDPProvider contextValue={contextValue}>
<TokenDetails /> <TokenDetails />
......
...@@ -454,13 +454,15 @@ export function useInitialCurrencyState(): { ...@@ -454,13 +454,15 @@ export function useInitialCurrencyState(): {
defaultChainId, defaultChainId,
]) ])
const outputChainIsSupported = useSupportedChainId(parsedCurrencyState.outputChainId)
const initialOutputCurrencyAddress = useMemo( const initialOutputCurrencyAddress = useMemo(
() => () =>
// clear output if identical unless there's an outputChainId which means we're bridging // clear output if identical unless there's a supported outputChainId which means we're bridging
initialInputCurrencyAddress === parsedCurrencyState.outputCurrencyId && !parsedCurrencyState.outputChainId initialInputCurrencyAddress === parsedCurrencyState.outputCurrencyId && !outputChainIsSupported
? undefined ? undefined
: parsedCurrencyState.outputCurrencyId, : parsedCurrencyState.outputCurrencyId,
[initialInputCurrencyAddress, parsedCurrencyState.outputCurrencyId, parsedCurrencyState.outputChainId], [initialInputCurrencyAddress, parsedCurrencyState.outputCurrencyId, outputChainIsSupported],
) )
const initialInputCurrency = useCurrency(initialInputCurrencyAddress, initialChainId) const initialInputCurrency = useCurrency(initialInputCurrencyAddress, initialChainId)
......
...@@ -2,6 +2,7 @@ import { ParsedQs } from 'qs' ...@@ -2,6 +2,7 @@ import { ParsedQs } from 'qs'
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
// eslint-disable-next-line no-restricted-imports // eslint-disable-next-line no-restricted-imports
import { UNIVERSE_CHAIN_INFO } from 'uniswap/src/features/chains/chainInfo' import { UNIVERSE_CHAIN_INFO } from 'uniswap/src/features/chains/chainInfo'
import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId'
import { UniverseChainId } from 'uniswap/src/features/chains/types' import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { CurrencyField } from 'uniswap/src/types/currency' import { CurrencyField } from 'uniswap/src/types/currency'
...@@ -29,7 +30,9 @@ export function useChainIdFromUrlParam(): UniverseChainId | undefined { ...@@ -29,7 +30,9 @@ export function useChainIdFromUrlParam(): UniverseChainId | undefined {
const chainName = useParams<{ chainName?: string }>().chainName const chainName = useParams<{ chainName?: string }>().chainName
// In the case where /explore/:chainName is used, the chainName is passed as a tab param // In the case where /explore/:chainName is used, the chainName is passed as a tab param
const tab = useParams<{ tab?: string }>().tab const tab = useParams<{ tab?: string }>().tab
return getChainIdFromChainUrlParam(chainName ?? tab) const chainId = getChainIdFromChainUrlParam(chainName ?? tab)
const supportedChainId = useSupportedChainId(chainId)
return supportedChainId
} }
export function getParsedChainId( export function getParsedChainId(
......
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