Skip to content

Commit f21ac87

Browse files
authored
feat: Implement disable add liquidity for specific chains (#11959)
<!-- Before opening a pull request, please read the [contributing guidelines](https://github.com/pancakeswap/pancake-frontend/blob/develop/CONTRIBUTING.md) first --> <!-- start pr-codex --> --- ## PR-Codex overview This PR introduces a mechanism to disable adding liquidity for certain blockchain networks by implementing a `DISABLED_ADD_LIQUIDITY_CHAINS` constant. It also adds a `LiquiditySunsetWarning` component to notify users about the sunset dates for these chains. ### Detailed summary - Added `DISABLED_ADD_LIQUIDITY_CHAINS` constant in `liquidity.ts`. - Implemented `LiquiditySunsetWarning` component to display warnings about sunset dates. - Integrated `LiquiditySunsetWarning` in `PoolsBanner`, `PoolInfo`, and other components. - Updated buttons to disable adding liquidity based on the chain's status. - Modified translation files to include sunset-related messages. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` <!-- end pr-codex -->
1 parent 4e783d3 commit f21ac87

File tree

17 files changed

+120
-36
lines changed

17 files changed

+120
-36
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { useTranslation } from '@pancakeswap/localization'
2+
import { Message, MessageText, Text } from '@pancakeswap/uikit'
3+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
4+
import dayjs from 'dayjs'
5+
import advancedFormat from 'dayjs/plugin/advancedFormat'
6+
import { useActiveChainId } from 'hooks/useActiveChainId'
7+
import { useMemo } from 'react'
8+
import { chains } from 'utils/wagmi'
9+
10+
dayjs.extend(advancedFormat)
11+
12+
type LiquiditySunsetWarningProps = {
13+
overrideChainId?: number
14+
}
15+
16+
const LiquiditySunsetWarning = ({ overrideChainId }: LiquiditySunsetWarningProps) => {
17+
const { t } = useTranslation()
18+
const { chainId: activeChainId } = useActiveChainId()
19+
20+
const chainId = overrideChainId ?? activeChainId
21+
22+
const chainName = useMemo(() => {
23+
return chains.find((c) => c.id === chainId)?.name
24+
}, [chainId])
25+
26+
const sunsetInfo = DISABLED_ADD_LIQUIDITY_CHAINS[chainId]
27+
28+
if (!sunsetInfo) {
29+
return null
30+
}
31+
32+
return (
33+
<Message variant="warning" style={{ width: '100%' }}>
34+
<MessageText>
35+
<Text mb="8px" bold>
36+
{t('Important Notice: %chain% Sunset', { chain: chainName })}
37+
</Text>
38+
{t(
39+
'%chain% will be sunset on %date%. Please make sure to remove your liquidity from all pools before deadline.',
40+
{ chain: chainName, date: dayjs.unix(sunsetInfo.sunsetDate).format('D MMMM') },
41+
)}
42+
</MessageText>
43+
</Message>
44+
)
45+
}
46+
47+
export default LiquiditySunsetWarning

apps/web/src/components/NetworkSelector.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { INFINITY_SUPPORTED_CHAINS } from '@pancakeswap/infinity-sdk'
22
import { isStableSwapSupported } from '@pancakeswap/stable-swap-sdk'
33
import { Select } from '@pancakeswap/uikit'
44
import { ASSET_CDN } from 'config/constants/endpoints'
5+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
56
import { useMemo } from 'react'
67
import { useUserShowTestnet } from 'state/user/hooks/useUserShowTestnet'
78
import { LiquidityType } from 'utils/types'
@@ -26,6 +27,7 @@ export const NetworkSelector = ({
2627
const chainList = useMemo(
2728
() =>
2829
chains
30+
.filter((chain) => !DISABLED_ADD_LIQUIDITY_CHAINS[chain.id])
2931
.filter((chain) => version !== 'infinity' || INFINITY_SUPPORTED_CHAINS.includes(chain.id))
3032
.filter((chain) => version !== 'stableSwap' || isStableSwapSupported(chain.id))
3133
.filter((chain) => {

apps/web/src/config/constants/liquidity.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { chainNames } from '@pancakeswap/chains'
1+
import { ChainId, chainNames } from '@pancakeswap/chains'
22
import { Protocol } from '@pancakeswap/farms'
33
import { $path } from 'next-typesafe-url'
44
import { Address, Hex } from 'viem'
@@ -13,6 +13,16 @@ export const LIQUIDITY_PAGES = {
1313
POSITIONS: '/liquidity/positions',
1414
}
1515

16+
export const DISABLED_ADD_LIQUIDITY_CHAINS: {
17+
[chainId in ChainId]?: {
18+
sunsetDate: number
19+
}
20+
} = {
21+
[ChainId.POLYGON_ZKEVM]: {
22+
sunsetDate: 1759183200,
23+
},
24+
}
25+
1626
export const getCreateInfinityPoolPageURL = ({
1727
chainId,
1828
token0,

apps/web/src/pages/stable/[address].tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import currencyId from 'utils/currencyId'
4141
import { formatCurrencyAmount } from 'utils/formatCurrencyAmount'
4242
import { formatAmount } from 'utils/formatInfoNumbers'
4343
import { useAccount } from 'wagmi'
44+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
4445

4546
export const BodyWrapper = styled(Card)`
4647
border-radius: 24px;
@@ -165,7 +166,9 @@ function StablePoolPage() {
165166
!isMobile && (
166167
<>
167168
<NextLinkFromReactRouter to={`/stable/add/${currencyIdA}/${currencyIdB}`}>
168-
<Button width="100%">{t('Add')}</Button>
169+
<Button width="100%" disabled={!!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}>
170+
{t('Add')}
171+
</Button>
169172
</NextLinkFromReactRouter>
170173
<NextLinkFromReactRouter to={`/stable/remove/${currencyIdA}/${currencyIdB}`}>
171174
<Button ml="16px" variant="secondary" width="100%" disabled={isFullyStaked}>
@@ -180,7 +183,7 @@ function StablePoolPage() {
180183
{isMobile && (
181184
<>
182185
<NextLinkFromReactRouter to={`/stable/add/${currencyIdA}/${currencyIdB}`}>
183-
<Button mb="8px" width="100%">
186+
<Button mb="8px" width="100%" disabled={!!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}>
184187
{t('Add')}
185188
</Button>
186189
</NextLinkFromReactRouter>

apps/web/src/pages/v2/pair/[[...currency]].tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { usePoolInfo } from 'state/farmsV4/state/extendPools/hooks'
4040
import { useLPApr } from 'state/swap/useLPApr'
4141
import { formatAmount } from 'utils/formatInfoNumbers'
4242
import { useAccount } from 'wagmi'
43+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
4344

4445
export const BodyWrapper = styled(Card)`
4546
border-radius: 24px;
@@ -157,7 +158,7 @@ export default function PoolV2Page() {
157158
!isMobile && (
158159
<>
159160
<NextLinkFromReactRouter to={`/v2/add/${pair?.token0.address}/${pair?.token1.address}?increase=1`}>
160-
<Button width="100%" disabled={!pair}>
161+
<Button width="100%" disabled={!pair || !!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}>
161162
{t('Add')}
162163
</Button>
163164
</NextLinkFromReactRouter>
@@ -184,7 +185,7 @@ export default function PoolV2Page() {
184185
{isMobile && (
185186
<>
186187
<NextLinkFromReactRouter to={`/v2/add/${pair?.token0.address}/${pair?.token1.address}?increase=1`}>
187-
<Button width="100%" mb="8px" disabled={!pair}>
188+
<Button width="100%" mb="8px" disabled={!pair || !!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}>
188189
{t('Add')}
189190
</Button>
190191
</NextLinkFromReactRouter>

apps/web/src/views/AddLiquidity/ChoosePair.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { useV2Pair } from 'hooks/usePairs'
99
import { useLPApr } from 'state/swap/useLPApr'
1010
import { formatAmount } from 'utils/formatInfoNumbers'
1111
import { useAccount } from 'wagmi'
12+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
13+
import { useActiveChainId } from 'hooks/useActiveChainId'
1214
import { AppHeader } from '../../components/App'
1315
import { CommonBasesType } from '../../components/SearchModal/types'
1416
import { useCurrencySelectRoute } from './useCurrencySelectRoute'
@@ -25,6 +27,7 @@ export function ChoosePair({
2527
onNext?: () => void
2628
}) {
2729
const { address: account } = useAccount()
30+
const { chainId } = useActiveChainId()
2831
const { t } = useTranslation()
2932
const isValid = !error
3033
const { handleCurrencyASelect, handleCurrencyBSelect } = useCurrencySelectRoute()
@@ -91,7 +94,7 @@ export function ChoosePair({
9194
width="100%"
9295
variant={!isValid ? 'danger' : 'primary'}
9396
onClick={onNext}
94-
disabled={!isValid}
97+
disabled={!isValid || !!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}
9598
>
9699
{error ?? t('Add Liquidity')}
97100
</CommitButton>

apps/web/src/views/AddLiquidityV3/components/V3SubmitButton.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { Currency, CurrencyAmount } from '@pancakeswap/sdk'
33
import { AutoColumn, Button } from '@pancakeswap/uikit'
44
import { CommitButton } from 'components/CommitButton'
55
import ConnectWalletButton from 'components/ConnectWalletButton'
6+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
7+
import { useActiveChainId } from 'hooks/useActiveChainId'
68
import { ApprovalState } from 'hooks/useApproveCallback'
79
import { ReactNode, useMemo } from 'react'
810
import { CurrencyField as Field } from 'utils/types'
@@ -69,6 +71,7 @@ export function V3SubmitButton({
6971
depositBDisabled,
7072
}: V3SubmitButtonProps) {
7173
const { t } = useTranslation()
74+
const { chainId } = useActiveChainId()
7275

7376
const shouldShowApprovalGroup = useMemo(
7477
() =>
@@ -118,7 +121,8 @@ export function V3SubmitButton({
118121
!isValid ||
119122
attemptingTxn ||
120123
(approvalA !== ApprovalState.APPROVED && !depositADisabled) ||
121-
(approvalB !== ApprovalState.APPROVED && !depositBDisabled)
124+
(approvalB !== ApprovalState.APPROVED && !depositBDisabled) ||
125+
!!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]
122126
}
123127
>
124128
{errorMessage || buttonText}

apps/web/src/views/CreateLiquidityPool/components/MessagePoolInitialized.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { getPoolId } from '@pancakeswap/infinity-sdk'
22
import { useTranslation } from '@pancakeswap/localization'
33
import { AddIcon, Button, InfoIcon, Message, Text, useMatchBreakpoints } from '@pancakeswap/uikit'
4-
import { getAddInfinityLiquidityURL } from 'config/constants/liquidity'
4+
import { DISABLED_ADD_LIQUIDITY_CHAINS, getAddInfinityLiquidityURL } from 'config/constants/liquidity'
55
import { useSelectIdRouteParams } from 'hooks/dynamicRoute/useSelectIdRoute'
66
import { useRouter } from 'next/router'
77
import { useCallback } from 'react'
@@ -39,6 +39,7 @@ export const MessagePoolInitialized = () => {
3939
width="100%"
4040
onClick={redirectToAddLiquidityPage}
4141
endIcon={isXs ? <AddIcon color="invertedContrast" width="24px" /> : null}
42+
disabled={Boolean(chainId && DISABLED_ADD_LIQUIDITY_CHAINS[chainId])}
4243
>
4344
{t('Add Liquidity')}
4445
</Button>

apps/web/src/views/Info/Pools/PoolPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import { CurrencyLogo, DoubleCurrencyLogo } from 'views/Info/components/Currency
4646
import ChartCard from 'views/Info/components/InfoCharts/ChartCard'
4747
import TransactionTable from 'views/Info/components/InfoTables/TransactionsTable'
4848
import Percent from 'views/Info/components/Percent'
49+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
4950

5051
const ContentLayout = styled.div`
5152
display: grid;
@@ -204,7 +205,7 @@ const PoolPage: React.FC<React.PropsWithChildren<{ address: string }>> = ({ addr
204205
<NextLinkFromReactRouter
205206
to={`/add/${poolData.token0.address}/${poolData.token1.address}?chain=${CHAIN_QUERY_NAME[chainId]}`}
206207
>
207-
<Button mr="8px" variant="secondary">
208+
<Button mr="8px" variant="secondary" disabled={!!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}>
208209
{t('Add Liquidity')}
209210
</Button>
210211
</NextLinkFromReactRouter>

apps/web/src/views/Info/Tokens/TokenPage.tsx

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import PoolTable from 'views/Info/components/InfoTables/PoolsTable'
4747
import TransactionTable from 'views/Info/components/InfoTables/TransactionsTable'
4848
import Percent from 'views/Info/components/Percent'
4949
import useCMCLink from 'views/Info/hooks/useCMCLink'
50+
import { DISABLED_ADD_LIQUIDITY_CHAINS } from 'config/constants/liquidity'
5051

5152
dayjs.extend(duration)
5253

@@ -72,22 +73,6 @@ const StyledCMCLink = styled(UIKitLink)`
7273
`
7374
const DEFAULT_TIME_WINDOW = dayjs.duration(1, 'weeks')
7475

75-
interface TokenInfoParams {
76-
address: string
77-
chain: string
78-
type: 'swap' | 'stableSwap'
79-
}
80-
81-
interface TokenQueryResponse {
82-
token: TokenData | undefined
83-
pool: PoolData[] | undefined
84-
transactions: Transaction[] | undefined
85-
chartVolume: VolumeChartEntry[] | undefined
86-
chartTvl: TvlChartEntry[] | undefined
87-
}
88-
89-
interface TokenTraceData extends BasePerf {}
90-
9176
const TokenPage: React.FC<React.PropsWithChildren<{ routeAddress: string }>> = ({ routeAddress }) => {
9277
const { isXs, isSm } = useMatchBreakpoints()
9378
const { t } = useTranslation()
@@ -182,7 +167,7 @@ const TokenPage: React.FC<React.PropsWithChildren<{ routeAddress: string }>> = (
182167
</Flex>
183168
<Flex>
184169
<NextLinkFromReactRouter to={`/add/${address}?chain=${CHAIN_QUERY_NAME[chainId]}`}>
185-
<Button mr="8px" variant="secondary">
170+
<Button mr="8px" variant="secondary" disabled={!!DISABLED_ADD_LIQUIDITY_CHAINS[chainId]}>
186171
{t('Add Liquidity')}
187172
</Button>
188173
</NextLinkFromReactRouter>

0 commit comments

Comments
 (0)