From 135362977c904c8efac725371ab2ce7529a1468f Mon Sep 17 00:00:00 2001 From: dwjanus Date: Wed, 11 Mar 2026 15:35:16 -0400 Subject: [PATCH 1/4] working poc --- src/hooks/rewards/hooks.ts | 62 ++++ src/pages/token/BonkPnlLeaderboardPanel.tsx | 310 ++++++++++++++++++++ src/pages/token/RewardsPage.tsx | 11 + 3 files changed, 383 insertions(+) create mode 100644 src/pages/token/BonkPnlLeaderboardPanel.tsx diff --git a/src/hooks/rewards/hooks.ts b/src/hooks/rewards/hooks.ts index a7fd4dce01..e947f759d5 100644 --- a/src/hooks/rewards/hooks.ts +++ b/src/hooks/rewards/hooks.ts @@ -1,4 +1,5 @@ import { BonsaiCore } from '@/bonsai/ontology'; +import { MarketInfo } from '@/bonsai/types/summaryTypes'; import { useQuery } from '@tanstack/react-query'; import { useAppSelector } from '@/state/appTypes'; @@ -61,6 +62,14 @@ export type BonkPnlItem = { position: number; }; +export type BonkPnlLeaderboardItem = { + address: string; + pnl: number; + volume: number; + position: number; + markets: MarketInfo['assetId'][]; +}; + export function useFeeLeaderboard({ address }: { address?: string }) { return useQuery({ queryKey: ['dydx-fee-leaderboard', address], @@ -146,6 +155,59 @@ export function useBonkPnlDistribution() { }; } +async function getBonkPnlLeaderboard() { + // const res = await fetch( + // 'https://pp-external-api-ffb2ad95ef03.herokuapp.com/api/dydx-bonk-pnl-leaderboard?perPage=1000' + // ); + // const parsedRes = await res.json(); + // TODO: remove this mock data once the endpoint above is implemented + const parsedRes = { + data: [ + { + address: '0x1234567890123456789012345678901234567890', + pnl: 100000, + volume: 100, + position: 1, + markets: ['BTC-USDC', 'ETH-USDC', 'BONK-USDC', 'SOL-USDC'], + }, + { + address: '0x1234567890123456789012345678901234567890', + pnl: 10000, + volume: 100, + position: 2, + markets: ['BTC-USDC', 'BONK-USDC'], + }, + { + address: '0x1234567890123456789012345678901234567890', + pnl: 1000, + volume: 100, + position: 3, + markets: ['BTC-USDC', 'ETH-USDC'], + }, + { + address: 'dydx136v96yl20cud87yc3fv8kn3q3gvwhejume6ew4', + pnl: 1000, + volume: 100, + position: 420, + markets: ['BTC-USDC', 'BONK-USDC'], + }, + ], + }; + return parsedRes.data as BonkPnlLeaderboardItem[]; +} + +export function useBonkPnlLeaderboard() { + const { data: bonkPnlLeaderboardItems, isLoading: bonkPnlLeaderboardItemsLoading } = useQuery({ + queryKey: ['bonk/pnl-leaderboard'], + queryFn: wrapAndLogError(() => getBonkPnlLeaderboard(), 'BonkPnl/fetchLeaderboard', true), + }); + + return { + isLoading: bonkPnlLeaderboardItemsLoading, + data: bonkPnlLeaderboardItems, + }; +} + export type LiquidationLeaderboardItem = { address: string; total_liquidation_losses: string; diff --git a/src/pages/token/BonkPnlLeaderboardPanel.tsx b/src/pages/token/BonkPnlLeaderboardPanel.tsx new file mode 100644 index 0000000000..9058f9836d --- /dev/null +++ b/src/pages/token/BonkPnlLeaderboardPanel.tsx @@ -0,0 +1,310 @@ +import { useCallback } from 'react'; + +import styled from 'styled-components'; + +import { STRING_KEYS, StringGetterFunction } from '@/constants/localization'; + +import { type BonkPnlLeaderboardItem, useBonkPnlLeaderboard } from '@/hooks/rewards/hooks'; +import { useAccounts } from '@/hooks/useAccounts'; +import { useStringGetter } from '@/hooks/useStringGetter'; + +import { TrophyIcon } from '@/icons'; + +import { AssetIcon } from '@/components/AssetIcon'; +import { Icon, IconName } from '@/components/Icon'; +import { Link } from '@/components/Link'; +import { LoadingSpace } from '@/components/Loading/LoadingSpinner'; +import { Output, OutputType } from '@/components/Output'; +import { Panel } from '@/components/Panel'; +import { ColumnDef, Table } from '@/components/Table'; + +import { exportCSV } from '@/lib/csv'; +import { truncateAddress } from '@/lib/wallet'; + +export enum BonkPnlTableColumns { + Rank = 'Rank', + Trader = 'Trader', + Markets = 'Markets', + PNL = 'PNL', +} + +export const BonkPnlLeaderboardPanel = () => { + const stringGetter = useStringGetter(); + const { data: bonkPnls, isLoading } = useBonkPnlLeaderboard(); + const { dydxAddress } = useAccounts(); + + const getRowKey = useCallback((row: BonkPnlLeaderboardItem) => row.position, []); + + const columns = Object.values(BonkPnlTableColumns).map((key: BonkPnlTableColumns) => + getBonkPnlTableColumnDef({ + key, + stringGetter, + dydxAddress, + }) + ); + + const userRow = bonkPnls?.find((item) => item.address === dydxAddress); + const data = [ + ...new Set([ + ...(userRow ? [userRow] : []), + ...(bonkPnls?.filter((item) => item.pnl !== 0) ?? []), + ]), + ]; + + const onDownload = () => { + if (data.length === 0) return; + + const csvRows = data.map((item) => ({ + rank: item.position, + address: item.address, + markets: item.markets.join(','), + pnl: item.pnl, + volume: item.volume, + })); + + exportCSV(csvRows, { + filename: 'bonk-pnl-leaderboard', + columnHeaders: [ + { + key: 'rank', + displayLabel: stringGetter({ key: STRING_KEYS.RANK }), + }, + { + key: 'address', + displayLabel: stringGetter({ key: STRING_KEYS.TRADER }), + }, + { + key: 'markets', + displayLabel: stringGetter({ key: STRING_KEYS.MARKETS }), + }, + { + key: 'pnl', + displayLabel: stringGetter({ key: STRING_KEYS.PNL }), + }, + ], + }); + }; + + return ( + <$Panel> +
+
+
+ Top Traders + {/* {stringGetter({ key: STRING_KEYS.TOP_TRADERS })} */} +
+ +
+ +
+ <$Table + label={stringGetter({ key: STRING_KEYS.COMPETITION_LEADERBOARD_TITLE })} + data={data} + tableId="bonk-pnl" + getRowKey={getRowKey} + columns={columns} + defaultSortDescriptor={{ + column: BonkPnlTableColumns.Rank, + direction: 'ascending', + }} + getIsRowPinned={(row) => { + return row.address === dydxAddress; + }} + slotEmpty={ + isLoading ? ( + + ) : ( +
+ + No data available +
+ ) + } + getRowAttributes={({ address }) => ({ + style: { + backgroundColor: address === dydxAddress ? 'var(--color-accent-faded)' : undefined, + }, + })} + selectionBehavior="replace" + initialPageSize={10} + withScrollSnapColumns + withScrollSnapRows + /> +
+
+ + ); +}; + +const getTraderLink = (address: string) => { + return `https://www.mintscan.io/dydx/address/${address}`; +}; + +const getBonkPnlTableColumnDef = ({ + key, + stringGetter, + dydxAddress, +}: { + key: BonkPnlTableColumns; + stringGetter: StringGetterFunction; + dydxAddress?: string; +}): ColumnDef => ({ + ...( + { + [BonkPnlTableColumns.Rank]: { + columnKey: BonkPnlTableColumns.Rank, + getCellValue: (row) => row.position, + label: ( +
+ {stringGetter({ key: STRING_KEYS.RANK })} +
+ ), + renderCell: ({ position, address }) => ( +
+
+
+ {position} +
+
+ {position === 1 && } + {position === 2 && } + {position === 3 && } + {address === dydxAddress && ( +
+ + {stringGetter({ key: STRING_KEYS.YOU })} + +
+ )} +
+ ), + }, + [BonkPnlTableColumns.Trader]: { + columnKey: BonkPnlTableColumns.Trader, + getCellValue: (row) => row.address, + label: ( +
+ {stringGetter({ key: STRING_KEYS.TRADER })} +
+ ), + renderCell: ({ address }) => ( +
+ {truncateAddress(address)} + +
+ ), + }, + [BonkPnlTableColumns.Markets]: { + columnKey: BonkPnlTableColumns.Markets, + getCellValue: (row) => + Array.from(new Set(row.markets.flatMap((m) => m.split('-')))).join(','), + label: ( +
+ {stringGetter({ key: STRING_KEYS.MARKETS })} +
+ ), + renderCell: ({ markets }) => { + const marketsArray = Array.from(new Set(markets.flatMap((m) => m.split('-')))); + return ( +
+ {marketsArray.slice(0, 4).map((market, index) => ( + + + + ))} + {markets.length >= 4 && ( +
+ + +{markets.length - 3} + +
+ )} +
+ ); + }, + }, + [BonkPnlTableColumns.PNL]: { + columnKey: BonkPnlTableColumns.PNL, + getCellValue: (row) => row.pnl, + label: ( +
+ {stringGetter({ key: STRING_KEYS.PNL })} +
+ ), + renderCell: ({ pnl }) => ( + = 0 ? 'var(--color-positive)' : 'var(--color-negative)' }} + tw="text-small font-medium" + type={OutputType.Fiat} + value={pnl} + /> + ), + }, + } satisfies Record> + )[key], +}); + +const $Panel = styled(Panel)` + --panel-content-paddingY: 1.5rem; + --panel-content-paddingX: 1.5rem; +`; + +const $Table = styled(Table)` + --tableCell-padding: 0.25rem; + font: var(--font-mini-book); + --stickyArea-background: transparent; + + table { + --stickyArea-background: transparent; + } + + thead, + tbody { + --stickyArea-background: transparent; + tr { + td:first-of-type, + th:first-of-type { + --tableCell-padding: 0.5rem 0.25rem 0.5rem 1rem; + } + td:last-of-type, + th:last-of-type { + --tableCell-padding: 0.5rem 1rem 0.5rem 0.25rem; + } + } + } + + tbody { + font: var(--font-small-book); + } + + tfoot { + --stickyArea-background: transparent; + --tableCell-padding: 0.5rem 1rem 0.5rem 1rem; + } + + min-width: 1px; + tbody { + font: var(--font-small-book); + } +` as typeof Table; diff --git a/src/pages/token/RewardsPage.tsx b/src/pages/token/RewardsPage.tsx index ae48cd241a..de4df8c796 100644 --- a/src/pages/token/RewardsPage.tsx +++ b/src/pages/token/RewardsPage.tsx @@ -29,6 +29,7 @@ import { TermsOfUseLink } from '@/components/TermsOfUseLink'; import { orEmptyObj } from '@/lib/typeUtils'; import { BonkIncentivesPanel } from './BonkIncentivesPanel'; +import { BonkPnlLeaderboardPanel } from './BonkPnlLeaderboardPanel'; import { BonkPnlPanel } from './BonkPnlPanel'; import { CompetitionLeaderboardPanel } from './CompetitionLeaderboardPanel'; import { GeoblockedPanel } from './GeoblockedPanel'; @@ -42,6 +43,7 @@ import { SwapAndStakingPanel } from './SwapAndStakingPanel'; import { UnbondingPanels } from './UnbondingPanels'; enum Tab { + Leaderboard = 'Leaderboard', BonkPnl = 'BonkPnl', Rewards = 'Rewards', LiquidationRebates = 'LiquidationRebates', @@ -83,6 +85,15 @@ const RewardsPage = () => { ); const tabs = [ + { + content: ( +
+ +
+ ), + label: stringGetter({ key: STRING_KEYS.COMPETITION_LEADERBOARD_TITLE }), + value: Tab.Leaderboard, + }, { content: (
From 30780a512ffd27e987562d5f92264de2e8423dbd Mon Sep 17 00:00:00 2001 From: dwjanus Date: Mon, 16 Mar 2026 11:54:04 -0400 Subject: [PATCH 2/4] add leaderboard tab and data handler --- package.json | 2 +- pnpm-lock.yaml | 8 +- src/hooks/rewards/hooks.ts | 45 ++---------- src/pages/token/BonkPnlLeaderboardPanel.tsx | 81 ++++++++++++++------- src/pages/token/RewardsPage.tsx | 28 +++++-- 5 files changed, 88 insertions(+), 76 deletions(-) diff --git a/package.json b/package.json index 81cd3a8394..154f7dc873 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@cosmjs/tendermint-rpc": "^0.32.1", "@datadog/browser-logs": "^5.23.3", "@dydxprotocol/v4-client-js": "3.4.0", - "@dydxprotocol/v4-localization": "1.1.393", + "@dydxprotocol/v4-localization": "1.1.400", "@dydxprotocol/v4-proto": "^7.0.0-dev.0", "@emotion/is-prop-valid": "^1.3.0", "@hugocxl/react-to-image": "^0.0.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b78d95bc41..6cf5e39a4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ dependencies: specifier: 3.4.0 version: 3.4.0 '@dydxprotocol/v4-localization': - specifier: 1.1.393 - version: 1.1.393 + specifier: 1.1.400 + version: 1.1.400 '@dydxprotocol/v4-proto': specifier: ^7.0.0-dev.0 version: 7.0.5 @@ -1732,8 +1732,8 @@ packages: - utf-8-validate dev: false - /@dydxprotocol/v4-localization@1.1.393: - resolution: {integrity: sha512-z3CUWqyxLHBipFnkHFbODXljZ82gMKtPUulvPVlJXrAiL6fJX5Y1FpI0YHTMWk98jSBDlK8z6TaRtasnwq14Xw==} + /@dydxprotocol/v4-localization@1.1.400: + resolution: {integrity: sha512-VOPMYxmn9UONmtYxG7N0YBqOlTLIkHukSPy+PTxiOAVIuON2hSP8/TAmvIneGXMXyZhI7InsdhXDcePvozBxwA==} dev: false /@dydxprotocol/v4-proto@7.0.5: diff --git a/src/hooks/rewards/hooks.ts b/src/hooks/rewards/hooks.ts index e947f759d5..ad9821a433 100644 --- a/src/hooks/rewards/hooks.ts +++ b/src/hooks/rewards/hooks.ts @@ -65,9 +65,9 @@ export type BonkPnlItem = { export type BonkPnlLeaderboardItem = { address: string; pnl: number; - volume: number; position: number; - markets: MarketInfo['assetId'][]; + tickers: MarketInfo['assetId'][]; + volume: number; }; export function useFeeLeaderboard({ address }: { address?: string }) { @@ -156,43 +156,10 @@ export function useBonkPnlDistribution() { } async function getBonkPnlLeaderboard() { - // const res = await fetch( - // 'https://pp-external-api-ffb2ad95ef03.herokuapp.com/api/dydx-bonk-pnl-leaderboard?perPage=1000' - // ); - // const parsedRes = await res.json(); - // TODO: remove this mock data once the endpoint above is implemented - const parsedRes = { - data: [ - { - address: '0x1234567890123456789012345678901234567890', - pnl: 100000, - volume: 100, - position: 1, - markets: ['BTC-USDC', 'ETH-USDC', 'BONK-USDC', 'SOL-USDC'], - }, - { - address: '0x1234567890123456789012345678901234567890', - pnl: 10000, - volume: 100, - position: 2, - markets: ['BTC-USDC', 'BONK-USDC'], - }, - { - address: '0x1234567890123456789012345678901234567890', - pnl: 1000, - volume: 100, - position: 3, - markets: ['BTC-USDC', 'ETH-USDC'], - }, - { - address: 'dydx136v96yl20cud87yc3fv8kn3q3gvwhejume6ew4', - pnl: 1000, - volume: 100, - position: 420, - markets: ['BTC-USDC', 'BONK-USDC'], - }, - ], - }; + const res = await fetch( + 'https://pp-external-api-ffb2ad95ef03.herokuapp.com/api/dydx-bonk-pnl-all-time?perPage=2000' + ); + const parsedRes = await res.json(); return parsedRes.data as BonkPnlLeaderboardItem[]; } diff --git a/src/pages/token/BonkPnlLeaderboardPanel.tsx b/src/pages/token/BonkPnlLeaderboardPanel.tsx index 9058f9836d..dbb568f4a0 100644 --- a/src/pages/token/BonkPnlLeaderboardPanel.tsx +++ b/src/pages/token/BonkPnlLeaderboardPanel.tsx @@ -1,5 +1,7 @@ import { useCallback } from 'react'; +import { BonsaiCore } from '@/bonsai/ontology'; +import { AllAssetData } from '@/bonsai/types/summaryTypes'; import styled from 'styled-components'; import { STRING_KEYS, StringGetterFunction } from '@/constants/localization'; @@ -18,6 +20,8 @@ import { Output, OutputType } from '@/components/Output'; import { Panel } from '@/components/Panel'; import { ColumnDef, Table } from '@/components/Table'; +import { useAppSelector } from '@/state/appTypes'; + import { exportCSV } from '@/lib/csv'; import { truncateAddress } from '@/lib/wallet'; @@ -25,6 +29,7 @@ export enum BonkPnlTableColumns { Rank = 'Rank', Trader = 'Trader', Markets = 'Markets', + Volume = 'Volume', PNL = 'PNL', } @@ -32,6 +37,7 @@ export const BonkPnlLeaderboardPanel = () => { const stringGetter = useStringGetter(); const { data: bonkPnls, isLoading } = useBonkPnlLeaderboard(); const { dydxAddress } = useAccounts(); + const allAssets = useAppSelector(BonsaiCore.markets.assets.data); const getRowKey = useCallback((row: BonkPnlLeaderboardItem) => row.position, []); @@ -40,6 +46,7 @@ export const BonkPnlLeaderboardPanel = () => { key, stringGetter, dydxAddress, + allAssets, }) ); @@ -57,9 +64,9 @@ export const BonkPnlLeaderboardPanel = () => { const csvRows = data.map((item) => ({ rank: item.position, address: item.address, - markets: item.markets.join(','), - pnl: item.pnl, + markets: item.tickers.join(','), volume: item.volume, + pnl: item.pnl, })); exportCSV(csvRows, { @@ -77,6 +84,10 @@ export const BonkPnlLeaderboardPanel = () => { key: 'markets', displayLabel: stringGetter({ key: STRING_KEYS.MARKETS }), }, + { + key: 'volumne', + displayLabel: stringGetter({ key: STRING_KEYS.VOLUME }), + }, { key: 'pnl', displayLabel: stringGetter({ key: STRING_KEYS.PNL }), @@ -89,10 +100,7 @@ export const BonkPnlLeaderboardPanel = () => { <$Panel>
-
- Top Traders - {/* {stringGetter({ key: STRING_KEYS.TOP_TRADERS })} */} -
+
{stringGetter({ key: STRING_KEYS.BONK_TOP_TRADERS })}
), - renderCell: ({ position, address }) => ( -
+ renderCell: ({ pnl, position, address }) => ( +
- {position} + {pnl === 0 ? 'Unranked' : position}
- {position === 1 && } - {position === 2 && } - {position === 3 && } + {position === 1 && } + {position === 2 && } + {position === 3 && } {address === dydxAddress && (
@@ -214,29 +224,34 @@ const getBonkPnlTableColumnDef = ({ [BonkPnlTableColumns.Markets]: { columnKey: BonkPnlTableColumns.Markets, getCellValue: (row) => - Array.from(new Set(row.markets.flatMap((m) => m.split('-')))).join(','), + Array.from(new Set(row.tickers.flatMap((m) => m.split('-')))).join(','), label: (
{stringGetter({ key: STRING_KEYS.MARKETS })}
), - renderCell: ({ markets }) => { - const marketsArray = Array.from(new Set(markets.flatMap((m) => m.split('-')))); + renderCell: ({ tickers }) => { + const uniqueAssets = Array.from(new Set(tickers.flatMap((t) => t.split('-')))).filter( + (t) => t !== 'USD' + ); return (
- {marketsArray.slice(0, 4).map((market, index) => ( - - - - ))} - {markets.length >= 4 && ( + {uniqueAssets.slice(0, 4).map((ticker, index) => { + const logoUrl = allAssets?.[ticker]?.logo; + return ( + + + + ); + })} + {tickers.length >= 4 && (
- +{markets.length - 3} + +{tickers.length - 3}
)} @@ -244,6 +259,18 @@ const getBonkPnlTableColumnDef = ({ ); }, }, + [BonkPnlTableColumns.Volume]: { + columnKey: BonkPnlTableColumns.Volume, + getCellValue: (row) => row.volume, + label: ( +
+ {stringGetter({ key: STRING_KEYS.VOLUME })} +
+ ), + renderCell: ({ volume }) => ( + + ), + }, [BonkPnlTableColumns.PNL]: { columnKey: BonkPnlTableColumns.PNL, getCellValue: (row) => row.pnl, diff --git a/src/pages/token/RewardsPage.tsx b/src/pages/token/RewardsPage.tsx index de4df8c796..e6e6200f2e 100644 --- a/src/pages/token/RewardsPage.tsx +++ b/src/pages/token/RewardsPage.tsx @@ -10,6 +10,7 @@ import { ComplianceStates } from '@/constants/compliance'; import { STRING_KEYS } from '@/constants/localization'; import { EMPTY_ARR } from '@/constants/objects'; import { AppRoute } from '@/constants/routes'; +import { timeUnits } from '@/constants/time'; import { CURRENT_BONK_REWARDS_DETAILS } from '@/hooks/rewards/util'; import { useBreakpoints } from '@/hooks/useBreakpoints'; @@ -24,6 +25,7 @@ import { BackButton } from '@/components/BackButton'; import { DetachedSection } from '@/components/ContentSection'; import { ContentSectionHeader } from '@/components/ContentSectionHeader'; import { Tabs } from '@/components/Tabs'; +import { Tag } from '@/components/Tag'; import { TermsOfUseLink } from '@/components/TermsOfUseLink'; import { orEmptyObj } from '@/lib/typeUtils'; @@ -51,16 +53,15 @@ enum Tab { } const RewardsPage = () => { - const { titleStringKey } = CURRENT_BONK_REWARDS_DETAILS; + const { titleStringKey, endTime } = CURRENT_BONK_REWARDS_DETAILS; const stringGetter = useStringGetter(); const navigate = useNavigate(); - // Bonk is always enabled const { complianceState } = useComplianceState(); const { isTablet } = useBreakpoints(); const enableLiquidationRebates = useEnableLiquidationRebates(); const { usdcDenom } = useTokenConfigs(); - const [value, setValue] = useState(Tab.BonkPnl); + const [value, setValue] = useState(Tab.Leaderboard); const { totalRewards } = orEmptyObj(BonsaiHooks.useStakingRewards().data); @@ -84,6 +85,12 @@ const RewardsPage = () => {
); + const endMs = new Date(endTime).getTime(); + const msRemaining = endMs - Date.now(); + const hasEnded = msRemaining <= 0; + const daysRemaining = Math.ceil(msRemaining / timeUnits.day); + const endingSoon = !hasEnded && daysRemaining <= 5; + const tabs = [ { content: ( @@ -101,7 +108,18 @@ const RewardsPage = () => {
), - label: stringGetter({ key: titleStringKey }), + label: ( +
+ {stringGetter({ key: titleStringKey })} + {hasEnded ? ( + {stringGetter({ key: STRING_KEYS.ENDED })} + ) : endingSoon ? ( + + {daysRemaining} {daysRemaining === 1 ? 'day' : 'days'} left + + ) : null} +
+ ), value: Tab.BonkPnl, }, ...(enableLiquidationRebates @@ -153,7 +171,6 @@ const RewardsPage = () => { <$DetachedSection>
<$Tabs - fullWidthTabs dividerStyle="underline" value={value} onValueChange={(v: Tab) => { @@ -195,4 +212,5 @@ const $Tabs = styled(Tabs)` --trigger-backgroundColor: transparent; --trigger-active-underline-backgroundColor: var(--color-layer-0); background-color: var(--color-layer-0); + overscroll-behavior: contain auto; ` as typeof Tabs; From 3402b33cf193da8e5faebae5be456a6e35ef65ec Mon Sep 17 00:00:00 2001 From: dwjanus Date: Mon, 16 Mar 2026 12:24:41 -0400 Subject: [PATCH 3/4] fix dialog string key --- src/views/dialogs/TransferDialogs/DepositAddressDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/dialogs/TransferDialogs/DepositAddressDialog.tsx b/src/views/dialogs/TransferDialogs/DepositAddressDialog.tsx index 93b7e85259..eb84646a65 100644 --- a/src/views/dialogs/TransferDialogs/DepositAddressDialog.tsx +++ b/src/views/dialogs/TransferDialogs/DepositAddressDialog.tsx @@ -164,7 +164,7 @@ export const DepositAddressDialog = ({ setIsOpen }: DialogProps {stringGetter({ - key: STRING_KEYS.DEPOSIT_NETWORK_WARNING, + key: STRING_KEYS.DEPOSIT_LOSS_OF_FUNDS_WARNING, params: warningMessageParams, })} From 3c6f8db41413c1b5e4bbf42b8d08f8df1a9bcb93 Mon Sep 17 00:00:00 2001 From: dwjanus Date: Tue, 17 Mar 2026 09:26:58 -0400 Subject: [PATCH 4/4] localize no data message --- src/pages/token/BonkPnlLeaderboardPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/token/BonkPnlLeaderboardPanel.tsx b/src/pages/token/BonkPnlLeaderboardPanel.tsx index dbb568f4a0..a9465b7fc7 100644 --- a/src/pages/token/BonkPnlLeaderboardPanel.tsx +++ b/src/pages/token/BonkPnlLeaderboardPanel.tsx @@ -130,7 +130,7 @@ export const BonkPnlLeaderboardPanel = () => { ) : (
- No data available + {stringGetter({ key: STRING_KEYS.AFFILIATE_CHART_EMPTY_STATE })}
) }