diff --git a/RELEASE b/RELEASE index 2028432287a..459d31e19e8 100644 --- a/RELEASE +++ b/RELEASE @@ -1,6 +1,6 @@ IPFS hash of the deployment: -- CIDv0: `QmWaBTFEnY4LqKBdeyyRBmwhCuphBhe3p3CKmxnnuNhY5z` -- CIDv1: `bafybeid2kthnxmhk5tcm2ogpsjzooeo3dj6bt2oh6tk3vbrsqf4sc2ogju` +- CIDv0: `Qma3xNtyKF992ESqe25eV3JTR8LGZwuLLx2HyfJ2LwcGRw` +- CIDv1: `bafybeifoavmpqbbjcli2mn7q35itqfnsuiitrvfxvxkikguokyij7cqbhi` The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). @@ -10,15 +10,83 @@ You can also access the Uniswap Interface from an IPFS gateway. Your Uniswap settings are never remembered across different URLs. IPFS gateways: -- https://bafybeid2kthnxmhk5tcm2ogpsjzooeo3dj6bt2oh6tk3vbrsqf4sc2ogju.ipfs.dweb.link/ -- https://bafybeid2kthnxmhk5tcm2ogpsjzooeo3dj6bt2oh6tk3vbrsqf4sc2ogju.ipfs.cf-ipfs.com/ -- [ipfs://QmWaBTFEnY4LqKBdeyyRBmwhCuphBhe3p3CKmxnnuNhY5z/](ipfs://QmWaBTFEnY4LqKBdeyyRBmwhCuphBhe3p3CKmxnnuNhY5z/) +- https://bafybeifoavmpqbbjcli2mn7q35itqfnsuiitrvfxvxkikguokyij7cqbhi.ipfs.dweb.link/ +- https://bafybeifoavmpqbbjcli2mn7q35itqfnsuiitrvfxvxkikguokyij7cqbhi.ipfs.cf-ipfs.com/ +- [ipfs://Qma3xNtyKF992ESqe25eV3JTR8LGZwuLLx2HyfJ2LwcGRw/](ipfs://Qma3xNtyKF992ESqe25eV3JTR8LGZwuLLx2HyfJ2LwcGRw/) -### 5.63.4 (2025-01-02) +## 5.64.0 (2025-01-08) + + +### Features + +* **web:** add pagination to the positions page (#14478) 69771b0 +* **web:** add recommended tooltip (#14574) 7a763dc +* **web:** allow users to add with eth/weth (#14461) 4740134 +* **web:** allowing users to remove with eth (#14519) 344c6a4 +* **web:** disable clicking on FOR activity until confirmed on chain (#14605) f8c541a +* **web:** Enable GPU acceleration and layout containment on AppBody (#14710) 6f0b0ca ### Bug Fixes -* **web:** set duped events as executed to prevent retry - prod (#14781) 35193b4 +* **web:** 01 07 fix web re add images prop to portfoliologo and use split logo staging (#14876) 02a3013 +* **web:** 01 08 fix web fix double logo on doublecurrencyandchainlogo staging (#14948) 1b606bb +* **web:** add analyze mode to build script (#14610) c9f9392 +* **web:** add monad testnet rpc to web env (#14563) 649d925 +* **web:** add white bgs to images and use universe token logos (#14604) c8ac0c9 +* **web:** Adrian/direct t fixes staging (#14941) 58f2954 +* **web:** bring back network logo on logoless placeholder (#14803) 97bda9d +* **web:** early return isRNDev (#14685) fb77d3a +* **web:** enable unitag search with suffix (#14711) 993cbd6 +* **web:** fix alignment of liquidity header modal (#14682) b39d879 +* **web:** fix conversion event success handler (#14532) e81947b +* **web:** fix crash on positions page (#14562) 2ba514a +* **web:** fix disabled swap button for previously-dismissed warning tokens (#14553) 5a987f5 +* **web:** fix miniP truncated closed positions + testnet mode in pools tab (#14666) 69c50a7 +* **web:** fix missing mweb swap (#14567) 0eab28e +* **web:** fix responsive walletconnect pane expando line (#14661) 81fd2ea +* **web:** fix v2 lp networks dropdown (#14576) a4f41d9 +* **web:** fix v2 position page crash (#14792) af9dd17 +* **web:** info text should be heading3 variant (#14739) 1dbc971 +* **web:** input focus state on press (#14759) e090f25 +* **web:** landing page translations line break (#14649) c1fb00f +* **web:** modal height fix (#14538) c7eac8b +* **web:** open LP learn more links in new tabs (#14568) 57c0752 +* **web:** overflow issues in chart header (#14744) 1de24a8 +* **web:** polish sprint nits (#14624) 2849220 +* **web:** set duped events as executed to prevent retry (#14771) 6dcb3ef +* **web:** show more button hiding (#14742) a5edb7a +* **web:** some rich link previews broken bc their logo is a webp (#14638) 350a2d6 +* **web:** submit conversion events to amplitude (#14497) e172586 +* **web:** switch to new marketing events (#14700) 35d9d4f +* **web:** theme value transition for explore page tabs (#14609) 5bb4160 +* **web:** tree-shake wagmi chains (#14566) 2c3d079 +* **web:** truncation issue on max price position text (#14573) f137c41 +* **web:** update global preferences menu (#14636) 38d5f38 +* **web:** update tdp default input currency (#14699) d7147af +* **web:** URL prefill param without ?chain should use default chain instead of wallet chain (#14227) a8c57d6 +* **web): Revert "feat(web:** Enable GPU acceleration and layout containment on AppBody (#14710)" (#14788) a5b4976 + + +### Continuous Integration + +* **web:** update sitemaps 77b75a6 + + +### Styles + +* **web:** all networks icon in explore page dropdown (#14639) bf1a42b +* **web:** decrease font size for Learn More link (#14626) 6ea86c2 +* **web:** fix helper icon alignment in search dropdown (#14680) 237e505 +* **web:** fix hover on active explore tabs (#14646) b1180ea +* **web:** fix some style nits in explore token page mobile action tabs (#14743) 9100557 + + +### Code Refactoring + +* **web:** refactor use is x page part 2 (#14652) aa54d69 +* **web:** refactor use X page into reusable hook (#14651) f53fa2b +* **web:** refactor useIsNfts hook (#14653) 0132ff0 +* **web:** use default match types and include optional override (#14704) edf95e9 diff --git a/VERSION b/VERSION index 5f7c11993e8..1aa9756d910 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -web/5.63.4 \ No newline at end of file +web/5.64.0 \ No newline at end of file diff --git a/apps/extension/jest-setup.js b/apps/extension/jest-setup.js index 5b05899861b..16ddbcc41db 100644 --- a/apps/extension/jest-setup.js +++ b/apps/extension/jest-setup.js @@ -1,17 +1,14 @@ -import 'utilities/src/logger/mocks' +import 'utilities/jest-package-mocks' +import 'uniswap/jest-package-mocks' +import 'wallet/jest-package-mocks' +import 'ui/jest-package-mocks' import { chrome } from 'jest-chrome' import { AppearanceSettingType } from 'wallet/src/features/appearance/slice' -import { TextEncoder, TextDecoder } from 'util' import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider' -import { mockUIAssets } from 'ui/src/test/mocks/mockUIAssets' -import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale' process.env.IS_UNISWAP_EXTENSION = true -global.TextEncoder = TextEncoder; -global.TextDecoder = TextDecoder; - const ignoreLogs = { error: [ // We need to use _persist property to ensure that the state is properly @@ -73,8 +70,3 @@ jest.mock('wallet/src/features/appearance/hooks', () => { } }) -jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({})) - -jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider) - -mockUIAssets() diff --git a/apps/extension/src/app/OnboardingApp.tsx b/apps/extension/src/app/OnboardingApp.tsx index 3b46ad40ceb..ea248168bd1 100644 --- a/apps/extension/src/app/OnboardingApp.tsx +++ b/apps/extension/src/app/OnboardingApp.tsx @@ -45,7 +45,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace' import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { ExtensionOnboardingFlow } from 'uniswap/src/types/screens/extension' import { ErrorBoundary } from 'wallet/src/components/ErrorBoundary/ErrorBoundary' import { SharedWalletProvider } from 'wallet/src/providers/SharedWalletProvider' diff --git a/apps/extension/src/app/PopupApp.tsx b/apps/extension/src/app/PopupApp.tsx index b4ababc497e..832c48e49fd 100644 --- a/apps/extension/src/app/PopupApp.tsx +++ b/apps/extension/src/app/PopupApp.tsx @@ -23,7 +23,7 @@ import { syncAppWithDeviceLanguage } from 'uniswap/src/features/settings/slice' import Trace from 'uniswap/src/features/telemetry/Trace' import { ElementName } from 'uniswap/src/features/telemetry/constants' import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { ExtensionScreens } from 'uniswap/src/types/screens/extension' import { getUniqueId } from 'utilities/src/device/getUniqueId' import { logger } from 'utilities/src/logger/logger' diff --git a/apps/extension/src/app/SidebarApp.tsx b/apps/extension/src/app/SidebarApp.tsx index c70497567b1..6ec06170e40 100644 --- a/apps/extension/src/app/SidebarApp.tsx +++ b/apps/extension/src/app/SidebarApp.tsx @@ -46,7 +46,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace' import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { UnitagUpdaterContextProvider, useUnitagUpdater } from 'uniswap/src/features/unitags/context' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { getUniqueId } from 'utilities/src/device/getUniqueId' import { isDevEnv } from 'utilities/src/environment/env' import { logger } from 'utilities/src/logger/logger' diff --git a/apps/extension/src/app/UnitagClaimApp.tsx b/apps/extension/src/app/UnitagClaimApp.tsx index a3d35d65711..3a9186a92ae 100644 --- a/apps/extension/src/app/UnitagClaimApp.tsx +++ b/apps/extension/src/app/UnitagClaimApp.tsx @@ -31,7 +31,7 @@ import { BlankUrlProvider } from 'uniswap/src/contexts/UrlContext' import { LocalizationContextProvider } from 'uniswap/src/features/language/LocalizationContext' import Trace from 'uniswap/src/features/telemetry/Trace' import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { getUniqueId } from 'utilities/src/device/getUniqueId' import { logger } from 'utilities/src/logger/logger' import { usePrevious } from 'utilities/src/react/hooks' diff --git a/apps/extension/src/app/apollo.tsx b/apps/extension/src/app/apollo.tsx index 450dbf02cb3..9f112a6a364 100644 --- a/apps/extension/src/app/apollo.tsx +++ b/apps/extension/src/app/apollo.tsx @@ -1,6 +1,7 @@ import { ApolloProvider } from '@apollo/client' import { PropsWithChildren } from 'react' import { localStorage } from 'redux-persist-webextension-storage' +import { getReduxStore } from 'src/store/store' // eslint-disable-next-line no-restricted-imports import { usePersistedApolloClient } from 'wallet/src/data/apollo/usePersistedApolloClient' @@ -11,6 +12,7 @@ export function GraphqlProvider({ children }: PropsWithChildren): JSX.E const apolloClient = usePersistedApolloClient({ storageWrapper: localStorage, maxCacheSizeInBytes: MAX_CACHE_SIZE_IN_BYTES, + reduxStore: getReduxStore(), }) if (!apolloClient) { diff --git a/apps/extension/src/app/components/PasswordInput.tsx b/apps/extension/src/app/components/PasswordInput.tsx index 0213f88aaa9..becd9c20e55 100644 --- a/apps/extension/src/app/components/PasswordInput.tsx +++ b/apps/extension/src/app/components/PasswordInput.tsx @@ -1,4 +1,5 @@ import { forwardRef } from 'react' +import { useTranslation } from 'react-i18next' import { TextInput } from 'react-native' import { Input, InputProps } from 'src/app/components/Input' import { Button, Flex, FlexProps, IconProps, Text } from 'ui/src' @@ -50,11 +51,12 @@ export const PasswordInput = forwardRef(function }) function StrengthIndicator({ strength }: { strength: PasswordStrength }): JSX.Element | null { + const { t } = useTranslation() if (strength === PasswordStrength.NONE) { return null } - const { text, color } = getPasswordStrengthTextAndColor(strength) + const { text, color } = getPasswordStrengthTextAndColor(t, strength) return ( diff --git a/apps/extension/src/app/datadog.ts b/apps/extension/src/app/datadog.ts index 2ea7c2d802a..10fb6750209 100644 --- a/apps/extension/src/app/datadog.ts +++ b/apps/extension/src/app/datadog.ts @@ -2,8 +2,14 @@ import { datadogLogs } from '@datadog/browser-logs' import { datadogRum } from '@datadog/browser-rum' import { getDatadogEnvironment } from 'src/app/version' import { config } from 'uniswap/src/config' +import { + DatadogIgnoredErrorsConfigKey, + DatadogIgnoredErrorsValType, + DynamicConfigs, +} from 'uniswap/src/features/gating/configs' import { Experiments } from 'uniswap/src/features/gating/experiments' import { FeatureFlags, WALLET_FEATURE_FLAG_NAMES, getFeatureFlagName } from 'uniswap/src/features/gating/flags' +import { getDynamicConfigValue } from 'uniswap/src/features/gating/hooks' import { Statsig } from 'uniswap/src/features/gating/sdk/statsig' import { getUniqueId } from 'utilities/src/device/getUniqueId' import { logger } from 'utilities/src/logger/logger' @@ -39,12 +45,24 @@ export async function initializeDatadog(appName: string): Promise { if (event.error.source === 'console') { return false } + const ignoredErrors = getDynamicConfigValue< + DynamicConfigs.DatadogIgnoredErrors, + DatadogIgnoredErrorsConfigKey, + DatadogIgnoredErrorsValType + >(DynamicConfigs.DatadogIgnoredErrors, DatadogIgnoredErrorsConfigKey.Errors, []) + + const ignoredError = ignoredErrors.find(({ messageContains }) => event.error?.message.includes(messageContains)) + if (ignoredError && Math.random() > ignoredError.sampleRate) { + return false + } + Object.defineProperty(event.error, 'stack', { value: event.error.stack?.replace(/chrome-extension:\/\/[a-z]{32}/gi, ''), writable: false, configurable: true, }) } + return true }, }) diff --git a/apps/extension/src/app/features/appRating/AppRatingModal.tsx b/apps/extension/src/app/features/appRating/AppRatingModal.tsx index 4127e83d975..1662b755b01 100644 --- a/apps/extension/src/app/features/appRating/AppRatingModal.tsx +++ b/apps/extension/src/app/features/appRating/AppRatingModal.tsx @@ -1,12 +1,14 @@ import { useEffect, useState } from 'react' -import { useDispatch } from 'react-redux' +import { useTranslation } from 'react-i18next' +import { useDispatch, useSelector } from 'react-redux' import { Button, Flex, Text, TouchableArea } from 'ui/src' import { Feedback, LikeSquare, MessageText, X } from 'ui/src/components/icons' import { IconSizeTokens, zIndices } from 'ui/src/theme' import { Modal } from 'uniswap/src/components/modals/Modal' import { uniswapUrls } from 'uniswap/src/constants/urls' -import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' +import { ModalName, WalletEventName } from 'uniswap/src/features/telemetry/constants' +import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' +import { appRatingPromptedMsSelector, appRatingProvidedMsSelector } from 'wallet/src/features/wallet/selectors' import { setAppRating } from 'wallet/src/features/wallet/slice' interface AppRatingModalProps { @@ -23,6 +25,26 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El const { t } = useTranslation() const [state, setState] = useState(State.Initial) const dispatch = useDispatch() + const appRatingPromptedMs = useSelector(appRatingPromptedMsSelector) + const appRatingProvidedMs = useSelector(appRatingProvidedMsSelector) + + const close = (): void => { + sendAnalyticsEvent(WalletEventName.AppRating, { + type: 'close', + appRatingPromptedMs, + appRatingProvidedMs, + }) + onClose() + } + + const onRemindLater = (): void => { + sendAnalyticsEvent(WalletEventName.AppRating, { + type: 'remind', + appRatingPromptedMs, + appRatingProvidedMs, + }) + onClose() + } const stateConfig = { [State.Initial]: { @@ -42,11 +64,16 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El primaryButtonText: t('appRating.feedback.button.send'), Icon: MessageText, iconSize: '$icon.18' as IconSizeTokens, - onSecondaryButtonPress: () => onClose(), + onSecondaryButtonPress: onRemindLater, onPrimaryButtonPress: (): void => { // eslint-disable-next-line security/detect-non-literal-fs-filename window.open(uniswapUrls.walletFeedbackForm) dispatch(setAppRating({ feedbackProvided: true })) + sendAnalyticsEvent(WalletEventName.AppRating, { + type: 'feedback-form', + appRatingPromptedMs, + appRatingProvidedMs, + }) onClose() }, }, @@ -57,11 +84,16 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El primaryButtonText: t('common.button.review'), Icon: Feedback, iconSize: '$icon.24' as IconSizeTokens, - onSecondaryButtonPress: () => onClose(), + onSecondaryButtonPress: onRemindLater, onPrimaryButtonPress: (): void => { // eslint-disable-next-line security/detect-non-literal-fs-filename window.open(`https://chromewebstore.google.com/detail/uniswap-extension/${chrome.runtime.id}/reviews`) dispatch(setAppRating({ ratingProvided: true })) + sendAnalyticsEvent(WalletEventName.AppRating, { + type: 'store-review', + appRatingPromptedMs, + appRatingProvidedMs: Date.now(), // to avoid race condition with updates from redux + }) onClose() }, }, @@ -84,8 +116,8 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El }, [dispatch]) return ( - - + + diff --git a/apps/extension/src/app/features/onboarding/OnboardingScreenFrame.tsx b/apps/extension/src/app/features/onboarding/OnboardingScreenFrame.tsx index c36f8312fdd..7184529b955 100644 --- a/apps/extension/src/app/features/onboarding/OnboardingScreenFrame.tsx +++ b/apps/extension/src/app/features/onboarding/OnboardingScreenFrame.tsx @@ -2,7 +2,7 @@ import { useTranslation } from 'react-i18next' import { OnboardingScreenProps } from 'src/app/features/onboarding/OnboardingScreenProps' import { Button, Flex, Text, TouchableArea } from 'ui/src' import { BackArrow } from 'ui/src/components/icons' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' export function OnboardingScreenFrame({ Icon, diff --git a/apps/extension/src/app/features/settings/DevMenuScreen.tsx b/apps/extension/src/app/features/settings/DevMenuScreen.tsx index 5b9f00def1f..565fc44933e 100644 --- a/apps/extension/src/app/features/settings/DevMenuScreen.tsx +++ b/apps/extension/src/app/features/settings/DevMenuScreen.tsx @@ -7,7 +7,7 @@ import { Settings } from 'ui/src/components/icons' import { Language, WALLET_SUPPORTED_LANGUAGES } from 'uniswap/src/features/language/constants' import { getLanguageInfo, useCurrentLanguageInfo } from 'uniswap/src/features/language/hooks' import { setCurrentLanguage } from 'uniswap/src/features/settings/slice' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { GatingOverrides } from 'wallet/src/components/gating/GatingOverrides' export function DevMenuScreen(): JSX.Element { diff --git a/apps/extension/src/app/features/settings/password/SettingsChangePasswordScreen.tsx b/apps/extension/src/app/features/settings/password/SettingsChangePasswordScreen.tsx index 67ca27a0306..df222e426d5 100644 --- a/apps/extension/src/app/features/settings/password/SettingsChangePasswordScreen.tsx +++ b/apps/extension/src/app/features/settings/password/SettingsChangePasswordScreen.tsx @@ -1,5 +1,5 @@ -import { t } from 'i18next' import { useState } from 'react' +import { useTranslation } from 'react-i18next' import { ScreenHeader } from 'src/app/components/layout/ScreenHeader' import { ChangePasswordForm } from 'src/app/features/settings/password/ChangePasswordForm' import { EnterPasswordForm } from 'src/app/features/settings/password/EnterPasswordForm' @@ -12,6 +12,7 @@ enum Step { } export function SettingsChangePasswordScreen(): JSX.Element { + const { t } = useTranslation() const [currentStep, setCurrentStep] = useState(Step.EnterPassword) const { navigateBack } = useExtensionNavigation() diff --git a/apps/extension/src/app/features/unitags/UnitagChooseProfilePicScreen.tsx b/apps/extension/src/app/features/unitags/UnitagChooseProfilePicScreen.tsx index ec5b920bdb6..eaf2120775f 100644 --- a/apps/extension/src/app/features/unitags/UnitagChooseProfilePicScreen.tsx +++ b/apps/extension/src/app/features/unitags/UnitagChooseProfilePicScreen.tsx @@ -1,5 +1,5 @@ -import { t } from 'i18next' import { useCallback, useEffect } from 'react' +import { useTranslation } from 'react-i18next' import { OnboardingScreen } from 'src/app/features/onboarding/OnboardingScreen' import { useOnboardingSteps } from 'src/app/features/onboarding/OnboardingStepsContext' import { useUnitagClaimContext } from 'src/app/features/unitags/UnitagClaimContext' @@ -16,6 +16,7 @@ import { UnitagChooseProfilePicContent } from 'wallet/src/features/unitags/Unita import { useAccountAddressFromUrlWithThrow } from 'wallet/src/features/wallet/hooks' export function UnitagChooseProfilePicScreen(): JSX.Element { + const { t } = useTranslation() const { goToNextStep, goToPreviousStep } = useOnboardingSteps() const { unitag, entryPoint, setProfilePicUri } = useUnitagClaimContext() const address = useAccountAddressFromUrlWithThrow() diff --git a/apps/extension/src/app/features/unitags/UnitagCreateUsernameScreen.tsx b/apps/extension/src/app/features/unitags/UnitagCreateUsernameScreen.tsx index 9897f26b32b..e025048cca0 100644 --- a/apps/extension/src/app/features/unitags/UnitagCreateUsernameScreen.tsx +++ b/apps/extension/src/app/features/unitags/UnitagCreateUsernameScreen.tsx @@ -1,5 +1,5 @@ -import { t } from 'i18next' import { useCallback } from 'react' +import { useTranslation } from 'react-i18next' import { OnboardingScreen } from 'src/app/features/onboarding/OnboardingScreen' import { useOnboardingSteps } from 'src/app/features/onboarding/OnboardingStepsContext' import { useUnitagClaimContext } from 'src/app/features/unitags/UnitagClaimContext' @@ -14,6 +14,7 @@ import { useAccountAddressFromUrlWithThrow } from 'wallet/src/features/wallet/ho type onNavigateContinueType = Exclude export function UnitagCreateUsernameScreen(): JSX.Element { + const { t } = useTranslation() const { goToNextStep, goToPreviousStep } = useOnboardingSteps() const { setUnitag, setEntryPoint } = useUnitagClaimContext() const address = useAccountAddressFromUrlWithThrow() diff --git a/apps/mobile/ios/Uniswap.xcodeproj/project.pbxproj b/apps/mobile/ios/Uniswap.xcodeproj/project.pbxproj index 0eccb352a9c..20b4f4b5f34 100644 --- a/apps/mobile/ios/Uniswap.xcodeproj/project.pbxproj +++ b/apps/mobile/ios/Uniswap.xcodeproj/project.pbxproj @@ -164,6 +164,7 @@ 8EE7C0582AFD7B2100E0D9CD /* DescriptionTranslations.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE7C0572AFD7B2100E0D9CD /* DescriptionTranslations.graphql.swift */; }; 9127D1362CC2D3D00096F134 /* TokenBalanceMainParts.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9127D1342CC2D3D00096F134 /* TokenBalanceMainParts.graphql.swift */; }; 9127D1372CC2D3D00096F134 /* TokenBalanceQuantityParts.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9127D1352CC2D3D00096F134 /* TokenBalanceQuantityParts.graphql.swift */; }; + 9173CEBC2D03C6F30036DA28 /* TokenBalanceParts.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9173CEBB2D03C6F30036DA28 /* TokenBalanceParts.graphql.swift */; }; 91D501702CDBEAE700B09B7F /* TokenMarketParts.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D501652CDBEAE700B09B7F /* TokenMarketParts.graphql.swift */; }; 91D501712CDBEAE700B09B7F /* TokenBalanceMainParts.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D501662CDBEAE700B09B7F /* TokenBalanceMainParts.graphql.swift */; }; 91D501722CDBEAE700B09B7F /* TokenProjectMarketsParts.graphql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D501672CDBEAE700B09B7F /* TokenProjectMarketsParts.graphql.swift */; }; @@ -501,6 +502,7 @@ 8EE7C0572AFD7B2100E0D9CD /* DescriptionTranslations.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescriptionTranslations.graphql.swift; sourceTree = ""; }; 9127D1342CC2D3D00096F134 /* TokenBalanceMainParts.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenBalanceMainParts.graphql.swift; sourceTree = ""; }; 9127D1352CC2D3D00096F134 /* TokenBalanceQuantityParts.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenBalanceQuantityParts.graphql.swift; sourceTree = ""; }; + 9173CEBB2D03C6F30036DA28 /* TokenBalanceParts.graphql.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenBalanceParts.graphql.swift; sourceTree = ""; }; 91D501652CDBEAE700B09B7F /* TokenMarketParts.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenMarketParts.graphql.swift; sourceTree = ""; }; 91D501662CDBEAE700B09B7F /* TokenBalanceMainParts.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenBalanceMainParts.graphql.swift; sourceTree = ""; }; 91D501672CDBEAE700B09B7F /* TokenProjectMarketsParts.graphql.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenProjectMarketsParts.graphql.swift; sourceTree = ""; }; @@ -771,6 +773,7 @@ 91D5016A2CDBEAE700B09B7F /* TokenBalanceQuantityParts.graphql.swift */, 91D501682CDBEAE700B09B7F /* TokenBasicInfoParts.graphql.swift */, 91D501692CDBEAE700B09B7F /* TokenBasicProjectParts.graphql.swift */, + 9173CEBB2D03C6F30036DA28 /* TokenBalanceParts.graphql.swift */, 91D5016F2CDBEAE700B09B7F /* TokenFeeDataParts.graphql.swift */, 91D501652CDBEAE700B09B7F /* TokenMarketParts.graphql.swift */, 91D5016C2CDBEAE700B09B7F /* TokenParts.graphql.swift */, @@ -1923,6 +1926,7 @@ 0DE251482C13B69D005F47F9 /* OnRampServiceProvider.graphql.swift in Sources */, 074322002A83E3CA00F8518D /* AssetChange.graphql.swift in Sources */, 074322232A83E3CA00F8518D /* NftActivityConnection.graphql.swift in Sources */, + 9173CEBC2D03C6F30036DA28 /* TokenBalanceParts.graphql.swift in Sources */, 9127D1372CC2D3D00096F134 /* TokenBalanceQuantityParts.graphql.swift in Sources */, 0DE251432C13B674005F47F9 /* OnRampTransactionsAuth.graphql.swift in Sources */, 0743221B2A83E3CA00F8518D /* NftCollectionMarket.graphql.swift in Sources */, diff --git a/apps/mobile/jest-setup.js b/apps/mobile/jest-setup.js index 7e998c24660..5077b1a4e59 100644 --- a/apps/mobile/jest-setup.js +++ b/apps/mobile/jest-setup.js @@ -2,19 +2,14 @@ // For example: https://reactnavigation.org/docs/testing/ import 'core-js' // necessary so setImmediate works in tests -import 'uniswap/src/i18n/i18n' // Uses real translations for tests -import 'utilities/src/logger/mocks' +import 'utilities/jest-package-mocks' +import 'uniswap/jest-package-mocks' +import 'wallet/jest-package-mocks' +import 'ui/jest-package-mocks' -import mockRNCNetInfo from '@react-native-community/netinfo/jest/netinfo-mock.js' -import { localizeMock as mockRNLocalize } from 'react-native-localize/mock' -import { mockUIAssets } from 'ui/src/test/mocks/mockUIAssets' -import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale' -import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider' -import { TextDecoder, TextEncoder } from 'util' -import { AppearanceSettingType } from 'wallet/src/features/appearance/slice' +import 'uniswap/src/i18n' // Uses real translations for tests -global.TextEncoder = TextEncoder -global.TextDecoder = TextDecoder +import mockRNCNetInfo from '@react-native-community/netinfo/jest/netinfo-mock.js' jest.mock('@uniswap/client-explore/dist/uniswap/explore/v1/service-ExploreStatsService_connectquery', () => {}) @@ -78,31 +73,10 @@ jest.mock('@react-navigation/elements', () => ({ require('react-native-reanimated').setUpTests() -jest.mock('expo-localization', () => ({ - getLocales: () => [ - { - languageCode: 'en', - languageTag: 'en-US', - regionCode: null, - currencyCode: null, - currencySymbol: null, - decimalSeparator: null, - digitGroupingSeparator: null, - textDirection: null, - measurementSystem: null, - temperatureUnit: null, - }, - ], -})) - -jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({})) - jest.mock('react-native/Libraries/Share/Share', () => ({ share: jest.fn(), })) -jest.mock('react-native-localize', () => mockRNLocalize) - jest.mock('@react-native-firebase/auth', () => () => ({ signInAnonymously: jest.fn(), })) @@ -123,21 +97,7 @@ jest.mock('react-native/Libraries/Linking/Linking', () => ({ getInitialURL: jest.fn(), })) -// Mock the appearance hook for all tests -const mockAppearanceSetting = AppearanceSettingType.System -jest.mock('wallet/src/features/appearance/hooks', () => { - return { - useCurrentAppearanceSetting: () => mockAppearanceSetting, - } -}) -jest.mock('wallet/src/features/appearance/hooks', () => { - return { - useSelectedColorScheme: () => 'light', - } -}) jest.mock('openai') -jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider) -mockUIAssets() diff --git a/apps/mobile/scripts/testDeepLinks.sh b/apps/mobile/scripts/testDeepLinks.sh new file mode 100755 index 00000000000..f072a481b80 --- /dev/null +++ b/apps/mobile/scripts/testDeepLinks.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# This script tests deep links for the Uniswap mobile app locally. +# Usage: ./testDeepLinks.sh + +# It opens a series of URLs in the iOS simulator and terminates the app after each URL is opened. +# Arguments: +# user_id: The user ID to be included in some of the URLs. + +bundle_id="com.uniswap.mobile.dev" + +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +user_id="$1" + +urls=( + "uniswap://wc?uri=wc:af098@2?relay-protocol=irn&symKey=51e" + "uniswap://wc:af098@2?relay-protocol=irn&symKey=51e" + "uniswap://scantastic?param=value" + "uniswap://uwulink?param=value" + "uniswap://redirect?screen=transaction&fiatOffRamp=true&userAddress=$user_id&externalTransactionId=123" + "https://uniswap.org/app?screen=swap&userAddress=$user_id&inputCurrencyId=1-0x6B175474E89094C44Da98b954EedeAC495271d0F&outputCurrencyId=1-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48¤cyField=input&amount=100" + "https://uniswap.org/app?screen=transaction&fiatOnRamp=true&userAddress=$user_id" + "https://uniswap.org/app?screen=transaction&userAddress=$user_id" + "https://uniswap.org/app/wc?uri=wc:af098@2?relay-protocol=irn&symKey=51e" + "uniswap://app/fiatonramp?userAddress=$user_id&source=push" + "uniswap://app/tokendetails?currencyId=10-0x6fd9d7ad17242c41f7131d257212c54a0e816691&source=push" +) + +xcrun simctl terminate booted "$bundle_id" + +for url in "${urls[@]}"; do + echo "Opening URL: $url" + xcrun simctl openurl booted "$url" + sleep 10 + echo "Terminating app with bundle ID: $bundle_id" + xcrun simctl terminate booted "$bundle_id" +done diff --git a/apps/mobile/src/app/App.tsx b/apps/mobile/src/app/App.tsx index 21be7e3e89a..10b3a3ed86c 100644 --- a/apps/mobile/src/app/App.tsx +++ b/apps/mobile/src/app/App.tsx @@ -1,4 +1,5 @@ import { ApolloProvider } from '@apollo/client' +import { loadDevMessages, loadErrorMessages } from '@apollo/client/dev' import { DdRum, DdSdkReactNative } from '@datadog/mobile-react-native' import { BottomSheetModalProvider } from '@gorhom/bottom-sheet' import { PerformanceProfiler, RenderPassReport } from '@shopify/react-native-performance' @@ -61,7 +62,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace' import { MobileEventName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { CurrencyId } from 'uniswap/src/types/currency' import { getUniqueId } from 'utilities/src/device/getUniqueId' import { isDetoxBuild } from 'utilities/src/environment/constants' @@ -71,12 +72,12 @@ import { logger } from 'utilities/src/logger/logger' import { useAsyncData } from 'utilities/src/react/hooks' import { AnalyticsNavigationContextProvider } from 'utilities/src/telemetry/trace/AnalyticsNavigationContext' import { ErrorBoundary } from 'wallet/src/components/ErrorBoundary/ErrorBoundary' -import { selectAllowAnalytics } from 'wallet/src/features/telemetry/selectors' -import { useTestnetModeForLoggingAndAnalytics } from 'wallet/src/features/testnetMode/hooks' // eslint-disable-next-line no-restricted-imports import { usePersistedApolloClient } from 'wallet/src/data/apollo/usePersistedApolloClient' import { initFirebaseAppCheck } from 'wallet/src/features/appCheck/appCheck' import { useCurrentAppearanceSetting } from 'wallet/src/features/appearance/hooks' +import { selectAllowAnalytics } from 'wallet/src/features/telemetry/selectors' +import { useTestnetModeForLoggingAndAnalytics } from 'wallet/src/features/testnetMode/hooks' import { TransactionHistoryUpdater } from 'wallet/src/features/transactions/TransactionHistoryUpdater' import { WalletUniswapProvider } from 'wallet/src/features/transactions/contexts/WalletUniswapContext' import { Account } from 'wallet/src/features/wallet/accounts/types' @@ -88,6 +89,8 @@ enableFreeze(true) if (__DEV__) { registerConsoleOverrides() + loadDevMessages() + loadErrorMessages() } // Keep the splash screen visible while we fetch resources until one of our landing pages loads @@ -180,6 +183,7 @@ function AppOuter(): JSX.Element | null { storageWrapper: new MMKVWrapper(new MMKV()), maxCacheSizeInBytes: MAX_CACHE_SIZE_IN_BYTES, customEndpoint, + reduxStore: store, }) const onReportPrepared = useCallback((report: RenderPassReport) => { diff --git a/apps/mobile/src/app/DatadogProviderWrapper.tsx b/apps/mobile/src/app/DatadogProviderWrapper.tsx index 368e7195fff..46339d07b23 100644 --- a/apps/mobile/src/app/DatadogProviderWrapper.tsx +++ b/apps/mobile/src/app/DatadogProviderWrapper.tsx @@ -10,6 +10,12 @@ import { ErrorEventMapper } from '@datadog/mobile-react-native/lib/typescript/ru import { PropsWithChildren, default as React } from 'react' import { getDatadogEnvironment } from 'src/utils/version' import { config } from 'uniswap/src/config' +import { + DatadogIgnoredErrorsConfigKey, + DatadogIgnoredErrorsValType, + DynamicConfigs, +} from 'uniswap/src/features/gating/configs' +import { getDynamicConfigValue } from 'uniswap/src/features/gating/hooks' import { datadogEnabled, isDetoxBuild, isJestRun, localDevDatadogEnabled } from 'utilities/src/environment/constants' import { logger } from 'utilities/src/logger/logger' @@ -29,10 +35,17 @@ Object.assign(datadogConfig, { nativeCrashReportEnabled: true, verbosity: SdkVerbosity.INFO, errorEventMapper: (event: ReturnType) => { - // this is Sentry error, which is caused by the not complete closing of their SDK - if (event?.message.includes('Native is disabled')) { - return null + const ignoredErrors = getDynamicConfigValue< + DynamicConfigs.DatadogIgnoredErrors, + DatadogIgnoredErrorsConfigKey, + DatadogIgnoredErrorsValType + >(DynamicConfigs.DatadogIgnoredErrors, DatadogIgnoredErrorsConfigKey.Errors, []) + + const ignoredError = ignoredErrors.find(({ messageContains }) => event?.message.includes(messageContains)) + if (ignoredError) { + return Math.random() < ignoredError.sampleRate ? event : null } + return event }, }) diff --git a/apps/mobile/src/components/PriceExplorer/constants.ts b/apps/mobile/src/components/PriceExplorer/constants.ts index e725b225076..c0163dedeaa 100644 --- a/apps/mobile/src/components/PriceExplorer/constants.ts +++ b/apps/mobile/src/components/PriceExplorer/constants.ts @@ -1,6 +1,6 @@ import { HistoryDuration } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { ElementName } from 'uniswap/src/features/telemetry/constants' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' export const BUTTON_PADDING = 20 diff --git a/apps/mobile/src/components/QRCodeScanner/QRCodeScanner.tsx b/apps/mobile/src/components/QRCodeScanner/QRCodeScanner.tsx index 1a61949a8a7..d3bedc08979 100644 --- a/apps/mobile/src/components/QRCodeScanner/QRCodeScanner.tsx +++ b/apps/mobile/src/components/QRCodeScanner/QRCodeScanner.tsx @@ -13,6 +13,7 @@ import CameraScan from 'ui/src/assets/icons/camera-scan.svg' import { Global, PhotoStacked } from 'ui/src/components/icons' import { AnimatedFlex } from 'ui/src/components/layout/AnimatedFlex' import { useDeviceDimensions } from 'ui/src/hooks/useDeviceDimensions' +import { useSporeColorsForTheme } from 'ui/src/hooks/useSporeColors' import { iconSizes, spacing } from 'ui/src/theme' import PasteButton from 'uniswap/src/components/buttons/PasteButton' import { DevelopmentOnly } from 'wallet/src/components/DevelopmentOnly/DevelopmentOnly' @@ -43,7 +44,8 @@ export function QRCodeScanner(props: QRCodeScannerProps | WCScannerProps): JSX.E const isWalletConnectModal = isWalletConnect(props) const { t } = useTranslation() - const colors = useSporeColors() + const colors = useSporeColorsForTheme(theme) + const dimensions = useDeviceDimensions() const [permissionResponse, requestPermissionResponse] = Camera.useCameraPermissions() @@ -121,8 +123,6 @@ export function QRCodeScanner(props: QRCodeScannerProps | WCScannerProps): JSX.E const cameraHeight = CAMERA_ASPECT_RATIO * cameraWidth const scannerSize = Math.min(overlayWidth, cameraWidth) * SCAN_ICON_WIDTH_RATIO - const photoSelectBackgroundColor = useSporeColors(theme).surface1 - /** * Resets the camera auto focus to force the camera to refocus by toggling * the auto focus off and on. This allows us to manually let the user refocus @@ -184,7 +184,7 @@ export function QRCodeScanner(props: QRCodeScannerProps | WCScannerProps): JSX.E width="100%" onLayout={(event: LayoutChangeEvent): void => setInfoLayout(event.nativeEvent.layout)} > - + {t('qrScanner.title')} @@ -248,7 +248,7 @@ export function QRCodeScanner(props: QRCodeScannerProps | WCScannerProps): JSX.E > 0 && ( ) } diff --git a/apps/mobile/src/features/wallet/saga.ts b/apps/mobile/src/features/wallet/saga.ts index 3afc5e184f0..98407c5b2d2 100644 --- a/apps/mobile/src/features/wallet/saga.ts +++ b/apps/mobile/src/features/wallet/saga.ts @@ -3,7 +3,7 @@ import { dispatchNavigationAction } from 'src/app/navigation/rootNavigation' import { call, put, takeEvery } from 'typed-redux-saga' import { pushNotification } from 'uniswap/src/features/notifications/slice' import { AppNotificationType } from 'uniswap/src/features/notifications/types' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { MobileScreens } from 'uniswap/src/types/screens/mobile' import { restoreMnemonicComplete } from 'wallet/src/features/wallet/slice' diff --git a/apps/mobile/src/features/walletConnect/saga.ts b/apps/mobile/src/features/walletConnect/saga.ts index dc9b3fc4fd7..db48e338055 100644 --- a/apps/mobile/src/features/walletConnect/saga.ts +++ b/apps/mobile/src/features/walletConnect/saga.ts @@ -29,7 +29,7 @@ import { ALL_CHAIN_IDS, UniverseChainId } from 'uniswap/src/features/chains/type import { getChainLabel } from 'uniswap/src/features/chains/utils' import { pushNotification } from 'uniswap/src/features/notifications/slice' import { AppNotificationType } from 'uniswap/src/features/notifications/types' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { EthEvent, EthMethod, WalletConnectEvent } from 'uniswap/src/types/walletConnect' import { logger } from 'utilities/src/logger/logger' import { ONE_SECOND_MS } from 'utilities/src/time/time' diff --git a/apps/mobile/src/screens/AppLoadingScreen.tsx b/apps/mobile/src/screens/AppLoadingScreen.tsx index 356720d298a..5cd63c287c1 100644 --- a/apps/mobile/src/screens/AppLoadingScreen.tsx +++ b/apps/mobile/src/screens/AppLoadingScreen.tsx @@ -1,8 +1,8 @@ import { NativeStackScreenProps } from '@react-navigation/native-stack' import dayjs from 'dayjs' import { isEnrolledAsync } from 'expo-local-authentication' -import { t } from 'i18next' import { useCallback, useEffect, useState } from 'react' +import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { OnboardingStackParamList } from 'src/app/navigation/types' import { SplashScreen } from 'src/features/appLoading/SplashScreen' @@ -36,6 +36,7 @@ type Props = NativeStackScreenProps void } { + const { t } = useTranslation() const dispatch = useDispatch() const { setRecoveredImportedAccounts, finishOnboarding } = useOnboardingContext() @@ -58,7 +59,7 @@ function useFinishAutomatedRecovery(navigation: Props['navigation']): { }) setRecoveredImportedAccounts(accountsToImport) }, - [setRecoveredImportedAccounts], + [t, setRecoveredImportedAccounts], ) const finishRecovery = useCallback( diff --git a/apps/mobile/src/screens/ExchangeTransferConnecting.tsx b/apps/mobile/src/screens/ExchangeTransferConnecting.tsx index f23a3ced809..9cacd5bccec 100644 --- a/apps/mobile/src/screens/ExchangeTransferConnecting.tsx +++ b/apps/mobile/src/screens/ExchangeTransferConnecting.tsx @@ -83,7 +83,7 @@ export function ExchangeTransferConnecting({ }) await openUri(widgetUrl).catch(onError) - dispatchAddTransaction() + dispatchAddTransaction({ isOffRamp: false }) } if (timeoutElapsed && !widgetLoading && widgetData) { navigateToWidget(widgetData.widgetUrl).catch(() => undefined) diff --git a/apps/mobile/src/screens/FiatOnRampConnecting.tsx b/apps/mobile/src/screens/FiatOnRampConnecting.tsx index 8e526d28038..bd99b3a598c 100644 --- a/apps/mobile/src/screens/FiatOnRampConnecting.tsx +++ b/apps/mobile/src/screens/FiatOnRampConnecting.tsx @@ -135,7 +135,7 @@ export function FiatOnRampConnectingScreen({ navigation }: Props): JSX.Element | }, ) } - dispatchAddTransaction() + dispatchAddTransaction({ isOffRamp }) await openUri(widgetUrl).catch(onError) dispatch(forceFetchFiatOnRampTransactions()) } diff --git a/apps/mobile/src/screens/HomeScreen.tsx b/apps/mobile/src/screens/HomeScreen.tsx index 97d1ac6c8a6..f68b9cead8a 100644 --- a/apps/mobile/src/screens/HomeScreen.tsx +++ b/apps/mobile/src/screens/HomeScreen.tsx @@ -114,7 +114,7 @@ export function HomeScreen(props?: AppStackScreenProp): JSX. }) const { gqlChains } = useEnabledChains() - const { data: nftData } = useNftsTabQuery({ + const { data: nftData, loading: areNFsLoading } = useNftsTabQuery({ variables: { ownerAddress: activeAccount.address, first: 1, @@ -126,12 +126,15 @@ export function HomeScreen(props?: AppStackScreenProp): JSX. }) const isNftBalance = !!nftData?.nftBalances?.edges.length - const { hasData: isActivity } = useFormattedTransactionDataForActivity({ + const { hasData: isActivity, isLoading: isActivityLoading } = useFormattedTransactionDataForActivity({ address: activeAccount.address, hideSpamTokens: true, pageSize: 1, }) + const isTabsDataCacheAvailable = !!balancesById || !!nftData || !!isActivity + const isTabsDataLoaded = isTabsDataCacheAvailable || (!areBalancesLoading && !areNFsLoading && !isActivityLoading) + const isTokenBalances = !!Object.entries(balancesById || {}).length const showEmptyWalletState = !isTokenBalances && !isNftBalance && !isActivity @@ -563,47 +566,31 @@ export function HomeScreen(props?: AppStackScreenProp): JSX. const renderTabBar = useCallback( (sceneProps: SceneRendererProps) => { const style: ViewStyle = { width: 'auto' } + if (!isLayoutReady) { + return null + } return ( - <> - - {contentHeader} - - - {isLayoutReady && ( - - - - )} - + + + ) }, - [ - colors.surface1, - colors.surface3, - contentHeader, - handleHeaderLayout, - headerContainerStyle, - isLayoutReady, - renderTabLabel, - routes, - tabBarStyle, - tabIndex, - ], + [colors.surface1, colors.surface3, isLayoutReady, renderTabLabel, routes, tabBarStyle, tabIndex], ) const [refreshing, setRefreshing] = useState(false) @@ -742,18 +729,24 @@ export function HomeScreen(props?: AppStackScreenProp): JSX. {openAIAssistantEnabled && } - + + {contentHeader} + + + {isTabsDataLoaded && ( + + )} /uniswap\/src.*\.(js|ts)x?$/.test(path), + // Babel transpiles to cjs so any code that requires tree-shaking of it's dependencies + // must be excluded here and processed by swc instead. + exclude: (path) => ['chains'].some(p => path.includes(p)), options: { presets: ['module:@react-native/babel-preset'], plugins: [ @@ -279,7 +302,10 @@ module.exports = { enforce: 'post', test: /node_modules.*\.(js)$/, loader: path.join(__dirname, 'scripts/terser-loader.js'), - options: { compress: true, mangle: false }, + options: { + compress: true, + mangle: false, + }, }) // Configure webpack optimization: @@ -287,12 +313,18 @@ module.exports = { webpackConfig.optimization, isProduction ? { + usedExports: true, + sideEffects: true, // Optimize over all chunks, instead of async chunks (the default), so that initial chunks are also included. splitChunks: { chunks: 'all' }, } : {} ) + if (isProduction) { + webpackConfig.mode = 'production' + } + // Configure webpack resolution. webpackConfig.cache is unused with swc-loader, but the resolver can still cache: webpackConfig.resolve = Object.assign(webpackConfig.resolve, { unsafeCache: true }) diff --git a/apps/web/functions/README.md b/apps/web/functions/README.md index c9de5a2c876..e923146190a 100644 --- a/apps/web/functions/README.md +++ b/apps/web/functions/README.md @@ -27,6 +27,8 @@ Testing is done utilizing a custom jest environment as well as Cloudflare's loca - Manually run `yarn start:cloud` to setup wrangler on `localhost:3000` and proxy on `localhost:3001` - Run unit tests with `yarn test:cloud` +TODO(WEB-5914): as of 12/19/24, tests pass locally but fail on CI. Notes on investigation in issue + ## Deployment Functions will be deployed to Cloudflare where they will be ran automatically when the appropriate route is hit. diff --git a/apps/web/functions/api/image/pools/[[index]].tsx b/apps/web/functions/api/image/pools/[[index]].tsx index 05ddfd7b717..7f9508f8391 100644 --- a/apps/web/functions/api/image/pools/[[index]].tsx +++ b/apps/web/functions/api/image/pools/[[index]].tsx @@ -8,16 +8,9 @@ import getFont from '../../../utils/getFont' import getNetworkLogoUrl from '../../../utils/getNetworkLogoURL' import { getRequest } from '../../../utils/getRequest' -function PoolImage({ - token0Image, - token1Image, - children, -}: { - token0Image?: string - token1Image?: string - children?: React.ReactNode -}) { - const unknownTokenImage = ( +function UnknownTokenImage({ symbol }: { symbol?: string }) { + const ticker = symbol?.slice(0, 3) + return (
- UNK + {ticker ?? 'UNK'}
) +} + +function PoolImage({ + token0ImageUrl, + token1ImageUrl, + tokenSymbol0, + tokenSymbol1, + children, +}: { + token0ImageUrl?: string + token1ImageUrl?: string + tokenSymbol0?: string + tokenSymbol1?: string + children?: React.ReactNode +}) { + // ImageResponse cannot handle webp images: https://github.com/vercel/satori/issues/273#issuecomment-1296323042 + // TODO: remove this check logic once @vercel/og supports webp, which appears to be in-progress https://github.com/vercel/satori/pull/622 + const token0Image = token0ImageUrl?.includes('.webp') ? undefined : token0ImageUrl + const token1Image = token1ImageUrl?.includes('.webp') ? undefined : token1ImageUrl return (
) : ( - unknownTokenImage + )} {token1Image ? (
) : ( - unknownTokenImage + )} {children}
@@ -134,7 +146,12 @@ export const onRequest: PagesFunction = async ({ params, request }) => { gap: '54px', }} > - + {networkLogo != '' && ( { const networkLogo = getNetworkLogoUrl(networkName.toUpperCase(), origin) + // ImageResponse cannot handle webp images: https://github.com/vercel/satori/issues/273#issuecomment-1296323042 + // TODO: remove this check logic once @vercel/og supports webp, which appears to be in-progress https://github.com/vercel/satori/pull/622 + const ogImage = data.ogImage?.includes('.webp') ? undefined : data.ogImage + return new ImageResponse( (
{ color: 'white', }} > - {data.ogImage ? ( - + {ogImage ? ( + {networkLogo != '' && ( - + @@ -204,6 +215,17 @@ exports[`should inject metadata for valid tokens 2`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } @@ -335,6 +357,17 @@ exports[`should inject metadata for valid tokens 3`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } @@ -466,6 +499,17 @@ exports[`should inject metadata for valid tokens 4`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } diff --git a/apps/web/functions/explore/tokens/token.test.ts b/apps/web/functions/explore/tokens/token.test.ts index 1e343e8634a..61f8313f6c1 100644 --- a/apps/web/functions/explore/tokens/token.test.ts +++ b/apps/web/functions/explore/tokens/token.test.ts @@ -16,7 +16,7 @@ const tokens = [ { address: NATIVE_CHAIN_ID, network: 'polygon', - tokenData: { symbol: 'MATIC' }, + tokenData: { symbol: 'POL' }, image: 'http://127.0.0.1:3000/api/image/tokens/polygon/NATIVE', }, { diff --git a/apps/web/functions/nfts/asset/__snapshots__/nft.test.ts.snap b/apps/web/functions/nfts/asset/__snapshots__/nft.test.ts.snap index ed8caec1f3c..df7eb05c85f 100644 --- a/apps/web/functions/nfts/asset/__snapshots__/nft.test.ts.snap +++ b/apps/web/functions/nfts/asset/__snapshots__/nft.test.ts.snap @@ -73,6 +73,17 @@ exports[`should inject metadata for valid assets: Azuki 1`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } @@ -204,6 +215,17 @@ exports[`should inject metadata for valid assets: Bored Ape Yacht Club 1`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } @@ -335,6 +357,17 @@ exports[`should inject metadata for valid assets: CryptoPunk 1`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } diff --git a/apps/web/functions/nfts/collection/__snapshots__/collection.test.ts.snap b/apps/web/functions/nfts/collection/__snapshots__/collection.test.ts.snap index 29dd84d52ad..0e04e881a7d 100644 --- a/apps/web/functions/nfts/collection/__snapshots__/collection.test.ts.snap +++ b/apps/web/functions/nfts/collection/__snapshots__/collection.test.ts.snap @@ -73,6 +73,17 @@ exports[`should inject metadata for collections 1`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } @@ -204,6 +215,17 @@ exports[`should inject metadata for collections 2`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } @@ -335,6 +357,17 @@ exports[`should inject metadata for collections 3`] = ` padding: 0; } + /* Only apply overflow-x: hidden on desktop */ + /* This is to prevent ugly horizontal scrollbar from appearing on desktop */ + /* We need to set it on html element specifically because otherwise we break */ + /* sticky positioning of some child elements. */ + /* Applying this on mobile breaks tamagui/remove-scroll. */ + @media (min-width: 768px) { + html { + overflow-x: hidden; + } + } + button { user-select: none; } diff --git a/apps/web/functions/utils/cache.ts b/apps/web/functions/utils/cache.ts index a17c71b396c..ec64844bfc0 100644 --- a/apps/web/functions/utils/cache.ts +++ b/apps/web/functions/utils/cache.ts @@ -4,6 +4,8 @@ interface TokenData { symbol: string } interface PoolData { + token0Symbol?: string + token1Symbol?: string feeTier: string protocolVersion: ProtocolVersion token0Image?: string diff --git a/apps/web/functions/utils/getPool.ts b/apps/web/functions/utils/getPool.ts index eeced7825b6..1517953a82d 100644 --- a/apps/web/functions/utils/getPool.ts +++ b/apps/web/functions/utils/getPool.ts @@ -46,6 +46,8 @@ export default async function getPool(networkName: string, poolAddress: string, url, name, poolData: { + token0Symbol: token0?.symbol, + token1Symbol: token1?.symbol, feeTier, protocolVersion, token0Image: token0?.project?.logoUrl, diff --git a/apps/web/package.json b/apps/web/package.json index 43660261910..b781e623f64 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -11,6 +11,7 @@ "start": "craco start", "start:cloud": "NODE_OPTIONS=--dns-result-order=ipv4first PORT=3001 REACT_APP_SKIP_CSP=1 npx wrangler pages dev --compatibility-flags=nodejs_compat --compatibility-date=2023-08-01 --proxy=3001 --port=3000 -- yarn start", "build:production": "craco build", + "build:production:analyze": "UNISWAP_ANALYZE_BUNDLE_SIZE=static craco build", "analyze": "source-map-explorer 'build/static/js/*.js' --no-border-checks --gzip", "serve": "serve build -s -l 3000", "format": "../../scripts/prettier.sh", @@ -243,6 +244,7 @@ "focus-visible": "5.2.0", "framer-motion": "10.17.6", "graphql": "16.6.0", + "i18next": "23.10.0", "immer": "9.0.6", "jotai": "1.3.7", "jpeg-js": "0.4.4", @@ -264,6 +266,7 @@ "react-dom": "18.2.0", "react-feather": "2.0.10", "react-helmet-async": "2.0.4", + "react-i18next": "14.1.0", "react-infinite-scroll-component": "6.1.0", "react-is": "18.2.0", "react-markdown": "4.3.1", diff --git a/apps/web/public/nfts-sitemap.xml b/apps/web/public/nfts-sitemap.xml index 12fec02b5f3..e77a9e7bdb5 100644 --- a/apps/web/public/nfts-sitemap.xml +++ b/apps/web/public/nfts-sitemap.xml @@ -2,702 +2,702 @@ https://app.uniswap.org/nfts/collection/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x60e4d786628fea6478f785a6d7e704777c86a7c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xed5af388653567af2f388e6224dc7c4b3241c544 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x34d85c9cdeb23fa97cb08333b511ac86e1c4e258 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x99a9b7c1116f9ceeb1652de04d5969cce509b069 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x49cf6f5d44e70224e2e23fdcdd2c053f30ada28b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb7f7f6c52f2e2fdb1963eab30438024864c313f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x23581767a106ae21c074b2276d25e5c3e136a68b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x8a90cab2b38dba80c64b7734e58ee1db38b8992e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xba30e5f9bb24caa003e9f2f0497ad287fdf95623 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xbd3531da5cf5857e7cfaa92426877b022e612cf8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x1a92f7381b9f03921564a437210bb9396471050c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x5cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x5af0d9827e0c53e4799bb226655a1de152a425a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x3bf2922f4520a8ba0c2efc3d2a1539678dad5e9d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xe785e82358879f061bc3dcac6f0444462d4b5330 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x76be3b62873462d2142405439777e971754e8e77 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xfd43af6d3fe1b916c026f6ac35b3ede068d1ca01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x1cb1a5e65610aeff2551a50f76a87a7d3fb649c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x6339e5e072086621540d0362c4e3cea0d643e114 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x79fcdef22feed20eddacbb2587640e45491b757f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xa3aee8bce55beea1951ef834b99f3ac60d1abeeb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x769272677fab02575e84945f03eca517acc544cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x4db1f25d3d98600140dfc18deb7515be5bd293af - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x34eebee6942d8def3c125458d1a86e0a897fd6f9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x59468516a8259058bad1ca5f8f4bff190d30e066 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x394e3d3044fc89fcdd966d3cb35ac0b32b0cda91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x60bb1e2aa1c9acafb4d34f71585d7e959f387769 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x28472a58a490c5e09a238847f66a68a47cc76f0f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x341a1c534248966c4b6afad165b98daed4b964ef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x82c7a8f707110f5fbb16184a5933e9f78a34c6ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xccc441ac31f02cd96c153db6fd5fe0a2f4e6a68d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x764aeebcf425d56800ef2c84f2578689415a2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x160c404b2b49cbc3240055ceaee026df1e8497a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xd2f668a8461d6761115daf8aeb3cdf5f40c532c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x39ee2c7b3cb80254225884ca001f57118c8f21b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xd774557b647330c91bf44cfeab205095f7e6c367 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x1792a96e5668ad7c167ab804a100ce42395ce54d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xf87e31492faf9a91b02ee0deaad50d51d56d5d4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x04afa589e2b933f9463c5639f412b183ec062505 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xe75512aa3bec8f00434bbd6ad8b0a3fbff100ad6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x348fc118bcc65a92dc033a951af153d14d945312 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x892848074ddea461a15f337250da3ce55580ca85 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x5946aeaab44e65eb370ffaa6a7ef2218cff9b47d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x282bdd42f4eb70e7a9d9f40c8fea0825b7f68c5d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x4b15a9c28034dc83db40cd810001427d3bd7163d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x7ea3cca10668b8346aec0bf1844a49e995527c8b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb852c6b5892256c264cc2c888ea462189154d8d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x9378368ba6b85c1fba5b131b530f5f5bedf21a18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x2acab3dea77832c09420663b0e1cb386031ba17b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x0c2e57efddba8c768147d1fdf9176a0a6ebd5d83 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x08d7c0242953446436f34b4c78fe9da38c73668d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x8943c7bac1914c9a7aba750bf2b6b09fd21037e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x364c828ee171616a39897688a831c2499ad972ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x7f36182dee28c45de6072a34d29855bae76dbe2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xf61f24c2d93bf2de187546b14425bf631f28d6dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x797a48c46be32aafcedcfd3d8992493d8a1f256b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x123b30e25973fecd8354dd5f41cc45a3065ef88c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x6632a9d63e142f17a668064d41a21193b49b41a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xf4ee95274741437636e748ddac70818b4ed7d043 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x57a204aa1042f6e66dd7730813f4024114d74f37 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xd1258db6ac08eb0e625b75b371c023da478e94a9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x75e95ba5997eb235f40ecf8347cdb11f18ff640b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xd532b88607b1877fe20c181cba2550e3bbd6b31c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xa1d4657e0e6507d5a94d06da93e94dc7c8c44b51 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xedb61f74b0d09b2558f1eeb79b247c1f363ae452 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x7d8820fa92eb1584636f4f5b8515b5476b75171a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x231d3559aa848bf10366fb9868590f01d34bf240 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xad9fd7cb4fc7a0fbce08d64068f60cbde22ed34c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x0e9d6552b85be180d941f1ca73ae3e318d2d4f1f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb716600ed99b4710152582a124c697a7fe78adbf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xaadc2d4261199ce24a4b0a57370c4fcf43bb60aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x4e1f41613c9084fdb9e34e11fae9412427480e56 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x79986af15539de2db9a5086382daeda917a9cf0c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xc99c679c50033bbc5321eb88752e89a93e9e83c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xc36cf0cfcb5d905b8b513860db0cfe63f6cf9f5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x9c8ff314c9bc7f6e59a9d9225fb22946427edc03 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x3110ef5f612208724ca51f5761a69081809f03b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x036721e5a769cc48b3189efbb9cce4471e8a48b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x524cab2ec69124574082676e6f654a18df49a048 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x7ab2352b1d2e185560494d5e577f9d3c238b78c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x32973908faee0bf825a343000fe412ebe56f802a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x7daec605e9e2a1717326eedfd660601e2753a057 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xc1caf0c19a8ac28c41fe59ba6c754e4b9bd54de9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x33fd426905f149f8376e227d0c9d3340aad17af1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x466cfcd0525189b573e794f554b8a751279213ac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x6be69b2a9b153737887cfcdca7781ed1511c7e36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x80336ad7a747236ef41f47ed2c7641828a480baa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x9401518f4ebba857baa879d9f76e1cc8b31ed197 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x4b61413d4392c806e6d0ff5ee91e6073c21d6430 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xc3f733ca98e0dad0386979eb96fb1722a1a05e69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x09233d553058c2f42ba751c87816a8e9fae7ef10 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x960b7a6bcd451c9968473f7bbfd9be826efd549a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x36d30b3b85255473d27dd0f7fd8f35e36a9d6f06 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x698fbaaca64944376e2cdc4cad86eaa91362cf54 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x497a9a79e82e6fc0ff10a16f6f75e6fcd5ae65a8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x41a322b28d0ff354040e2cbc676f0320d8c8850d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xa9c0a07a7cb84ad1f2ffab06de3e55aab7d523e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x8821bee2ba0df28761afff119d66390d594cd280 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x8c6def540b83471664edc6d5cf75883986932674 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x8d9710f0e193d3f95c0723eaaf1a81030dc9116d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x86825dfca7a6224cfbd2da48e85df2fc3aa7c4b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x629a673a8242c2ac4b7b8c5d8735fbeac21a6205 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x9a534628b4062e123ce7ee2222ec20b86e16ca8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xc2c747e0f7004f9e8817db2ca4997657a7746928 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x73da73ef3a6982109c4d5bdb0db9dd3e3783f313 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xc92ceddfb8dd984a89fb494c376f9a48b999aafc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x3248e8ba90facc4fdd3814518c14f8cc4d980e4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x67d9417c9c3c250f61a83c7e8658dac487b56b09 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb6a37b5d14d502c3ab0ae6f3a0e058bc9517786e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x86c10d10eca1fca9daf87a279abccabe0063f247 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x4b3406a41399c7fd2ba65cbc93697ad9e7ea61e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xb0640e8b5f24bedc63c33d371923d68fde020303 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xd3d9ddd0cf0a5f0bfb8f7fceae075df687eaebab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xa5c0bd78d1667c13bfb403e2a3336871396713c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x4d7d2e237d64d1484660b55c0a4cc092fa5e6716 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xfcb1315c4273954f74cb16d5b663dbf479eec62e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x66d1db16101502ed0ca428842c619ca7b62c8fef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x128675d4fddbc4a0d3f8aa777d8ee0fb8b427c2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x19b86299c21505cdf59ce63740b240a9c822b5e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xacf63e56fd08970b43401492a02f6f38b6635c91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x0bebad1ff25c623dff9605dad4a8f782d5da37df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xdceaf1652a131f32a821468dc03a92df0edd86ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x273f7f8e6489682df756151f5525576e322d51a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x77372a4cc66063575b05b44481f059be356964a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xf5b0a3efb8e8e4c201e2a935f110eaaf3ffecb8d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x22c36bfdcef207f9c0cc941936eff94d4246d14a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x59325733eb952a92e069c87f0a6168b29e80627f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x0e3a2a1f2146d86a604adc220b4967a898d7fe07 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x3af2a97414d1101e2107a70e7f33955da1346305 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x5ab21ec0bfa0b29545230395e3adaca7d552c948 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x617913dd43dbdf4236b85ec7bdf9adfd7e35b340 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0x3fe1a4c1481c8351e91b64d5c398b159de07cbc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 https://app.uniswap.org/nfts/collection/0xd4e4078ca3495de5b1d4db434bebc5a986197782 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.7 \ No newline at end of file diff --git a/apps/web/public/pools-sitemap.xml b/apps/web/public/pools-sitemap.xml index 17cd6ec1e94..1e19e5b2ed8 100644 --- a/apps/web/public/pools-sitemap.xml +++ b/apps/web/public/pools-sitemap.xml @@ -2,7347 +2,7502 @@ https://app.uniswap.org/explore/pools/ethereum/0xcbcdf9626bc03e24f779434178a73a0b4bad62ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4e68ccd3e89f51c3074ca5072bbac773960dfa36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4585fe77225b41b697c938b018e2ac67ac5a20c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc63b0708e2f7e69cb8a1df0e1389a98c35a76d52 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x99ac8ca7087fa4a2a1fb6357269965a2014abc35 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x11b815efb8f581194ae79006d24e0d814b7697f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa6cc3c2531fdaa6ae1a3ca84c2855806728693e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5777d92f208679db4b9778590fa3cab3ac9e2168 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1d42064fc4beb5f8aaf85f4617ae8b3b5b8bd801 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc2e9f25be6257c210d7adf0d4cd6e3e881ba25f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x11950d141ecb863f01007add7d1a342041227b58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc5c134a1f112efa96003f8559dba6fac0ba77692 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x109830a1aaad605bbf02a9dfa7b0b92ec2fb7daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1df4c6e36d61416813b42fe32724ef11e363eddc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x12d6867fa648d269835cf69b49f125147754b54d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x3416cf6c708da44db2624d63ea0aaef7113527c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe8c6c9227491c0a8156a0106a0204d881bb7e531 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x04708077eca6bb527a5bbbd6358ffb043a9c1c14 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9db9e0e53058c89e5b94e29621a205198648425b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xf239009a101b6b930a527deaab6961b6e7dec8a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xfe0df74636bc25c7f2400f22fe7dae32d39443d2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xf4c5e0f4590b6679b3030d29a84857f226087fef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5764a6f2212d502bc5970f9f129ffcd61e5d7563 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa3f558aebaecaf0e11ca4b2199cc5ed341edfd74 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x99132b53ab44694eeb372e87bced3929e4ab8456 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x6c6bc977e13df9b0de53b251522280bb72383700 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9d96880952b4c80a55099b9c258250f2cc5813ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x3afdc5e6dfc0b0a507a8e023c9dce2cafc310316 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x290a6a7460b308ee3f19023d2d00de604bcf5b42 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xac4b3dacb91461209ae9d41ec517c2b9cb1b7daf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x60594a405d53811d3bc4766596efd80fd545a270 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x331399c614ca67dee86733e5a2fba40dbb16827c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4b5ab61593a2401b1075b90c04cbcdd3f87ce011 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x844eb5c280f38c7462316aad3f338ef9bda62668 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe936f0073549ad8b1fa53583600d629ba9375161 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2f62f2b4c5fcd7570a709dec05d68ea19c82a9ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x381fe4eb128db1621647ca00965da3f9e09f4fac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x97e7d56a0408570ba1a7852de36350f7713906ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xcd423f3ab39a11ff1d9208b7d37df56e902c932b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe15e6583425700993bd08f51bf6e7b73cd5da91b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x69d91b94f0aaf8e8a2586909fa77a5c2c89818d5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe42318ea3b998e8355a3da364eb9d48ec725eb45 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xad9ef19e289dcbc9ab27b83d2df53cdeff60f02d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x3b685307c8611afb2a9e83ebc8743dc20480716e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7bea39867e4169dbe237d55c8242a8f2fcdcc387 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7b1e5d984a43ee732de195628d20d05cfabc3cc7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7858e59e0c01ea06df3af3d20ac7b0003275d4bf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xae2a25cbdb19d0dc0dddd1d2f6b08a6e48c4a9a9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x14af1804dbbf7d621ecc2901eef292a24a0260ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x80a9ae39310abf666a87c743d6ebbd0e8c42158e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc31e54c7a869b9fcbecc14363cf510d1c41fa443 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2f5e87c9312fa29aed5c179e456625d79015299c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc6962004f452be9203591991d15f6b388e09e8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc6f780497a95e246eb9449f5e4770916dcd6396a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x641c00a822e8b671738d32a431a4fb6074e5c79d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x92c63d0e701caae670c9415d91c474f686298f00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1aeedd3727a6431b8f070c0afaa81cc74f273882 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xcda53b1f66614552f834ceef361a8d12a0b8dad8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x35218a1cbac5bbc3e57fd9bd38219d37571b3537 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x17c14d2c404d167802b16c450d3c99f88f2c4f4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x468b88941e7cc0b88c1869d68ab6b570bcef62ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xdbaeb7f0dfe3a0aafd798ccecb5b22e708f7852c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x149e36e72726e0bcea5c59d40df2c43f60f5a22d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xbaaf1fc002e31cb12b99e4119e5e350911ec575b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa67f72f21bd9f91db2da2d260590da5e6c437009 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x92fd143a8fa0c84e016c2765648b9733b0aa519e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7cf803e8d82a50504180f417b8bc7a493c0a0503 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x81c48d31365e6b526f6bbadc5c9aafd822134863 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x446bf9748b4ea044dd759d9b9311c70491df8f29 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc82819f72a9e77e2c0c3a69b3196478f44303cf4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x50c7390dfdd3756139e6efb5a461c2eb7331ceb4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1dfc1054e0e2a10e33c9ca21aad5aa8a1cce91e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc91b7b39bbb2c733f0e7459348fd0c80259c8471 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x59d72ddb29da32847a4665d08ffc8464a7185fae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x09ba302a3f5ad2bf8853266e271b005a5b3716fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa77d77c9773c35e910acc2e30cefe52b54a58414 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8da66e470403b3d3eee66c67e2c61fda6e248ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2f020e708811c054f146eebcc4d5a215fd4eec26 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7e7fb3cceca5f2ac952edf221fd2a9f62e411980 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x68c685fd52a56f04665b491d491355a624540e85 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa8328bf492ba1b77ad6381b3f7567d942b000baf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc0cf0f380ddb44dbcaf19a86d094c8bba3efa04a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa169d1ab5c948555954d38700a6cdaa7a4e0c3a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1862200e8e7ce1c0827b792d0f9546156f44f892 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x05bbaaa020ff6bea107a9a1e06d2feb7bfd79ed2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xd02a4969dc12bb889754361f8bcf3385ac1b2077 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc24f7d8e51a64dc1238880bd00bb961d54cbeb29 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7c06736e41236fecd681dd3353aa77ecd19ea565 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc473e2aee3441bf9240be85eb122abb059a3b57c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x14353445c8329df76e6f15e9ead18fa2d45a8bb6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2039f8c9cd32ba9cd2ea7e575d5b1abea93f7527 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xd3e11119d2680c963f1cdcffece0c4ade823fb58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8e295789c9465487074a65b1ae9ce0351172393f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x97bca422ec0ee4851f2110ea743c1cd0a14835a1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xbe3ad6a5669dc0b8b12febc03608860c31e2eef6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x56ebd63a756b94d3de9cea194896b4920b64fb01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe2ddd33585b441b9245085588169f35108f85a6e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x84436a2af97f37018db116ae8e1b691666db3d00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x68f5c0a2de713a54991e01858fd27a3832401849 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x4533bad2dc588f0fadf8d2e72386d4cd6a19b519 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x85149247691df622eaf1a8bd0cafd40bc45154a9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0392b358ce4547601befa962680bede836606ae2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x1c3140ab59d6caf9fa7459c6f83d4b52ba881d36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd1f1bad4c9e6c44dec1e9bf3b94902205c5cd6c3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x03af20bdaaffb4cc0a521796a223f7d85e2aac31 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x73b14a78a0d396c521f954532d43fd5ffe385216 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xac85eaf55e9c60ed40a683de7e549d23fdfbeb33 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x04f6c85a1b00f6d9b75f91fd23835974cc07e65c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x730691cdac3cbd4d41fc5eb9d8abbb0cea795b94 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x535541f1aa08416e69dc4d610131099fa2ae7222 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xfc1f3296458f9b2a27a0b91dd7681c4020e09d05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x85c31ffa3706d1cce9d525a00f1c7d4a2911754c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd52533a3309b393afebe3176620e8ccfb6159f8a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xff7fbdf7832ae524deda39ca402e03d92adff7a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xb589969d38ce76d3d7aa319de7133bc9755fd840 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xf334f6104a179207ddacfb41fa3567feea8595c2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x1fb3cf6e48f1e7b10213e7b6d87d4c073c7fdb7b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd4344ea0c5ade7e22b9b275f0bde7a145dec5a23 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x5b42a63d6741416ce9a7b9f4f16d8c9231ccddd4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x252cbdff917169775be2b552ec9f6781af95e7f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2ab22ac86b25bd448a4d9dc041bd2384655299c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc858a329bf053be78d6239c4a4343b8fbd21472b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa73c628eaf6e283e26a7b1f8001cf186aa4c0e8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xb533c12fb4e7b53b5524eab9b47d93ff6c7a456f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2ae3d6096d8215ac2acddf30c60caa984ea5debe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x19ea026886cbb7a900ecb2458636d72b5cae223b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x6f32061f59a21086c334d0d45f804089ce374aaf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xfaf037caafa9620bfaebc04c298bf4a104963613 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xadb35413ec50e0afe41039eac8b930d313e94fa4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe9e3893921de87b1194a8108f9d70c24bde71c27 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xf1f199342687a7d78bcc16fce79fa2665ef870e1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xf44acaa38be5e965c5ddf374e7a2ba270e580684 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x36e42931a765022790b797963e42c5522d6b585a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x5adba6c5589c50791dd65131df29677595c7efa7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x3249e3e3e4133ee18e65347daf586610cc265f54 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xca1b837c87c6563910c2befa48834fa2a8c3d72d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x6ef7b14bcd8d989cef8f8ec8ba4bf371b2ac95fd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x37ffd11972128fd624337ebceb167c8c0a5115ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe62bd99a9501ca33d98913105fc2bec5bae6e5dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xb2ac2e5a3684411254d58b1c5a542212b782114d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xb0efaf46a1de55c54f333f93b1f0641e73bc16d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd0fa3b5264ccde31e8b094b86bca4a1e97d3c603 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xad4c666fc170b468b19988959eb931a3676f0e9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x790fde1fd6d2568050061a88c375d5c2e06b140b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xaefc1edaede6adadcdf3bb344577d45a80b19582 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa8a5356ee5d02fe33d72355e4f698782f8f199e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x55bc964fe3b0c8cc2d4c63d65f1be7aef9bb1a3c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x95d9d28606ee55de7667f0f176ebfc3215cfd9c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x45dda9cb7c25131df268515131f647d726f50608 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x50eaedb835021e4a108b7290636d62e9765cc6d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x167384319b41f7094e62f7506409eb38079abff8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa374094527e1673a86de625aa59517c5de346d32 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x86f1d8390222a3691c28938ec7404a1661e618e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xeda1094f59a4781456734e5d258b95e6be20b983 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x847b64f9d3a95e977d157866447a5c0a5dfa0ee5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x94ab9e4553ffb839431e37cc79ba8905f45bfbea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0e44ceb592acfc5d3f09d996302eb4c499ff8c10 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x1e5bd2ab4c308396c06c182e1b7e7ba8b2935b83 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9b08288c3be4f62bbf8d1c20ac9c5e6f9467d8b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb6e57ed85c4c9dbfef2a68711e9d6f36c56e0fcb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x3e31ab7f37c048fc6574189135d108df80f0ea26 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xd36ec33c8bed5a9f7b6630855f1533455b98a418 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xdac8a8e6dbf8c690ec6815e0ff03491b2770255d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xfe343675878100b344802a6763fd373fdeed07a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0a28c2f5e0e8463e047c203f00f649812ae67e4f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x88f3c15523544835ff6c738ddb30995339ad57d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x98b9162161164de1ed182a0dfa08f5fbf0f733ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xeef1a9507b3d505f0062f2be9453981255b503c8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc4c06c9a239f94fc0a1d3e04d23c159ebe8316f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x849ec65748107aedc518dbc42961f358ea1361a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2db87c4831b2fec2e35591221455834193b50d1b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa4d8c89f0c20efbe54cba9e7e7a7e509056228d9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x642f28a89fa9d0fa30e664f71804bfdd7341d21f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2aceda63b5e958c45bd27d916ba701bc1dc08f7a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x781067ef296e5c4a4203f81c593274824b7c185d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x4ccd010148379ea531d6c587cfdd60180196f9b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xd866fac7db79994d08c0ca2221fee08935595b4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x941061770214613ba0ca3db9a700c39587bb89b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa9077cdb3d13f45b8b9d87c43e11bce0e73d8631 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa01f64fa1b923dd9c5c7618b39a6ba8098a88863 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa830ff28bb7a46570a7e43dc24a35a663b9cfc2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8837a61644d523cbe5216dde226f8f85e3aa9be3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xca5d44977d6de1846530eb434167b208752fba7d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x4d05f2a005e6f36633778416764e82d1d12e7fbb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x41e64a5bc929fa8e6a9c8d7e3b81a13b21ff3045 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x3ea34cfc9322273311f7843826a2581c4a00fd39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x785061ed819414dc4269d2a5d5974069c0daea96 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x3f5228d0e7d75467366be7de2c31d0d098ba2c23 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2e3f22e9a1c2470b2e293351f48c99e1fd788f32 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2a08c38c7e1fa969325e2b64047abb085dec3756 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xe6c36eed27c2e8ecb9a233bf12da06c9730b5955 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xefa98fdf168f372e5e9e9b910fcdfd65856f3986 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x76fa081e510f43ac8335efdb4db88c9ff1894413 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc6832ef0af793336aa44a936e54b992bff47e7cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x865f456479a21e2b3d866561d7171a3d0a7b112d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xbd934a7778771a7e2d9bf80596002a214d8c9304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9ab9f658104467604b5afa9a3e1df62f35f7b208 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x6e430d59ba145c59b73a6db674fe3d53c1f31cae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9e37cb775a047ae99fc5a24dded834127c4180cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x48413707b70355597404018e7c603b261fcadf3f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xade9bcd4b968ee26bed102dd43a55f6a8c2416df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xda679706ff21114ac9fac5198bff24543f357a16 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xba3f945812a83471d709bce9c3ca699a19fb46f7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc9034c3e7f58003e6ae0c8438e7c8f4598d5acaa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x4c36388be6f416a29c8d8eee81c771ce6be14b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa1b2457c0b627f97f6cc892946a382451e979014 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x4b0aaf3ebb163dd45f663b38b6d93f6093ebc2d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xae2ce200bdb67c472030b31f602f0756c9aeb61c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3bc5180d5439b500f381f9a46f15dd6608101671 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5122e02898ece3bc62df8c1efdb29a9e914244d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x24e1cbd6fed006ceed9af0dce688acc7951d57a9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2556230ac694093d4d3b7b965a2f2d77d4c403a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xdaca082c2c7d052a96fa83ea9d3a7b6839e39586 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa555149210075702a734968f338d5e1cbd509354 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x10648ba41b8565907cfa1496765fa4d95390aa0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x00bcec1526dae1e170a53017b8775a93b7810d7c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x20e068d76f9e90b90604500b84c7e19dcb923e7e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x6b93950a9b589bc32b82a5df4e5148f98a7fae27 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd9caa6dbe6791fcb7fc9fb59d1a6b3dd8c1c2339 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x62e81e93136ac42a1ada48d4098f5f9e703e7455 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x84206d33845c9d811438b6fe4e7a0c634748dc50 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd0b53d9277642d899df5c87a3966a349a798f224 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcfa7c4bb565915f1c4f9475e2a0536d31efad776 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa7de21f28ca460b45373b217cd4eb111c3faeff8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb64dff20dd5c47e6dbb56ead80d23568006dec1e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xad4e969f4193878e5cc89cefb57faf6c7c0048da - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xdf5eb97e3e23ca7f5a5fd2264680377c211310ba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xf16baaae8eb7b37f4280e72924479f69e7a61f32 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe745a591970e0fa981204cf525e170a2b9e4fb93 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x64b74c66b9ba60ca668b781289767ae7298f37ae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x17e1ebd791e7253a5e606fd94c5b66c14d873136 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x46715bd57b9ec01deadb35fe096fb44acda79414 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3447accd4b8e735329d1065244aad2ed630f0122 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2feb7f3ffc243f7de94d5ea5975533d301584e07 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0d5959a52e7004b601f0be70618d01ac3cdce976 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2170ca774e48a3f51559917ada6f9d7ae8f7bfea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x62a76dfa8951aefcff787e790782db3633ebf422 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8073679e0b3b2d1d665777cf1b2b5b1c2d3d2d0c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x143f1a6f3fb32e6ab3f22d3cc6b417b5c2197599 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x82ad659c2f152aad59bb37cbc5e7663a2de0c607 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa4efe9e8e2a2d5a2ac46805f233b8e49d0e11955 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xfcc89a1f250d76de198767d33e1ca9138a7fb54b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2faa2b42b782d578a160f61bb7cd763a17476730 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xdd44c0e83c2570062d1e6fdd440b4724862e8f31 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe3930a14641786e123e7bbe842d701fa1cbfe2df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x6d03360ce4764e862ed81660c1f76cc2711b14b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc055f66f228105072315247785c00299d0ce27e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcae1d141ab11cef0a415cf0440025e1e5e962e06 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0f338ec12d3f7c3d77a4b9fcc1f95f3fb6ad0ea6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4eaa90264d6a3567228dcb5cfc242200da586437 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x6fe9e9de56356f7edbfcbb29fab7cd69471a4869 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf420603317a0996a3fce1b1a80993eaef6f7ae1a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x47a90a2d92a8367a91efa1906bfc8c1e05bf10c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x41bf5eeae051fbd2e97b76b5f8f0fdcc1a1e526b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x28df0835942396b7a1b7ae1cd068728e6ddbbafd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa3f3664a52f01b42557524bd14556e379daf5669 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x1fd22fa7274bafebdfb1881321709f1219744829 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xe39cfc1a2e51a09ecbd060a24ee4eef5a97697bb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x06396509195eb9e07c38a016694dc9ff535b128a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5a1c486edefda2f09d3b349fadc38524f1743826 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5bf1cf153c102a79d9e18b7fb7c79ba57fa70d0c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2c3c320d49019d4f9a92352e947c7e5acfe47d68 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4141325bac36affe9db165e854982230a14e6d48 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x17507bef4c3abc1bc715be723ee1baf571256e05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8149b92ea743cc382aada523b68b8834733b9015 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc98f01bf2141e1140ef8f8cad99d4b021d10718f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x7f9d307973cdabe42769d9712df8ee1cc1a28d10 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5c87da28a45e5089b762dcbbd86f743d14c54317 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2cd97604ef77bbcb1fa0cff47545dff8ec7def08 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x7862d9b4be2156b15d54f41ee4ede2d5b0b455e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x554548b404213c7efcdbab933f52edfe3c581834 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x63008c5ea4e47f5421e0e1428b1c5043a507d0d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0350ca994791c4b07a5b02b08aaf9d6fc8ab510e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x32776ed4d96ed069a2d812773f0ad8ad9ef83cf8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x84f3ca9b7a1579ff74059bd0e8929424d3fa330e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5289a8dbf7029ee0b0498a84777ed3941d9acfec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb2bc284ab4c953b7f7a06d59c0ceb2de26405f22 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x508acf810857fefa86281499068ad5d19ebce325 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xccdfcd1aac447d5b29980f64b831c532a6a33726 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4fb87838a29b37598099ef5aa6b3fbeeef987c50 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x515e94dc736b9d8b7d28ecf1cece0aba3d75da97 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xfd6e5b7c30538dff2752058e425ad01a56b831cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xcb99fe720124129520f7a09ca3cbef78d58ed934 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xd2f21358c1549be193537b2a4c5dc7f0228ae011 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x93094ed1c907e4bca7eb041cb659da94f7e1b58e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xd37e6ecb991d1a0e7610c89666817665713362a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x73234630bd159384c8d43f145407312d64614f43 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xad1ddf00c4ae50573e4dc98e6c5ee93baa04a0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa765593c821f7df9ad81119509a37961e7ffa6c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9b501a7ad3087d603ceb34424b7b2a6c348ad0b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xafebb7cfa1a15fcac4121b609b456cbce3137c20 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0adaf134ae0c4583b3a38fc3168a83e33162651e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf9878a5dd55edc120fde01893ea713a4f032229c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x84e47c7f2fe86f6b5efbe14fee46b8bb871b2e05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf3e5bec78654049990965f666b0612e116b94fb2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x33e59edd3214e97cb68450c6d3d6c167de072aba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2ca76c7e466e560e0cb11a91269bb953e41254bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xbb124e35ab9e85f8d59ba83500e559dc052b9368 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xd88d5f9e6c10e6febc9296a454f6c2589b1e8fae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb90fe7da36ac89448e6dfd7f2bb1e90a66659977 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xbd6313d0796984c578cae6bc5b5e23b27c5540c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1f18cd7d1c7ba0dbe3d9abe0d3ec84ce1ad10066 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7da99753ff017f1b7afb2c8c0542718dc9f15f21 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x079e7a44f42e9cd2442c3b9536244be634e8f888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1c8dafd358d308b880f71edb5170b010b106ca60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xbd0f6f34baa3c1329448a69bab90111a20756f01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x3420720e561f3082f1e514a4545f0f2e0c955a5d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xea3fb6e3313a2a90757e4ca3d6749efd0107b0b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xf130f72f8190f662522774c3367e6e8814f5e219 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4a46c053bd5c10a959aea258228217b9d3405f3d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb83258bf5940c98abf54f26c5a02710bd6b83b2c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x6a209c5329f0a225fa1890d4177823c096016f34 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xdb24905b1b080f65dedb0ad978aad5c76363d3c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xddff2cdad11898b901a661e32e9fa010780263a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x72dd8fe09b5b493012e5816068dfc6fb26a2a9e6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x54fc722a66abfb6500a36d8b7b2646129d0e836a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x53b612b32233c80ec439a64325a29766ce95be7f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xe5edcbe72d1bc223097a1bed1fe6c0e404b4290c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb928c37b8bd9754d321dc3d3c6ef374d332fe761 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2d70cbabf4d8e61d5317b62cbe912935fd94e0fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x953e2937f0515c43ca7995e80c84aedcbbb9385e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x84394d80830ae963b599ded7d9149b90059f182f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa1777e082fa1746eb78dd9c1fbb515419cf6e538 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x112466c8b6e5abe42c78c47eb1b9d40baa3f943c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9491d57c5687ab75726423b55ac2d87d1cda2c3f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x978799f1845c00c9a4d9fd2629b9ce18df66e488 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xdc55d1fd1c04e005051a40bd59c5f95623257bc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x34757893070b0fc5de37aaf2844255ff90f7f1e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7faf167615419228f3f7d71d52d840dab154913c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa4d7b6a50dd4c55334ca6f175dbc6561f269d264 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0ed413cefde954d8e5c54d981d7d182b587e98e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x524375d0c6a04439128428f400b00eae81a2e9e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4b7a4530d56ff55a4dce089d917ede812e543307 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x84bb5b9bf1b6782c87cfa3e396f2f571c8e49646 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x723292eea7e1576ae482a5c317934054c0199e24 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9b42940e8184d866aac6595a91f8d8952a59d3b9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x37622453c614f625d288151101ffe48fd222ced1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4a94130b9e8eb0a0959c2c0f1ee9583213773fd9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x51514b3dc24afc1db95586242b99f0063bea17c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc130254e9196d48bbd9f91240390a6e8203132e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x60ac25da2ada3be14a2a8c04e45b072bed965966 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4e392a3883a84225260ff857318517eb50e5d128 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xca0aa06385a42242fe9523cd7015f6d01cd8f6b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x3e448c17043ce1481bbe53c0fd19481bad8b98a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x81060e6bf2a683f208b8799a33c7c09830cabed1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x463fe9f646b61ccfb43a022bf947075411cd71c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x21b8065d10f73ee2e260e5b47d3344d3ced7596e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x517f9dd285e75b599234f7221227339478d0fcc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa43fe16908251ee70ef74718545e4fe6c5ccec9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0af81cd5d9c124b4859d65697a4cd10ee223746a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xca7c2771d248dcbe09eabe0ce57a62e18da178c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x09d1d767edf8fa23a64c51fa559e0688e526812f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7b73644935b8e68019ac6356c40661e1bc315860 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x180efc1349a69390ade25667487a826164c9c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9c4fe5ffd9a9fc5678cfbd93aa2d4fd684b67c4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xbb2b8038a1640196fbe3e38816f3e67cba72d940 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9ec9367b8c4dd45ec8e7b800b1f719251053ad60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc91ef786fbf6d62858262c82c63de45085dea659 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x197d7010147df7b99e9025c724f13723b29313f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x25647e01bd0967c1b9599fa3521939871d1d0888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2f0b1417aa42ebf0b4ca1154212847f6094d708d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2a6c340bcbb0a79d3deecd3bc5cbc2605ea9259f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xda2d09fbbf8ee4b5051a0e9b562c5fcb4b393b18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x48d20b3e529fb3dd7d91293f80638df582ab2daa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4028daac072e492d34a3afdbef0ba7e35d8b55c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc2eab7d33d3cb97692ecb231a5d0e4a649cb539d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc5be99a02c6857f9eac67bbce58df5572498f40c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xe4b8583ccb95b25737c016ac88e539d0605949e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x8dbee21e8586ee356130074aaa789c33159921ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x43de4318b6eb91a7cf37975dbb574396a7b5b5c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9ff68f61ca5eb0c6606dc517a9d44001e564bb66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa29fe6ef9592b5d408cca961d0fb9b1faf497d6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1b1137dd16faa651e38a9dfb5d9ffff7767fdf62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x470e8de2ebaef52014a47cb5e6af86884947f08c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x8fb8e9921922d2ffb529a95d28a0d06d275d7a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xd3d2e2692501a5c9ca623199d38826e513033a17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x97e1fcb93ae7267dbafad23f7b9afaa08264cfd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa5e9c917b4b821e4e0a5bbefce078ab6540d6b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2cc846fff0b08fb3bffad71f53a60b4b6e6d6482 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x959873fb4fc11825fba83c80c4c632db1e936e15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc7e6b676bfc73ae40bcc4577f22aab1682c691c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x570febdf89c07f256c75686caca215289bb11cfc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x343fd171caf4f0287ae6b87d75a8964dc44516ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xcaa004418eb42cdf00cb057b7c9e28f0ffd840a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xe3d3551bb608e7665472180a20280630d9e938aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb6b0c651c37ec4ca81c0a128420e02001a57fac2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4e34da137f0b317c633838458e0c923a5e088752 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xfe9e7931e55c514c33d489c88582fa36e84bd8e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x5281e311734869c64ca60ef047fd87759397efe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x149148acc3b06b8cc73af3a10e84189243a35925 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x8ef79d6c328c25da633559c20c75f638a4863462 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xbf16ef186e715668aa29cef57e2fd7f9d48adfe6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x5645dcb64c059aa11212707fbf4e7f984440a8cf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3ad4913fa896391c9822a81d8d869cc0d783bdd7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0f23d49bc92ec52ff591d091b3e16c937034496e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7a415b19932c0105c82fdb6b720bb01b0cc2cae3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9b3423373e6e786c9ac367120533abe4ee398373 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4a25dbdf9629b1782c3e2c7de3bdce41f1c7f801 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xbe80225f09645f172b079394312220637c440a63 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x059615ebf32c946aaab3d44491f78e4f8e97e1d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x435664008f38b0650fbc1c9fc971d0a3bc2f1e47 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4b62fa30fea125e43780dc425c2be5acb4ba743b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc3db44adc1fcdfd5671f555236eae49f4a8eea18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe5cf22ee4988d54141b77050967e1052bd9c7f7a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7f580f8a02b759c350e6b8340e7c2d4b8162b6a9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x48b0ab72c2591849e678e7d6f272b75ef9b863f7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x74d0ae8b8e1fca6039707564704a25ad2ee036b0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x5969efdde3cf5c0d9a88ae51e47d721096a97203 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe32efff8f8b5fdc53803405aa3f623f03f8a8767 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe8629b6a488f366d27dad801d1b5b445199e2ada - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x066b28f0c160935cf285f75ed600967bf8417035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x146b020399769339509c98b7b353d19130c150ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd28f71e383e93c570d3edfe82ebbceb35ec6c412 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xadab76dd2dca7ae080a796f0ce86170e482afb4a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0fb07e6d6e1f52c839608e1436d2ea810cf07257 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x95d2483d2a0fff034004f91c53d649623d993896 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x19c5505638383337d2972ce68b493ad78e315147 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc143161ed3ed8049bb63d8da42907c08a10e2269 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc3286373599dd5af2a17a572ebb7561f05f88bec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xbb98b3d2b18aef63a3178023a920971cf5f29be4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x647fb01a63de9a551b39c7915693b25e6bcec502 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa90c1c009dc8292bd04ced30f9b53a5ff7a806a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xfb765ff72a14735550f1d798a5efd1311f2ddee7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3537f2a5f99f08f59eb1417073db1fadbebf0c74 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xde8ed0277ee0e84c25756a73ffa7374e4aeadf46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd8f3a72d2b2220a5067abe8c38aea57dc2d69a5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7ec18abf80e865c6799069df91073335935c4185 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x14b1911dd6b451c2771661ae8cd70637d726c356 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9ae8084c21752971d867597c07f2673765d949a1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcfaf75a3d292c3535ea3acdb16ed2ee58c2bb091 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8055e6de251e414e8393b20adab096afb3cf8399 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xffec10fe1355c2d8df4f62affcdeffdb04f06569 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc16454420f100b2e771d8bc4c5b6200068129a34 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x046f405e4ae1d0e786eda4959adadbd417d13ad8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xeccb34691c06c1c9c31ceb2228b22cbd242b5879 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe22a2dfaaaaec8a7b2b7acb4909eaaa5c5bd6e64 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe2dda0911e227e73d9fd94745b851c8bc6504610 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0f082a7870908f8cebbb2cd27a42a9225c19f898 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x69d667281778db0c3bc8177efea3a91ee95c3068 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x30d61bb28a6789f9f49d8c7fb198d63b6aba4b61 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x090f3fd9110621df127c3f9be5c6f58c02f2d5eb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd56f086e7b796b313d49f2bc926fac4bdd2a2b0b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7eb847a214192aab8fa1b503f4d4c9ddd2a08db6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x81b3bc0ef974c16d71b8614adb8c22ccc045da01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc9b44ca4159dbaf5722a3dc8618e9d4b5f39d5b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xbeef35a63fc62a3334630d9d3b4db27093d95317 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3d5d143381916280ff91407febeb52f2b60f33cf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x68c9325cc268df8b9ed4a06429587f28471b5f84 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa00cc1fb7ac185222294777c6b23a13c013f07ce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x77021e63bcbd3c5296b0cdd8a3c3770fb0ea8fa2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcc28456d4ff980cee3457ca809a257e52cd9cdb0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xec0b7e8e44c9d60efd67a89dba1d4a6e02a7a4a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0c8fed5dd65542ca5f0add1acab14c2e470c9110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd56da2b74ba826f19015e6b7dd9dae1903e85da1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5482c2b11951bbb92b87858242e17abde802b398 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd95bae63641d822dc591bd4aca7a64e53eac76f9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x06959273e9a65433de71f5a452d529544e07ddd0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x24bf2ee2e09477082d1ddf2f0603baa460b3f5f3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x56d8f846415e08c5e663d89505e79f522d33f947 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x548e923281f372d28a40287d3a2d30dce482fc66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9d744d3d905897608d24c1b8c1c7db0d30c36cd4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xab46d39cb398fb3649ecba781180016fef75f50b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x25048028ad87484b7fce99bc4e22dcb6c3307470 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xdb2177fee5b0ebdc7b8038cb70f3964bb6d14143 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x42d749f736051d8933b118324cded52d1f92bec1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb1a1b707b143b911c36e1a0f4f901c5017791aca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x3319a81a316abd4c086f7048904e31ff86648b38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4a978a2d4fb7393063babfb0cee741b8bcd4dd4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xea403e36fb592fdfdc342c38e94284ddbb0d2105 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xe3fb01794d6912f0773171e32e723471ee8df061 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x916d7f23ccbb1d10118dcfc6ad5a10b6446ff73e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x6cde5f5a192fbf3fd84df983aa6dc30dbd9f8fac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xd80d28850bebe6208433c298334392bc940b4fc7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7f7c4335ccac291ddedcef4429a626c442b627ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x628cb3a5a206956423d158009612813b64b19dab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x116361f4f45e310347b43cd098fdfa459760ea7f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x5dc631ad6c26bea1a59fbf2c2680cf3df43d249f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1a810e0b6c2dd5629afa2f0c898b9512c6f78846 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xac1cb6d3d419da9ead0b53e62d6fb4bb53473523 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0115d04a88990889471a88e85817aac9e961c07b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xd3409b7f3f54bb097433d0f4cd31c48ac33e569b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x493bfc1adb2e60805693197f23132350ffd2a04e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xcf4f103759770c21f945413781ca787620316988 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb135ebde27d366b0d62e579bae4118cb991b820e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xecbc2f008c20729b9239317408367377c5473812 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x96e0c440d3377c2dfe4f2a82add0b045e46cbe64 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x6f5304c22ac77e228e8af4732ac6677c46e09030 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xcb037f27eb3952222810966e28e0ceb650c65cd9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xddd23787a6b80a794d952f5fb036d0b31a8e6aff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa86aca6d7c393c06dcdc30473ea3d1b05c358dff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1ffec7119e315b15852557f654ae0052f76e6ae1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0f027d40c80d8f70f77d3884776531f80b21d20e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x69c66beafb06674db41b22cfc50c34a93b8d82a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xeedff72a683058f8ff531e8c98575f920430fdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x811cfb75567a252bea23474e2ccd1286927bfe0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2caccf71bdf8fff97c06a46eca29b611b1a74b5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xf07a84f0732dfe8eea0d3961bcd8f62c761ff508 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x8c1c499b1796d7f3c2521ac37186b52de024e58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7baece5d47f1bc5e1953fbe0e9931d54dab6d810 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x83abecf7204d5afc1bea5df734f085f2535a9976 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xb2eb5849e2606f99fc492e9add0103c667f806d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x53c6ca2597711ca7a73b6921faf4031eedf71339 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd35937ecd47b04a1474f8569f457fc5ac395921a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x6b75f2189f0e11c52e814e09e280eb1a9a8a094a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb372b5abdb7c2ab8ad9e614be9835a42d0009153 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xf369277650ad6654f25412ea8bfbd5942733babc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x4898cf312fbff8814cab80a8d7f6ee5ad0dc73fb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5e78afc6c804d4382bede3a0712d210e657e9b4f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x86b211ca7915a0c8d4659dd98242d9e801d88ab4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb637f7c82fd774c280e23cebc725e7cd807c66d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd249c43faabc58d6dd4b0a4de598b5a956c5d8d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x1fbae785ce68b79f7ed4f7b27c3af3ef0e0bc3d4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3c1376fb8487da57d4ffb263d9d01b578c7b586b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7b24bed19856f4bb1d4c0421cfb328026cd936bd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7cf887a863d81e6a483ee947dee05cb51914923c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x588c8cf031809486f015908864ee8699b44017e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3987d38a4ff8520a8ef6bcc6f98d6da8bcd69b89 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xde67d05242b18af00b28678db34feec883cc9cd6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4a5a8b0108f446df7c1c8a459fcfb54e844b7343 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xf6ba006abf768ab2d1b5bba2d22d9f13eb1269d4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4eefe02fce5b53ca33c7717bbd8ad3c9cb0609f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xaf996125e98b5804c00ffdb4f7ff386307c99a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7924a818013f39cf800f5589ff1f1f0def54f31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc1738d90e2e26c35784a0d3e3d8a9f795074bca4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xda908c0bf14ad0b61ea5ebe671ac59b2ce091cbf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x254aa3a898071d6a2da0db11da73b02b4646078f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x41824081f2e7beb83048bf52465ddd7c8e471da2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa0c2ce1723b3939f47ad01a293292f2f75dc629d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc42442f6402b68626e791a447d87b35cb1c6236e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x84537db6f6aaa2afdb71f325d14b9f5f7825bef1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x13933689ed2c6c66e83aed64336df14896efb7e2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x039df62583ddc1c5fda75db152b87113d863b6d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x92c2fc5f306405eab0ff0958f6d85d7f8892cf4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xcbe856765eeec3fdc505ddebf9dc612da995e593 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc39e83fe4e412a885c0577c08eb53bdb6548004a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xdbac78be00503d10ae0074e5e5873a61fc56647c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc1cd3d0913f4633b43fcddbcd7342bc9b71c676f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x6c4c7f46d9d4ef6bc5c9e155f011ad19fc4ef321 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xb2c86ff752f18499b70e8f642b3421405d50d6e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x16588709ca8f7b84829b43cc1c5cb7e84a321b16 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xd0a4c8a1a14530c7c9efdad0ba37e8cf4204d230 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xf92f2e3fca01491baba0975264362cc38b1cab7b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x3e6e23198679419cd73bb6376518dcc5168c8260 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x531b6a4b3f962208ea8ed5268c642c84bb29be0b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x553e9c493678d8606d6a5ba284643db2110df823 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe3170d65018882a336743a9c396c52ea4b9c5563 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1385fc1fe0418ea0b4fcf7adc61fc7535ab7f80d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5cd0ad98ba6288ed7819246a1ebc0386c32c314b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x0ad1e922e764df5ab6d636f5d21ecc2e41e827f0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x6b3a3d6ed64faf933a7a4b1bd44b2efba47614ac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x4ce4a1a593ea9f2e6b2c05016a00a2d300c9ffd8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0843e0f56b9e7fdc4fb95fabba22a01ef4088f41 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x8323d063b1d12acce4742f1e3ed9bc46d71f4222 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xe30e4dfdbb10949c27501922f845e20cfa579f09 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x7e02ae3f794ebade542c92973eb1c46d7e2e935d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xfa22d298e3b0bc1752e5ef2849cec1149d596674 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8066ee17156e4184d69277e26fa8cbca3a845edf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x418de8e0ab58abfe916a47821a055c59b9502deb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xfb9caae5a5c0ab91f68542124c05d1efbb97d151 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb68606a75b117906e06caa0755896ad2b3dd0272 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x6e33c0f5e16b45114679eac217e0c0138cefcd2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xd64fb39a5681908ad488b487d65f5d8479cb235c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0217fc17c642d29b890bcf888e21be2378493e01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x099d23a43da5a8a9282266dbefeaaef958150300 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd92e0767473d1e3ff11ac036f2b1db90ad0ae55f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x40c547e7fd88f60d94788953b83d9342d8d133c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x397433498c7befde4b4049b98a7ff081a2c17387 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf9be03505869d719ba194757943575ed2af001f2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x18c40bb9281a07627ff25cea45b7511f68fd0076 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x270d89e983d9821a418bf193684736414fab78c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb125aa15ad943d96e813e4a06d0c34716f897e26 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x813c0decbb1097fff46d0ed6a39fb5f6a83043f4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9a7ac628ba9f330341486380af729c8975388959 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf2c9339945bff71dd0bffd3c142164112cd05dc6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x12a4619c0bd9710732fbc458e9baa73df6c3d35f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x96530dac7817f186390b64ba63d13becd079b28d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x18fc1e95adb68b556212ebbad777f3fbb644db98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xabbeb324b090550ca6d15ec71019915813f54f90 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x86d708404d0db1d97843e66d4ed6b86d11be705b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xbfbba3de6a260c8374f8299c38898312c2d6e9a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xe945683b3462d2603a18bdfbb19261c6a4f03ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa1bf0e900fb272089c9fd299ea14bfccb1d1c2c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xe46935ae80e05cdebd4a4008b6ccaa36d2845370 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x3041cbd36888becc7bbcbc0045e3b1f144466f5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xd31d41dffa3589bb0c0183e46a1eed983a5e5978 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x391e8501b626c623d39474afca6f9e46c2686649 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xd0fc8ba7e267f2bc56044a7715a489d851dc6d78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x4fd47e5102dfbf95541f64ed6fe13d4ed26d2546 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe9033c0011f35547fa90d3f8a6ad4b666a590759 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0c3561d3b72e17378d99684414aa8669daeb8bd0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x14653ce9f406ba7f35a7ffa43c81fa7ecd99c788 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3204e9734a56a4d7c6f4f5822e14182d9d1a43c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x43faefd4c0c25e969ac211cd97a4a51e52c729b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa652ab3be697c7a01fbdce4d73f8e8acd990251c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x29962083891241aad61ad97bae46d032c9c0c55c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x26bf3601b77be9c31b13b22ebca02914db9c7468 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0d2edd335982f56662d772b93d86901eb9bd2ff9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xbaed273edd493930711fe88690ebd1f30f7f55ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x16033643947bf4d8a1ae37b055edf57cb183106a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xf59abf32c1e8c5d2c6e3faa2131533bbcd466194 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0312187403bf72b8d2d80729894d6ac3300bd63f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x416fdbc4fb8d4d1f48d0d3778c59dfa5352e9b15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x5918aca9ae924e6eaaa3d293bb92bdec9ab79338 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8270e64d22cf13e92c641c4006408c7d7e3ff341 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x16503510c58da73486950b72a12ead3d1d8355dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x7505159f644ddc5eae21c119e328d0d5bee574b0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe870bfe4aacb6e234b645e535d26c53790d50e78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2e2d190ad4e0d7be9569baebd4d33298379b0502 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb834093d7e46f7644be45e77281394d31003e866 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xb5a1fd804342cfb679bd8ada75718bc3ec43097e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9e71e2b14d7e6d30811628ab0965f28e4e2edbce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa011da4a0c9261ecf4694bf73a74d113aa261133 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7ab922c1bfdf7df977c7531c5782074d866f3adc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe2d2050430e341a8f3988e2726e44d9370f8cd3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xed66ba3ea44425805a085b1ca80d00467b055b38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x40dade19adc198125ec237a2c48b3408568b2f81 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x166bc40da621d3cb978e24334f844b84ddef25f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x76bf0abd20f1e0155ce40a62615a90a709a6c3d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x6948d6c8532c6b0006cb67c6fb9c399792c8ac91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x4e40cf4a7d8724e5adc2b791bbf9451d1e260b93 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x90908e414d3525e33733d320798b5681508255ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xd6b4cce96ddf8aab2e5750983af9a901f17fbc36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x4cef551255ec96d89fec975446301b5c4e164c59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xdd0c6bae8ad5998c358b823df15a2a4181da1b80 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5e6ff2fa4ca244b6b33c7286d368120822eacc11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x98efd62b4bfbde6393b18b063c506ce5a77f4810 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3c5096df639262db0a6cd0172f08709d4161094b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xae31f0e673fc5f33cfc0e9abb426d8051404a7c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xd10456ce05b9af05c8eede0f93ea8aa80a0daa2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x065c22a16f6531706681fabbc8df135fe6eb1c2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x8ab8d851c6b31d8a4d42fd7d3e47b20861b025f2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc0067d751fb1172dbab1fa003efe214ee8f419b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc3d7aa944105d3fafe07fc1822102449c916a8d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2982d3295a0e1a99e6e88ece0e93ffdfc5c761ae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc593fe9193b745447e86b45ea0bf62565ee030cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x88051b0eea095007d3bef21ab287be961f3d8598 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xb31273fd2dfc05e6fd91a3b8a2a681aeb0fbcf48 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xaf7b48ae2f4773fd44f9208cca3db5ae7bfa7e37 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc2125a452115ff5a300cc2a6ffae99637f6e329d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xb08a8794a5d3ccca3725d92964696858d3201909 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xae99efe6b04bbe5b8b4ad567946fb84b35681abb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x6696710b8e3dc0d844c8b9244767962a4a61ad97 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xcde77ef185a8f886d03b109573cc1dcdcf3cf1f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x35f5387decce5a234da1a32ca3c9e338a48bcf37 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4178dd7eb2eb983ba7f7e41648cf91db6be20190 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb6c8f9490314394cfc6edacb8717bfdc1eb8dab5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1625fe58cdb3726e5841fb2bb367dde9aaa009b3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb1ed164c736909ba7ddbc1feb7ced4eaad854a87 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x95faa9a91cd6c1c018e4b1a6fc4c89d4f1695e5d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xa143ccf73c25eec6f38bd1b741043ebea228b8e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2e067e0eab7fd31c01473c0f56f3295afb82e461 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xbc83c60e853398d263c1d88899cf5a8b408f9654 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xaf21b0ec0197e63a5c6cc30c8e947eb8165c6212 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9c84f58bb51fabd18698efe95f5bab4f33e96e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x202a6012894ae5c288ea824cbc8a9bfb26a49b93 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x744159757cac173a7a3ecf5e97adb10d1a725377 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x127452f3f9cdc0389b0bf59ce6131aa3bd763598 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2264ba9dc0b257c69eeae7782e8ff608cc65d6a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x00a59c2d0f0f4837028d47a391decbffc1e10608 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xad6e8f6a34087bddfb03815e2c10e4f7bfd4395b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xd5bb156cb73bfca62f68dc3dff7e5ec4e305b861 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc0d8f259578c985947a050802fb4857261af0bf3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x74f7a360eb36a46b675ea932ea07094a3ace441f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x626761cc5b9fafe4696bf8def4aa015576bb4bef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc767c0b2e2e56c455fd29f9ee9b6e6f035c71ed4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x625cb959213d18a9853973c2220df7287f1e5b7d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x5ced44f03ff443bbe14d8ea23bc24425fb89e3ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x7138eae57e8a214f7297e5e67bb6e183df3572d5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc7bbec68d12a0d1830360f8ec58fa599ba1b0e9b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x840deeef2f115cf50da625f7368c24af6fe74410 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xda71299ff6bdac31bdcafde52a41d460f17e3ad9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xabebc245a9a47166ecd10933d43817c8ef6fb825 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb007dda6ca7a57785ce04981c30a1934995a197a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0de383928e4fcf0f90ad2d6a5ee18eb3b9d16a55 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0a36df020fe3f132e6557899f272bf3d4591620e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x69c7bd26512f52bf6f76fab834140d13dda673ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8c9d230d45d6cfee39a6680fb7cb7e8de7ea8e71 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xcb198a55e2a88841e855be4eacaad99422416b33 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9b371948735f612be19195f5f6e5ebc03839cdaf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb3709d0e16b618b15ee4bcf82d19b9e7d4100914 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xe426e1305f5e6093864762bf9d2d8b44bc211c59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7b9a5bc920610f54881f2f6359007957de504862 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xfb82dd4d657033133eea6e5b7015042984c5825f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x92560c178ce069cc014138ed3c2f5221ba71f58a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xac70bd92f89e6739b3a08db9b6081a923912f73d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1ebcf8831b93450ea81b0619c5e05b98751c8322 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x470d0d72c975a7f328bd63808bfffd28194b3eb6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa961f0473da4864c5ed28e00fcc53a3aab056c1b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa5b6d588ceb3aa1bf543d095038479188f884690 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb1419a7f9e8c6e434b1d05377e0dbc4154e3de78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x70c132a2ddeccf0d76cc9b64a749ffe375a79a21 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x6ef7d514d75b5a5a3c500dba1b161a81e842e7a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1b942ce8bf08290f740b9e825c91e07fcd0bfe75 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x4f122edcd91af8cda38c3a87158afa8687bab57c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xed3fe08bd12f24dad0f1a1e58610644debe374fb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x7bc815ca2c2115f896bb14b31b8196388c05e99b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xd29c2df656b2e4ae6b6817ccc2ebe932fc6a950b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x1f6082db7c8f4b199e17090cd5c8831a1dad1997 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc64f886397988ff16d72123dbe3d46e5bf33ffac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0d2c430c6f7ef48ed34bf4aad0ec377e03cc53cf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2b11a34f52e354ef197f0a2397008699b875ae7e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xde27bdec962a74a72fa1c5ef50bff6f3da083e05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x7766bdc5ff15d3aceb4d37914963aebaccf3de15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x5016cd7b785a773f7f3a3ff4035a1e7a76543946 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xf6c4e4f339912541d3f8ed99dba64a1372af5e5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x67ab7dc903a10838a0de8861dfdff3287cf98e5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x88aaeed1fcfca2eda30749afa9ad45a75c80e292 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2c8e9a1586ed822f79c0a241e1a4d48e839b3182 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x847165954680b989902e354f34d08b09afab3cd9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x590269935821d760c54b32d31db66ba47d4e53b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x03d70bf9e6afbf8cac09ef0c45f9a00a841c2bed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8b238f615c1f312d22a65762bcf601a37f1eeec7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5280d5e63b416277d0f81fae54bb1e0444cabdaa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xf4e43a4a17d2820c7cf724e46844943931a47894 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5ab53ee1d50eef2c1dd3d5402789cd27bb52c1bb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe6ff8b9a37b0fab776134636d9981aa778c4e718 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x44af8d03393e498eec5fcfc7936ebc381f02974d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4094915f7849b26e8d43dee1f7e3b7b477a0b5bb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc3f5e0d4cdff86e85486cf6bd20cc0884df5f98e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x87428a53e14d24ab19c6ca4939b4df93b8996ca9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9dbe5dffaeb4ac2e0ac14f8b4e08b3bc55de5232 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa7bb0d95c6ba0ed0aca70c503b34bc7108589a47 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xbcfac19a0036ada56496316ee5cf388c2af2bf58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x296b88b607ea3a03c821ca4dc34dd9e7e4efa041 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x019c29d5c97f8cbaa67013e2cf4b6506a5cf183a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x30442fcebbd75a5bb58377c0174d5ce637e297d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x6c561b446416e1a00e8e93e221854d6ea4171372 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0fb597d6cfe5be0d5258a7f017599c2a4ece34c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe9b7057f9b81a0120c09306d35f22859473f18cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8deb37b048f4b3c7bd61eca7dfccbef7cba726de - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x455fd3ae52a8ab80f319a1bf912457aa8296695a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe11d03bef391ee0a4b670176e23eb44aad490f12 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe7f850731fed6af4c36cce93eccfbcda0634a030 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xadad4ce0c68f50a19cf5063e0b91d701daab1df1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x5e9bb3d7682a9537db831060176c4247ab80d1ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe9ed60539a8ea7a4da04ebfa524e631b1fd48525 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0511791eb6fb175a1aaa645114f0f5c8689ec163 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xf3c7b93db3f28580b0fd10365e619eedceb40e76 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x58ecf9cec06bc58fde9280d348f79ed8f3d3046e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xedc7f0dfd9751ef95bb8786a3b130f490743bb0e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x6bcb0ba386e9de0c29006e46b2f01f047ca1806e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc3576f38c32e95e36bbd8d91e6cbe646a3723110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x8d58e202016122aae65be55694dbce1b810b4072 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x34a43471377dcce420ce8e3ffd9360b2e08fa7b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x766854992bd5363ebeeff0113f5a5795796befab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9438a9d1bdeece02ed4431ac59613a128201e0b9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0a63d3910ffc1529190e80e10855c4216407cc45 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x89084692453ab2305f5f8ac7d70d5efd37a86b8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb34a5657988da5b9888952c439756594613507aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x05efb437e4e97efea6450321eca8d7585a731369 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc973c86afc23ed731ce1a14d7179003a1601205f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0f44a1c2b66418f784607d2067fe695703809bff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0da6253560822973185297d5f32ff8fa38243afe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xa95b0f5a65a769d82ab4f3e82842e45b8bbaf101 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x886b4f0cb357e0d6ec07b7a3985f346cc17ece7d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x50defb73a76efe5d5d35cf267ffb02dfd6cd96bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7aea2e8a3843516afa07293a10ac8e49906dabd1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8c7080564b5a792a33ef2fd473fba6364d5495e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8f81b80d950e5996346530b76aba2962da5c9edb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x7bc0f74d8d94e8e9fdaa40bbc04cc44fb8e0f081 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x09c149c856e6fb6e40aa39209142411b554b1a41 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x7ef0a523c49b1dd07e3593198c5260a95ad7859a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x622270721fb38fde831ab23a8e177665557f6fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x15aa01580ae866f9ff4dbe45e06e307941d90c7b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4548280ac92507c9092a511c7396cbea78fa9e49 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe0554a476a092703abdb3ef35c80e0d76d32939f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x421803da50d3932caa36bd1731d36a0e2af93542 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x258a4b7373f6863db5a17de191e0cebb1e0bbc8a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x45126b956401daaec92afba2a9953e14b16fb83f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa3eaa52b505cf61aadcfe21424d43a6847dd6331 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x722bcf6c16dadcc29914e4e64290c46aa1406de8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x1e1367dcebe168554e82552e0e659a4116926d10 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x4d170f8714367c44787ae98259ce8adb72240067 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xaa97f0689660ea15b7d6f84f2e5250b63f2b381a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xc555d55279023e732ccd32d812114caf5838fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xb736330326cf379ecd918dba10614bd63c2713da - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe3d4faff3179f0a664a3a84c3e1da3b90e27f186 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x50e7b9293aef80c304234e86c84a01be8401c530 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x87dddd2e152bf1955e7e03d9f23a9dcc163eebf6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd9dd34576c7034beb0b11a99afffc49e91011235 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x394a9fcbab8599437d9ec4e5a4a0eb7cb1fd2f69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xb3adde966b8a1a6f22a04914ee9fe0798e71fc5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa2d4a8e00daad32acace1a0dd0905f6aaf57e84e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2392ae4ba6daf181ce7343d237b695cdf525e233 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc2c390c6cd3c4e6c2b70727d35a45e8a072f18ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x3dd2fdba71282083d440687cce9e4231aaac534e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe4d9faddd9bca5d8393bee915dc56e916ab94d27 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9c92ed19a86986124447a73b27625230dd52f805 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x740601243a6aa25ce4ee2d196eef83ac3bec6c65 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xafbb6fcc92ddb091dbc13e9073c3360c7d9600cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xf54eba95d7f8dbe4bfeb0b6e038b3c2bedd3e40a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x05c0a0b84b6b67499c33e6403686f45cab063810 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9169bf3657353e4b2b81c75e235f22bc299a7780 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x95f4408736988549212db071b1c8d20f7c4e6304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x52c77b0cb827afbad022e6d6caf2c44452edbc39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xb0bb2c1d32c7b27f21eec4402c6d1c38795c090a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x534d3930edba2c0b90a7973549a0287141c987ef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xf27d0dac09460b236d4d9e0da316fe9c3a99b4a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xdd672b3b768a16b9bcb4ee1060d3e8221435beaa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xa39fe8f7a00ce28b572617d3a0bc1c2b44110e79 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x96d5d78b179169ee0a0a0104dc514988f2a797fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb466d5429d6ad9999bf112c225d9d7b15e96c658 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x0c3fdf9c70835f9be9db9585ecb6a1ee3f20a6c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8a35d2635aeca1aaf667d77ed9ff3b21e48ede24 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe566e99d65b17974fd9db02e25e24ea8020f7a0e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5c3edc45ae71a353c669cfa71e6488951dce4618 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa7b3bcc6c88da2856867d29f11c67c3a85634882 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x543842cbfef3b3f5614b2153c28936967218a0e6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc45a81bc23a64ea556ab4cdf08a86b61cdceea8b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe333e366503f620e0242796431dc74fffd258e66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x42161084d0672e1d3f26a9b53e653be2084ff19c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xe24f62341d84d11078188d83ca3be118193d6389 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x782dcc2cd3a65405baeb794269703e9c29a175cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xae8d5b91fca627410a3bef77f55fcfe208409a40 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xa42eb1c1a212da9e24058c6afc0ea906fecb8351 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0e3529cf622dc1141a31cfc0fc85f679f558c92b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x6f5ec7c65c2744a963064f6d49df0f4eea7d7d90 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9a772018fbd77fcd2d25657e5c547baff3fd7d16 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xfc1505b3d4cd16bb2336394ad11071638710950f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x8e0a7d4018fb2674346d5742055174f899fe1826 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xf8aa1db87d84118b0b461e2135190ac27fc1859d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xe8f7c89c5efa061e340f2d2f206ec78fd8f7e124 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x56534741cd8b152df6d48adf7ac51f75169a83b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x73a38006d23517a1d383c88929b2014f8835b38b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xf5d63f66a36be31a106631f276794223b8ce5280 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xcf0bb95967cd006f5eaa1463c9d710d1e1550a96 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xdc9bf303e72a5780c45d53fc12799164e5ba8271 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x1d4dab3f27c7f656b6323c1d6ef713b48a8f72f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xafd8f9b89e2af8246523573a369010daf9489b12 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xbd045175d2a1451a015079f5f3f59ca5c05524ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x859ec3d336bb5508f6d87fea2d49c9294adae311 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x8544383f6f2eb43711fba8d918b30658856b9806 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x5166c1bd4603cf67dbb9a98940e38d2bd0a7f294 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0xf215cedbae999571e4ba5d80c10b6e835f88d5ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xd4cb5566b5c16ef2f4a08b1438052013171212a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x357faf5843c7fd7fb4e34fbeabdac16eabe8a5bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2bbfb5a2496f405d4094d4b854daeb9ce70d0029 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x3373a22cb07cb49651b82cf6f174ef434e4dbaa8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xc8d19b4ea42939a4b14260f0c8b4a0d6f70c8496 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0xb2290db2f409201c33c507d266becabf19228dd1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x308c6fbd6a14881af333649f17f2fde9cd75e2a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x704ad8d95c12d7fea531738faa94402725acb035 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x0c30062368eefb96bf3ade1218e685306b8e89fa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x6f38e884725a116c9c7fbf208e79fe8828a2595f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xe612cb2b5644aef0ad3e922bae70a8374c63515f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xdef705a1864bcba65e4e275bffd58de21b5d44a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x717358a47ac99f3cd233e723be331756b3951164 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9166a0139cab9661e08779cd01b1358aaea7b95f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc1a6fbedae68e1472dbb91fe29b51f7a0bd44f97 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3a3dc4a26d1aceae12fd1026a5856f12d20658ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xa2375dad211fe6e538d29c98ec526246e38be4ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x4e4a4c4c46d3488ff35ff05a0233785a30f03ec4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x5d27fdd96c8e4028edbabf3d667be24769425199 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1944ac04bd9fed9a2bcdb38b70c35949c864ec35 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x5e2cd0da3411449152010d8b7f2b624eb29cca59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x85e8d0fddf559a57aac6404e7695142cd53eb808 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xead1cd21ddf8793debc9484a0b8d286230c9b5a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc4ecaf115cbce3985748c58dccfc4722fef8247c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2f42df4af5312b492e9d7f7b2110d9c7bf2d9e4f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x021235b92a4f52c789f43a1b01453c237c265861 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xc6e291f54532f12391ab59d7af75453db2dd784a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xfe4fe5b4575c036ac6d5cccfe13660020270e27a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0xfa7d79f971a70771e5e92bd80ab955edc8602f4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x023b6298e2f9ae728b324757599f2a36e002a55a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x53d3e59faac08184720bcb2816f4cf5b36d6767d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x7e9cb8ad4a7683070e233f3eb1d07d87272b9b26 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xa213c82265cd3d94f972f735a4f5130e34df81bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xf1fdc83c3a336bdbdc9fb06e318b08eaddc82ff4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3d9228f1847b07e6b2c8eaaf393d5a4db2dbedc2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9263bb7e2d3570593d80d087ea2cfc72882cfb2c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x360b9726186c0f62cc719450685ce70280774dc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x663b1d43c27e41e5e512bf59010133997d1cd304 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0xfea834a5c47b923add607cc5b96288d18ffb9c3f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x273d580e9ceadca5b2a8ceb5ebb38a70511377cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x3b241fb91c65f42432ebdbca029e0b511c8a1707 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xe9a65059e895dd5d49806f6a71b63fed0ffffd4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x01a1f5758c3a53057b6c819ec7331e39c167794a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x40fc7cda03139ebf7a0d3fc01f12b9d9a878cc92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x11e26bbd1a5547895a50fc39a2d4c0025dec0bda - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x21cbb0e695b0ac79be756a87da690fd80bef4bff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x68b27e9066d3aadc6078e17c8611b37868f96a1d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2af64d33a47e7a98eafc20ce9f6af59927d10260 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x9ec9620e1fda9c1e57c46782bc3232903cacb59b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x1112956589a2bea1b038732db4ea6b0c416ef130 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0xc4ce8e63921b8b6cbdb8fcb6bd64cc701fb926f2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x9febc984504356225405e26833608b17719c82ae - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x59c38b6775ded821f010dbd30ecabdcf84e04756 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/ethereum/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/arbitrum/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/optimism/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0xcec31e540163ddf45a394e00b11ae442ddc0d704 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x7f9121b4f4e040fd066e9dc5c250cf9b4338d5bc - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/polygon/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x316f12517630903035a0e0b4d6e617593ee432ba - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x61928bf5f2895b682ecc9b13957aa5a5fe040cc0 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x9399da51c1a85e64cce4b30b554875d2b89b2445 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x0962a51e121aa8371cd4bb0458b7e5a08c1cbd29 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0xfbb6eed8e7aa03b138556eedaf5d271a5e1e43ef - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/base/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x913a4ed1636c474e6451b5e9249d94046a24bb33 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x8e3ecc0b261f1a4db62321090575eb299844f077 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/bnb/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x2aeee741fa1e21120a21e57db9ee545428e683c9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/pools/celo/0x67324985b5014b36b960273353deb3d96f2f18c2 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/ethereum/0x99950bae3d0b79b8bee86a8a208ae1b087b9dcb0 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/ethereum/0x948b54a93f5ad1df6b8bff6dc249d99ca2eca052 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/ethereum/0x5738df8073ad05d0c0fcf60e358033268ebf16cc + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/ethereum/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/ethereum/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/arbitrum/0x52f9d14bed8ce6536da063aaf274ae2747ef4853 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/arbitrum/0xc0f05732d1cda6f59487ceeef4390abcad86ea3e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/arbitrum/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/arbitrum/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/optimism/0x28117b7b8dba890041d7ebe646082af043533da2 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/optimism/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/optimism/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/polygon/0xf3ca4ade682c5b99507db9a72549318b8708f137 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/polygon/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/polygon/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0x9c087eb773291e50cf6c6a90ef0f4500e349b903 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0x037818b04ac34ea8b54b6683b79ef24d23c0e7cb + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0xbf6ef625de5df898cc1d0f91868aae03976a2e2d + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0xfdbaf04326acc24e3d1788333826b71e3291863a + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0xc68b994e2147b8bcf18f82c201ac3ee1e97be33d + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0x47808ddbc91646b21b307fefbaf7ee200b004ccc + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/bnb/0xafa5421fe7997c16e11458659f5a87d67f1e8651 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/bnb/0x26b4103c8da21725909955fe85f7f6249d05dd9e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/bnb/0x79dbd26d3c1e44171205f258aadfae84933b69b8 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/bnb/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/bnb/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/celo/0xb771f724c504b329623b0ce9199907137670600e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/celo/0x0da7096f14303eddd634c0241963c064e0244984 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/pools/base/0x0f9e3c4b905e6292b33f5ef96af18054ded12ac8 + 2025-01-03T22:53:44.510Z 0.8 \ No newline at end of file diff --git a/apps/web/public/tokens-sitemap.xml b/apps/web/public/tokens-sitemap.xml index 34370852127..835723af499 100644 --- a/apps/web/public/tokens-sitemap.xml +++ b/apps/web/public/tokens-sitemap.xml @@ -2,8632 +2,8922 @@ https://app.uniswap.org/explore/tokens/ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xdac17f958d2ee523a2206206994597c13d831ec7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6982508145454ce325ddbe47a25d4ec3d2311933 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6b175474e89094c44da98b954eedeac495271d0f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6123b0049f904d730db3c36a31167d9d4121fa6b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcf0c122c6b73ff809c693db761e7baebe62b6a2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfaba6f8e4a5e8ab82f62fe7c39859fa577269be3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x58cb30368ceb2d194740b144eab4c2da8a917dcb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4c9edd5852cd905f086c759e8383e09bff1e68b3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaaee1a9723aadb7afa2810263653a34ba2c21c7a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x514910771af9ca656af840dff83e8264ecf986ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5b7533812759b45c2b44c19e320ba2cd2681b542 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xae78736cd615f374d3085123a210448e74fc6393 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb9f599ce614feb2e1bbe58f180f370d05b39344e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd5f7838f5c461feff7fe49ea5ebaf7728bb0adfa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd31a59c85ae9d8edefec411d448f90841571b89c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6a7eff1e2c355ad6eb91bebb5ded49257f3fed98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x576e2bed8f7b46d34016198911cdf9886f78bea7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1258d60b224c0c5cd888d37bbf31aa5fcfb7e870 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x62d0a8458ed7719fdaf978fe5929c6d342b0bfce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x77e06c9eccf2e797fd462a92b6d7642ef85b0a44 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x24fcfc492c1393274b6bcd568ac9e225bec93584 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x27702a26126e0b3702af63ee09ac4d1a084ef628 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd46ba6d942050d489dbd938a2c909a5d5039a161 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbe9895146f7af43049ca1c1ae358b0541ea49704 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x72f713d11480dcf08b37e1898670e736688d218d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0001a500a6b18995b03f44bb040a5ffc28e45cb0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9e9fbde7c7a83c43913bddc8779158f1368f0413 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5f98805a4e8be255a32880fdec7f6728c6568ba0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2b591e99afe9f32eaa6214f7b7629768c40eeb39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1ae7e1d0ce06364ced9ad58225a1705b3e5db92b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x046eee2cc3188071c02bfc1745a6b17c656e3f3d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x84018071282d4b2996272659d9c01cb08dd7327f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x12970e6868f88f6557b76120662c1b3e50a646bf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaea46a60368a7bd060eec7df8cba43b7ef41ad85 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc01154b4ccb518232d6bbfc9b9e6c5068b766f82 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5a98fcbea516cf06857215779fd812ca3bef1b32 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x102c776ddb30c754ded4fdcc77a19230a60d4e4f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x72e4f9f808c49a2a61de9c5896298920dc4eeea9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x467719ad09025fcc6cf6f8311755809d45a5e5f3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf19308f923582a6f7c465e5ce7a9dc1bec6665b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x710287d1d39dcf62094a83ebb3e736e79400068a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf951e335afb289353dc249e82926178eac7ded78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf017d3690346eb8234b85f74cee5e15821fee1f4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8c282c35b5e1088bb208991c151182a782637699 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xeaa63125dd63f10874f99cdbbb18410e7fc79dd3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xde342a3e269056fc3305f9e315f4c40d917ba521 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2dff88a56767223a5529ea5960da7a3f5f766406 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x626e8036deb333b408be468f951bdb42433cbf18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xdd66781d0e9a08d4fbb5ec7bac80b691be27f21d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb23d80f5fefcddaa212212f028021b41ded428cf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbaac2b4491727d78d2b78815144570b9f2fe8899 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf8ebf4849f1fa4faf0dff2106a173d3a6cb2eb3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb90b2a35c65dbc466b04240097ca756ad2005295 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1614f18fc94f47967a3fbe5ffcd46d4e7da3d787 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf1df7305e4bab3885cab5b1e4dfc338452a67891 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x91fbb2503ac69702061f1ac6885759fc853e6eae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa9e8acf069c58aec8825542845fd754e41a9489a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2c95d751da37a5c1d9c5a7fd465c1d50f3d96160 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe453c3409f8ad2b1fe1ed08e189634d359705a5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x89d584a1edb3a70b3b07963f9a3ea5399e38b136 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4507cef57c46789ef8d1a19ea45f4216bae2b528 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd1d2eb1b1e90b638588728b4130137d262c87cae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe92344b4edf545f3209094b192e46600a19e7c2d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8a0a9b663693a22235b896f70a229c4a22597623 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1bbe973bef3a977fc51cbed703e8ffdefe001fed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa41d2f8ee4f47d3b860a149765a7df8c3287b7f0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x761d38e5ddf6ccf6cf7c55759d5210750b5d60f3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc18360217d8f7ab5e7c516566761ea12ce7f9d72 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe28b3b32b6c345a34ff64674606124dd5aceca30 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x168e209d7b2f58f1f24b8ae7b7d35e662bbf11cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb131f4a55907b10d1f0a50d8ab8fa09ec342cd74 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3472a5a71965499acd81997a54bba8d852c6e53d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7dd9c5cba05e151c895fde1cf355c9a1d5da6429 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x19efa7d0fc88ffe461d1091f8cbe56dc2708a84f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x14fee680690900ba0cccfc76ad70fd1b95d10e16 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3c3a81e81dc49a522a592e7622a7e711c06bf354 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa1290d69c65a6fe4df752f95823fae25cb99e5a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x92f419fb7a750aed295b0ddf536276bf5a40124f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2c06ba9e7f0daccbc1f6a33ea67e85bb68fbee3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3d658390460295fb963f54dc0899cfb1c30776df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8e870d67f660d95d5be530380d0ec0bd388289e1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x853d955acef822db058eb8505911ed77f175b99e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1294f4183763743c7c9519bec51773fb3acd78fd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4e15361fd6b4bb609fa63c81a2be19d873717870 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x695d38eb4e57e0f137e36df7c1f0f2635981246b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x40a7df3df8b56147b781353d379cb960120211d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaaef88cea01475125522e117bfe45cf32044e238 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x163f8c2467924be0ae7b5347228cabf260318753 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x30672ae2680c319ec1028b69670a4a786baa0f35 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc944e90c64b2c07662a292be6244bdf05cda44a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x15e6e0d4ebeac120f9a97e71faa6a0235b85ed12 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7d225c4cc612e61d26523b099b0718d03152edef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x82af49447d8a07e3bd95bd0d56f35241523fbab1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xaf88d065e77c8cc2239327c5edb3a432268e5831 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xff970a61a04b1ca14834a43f5de4533ebddb5cc8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x912ce59144191c1204e64559fe8253a0e49e6548 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x5979d7b546e38e414f7e9822514be443a4800529 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x35751007a407ca6feffe80b3cb397736d2cf4dbe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xeb466342c4d449bc9f53a865d5cb90586f405215 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf97f4df75117a78c1a5a0dbb814af92458539fb4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9623063377ad1b27544c965ccd7342f7ea7e88c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x539bde0d7dbd336b79148aa742883198bbf60342 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3082cc23568ea640225c2467653db90e9250aaa0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x18c11fd286c5ec11c3b683caa813b77f5163a122 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x289ba1701c2f088cf0faf8b3705246331cb8a839 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4cb9a7ae498cedcbb5eae9f25736ae7d428c9d66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x00cbcf7b3d37844e44b888bc747bdd75fcf4e555 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd79bb960dc8a206806c3a428b31bca49934d18d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3096e7bfd0878cc65be71f8899bc4cfb57187ba3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4e352cf164e64adcbad318c3a1e222e9eba4ce42 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x11cdb42b0eb46d95f990bedd4695a6e3fa034978 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xba5ddd1f9d7f570dc94a51479a000e3bce967196 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc8ccbd97b96834b976c995a67bf46e5754e2c48e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd07d35368e04a839dee335e213302b21ef14bb4a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x323665443cef804a3b5206103304bd4872ea4253 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x83d6c8c06ac276465e4c92e7ac8c23740f435140 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x87aaffdf26c6885f6010219208d5b161ec7609c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1b8d516e2146d7a32aca0fcbf9482db85fd42c3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xafccb724e3aec1657fc9514e3e53a0e71e80622d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4425742f1ec8d98779690b5a3a6276db85ddc01a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xec70dcb4a1efa46b8f2d97c310c9c4790ba5ffa8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3419875b4d3bca7f3fdda2db7a476a79fd31b4fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3b60ff35d3f7f62d636b067dd0dc0dfdad670e4e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x58b9cb810a68a7f3e1e4f8cb45d1b9b3c79705e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xfa5ed56a203466cbbc2430a43c66b9d8723528e7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x95146881b86b3ee99e63705ec87afe29fcc044d9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x088cd8f5ef3652623c22d48b1605dcfe860cd704 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xbfd5206962267c7b4b4a8b3d76ac2e1b2a5c4d5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6daf586b7370b14163171544fca24abcc0862ac5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9d2f299715d94d8a7e6f5eaa8e654e8c74a988a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x580e933d90091b9ce380740e3a4a39c67eb85b4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x655a6beebf2361a19549a99486ff65f709bd2646 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9e64d3b9e8ec387a9a58ced80b71ed815f8d82b5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2297aebd383787a160dd0d9f71508148769342e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6694340fc020c5e6b96567843da2df01b2ce1eb6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x772598e9e62155d7fdfe65fdf01eb5a53a8465be - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x431402e8b9de9aa016c743880e04e517074d8cec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd74f5255d557944cf7dd0e45ff521520002d5748 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6fd58f5a2f3468e35feb098b5f59f04157002407 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x561877b6b3dd7651313794e5f2894b2f18be0766 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf9ca0ec182a94f6231df9b14bd147ef7fb9fa17c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd77b108d4f6cefaa0cae9506a934e825becca46e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd56734d7f9979dd94fae3d67c7e928234e71cd4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf1264873436a0771e440e2b28072fafcc5eebd01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x5575552988a3a80504bbaeb1311674fcfd40ad4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x0341c0c0ec423328621788d4854119b97f44e391 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x764bfc309090e7f93edce53e5befa374cdcb7b8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xaaa6c1e32c55a7bfa8066a6fae9b42650f262418 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9e20461bc2c4c980f62f1b279d71734207a6a356 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7fb7ede54259cb3d4e1eaf230c7e2b1ffc951e9a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3a18dcc9745edcd1ef33ecb93b0b6eba5671e7ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x000000000026839b3f4181f2cf69336af6153b99 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x31c91d8fb96bff40955dd2dbc909b36e8b104dde - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x25d887ce7a35172c62febfd67a1856f20faebb00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd4d42f0b6def4ce0383636770ef773390d85c61a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf8388c2b6edf00e2e27eef5200b1befb24ce141d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x619c82392cb6e41778b7d088860fea8447941f4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x94025780a1ab58868d9b2dbbb775f44b32e8e6e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xad4b9c1fbf4923061814dd9d5732eb703faa53d4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd7a892f28dedc74e6b7b33f93be08abfc394a360 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3269a3c00ab86c753856fd135d97b87facb0d848 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4568ca00299819998501914690d6010ae48a59ba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x21e60ee73f17ac0a411ae5d690f908c3ed66fe12 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd3188e0df68559c0b63361f6160c57ad88b239d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2b41806cbf1ffb3d9e31a9ece6b738bf9d6f645f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf19547f9ed24aa66b03c3a552d181ae334fbb8db - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x35e6a59f786d9266c7961ea28c7b768b33959cbb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x59a729658e9245b0cf1f8cb9fb37945d2b06ea27 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb56c29413af8778977093b9b4947efeea7136c36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x43ab8f7d2a8dd4102ccea6b438f6d747b1b9f034 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1d987200df3b744cfa9c14f713f5334cb4bc4d5d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3404149e9ee6f17fb41db1ce593ee48fbdcd9506 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x080f6aed32fc474dd5717105dba5ea57268f46eb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb5a628803ee72d82098d4bcaf29a42e63531b441 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1622bf67e6e5747b81866fe0b85178a93c7f86e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7dd747d63b094971e6638313a6a2685e80c7fb2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xa2f9ecf83a48b86265ff5fd36cdbaaa1f349916c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x17a8541b82bf67e10b0874284b4ae66858cb1fd5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xbcd4d5ac29e06e4973a1ddcd782cd035d04bc0b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x42069d11a2cc72388a2e06210921e839cfbd3280 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xbbea044f9e7c0520195e49ad1e561572e7e1b948 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe85b662fe97e8562f4099d8a1d5a92d4b453bf30 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3d9907f9a368ad0a51be60f7da3b97cf940982d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4e51ac49bc5e2d87e0ef713e9e5ab2d71ef4f336 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x4200000000000000000000000000000000000006 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x7f5c764cbc14f9669b88837ca1490cca17c31607 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x4200000000000000000000000000000000000042 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x0b2c639c533813f4aa9d7837caf62653d097ff85 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x1f32b1c2345538c0c6f582fcb022739c4a194ebb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x68f180fcce6836688e9084f035309e29bf0a2095 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x94b008aa00579c1307b0ef2c499ad98a8ce58e58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xdc6ff44d5d932cbd77b52e5612ba0529dc6226f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x8700daec35af8ff88c16bdf0418774cb3d7599b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x920cf626a271321c151d027030d5d08af699456b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x6c84a8f1c29108f47a79964b5fe888d4f4d0de40 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x9e1028f5f1d5ede59748ffcee5532509976840e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xeb466342c4d449bc9f53a865d5cb90586f405215 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x17aabf6838a6303fc6e9c5a227dc1eb6d95c829a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xf467c7d5a4a9c4687ffc7986ac6ad5a4c81e1404 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x76fb31fb4af56892a25e32cfc43de717950c9278 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xc5b001dc33727f8f26880b184090d3e252470d45 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x9560e827af36c94d2ac33a39bce1fe78631088db - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x9bcef72be871e61ed4fbbc7630889bee758eb81d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x50c5725949a6f0c72e6c4a641f24049a917db0cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xf98dcd95217e15e05d8638da4c91125e59590b07 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x4b03afc91295ed778320c2824bad5eb5a1d852dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xc40f949f8a4e094d1b49a23ea9241d289b7b2819 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x323665443cef804a3b5206103304bd4872ea4253 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x50bce64397c75488465253c0a034b8097fea6578 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x296f55f8fb28e498b858d0bcda06d955b2cb3f97 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x2598c30330d5771ae9f983979209486ae26de875 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x0994206dfe8de6ec6920ff4d779b0d950605fb53 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xc3248a1bd9d72fa3da6e6ba701e58cbf818354eb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x6fd9d7ad17242c41f7131d257212c54a0e816691 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x14778860e937f509e651192a90589de711fb88a9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xdfa46478f9e5ea86d57387849598dbfb2e964b02 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x9b88d293b7a791e40d36a39765ffd5a1b9b5c349 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x3eb398fec5f7327c6b15099a9681d9568ded2e82 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x217d47011b23bb961eb6d93ca9945b7501a5bb11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xbfd5206962267c7b4b4a8b3d76ac2e1b2a5c4d5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x1cef2d62af4cd26673c7416957cc4ec619a696a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x9fd22a17b4a96da3f83797d122172c450381fb88 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xaddb6a0412de1ba0f936dcaeb8aaa24578dcf3b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x2791bca1f2de4661ed88a30c99a7a9449aa84174 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x7ceb23fd6bc0add59e62ac25578270cff1b9f619 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3c499c542cef5e3811e1192ce70d8cc03d5c3359 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc2132d05d31c914a87c6611c10748aeb04b58e8f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x61299774020da444af134c82fa83e3810b309991 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd6df932a45c0f255f85145f286ea0b292b21c90b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x2ad2934d5bfb7912304754479dd1f096d5c807da - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc3c7d422809852031b44ab29eec9f1eff2a58756 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x750e4c4984a9e0f12978ea6742bc1c5d248f40ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x111111517e4929d3dcbdfa7cce55d30d4b6bc4d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd0258a3fd00f38aa8090dfee343f10a9d4d30d3f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x430ef9263e76dae63c84292c3409d61c598e9682 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xb33eaad8d922b1083446dc23f610c2567fb5180f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xdc3326e71d45186f113a2f448984ca0e8d201995 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x311434160d7537be358930def317afb606c0d737 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe3f2b1b2229c0333ad17d03f179b87500e7c5e01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xac0f66379a6d7801d7726d5a943356a172549adb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf88332547c680f755481bf489d890426248bb275 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe5417af564e4bfda1c483642db72007871397896 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe261d618a959afffd53168cd07d12e37b26761db - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe0b52e49357fd4daf2c15e02058dce6bc0057db4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xbbba073c31bf03b8acf7c28ef0738decf3695683 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe238ecb42c424e877652ad82d8a939183a04c35f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3b56a704c01d650147ade2b8cee594066b3f9421 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x5fe2b58c013d7601147dcdd68c143a77499f5531 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x172370d5cd63279efa6d502dab29171933a610af - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x53df32548214f51821cf1fe4368109ac5ddea1ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xff76c0b48363a7c7307868a81548d340049b0023 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x6f8a06447ff6fcf75d803135a7de15ce88c1d4ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x50b728d8d964fd00c2d0aad81718b71311fef68a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3a58a54c066fdc0f2d55fc9c89f0415c92ebf3c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x03b54a6e9a984069379fae1a4fc4dbae93b3bccd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd93f7e271cb87c23aaa73edc008a79646d1f9912 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x200c234721b5e549c3693ccc93cf191f90dc2af9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x11cd37bb86f65419713f30673a480ea33c826872 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8a16d4bf8a0a716017e8d2262c4ac32927797a2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xa1c57f48f0deb89f569dfbe6e2b7f46d33606fd4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x190eb8a183d22a4bdf278c6791b152228857c033 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x235737dbb56e8517391473f7c964db31fa6ef280 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0b220b82f3ea3b7f6d9a1d8ab58930c064a2b5bf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8bff1bd27e2789fe390acabc379c380a83b68e84 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xb58458c52b6511dc723d7d6f3be8c36d7383b4a8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x323665443cef804a3b5206103304bd4872ea4253 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x2760e46d9bb43dafcbecaad1f64b93207f9f0ed7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x18ec0a6e18e5bc3784fdd3a3634b31245ab704f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x431d5dff03120afa4bdf332c61a6e1766ef37bdb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x6f7c932e7684666c9fd1d44527765433e01ff61d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xeee3371b89fc43ea970e908536fcddd975135d8a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe5b49820e5a1063f6f4ddf851327b5e8b2301048 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xaa3717090cddc9b227e49d0d84a28ac0a996e6ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x62a872d9977db171d9e213a5dc2b782e72ca0033 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x381caf412b45dac0f62fbeec89de306d3eabe384 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe0bceef36f3a6efdd5eebfacd591423f8549b9d5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x23d29d30e35c5e8d321e1dc9a8a61bfd846d4c5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x282d8efce846a88b159800bd4130ad77443fa1a1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x74dd45dd579cad749f9381d6227e7e02277c944b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x714db550b574b3e927af3d93e26127d15721d4c2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xfa68fb4628dff1028cfec22b4162fccd0d45efb6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe631dabef60c37a37d70d3b4f812871df663226f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xdb725f82818de83e99f1dac22a9b5b51d3d04dd4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3c59798620e5fec0ae6df1a19c6454094572ab92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0d0b8488222f7f83b23e365320a4021b12ead608 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xa380c0b01ad15c8cf6b46890bddab5f0868e87f3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8a953cfe442c5e8855cc6c61b1293fa648bae472 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x45c32fa6df82ead1e2ef74d17b76547eddfaff89 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x11cd72f7a4b699c67f225ca8abb20bc9f8db90c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0c9c7712c83b3c70e7c5e11100d33d9401bdf9dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x77a6f2e9a9e44fd5d5c3f9be9e52831fc1c3c0a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xbfc70507384047aa74c29cdc8c5cb88d0f7213ac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xfcb54da3f4193435184f3f647467e12b50754575 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9a6a40cdf21a0af417f1b815223fd92c85636c58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe111178a87a3bff0c8d18decba5798827539ae99 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x82617aa52dddf5ed9bb7b370ed777b3182a30fd1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x2ab0e9e4ee70fff1fb9d67031e44f6410170d00e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xa486c6bc102f409180ccb8a94ba045d39f8fc7cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc4a206a306f0db88f98a3591419bc14832536862 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf0059cc2b3e980065a906940fbce5f9db7ae40a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x16eccfdbb4ee1a85a33f3a9b21175cd7ae753db4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x553d3d295e0f695b9228246232edf400ed3560b5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x14af1f2f02dccb1e43402339099a05a5e363b83c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x7bdf330f423ea880ff95fc41a280fd5ecfd3d09f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe2aa7db6da1dae97c5f5c6914d285fbfcc32a128 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xb7b31a6bc18e48888545ce79e83e06003be70930 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1631244689ec1fecbdd22fb5916e920dfc9b8d30 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf6372cdb9c1d3674e83842e3800f2a62ac9f3c66 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x692ac1e363ae34b6b489148152b12e2785a3d8d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0266f4f08d82372cf0fcbccc0ff74309089c74d1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x7fbc10850cae055b27039af31bd258430e714c62 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xa3fa99a148fa48d14ed51d610c367c61876997f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9dbfc1cbf7a1e711503a29b4b5f9130ebeccac96 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x236aa50979d5f3de3bd1eeb40e81137f22ab794b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf86df9b91f002cfeb2aed0e6d05c4c4eaef7cf02 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4200000000000000000000000000000000000006 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6921b130d297cc43754afba22e5eac0fbf8db75b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5babfc2f240bc5de90eb7e19d789412db1dec402 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x532f27101965dd16442e59d40670faf5ebb142e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4ed4e862860bed51a9570b96d89af5e1b0efefed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xac1bd2486aaf3b5c0fc3fd868558b082a531b2b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0d97f261b1e88845184f678e2d1e7a98d9fd38de - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8129b94753f22ec4e62e2c4d099ffe6773969ebc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3f14920c99beb920afa163031c4e47a3e03b3e4a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x940181a94a35a4569e4529a3cdfb74e38fd98631 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3419875b4d3bca7f3fdda2db7a476a79fd31b4fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa067436db77ab18b1a315095e4b816791609897c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xafb89a09d82fbde58f18ac6437b3fc81724e4df6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x489fe42c267fe0366b16b0c39e7aeef977e841ef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xdc46c1e93b71ff9209a0f8076a9951569dc35855 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x91f45aa2bde7393e0af1cc674ffe75d746b93567 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x236aa50979d5f3de3bd1eeb40e81137f22ab794b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf6e932ca12afa26665dc4dde7e27be02a7c02e50 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x524d524b4c9366be706d3a90dcf70076ca037ae3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5b5dee44552546ecea05edea01dcd7be7aa6144a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2598c30330d5771ae9f983979209486ae26de875 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfa980ced6895ac314e7de34ef1bfae90a5add21b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x469fda1fb46fcb4befc0d8b994b516bd28c87003 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4e496c0256fb9d4cc7ba2fdf931bc9cbb7731660 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x27d2decb4bfc9c76f0309b8e88dec3a601fe25a8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbfd5206962267c7b4b4a8b3d76ac2e1b2a5c4d5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9e1028f5f1d5ede59748ffcee5532509976840e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3c3aa127e6ee3d2f2e432d0184dd36f2d2076b52 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xba5e6fa2f33f3955f0cef50c63dcc84861eab663 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x97c806e7665d3afd84a8fe1837921403d59f3dcc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8ee73c484a26e0a5df2ee2a4960b789967dd0415 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x00e57ec29ef2ba7df07ad10573011647b2366f6d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8f019931375454fe4ee353427eb94e2e0c9e0a8c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x93e6407554b2f02640ab806cd57bd83e848ec65d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x55d398326f99059ff775485246999027b3197955 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x2170ed0880ac9a755fd29b2688956bd959f933f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xfdc66a08b0d0dc44c17bbd471b88f49f50cdd20f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1d2f0da169ceb9fc7b3144628db156f3f6c60dbe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xe9e7cea3dedca5984780bafc599bd69add087d56 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xfa54ff1a158b5189ebba6ae130ced6bbd3aea76e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x570a5d26f7765ecb712c0924e4de545b89fd43df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x47c454ca6be2f6def6f32b638c80f91c9c3c5949 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xad86d0e9764ba90ddd68747d64bffbd79879a238 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xd691d9a68c887bdf34da8c36f63487333acfd103 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1294f4183763743c7c9519bec51773fb3acd78fd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xb04906e95ab5d797ada81508115611fee694c2b3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x111111111117dc0aa78b770fa6a738034120c302 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xcc42724c6683b7e57334c4e856f4c9965ed682bd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x90c97f71e18723b0cf0dfa30ee176ab653e89f40 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x2b72867c32cf673f7b02d208b26889fed353b1f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x031b41e504677879370e9dbcf937283a8691fa7f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1ce0c2827e2ef14d5c4f29a091d735a204794041 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xcf3bb6ac0f6d987a5727e2d15e39c2d6061d5bec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8ff795a6f4d97e7887c79bea79aba5cc76444adf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x2dff88a56767223a5529ea5960da7a3f5f766406 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x003d87d02a2a01e9e8a20f507c83e15dd83a33d1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x4b0f1812e5df2a09796481ff14017e6005508003 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xbf5140a22578168fd562dccf235e5d43a02ce9b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xca1c644704febf4ab81f85daca488d1623c28e63 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x51e72dd1f2628295cc2ef931cb64fdbdc3a0c599 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xbbca42c60b5290f2c48871a596492f93ff0ddc82 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x555296de6a86e72752e5c5dc091fe49713aa145c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0808bf94d57c905f1236212654268ef82e1e594e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8457ca5040ad67fdebbcc8edce889a335bc0fbfb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xcebef3df1f3c5bfd90fde603e71f31a53b11944d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x90ed8f1dc86388f14b64ba8fb4bbd23099f18240 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x9840652dc04fb9db2c43853633f0f62be6f00f98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xba2ae424d960c26247dd6c32edc70b295c744c43 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0782b6d8c4551b9760e74c0545a9bcd90bdc41e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xbe2b6c5e31f292009f495ddbda88e28391c9815e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8f0528ce5ef7b51152a59745befdd91d97091d2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xffeecbf8d7267757c2dc3d13d730e97e15bfdf7f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0eb3a705fc54725037cc9e008bdede697f62f335 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf21768ccbc73ea5b6fd3c687208a7c2def2d966e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0000028a2eb8346cd5c0267856ab7594b7a55308 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x76a797a59ba2c17726896976b7b3747bfd1d220f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xc79d1fd14f514cd713b5ca43d288a782ae53eab2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xad29abb318791d579433d831ed122afeaf29dcfe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x3203c9e46ca618c8c1ce5dc67e7e9d75f5da2377 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xdb021b1b247fe2f1fa57e0a87c748cc1e321f07f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x7083609fce4d1d8dc0c979aab8c869ea2c873402 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xc5f0f7b66764f6ec8c8dff7ba683102295e16409 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xe29142e14e52bdfbb8108076f66f49661f10ec10 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xb0d502e938ed5f4df2e681fe6e419ff29631d62b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x6730f7a6bbb7b9c8e60843948f7feb4b6a17b7f7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1613957159e9b0ac6c80e824f7eea748a32a0ae2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x471ece3750da237f93b8e339c536989b8978a438 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x765de816845861e75a25fca122bb6898b8b1282a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x66803fb87abd4aac3cbb3fad7c3aa01f6f3fb207 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0xd8763cba276a3738e6de85b4b3bf5fded6d6ca73 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x37f750b7cc259a2f741af45294f6a16572cf5cad - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0xd71ffd0940c920786ec4dbb5a12306669b5b81ef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0xe8537a3d056da446677b9e9d6c5db704eaab4787 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x4f604735c1cf31399c6e711d5962b2b3e0225ad3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x02de4766c272abc10bc88c220d214a26960a7e92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0xceba9300f2b948710d2653dd7b07f33a8b32118c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0xc16b81af351ba9e64c1a069e3ab18c244a1e3049 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x728f30fa2f100742c7949d1961804fa8e0b1387d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x41ea5d41eeacc2d5c4072260945118a13bb7ebce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf21661d0d1d76d3ecb8e1b9f1c923dbfffae4097 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb0ecc6ac0073c063dcfc026ccdc9039cae2998e1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x00f932f0fe257456b32deda4758922e56a4f4b42 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa4af354d466e8a68090dd9eb2cb7caf162f4c8c2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xba50933c268f567bdc86e1ac131be072c6b0b71a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd29da236dd4aac627346e1bba06a619e8c22d7c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1bfce574deff725a3f483c334b790e25c8fa9779 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9e18d5bab2fa94a6a95f509ecb38f8f68322abd3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbf5495efe5db9ce00f80364c8b423567e58d2110 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x065b4e5dfd50ac12a81722fd0a0de81d78ddf7fb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x57e114b691db790c35207b2e685d4a43181e6061 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0b7f0e51cd1739d6c96982d55ad8fa634dd43a9c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc56c7a0eaa804f854b536a5f3d5f49d2ec4b12b8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x594daad7d77592a2b97b725a7ad59d7e188b5bfa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8355dbe8b0e275abad27eb843f3eaf3fc855e525 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2a961d752eaa791cbff05991e4613290aec0d9ac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x38e68a37e401f7271568cecaac63c6b1e19130b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1131d427ecd794714ed00733ac0f851e904c8398 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1495bc9e44af1f8bcb62278d2bec4540cf0c05ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x808507121b80c02388fad14726482e061b8da827 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x44971abf0251958492fee97da3e5c5ada88b9185 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x320623b8e4ff03373931769a31fc52a4e78b5d70 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6e5970dbd6fc7eb1f29c6d2edf2bc4c36124c0c1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd40c688da9df74e03566eaf0a7c754ed98fbb8cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8afe4055ebc86bd2afb3940c0095c9aca511d852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9ce84f6a69986a83d92c324df10bc8e64771030f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbe4d9c8c638b5f0864017d7f6a04b66c42953847 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x68bbed6a47194eff1cf514b50ea91895597fc91e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x69420e3a3aa9e17dea102bb3a9b3b73dcddb9528 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7420b4b9a0110cdc71fb720908340c03f9bc03ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x03aa6298f1370642642415edc0db8b957783e8d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd533a949740bb3306d119cc777fa900ba034cd52 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf14dd7b286ce197019cba54b189d2b883e70f761 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa35923162c49cf95e6bf26623385eb431ad920d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8cefbeb2172a9382753de431a493e21ba9694004 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x120a3879da835a5af037bb2d1456bebd6b54d4ba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x69457a1c9ec492419344da01daf0df0e0369d5d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf6ce4be313ead51511215f1874c898239a331e37 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x73d7c860998ca3c01ce8c808f5577d94d545d1b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xeff49b0f56a97c7fd3b51f0ecd2ce999a7861420 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x236501327e701692a281934230af0b6be8df3353 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5026f006b85729a8b14553fae6af249ad16c9aab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x66761fa41377003622aee3c7675fc7b5c1c2fac5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9f9c8ec3534c3ce16f928381372bfbfbfb9f4d24 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd8c978de79e12728e38aa952a6cb4166f891790f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7122985656e38bdc0302db86685bb972b145bd3c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x582d872a1b094fc48f5de31d3b73f2d9be47def1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x504624040e0642921c2c266a9ac37cafbd8cda4e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc548e90589b166e1364de744e6d35d8748996fe8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4c11249814f11b9346808179cf06e71ac328c1b5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x423f4e6138e475d85cf7ea071ac92097ed631eea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8390a1da07e376ef7add4be859ba74fb83aa02d5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf94e7d0710709388bce3161c32b4eea56d3f91cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaa95f26e30001251fb905d264aa7b00ee9df6c18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2416092f143378750bb29b79ed961ab195cceea5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6c84a8f1c29108f47a79964b5fe888d4f4d0de40 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x71eeba415a523f5c952cc2f06361d5443545ad28 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x88a269df8fe7f53e590c561954c52fccc8ec0cfb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x429fed88f10285e61b12bdf00848315fbdfcc341 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb299751b088336e165da313c33e3195b8c6663a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf0a479c9c3378638ec603b8b6b0d75903902550b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb59c8912c83157a955f9d715e556257f432c35d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xba0dda8762c24da9487f5fa026a9b64b695a07ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc24a365a870821eb83fd216c9596edd89479d8d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xa586b3b80d7e3e8d439e25fbc16bc5bcee3e2c85 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xef04804e1e474d3f9b73184d7ef5d786f3fce930 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2e9a6df78e42a30712c10a9dc4b1c8656f8f2879 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x13a7dedb7169a17be92b0e3c7c2315b46f4772b3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1dd6b5f9281c6b4f043c02a83a46c2772024636c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf525e73bdeb4ac1b0e741af3ed8a8cbb43ab0756 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe4177c1400a8eee1799835dcde2489c6f0d5d616 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xed5740209fcf6974d6f3a5f11e295b5e468ac27c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe10d4a4255d2d35c9e23e2c4790e073046fbaf5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x10398abc267496e49106b07dd6be13364d10dc71 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x2218a117083f5b482b0bb821d27056ba9c04b1d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x395ae52bb17aef68c2888d941736a71dc6d4e125 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x9a601c5bb360811d96a23689066af316a30c3027 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xbac3368b5110f3a3dda8b5a0f7b66edb37c47afe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1d3c629ca5c1d0ab3bdf74600e81b4145615df8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe9c21de62c5c5d0ceacce2762bf655afdceb7ab3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x658cda444ac43b0a7da13d638700931319b64014 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3d2bd0e15829aa5c362a4144fdf4a1112fa29b5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3fb83a9a2c4408909c058b0bfe5b4823f54fafe2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x00e5646f60ac6fb446f621d146b6e1886f002905 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x12a4cebf81f8671faf1ab0acea4e3429e42869e7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9ff62d1fc52a907b6dcba8077c2ddca6e6a9d3e1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc61f39418cd27820b5d4e9ba4a7197eefaeb8b05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x15b7c0c907e4c6b9adaaaabc300c08991d6cea05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x7f67639ffc8c93dd558d452b8920b28815638c44 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x276c9cbaa4bdf57d7109a41e67bd09699536fa3d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x041fdf3f472d2c8a7ecc458fc3b7f543e6c57ef7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3c281a39944a2319aa653d81cfd93ca10983d234 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x96419929d7949d6a801a6909c145c8eef6a40431 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfea9dcdc9e23a9068bf557ad5b186675c61d33ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xdb6e0e5094a25a052ab6845a9f1e486b9a9b3dde - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcde172dc5ffc46d228838446c57c1227e0b82049 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xff0c532fdb8cd566ae169c1cb157ff2bdc83e105 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9a26f5433671751c3276a065f57e5a02d2817973 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3636a7734b669ce352e97780df361ce1f809c58c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x50c5725949a6f0c72e6c4a641f24049a917db0cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe3086852a4b125803c815a158249ae468a3254ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbeb0fd48c2ba0f1aacad2814605f09e08a96b94e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbc45647ea894030a4e9801ec03479739fa2485f0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x768be13e1680b5ebe0024c42c896e3db59ec0149 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x928a6a9fc62b2c94baf2992a6fba4715f5bb0066 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbf4db8b7a679f89ef38125d5f84dd1446af2ea3b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xed899bfdb28c8ad65307fa40f4acab113ae2e14c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1b6a569dd61edce3c383f6d565e2f79ec3a12980 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x76734b57dfe834f102fb61e1ebf844adf8dd931e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4621b7a9c75199271f773ebd9a499dbd165c3191 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xaf07d812d1dcec20bf741075bc18660738d226dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7f12d13b34f5f4f0a9449c16bcd42f0da47af200 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x55a6f6cb50db03259f6ab17979a4891313be2f45 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x968d6a288d7b024d5012c0b25d67a889e4e3ec19 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7a8a5012022bccbf3ea4b03cd2bb5583d915fb1a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcde90558fc317c69580deeaf3efc509428df9080 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0028e1e60167b48a938b785aa5292917e7eaca8b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x76e7447bafa3f0acafc9692629b1d1bc937ca15d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x15ac90165f8b45a80534228bdcb124a011f62fee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4045b33f339a3027af80013fb5451fdbb01a4492 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xddf98aad8180c3e368467782cd07ae2e3e8d36a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x698dc45e4f10966f6d1d98e3bfd7071d8144c233 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3c8665472ec5af30981b06b4e0143663ebedcc1e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x18a8bd1fe17a1bb9ffb39ecd83e9489cfd17a022 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xba0dda8762c24da9487f5fa026a9b64b695a07ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x13741c5df9ab03e7aa9fb3bf1f714551dd5a5f8a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xebff2db643cf955247339c8c6bcd8406308ca437 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfadb26be94c1f959f900bf88cd396b3e803481d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x52c2b317eb0bb61e650683d2f287f56c413e4cf6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x38d513ec43dda20f323f26c7bef74c5cf80b6477 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x33ad778e6c76237d843c52d7cafc972bb7cf8729 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x290814ad0fbd2b935f34d7b40306102313d4c63e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5e432eecd01c12ee7071ee9219c2477a347da192 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbdf5bafee1291eec45ae3aadac89be8152d4e673 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xff62ddfa80e513114c3a0bf4d6ffff1c1d17aadf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8c81b4c816d66d36c4bf348bdec01dbcbc70e987 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6b82297c6f1f9c3b1f501450d2ee7c37667ab70d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x42069babe14fb1802c5cb0f50bb9d2ad6fef55e2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x72499bddb67f4ca150e1f522ca82c87bc9fb18c8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0578d8a44db98b23bf096a382e016e29a5ce0ffe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8fe815417913a93ea99049fc0718ee1647a2a07c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7d12aeb5d96d221071d176980d23c213d88d9998 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb166e8b140d35d9d8226e40c09f757bac5a4d87d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8853f0c059c27527d33d02378e5e4f6d5afb574a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf3c052f2baab885c610a748eb01dfbb643ba835b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcd1cffa8ebc66f1a2cf7675b48ba955ffcb82d8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xde7a416ac821c77478340eebaa21b68297025ef3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2da56acb9ea78330f947bd57c54119debda7af71 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8972ab69d499b5537a31576725f0af8f67203d38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x88faea256f789f8dd50de54f9c807eef24f71b16 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x42069de48741db40aef864f8764432bbccbd0b69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9a27c6759a6de0f26ac41264f0856617dec6bc3f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfaa4f3bcfc87d791e9305951275e0f62a98bcb10 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfd9fa4f785331ce88b5af8994a047ba087c705d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x21eceaf3bf88ef0797e3927d855ca5bb569a47fc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7d9ce55d54ff3feddb611fc63ff63ec01f26d15f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4229c271c19ca5f319fb67b4bc8a40761a6d6299 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x80f45eacf6537498ecc660e4e4a2d2f99e195cf4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1a475d06d967aeb686c98de80d079d72097aeacf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4fb9b20dafe45d91ae287f2e07b2e79709308178 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd3741ac9b3f280b0819191e4b30be4ecd990771e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x09579452bc3872727a5d105f342645792bb8a82b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8a24d7260cd02d3dfd8eefb66bc17ad4b17d494c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd88611a629265c9af294ffdd2e7fa4546612273e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9a86980d3625b4a6e69d8a4606d51cbc019e2002 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1c7a460413dd4e964f96d8dfc56e7223ce88cd85 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x776aaef8d8760129a0398cf8674ee28cefc0eab9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x28e29ec91db66733a94ee8e3b86a6199117baf99 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb9898511bd2bad8bfc23eba641ef97a08f27e730 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x76baa16ff15d61d32e6b3576c3a8c83a25c2f180 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2816a491dd0b7a88d84cbded842a618e59016888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa7ea9d5d4d4c7cf7dbde5871e6d108603c6942a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x586e10db93630a4d2da6c6a34ba715305b556f04 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf486ad071f3bee968384d2e39e2d8af0fcf6fd46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x76d36d44dc4595e8d2eb3ad745f175eda134284f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1fa4a73a3f0133f0025378af00236f3abdee5d63 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xb3ed0a426155b79b898849803e3b36552f7ed507 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0ef4a107b48163ab4b57fca36e1352151a587be4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x62694d43ccb9b64e76e38385d15e325c7712a735 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xa2b726b1145a4773f68593cf171187d8ebe4d495 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf275e1ac303a4c9d987a2c48b8e555a77fec3f1c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x11a31b833d43853f8869c9eec17f60e3b4d2a753 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x48065fbbe25f71c9282ddf5e1cd6d6a887483d5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbadff0ef41d2a68f22de21eabca8a59aaf495cf0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1fdd61ef9a5c31b9a2abc7d39c139c779e8412af - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4ade2b180f65ed752b6f1296d0418ad21eb578c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0c5cb676e38d6973837b9496f6524835208145a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb69753c06bb5c366be51e73bfc0cc2e3dc07e371 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8143182a775c54578c8b7b3ef77982498866945d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x76e222b07c53d28b89b0bac18602810fc22b49a8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x18aaa7115705e8be94bffebde57af9bfc265b998 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7d8146cf21e8d7cbe46054e01588207b51198729 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfe0c30065b384f05761f15d0cc899d4f9f9cc0eb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1ce270557c1f68cfb577b856766310bf8b47fd9c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x793a5d8b30aab326f83d20a9370c827fea8fdc51 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xff836a5821e69066c87e268bc51b849fab94240c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf4d2888d29d722226fafa5d9b24f9164c092421e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8ed97a637a790be1feff5e888d43629dc05408f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x31c8eacbffdd875c74b94b077895bd78cf1e64a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc55126051b22ebb829d00368f4b12bde432de5da - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe0f63a424a4439cbe457d80e4f4b51ad25b2c56c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8881562783028f5c1bcb985d2283d5e170d88888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x67466be17df832165f8c80a5a120ccc652bd7e69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd939212f16560447ed82ce46ca40a63db62419b5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x88417754ff7062c10f4e3a4ab7e9f9d9cbda6023 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5afe3855358e112b5647b952709e6165e1c1eeee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x02e7f808990638e9e67e1f00313037ede2362361 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd2bdaaf2b9cc6981fd273dcb7c04023bfbe0a7fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x112b08621e27e10773ec95d250604a041f36c582 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x32b053f2cba79f80ada5078cb6b305da92bde6e1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5ac34c53a04b9aaa0bf047e7291fb4e8a48f2a18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x26ebb8213fb8d66156f1af8908d43f7e3e367c1d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe3b9cfb8ea8a4f1279fbc28d3e15b4d2d86f18a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8207c1ffc5b6804f6024322ccf34f29c3541ae26 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x255f1b39172f65dc6406b8bee8b08155c45fe1b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x092baadb7def4c3981454dd9c0a0d7ff07bcfc86 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x53bcf6698c911b2a7409a740eacddb901fc2a2c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2ac2b254bc18cd4999f64773a966e4f4869c34ee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x17fc002b466eec40dae837fc4be5c67993ddbd6f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc8a4eea31e9b6b61c406df013dd4fec76f21e279 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x498bf2b1e120fed3ad3d42ea2165e9b73f99c1e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe4dddfe67e7164b0fe14e218d80dc4c08edc01cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7c8a1a80fdd00c9cccd6ebd573e9ecb49bfa2a59 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1debd73e752beaf79865fd6446b0c970eae7732f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xaf5db6e1cc585ca312e8c8f7c499033590cf5c98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x65559aa14915a70190438ef90104769e5e890a00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x7fb688ccf682d58f86d7e38e03f9d22e7705448b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x73cb180bf0521828d8849bc8cf2b920918e23032 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x2e3d870790dc77a83dd1d18184acc7439a53f475 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xa00e3a3511aac35ca78530c85007afcd31753819 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x528cdc92eab044e1e39fe43b9514bfdab4412b98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x4f604735c1cf31399c6e711d5962b2b3e0225ad3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1c954e8fe737f99f68fa1ccda3e51ebdb291948c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf50d05a1402d0adafa880d36050736f9f6ee7dee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xab0b2ddb9c7e440fac8e140a89c0dbcbf2d7bbff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8bc3ec2e7973e64be582a90b08cadd13457160fe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x64060ab139feaae7f06ca4e63189d86adeb51691 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x5ec03c1f7fa7ff05ec476d19e34a22eddb48acdc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9627a3d6872be48410fcece9b1ddd344bf08c53e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1ed02954d60ba14e26c230eec40cbac55fa3aeea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8d3419b9a18651f3926a205ee0b1acea1e7192de - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb56d0839998fd79efcd15c27cf966250aa58d6d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x81f91fe59ee415735d59bd5be5cca91a0ea4fa69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x87c211144b1d9bdaa5a791b8099ea4123dc31d21 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf4210f93bc68d63df3286c73eba08c6414f40c0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xece7b98bd817ee5b1f2f536daf34d0b6af8bb542 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4c96a67b0577358894407af7bc3158fc1dffbeb5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x70737489dfdf1a29b7584d40500d3561bd4fe196 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x39353a32eceafe4979a8606512c046c3b6398cc4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x92fb1b7d9730b2f1bd4e2e91368c1eb6fdd2a009 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x174e33ef2effa0a4893d97dda5db4044cc7993a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfdc944fb59201fb163596ee5e209ebc8fa4dcdc5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x388e543a5a491e7b42e3fbcd127dd6812ea02d0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x56a38e7216304108e841579041249feb236c887b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1804e3db872eed4141e482ff74c56862f2791103 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9de16c805a3227b9b92e39a446f9d56cf59fe640 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb8d98a102b0079b69ffbc760c8d857a31653e56e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5d6812722c3693078e4a0dbe3e9affc27a0b2768 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x255f1b39172f65dc6406b8bee8b08155c45fe1b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc2fe011c3885277c7f0e7ffd45ff90cadc8ecd12 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc1ffaef4e7d553bbaf13926e258a1a555a363a07 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4e73420dcc85702ea134d91a262c8ffc0a72aa70 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xecaf81eb42cd30014eb44130b89bcd6d4ad98b92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x4eae52907dba9c370e9ee99f0ce810602a4f2c63 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x25d887ce7a35172c62febfd67a1856f20faebb00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x382ea807a61a418479318efd96f1efbc5c1f2c21 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6468e79a80c0eab0f9a2b574c8d5bc374af59414 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3106a0a076bedae847652f42ef07fd58589e001f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd015422879a1308ba557510345e944b912b9ab73 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5de8ab7e27f6e7a1fff3e5b337584aa43961beef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcf078da6e85389de507ceede0e3d217e457b9d49 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1bbf25e71ec48b84d773809b4ba55b6f4be946fb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7039cd6d7966672f194e8139074c3d5c4e6dcf65 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x943af17c37207c9d7a27d12cb5055542a0b7afa8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6d68015171eaa7af9a5a0a103664cf1e506ff699 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6942806d1b2d5886d95ce2f04314ece8eb825833 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x949d48eca67b17269629c7194f4b727d4ef9e5d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9361adf2b72f413d96f81ff40d794b47ce13b331 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3bb1be077f3f96722ae92ec985ab37fd0a0c4c51 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xdbb7a34bf10169d6d2d0d02a6cbb436cf4381bfa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x66bff695f3b16a824869a8018a3a6e3685241269 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x85d19fb57ca7da715695fcf347ca2169144523a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x069d89974f4edabde69450f9cf5cf7d8cbd2568d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0fe13ffe64b28a172c58505e24c0c111d149bd47 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x111111111117dc0aa78b770fa6a738034120c302 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xdc7ac5d5d4a9c3b5d8f3183058a92776dc12f4f3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x482702745260ffd69fc19943f70cffe2cacd70e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc555d625828c4527d477e595ff1dd5801b4a600e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9eec1a4814323a7396c938bc86aec46b97f1bd82 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x87d73e916d7057945c9bcd8cdd94e42a6f47f776 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x067def80d66fb69c276e53b641f37ff7525162f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xdd157bd06c1840fa886da18a138c983a7d74c1d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe80772eaf6e2e18b651f160bc9158b2a5cafca65 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb6093b61544572ab42a0e43af08abafd41bf25a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x35ca1e5a9b1c09fa542fa18d1ba4d61c8edff852 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x83e60b9f7f4db5cdb0877659b1740e73c662c55b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4d01397994aa636bdcc65c9e8024bc497498c3bb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc3abc47863524ced8daf3ef98d74dd881e131c38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4d15a3a2286d883af0aa1b3f21367843fac63e07 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xfb7f8a2c0526d01bfb00192781b7a7761841b16c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3809dcdd5dde24b37abe64a5a339784c3323c44f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x85955046df4668e1dd369d2de9f3aeb98dd2a369 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x554cd6bdd03214b10aafa3e0d4d42de0c5d2937b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x4318cb63a2b8edf2de971e2f17f77097e499459d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xab9cb20a28f97e189ca0b666b8087803ad636b3c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x6a8ec2d9bfbdd20a7f5a4e89d640f7e7ceba4499 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0169ec1f8f639b32eec6d923e24c2a2ff45b9dd6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe161be4a74ab8fa8706a2d03e67c02318d0a0ad6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4d58608eff50b691a3b76189af2a7a123df1e9ba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x420b0fa3de2efcf2b2fd04152eb1df36a09717cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1cd38856ee0fdfd65c757e530e3b1de3061008d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfad8cb754230dbfd249db0e8eccb5142dd675a0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xda761a290e01c69325d12d82ac402e5a73d62e81 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xafb5d4d474693e68df500c9c682e6a2841f9661a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0b3e328455c4059eeb9e3f84b5543f74e24e7e1b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfc5462143a3178cf044e97c491f6bcb5e38f173e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xed1978d01d4a8a9d6a43ac79403d5b8dfbed739b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xba71cb8ef2d59de7399745793657838829e0b147 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x10c1b6f768e13c624a4a23337f1a5ba5c9be0e4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1b1514c76c54ce8807d7fdedf85c664eee734ece - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x58cd93c4a91c3940109fa27d700f5013b18b5dc2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xea6f7e7e0f46a9e0f4e2048eb129d879f609d632 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x30d19fb77c3ee5cfa97f73d72c6a1e509fa06aef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xe2dca969624795985f2f083bcd0b674337ba130a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xbb7d61d2511fd2e63f02178ca9b663458af9fc63 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x59f4f336bf3d0c49dbfba4a74ebd2a6ace40539a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x62d0a8458ed7719fdaf978fe5929c6d342b0bfce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb8fda5aee55120247f16225feff266dfdb381d4c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xca530408c3e552b020a2300debc7bd18820fb42f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3ffeea07a27fab7ad1df5297fa75e77a43cb5790 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcfeb09c3c5f0f78ad72166d55f9e6e9a60e96eec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x467bccd9d29f223bce8043b84e8c8b282827790f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2077d81d0c5258230d5a195233941547cb5f0989 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa0bbbe391b0d0957f1d013381b643041d2ca4022 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd1b89856d82f978d049116eba8b7f9df2f342ff3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x62f03b52c377fea3eb71d451a95ad86c818755d1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3927fb89f34bbee63351a6340558eebf51a19fb8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xacd2c239012d17beb128b0944d49015104113650 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x86b69f38bea3e02f68ff88534bc61ec60e772b19 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6873c95307e13beb58fb8fcddf9a99667655c9e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x18084fba666a33d37592fa2633fd49a74dd93a88 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6e79b51959cf968d87826592f46f819f92466615 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x80ee5c641a8ffc607545219a3856562f56427fe9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0414d8c87b271266a5864329fb4932bbe19c0c49 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf57e7e7c23978c3caec3c3548e3d615c346e79ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1c986661170c1834db49c3830130d4038eeeb866 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9ed7e4b1bff939ad473da5e7a218c771d1569456 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7f9a7db853ca816b9a138aee3380ef34c437dee0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x371c7ec6d8039ff7933a2aa28eb827ffe1f52f07 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb1bc21f748ae2be95674876710bc6d78235480e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xadf5dd3e51bf28ab4f07e684ecf5d00691818790 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x1eba7a6a72c894026cd654ac5cdcf83a46445b08 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x38022a157b95c52d43abcac9bd09f028a1079105 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd2507e7b5794179380673870d88b22f94da6abe0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc708d6f2153933daa50b2d0758955be0a93a8fec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0052074d3eb1429f39e5ea529b54a650c21f5aa4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x4e78011ce80ee02d2c3e649fb657e45898257815 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x7583feddbcefa813dc18259940f76a02710a8905 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe78aee6ccb05471a69677fb74da80f5d251c042b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x04f177fcacf6fb4d2f95d41d7d3fee8e565ca1d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xa6da8c8999c094432c77e7d318951d34019af24b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6d3b8c76c5396642960243febf736c6be8b60562 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7cf7132ede0ca592a236b6198a681bb7b42dd5ae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3afeae00a594fbf2e4049f924e3c6ac93296b6e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0a93a7be7e7e426fc046e204c44d6b03a302b631 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc9b6ef062fab19d3f1eabc36b1f2e852af1acd18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1754e5aadce9567a95f545b146a616ce34eead53 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xdb173587d459ddb1b9b0f2d6d88febef039304a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x10a7a84c91988138f8dbbc82a23b02c8639e2552 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x92af6f53febd6b4c6f5293840b6076a1b82c4bc2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xeb9e49fb4c33d9f6aefb1b03f9133435e24c0ec6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1b2c141479757b8643a519be4692904088d860b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4d25e94291fe8dcfbfa572cbb2aaa7b755087c91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8e0e798966382e53bfb145d474254cbe065c17dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4b6f82a4ed0b9e3767f53309b87819a78d041a7f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x004aa1586011f3454f487eac8d0d5c647d646c69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x741777f6b6d8145041f73a0bddd35ae81f55a40f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xc6c58f600917de512cd02d2b6ed595ab54b4c30f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x03aa6298f1370642642415edc0db8b957783e8d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x3ee2200efb3400fabb9aacf31297cbdd1d435d47 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xa697e272a73744b343528c3bc4702f2565b2f422 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x301af3eff0c904dc5ddd06faa808f653474f7fcc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x776f9987d9deed90eed791cbd824d971fd5ccf09 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf7de7e8a6bd59ed41a4b5fe50278b3b7f31384df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x19e6bfc1a6e4b042fb20531244d47e252445df01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x4338665cbb7b2485a8855a139b75d5e34ab0db94 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x2940566eb50f15129238f4dc599adc4f742d7d8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xbb73bb2505ac4643d5c0a99c2a1f34b3dfd09d11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x4ea98c1999575aaadfb38237dd015c5e773f75a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x1d18d0386f51ab03e7e84e71bda1681eba865f1f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x57b96d4af698605563a4653d882635da59bf11af - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd33526068d116ce69f19a9ee46f0bd304f21a51f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2a5fa016ffb20c70e2ef36058c08547f344677aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbe0ed4138121ecfc5c0e56b40517da27e6c5226b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9fd9278f04f01c6a39a9d1c1cd79f7782c6ade08 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x054c9d4c6f4ea4e14391addd1812106c97d05690 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7613c48e0cd50e42dd9bf0f6c235063145f6f8dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x614da3b37b6f66f7ce69b4bbbcf9a55ce6168707 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x069e4aa272d17d9625aa3b6f863c7ef6cfb96713 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x24da31e7bb182cb2cabfef1d88db19c2ae1f5572 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7d4a23832fad83258b32ce4fd3109ceef4332af4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb58e61c3098d85632df34eecfb899a1ed80921cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x67c4d14861f9c975d004cfb3ac305bee673e996e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x69babe9811cc86dcfc3b8f9a14de6470dd18eda4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x32f0d04b48427a14fb3cbc73db869e691a9fec6f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4cff49d0a19ed6ff845a9122fa912abcfb1f68a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x51cb253744189f11241becb29bedd3f1b5384fdb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcf4c91ecafc43c9f382db723ba20b82efa852821 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6968676661ac9851c38907bdfcc22d5dd77b564d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0d438f3b5175bebc262bf23753c1e53d03432bde - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb98d4c97425d9908e66e53a6fdf673acca0be986 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x68a47fe1cf42eba4a030a10cd4d6a1031ca3ca0a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8a370c951f34e295b2655b47bb0985dd08d8f718 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x525574c899a7c877a11865339e57376092168258 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd9a442856c234a39a81a089c06451ebaa4306a72 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1c43d05be7e5b54d506e3ddb6f0305e8a66cd04e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb766039cc6db368759c1e56b79affe831d0cc507 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x18c14c2d707b2212e17d1579789fc06010cfca23 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe0ee18eacafddaeb38f8907c74347c44385578ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x56659245931cb6920e39c189d2a0e7dd0da2d57b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xb6a5ae40e79891e4deadad06c8a7ca47396df21c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x04565fe9aa3ae571ada8e1bebf8282c4e5247b2a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf8a99f2bf2ce5bb6ce4aafcf070d8723bc904aa2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3b9728bd65ca2c11a817ce39a6e91808cceef6fd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6797b6244fa75f2e78cdffc3a4eb169332b730cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe2c86869216ac578bd62a4b8313770d9ee359a05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x47b464edb8dc9bc67b5cd4c9310bb87b773845bd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x28a730de97dc62a8c88363e0b1049056f1274a70 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xba5ede8d98ab88cea9f0d69918dde28dc23c2553 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8319767a7b602f88e376368dca1b92d38869b9b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x461ee40928677644b8195662ab91bcdaae6ef105 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x24569d33653c404f90af10a2b98d6e0030d3d267 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x22222bd682745cf032006394750739684e45a5f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9124577428c5bd73ad7636cbc5014081384f29d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xaa6cccdce193698d33deb9ffd4be74eaa74c4898 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe095780ba2a64a4efa7a74830f0b71656f0b0ad4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb59c8912c83157a955f9d715e556257f432c35d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7771450ece9c61430953d2646f995e33a06c91f5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc48823ec67720a04a9dfd8c7d109b2c3d6622094 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x9ec02756a559700d8d9e79ece56809f7bcc5dc27 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3593d125a4f7849a1b059e64f4517a86dd60c95d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6985884c4392d348587b19cb9eaaf157f13271cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa045fe936e26e1e1e1fb27c1f2ae3643acde0171 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbeef698bd78139829e540622d5863e723e8715f1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x426a688ee72811773eb64f5717a32981b56f10c1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x873259322be8e50d80a4b868d186cc5ab148543a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x661c70333aa1850ccdbae82776bb436a0fcfeefb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0a2c375553e6965b42c135bb8b15a8914b08de0c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6fba952443be1de22232c824eb8d976b426b3c38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1abaea1f7c830bd89acc67ec4af516284b1bc33c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb60fdf036f2ad584f79525b5da76c5c531283a1b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5a3e6a77ba2f983ec0d371ea3b475f8bc0811ad5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x55296f69f40ea6d20e478533c15a6b08b654e758 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1a7e4e63778b4f12a199c062f3efdd288afcbce8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x45804880de22913dafe09f4980848ece6ecbaf78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe5018913f2fdf33971864804ddb5fca25c539032 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6985884c4392d348587b19cb9eaaf157f13271cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x2c650dab03a59332e2e0c0c4a7f726913e5028c1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9aee3c99934c88832399d6c6e08ad802112ebeab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x439c0cf1038f8002a4cad489b427e217ba4b42ad - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x6985884c4392d348587b19cb9eaaf157f13271cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x6985884c4392d348587b19cb9eaaf157f13271cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6985884c4392d348587b19cb9eaaf157f13271cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb79dd08ea68a908a97220c76d19a6aa9cbde4376 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4b61e2f1bbdee6d746209a693156952936f1702c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7480527815ccae421400da01e052b120cc4255e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7466de7bb8b5e41ee572f4167de6be782a7fa75d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x298d411511a05dc1b559ed8f79c56bee06687b14 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8e16d46cb2da01cdd49601ec73d7b0344969ae33 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x18dd5b087bca9920562aff7a0199b96b9230438b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x37f0c2915cecc7e977183b8543fc0864d03e064c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x37f24b26bcefbfac7f261b97f8036da98f81a299 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xacb5b33ce55ba7729e38b2b59677e71c0112f0d9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x6985884c4392d348587b19cb9eaaf157f13271cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xc71b5f631354be6853efe9c3ab6b9590f8302e81 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7e744bbb1a49a44dfcc795014a4ba618e418fbbe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0c04ff41b11065eed8c9eda4d461ba6611591395 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x636bd98fc13908e475f56d8a38a6e03616ec5563 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x590246bfbf89b113d8ac36faeea12b7589f7fe5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x80034f803afb1c6864e3ca481ef1362c54d094b9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x73fbd93bfda83b111ddc092aa3a4ca77fd30d380 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xff33a6b3dc0127862eedd3978609404b22298a54 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc770eefad204b5180df6a14ee197d99d808ee52d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa0385e7283c83e2871e9af49eec0966088421ddd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb2617246d0c6c0087f18703d576831899ca94f01 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xba386a4ca26b85fd057ab1ef86e3dc7bdeb5ce70 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9ebb0895bd9c7c9dfab0d8d877c66ba613ac98ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd12a99dbc40036cec6f1b776dccd2d36f5953b94 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8ab2ff0116a279a99950c66a12298962d152b83c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x420698cfdeddea6bc78d59bc17798113ad278f9d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd8e8438cf7beed13cfabc82f300fb6573962c9e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb1c9d42fa4ba691efe21656a7e6953d999b990c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xdadeca1167fe47499e53eb50f261103630974905 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xa05245ade25cc1063ee50cf7c083b4524c1c4302 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x4fafad147c8cd0e52f83830484d164e960bdc6c3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4dd9077269dd08899f2a9e73507125962b5bc87f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8931ee05ec111325c1700b68e5ef7b887e00661d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x26f1bb40ea88b46ceb21557dc0ffac7b7c0ad40f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x642e993fa91ffe9fb24d39a8eb0e0663145f8e92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0c41f1fc9022feb69af6dc666abfe73c9ffda7ce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf7ccb8a6e3400eb8eb0c47619134f7516e025215 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2416092f143378750bb29b79ed961ab195cceea5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf0268c5f9aa95baf5c25d646aabb900ac12f0800 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0c067fc190cde145b0c537765a78d4e19873a5cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbe5614875952b1683cb0a2c20e6509be46d353a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x87a0233a8cb4392ec3eb8fa467817fc0b6a326dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xdfbea88c4842d30c26669602888d746d30f9d60d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x80b3455e1db60b4cba46aba12e8b1e256dd64979 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x747747e47a48c669be384e0dfb248eee6ba04039 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x50e85c754929840b58614f48e29c64bc78c58345 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x02f92800f57bcd74066f5709f1daa1a4302df875 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x967da4048cd07ab37855c090aaf366e4ce1b9f48 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x729031b3995538ddf6b6bce6e68d5d6fdeb3ccb5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x97a9a15168c22b3c137e6381037e1499c8ad0978 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5faa989af96af85384b8a938c2ede4a7378d9875 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4691937a7508860f876c9c0a2a617e7d9e945d4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x037a54aab062628c9bbae1fdb1583c195585fe41 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xcb8b5cd20bdcaea9a010ac1f8d835824f5c87a04 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xdfb8be6f8c87f74295a87de951974362cedcfa30 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x354a6da3fcde098f8389cad84b0182725c6c91de - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3f56e0c36d275367b8c502090edf38289b3dea0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6f9590958ce2beaf9c92a3a8fca6d1ddf310e052 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x3e5d9d8a63cc8a88748f229999cf59487e90721e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xecc68d0451e20292406967fe7c04280e5238ac7d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf1c1a3c2481a3a8a3f173a9ab5ade275292a6fa3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xb5e0cfe1b4db501ac003b740665bf43192cc7853 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xffa188493c15dfaf2c206c97d8633377847b6a52 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xb5c064f955d8e7f38fe0460c556a72987494ee17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x4f604735c1cf31399c6e711d5962b2b3e0225ad3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf0949dd87d2531d665010d6274f06a357669457a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x14e5386f47466a463f85d151653e1736c0c50fc3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xadac33f543267c4d59a8c299cf804c303bc3e4ac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcfa3ef56d303ae4faaba0592388f19d7c3399fb4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x67ce18961c3269ca03c2e5632f1938cc53e614a1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x48164ea5df090e80a0eaee1147e466ea28669221 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3054e8f8fba3055a42e5f5228a2a4e2ab1326933 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x42069d11a2cc72388a2e06210921e839cfbd3280 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x74ff3cbf86f95fea386f79633d7bc4460d415f34 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2d6a3893966dda77749cc7e4003ab15f5cfa3cc1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x51b75da3da2e413ea1b8ed3eb078dc712304761c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8ad5b9007556749de59e088c88801a3aaa87134b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbd97693278f1948c59f65f130fd87e7ff7c61d11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3992b27da26848c2b19cea6fd25ad5568b68ab98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x34980c35353a8d7b1a1ba02e02e387a8383e004a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xdebd6e2da378784a69dc6ec99fe254223b312287 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x456a3d042c0dbd3db53d5489e98dfb038553b0d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x9995cc8f20db5896943afc8ee0ba463259c931ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x30d20208d987713f46dfd34ef128bb16c404d10f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x19848077f45356b21164c412eff3d3e4ff6ebc31 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x53206bf5b6b8872c1bb0b3c533e06fde2f7e22e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x07ddacf367f0d40bd68b4b80b4709a37bdc9f847 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbdbe9f26918918bd3f43a0219d54e5fda9ce1bb3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb9d09bc374577dac1ab853de412a903408204ea8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe72b141df173b999ae7c1adcbf60cc9833ce56a8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x214549b0317564de15770561221433fb3e8c995c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc82e3db60a52cf7529253b4ec688f631aad9e7c2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf3dcbc6d72a4e1892f7917b7c43b74131df8480e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x62e3b3c557c792c4a70765b3cdb5b56b1879f82d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2598c30330d5771ae9f983979209486ae26de875 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd4f4d0a10bcae123bb6655e8fe93a30d01eebd04 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xa0995d43901551601060447f9abf93ebc277cec2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x40379a439d4f6795b6fc9aa5687db461677a2dba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x433cde5a82b5e0658da3543b47a375dffd126eb6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x619c4bbbd65f836b78b36cbe781513861d57f39d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1e0bb24ed6c806c01ef2f880a4b91adb90099ea7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0dd7913197bfb6d2b1f03f9772ced06298f1a644 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfbb75a59193a3525a8825bebe7d4b56899e2f7e1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc3de830ea07524a0761646a6a4e4be0e114a3c83 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3792dbdd07e87413247df995e692806aa13d3299 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x527856315a4bcd2f428ea7fa05ea251f7e96a50a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x292fcdd1b104de5a00250febba9bc6a5092a0076 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd749b369d361396286f8cc28a99dd3425ac05619 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfe3e6a25e6b192a42a44ecddcd13796471735acf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa1faa113cbe53436df28ff0aee54275c13b40975 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8802269d1283cdb2a5a329649e5cb4cdcee91ab6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0000bdaa645097ef80f9d475f341d0d107a45b3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x683a4ac99e65200921f556a19dadf4b0214b5938 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x36c7188d64c44301272db3293899507eabb8ed43 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8a2279d4a90b6fe1c4b30fa660cc9f926797baa2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf418588522d5dd018b425e472991e52ebbeeeeee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6135177a17e02658df99a07a2841464deb5b8589 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcf91b70017eabde82c9671e30e5502d312ea6eb2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x45080a6531d671ddff20db42f93792a489685e32 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x790814cd782983fab4d7b92cf155187a865d9f18 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9e6be44cc1236eef7e1f197418592d363bedcd5a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x69ee720c120ec7c9c52a625c04414459b3185f23 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x408e41876cccdc0f92210600ef50372656052a38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5cf04716ba20127f1e2297addcf4b5035000c9eb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8290333cef9e6d528dd5618fb97a76f268f3edd4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1929761e87667283f087ea9ab8370c174681b4e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x888888848b652b3e3a0f34c96e00eec0f3a23f72 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf944e35f95e819e752f3ccb5faf40957d311e8c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1f70300bce8c2302780bd0a153ebb75b8ca7efcb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3de81ce90f5a27c5e6a5adb04b54aba488a6d14e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc87b37a581ec3257b734886d9d3a581f5a9d056c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1a6b3a62391eccaaa992ade44cd4afe6bec8cff1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x65c936f008bc34fe819bce9fa5afd9dc2d49977f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x07d65c18cecba423298c0aeb5d2beded4dfd5736 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x51fc0f6660482ea73330e414efd7808811a57fa2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xcbe94d75ec713b7ead84f55620dc3174beeb1cfe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd3144ff5f388d36c0a445686c08540296d8b209b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x433e39ce74aef8f409182541269e417ad9b56011 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb1a03eda10342529bbf8eb700a06c60441fef25d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6b9bb36519538e0c073894e964e90172e1c0b41f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x689644b86075ed61c647596862c7403e1c474dbf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9a6d24c02ec35ad970287ee8296d4d6552a31dbe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x506beb7965fc7053059006c7ab4c62c02c2d989f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x31b28012f61fc3600e1c076bafc9fd997fb2da90 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd7d919ea0c33a97ad6e7bd4f510498e2ec98cb78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xef553b6914dbd17567393f7e55fbd773fff7d0cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe642657e4f43e6dcf0bd73ef24008394574dee28 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf8b1b47aa748f5c7b5d0e80c726a843913eb573a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd064c53f043d5aee2ac9503b13ee012bf2def1d0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfc60aa1ffca50ce08b3cdec9626c0bb9e9b09bec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x82c8f48ac694841360de84d649a0d48d239b61f8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7d89e05c0b93b24b5cb23a073e60d008fed1acf9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7546e0d4d947a15f914e33de6616ffed826f45ef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x9a5350edf28c1f93bb36d6e94b5c425fde8e222d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xaa076b62efc6f357882e07665157a271ab46a063 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6a6aa13393b7d1100c00a57c76c39e8b6c835041 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x07040971246a73ebda9cf29ea1306bb47c7c4e76 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6df0e641fc9847c0c6fde39be6253045440c14d3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2b640a99991dea2916205ecdc9f9c58f80017ed8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x38e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x42069cc15f5befb510430d22ff1c9a1b3ae22cfe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x40d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x89fd2d8fd8d937f55c89b7da3ceed44fa27e4a81 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x76bc677d444f1e9d57daf5187ee2b7dc852745ae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa0084063ea01d5f09e56ef3ff6232a9e18b0bacd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4abd5745f326932b1b673bfa592a20d7bb6bc455 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe53ec727dbdeb9e2d5456c3be40cff031ab40a55 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf43f21384d03b5cbbddd58d2de64071e4ce76ab0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x33349b282065b0284d756f0577fb39c158f935e6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x33c88d4cac6ac34f77020915a2a88cd0417dc069 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xdce765f021410b3266aa0053c93cb4535f1e12e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb50a8e92cb9782c9b8f3c88e4ee8a1d0aa2221d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x0a84edf70f30325151631ce7a61307d1f4d619a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc11158c5da9db1d553ed28f0c2ba1cbedd42cfcb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xb0b195aefa3650a6908f15cdac7d92f8a5791b0b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xdc4f4ed9872571d5ec8986a502a0d88f3a175f1e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9beec80e62aa257ced8b0edd8692f79ee8783777 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf95e1c0a67492720ca22842122fe7fa63d5519e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xca8e8d244f0d219a6fc9e4793c635cea98d0399c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6a4f69da1e2fb2a9b11d1aad60d03163fe567732 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0718f45bbf4781ce891e4e18182f025725f0fc95 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x132bbda4a40d4d6288be49b637ec2c113b5d7600 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9aaae745cf2830fb8ddc6248b17436dc3a5e701c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x24fcfc492c1393274b6bcd568ac9e225bec93584 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x21fd16cd0ef24a49d28429921e335bb0c1bfadb3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa469b7ee9ee773642b3e93e842e5d9b5baa10067 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8c19f7854b27758ddffdcdc8908f22bf55e00736 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf2ae0038696774d65e67892c9d301c5f2cbbda58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6bc40d4099f9057b23af309c08d935b890d7adc0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xee2a03aa6dacf51c18679c516ad5283d8e7c2637 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7f911119435d8ded9f018194b4b6661331379a3d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x777be1c6075c20184c4fd76344b7b0b7c858fe6b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x812ba41e071c7b7fa4ebcfb62df5f45f6fa853ee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x881d4c8618d68872fa404518b2460ea839a02a6a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xba2ae4e0a9c6ecaf172015aa2cdd70a21f5a290b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1caf237d7a2d103e3e9b1855988c01ac10344600 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7d4a7be025652995364e0e232063abd9e8d65e6e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x620aa20875ec1144126ea47fb27ecfe6e10d0c56 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfae103dc9cf190ed75350761e95403b7b8afa6c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xae7ab96520de3a18e5e111b5eaab095312d7fe84 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x04c154b66cb340f3ae24111cc767e0184ed00cc6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x70e8de73ce538da2beed35d14187f6959a8eca96 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfb7b4564402e5500db5bb6d63ae671302777c75a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6810e776880c02933d47db1b9fc05908e5386b96 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x11e969e9b3f89cb16d686a03cd8508c9fc0361af - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x8b5d1d8b3466ec21f8ee33ce63f319642c026142 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3ed03e95dd894235090b3d4a49e0c3239edce59e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb3f13b0c61d65d67d7d6215d70c89533ee567a91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xfea31d704deb0975da8e77bf13e04239e70d7c28 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x66e535e8d2ebf13f49f3d49e5c50395a97c137b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9a06db14d639796b25a6cec6a1bf614fd98815ec - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7fdd7419428955dbf36d4176af5a8f09ad29d1f3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa9f5031b54c44c3603b4300fde9b8f5cd18ad06f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x57f5fbd3de65dfc0bd3630f732969e5fb97e6d37 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9ef1139e6b420cc929dd912a5a7adeced6f12e91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x120edc8e391ba4c94cb98bb65d8856ae6ec1525f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd7ea82d19f1f59ff1ae95f1945ee6e6d86a25b96 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2c9ab600d71967ff259c491ad51f517886740cbc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf4c8e32eadec4bfe97e0f595add0f4450a863a11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8c49a510756224e887b3d99d00d959f2d86dda1c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7777cec341e7434126864195adef9b05dcc3489c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x19af07b52e5faa0c2b1e11721c52aa23172fe2f5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb7109df1a93f8fe2b8162c6207c9b846c1c68090 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbbc2ae13b23d715c30720f079fcd9b4a74093505 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x595832f8fc6bf59c85c527fec3740a1b7a361269 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7316d973b0269863bbfed87302e11334e25ea565 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2be8e422cb4a5a7f217a8f1b0658952a79132f28 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x83e6f1e41cdd28eaceb20cb649155049fac3d5aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbabe3ce7835665464228df00b03246115c30730a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2e6a60492fb5b58f5b5d08c7cafc75e740e6dc8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc08e7e23c235073c6807c2efe7021304cb7c2815 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x955d5c14c8d4944da1ea7836bd44d54a8ec35ba1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3540abe4f288b280a0740ad5121aec337c404d15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfe8526a77a2c3590e5973ba81308b90bea21fbff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd807f7e2818db8eda0d28b5be74866338eaedb86 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4186bfc76e2e237523cbc30fd220fe055156b41f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd5d3aa404d7562d09a848f96a8a8d5d65977bf90 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xa3f751662e282e83ec3cbc387d225ca56dd63d3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd24157aa1097486dc9d7cf094a7e15026e566b5d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xbed0b9240bdbcc8e33f66d2ca650a5ef60a5bab0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5d559ea7bb2dae4b694a079cb8328a2145fd32f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x97b959385dfdcaf252223838746beb232ac601aa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x18e692c03de43972fe81058f322fa542ae1a5e2c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x38029c62dfa30d9fd3cadf4c64e9b2ab21dbda17 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x4507cef57c46789ef8d1a19ea45f4216bae2b528 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x73f93dcc49cb8a239e2032663e9475dd5ef29a08 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9e523234d36973f9e38642886197d023c88e307e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5de758bba013e58dae2693aea3f0b12b31a3023d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1001271083c249bd771e1bb76c22d935809a61ee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9d39a5de30e57443bff2a8307a4256c8797a3497 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf3768d6e78e65fc64b8f12ffc824452130bd5394 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf2ec4a773ef90c58d98ea734c0ebdb538519b988 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0f2d719407fdbeff09d87557abb7232601fd9f29 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x180000dda70eb7fb7f3e10e52e88ce88f46e3b3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xed89fc0f41d8be2c98b13b7e3cd3e876d73f1d30 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x17c50d62e6e8d20d2dc18e9ad79c43263d0720d9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3b50805453023a91a8bf641e279401a0b23fa6f9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfd03723a9a3abe0562451496a9a394d2c4bad4ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfe67a4450907459c3e1fff623aa927dd4e28c67a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc5fb36dd2fb59d3b98deff88425a3f425ee469ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x6b021b3f68491974be6d4009fee61a4e3c708fd6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7ae9ab13fc8945323b778b3f8678145e80ec2efb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xbc4c97fb9befaa8b41448e1dfcc5236da543217f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x93919784c523f39cacaa98ee0a9d96c3f32b593e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd55fce7cdab84d84f2ef3f99816d765a2a94a509 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x32e0f9d26d1e33625742a52620cc76c1130efde6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9b700b043e9587dde9a0c29a9483e2f8fa450d54 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0b1594b0e896bf165d925956e0df733b8443af6a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x891502ba08132653151f822a3a430198f1844115 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc702b80a1bebac118cab22ce6f2978ef59563b3f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1287a235474e0331c0975e373bdd066444d1bd35 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xab36452dbac151be02b16ca17d8919826072f64a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcc7ff230365bd730ee4b352cc2492cedac49383e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xa9b038285f43cd6fe9e16b4c80b4b9bccd3c161b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x77be1ba1cd2d7a63bffc772d361168cc327dd8bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x00000000efe302beaa2b3e6e1b18d08d69a9012a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd101dcc414f310268c37eeb4cd376ccfa507f571 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd09eb9099fac55edcbf4965e0a866779ca365a0c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7b0df1cd724ec34ec9bc4bd19749b01afb490761 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x71297312753ea7a2570a5a3278ed70d9a75f4f44 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9e32b13ce7f2e80a01932b42553652e053d6ed8e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6942040b6d25d6207e98f8e26c6101755d67ac89 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3301ee63fb29f863f2333bd4466acb46cd8323e6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfefe157c9d0ae025213092ff9a5cb56ab492bab8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x44108f0223a3c3028f5fe7aec7f9bb2e66bef82f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1121acc14c63f3c872bfca497d10926a6098aac5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf1376bcef0f78459c0ed0ba5ddce976f1ddf51f4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xce722f60f35c37ab295adc4e6ba45bcc7ca89dd6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x614577036f0a024dbc1c88ba616b394dd65d105a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x93fa0b88c0c78e45980fa74cdd87469311b7b3e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe22c452bd2ade15dfc8ad98286bc6bdf0c9219b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x00000000000451f49c692bfc24971cacea2db678 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x00000000702749f73e5210b08b0a3d440078f888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x86f65121804d2cdbef79f9f072d4e0c2eebabc08 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x127e47aba094a9a87d084a3a93732909ff031419 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x52b492a33e447cdb854c7fc19f1e57e8bfa1777d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x55027a5b06f4340cc4c82dcc74c90ca93dcb173e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x32b133add6d99d085ff23f522662b546b70d54a1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2ad3d80c917ddbf08acc04277f379e00e4d75395 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc73dc7ae7a4fa40517aafa941ae1ee436b91a12c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9f235d23354857efe6c541db92a9ef1877689bcb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0c90c756350fb803a7d5d9f9ee5ac29e77369973 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xac12f930318be4f9d37f602cbf89cd33e99aa9d4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x1c45366641014069114c78962bdc371f534bc81c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc328a59e7321747aebbc49fd28d1b32c1af8d3b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x90edf25b14393350f0c1b5b12b6cb3cd3781fb4a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x590f820444fa3638e022776752c5eef34e2f89a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1fdb29ad49330b07ae5a87483f598aa6b292039e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4a220e6096b25eadb88358cb44068a3248254675 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xabd4c63d2616a5201454168269031355f4764337 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4c1b1302220d7de5c22b495e78b72f2dd2457d45 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x050c24dbf1eec17babe5fc585f06116a259cc77a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x57211299bc356319ba5ca36873eb06896173f8bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfde4c96c8593536e31f229ea8f37b2ada2699bb2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf9b738c2e7adc4f299c57afd0890b925a5efea6f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x04c0599ae5a44757c0af6f9ec3b93da8976c150a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x99b2b1a2adb02b38222adcd057783d7e5d1fcc7d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf9569cfb8fd265e91aa478d86ae8c78b8af55df4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa3d1a8deb97b111454b294e2324efad13a9d8396 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd85eff20288ca72ea9eecffb428f89ee5066ca5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x13f4196cc779275888440b3000ae533bbbbc3166 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x160452f95612699d1a561a70eeeeede67c6812af - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x5ce12f6d9f2fcaf0b11494a1c39e09eeb16ca7e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x6894cde390a3f51155ea41ed24a33a4827d3063d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6db6fdb5182053eecec778afec95e0814172a474 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc0cfbe1602dd586349f60e4681bf4badca584ec9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x289ff00235d2b98b0145ff5d4435d3e92f9540a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcb76314c2540199f4b844d4ebbc7998c604880ca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd7cfdb3cdc33dbeb9e9a4c95b61953cf12a008b3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xce176825afc335d9759cb4e323ee8b31891de747 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8f2bf2f59cdf7be4aee71500b9419623202b8636 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x744d70fdbe2ba4cf95131626614a1763df805b9e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x52e6654aee5d59e13ae30b48f8f5dbeb97f708cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x38f9bf9dce51833ec7f03c9dc218197999999999 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7189fb5b6504bbff6a852b13b7b82a3c118fdc27 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x38f9bf9dce51833ec7f03c9dc218197999999999 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8349314651ede274f8c5fef01aa65ff8da75e57c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x38f9bf9dce51833ec7f03c9dc218197999999999 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1adcef5c780d8895ac77e6ee9239b4b3ecb76da2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x38f9bf9dce51833ec7f03c9dc218197999999999 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x917f39bb33b2483dd19546b1e8d2f09ce481ee44 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x60a3e35cc302bfa44cb288bc5a4f316fdb1adb42 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8b67f2e56139ca052a7ec49cbcd1aa9c83f2752a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x029c58a909fbe3d4be85a24f414dda923a3fde0f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x655a51e6803faf50d4ace80fa501af2f29c856cf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x9ca5dfa3b0b187d7f53f4ef83ca435a2ec2e4070 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xb68a20b9e9b06fde873897e12ab3372ce48f1a8a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0203d275d2a65030889af45ed91d472be3948b92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa00453052a36d43a99ac1ca145dfe4a952ca33b8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8236a87084f8b84306f72007f36f2618a5634494 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbc5ca3c518c8a2930947661237b1b562e34f22b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfd0205066521550d7d7ab19da8f72bb004b4c341 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x880226cbcce551eeafd18c9a9e883c85811b82fc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfc21540d6b89667d167d42086e1feb04da3e9b21 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x41d06390b935356b46ad6750bda30148ad2044a4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8149745670881d99700078ede5903a1a7bebe262 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcf01a5c02c9b9dd5bf73a5a56bcdbc9dca483d43 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xae0fe8474cf5b1b412b3e4327a1c535ea12b77b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc98d64da73a6616c42117b582e832812e7b8d57f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x70c0b83501a3989d4f8a8693581bb7010194abb5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x80122c6a83c8202ea365233363d3f4837d13e888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x455e53cbb86018ac2b8092fdcd39d8444affc3f6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x58aea10748a00d1781d6651f9d78a414ea32ca46 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x406d59819bc2aef682f4ff2769085c98a264f97b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc4ce1d6f5d98d65ee25cf85e9f2e9dcfee6cb5d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x94025780a1ab58868d9b2dbbb775f44b32e8e6e5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xf33687811f3ad0cd6b48dd4b39f9f977bd7165a2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa88594d404727625a9437c3f886c7643872296ae - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7e72d6410803c40e73806f2a72e3eade5d075cc0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x31ea904a7eca45122890deb8da3473a2081bc9d1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x48c6740bcf807d6c47c864faeea15ed4da3910ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc5fecc3a29fb57b5024eec8a2239d4621e111cbe - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x184cff0e719826b966025f93e05d8c8b0a79b3f9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0c2e08e459fc43ddd1e2718c122f566473f59665 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1a3a8cf347b2bf5890d3d6a1b981c4f4432c8661 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8baf5d75cae25c7df6d1e0d26c52d19ee848301a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x28561b8a2360f463011c16b6cc0b0cbef8dbbcad - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0fd10b9899882a6f2fcb5c371e17e70fdee00c38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7a58c0be72be218b41c608b7fe7c5bb630736c71 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xddaf27167929cd045a7d97d09a4fa1046ece3d89 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x375e104af98872e5b4fe951919e504a47db1757c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5408d3883ec28c2de205064ae9690142b035fed2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1bb4afbf2ce0c9ec86e6414ad4ba4d9aab1c0de4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7391425ca7cee3ee03e09794b819291a572af83e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x38e382f74dfb84608f3c1f10187f6bef5951de93 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xbea269038eb75bdab47a9c04d0f5c572d94b93d5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf41a7b7c79840775f70a085c1fc5a762bbc6b180 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x13654df31871b5d01e5fba8e6c21a5d0344820f5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4d840b741bc05fde325d4ec0b4cfcd0cea237e4e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x49b1be61a8ca3f9a9f178d6550e41e00d9162159 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf5bc3439f53a45607ccad667abc7daf5a583633f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0a953dd9fc813fefaf6015b804c9dfa0624690c0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x44ec807ce2f4a6f2737a92e985f318d035883e47 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xfb6115445bff7b52feb98650c87f44907e58f802 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x117a123ded97cd125837d9ac19592b77d806fa88 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd9fcd98c322942075a5c3860693e9f4f03aae07b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x240cd7b53d364a208ed41f8ced4965d11f571b7a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb8d6196d71cdd7d90a053a7769a077772aaac464 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcbde0453d4e7d748077c1b0ac2216c011dd2f406 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x786f112c9a6bc840cdc07cfd840105efd6ef2d4b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0bffdd787c83235f6f0afa0faed42061a4619b7a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1c43cd666f22878ee902769fccda61f401814efb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1b54a6fa1360bd71a0f28f77a1d6fba215d498c3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb528edbef013aff855ac3c50b381f253af13b997 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x888888ae2c4a298efd66d162ffc53b3f2a869888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4cd27e18757baa3a4fe7b0ab7db083002637a6c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x240d6faf8c3b1a7394e371792a3bf9d28dd65515 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x41b1f9dcd5923c9542b6957b9b72169595acbc5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd1f2586790a5bd6da1e443441df53af6ec213d83 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8de5b80a0c1b02fe4976851d030b36122dbb8624 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x391cf4b21f557c935c7f670218ef42c21bd8d686 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8bd35250918ed056304fa8641e083be2c42308bb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc3960227e41c3f54e9b399ce216149dea5315c34 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x59062301fb510f4ea2417b67404cb16d31e604ba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x75ec618a817eb0a4a7e44ac3dfc64c963daf921a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7e7a7c916c19a45769f6bdaf91087f93c6c12f78 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x21ccbc5e7f353ec43b2f5b1fb12c3e9d89d30dca - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x87eee96d50fb761ad85b1c982d28a042169d61b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3c720206bfacb2d16fa3ac0ed87d2048dbc401fc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8d60fb5886497851aac8c5195006ecf07647ba0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xcb327b99ff831bf8223cced12b1338ff3aa322ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf544251d25f3d243a36b07e7e7962a678f952691 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa7296cefae8477a81e23230ca5d3a3d6f49d3764 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x051fb509e4a775fabd257611eea1efaed8f91359 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xae2bddbcc932c2d2cf286bad0028c6f5074c77b5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1dd2d631c92b1acdfcdd51a0f7145a50130050c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd3c68968137317a57a9babeacc7707ec433548b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7f6f6720a73c0f54f95ab343d7efeb1fa991f4f7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xf3527ef8de265eaa3716fb312c12847bfba66cef - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8888888888f004100c0353d657be6300587a6ccd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xe2a59d5e33c6540e18aaa46bf98917ac3158db0d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xfa2ad87e35fc8d3c9f57d73c4667a4651ce6ad2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xec53bf9167f50cdeb3ae105f56099aaab9061f83 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb3912b20b3abc78c15e85e13ec0bf334fbb924f7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x16a3543fa6b32cac3b0a755f64a729e84f89a75c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf1c9acdc66974dfb6decb12aa385b9cd01190e38 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0da2082905583cedfffd4847879d0f1cf3d25c36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb0ffa8000886e57f86dd5264b9582b2ad87b2b91 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xec9333e7dadeebf82d290d6cb12e66cc30ce46b0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x898843fb909e3562c82f2b96f4e3d0693af041df - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaf05ce8a2cef336006e933c02fc89887f5b3c726 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x13e4b8cffe704d3de6f19e52b201d92c21ec18bd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xaeb3607ec434454ceb308f5cd540875efb54309a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2a3bff78b79a009976eea096a51a948a3dc00e34 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4298e4ad48be89bf63a6fdc470a4b4fe9ce633b1 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa117000000f279d81a1d3cc75430faa017fa5a2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x339058ca41e17b55b6dd295373c5d3cbe8000cd9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa3d4bee77b05d4a0c943877558ce21a763c4fa29 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x362bc847a3a9637d3af6624eec853618a43ed7d2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7a65cb87f596caf31a4932f074c59c0592be77d7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa21af1050f7b26e0cff45ee51548254c41ed6b5c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x284b25d8f199125da962abc9ee6e6b1b6715cae3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8fac8031e079f409135766c7d5de29cf22ef897c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf280b16ef293d8e534e370794ef26bf312694126 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x69af81e73a73b40adf4f3d4223cd9b1ece623074 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x888c1a341ce9d9ae9c2d2a75a72a7f0d2551a2dc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x465dbc39f46f9d43c581a5d90a43e4a0f2a6ff2d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x44e18207b6e98f4a786957954e462ed46b8c95be - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x70c29e99ca32592c0e88bb571b87444bb0e08e33 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8c7ac134ed985367eadc6f727d79e8295e11435c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6aa56e1d98b3805921c170eb4b3fe7d4fda6d89b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x81db1949d0e888557bc632f7c0f6698b1f8c9106 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2de1218c31a04e1040fc5501b89e3a58793b3ddf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x30ae41d5f9988d359c733232c6c693c0e645c77e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1fc01117e196800f416a577350cb1938d10501c2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x3212dc0f8c834e4de893532d27cc9b6001684db0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xd0cf4de352ac8dcce00bd6b93ee73d3cb272edc3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x75e6b648c91d222b2f6318e8ceeed4b691d5323f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2a06a17cbc6d0032cac2c6696da90f29d39a1a29 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6668d4a6605a27e5ee51eda040581155eddc6666 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2dc90fa3a0f178ba4bee16cac5d6c9a5a7b4c6cb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x9c7beba8f6ef6643abd725e45a4e8387ef260649 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x0cf8e180350253271f4b917ccfb0accc4862f262 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x42069026eac8eee0fd9b5f7adfa4f6e6d69a2b39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x340d2bde5eb28c1eed91b2f790723e3b160613b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xec21890967a8ceb3e55a3f79dac4e90673ba3c2e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6900f7b42fb4abb615c938db6a26d73a9afbed69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4c44a8b7823b80161eb5e6d80c014024752607f2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x103143acf2e717acf8f021823e86a1dbfe944fb5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6969f3a3754ab674b48b7829a8572360e98132ba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x562e362876c8aee4744fc2c6aac8394c312d215d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd0ebfe04adb5ef449ec5874e450810501dc53ed5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2597342ff387b63846eb456419590781c4bfcdaf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4e6221c07dae8d3460a46fa01779cf17fdd72ad8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb612bfc5ce2fb1337bd29f5af24ca85dbb181ce2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc0e10854ab40b2e59a5519c481161a090f1162a0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa7f4195f10f1a62b102bd683eab131d657a6c6e4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7e7ef0ee0305c1c195fcae22fd7b207a813eef86 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb6212b633c941e9be168c4b9c2d9e785f1cd42fb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x139052115f8b1773cf7dcba6a553f922a2e54f69 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3f94618ad346f34f43e27f0cf46decbb0d396b1b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf56b3b3972f2f154555a0b62ff5a22b7b2a3c90b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc08cd26474722ce93f4d0c34d16201461c10aa8c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x080c169cd58122f8e1d36713bf8bcbca45176905 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x50da645f148798f68ef2d7db7c1cb22a6819bb2c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xea1d649ddc8e2a6e6ee40b89b2997518476cafa5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xa4080f1778e69467e905b8d6f72f6e441f9e9484 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb60acd2057067dc9ed8c083f5aa227a244044fd6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd0dfca0b404e866dc9a3038bd2a545c6735d9fa9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x18a8d75f70eaead79b5a55903d036ce337f623a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xebb66a88cedd12bfe3a289df6dfee377f2963f12 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9343e24716659a3551eb10aff9472a2dcad5db2d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfa3e941d1f6b7b10ed84a0c211bfa8aee907965e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x85bea4ee627b795a79583fcede229e198aa57055 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0c03ce270b4826ec62e7dd007f0b716068639f7b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x19706c142d33376240e418d6385f05691a5fa8e2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb3e41d6e0ea14b43bc5de3c314a408af171b03dd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x634769eb87542eaf41c0008c05d5d8f5d8bec3a5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd3c5bdbc6de5ea3899a28f6cd419f29c09fa749f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9dfad1b7102d46b1b197b90095b5c4e9f5845bba - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc8f69a9b46b235de8d0b77c355fff7994f1b090f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5200b34e6a519f289f5258de4554ebd3db12e822 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x69fd9281a920717ee54193a1c130b689ef341933 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5d56b6581d2e7e7574adce2dc593f499a53d7505 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x168168db04def453b7e8bfaff1e0102a3e810485 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x1f19d846d99a0e75581913b64510fe0e18bbc31f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x571d9b73dc04ed88b4e273e048c8d4848f83b779 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xca5ca9083702c56b481d1eec86f1776fdbd2e594 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x99f40b01ba9c469193b360f72740e416b17ac332 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xc6bdfc4f2e90196738873e824a9efa03f7c64176 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x06480acaae64bcfa6da8fd176f60982584385090 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0c5142bc58f9a61ab8c3d2085dd2f4e550c5ce0b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc734635cd30e882037c3f3de1ebccf9fa9d27d9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x65e570b560027f493f2b1907e8e8e3b9546053bd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd1917629b3e6a72e6772aab5dbe58eb7fa3c2f33 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9e81f6495ba29a6b4d48bddd042c0598fa8abc9f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2075f6e2147d4ac26036c9b4084f8e28b324397d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x01aac2b594f7bdbec740f0f1aa22910ebb4b74ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xef433ebb8ba7a486ce21b854f093b9a3f4e696bc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2bb84fd8f7ed0ffae3da36ad60d4d7840bdeeada - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xad86b91a1d1db15a4cd34d0634bbd4ecacb5b61a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4d224452801aced8b2f0aebe155379bb5d594381 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf63e309818e4ea13782678ce6c31c1234fa61809 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe0151763455a8a021e64880c238ba1cff3787ff0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x44ff8620b8ca30902395a7bd3f2407e1a091bf73 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5640e0560e6afd6a9f4ddb41230d0201d181fea7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x88ee7a3537667958d040216d9dc1752d1274d838 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x39d5313c3750140e5042887413ba8aa6145a9bd2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xba2a3dad197d6fee75471215efd5c30c8c854e11 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3dd77d53f4fa9b3435b3a2ff6bb408771e6800e6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xf929de51d91c77e42f5090069e0ad7a09e513c73 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x74885b4d524d497261259b38900f54e6dbad2210 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xc55e93c62874d8100dbd2dfe307edc1036ad5434 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9c9e5fd8bbc25984b178fdce6117defa39d2db39 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xaa53b93608c88ee55fad8db4c504fa20e52642ad - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x55cd6469f597452b5a7536e2cd98fde4c1247ee4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfe550bffb51eb645ea3b324d772a19ac449e92c5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x314d7f9e2f55b430ef656fbb98a7635d43a2261e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3b54eb78fc8103462f86976b06916fa46078b124 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1d4731111bd2a50ab3dd5178574e6f3698270ffc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7a2c5e7788e55ec0a7ba4aeec5b3da322718fb5e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x814fe70e85025bec87d4ad3f3b713bdcaac0579b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9b69667f602f15ef2d09a9a18489c788e327461e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8808434a831efea81170a56a9ddc57cc9e6de1d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe0c8b298db4cffe05d1bea0bb1ba414522b33c1b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x230ea9aed5d08afdb22cd3c06c47cf24ad501301 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x35d8949372d46b7a3d5a56006ae77b215fc69bc0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x535887989b9edffb63b1fd5c6b99a4d45443b49a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9ee8c380e1926730ad89e91665ff27063b13c90a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb8a914a00664e9361eae187468eff94905dfbc15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xda2e903b0b67f30bf26bd3464f9ee1a383bbbe5f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xd6cf874e24a9f5f43075142101a6b13735cdd424 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x8c92e38eca8210f4fcbf17f0951b198dd7668292 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x9a33406165f562e16c3abd82fd1185482e01b49a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x7f65323e468939073ef3b5287c73f13951b0ff5b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5597ce42b315f29e42071d231dcd0158da35b77b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0a14ef61afb32e5ca672e021784f71705ac14908 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0f1cfd0bb452db90a3bfc0848349463010419ab2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf3708859c178709d5319ad5405bc81511b72b9e9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xadf734e8d910d01e6528240898d895af6c22e2de - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x78a087d713be963bf307b18f2ff8122ef9a63ae9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4287105ffac106eb98a71cab46586906181e35ff - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb8e564b206032bbcda2c3978bc371da52152f72e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3ecced5b416e58664f04a39dd18935eb71d33b15 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x71e26d0e519d14591b9de9a0fe9513a398101490 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/celo/0x105d4a9306d2e55a71d2eb95b81553ae1dc20d7b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x420110d74c4c3ea14043a09e81fad53e1932f54c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd6203889c22d9fe5e938a9200f50fdffe9dd8e02 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0a6e7ba5042b38349e437ec6db6214aec7b35676 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x6f40d4a6237c257fff2db00fa0510deeecd303eb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3b991130eae3cca364406d718da22fa1c3e7c256 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x555907a0b5c32df0feb35401187aed60a9191d74 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4947b72fed037ade3365da050a9be5c063e605a7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe9732d4b1e7d3789004ff029f032ba3034db059c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x556c3cbdca77a7f21afe15b17e644e0e98e64df4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x81f8f0bb1cb2a06649e51913a151f0e7ef6fa321 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe69ccaaaea33ebfe5b76e0dd373cd9a1a31fd410 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9aab071b4129b083b01cb5a0cb513ce7eca26fa5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x5ff0d2de4cd862149c6672c99b7edf3b092667a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x96a5399d07896f757bd4c6ef56461f58db951862 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x0d5105ec5bbbf17dba7a87e1aed2c2c15394a9e2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x00000000ea00f3f4000e7ed5ed91965b19f1009b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x5117f4ad0bc70dbb3b05bf39a1ec1ee40dd67654 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4be87c766a7ce11d5cc864b6c3abb7457dcc4cc9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x16a500aec6c37f84447ef04e66c57cfc6254cf92 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x9f6abbf0ba6b5bfa27f4deb6597cc6ec20573fda - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x5465145a47260d5e715733997333a175d97285bb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x93890f346c5d02c3863a06657bc72555dc72c527 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1d1498166ddceee616a6d99868e1e0677300056f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1d734a02ef1e1f5886e66b0673b71af5b53ffa94 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x4c3bf0a3de9524af68327d1d2558a3b70d17d42a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x36912b5cf63e509f18e53ac98b3012fa79e77bf5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x858c50c3af1913b0e849afdb74617388a1a5340d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x92dc4ab92eb16e781559e612f349916988013d5a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x548f93779fbc992010c07467cbaf329dd5f059b7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd1412d909f67b8db7505ddfcf26cf2303f4b1bb4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfb1aaba03c31ea98a3eec7591808acb1947ee7ac - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9562e2063122eaa4d7c2d786e7ca2610d70ca8b8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x699ec925118567b6475fe495327ba0a778234aaa - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x37d299d9900209c3566254cfe59bfe6ff8f8c295 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x128f3e482f5bd5f08fe1b216e60ec0a6013deab9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x554fb3b6c1cf4a3cef49779ced321ca51c667d7d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x8578a8716013c390b95db73065922f512783e2cf - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf5809f3348ff40906bb509f936aba43e6d1961ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x11920f139a3121c2836e01551d43f95b3c31159c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x45940000009600102a1c002f0097c4a500fa00ab - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4debfb9ed639144cf1e401674af361ffffcefb58 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x0cfc9a713a5c17bc8a5ff0379467f6558bacd0e0 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0fd7a301b51d0a83fcaf6718628174d527b373b6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1bc0c42215582d5a085795f4badbac3ff36d1bcb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3c4b6cd7874edc945797123fce2d9a871818524b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x64cb1bafc59bf93aeb90676885c63540cf4f4106 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe8aae6251c6cf39927b0ff31399030c60bec798f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3d1d651761d535df881740ab50ba4bd8a2ec2c00 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8216e8143902a8fe0b676006bc25eb23829c123d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xce7de646e7208a4ef112cb6ed5038fa6cc6b12e3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x947950bcc74888a40ffa2593c5798f11fc9124c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x9f9bb3d5af7cc774f9b6adf66e32859b5a998952 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xba41ddf06b7ffd89d1267b5a93bfef2424eb2003 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7a56e1c57c7475ccf742a1832b028f0456652f97 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x58d97b57bb95320f9a05dc918aef65434969c2b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc785698504a70be37d0e939a4c5326f8eddd5beb - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4955f6641bf9c8c163604c321f4b36e988698f75 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x473f4068073cd5b2ab0e4cc8e146f9edc6fb52cc - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x16c22a91c705ec3c2d5945dbe2aca37924f1d2ed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xac1d3d7a8878e655cbb063d58e453540641f4117 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xb72e76ccf005313868db7b48070901a44629da98 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xa71e2738704e367798baa2755af5a10499634953 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x8697841b82c71fcbd9e58c15f6de68cd1c63fd02 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x7dff72693f6a4149b17e7c6314655f6a9f7c8b33 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x650af3c15af43dcb218406d30784416d64cfb6b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xe4feab21b42919c5c960ed2b4bdffc521e26881f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xc3ec80343d2bae2f8e680fdadde7c17e71e114ea - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9c2c5fd7b07e95ee044ddeba0e97a665f142394f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x0db510e79909666d6dec7f5e49370838c16d950f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x599f07567656e6961e20fa6a90685d393808c192 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4f9fd6be4a90f2620860d680c0d4d5fb53d1a825 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1185cb5122edad199bdbc0cbd7a0457e448f23c7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbaa5cc21fd487b8fcc2f632f3f4e8d37262a0842 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb488fcb23333e7baa28d1dfd7b69a5d3a8bfeb3a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2c8c89c442436cc6c0a77943e09c8daf49da3161 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x91ad1b44913cd1b8241a4ff1e2eaa198da6bf4c9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa0a2e84f6f19c09a095d4a83ac8de5a32d303a13 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1db0c569ebb4a8b57ac01833b9792f526305e062 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8a638ea79f71f3b91bdc96bbdf9fb27c93013d60 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x731814e491571a2e9ee3c5b1f7f3b962ee8f4870 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2c002ffec41568d138acc36f5894d6156398d539 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x33d13d537609841ce6c42d6fd775dc33e3833411 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x11d41056ff636107dd710ec4ea772490a710cdb7 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x2859e4544c4bb03966803b044a93563bd2d0dd4d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x77777feddddffc19ff86db637967013e6c6a116c - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xfd418e42783382e86ae91e445406600ba144d162 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4f7d2d728ce137dd01ec63ef7b225805c7b54575 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x2e44f3f609ff5aa4819b323fd74690f07c3607c4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x19e1f2f837a3b90ebd0730cb6111189be0e1b6d6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd55210bb6898c021a19de1f58d27b71f095921ee - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x823556202e86763853b40e9cde725f412e294689 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4d1c297d39c5c1277964d0e3f8aa901493664530 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x864cb5194722d5a1596f4be8b899916d30dad8d8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x4a24b101728e07a52053c13fb4db2bcf490cabc3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x79ead7a012d97ed8deece279f9bc39e264d7eef9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd566c529b33ecf15170f600d4b1ab12468c8efc6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3b7e1ce09afe2bb3a23919afb65a38e627cfbe97 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xaa404804ba583c025fa64c9a276a6127ceb355c6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x1a3acf6d19267e2d3e7f898f42803e90c9219062 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6b2504a03ca4d43d0d73776f6ad46dab2f2a4cfd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x98d59767cd1335071a4e9b9d3482685c915131e8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x354d6890caa31a5e28b6059d46781f40880786a6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x30121d81f4407474a6d93f5c3060f14aaa098a61 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x5d9c2457a10d455e0ad8e28e40cc28eacf27a06a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xac27fa800955849d6d17cc8952ba9dd6eaa66187 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xe2b1dc2d4a3b4e59fdf0c47b71a7a86391a8b35a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd2699f9fddc04d262a819808f561c153098c2408 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x23a96680ccde03bd4bdd9a3e9a0cb56a5d27f7c9 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3c5fdf0ee37d62c774025599e3b692d027746e24 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf31e6d62bfc485857af2186eb3d8ee94b4379fed - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcf3c8be2e2c42331da80ef210e9b1b307c03d36a - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x306227d964511a260d14563fbfa82aa75db404b2 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xc00e94cb662c3520282e6f5717214004a7f26888 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0c4785ee3ca8bf1fb90c772703210bd346aa3413 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xe41d2489571d322189246dafa5ebde1f4699f498 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7fd4d7737597e7b4ee22acbf8d94362343ae0a79 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x3567aa22cd3ab9aef23d7e18ee0d7cf16974d7e6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf107edabf59ba696e38de62ad5327415bd4d4236 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x06450dee7fd2fb8e39061434babcfc05599a6fb8 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9cf0ed013e67db12ca3af8e7506fe401aa14dad6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x33333333fede34409fb7f67c6585047e1f653333 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xc760f9782f8cea5b06d862574464729537159966 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x1b7ad346b6ff2d196daa8e78aed86baa6d7e3b02 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0xff733b2a3557a7ed6697007ab5d11b79fdd1b76b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x05f52cc483c50c2a7e25a13dac17d736fa50f259 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xafb755c5f2ea2aadbae693d3bf2dc2c35158dc04 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x101a023270368c0d50bffb62780f4afd4ea79c35 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x3562ddf1f5ce2c02ef109e9d5a72e2fdb702711d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x20d704099b62ada091028bcfc44445041ed16f09 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x161e113b8e9bbaefb846f73f31624f6f9607bd44 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa6f774051dfb6b54869227fda2df9cb46f296c09 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x50ce4129ca261ccde4eb100c170843c2936bc11b - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbdf317f9c153246c429f23f4093087164b145390 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x08c81699f9a357a9f0d04a09b353576ca328d60d - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb33ff54b9f7242ef1593d2c9bcd8f9df46c77935 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x589864a9892b1a736ae70a91824ab4dc591fd8cd - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd98832e8a59156acbee4744b9a94a9989a728f36 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x478e03d45716dda94f6dbc15a633b0d90c237e2f - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2676e4e0e2eb58d9bdb5078358ff8a3a964cedf5 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1c4cca7c5db003824208adda61bd749e55f463a3 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x749e5334752466cda899b302ed4176b8573dc877 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x63cb9a22cbc00bf9159429e9dede4b88c3dba8ce - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2f20cf3466f80a5f7f532fca553c8cbc9727fef6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x2c24497d4086490e7ead87cc12597fb50c2e6ed6 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4f81837c2f4a189a0b69370027cc2627d93785b4 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x252d223d0550bc6c137b003d90bc74f5341a2818 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x72ff5742319ef07061836f5c924ac6d72c919080 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x2ab0e9e4ee70fff1fb9d67031e44f6410170d00e - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x8c907e0a72c3d55627e853f4ec6a96b0c8771145 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xc748673057861a797275cd8a068abb95a902e8de - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x62d7c4e3566f7f4033fc8e01b4d8e9bbc01c0760 - 2024-12-06T22:01:49.956Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x109ba5f0230b7b39e4a8ab56e7361db89fa0e108 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x82a605d6d9114f4ad6d5ee461027477eeed31e34 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0bb217e40f8a5cb79adf04e1aab60e5abd0dfc1e - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf411903cbc70a74d22900a5de66a2dda66507255 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xdd3b11ef34cd511a2da159034a05fcb94d806686 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x4ec1b60b96193a64acae44778e51f7bff2007831 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x78965b1c638a7ff408d1697a96d7b8e47bb7c75f - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x60222751504796934bddee8218f9725f0c95d2c1 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1ccb4b14a11e0f2994a7ecbbd4cc69632f4c7c76 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc7dcca0a3e69bd762c8db257f868f76be36c8514 - 2024-12-07T02:42:16.799Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x9cdf242ef7975d8c68d5c1f5b6905801699b1940 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xadd39272e83895e7d3f244f696b7a25635f34234 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x0000000000c5dc95539589fbd24be07c6c14eca4 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xcab254f1a32343f11ab41fbde90ecb410cde348a - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x95ed629b028cf6aadd1408bb988c6d1daabe4767 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xa6c0c097741d55ecd9a3a7def3a8253fd022ceb9 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd888a5460fffa4b14340dd9fe2710cbabd520659 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x683989afc948477fd38567f8327f501562c955ac - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x946fb08103b400d1c79e07acccdef5cfd26cd374 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x7076de6ff1d91e00be7e92458089c833de99e22e - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xadf7c35560035944e805d98ff17d58cde2449389 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xd19b72e027cd66bde41d8f60a13740a26c4be8f3 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0x66a1e37c9b0eaddca17d3662d6c05f4decf3e110 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/ethereum/0xf477ac7719e2e659001455cdda0cc8f3ad10b604 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xe16e2548a576ad448fb014bbe85284d7f3542df5 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0x330bd769382cfc6d50175903434ccc8d206dcae5 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/arbitrum/0xb08d8becab1bf76a9ce3d2d5fa946f65ec1d3e83 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/optimism/0x8b21e9b7daf2c4325bf3d18c1beb79a347fe902a - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0xd9a9b4d466747e1ebcb7aeb42784452f40452367 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x306fd3e7b169aa4ee19412323e1a5995b8c1a1f4 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/polygon/0x9cb74c8032b007466865f060ad2c46145d45553d - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x333333c465a19c85f85c6cfbed7b16b0b26e3333 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xb9a5f238dc61eebe820060226c8143cd24624771 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xc48cddc6f2650bdb13dcf6681f61ba07209b5299 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xfb42da273158b0f642f59f2ba7cc1d5457481677 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x6f35720b272bf23832852b13ae9888c706e1a379 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x4498cd8ba045e00673402353f5a4347562707e7d - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1035ae3f87a91084c6c5084d0615cc6121c5e228 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x3639e6f4c224ebd1bf6373c3d97917d33e0492bb - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x8bfac1b375bf2894d6f12fb2eb48b1c1a7916789 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xd27c288fd69f228e0c02f79e5ecadff962e05a2b - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x62ff28a01abd2484adb18c61f78f30fb2e4a6fdb - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x315b8c9a1123c10228d469551033440441b41f0b - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x1d008f50fb828ef9debbbeae1b71fffe929bf317 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xeec468333ccc16d4bf1cef497a56cf8c0aae4ca3 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x20dd04c17afd5c9a8b3f2cdacaa8ee7907385bef - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x25e0a7767d03461eaf88b47cd9853722fe05dfd3 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x22af33fe49fd1fa80c7149773dde5890d3c76f3b - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xbc1852f8940991d91bd2b09a5abb5e7b8092a16c - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x06a63c498ef95ad1fa4fff841955e512b4b2198a - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xeb6d78148f001f3aa2f588997c5e102e489ad341 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xa4dc5a82839a148ff172b5b8ba9d52e681fd2261 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xef22cb48b8483df6152e1423b19df5553bbd818b - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0xf83759099dc88f75fc83de854c41e0d9e83ada9b - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/base/0x844c03892863b0e3e00e805e41b34527044d5c72 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0xc9de725a4be9ab74b136c29d4731d6bebd7122e8 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x59e69094398afbea632f8bd63033bdd2443a3be1 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z 0.8 https://app.uniswap.org/explore/tokens/bnb/0x15f9eb4b9beafa9db35341c5694c0b6573809808 - 2024-12-13T21:22:32.347Z + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x29cbd0510eec0327992cd6006e63f9fa8e7f33b7 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0xcb1592591996765ec0efc1f92599a19767ee5ffa + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x26e550ac11b26f78a04489d5f20f24e3559f7dd9 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x50327c6c5a14dcade707abad2e27eb517df87ab5 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0xc575bd129848ce06a460a19466c30e1d0328f52c + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x47000a7b27a75d44ffadfe9d0b97fa04d569b323 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x2196b84eace74867b73fb003aff93c11fce1d47a + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0xc4441c2be5d8fa8126822b9929ca0b81ea0de38e + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x421b05cf5ce28cb7347e73e2278e84472f0e4a88 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0xcdbddbdefb0ee3ef03a89afcd714aa4ef310d567 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0xf4308b0263723b121056938c2172868e408079d0 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x8cedb0680531d26e62abdbd0f4c5428b7fdc26d5 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x49fb8ad7578148e17c3ef0c344ce23a66ed372c4 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x40e3d1a4b2c47d9aa61261f5606136ef73e28042 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x60d95823f795f1972dbdbcd886955095e36e04cd + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x761a3557184cbc07b7493da0661c41177b2f97fa + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x64c5cba9a1bfbd2a5faf601d91beff2dcac2c974 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0x02f92800f57bcd74066f5709f1daa1a4302df875 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0x291a50e611035b6562a2374b8b44de70aa8d7896 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0x999faf0af2ff109938eefe6a7bf91ca56f0d07e1 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0x1a5b0aaf478bf1fda7b934c76e7692d722982a6d + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0x680447595e8b7b3aa1b43beb9f6098c79ac2ab3f + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0xc1eb7689147c81ac840d4ff0d298489fc7986d52 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/arbitrum/0x60bf4e7cf16ff34513514b968483b54beff42a81 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/optimism/0x5df7abe3c51c01dcf6d1f1f9a0ab4dc3759869b9 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/polygon/0xfe049f59963545bf5469f968e04c9646d6e2c2c5 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xc0041ef357b183448b235a8ea73ce4e4ec8c265f + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x12e377989a87da0f9b9166f0f875c9069eaa776c + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xfc48314ad4ad5bd36a84e8307b86a68a01d95d9c + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x0521aaa7c96e25afee79fdd4f1bb48f008ae4eac + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x7a5f5ccd46ebd7ac30615836d988ca3bd57412b3 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x20ef84969f6d81ff74ae4591c331858b20ad82cd + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x4d70f1058b73198f12a76c193aef5db5dd75babd + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x9239e9f9e325e706ef8b89936ece9d48896abbe3 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xca73ed1815e5915489570014e024b7ebe65de679 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x79dacb99a8698052a9898e81fdf883c29efb93cb + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x2f6c17fa9f9bc3600346ab4e48c0701e1d5962ae + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xba5e66fb16944da22a62ea4fd70ad02008744460 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x2b0772bea2757624287ffc7feb92d03aeae6f12d + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xc841b4ead3f70be99472ffdb88e5c3c7af6a481a + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xf8f97a79a3fa77104fab4814e3ed93899777de0d + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xf0d7cb351589c4b1520bf8d31afc87f7fb839c85 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x511ef9ad5e645e533d15df605b4628e3d0d0ff53 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x625bb9bb04bdca51871ed6d07e2dd9034e914631 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x291a8da3c42b7d7f00349d6f1be3c823a2b3fca4 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xf09034487c84954d49ae04bf6817148ffc2edb83 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x1e2093ab84768948c6176db5ad98c909ce97f368 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x64fcc3a02eeeba05ef701b7eed066c6ebd5d4e51 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xc796e499cc8f599a2a8280825d8bda92f7a895e0 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xbdb0e1c40a76c5113a023d685b419b90b01e3d61 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x76c71f1703fbf19ffdcf3051e1e684cb9934510f + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xc655c331d1aa7f96c252f1f40ce13d80eac53504 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x85645b86243886b7c7c1da6288571f8bea6fc035 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x623cd3a3edf080057892aaf8d773bbb7a5c9b6e9 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xab964f7b7b6391bd6c4e8512ef00d01f255d9c0d + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0x6112b8714221bbd96ae0a0032a683e38b475d06c + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/base/0xc2eeca228ebac45c339cc5e522dd3a10638155f1 + 2025-01-03T20:07:02.823Z + 0.8 + + + https://app.uniswap.org/explore/tokens/ethereum/0x018dd3a0dd7f213cc822076b3800816d3ce1ed86 + 2025-01-03T22:53:44.510Z 0.8 \ No newline at end of file diff --git a/apps/web/src/assets/svg/blank_token.svg b/apps/web/src/assets/svg/blank_token.svg deleted file mode 100644 index 8d0e0382484..00000000000 --- a/apps/web/src/assets/svg/blank_token.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/src/components/AccountDetails/TransactionSummary.tsx b/apps/web/src/components/AccountDetails/TransactionSummary.tsx index ea8b28bc58d..fba8d4a3d9b 100644 --- a/apps/web/src/components/AccountDetails/TransactionSummary.tsx +++ b/apps/web/src/components/AccountDetails/TransactionSummary.tsx @@ -3,6 +3,7 @@ import { BigNumber } from 'ethers/lib/ethers' import { useCurrency, useToken } from 'hooks/Tokens' import useENSName from 'hooks/useENSName' import JSBI from 'jsbi' +import { Trans } from 'react-i18next' import { VoteOption } from 'state/governance/types' import { AddLiquidityV2PoolTransactionInfo, @@ -27,7 +28,6 @@ import { WrapTransactionInfo, } from 'state/transactions/types' import { nativeOnChain } from 'uniswap/src/constants/tokens' -import { Trans } from 'uniswap/src/i18n' function formatAmount(amountRaw: string, decimals: number, sigFigs: number): string { return new Fraction(amountRaw, JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(decimals))).toSignificant(sigFigs) diff --git a/apps/web/src/components/AccountDrawer/AnalyticsToggle.tsx b/apps/web/src/components/AccountDrawer/AnalyticsToggle.tsx index 970fa09e367..2e57b1d642c 100644 --- a/apps/web/src/components/AccountDrawer/AnalyticsToggle.tsx +++ b/apps/web/src/components/AccountDrawer/AnalyticsToggle.tsx @@ -1,6 +1,6 @@ import { SettingsToggle } from 'components/AccountDrawer/SettingsToggle' import { useState } from 'react' -import { t } from 'uniswap/src/i18n' +import { useTranslation } from 'react-i18next' // eslint-disable-next-line no-restricted-imports import { analytics, getAnalyticsAtomDirect } from 'utilities/src/telemetry/analytics/analytics' @@ -8,6 +8,7 @@ export function AnalyticsToggle() { // eslint-disable-next-line @typescript-eslint/no-unused-vars const [x, setCounter] = useState(0) const [allowAnalytics, setAllowAnalytics] = useState(true) + const { t } = useTranslation() getAnalyticsAtomDirect(true).then((v: boolean) => setAllowAnalytics(v)) diff --git a/apps/web/src/components/AccountDrawer/AuthenticatedHeader.tsx b/apps/web/src/components/AccountDrawer/AuthenticatedHeader.tsx index b99e3289ffc..44f961e5ac4 100644 --- a/apps/web/src/components/AccountDrawer/AuthenticatedHeader.tsx +++ b/apps/web/src/components/AccountDrawer/AuthenticatedHeader.tsx @@ -22,6 +22,7 @@ import useENSName from 'hooks/useENSName' import { useIsUniExtensionAvailable } from 'hooks/useUniswapWalletOptions' import styled from 'lib/styled-components' import { useCallback, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' import { useNavigate } from 'react-router-dom' import { useOpenModal, useToggleModal } from 'state/application/hooks' @@ -34,7 +35,6 @@ import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledCh import { setIsTestnetModeEnabled } from 'uniswap/src/features/settings/slice' import Trace from 'uniswap/src/features/telemetry/Trace' import { useUnitagByAddress } from 'uniswap/src/features/unitags/hooks' -import { Trans, t } from 'uniswap/src/i18n' import { isPathBlocked } from 'utils/blockedPaths' import { NumberType, useFormatter } from 'utils/formatNumbers' @@ -99,6 +99,7 @@ const PortfolioDrawerContainer = styled(Column)` export default function AuthenticatedHeader({ account, openSettings }: { account: string; openSettings: () => void }) { const { disconnect } = useDisconnect() const { ENSName } = useENSName(account) + const { t } = useTranslation() const navigate = useNavigate() const openReceiveModal = useOpenModal({ name: ApplicationModal.RECEIVE_CRYPTO }) const shouldShowBuyFiatButton = !isPathBlocked('/buy') diff --git a/apps/web/src/components/AccountDrawer/GitVersionRow.tsx b/apps/web/src/components/AccountDrawer/GitVersionRow.tsx index d2038cf4abd..5c1b458f96d 100644 --- a/apps/web/src/components/AccountDrawer/GitVersionRow.tsx +++ b/apps/web/src/components/AccountDrawer/GitVersionRow.tsx @@ -1,8 +1,8 @@ import Tooltip from 'components/Tooltip' import useCopyClipboard from 'hooks/useCopyClipboard' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const Container = styled.div` width: 100%; diff --git a/apps/web/src/components/AccountDrawer/LanguageMenu.tsx b/apps/web/src/components/AccountDrawer/LanguageMenu.tsx index 297f3b79f95..fd2b3344eef 100644 --- a/apps/web/src/components/AccountDrawer/LanguageMenu.tsx +++ b/apps/web/src/components/AccountDrawer/LanguageMenu.tsx @@ -2,12 +2,12 @@ import { InterfaceEventName } from '@uniswap/analytics-events' import { SlideOutMenu } from 'components/AccountDrawer/SlideOutMenu' import { MenuColumn, MenuItem } from 'components/AccountDrawer/shared' import { useLocationLinkProps } from 'hooks/useLocationLinkProps' +import { Trans } from 'react-i18next' import { useDispatch } from 'react-redux' import { Language, WEB_SUPPORTED_LANGUAGES } from 'uniswap/src/features/language/constants' import { useCurrentLanguage, useLanguageInfo } from 'uniswap/src/features/language/hooks' import { setCurrentLanguage } from 'uniswap/src/features/settings/slice' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' function LanguageMenuItem({ language }: { language: Language }) { const currentLanguage = useCurrentLanguage() diff --git a/apps/web/src/components/AccountDrawer/LocalCurrencyMenu.tsx b/apps/web/src/components/AccountDrawer/LocalCurrencyMenu.tsx index 16925b4e515..df10d6598c6 100644 --- a/apps/web/src/components/AccountDrawer/LocalCurrencyMenu.tsx +++ b/apps/web/src/components/AccountDrawer/LocalCurrencyMenu.tsx @@ -4,9 +4,9 @@ import { getLocalCurrencyIcon } from 'constants/localCurrencies' import { useLocalCurrencyLinkProps } from 'hooks/useLocalCurrencyLinkProps' import styled from 'lib/styled-components' import { useMemo } from 'react' +import { Trans } from 'react-i18next' import { FiatCurrency, ORDERED_CURRENCIES } from 'uniswap/src/features/fiatCurrency/constants' import { useAppFiatCurrency } from 'uniswap/src/features/fiatCurrency/hooks' -import { Trans } from 'uniswap/src/i18n' const StyledLocalCurrencyIcon = styled.div` width: 20px; diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/ActivityRow.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/ActivityRow.tsx index aead7e847ae..9daef19ceb0 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/ActivityRow.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/ActivityRow.tsx @@ -19,6 +19,7 @@ import { } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import Trace from 'uniswap/src/features/telemetry/Trace' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' +import { isHash } from 'viem' const ActivityRowDescriptor = styled(ThemedText.BodySmall)` color: ${({ theme }) => theme.neutral2}; @@ -57,13 +58,13 @@ export function ActivityRow({ activity }: { activity: Activity }) { chainId, title, descriptor, - logos, otherAccount, currencies, hash, prefixIconSrc, suffixIconSrc, offchainOrderDetails, + logos, type, } = activity @@ -82,9 +83,13 @@ export function ActivityRow({ activity }: { activity: Activity }) { }) return } + // Do not allow FOR activity to be opened until confirmed on chain + if (activity.status === TransactionStatus.Pending && !isHash(hash)) { + return + } - window.open(getExplorerLink(chainId, hash, ExplorerDataType.TRANSACTION), '_blank') - }, [activity?.logos, chainId, hash, offchainOrderDetails, openOffchainActivityModal]) + window.open(explorerUrl, '_blank') + }, [activity?.logos, activity.status, explorerUrl, hash, offchainOrderDetails, openOffchainActivityModal]) return ( ({ useCreateCancelTransactionRequest: jest.fn(), })) +jest.mock('utilities/src/logger/logger', () => ({ + logger: { + error: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + debug: jest.fn(), + }, +})) + describe('CancelOrdersDialog', () => { it('should render order cancel correctly', async () => { const mockOnCancel = jest.fn() diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/CancelOrdersDialog.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/CancelOrdersDialog.tsx index 41454ebc4b0..f8df8867cee 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/CancelOrdersDialog.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/CancelOrdersDialog.tsx @@ -8,15 +8,15 @@ import Row from 'components/deprecated/Row' import { DetailLineItem } from 'components/swap/DetailLineItem' import styled, { useTheme } from 'lib/styled-components' import { Slash } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { SignatureType, UniswapXOrderDetails } from 'state/signatures/types' import { ExternalLink, ThemedText } from 'theme/components' -import { Flex } from 'ui/src' +import { Flex, Text } from 'ui/src' import { Modal } from 'uniswap/src/components/modals/Modal' import { nativeOnChain } from 'uniswap/src/constants/tokens' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { ModalName } from 'uniswap/src/features/telemetry/constants' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Plural, Trans, t } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { NumberType, useFormatter } from 'utils/formatNumbers' @@ -82,6 +82,7 @@ export function CancelOrdersDialog( onConfirm: () => void }, ) { + const { t } = useTranslation() const { orders, cancelState, cancelTxHash, onConfirm, onCancel } = props const { title, icon } = useCancelOrdersDialogContent(cancelState, orders) @@ -128,11 +129,7 @@ export function CancelOrdersDialog( title={title} description={ - + {t('swap.cancel.cannotExecute', { count: orders.length })} } diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainActivityModal.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainActivityModal.tsx index d0ac2e55ed0..a4e2e4ed4da 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainActivityModal.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainActivityModal.tsx @@ -28,6 +28,7 @@ import { useAtomValue, useUpdateAtom } from 'jotai/utils' import styled, { useTheme } from 'lib/styled-components' import { ReactNode, useCallback, useMemo, useState } from 'react' import { ArrowDown, X } from 'react-feather' +import { Trans } from 'react-i18next' import { useOrder } from 'state/signatures/hooks' import { SignatureType, UniswapXOrderDetails } from 'state/signatures/types' import { Divider, ThemedText } from 'theme/components' @@ -36,7 +37,6 @@ import { Modal } from 'uniswap/src/components/modals/Modal' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { InterfaceEventNameLocal, ModalName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' import { CurrencyField } from 'uniswap/src/types/currency' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { logger } from 'utilities/src/logger/logger' @@ -172,7 +172,6 @@ function getOrderTitle(order: UniswapXOrderDetails): ReactNode { export function OrderContent({ order, - logos, onCancel, }: { order: UniswapXOrderDetails @@ -230,7 +229,6 @@ export function OrderContent({ {getOrderTitle(order)} diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainOrderLineItem.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainOrderLineItem.tsx index 9b2a6f066c4..18049fe84a2 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainOrderLineItem.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/OffchainOrderLineItem.tsx @@ -2,9 +2,9 @@ import { Currency, CurrencyAmount, Price } from '@uniswap/sdk-core' import { formatTimestamp } from 'components/AccountDrawer/MiniPortfolio/formatTimestamp' import { DetailLineItem, LineItemData } from 'components/swap/DetailLineItem' import TradePrice from 'components/swap/TradePrice' +import { Trans } from 'react-i18next' import { UniswapXOrderDetails } from 'state/signatures/types' import { ExternalLink } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' import { ellipseMiddle } from 'utilities/src/addresses' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/CancelOrdersDialog.test.tsx.snap b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/CancelOrdersDialog.test.tsx.snap index 0d166ca2f84..acb65350ba5 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/CancelOrdersDialog.test.tsx.snap +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/CancelOrdersDialog.test.tsx.snap @@ -561,7 +561,12 @@ exports[`CancelOrdersDialog should render limit order text 1`] = `
- Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed? + + Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed? +
@@ -1180,7 +1185,12 @@ exports[`CancelOrdersDialog should render order cancel correctly 1`] = `
- Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed? + + Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed? +
diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/OffchainActivityModal.test.tsx.snap b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/OffchainActivityModal.test.tsx.snap index 599221e9ea3..7c841324351 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/OffchainActivityModal.test.tsx.snap +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/__snapshots__/OffchainActivityModal.test.tsx.snap @@ -7,7 +7,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` min-width: 0; } -.c6 { +.c4 { color: #222222; -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; @@ -15,7 +15,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` letter-spacing: -0.01em; } -.c7 { +.c5 { color: #7D7D7D; -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; @@ -23,14 +23,14 @@ exports[`OrderContent should render without error, filled order 1`] = ` letter-spacing: -0.01em; } -.c13 { +.c11 { -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; -ms-letter-spacing: -0.01em; letter-spacing: -0.01em; } -.c18 { +.c16 { -webkit-text-decoration: none; text-decoration: none; cursor: pointer; @@ -41,15 +41,15 @@ exports[`OrderContent should render without error, filled order 1`] = ` font-weight: 500; } -.c18:hover { +.c16:hover { opacity: 0.6; } -.c18:active { +.c16:active { opacity: 0.4; } -.c8 { +.c6 { width: 100%; height: 1px; border-width: 0; @@ -75,7 +75,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` gap: 12px; } -.c11 { +.c9 { width: 100%; display: -webkit-box; display: -webkit-flex; @@ -107,7 +107,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` justify-content: flex-start; } -.c10 { +.c8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -122,7 +122,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` gap: 12px; } -.c12 { +.c10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -137,7 +137,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` gap: 4px; } -.c14 { +.c12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -152,17 +152,17 @@ exports[`OrderContent should render without error, filled order 1`] = ` gap: 8px; } -.c15 { +.c13 { cursor: auto; color: #7D7D7D; } -.c16 { +.c14 { text-align: right; overflow-wrap: break-word; } -.c17 { +.c15 { background-color: transparent; border: none; cursor: pointer; @@ -194,39 +194,6 @@ exports[`OrderContent should render without error, filled order 1`] = ` user-select: text; } -.c4 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c4 img { - width: 19px; - height: 40px; - object-fit: cover; -} - -.c4 img:first-child { - border-radius: 20px 0 0 20px; - object-position: 0 0; -} - -.c4 img:last-child { - border-radius: 0 20px 20px 0; - object-position: 100% 0; -} - -.c5 { - width: 20px; - height: 40px; - border-radius: 50%; -} - .c3 { display: -webkit-box; display: -webkit-flex; @@ -241,7 +208,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` left: 0; } -.c9 { +.c7 { margin: 28px 0; } @@ -269,19 +236,56 @@ exports[`OrderContent should render without error, filled order 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
@@ -289,34 +293,34 @@ exports[`OrderContent should render without error, filled order 1`] = ` class="c0" >
Order executed
Mock Date
252.074 @@ -324,7 +328,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` DAI
-
@@ -353,16 +357,16 @@ exports[`OrderContent should render without error, filled order 1`] = ` />
0.10684 @@ -370,7 +374,7 @@ exports[`OrderContent should render without error, filled order 1`] = ` WETH
-
@@ -379,29 +383,29 @@ exports[`OrderContent should render without error, filled order 1`] = `
Rate
252.074 @@ -1410,7 +1422,7 @@ exports[`OrderContent should render without error, open order 1`] = ` DAI
-
@@ -1439,16 +1451,16 @@ exports[`OrderContent should render without error, open order 1`] = ` />
0.10684 @@ -1456,7 +1468,7 @@ exports[`OrderContent should render without error, open order 1`] = ` WETH
-
@@ -1465,29 +1477,29 @@ exports[`OrderContent should render without error, open order 1`] = `
Rate
diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseLocal.ts b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseLocal.ts index b9c700246d4..06e0d8af0a5 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseLocal.ts +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseLocal.ts @@ -37,7 +37,7 @@ import { nativeOnChain } from 'uniswap/src/constants/tokens' import { TransactionStatus } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' import { isAddress } from 'utilities/src/addresses' import { logger } from 'utilities/src/logger/logger' import { NumberType, useFormatter } from 'utils/formatNumbers' @@ -57,25 +57,25 @@ function buildCurrencyDescriptor( input: parseFloat(CurrencyAmount.fromRawAmount(currencyA, amtA).toSignificant()), type: NumberType.TokenNonTx, }) - : t('common.unknown') + : i18n.t('common.unknown') const symbolA = currencyA?.symbol ? ` ${currencyA?.symbol}` : '' const formattedB = currencyB ? formatNumber({ input: parseFloat(CurrencyAmount.fromRawAmount(currencyB, amtB).toSignificant()), type: NumberType.TokenNonTx, }) - : t('common.unknown') + : i18n.t('common.unknown') const symbolB = currencyB?.symbol ? ` ${currencyB?.symbol}` : '' const amountWithSymbolA = `${formattedA}${symbolA}` const amountWithSymbolB = `${formattedB}${symbolB}` return isSwap - ? t('activity.transaction.swap.descriptor', { + ? i18n.t('activity.transaction.swap.descriptor', { amountWithSymbolA, amountWithSymbolB, }) - : t('activity.transaction.tokens.descriptor', { + : i18n.t('activity.transaction.tokens.descriptor', { amountWithSymbolA, amountWithSymbolB, }) @@ -117,13 +117,13 @@ async function parseBridge( input: parseFloat(CurrencyAmount.fromRawAmount(tokenIn, bridge.inputCurrencyAmountRaw).toSignificant()), type: NumberType.TokenNonTx, }) - : t('common.unknown') + : i18n.t('common.unknown') const outputAmount = tokenOut ? formatNumber({ input: parseFloat(CurrencyAmount.fromRawAmount(tokenOut, bridge.outputCurrencyAmountRaw).toSignificant()), type: NumberType.TokenNonTx, }) - : t('common.unknown') + : i18n.t('common.unknown') return { descriptor: getBridgeDescriptor({ tokenIn, tokenOut, inputAmount, outputAmount }), chainId: inputChainId, @@ -163,7 +163,7 @@ async function parseApproval( status: TransactionStatus, ): Promise> { const currency = await getCurrency(approval.tokenAddress, chainId) - const descriptor = currency?.symbol ?? currency?.name ?? t('common.unknown') + const descriptor = currency?.symbol ?? currency?.name ?? i18n.t('common.unknown') return { title: getActivityTitle( TransactionType.APPROVAL, @@ -237,9 +237,9 @@ async function parseMigrateCreateV3( getCurrency(lp.baseCurrencyId, chainId), getCurrency(lp.quoteCurrencyId, chainId), ]) - const baseSymbol = baseCurrency?.symbol ?? t('common.unknown') - const quoteSymbol = quoteCurrency?.symbol ?? t('common.unknown') - const descriptor = t('activity.transaction.tokens.descriptor', { + const baseSymbol = baseCurrency?.symbol ?? i18n.t('common.unknown') + const quoteSymbol = quoteCurrency?.symbol ?? i18n.t('common.unknown') + const descriptor = i18n.t('activity.transaction.tokens.descriptor', { amountWithSymbolA: baseSymbol, amountWithSymbolB: quoteSymbol, }) @@ -259,11 +259,11 @@ async function parseSend( input: parseFloat(CurrencyAmount.fromRawAmount(currency, amount).toSignificant()), type: NumberType.TokenNonTx, }) - : t('common.unknown') + : i18n.t('common.unknown') const otherAccount = isAddress(recipient) || undefined return { - descriptor: t('activity.transaction.send.descriptor', { + descriptor: i18n.t('activity.transaction.send.descriptor', { amountWithSymbol: `${formattedAmount} ${currency?.symbol}`, walletAddress: recipient, }), diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseRemote.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseRemote.tsx index 927a3bbddca..24e41364e85 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseRemote.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/parseRemote.tsx @@ -43,7 +43,7 @@ import { TransactionType, } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' import { isAddress, isSameAddress } from 'utilities/src/addresses' import { logger } from 'utilities/src/logger/logger' import { NumberType, useFormatter } from 'utils/formatNumbers' @@ -67,34 +67,34 @@ const ENS_IMG = const COMMON_CONTRACTS: { [key: string]: Partial | undefined } = { [UNI_ADDRESSES[UniverseChainId.Mainnet].toLowerCase()]: { - title: t('common.uniGovernance'), - descriptor: t('common.contractInteraction'), + title: i18n.t('common.uniGovernance'), + descriptor: i18n.t('common.contractInteraction'), logos: [UNI_IMG], }, // TODO(cartcrom): Add permit2-specific logo '0x000000000022d473030f116ddee9f6b43ac78ba3': { - title: t('common.permit2'), - descriptor: t('common.uniswapProtocol'), + title: i18n.t('common.permit2'), + descriptor: i18n.t('common.uniswapProtocol'), logos: [UNI_IMG], }, '0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41': { - title: t('common.ethereumNameService'), - descriptor: t('common.publicResolver'), + title: i18n.t('common.ethereumNameService'), + descriptor: i18n.t('common.publicResolver'), logos: [ENS_IMG], }, '0x58774bb8acd458a640af0b88238369a167546ef2': { - title: t('common.ethereumNameService'), - descriptor: t('common.dnsRegistrar'), + title: i18n.t('common.ethereumNameService'), + descriptor: i18n.t('common.dnsRegistrar'), logos: [ENS_IMG], }, '0x084b1c3c81545d370f3634392de611caabff8148': { - title: t('common.ethereumNameService'), - descriptor: t('common.reverseRegistrar'), + title: i18n.t('common.ethereumNameService'), + descriptor: i18n.t('common.reverseRegistrar'), logos: [ENS_IMG], }, '0x283af0b28c62c092c9727f1ee09c02ca627eb7f5': { - title: t('common.ethereumNameService'), - descriptor: t('common.ethRegistrarController'), + title: i18n.t('common.ethereumNameService'), + descriptor: i18n.t('common.ethRegistrarController'), logos: [ENS_IMG], }, } @@ -167,14 +167,14 @@ function getSwapTitle(sent: TokenTransferPartsFragment, received: TokenTransferP sent.tokenStandard === NATIVE_CHAIN_ID && isSameAddress(nativeOnChain(supportedSentChain).wrapped.address, received.asset.address) ) { - return t('common.wrapped') + return i18n.t('common.wrapped') } else if ( received.tokenStandard === NATIVE_CHAIN_ID && isSameAddress(nativeOnChain(supportedReceivedChain).wrapped.address, received.asset.address) ) { - return t('common.unwrapped') + return i18n.t('common.unwrapped') } else { - return t('common.swapped') + return i18n.t('common.swapped') } } @@ -189,7 +189,7 @@ function getSwapDescriptor({ tokenOut: TokenAssetPartsFragment inputAmount: string }) { - return t('activity.transaction.swap.descriptor', { + return i18n.t('activity.transaction.swap.descriptor', { amountWithSymbolA: `${inputAmount} ${tokenIn.symbol}`, amountWithSymbolB: `${outputAmount} ${tokenOut.symbol}`, }) @@ -229,12 +229,12 @@ export function getBridgeDescriptor({ - {inputAmount} {tokenIn?.symbol ?? t('common.unknown')} + {inputAmount} {tokenIn?.symbol ?? i18n.t('common.unknown')} - {outputAmount} {tokenOut?.symbol ?? t('common.unknown')} + {outputAmount} {tokenOut?.symbol ?? i18n.t('common.unknown')} ) @@ -313,7 +313,7 @@ function parseSwap(changes: TransactionChanges, formatNumberOrString: FormatNumb if (changes.NftTransfer.length > 0 && changes.TokenTransfer.length === 1) { const collectionCounts = getCollectionCounts(changes.NftTransfer) - const title = changes.NftTransfer[0].direction === 'IN' ? t('common.bought') : t('common.sold') + const title = changes.NftTransfer[0].direction === 'IN' ? i18n.t('common.bought') : i18n.t('common.sold') const descriptor = Object.entries(collectionCounts) .map(([collectionName, count]) => `${count} ${collectionName}`) .join() @@ -333,7 +333,7 @@ function parseSwap(changes: TransactionChanges, formatNumberOrString: FormatNumb } } } - return { title: t('common.unknownSwap') } + return { title: i18n.t('common.unknownSwap') } } function parseBridge(changes: TransactionChanges, formatNumberOrString: FormatNumberOrStringFunctionType) { @@ -347,7 +347,7 @@ function parseBridge(changes: TransactionChanges, formatNumberOrString: FormatNu currencies: [gqlToCurrency(sent.asset), gqlToCurrency(received.asset)], } } - return { title: t('common.unknownBridge') } + return { title: i18n.t('common.unknownBridge') } } /** @@ -360,7 +360,7 @@ function parseLend(changes: TransactionChanges, formatNumberOrString: FormatNumb if (native && erc20 && gqlToCurrency(native)?.wrapped.address === gqlToCurrency(erc20)?.wrapped.address) { return parseSwap(changes, formatNumberOrString) } - return { title: t('common.unknownLend') } + return { title: i18n.t('common.unknownLend') } } function parseSwapOrder( @@ -425,12 +425,13 @@ export function offchainOrderDetailsFromGraphQLTransactionActivity( function parseApprove(changes: TransactionChanges) { if (changes.TokenApproval.length === 1) { - const title = parseInt(changes.TokenApproval[0].quantity) === 0 ? t('common.revokedApproval') : t('common.approved') + const title = + parseInt(changes.TokenApproval[0].quantity) === 0 ? i18n.t('common.revokedApproval') : i18n.t('common.approved') const descriptor = `${changes.TokenApproval[0].asset.symbol}` const currencies = [gqlToCurrency(changes.TokenApproval[0].asset)] return { title, descriptor, currencies } } - return { title: t('common.unknownApproval') } + return { title: i18n.t('common.unknownApproval') } } function parseLPTransfers(changes: TransactionChanges, formatNumberOrString: FormatNumberOrStringFunctionType) { @@ -441,7 +442,7 @@ function parseLPTransfers(changes: TransactionChanges, formatNumberOrString: For const tokenBQuantity = formatNumberOrString({ input: poolTokenB.quantity, type: NumberType.TokenNonTx }) return { - descriptor: t('activity.transaction.tokens.descriptor', { + descriptor: i18n.t('activity.transaction.tokens.descriptor', { amountWithSymbolA: `${tokenAQuanitity} ${poolTokenA.asset.symbol}`, amountWithSymbolB: `${tokenBQuantity} ${poolTokenB.asset.symbol}`, }), @@ -465,9 +466,9 @@ function parseSendReceive( (changes.TokenTransfer.length === 1 || changes.TokenTransfer.length === 2) ) { if (assetActivity.details.type === TransactionType.Send) { - return { title: t('common.addedLiquidity'), ...parseLPTransfers(changes, formatNumberOrString) } + return { title: i18n.t('common.addedLiquidity'), ...parseLPTransfers(changes, formatNumberOrString) } } else { - return { title: t('common.removedLiquidity'), ...parseLPTransfers(changes, formatNumberOrString) } + return { title: i18n.t('common.removedLiquidity'), ...parseLPTransfers(changes, formatNumberOrString) } } } @@ -493,8 +494,8 @@ function parseSendReceive( if (transfer.direction === 'IN') { return isMoonpayPurchase && transfer.__typename === 'TokenTransfer' ? { - title: t('common.purchased'), - descriptor: t('activity.transaction.swap.descriptor', { + title: i18n.t('common.purchased'), + descriptor: i18n.t('activity.transaction.swap.descriptor', { amountWithSymbolA: `${amount} ${assetName}`, amountWithSymbolB: formatNumberOrString({ input: getTransactedValue(transfer.transactedValue), @@ -505,8 +506,8 @@ function parseSendReceive( currencies, } : { - title: t('common.received'), - descriptor: t('activity.transaction.receive.descriptor', { + title: i18n.t('common.received'), + descriptor: i18n.t('activity.transaction.receive.descriptor', { amountWithSymbol: `${amount} ${assetName}`, walletAddress: otherAccount, }), @@ -515,8 +516,8 @@ function parseSendReceive( } } else { return { - title: t('common.sent'), - descriptor: t('activity.transaction.send.descriptor', { + title: i18n.t('common.sent'), + descriptor: i18n.t('activity.transaction.send.descriptor', { amountWithSymbol: `${amount} ${assetName}`, walletAddress: otherAccount, }), @@ -525,7 +526,7 @@ function parseSendReceive( } } } - return { title: t('common.unknownSend') } + return { title: i18n.t('common.unknownSend') } } function parseMint( @@ -543,16 +544,16 @@ function parseMint( (changes.TokenTransfer.length === 1 || changes.TokenTransfer.length === 2) ) { if (callsV3PositionManagerContract(assetActivity)) { - return { title: t('common.addedLiquidity'), ...parseLPTransfers(changes, formatNumberOrString) } + return { title: i18n.t('common.addedLiquidity'), ...parseLPTransfers(changes, formatNumberOrString) } } if (callsV4PositionManagerContract(assetActivity)) { - return { title: t('pool.createdPosition'), ...parseLPTransfers(changes, formatNumberOrString) } + return { title: i18n.t('pool.createdPosition'), ...parseLPTransfers(changes, formatNumberOrString) } } } - return { title: t('common.minted'), descriptor: `${collectionMap[collectionName]} ${collectionName}` } + return { title: i18n.t('common.minted'), descriptor: `${collectionMap[collectionName]} ${collectionName}` } } - return { title: t('common.unknownMint') } + return { title: i18n.t('common.unknownMint') } } function parseUnknown( @@ -560,7 +561,7 @@ function parseUnknown( _formatNumberOrString: FormatNumberOrStringFunctionType, assetActivity: TransactionActivity, ) { - return { title: t('common.contractInteraction'), ...COMMON_CONTRACTS[assetActivity.details.to.toLowerCase()] } + return { title: i18n.t('common.contractInteraction'), ...COMMON_CONTRACTS[assetActivity.details.to.toLowerCase()] } } type TransactionTypeParser = ( @@ -648,10 +649,10 @@ function parseFiatOnRampTransaction(activity: TransactionActivity | FiatOnRampAc timestamp: activity.timestamp, logos: [onRampTransfer.token.project?.logoUrl], currencies: [gqlToCurrency(onRampTransfer.token)], - title: t('fiatOnRamp.purchasedOn', { + title: i18n.t('fiatOnRamp.purchasedOn', { serviceProvider: onRampTransfer.serviceProvider.name, }), - descriptor: t('fiatOnRamp.exchangeRate', { + descriptor: i18n.t('fiatOnRamp.exchangeRate', { outputAmount: onRampTransfer.amount, outputSymbol: onRampTransfer.token.symbol, inputAmount: onRampTransfer.sourceAmount, @@ -678,10 +679,10 @@ function parseFiatOnRampTransaction(activity: TransactionActivity | FiatOnRampAc timestamp: activity.timestamp, logos: [onRampTransfer.token.project?.logoUrl], currencies: [gqlToCurrency(onRampTransfer.token)], - title: t('fiatOnRamp.purchasedOn', { + title: i18n.t('fiatOnRamp.purchasedOn', { serviceProvider: onRampTransfer.serviceProvider.name, }), - descriptor: t('fiatOnRamp.exchangeRate', { + descriptor: i18n.t('fiatOnRamp.exchangeRate', { outputAmount: onRampTransfer.amount, outputSymbol: onRampTransfer.token.symbol, inputAmount: onRampTransfer.sourceAmount, diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/utils.ts b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/utils.ts index 2dde36d985c..e6328b81f10 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/utils.ts +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Activity/utils.ts @@ -20,7 +20,7 @@ import { TransactionStatus } from 'uniswap/src/data/graphql/uniswap-data-api/__g import { UniverseChainId } from 'uniswap/src/features/chains/types' import { InterfaceEventNameLocal } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' import { getContract } from 'utilities/src/contracts/getContract' import { logger } from 'utilities/src/logger/logger' import { useAsyncData } from 'utilities/src/react/hooks' @@ -85,11 +85,11 @@ export const createGroups = (activities: Array = [], hideSpam = false) .map((year) => ({ title: year, transactions: yearMap[year] })) const transactionGroups: Array = [ - { title: t('common.pending'), transactions: pending.sort(sortActivities) }, - { title: t('common.today'), transactions: today.sort(sortActivities) }, - { title: t('common.thisWeek'), transactions: currentWeek.sort(sortActivities) }, - { title: t('common.thisMonth'), transactions: last30Days.sort(sortActivities) }, - { title: t('common.thisYear'), transactions: currentYear.sort(sortActivities) }, + { title: i18n.t('common.pending'), transactions: pending.sort(sortActivities) }, + { title: i18n.t('common.today'), transactions: today.sort(sortActivities) }, + { title: i18n.t('common.thisWeek'), transactions: currentWeek.sort(sortActivities) }, + { title: i18n.t('common.thisMonth'), transactions: last30Days.sort(sortActivities) }, + { title: i18n.t('common.thisYear'), transactions: currentYear.sort(sortActivities) }, ...sortedYears, ] diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/EmptyWallet.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/EmptyWallet.tsx index db2f01110dc..89f77e27e9a 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/EmptyWallet.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/EmptyWallet.tsx @@ -1,12 +1,12 @@ import styled from 'lib/styled-components' import { useCallback, useMemo } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { Flex, Text, useIsDarkMode } from 'ui/src' import { CRYPTO_PURCHASE_BACKGROUND_DARK, CRYPTO_PURCHASE_BACKGROUND_LIGHT } from 'ui/src/assets' import { ArrowDownCircle } from 'ui/src/components/icons/ArrowDownCircle' import { Buy as BuyIcon } from 'ui/src/components/icons/Buy' import { ActionCard, ActionCardItem } from 'uniswap/src/components/misc/ActionCard' import { ElementName } from 'uniswap/src/features/telemetry/constants' -import { Trans, t } from 'uniswap/src/i18n' export const EmptyWallet = ({ handleBuyCryptoClick, @@ -15,6 +15,7 @@ export const EmptyWallet = ({ handleBuyCryptoClick: () => void handleReceiveCryptoClick: () => void }) => { + const { t } = useTranslation() const isDarkMode = useIsDarkMode() const BackgroundImageWrapperCallback = useCallback( @@ -46,7 +47,7 @@ export const EmptyWallet = ({ onPress: handleReceiveCryptoClick, }, ], - [BackgroundImageWrapperCallback, handleBuyCryptoClick, handleReceiveCryptoClick], + [BackgroundImageWrapperCallback, handleBuyCryptoClick, handleReceiveCryptoClick, t], ) return ( diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/ExpandoRow.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/ExpandoRow.tsx index 31b066971e3..9d892efcad6 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/ExpandoRow.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/ExpandoRow.tsx @@ -3,8 +3,8 @@ import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { PropsWithChildren } from 'react' import { ChevronDown } from 'react-feather' +import { useTranslation } from 'react-i18next' import { ThemedText } from 'theme/components' -import { t } from 'uniswap/src/i18n' const ExpandIcon = styled(ChevronDown)<{ $expanded: boolean }>` color: ${({ theme }) => theme.neutral2}; @@ -24,15 +24,17 @@ const ToggleButton = styled(Row)` } ` -const Wrapper = styled(Column)<{ numItems: number; isExpanded: boolean }>` - height: ${({ numItems, isExpanded }) => (isExpanded ? numItems * 68 + 'px' : 0)}; +const Wrapper = styled(Column)<{ isExpanded: boolean }>` + height: ${({ isExpanded }) => (isExpanded ? '100%' : 0)}; transition: ${({ theme }) => `height ${theme.transition.duration.medium} ease-in-out`}; overflow: hidden; ` // TODO(WEB-1982): Replace this component to use `components/Expand` under the hood type ExpandoRowProps = PropsWithChildren<{ title?: string; numItems: number; isExpanded: boolean; toggle: () => void }> -export function ExpandoRow({ title = t('common.hidden'), numItems, isExpanded, toggle, children }: ExpandoRowProps) { +export function ExpandoRow({ title, numItems, isExpanded, toggle, children }: ExpandoRowProps) { + const { t } = useTranslation() + const titleWithFallback = title ?? t('common.hidden') if (numItems === 0) { return null } @@ -40,7 +42,7 @@ export function ExpandoRow({ title = t('common.hidden'), numItems, isExpanded, t <> - {`${title} (${numItems})`} + {`${titleWithFallback} (${numItems})`} @@ -49,9 +51,7 @@ export function ExpandoRow({ title = t('common.hidden'), numItems, isExpanded, t - - {children} - + {children} ) } diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/ExtensionDeeplinks.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/ExtensionDeeplinks.tsx index 8b545ed1744..40d7b7b7fc6 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/ExtensionDeeplinks.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/ExtensionDeeplinks.tsx @@ -8,15 +8,14 @@ import { ExtensionRequestMethods, useUniswapExtensionConnector } from 'component import { useUpdateAtom } from 'jotai/utils' import { useTheme } from 'lib/styled-components' import { useEffect, useState } from 'react' +import { useTranslation } from 'react-i18next' import { Button, Flex, Image, Text } from 'ui/src' import { UNISWAP_LOGO } from 'ui/src/assets' import { ArrowRightToLine } from 'ui/src/components/icons/ArrowRightToLine' import { RotatableChevron } from 'ui/src/components/icons/RotatableChevron' import { TimePast } from 'ui/src/components/icons/TimePast' - import { iconSizes } from 'ui/src/theme/iconSizes' import { useGetPositionsQuery } from 'uniswap/src/data/rest/getPositions' -import { t } from 'uniswap/src/i18n' const UnreadIndicator = () => { const theme = useTheme() @@ -53,6 +52,7 @@ const DeepLinkButton = ({ Icon, Label, onPress }: { Icon: JSX.Element; Label: st } export function ExtensionDeeplinks({ account }: { account: string }) { + const { t } = useTranslation() const theme = useTheme() const uniswapExtensionConnector = useUniswapExtensionConnector() const accountDrawer = useAccountDrawer() diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitDetailActivityRow.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitDetailActivityRow.tsx index 56c90e1d388..8bcf410efb1 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitDetailActivityRow.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitDetailActivityRow.tsx @@ -14,10 +14,10 @@ import { useScreenSize } from 'hooks/screenSize/useScreenSize' import styled, { useTheme } from 'lib/styled-components' import { useMemo, useState } from 'react' import { ArrowRight } from 'react-feather' +import { Trans } from 'react-i18next' import { EllipsisStyle, ThemedText } from 'theme/components' import { UniswapXOrderStatus } from 'types/uniswapx' import { Checkbox } from 'ui/src' -import { Trans } from 'uniswap/src/i18n' import { useFormatter } from 'utils/formatNumbers' const StyledPortfolioRow = styled(PortfolioRow)` diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitsMenu.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitsMenu.tsx index 2add5a7279f..bfc4f8d7964 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitsMenu.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/LimitsMenu.tsx @@ -15,8 +15,8 @@ import Column from 'components/deprecated/Column' import { LimitDisclaimer } from 'components/swap/LimitDisclaimer' import styled from 'lib/styled-components' import { useCallback, useMemo, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { UniswapXOrderDetails } from 'state/signatures/types' -import { Trans, t } from 'uniswap/src/i18n' const Container = styled(Column)` height: 100%; @@ -34,6 +34,7 @@ const StyledLimitsDisclaimer = styled(LimitDisclaimer)` ` export function LimitsMenu({ onClose, account }: { account: string; onClose: () => void }) { + const { t } = useTranslation() const { openLimitOrders } = useOpenLimitOrders(account) const [selectedOrdersByHash, setSelectedOrdersByHash] = useState>({}) const [cancelState, setCancelState] = useState(CancellationState.NOT_STARTED) diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/OpenLimitOrdersButton.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/OpenLimitOrdersButton.tsx index 6554587c961..91775ff3b1f 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/OpenLimitOrdersButton.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Limits/OpenLimitOrdersButton.tsx @@ -2,7 +2,7 @@ import { useOpenLimitOrders } from 'components/AccountDrawer/MiniPortfolio/Activ import { TabButton } from 'components/AccountDrawer/MiniPortfolio/shared' import { useTheme } from 'lib/styled-components' import { Clock } from 'react-feather' -import { Trans, useTranslation } from 'uniswap/src/i18n' +import { Trans, useTranslation } from 'react-i18next' function getExtraWarning(openLimitOrders: any[]) { if (openLimitOrders.length >= 100) { diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/MiniPortfolio.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/MiniPortfolio.tsx index 3d51aa434a1..2d3d299b655 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/MiniPortfolio.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/MiniPortfolio.tsx @@ -9,14 +9,14 @@ import { LoaderV2 } from 'components/Icons/LoadingSpinner' import Column from 'components/deprecated/Column' import { AutoRow } from 'components/deprecated/Row' import { useDisableNFTRoutes } from 'hooks/useDisableNFTRoutes' -import { useIsNftPage } from 'hooks/useIsNftPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import { atom, useAtom } from 'jotai' import styled, { useTheme } from 'lib/styled-components' import { useEffect, useState } from 'react' +import { Trans } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' const lastPageAtom = atom(0) @@ -99,10 +99,10 @@ const Pages: Array = [ export default function MiniPortfolio({ account }: { account: string }) { const theme = useTheme() - const isNftPage = useIsNftPage() + const isNFTPage = useIsPage(PageType.NFTS) const [lastPage, setLastPage] = useAtom(lastPageAtom) // Resumes at the last viewed page, unless you are on an NFT page - const [currentPage, setCurrentPage] = useState(isNftPage ? 1 : lastPage) + const [currentPage, setCurrentPage] = useState(isNFTPage ? 1 : lastPage) useEffect(() => void setLastPage(currentPage), [currentPage, setLastPage]) const shouldDisableNFTRoutes = useDisableNFTRoutes() diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTItem.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTItem.tsx index 999e0fe18c4..8b91ec198f9 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTItem.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTItem.tsx @@ -9,6 +9,7 @@ import { NftCard } from 'nft/components/card' import { detailsHref } from 'nft/components/card/utils' import { VerifiedIcon } from 'nft/components/icons' import { WalletAsset } from 'nft/types' +import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { ThemedText } from 'theme/components' import { capitalize } from 'tsafe' @@ -16,7 +17,6 @@ import { Chain } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/t import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { GqlChainId } from 'uniswap/src/features/chains/types' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { t } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { NumberType, useFormatter } from 'utils/formatNumbers' @@ -53,6 +53,7 @@ export function NFT({ mediaShouldBePlaying: boolean setCurrentTokenPlayingMedia: (tokenId: string | undefined) => void }) { + const { t } = useTranslation() const { isTestnetModeEnabled, gqlChains } = useEnabledChains() const accountDrawer = useAccountDrawer() const navigate = useNavigate() diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTTab.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTTab.tsx index 4489202a91e..9e09637c09c 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTTab.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/NFTs/NFTTab.tsx @@ -9,6 +9,7 @@ import { EmptyWalletModule } from 'nft/components/profile/view/EmptyWalletConten import { useProfilePageState, useSellAsset, useWalletCollections } from 'nft/hooks' import { ProfilePageStateType } from 'nft/types' import { useCallback, useState } from 'react' +import { useTranslation } from 'react-i18next' import InfiniteScroll from 'react-infinite-scroll-component' import { useNavigate } from 'react-router-dom' import { Gallery } from 'ui/src/components/icons/Gallery' @@ -16,7 +17,6 @@ import { Chain } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/t import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' -import { t } from 'uniswap/src/i18n' const StyledTabButton = styled(TabButton)` width: calc(100% - 32px); @@ -24,6 +24,7 @@ const StyledTabButton = styled(TabButton)` ` export default function NFTs({ account }: { account: string }) { + const { t } = useTranslation() const accountDrawer = useAccountDrawer() const navigate = useNavigate() const setSellPageState = useProfilePageState((state) => state.setProfilePageState) diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/PoolsTab.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/PoolsTab.tsx index 9273bec9bb3..1215aafe206 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/PoolsTab.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/PoolsTab.tsx @@ -12,13 +12,14 @@ import { useAccount } from 'hooks/useAccount' import { useSwitchChain } from 'hooks/useSwitchChain' import { EmptyWalletModule } from 'nft/components/profile/view/EmptyWalletContent' import { useCallback, useMemo, useReducer } from 'react' +import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { TouchableArea } from 'ui/src' import { useGetPositionsQuery } from 'uniswap/src/data/rest/getPositions' +import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' import Trace from 'uniswap/src/features/telemetry/Trace' -import { t } from 'uniswap/src/i18n' function isPositionInfo(position: PositionInfo | undefined): position is PositionInfo { return !!position @@ -34,10 +35,13 @@ function getPositionKey(position: PositionInfo) { } export default function Pools({ account }: { account: string }) { + const { t } = useTranslation() const isLPRedesignEnabled = useFeatureFlag(FeatureFlags.LPRedesign) + const { chains } = useEnabledChains() const { data, isLoading } = useGetPositionsQuery({ address: account, + chainIds: chains, positionStatuses: [PositionStatus.IN_RANGE, PositionStatus.OUT_OF_RANGE], protocolVersions: isLPRedesignEnabled ? [ProtocolVersion.V2, ProtocolVersion.V3, ProtocolVersion.V4] @@ -46,6 +50,7 @@ export default function Pools({ account }: { account: string }) { const { data: closedData } = useGetPositionsQuery({ address: account, + chainIds: chains, positionStatuses: [PositionStatus.CLOSED], protocolVersions: isLPRedesignEnabled ? [ProtocolVersion.V2, ProtocolVersion.V3, ProtocolVersion.V4] diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/UniExtensionPoolsMenu.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/UniExtensionPoolsMenu.tsx index c8a8ba7722c..ae6c5ecb6b6 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/UniExtensionPoolsMenu.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Pools/UniExtensionPoolsMenu.tsx @@ -2,7 +2,7 @@ import Pools from 'components/AccountDrawer/MiniPortfolio/Pools/PoolsTab' import { SlideOutMenu } from 'components/AccountDrawer/SlideOutMenu' import Column from 'components/deprecated/Column' import styled from 'lib/styled-components' -import { Trans } from 'uniswap/src/i18n' +import { Trans } from 'react-i18next' const Container = styled(Column)` height: 100%; diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/PortfolioLogo.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/PortfolioLogo.tsx index 04c26e10476..b9d32d8c14f 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/PortfolioLogo.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/PortfolioLogo.tsx @@ -1,19 +1,13 @@ import { Currency } from '@uniswap/sdk-core' -import blankTokenUrl from 'assets/svg/blank_token.svg' import { ReactComponent as UnknownStatus } from 'assets/svg/contract-interaction.svg' import Identicon from 'components/Identicon' -import { ChainLogo } from 'components/Logo/ChainLogo' import CurrencyLogo from 'components/Logo/CurrencyLogo' -import { - CircleLogoImage, - DoubleCurrencyLogo, - DoubleLogo, - L2LogoContainer, - SingleLogoContainer, -} from 'components/Logo/DoubleLogo' +import { DoubleCurrencyLogo } from 'components/Logo/DoubleLogo' import styled from 'lib/styled-components' import React, { memo } from 'react' -import { Flex, SpinningLoader, styled as TamaguiStyled } from 'ui/src' +import { Flex } from 'ui/src' +import { SplitLogo } from 'uniswap/src/components/CurrencyLogo/SplitLogo' +import { TokenLogo } from 'uniswap/src/components/CurrencyLogo/TokenLogo' import { SUPPORTED_TESTNET_CHAIN_IDS, UniverseChainId } from 'uniswap/src/features/chains/types' const UnknownContract = styled(UnknownStatus)` @@ -35,36 +29,11 @@ interface PortfolioLogoProps { images?: Array size?: number style?: React.CSSProperties - loading?: boolean customIcon?: React.ReactNode } -function SquareL2Logo({ chainId, size }: { chainId: UniverseChainId; size: number }) { - if (chainId === UniverseChainId.Mainnet) { - return null - } - - return ( - - - - ) -} - const LOGO_DEFAULT_SIZE = 40 -const AbsoluteCenteredElement = TamaguiStyled(Flex, { - position: 'absolute', - ml: 'auto', - mr: 'auto', - left: -4.5, - top: -4.5, -}) - -// TODO(WEB-5111): Replace currency logos on web with uniswap currency logos -/** - * Renders an image by prioritizing a list of sources, and then eventually a fallback contract icon - */ export const PortfolioLogo = memo(function PortfolioLogo(props: PortfolioLogoProps) { if (SUPPORTED_TESTNET_CHAIN_IDS.includes(props.chainId)) { return @@ -72,41 +41,39 @@ export const PortfolioLogo = memo(function PortfolioLogo(props: PortfolioLogoPro return ( - - {props.size && props.loading && ( - - - - )} - {getLogo(props)} - - {props.customIcon ? ( - - {props.customIcon} - - ) : ( - - )} + {getLogo(props)} ) }) -function getLogo({ accountAddress, currencies, images, size = LOGO_DEFAULT_SIZE }: PortfolioLogoProps) { +function getLogo({ + accountAddress, + currencies, + images, + chainId, + customIcon, + size = LOGO_DEFAULT_SIZE, +}: PortfolioLogoProps) { if (accountAddress) { return } - if (images && images?.length >= 2) { - return - } if (currencies && currencies.length) { - return + return } - if (images?.length === 1) { + if (images && images.length >= 2) { return ( - - - + ) } + if (images && images.length === 1) { + return + } return } diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/Tokens/TokensTab.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/Tokens/TokensTab.tsx index a8b0ea01091..2feca4367e6 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/Tokens/TokensTab.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/Tokens/TokensTab.tsx @@ -14,13 +14,13 @@ import { getTokenDetailsURL, gqlToCurrency } from 'graphql/data/util' import styled from 'lib/styled-components' import { EmptyWalletModule } from 'nft/components/profile/view/EmptyWalletContent' import { useCallback, useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { EllipsisStyle, ThemedText } from 'theme/components' import { Text, Tooltip } from 'ui/src' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { useHideSmallBalancesSetting, useHideSpamTokensSetting } from 'uniswap/src/features/settings/hooks' import Trace from 'uniswap/src/features/telemetry/Trace' -import { useTranslation } from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' import { NumberType, useFormatter } from 'utils/formatNumbers' import { splitHiddenTokens } from 'utils/splitHiddenTokens' diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/__snapshots__/PortfolioLogo.test.tsx.snap b/apps/web/src/components/AccountDrawer/MiniPortfolio/__snapshots__/PortfolioLogo.test.tsx.snap index b1b6c9715ba..c90748a851f 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/__snapshots__/PortfolioLogo.test.tsx.snap +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/__snapshots__/PortfolioLogo.test.tsx.snap @@ -1,62 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`PortfolioLogo renders with L2 icon 1`] = ` -.c1 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c1 img { - width: 19px; - height: 40px; - object-fit: cover; -} - -.c1 img:first-child { - border-radius: 20px 0 0 20px; - object-position: 0 0; -} - -.c1 img:last-child { - border-radius: 0 20px 20px 0; - object-position: 100% 0; -} - -.c2 { - width: 20px; - height: 40px; - border-radius: 50%; -} - -.c3 { - background-color: #F9F9F9; - border-radius: 2px; - width: 15px; - height: 15px; - left: 60%; - position: absolute; - top: 60%; - outline: 2px solid #FFFFFF; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - .c0 { display: -webkit-box; display: -webkit-flex; @@ -89,33 +33,83 @@ exports[`PortfolioLogo renders with L2 icon 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
-
- Arbitrum logo -
@@ -124,39 +118,6 @@ exports[`PortfolioLogo renders with L2 icon 1`] = ` `; exports[`PortfolioLogo renders without L2 icon 1`] = ` -.c1 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c1 img { - width: 19px; - height: 40px; - object-fit: cover; -} - -.c1 img:first-child { - border-radius: 20px 0 0 20px; - object-position: 0 0; -} - -.c1 img:last-child { - border-radius: 0 20px 20px 0; - object-position: 100% 0; -} - -.c2 { - width: 20px; - height: 40px; - border-radius: 50%; -} - .c0 { display: -webkit-box; display: -webkit-flex; @@ -189,19 +150,56 @@ exports[`PortfolioLogo renders without L2 icon 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
diff --git a/apps/web/src/components/AccountDrawer/MiniPortfolio/constants.tsx b/apps/web/src/components/AccountDrawer/MiniPortfolio/constants.tsx index b471d242a9b..81e729e2a7b 100644 --- a/apps/web/src/components/AccountDrawer/MiniPortfolio/constants.tsx +++ b/apps/web/src/components/AccountDrawer/MiniPortfolio/constants.tsx @@ -1,219 +1,219 @@ import { TransactionType } from 'state/transactions/types' import { UniswapXOrderStatus } from 'types/uniswapx' import { TransactionStatus } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' // use even number because rows are in groups of 2 export const DEFAULT_NFT_QUERY_AMOUNT = 26 const TransactionTitleTable: { [key in TransactionType]: { [state in TransactionStatus]: string } } = { [TransactionType.SWAP]: { - [TransactionStatus.Pending]: t('common.swapping'), - [TransactionStatus.Confirmed]: t('common.swapped'), - [TransactionStatus.Failed]: t('common.swap.failed'), + [TransactionStatus.Pending]: i18n.t('common.swapping'), + [TransactionStatus.Confirmed]: i18n.t('common.swapped'), + [TransactionStatus.Failed]: i18n.t('common.swap.failed'), }, [TransactionType.WRAP]: { - [TransactionStatus.Pending]: t('common.wrapping'), - [TransactionStatus.Confirmed]: t('common.wrapped'), - [TransactionStatus.Failed]: t('common.wrap.failed'), + [TransactionStatus.Pending]: i18n.t('common.wrapping'), + [TransactionStatus.Confirmed]: i18n.t('common.wrapped'), + [TransactionStatus.Failed]: i18n.t('common.wrap.failed'), }, [TransactionType.ADD_LIQUIDITY_V3_POOL]: { - [TransactionStatus.Pending]: t('common.adding.liquidity'), - [TransactionStatus.Confirmed]: t('common.added.liquidity'), - [TransactionStatus.Failed]: t('common.add.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.adding.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.added.liquidity'), + [TransactionStatus.Failed]: i18n.t('common.add.liquidity.failed'), }, [TransactionType.REMOVE_LIQUIDITY_V3]: { - [TransactionStatus.Pending]: t('common.removing.liquidity'), - [TransactionStatus.Confirmed]: t('common.removedLiquidity'), - [TransactionStatus.Failed]: t('common.remove.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.removing.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.removedLiquidity'), + [TransactionStatus.Failed]: i18n.t('common.remove.liquidity.failed'), }, [TransactionType.CREATE_V3_POOL]: { - [TransactionStatus.Pending]: t('common.creating.pool'), - [TransactionStatus.Confirmed]: t('common.created.pool'), - [TransactionStatus.Failed]: t('common.create.pool.failed'), + [TransactionStatus.Pending]: i18n.t('common.creating.pool'), + [TransactionStatus.Confirmed]: i18n.t('common.created.pool'), + [TransactionStatus.Failed]: i18n.t('common.create.pool.failed'), }, [TransactionType.COLLECT_FEES]: { - [TransactionStatus.Pending]: t('common.collecting.fees'), - [TransactionStatus.Confirmed]: t('common.collected.fees'), - [TransactionStatus.Failed]: t('common.collect.fees.failed'), + [TransactionStatus.Pending]: i18n.t('common.collecting.fees'), + [TransactionStatus.Confirmed]: i18n.t('common.collected.fees'), + [TransactionStatus.Failed]: i18n.t('common.collect.fees.failed'), }, [TransactionType.APPROVAL]: { - [TransactionStatus.Pending]: t('common.approving'), - [TransactionStatus.Confirmed]: t('common.approved'), - [TransactionStatus.Failed]: t('common.approval.failed'), + [TransactionStatus.Pending]: i18n.t('common.approving'), + [TransactionStatus.Confirmed]: i18n.t('common.approved'), + [TransactionStatus.Failed]: i18n.t('common.approval.failed'), }, [TransactionType.CLAIM]: { - [TransactionStatus.Pending]: t('common.claiming'), - [TransactionStatus.Confirmed]: t('common.claimed'), - [TransactionStatus.Failed]: t('common.claim.failed'), + [TransactionStatus.Pending]: i18n.t('common.claiming'), + [TransactionStatus.Confirmed]: i18n.t('common.claimed'), + [TransactionStatus.Failed]: i18n.t('common.claim.failed'), }, [TransactionType.BUY]: { - [TransactionStatus.Pending]: t('common.buying'), - [TransactionStatus.Confirmed]: t('common.bought'), - [TransactionStatus.Failed]: t('common.buy.failed'), + [TransactionStatus.Pending]: i18n.t('common.buying'), + [TransactionStatus.Confirmed]: i18n.t('common.bought'), + [TransactionStatus.Failed]: i18n.t('common.buy.failed'), }, [TransactionType.SEND]: { - [TransactionStatus.Pending]: t('common.sending'), - [TransactionStatus.Confirmed]: t('common.sent'), - [TransactionStatus.Failed]: t('common.send.failed'), + [TransactionStatus.Pending]: i18n.t('common.sending'), + [TransactionStatus.Confirmed]: i18n.t('common.sent'), + [TransactionStatus.Failed]: i18n.t('common.send.failed'), }, [TransactionType.RECEIVE]: { - [TransactionStatus.Pending]: t('common.receiving'), - [TransactionStatus.Confirmed]: t('common.received'), - [TransactionStatus.Failed]: t('common.receive.failed'), + [TransactionStatus.Pending]: i18n.t('common.receiving'), + [TransactionStatus.Confirmed]: i18n.t('common.received'), + [TransactionStatus.Failed]: i18n.t('common.receive.failed'), }, [TransactionType.MINT]: { - [TransactionStatus.Pending]: t('common.minting'), - [TransactionStatus.Confirmed]: t('common.minted'), - [TransactionStatus.Failed]: t('common.mint.failed'), + [TransactionStatus.Pending]: i18n.t('common.minting'), + [TransactionStatus.Confirmed]: i18n.t('common.minted'), + [TransactionStatus.Failed]: i18n.t('common.mint.failed'), }, [TransactionType.BURN]: { - [TransactionStatus.Pending]: t('common.burning'), - [TransactionStatus.Confirmed]: t('common.burned'), - [TransactionStatus.Failed]: t('common.burn.failed'), + [TransactionStatus.Pending]: i18n.t('common.burning'), + [TransactionStatus.Confirmed]: i18n.t('common.burned'), + [TransactionStatus.Failed]: i18n.t('common.burn.failed'), }, [TransactionType.VOTE]: { - [TransactionStatus.Pending]: t('common.voting'), - [TransactionStatus.Confirmed]: t('common.voted'), - [TransactionStatus.Failed]: t('common.vote.failed'), + [TransactionStatus.Pending]: i18n.t('common.voting'), + [TransactionStatus.Confirmed]: i18n.t('common.voted'), + [TransactionStatus.Failed]: i18n.t('common.vote.failed'), }, [TransactionType.QUEUE]: { - [TransactionStatus.Pending]: t('common.queuing'), - [TransactionStatus.Confirmed]: t('common.queued'), - [TransactionStatus.Failed]: t('common.queue.failed'), + [TransactionStatus.Pending]: i18n.t('common.queuing'), + [TransactionStatus.Confirmed]: i18n.t('common.queued'), + [TransactionStatus.Failed]: i18n.t('common.queue.failed'), }, [TransactionType.EXECUTE]: { - [TransactionStatus.Pending]: t('common.executing'), - [TransactionStatus.Confirmed]: t('common.executed'), - [TransactionStatus.Failed]: t('common.execute.failed'), + [TransactionStatus.Pending]: i18n.t('common.executing'), + [TransactionStatus.Confirmed]: i18n.t('common.executed'), + [TransactionStatus.Failed]: i18n.t('common.execute.failed'), }, [TransactionType.BORROW]: { - [TransactionStatus.Pending]: t('common.borrowing'), - [TransactionStatus.Confirmed]: t('common.borrowed'), - [TransactionStatus.Failed]: t('common.borrow.failed'), + [TransactionStatus.Pending]: i18n.t('common.borrowing'), + [TransactionStatus.Confirmed]: i18n.t('common.borrowed'), + [TransactionStatus.Failed]: i18n.t('common.borrow.failed'), }, [TransactionType.REPAY]: { - [TransactionStatus.Pending]: t('common.repaying'), - [TransactionStatus.Confirmed]: t('common.repaid'), - [TransactionStatus.Failed]: t('common.repay.failed'), + [TransactionStatus.Pending]: i18n.t('common.repaying'), + [TransactionStatus.Confirmed]: i18n.t('common.repaid'), + [TransactionStatus.Failed]: i18n.t('common.repay.failed'), }, [TransactionType.DEPLOY]: { - [TransactionStatus.Pending]: t('common.deploying'), - [TransactionStatus.Confirmed]: t('common.deployed'), - [TransactionStatus.Failed]: t('common.deploy.failed'), + [TransactionStatus.Pending]: i18n.t('common.deploying'), + [TransactionStatus.Confirmed]: i18n.t('common.deployed'), + [TransactionStatus.Failed]: i18n.t('common.deploy.failed'), }, [TransactionType.CANCEL]: { - [TransactionStatus.Pending]: t('common.cancelling'), - [TransactionStatus.Confirmed]: t('common.cancelled'), - [TransactionStatus.Failed]: t('common.cancel.failed'), + [TransactionStatus.Pending]: i18n.t('common.cancelling'), + [TransactionStatus.Confirmed]: i18n.t('common.cancelled'), + [TransactionStatus.Failed]: i18n.t('common.cancel.failed'), }, [TransactionType.DELEGATE]: { - [TransactionStatus.Pending]: t('common.delegating'), - [TransactionStatus.Confirmed]: t('common.delegated'), - [TransactionStatus.Failed]: t('common.delegate.failed'), + [TransactionStatus.Pending]: i18n.t('common.delegating'), + [TransactionStatus.Confirmed]: i18n.t('common.delegated'), + [TransactionStatus.Failed]: i18n.t('common.delegate.failed'), }, [TransactionType.DEPOSIT_LIQUIDITY_STAKING]: { - [TransactionStatus.Pending]: t('common.depositing'), - [TransactionStatus.Confirmed]: t('common.deposited'), - [TransactionStatus.Failed]: t('common.deposit.failed'), + [TransactionStatus.Pending]: i18n.t('common.depositing'), + [TransactionStatus.Confirmed]: i18n.t('common.deposited'), + [TransactionStatus.Failed]: i18n.t('common.deposit.failed'), }, [TransactionType.WITHDRAW_LIQUIDITY_STAKING]: { - [TransactionStatus.Pending]: t('common.withdrawing'), - [TransactionStatus.Confirmed]: t('common.withdrew'), - [TransactionStatus.Failed]: t('common.withdraw.failed'), + [TransactionStatus.Pending]: i18n.t('common.withdrawing'), + [TransactionStatus.Confirmed]: i18n.t('common.withdrew'), + [TransactionStatus.Failed]: i18n.t('common.withdraw.failed'), }, [TransactionType.ADD_LIQUIDITY_V2_POOL]: { - [TransactionStatus.Pending]: t('common.adding.v2.liquidity'), - [TransactionStatus.Confirmed]: t('common.added.v2.liquidity'), - [TransactionStatus.Failed]: t('common.add.v2.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.adding.v2.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.added.v2.liquidity'), + [TransactionStatus.Failed]: i18n.t('common.add.v2.liquidity.failed'), }, [TransactionType.MIGRATE_LIQUIDITY_V2_TO_V3]: { - [TransactionStatus.Pending]: t('common.migrating.liquidity'), - [TransactionStatus.Confirmed]: t('common.migrated.liquidity'), - [TransactionStatus.Failed]: t('common.migrate.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.migrating.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.migrated.liquidity'), + [TransactionStatus.Failed]: i18n.t('common.migrate.liquidity.failed'), }, [TransactionType.SUBMIT_PROPOSAL]: { - [TransactionStatus.Pending]: t('common.submitting.proposal'), - [TransactionStatus.Confirmed]: t('common.submitted.proposal'), - [TransactionStatus.Failed]: t('common.submit.proposal.failed'), + [TransactionStatus.Pending]: i18n.t('common.submitting.proposal'), + [TransactionStatus.Confirmed]: i18n.t('common.submitted.proposal'), + [TransactionStatus.Failed]: i18n.t('common.submit.proposal.failed'), }, [TransactionType.LIMIT]: { - [TransactionStatus.Pending]: t('common.limit.opened'), - [TransactionStatus.Confirmed]: t('common.limit.executed'), - [TransactionStatus.Failed]: t('common.limit.failed'), + [TransactionStatus.Pending]: i18n.t('common.limit.opened'), + [TransactionStatus.Confirmed]: i18n.t('common.limit.executed'), + [TransactionStatus.Failed]: i18n.t('common.limit.failed'), }, [TransactionType.INCREASE_LIQUIDITY]: { - [TransactionStatus.Pending]: t('common.adding.liquidity'), - [TransactionStatus.Confirmed]: t('common.added.liquidity'), - [TransactionStatus.Failed]: t('common.add.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.adding.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.added.liquidity'), + [TransactionStatus.Failed]: i18n.t('common.add.liquidity.failed'), }, [TransactionType.DECREASE_LIQUIDITY]: { - [TransactionStatus.Pending]: t('common.removing.liquidity'), - [TransactionStatus.Confirmed]: t('common.liquidity.removed'), - [TransactionStatus.Failed]: t('common.remove.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.removing.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.liquidity.removed'), + [TransactionStatus.Failed]: i18n.t('common.remove.liquidity.failed'), }, [TransactionType.CREATE_POSITION]: { - [TransactionStatus.Pending]: t('position.create.modal.header'), - [TransactionStatus.Confirmed]: t('pool.createdPosition'), - [TransactionStatus.Failed]: t('pool.createdPosition.failed'), + [TransactionStatus.Pending]: i18n.t('position.create.modal.header'), + [TransactionStatus.Confirmed]: i18n.t('pool.createdPosition'), + [TransactionStatus.Failed]: i18n.t('pool.createdPosition.failed'), }, [TransactionType.MIGRATE_LIQUIDITY_V3_TO_V4]: { - [TransactionStatus.Pending]: t('common.migrating.liquidity'), - [TransactionStatus.Confirmed]: t('common.migrated.liquidity'), - [TransactionStatus.Failed]: t('common.migrate.liquidity.failed'), + [TransactionStatus.Pending]: i18n.t('common.migrating.liquidity'), + [TransactionStatus.Confirmed]: i18n.t('common.migrated.liquidity'), + [TransactionStatus.Failed]: i18n.t('common.migrate.liquidity.failed'), }, [TransactionType.BRIDGE]: { - [TransactionStatus.Pending]: t('common.swapping'), - [TransactionStatus.Confirmed]: t('common.swapped'), - [TransactionStatus.Failed]: t('common.swap.failed'), + [TransactionStatus.Pending]: i18n.t('common.swapping'), + [TransactionStatus.Confirmed]: i18n.t('common.swapped'), + [TransactionStatus.Failed]: i18n.t('common.swap.failed'), }, } export const CancelledTransactionTitleTable: { [key in TransactionType]: string } = { - [TransactionType.SWAP]: t('common.swap.cancelled'), - [TransactionType.WRAP]: t('common.wrap.cancelled'), - [TransactionType.ADD_LIQUIDITY_V3_POOL]: t('common.add.liquidity.cancelled'), - [TransactionType.REMOVE_LIQUIDITY_V3]: t('common.remove.liquidity.cancelled'), - [TransactionType.CREATE_V3_POOL]: t('common.create.pool.cancelled'), - [TransactionType.COLLECT_FEES]: t('common.collect.fees.cancelled'), - [TransactionType.APPROVAL]: t('common.approval.cancelled'), - [TransactionType.CLAIM]: t('common.claim.cancelled'), - [TransactionType.BUY]: t('common.buy.cancelled'), - [TransactionType.SEND]: t('common.send.cancelled'), - [TransactionType.RECEIVE]: t('common.receive.cancelled'), - [TransactionType.MINT]: t('common.mint.cancelled'), - [TransactionType.BURN]: t('common.burn.cancelled'), - [TransactionType.VOTE]: t('common.vote.cancelled'), - [TransactionType.QUEUE]: t('common.queue.cancelled'), - [TransactionType.EXECUTE]: t('common.execute.cancelled'), - [TransactionType.BORROW]: t('common.borrow.cancelled'), - [TransactionType.REPAY]: t('common.repay.cancelled'), - [TransactionType.DEPLOY]: t('common.deploy.cancelled'), - [TransactionType.CANCEL]: t('common.cancellation.cancelled'), - [TransactionType.DELEGATE]: t('common.delegate.cancelled'), - [TransactionType.DEPOSIT_LIQUIDITY_STAKING]: t('common.deposit.cancelled'), - [TransactionType.WITHDRAW_LIQUIDITY_STAKING]: t('common.withdrawal.cancelled'), - [TransactionType.ADD_LIQUIDITY_V2_POOL]: t('common.add.v2.liquidity.cancelled'), - [TransactionType.MIGRATE_LIQUIDITY_V2_TO_V3]: t('common.migrate.liquidity.cancelled'), - [TransactionType.SUBMIT_PROPOSAL]: t('common.submit.proposal.cancelled'), - [TransactionType.LIMIT]: t('common.limit.cancelled'), - [TransactionType.INCREASE_LIQUIDITY]: t('common.add.liquidity.cancelled'), - [TransactionType.DECREASE_LIQUIDITY]: t('common.remove.liquidity.cancelled'), - [TransactionType.CREATE_POSITION]: t('pool.createdPosition.cancelled'), - [TransactionType.MIGRATE_LIQUIDITY_V3_TO_V4]: t('common.migrate.liquidity.cancelled'), - [TransactionType.BRIDGE]: t('common.swap.cancelled'), + [TransactionType.SWAP]: i18n.t('common.swap.cancelled'), + [TransactionType.WRAP]: i18n.t('common.wrap.cancelled'), + [TransactionType.ADD_LIQUIDITY_V3_POOL]: i18n.t('common.add.liquidity.cancelled'), + [TransactionType.REMOVE_LIQUIDITY_V3]: i18n.t('common.remove.liquidity.cancelled'), + [TransactionType.CREATE_V3_POOL]: i18n.t('common.create.pool.cancelled'), + [TransactionType.COLLECT_FEES]: i18n.t('common.collect.fees.cancelled'), + [TransactionType.APPROVAL]: i18n.t('common.approval.cancelled'), + [TransactionType.CLAIM]: i18n.t('common.claim.cancelled'), + [TransactionType.BUY]: i18n.t('common.buy.cancelled'), + [TransactionType.SEND]: i18n.t('common.send.cancelled'), + [TransactionType.RECEIVE]: i18n.t('common.receive.cancelled'), + [TransactionType.MINT]: i18n.t('common.mint.cancelled'), + [TransactionType.BURN]: i18n.t('common.burn.cancelled'), + [TransactionType.VOTE]: i18n.t('common.vote.cancelled'), + [TransactionType.QUEUE]: i18n.t('common.queue.cancelled'), + [TransactionType.EXECUTE]: i18n.t('common.execute.cancelled'), + [TransactionType.BORROW]: i18n.t('common.borrow.cancelled'), + [TransactionType.REPAY]: i18n.t('common.repay.cancelled'), + [TransactionType.DEPLOY]: i18n.t('common.deploy.cancelled'), + [TransactionType.CANCEL]: i18n.t('common.cancellation.cancelled'), + [TransactionType.DELEGATE]: i18n.t('common.delegate.cancelled'), + [TransactionType.DEPOSIT_LIQUIDITY_STAKING]: i18n.t('common.deposit.cancelled'), + [TransactionType.WITHDRAW_LIQUIDITY_STAKING]: i18n.t('common.withdrawal.cancelled'), + [TransactionType.ADD_LIQUIDITY_V2_POOL]: i18n.t('common.add.v2.liquidity.cancelled'), + [TransactionType.MIGRATE_LIQUIDITY_V2_TO_V3]: i18n.t('common.migrate.liquidity.cancelled'), + [TransactionType.SUBMIT_PROPOSAL]: i18n.t('common.submit.proposal.cancelled'), + [TransactionType.LIMIT]: i18n.t('common.limit.cancelled'), + [TransactionType.INCREASE_LIQUIDITY]: i18n.t('common.add.liquidity.cancelled'), + [TransactionType.DECREASE_LIQUIDITY]: i18n.t('common.remove.liquidity.cancelled'), + [TransactionType.CREATE_POSITION]: i18n.t('pool.createdPosition.cancelled'), + [TransactionType.MIGRATE_LIQUIDITY_V3_TO_V4]: i18n.t('common.migrate.liquidity.cancelled'), + [TransactionType.BRIDGE]: i18n.t('common.swap.cancelled'), } const AlternateTransactionTitleTable: { [key in TransactionType]?: { [state in TransactionStatus]: string } } = { [TransactionType.WRAP]: { - [TransactionStatus.Pending]: t('common.unwrapping'), - [TransactionStatus.Confirmed]: t('common.unwrapped'), - [TransactionStatus.Failed]: t('common.unwrap.failed'), + [TransactionStatus.Pending]: i18n.t('common.unwrapping'), + [TransactionStatus.Confirmed]: i18n.t('common.unwrapped'), + [TransactionStatus.Failed]: i18n.t('common.unwrap.failed'), }, [TransactionType.APPROVAL]: { - [TransactionStatus.Pending]: t('common.revoking.approval'), - [TransactionStatus.Confirmed]: t('common.revoked.approval'), - [TransactionStatus.Failed]: t('common.revoke.approval.failed'), + [TransactionStatus.Pending]: i18n.t('common.revoking.approval'), + [TransactionStatus.Confirmed]: i18n.t('common.revoked.approval'), + [TransactionStatus.Failed]: i18n.t('common.revoke.approval.failed'), }, } @@ -240,8 +240,8 @@ export const OrderTextTable: { status: TransactionStatus.Confirmed, }, [UniswapXOrderStatus.EXPIRED]: { - title: t('common.swap.expired'), - statusMessage: t('common.your.swap.could.not.be.fulfilled'), + title: i18n.t('common.swap.expired'), + statusMessage: i18n.t('common.your.swap.could.not.be.fulfilled'), status: TransactionStatus.Failed, }, [UniswapXOrderStatus.ERROR]: { @@ -249,16 +249,16 @@ export const OrderTextTable: { status: TransactionStatus.Failed, }, [UniswapXOrderStatus.INSUFFICIENT_FUNDS]: { - title: t('common.insufficient.funds'), - statusMessage: t('common.your.account.had.insufficient.funds'), + title: i18n.t('common.insufficient.funds'), + statusMessage: i18n.t('common.your.account.had.insufficient.funds'), status: TransactionStatus.Failed, }, [UniswapXOrderStatus.PENDING_CANCELLATION]: { - title: t('common.pending.cancellation'), + title: i18n.t('common.pending.cancellation'), status: TransactionStatus.Pending, }, [UniswapXOrderStatus.CANCELLED]: { - title: t('common.swap.cancelled'), + title: i18n.t('common.swap.cancelled'), status: TransactionStatus.Failed, }, } @@ -276,8 +276,8 @@ export const LimitOrderTextTable: { status: TransactionStatus.Confirmed, }, [UniswapXOrderStatus.EXPIRED]: { - title: t('common.limit.expired'), - statusMessage: t('common.your.limit.could.not.be.fulfilled'), + title: i18n.t('common.limit.expired'), + statusMessage: i18n.t('common.your.limit.could.not.be.fulfilled'), status: TransactionStatus.Failed, }, [UniswapXOrderStatus.ERROR]: { @@ -286,15 +286,15 @@ export const LimitOrderTextTable: { }, [UniswapXOrderStatus.INSUFFICIENT_FUNDS]: { title: LimitTitleTable.PENDING, - statusMessage: t('common.your.account.has.insufficient.funds'), + statusMessage: i18n.t('common.your.account.has.insufficient.funds'), status: TransactionStatus.Pending, }, [UniswapXOrderStatus.PENDING_CANCELLATION]: { - title: t('common.pending.cancellation'), + title: i18n.t('common.pending.cancellation'), status: TransactionStatus.Pending, }, [UniswapXOrderStatus.CANCELLED]: { - title: t('common.limit.cancelled'), + title: i18n.t('common.limit.cancelled'), status: TransactionStatus.Failed, }, } diff --git a/apps/web/src/components/AccountDrawer/SettingsMenu.tsx b/apps/web/src/components/AccountDrawer/SettingsMenu.tsx index 75f96b9323d..7091a080bd9 100644 --- a/apps/web/src/components/AccountDrawer/SettingsMenu.tsx +++ b/apps/web/src/components/AccountDrawer/SettingsMenu.tsx @@ -9,11 +9,11 @@ import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { ReactNode } from 'react' import { ChevronRight } from 'react-feather' +import { Trans } from 'react-i18next' import { ClickableStyle, ThemedText } from 'theme/components' import ThemeToggle from 'theme/components/ThemeToggle' import { useAppFiatCurrency } from 'uniswap/src/features/fiatCurrency/hooks' import { useCurrentLanguage, useLanguageInfo } from 'uniswap/src/features/language/hooks' -import { Trans } from 'uniswap/src/i18n' const Container = styled(Column)` height: 100%; diff --git a/apps/web/src/components/AccountDrawer/SmallBalanceToggle.tsx b/apps/web/src/components/AccountDrawer/SmallBalanceToggle.tsx index a6b6bfc4b2c..5c4cc371248 100644 --- a/apps/web/src/components/AccountDrawer/SmallBalanceToggle.tsx +++ b/apps/web/src/components/AccountDrawer/SmallBalanceToggle.tsx @@ -1,11 +1,12 @@ import { SettingsToggle } from 'components/AccountDrawer/SettingsToggle' +import { useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { useHideSmallBalancesSetting } from 'uniswap/src/features/settings/hooks' import { setHideSmallBalances } from 'uniswap/src/features/settings/slice' -import { t } from 'uniswap/src/i18n' export function SmallBalanceToggle() { + const { t } = useTranslation() const hideSmallBalances = useHideSmallBalancesSetting() const dispatch = useDispatch() const { isTestnetModeEnabled } = useEnabledChains() diff --git a/apps/web/src/components/AccountDrawer/SpamToggle.tsx b/apps/web/src/components/AccountDrawer/SpamToggle.tsx index 951d06e5c8a..efbd86cede8 100644 --- a/apps/web/src/components/AccountDrawer/SpamToggle.tsx +++ b/apps/web/src/components/AccountDrawer/SpamToggle.tsx @@ -1,8 +1,8 @@ import { SettingsToggle } from 'components/AccountDrawer/SettingsToggle' +import { Trans } from 'react-i18next' import { useDispatch } from 'react-redux' import { useHideSpamTokensSetting } from 'uniswap/src/features/settings/hooks' import { setHideSpamTokens } from 'uniswap/src/features/settings/slice' -import { Trans } from 'uniswap/src/i18n' export function SpamToggle() { const hideSpamTokens = useHideSpamTokensSetting() diff --git a/apps/web/src/components/AccountDrawer/TestnetsToggle.tsx b/apps/web/src/components/AccountDrawer/TestnetsToggle.tsx index c27e27a2b11..4c5865957cc 100644 --- a/apps/web/src/components/AccountDrawer/TestnetsToggle.tsx +++ b/apps/web/src/components/AccountDrawer/TestnetsToggle.tsx @@ -1,12 +1,13 @@ import { SettingsToggle } from 'components/AccountDrawer/SettingsToggle' +import { useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' import { useOpenModal } from 'state/application/hooks' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { setIsTestnetModeEnabled } from 'uniswap/src/features/settings/slice' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { t } from 'uniswap/src/i18n' export function TestnetsToggle() { + const { t } = useTranslation() const dispatch = useDispatch() const { isTestnetModeEnabled } = useEnabledChains() const openTestnetModal = useOpenModal({ name: ModalName.TestnetMode }) diff --git a/apps/web/src/components/AccountDrawer/UniwalletModal.tsx b/apps/web/src/components/AccountDrawer/UniwalletModal.tsx index db16c0de561..764d690a46c 100644 --- a/apps/web/src/components/AccountDrawer/UniwalletModal.tsx +++ b/apps/web/src/components/AccountDrawer/UniwalletModal.tsx @@ -2,12 +2,12 @@ import { InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-eve import MobileAppLogo from 'assets/svg/uniswap_app_logo.svg' import { useConnect } from 'hooks/useConnect' import { useCallback, useEffect, useState } from 'react' +import { useTranslation } from 'react-i18next' import { CloseIcon } from 'theme/components' import { Button, Flex, Image, QRCodeDisplay, Separator, Text, useSporeColors } from 'ui/src' import { Modal } from 'uniswap/src/components/modals/Modal' import { ModalName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { useTranslation } from 'uniswap/src/i18n' import { isWebAndroid, isWebIOS } from 'utilities/src/platform' import { openDownloadApp } from 'utils/openDownloadApp' diff --git a/apps/web/src/components/AccountDrawer/__snapshots__/index.test.tsx.snap b/apps/web/src/components/AccountDrawer/__snapshots__/index.test.tsx.snap index 4263b47ce17..0cce47e1034 100644 --- a/apps/web/src/components/AccountDrawer/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/components/AccountDrawer/__snapshots__/index.test.tsx.snap @@ -15,22 +15,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` min-width: 0; } -.c20 { - box-sizing: border-box; - margin: 0; - min-width: 0; - padding: 8px 0px; -} - -.c24 { - box-sizing: border-box; - margin: 0; - min-width: 0; - margin-left: 18px; - margin-right: 18px; -} - -.c27 { +.c23 { box-sizing: border-box; margin: 0; min-width: 0; @@ -39,7 +24,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` flex: 1; } -.c36 { +.c32 { color: #7D7D7D; -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; @@ -47,7 +32,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` letter-spacing: -0.01em; } -.c37 { +.c33 { -webkit-text-decoration: none; text-decoration: none; cursor: pointer; @@ -58,11 +43,11 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` font-weight: 500; } -.c37:hover { +.c33:hover { opacity: 0.6; } -.c37:active { +.c33:active { opacity: 0.4; } @@ -110,7 +95,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` gap: 12px; } -.c26 { +.c22 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -198,25 +183,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` gap: 12px; } -.c21 { - width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - padding: 0; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - padding: 8px 0px; -} - -.c28 { +.c24 { width: 100%; display: -webkit-box; display: -webkit-flex; @@ -247,7 +214,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` margin: !important; } -.c32 { +.c28 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -264,7 +231,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` align-items: center; } -.c31 { +.c27 { -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; @@ -292,7 +259,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` transition: 125ms; } -.c34 { +.c30 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -314,7 +281,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` padding: 0 8px; } -.c33 { +.c29 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -332,18 +299,18 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` justify-content: center; } -.c33 img { +.c29 img { border: 1px solid #22222212; border-radius: 12px; } -.c33 > img, -.c33 span { +.c29 > img, +.c29 span { height: 40px; width: 40px; } -.c30 { +.c26 { -webkit-align-items: stretch; -webkit-box-align: stretch; -ms-flex-align: stretch; @@ -364,16 +331,16 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` background-color: #F9F9F9; } -.c30:hover { +.c26:hover { cursor: pointer; background-color: #22222212; } -.c30:focus { +.c26:focus { background-color: #22222212; } -.c38 { +.c34 { font-weight: 535; color: #7D7D7D; } @@ -449,7 +416,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` gap: 16px; } -.c29 { +.c25 { display: grid; -webkit-flex: 1; -ms-flex: 1; @@ -463,37 +430,17 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` transition: max-height 125ms ease-in-out,opacity 125ms ease-in-out; } -.c35 { +.c31 { padding: 0 4px; } -.c22 { - -webkit-text-decoration: none; - text-decoration: none; - cursor: pointer; - -webkit-transition-duration: 125ms; - transition-duration: 125ms; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.c22:hover { - opacity: 0.6; -} - -.c22:active { - opacity: 0.4; -} - -.c23 { +.c20 { height: 1px; width: 100%; background: #22222212; } -.c25 { +.c21 { height: 20px; width: 20px; fill: #7D7D7D; @@ -640,7 +587,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` } @media (max-width:960px) { - .c33 { + .c29 { -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; @@ -649,7 +596,7 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = ` } @media (max-width:960px) { - .c29 { + .c25 { grid-template-columns: 1fr; } } @@ -838,13 +785,13 @@ exports[`AccountDrawer tests AccountDrawer default styles 1`] = `
- .c2 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c2 img { - width: 16px; - height: 16px; - border-radius: 50%; -} - -.c3 { - width: 8px; - height: 16px; - border-radius: 50%; -} - -.c1 { + .c1 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -224,14 +177,23 @@ exports[`TokenLinkCell renders known token on mainnet 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- +
+ +
@@ -251,30 +213,7 @@ exports[`TokenLinkCell renders known token on mainnet 1`] = ` exports[`TokenLinkCell renders unknown token 1`] = ` - .c2 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c2 img { - width: 16px; - height: 16px; - border-radius: 50%; -} - -.c3 { - width: 8px; - height: 16px; - border-radius: 50%; -} - -.c1 { + .c1 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -331,14 +270,23 @@ exports[`TokenLinkCell renders unknown token 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- +
+ +
diff --git a/apps/web/src/components/Table/index.tsx b/apps/web/src/components/Table/index.tsx index 7883a0d909a..1c9f50a46c2 100644 --- a/apps/web/src/components/Table/index.tsx +++ b/apps/web/src/components/Table/index.tsx @@ -29,12 +29,12 @@ import { } from 'components/Table/styled' import useDebounce from 'hooks/useDebounce' import { useEffect, useMemo, useRef, useState } from 'react' +import { Trans } from 'react-i18next' import { ScrollSync, ScrollSyncPane } from 'react-scroll-sync' import { ThemedText } from 'theme/components' import { FadePresence } from 'theme/components/FadePresence' import { Z_INDEX } from 'theme/zIndex' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' import { INTERFACE_NAV_HEIGHT } from 'uniswap/src/theme/heights' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' diff --git a/apps/web/src/components/Table/styled.test.tsx b/apps/web/src/components/Table/styled.test.tsx index ff69b8d9b87..e411038e8e7 100644 --- a/apps/web/src/components/Table/styled.test.tsx +++ b/apps/web/src/components/Table/styled.test.tsx @@ -18,7 +18,8 @@ describe('TokenLinkCell', () => { it('renders known token on a different chain', () => { const { asFragment } = render() - expect(screen.getByAltText('Polygon logo')).toBeDefined() + const networkLogo = screen.getByTestId('network-logo') + expect(networkLogo.querySelector('img')).toHaveAttribute('src', 'polygon-logo.png') expect(asFragment()).toMatchSnapshot() }) }) diff --git a/apps/web/src/components/Table/styled.tsx b/apps/web/src/components/Table/styled.tsx index f49f30c813d..ba6415bd015 100644 --- a/apps/web/src/components/Table/styled.tsx +++ b/apps/web/src/components/Table/styled.tsx @@ -8,6 +8,7 @@ import { useCurrency } from 'hooks/Tokens' import deprecatedStyled from 'lib/styled-components' import { PropsWithChildren } from 'react' import { ArrowDown, CornerLeftUp, ExternalLink as ExternalLinkIcon } from 'react-feather' +import { useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' import { ClickableStyle, ClickableTamaguiStyle, EllipsisTamaguiStyle, ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' @@ -16,7 +17,6 @@ import { Token } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/t import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { fromGraphQLChain } from 'uniswap/src/features/chains/utils' import { useCurrentLocale } from 'uniswap/src/features/language/hooks' -import { useTranslation } from 'uniswap/src/i18n' export const SHOW_RETURN_TO_TOP_OFFSET = 500 export const LOAD_MORE_BOTTOM_OFFSET = 50 diff --git a/apps/web/src/components/Table/utils.ts b/apps/web/src/components/Table/utils.ts index 5b270357f43..b43305a0d2b 100644 --- a/apps/web/src/components/Table/utils.ts +++ b/apps/web/src/components/Table/utils.ts @@ -1,4 +1,4 @@ -import { useTranslation } from 'uniswap/src/i18n' +import { useTranslation } from 'react-i18next' /** * Displays the time as a human-readable string. diff --git a/apps/web/src/components/TokenSafety/DeprecatedTokenSafetyMessage.tsx b/apps/web/src/components/TokenSafety/DeprecatedTokenSafetyMessage.tsx index d1f628ebb1e..193d9d337ba 100644 --- a/apps/web/src/components/TokenSafety/DeprecatedTokenSafetyMessage.tsx +++ b/apps/web/src/components/TokenSafety/DeprecatedTokenSafetyMessage.tsx @@ -2,9 +2,9 @@ import { displayWarningLabel, getWarningCopy, TOKEN_SAFETY_ARTICLE, Warning } fr import { useTokenWarningColor, useTokenWarningTextColor } from 'hooks/useTokenWarningColor' import styled from 'lib/styled-components' import { AlertTriangle, Slash } from 'react-feather' +import { Trans } from 'react-i18next' import { Text } from 'rebass' import { ExternalLink } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const Label = styled.div<{ color: string; backgroundColor: string }>` width: 100%; diff --git a/apps/web/src/components/TokenSafety/index.tsx b/apps/web/src/components/TokenSafety/index.tsx index 6a26bdc9dc4..23b35a8fe65 100644 --- a/apps/web/src/components/TokenSafety/index.tsx +++ b/apps/web/src/components/TokenSafety/index.tsx @@ -12,12 +12,12 @@ import { Warning, } from 'constants/deprecatedTokenSafety' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { Text } from 'rebass' import { ButtonText, ExternalLink } from 'theme/components' import { TokenAddressView } from 'uniswap/src/features/address/TokenAddressView' import { ModalName } from 'uniswap/src/features/telemetry/constants' import { useDismissedTokenWarnings } from 'uniswap/src/features/tokens/slice/hooks' -import { Trans } from 'uniswap/src/i18n' const Wrapper = styled.div` width: 100%; diff --git a/apps/web/src/components/Tokens/TokenDetails/ActivitySection.tsx b/apps/web/src/components/Tokens/TokenDetails/ActivitySection.tsx index 5494a45b981..ace3afa5df5 100644 --- a/apps/web/src/components/Tokens/TokenDetails/ActivitySection.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/ActivitySection.tsx @@ -2,9 +2,9 @@ import { TokenDetailsPoolsTable } from 'components/Tokens/TokenDetails/tables/To import { TransactionsTable } from 'components/Tokens/TokenDetails/tables/TransactionsTable' import { useTDPContext } from 'pages/TokenDetails/TDPContext' import { useState } from 'react' +import { Trans } from 'react-i18next' import { ClickableTamaguiStyle } from 'theme/components' import { Flex, styled, Text } from 'ui/src' -import { Trans } from 'uniswap/src/i18n' const Container = styled(Flex, { width: '100%', diff --git a/apps/web/src/components/Tokens/TokenDetails/BalanceSummary.tsx b/apps/web/src/components/Tokens/TokenDetails/BalanceSummary.tsx index 3bbdf6dc90b..a77f4744f61 100644 --- a/apps/web/src/components/Tokens/TokenDetails/BalanceSummary.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/BalanceSummary.tsx @@ -6,13 +6,13 @@ import { useAccount } from 'hooks/useAccount' import styled from 'lib/styled-components' import { useTDPContext } from 'pages/TokenDetails/TDPContext' import { useMemo } from 'react' +import { Trans } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import { Chain } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const BalancesCard = styled.div` diff --git a/apps/web/src/components/Tokens/TokenDetails/ChartSection/AdvancedPriceChartToggle.tsx b/apps/web/src/components/Tokens/TokenDetails/ChartSection/AdvancedPriceChartToggle.tsx index ee0d65a1392..3e819e31e14 100644 --- a/apps/web/src/components/Tokens/TokenDetails/ChartSection/AdvancedPriceChartToggle.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/ChartSection/AdvancedPriceChartToggle.tsx @@ -1,12 +1,12 @@ import { ReactComponent as CandlestickChartIcon } from 'assets/svg/candlestick-chart-icon.svg' import { ReactComponent as LineChartIcon } from 'assets/svg/line-chart-icon.svg' import { CHART_TYPE_LABELS, PriceChartType } from 'components/Charts/utils' -import Row from 'components/deprecated/Row' import { ChartTypeDropdown } from 'components/Tokens/TokenDetails/ChartSection/ChartTypeSelector' +import Row from 'components/deprecated/Row' import { useScreenSize } from 'hooks/screenSize/useScreenSize' import styled from 'lib/styled-components' +import { useTranslation } from 'react-i18next' import { EllipsisStyle } from 'theme/components' -import { t } from 'uniswap/src/i18n' const ChartTypeRow = styled(Row)` ${EllipsisStyle} @@ -43,6 +43,7 @@ export const AdvancedPriceChartToggle = ({ onChartTypeChange: (c: PriceChartType) => void disableCandlestickUI?: boolean }) => { + const { t } = useTranslation() const screenSize = useScreenSize() const isMobileScreen = !screenSize['sm'] const currentChartTypeDisplayOptions = ADVANCED_PRICE_CHART_OPTIONS.find((o) => o.value === currentChartType) diff --git a/apps/web/src/components/Tokens/TokenDetails/ChartSection/ChartTypeSelector.tsx b/apps/web/src/components/Tokens/TokenDetails/ChartSection/ChartTypeSelector.tsx index bed8b434a2a..8870b9ac506 100644 --- a/apps/web/src/components/Tokens/TokenDetails/ChartSection/ChartTypeSelector.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/ChartSection/ChartTypeSelector.tsx @@ -4,8 +4,8 @@ import { MouseoverTooltip } from 'components/Tooltip' import { useTheme } from 'lib/styled-components' import { useState } from 'react' import { Check, Info } from 'react-feather' +import { Trans } from 'react-i18next' import { FlexProps } from 'ui/src' -import { Trans } from 'uniswap/src/i18n' import { isMobileWeb } from 'utilities/src/platform' const StyledDropdownButton = { @@ -18,6 +18,7 @@ const StyledMenuFlyout = { minWidth: 130, borderRadius: '$rounded16', right: 0, + zIndex: '$popover', } satisfies FlexProps interface ChartTypeSelectorOption { diff --git a/apps/web/src/components/Tokens/TokenDetails/ChartSection/index.tsx b/apps/web/src/components/Tokens/TokenDetails/ChartSection/index.tsx index efde7f2bf80..ae1c2889869 100644 --- a/apps/web/src/components/Tokens/TokenDetails/ChartSection/index.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/ChartSection/index.tsx @@ -24,9 +24,9 @@ import { useScreenSize } from 'hooks/screenSize/useScreenSize' import { useAtomValue } from 'jotai/utils' import { useTDPContext } from 'pages/TokenDetails/TDPContext' import { useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { Flex, SegmentedControl, SegmentedControlOption, styled } from 'ui/src' import { Chain } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' -import { Trans } from 'uniswap/src/i18n' export const TDP_CHART_HEIGHT_PX = 356 const TDP_CHART_SELECTOR_OPTIONS = [ChartType.PRICE, ChartType.VOLUME, ChartType.TVL] as const diff --git a/apps/web/src/components/Tokens/TokenDetails/InvalidTokenDetails.tsx b/apps/web/src/components/Tokens/TokenDetails/InvalidTokenDetails.tsx index 570317f452e..397cf03eb76 100644 --- a/apps/web/src/components/Tokens/TokenDetails/InvalidTokenDetails.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/InvalidTokenDetails.tsx @@ -3,12 +3,12 @@ import { ButtonPrimary } from 'components/Button/buttons' import { useAccount } from 'hooks/useAccount' import useSelectChain from 'hooks/useSelectChain' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { ThemedText } from 'theme/components' import { useIsSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { getChainLabel } from 'uniswap/src/features/chains/utils' -import { Trans } from 'uniswap/src/i18n' const InvalidDetailsContainer = styled.div` padding-top: 128px; diff --git a/apps/web/src/components/Tokens/TokenDetails/ShareButton.tsx b/apps/web/src/components/Tokens/TokenDetails/ShareButton.tsx index 311ac2da660..f210daa0d00 100644 --- a/apps/web/src/components/Tokens/TokenDetails/ShareButton.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/ShareButton.tsx @@ -6,12 +6,12 @@ import useCopyClipboard from 'hooks/useCopyClipboard' import styled from 'lib/styled-components' import { useState } from 'react' import { Link } from 'react-feather' +import { useTranslation } from 'react-i18next' import { useSearchParams } from 'react-router-dom' import { colors } from 'theme/colors' import { opacify } from 'theme/utils' import { Text, useSporeColors } from 'ui/src' import { Check } from 'ui/src/components/icons/Check' -import { useTranslation } from 'uniswap/src/i18n/useTranslation' import { isMobileWeb } from 'utilities/src/platform' const TWITTER_WIDTH = 560 diff --git a/apps/web/src/components/Tokens/TokenDetails/Skeleton.tsx b/apps/web/src/components/Tokens/TokenDetails/Skeleton.tsx index f3c8715f2e4..aa309a873d0 100644 --- a/apps/web/src/components/Tokens/TokenDetails/Skeleton.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/Skeleton.tsx @@ -13,13 +13,13 @@ import { useCurrency } from 'hooks/Tokens' import deprecatedStyled from 'lib/styled-components' import { ReactNode } from 'react' import { ChevronRight } from 'react-feather' +import { Trans } from 'react-i18next' import { useParams } from 'react-router-dom' import { ClickableTamaguiStyle } from 'theme/components' import { capitalize } from 'tsafe' import { Anchor, Flex, Text, TextProps, styled } from 'ui/src' import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { useChainIdFromUrlParam } from 'utils/chainParams' @@ -33,6 +33,9 @@ export const TokenDetailsLayout = styled(Flex, { py: '$spacing48', px: '$spacing40', + $sm: { + gap: 0, + }, $lg: { pt: 0, px: '$padding20', diff --git a/apps/web/src/components/Tokens/TokenDetails/StatsSection.tsx b/apps/web/src/components/Tokens/TokenDetails/StatsSection.tsx index 8ab7a34f9ee..74d88733c48 100644 --- a/apps/web/src/components/Tokens/TokenDetails/StatsSection.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/StatsSection.tsx @@ -5,12 +5,12 @@ import { MouseoverTooltip } from 'components/Tooltip' import { TokenQueryData } from 'graphql/data/Token' import styled from 'lib/styled-components' import { ReactNode } from 'react' +import { Trans } from 'react-i18next' import { ExternalLink, ThemedText } from 'theme/components' import { textFadeIn } from 'theme/styles' 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 { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' export const StatWrapper = styled.div` diff --git a/apps/web/src/components/Tokens/TokenDetails/TokenDescription.tsx b/apps/web/src/components/Tokens/TokenDetails/TokenDescription.tsx index fcb21893302..335f4e996b0 100644 --- a/apps/web/src/components/Tokens/TokenDetails/TokenDescription.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/TokenDescription.tsx @@ -2,7 +2,7 @@ import { EtherscanLogo } from 'components/Icons/Etherscan' import { Globe } from 'components/Icons/Globe' import { TwitterXLogo } from 'components/Icons/TwitterX' import { FOTTooltipContent } from 'components/swap/SwapLineItem' -import { NoInfoAvailable, truncateDescription, TruncateDescriptionButton } from 'components/Tokens/TokenDetails/shared' +import { NoInfoAvailable, truncateDescription } from 'components/Tokens/TokenDetails/shared' import Tooltip, { MouseoverTooltip, TooltipSize } from 'components/Tooltip' import useCopyClipboard from 'hooks/useCopyClipboard' import { useSwapTaxes } from 'hooks/useSwapTaxes' @@ -10,10 +10,10 @@ import { useTheme } from 'lib/styled-components' import { useTDPContext } from 'pages/TokenDetails/TDPContext' import { useCallback, useReducer } from 'react' import { Copy } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { ClickableTamaguiStyle, EllipsisTamaguiStyle, ExternalLink, ThemedText } from 'theme/components' import { Flex, Paragraph, styled, Text } from 'ui/src' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { t, Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { shortenAddress } from 'utilities/src/addresses' import { useFormatter } from 'utils/formatNumbers' @@ -26,10 +26,6 @@ const TokenInfoSection = styled(Flex, { }, }) -const InfoSectionHeader = styled(Text, { - variant: 'subheading1', -}) - const TokenNameRow = styled(Flex, { row: true, gap: '$gap8', @@ -82,6 +78,7 @@ const DescriptionVisibilityWrapper = styled(Paragraph, { const TRUNCATE_CHARACTER_COUNT = 200 export function TokenDescription() { + const { t } = useTranslation() const { address, currency, tokenQuery } = useTDPContext() const { neutral1 } = useTheme() @@ -112,9 +109,9 @@ export function TokenDescription() { return ( - + - + {!currency.isNative && ( @@ -168,8 +165,15 @@ export function TokenDescription() { )} {shouldTruncate && ( - {isDescriptionTruncated ? ( @@ -177,7 +181,7 @@ export function TokenDescription() { ) : ( )} - + )} {hasFee && ( diff --git a/apps/web/src/components/Tokens/TokenDetails/TokenDetailsHeader.tsx b/apps/web/src/components/Tokens/TokenDetails/TokenDetailsHeader.tsx index d120462dc26..5cd455799a3 100644 --- a/apps/web/src/components/Tokens/TokenDetails/TokenDetailsHeader.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/TokenDetailsHeader.tsx @@ -12,13 +12,13 @@ import useCopyClipboard from 'hooks/useCopyClipboard' import { useTDPContext } from 'pages/TokenDetails/TDPContext' import { useMemo, useState } from 'react' import { Link, MoreHorizontal } from 'react-feather' +import { useTranslation } from 'react-i18next' import { useSearchParams } from 'react-router-dom' import { EllipsisTamaguiStyle } from 'theme/components' import { Flex, Text, WebBottomSheet, useMedia, useSporeColors } from 'ui/src' import { Check } from 'ui/src/components/icons/Check' import { iconSizes } from 'ui/src/theme' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { useTranslation } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { isMobileWeb } from 'utilities/src/platform' diff --git a/apps/web/src/components/Tokens/TokenDetails/__snapshots__/Skeleton.test.tsx.snap b/apps/web/src/components/Tokens/TokenDetails/__snapshots__/Skeleton.test.tsx.snap index 87479a1b8dc..3687fff598c 100644 --- a/apps/web/src/components/Tokens/TokenDetails/__snapshots__/Skeleton.test.tsx.snap +++ b/apps/web/src/components/Tokens/TokenDetails/__snapshots__/Skeleton.test.tsx.snap @@ -329,7 +329,7 @@ exports[`TDP Skeleton should render correctly 1`] = ` class=" t_light _dsp_contents is_Theme" >
Info @@ -163,19 +163,6 @@ exports[`TokenDescription renders token information correctly with defaults 1`] height: inherit; } -.c2 { - color: #7D7D7D; - font-weight: 485; - font-size: 0.85em; - padding-top: 0.5em; -} - -.c2:hover, -.c2:focus { - color: #636363; - cursor: pointer; -} - Info @@ -332,12 +319,13 @@ exports[`TokenDescription renders token information correctly with defaults 1`] > USDC is a fully collateralized US dollar stablecoin. USDC is the bridge between dollars and trading on cryptocurrency exchanges. The technology behind CENTRE makes it possible to exchange value...

-
Show more -
+
@@ -372,19 +360,6 @@ exports[`TokenDescription truncates description and shows more 1`] = ` height: inherit; } -.c2 { - color: #7D7D7D; - font-weight: 485; - font-size: 0.85em; - padding-top: 0.5em; -} - -.c2:hover, -.c2:focus { - color: #636363; - cursor: pointer; -} - Info @@ -541,12 +516,13 @@ exports[`TokenDescription truncates description and shows more 1`] = ` > USDC is a fully collateralized US dollar stablecoin. USDC is the bridge between dollars and trading on cryptocurrency exchanges. The technology behind CENTRE makes it possible to exchange value...

-
Show more -
+
diff --git a/apps/web/src/components/Tokens/TokenDetails/index.tsx b/apps/web/src/components/Tokens/TokenDetails/index.tsx index 2a95286d8b7..9b385863417 100644 --- a/apps/web/src/components/Tokens/TokenDetails/index.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/index.tsx @@ -21,9 +21,11 @@ import { Swap } from 'pages/Swap' import { useTDPContext } from 'pages/TokenDetails/TDPContext' import { PropsWithChildren, useCallback, useMemo, useState } from 'react' import { ChevronRight } from 'react-feather' +import { Trans } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { CurrencyState } from 'state/swap/types' import { Flex, useIsTouchDevice } from 'ui/src' +import { getNativeAddress } from 'uniswap/src/constants/addresses' import { useUrlContext } from 'uniswap/src/contexts/UrlContext' import { isUniverseChainId } from 'uniswap/src/features/chains/types' import { toGraphQLChain } from 'uniswap/src/features/chains/utils' @@ -33,7 +35,6 @@ import Trace from 'uniswap/src/features/telemetry/Trace' import { TokenWarningCard } from 'uniswap/src/features/tokens/TokenWarningCard' import TokenWarningModal from 'uniswap/src/features/tokens/TokenWarningModal' import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' -import { Trans } from 'uniswap/src/i18n' import { currencyId } from 'uniswap/src/utils/currencyId' import { addressesAreEquivalent } from 'utils/addressesAreEquivalent' import { getInitialLogoUrl } from 'utils/getInitialLogoURL' @@ -74,14 +75,20 @@ function getCurrencyURLAddress(currency?: Currency): string { return NATIVE_CHAIN_ID } +// Defaults the input currency to the output currency's native currency or undefined if the output currency is already the chain's native currency +// Note: Query string input currency takes precedence if it's set function useSwapInitialInputCurrency() { const { currency } = useTDPContext() const { useParsedQueryString } = useUrlContext() const parsedQs = useParsedQueryString() const inputTokenAddress = useMemo(() => { - return typeof parsedQs.inputCurrency === 'string' ? (parsedQs.inputCurrency as string) : undefined - }, [parsedQs]) + return typeof parsedQs.inputCurrency === 'string' + ? parsedQs.inputCurrency + : currency.isNative + ? undefined + : getNativeAddress(currency.chainId) + }, [currency.chainId, currency.isNative, parsedQs.inputCurrency]) return useCurrency(inputTokenAddress, currency.chainId) } diff --git a/apps/web/src/components/Tokens/TokenDetails/shared.ts b/apps/web/src/components/Tokens/TokenDetails/shared.ts index 44ebc73fc38..0c77b8f9634 100644 --- a/apps/web/src/components/Tokens/TokenDetails/shared.ts +++ b/apps/web/src/components/Tokens/TokenDetails/shared.ts @@ -1,5 +1,4 @@ import deprecatedStyled from 'lib/styled-components' -import { darken } from 'polished' import { TamaguiClickableStyle } from 'theme/components' import { FlexProps, TextProps } from 'ui/src' @@ -41,19 +40,6 @@ export const NoInfoAvailable = deprecatedStyled.p` font-size: 16px; ` -export const TruncateDescriptionButton = deprecatedStyled.div` - color: ${({ theme }) => theme.neutral2}; - font-weight: 485; - font-size: 0.85em; - padding-top: 0.5em; - - &:hover, - &:focus { - color: ${({ theme }) => darken(0.1, theme.neutral2)}; - cursor: pointer; - } -` - export const truncateDescription = (desc: string, maxCharacterCount = TRUNCATE_CHARACTER_COUNT) => { //trim the string to the maximum length let tokenDescriptionTruncated = desc.slice(0, maxCharacterCount) diff --git a/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx b/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx index 43781e8ac75..329d007840a 100644 --- a/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx @@ -16,12 +16,12 @@ import { useUpdateManualOutage } from 'featureFlags/flags/outageBanner' import { TokenTransactionType, useTokenTransactions } from 'graphql/data/useTokenTransactions' import { OrderDirection, unwrapToken } from 'graphql/data/util' import { useMemo, useReducer, useRef, useState } from 'react' +import { Trans } from 'react-i18next' import { EllipsisTamaguiStyle } from 'theme/components' import { Flex, Text, styled } from 'ui/src' import { Token as GQLToken } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { useAppFiatCurrency } from 'uniswap/src/features/fiatCurrency/hooks' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { shortenAddress } from 'utilities/src/addresses' import { useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/components/Tokens/TokenDetails/tables/__snapshots__/TokenDetailsPoolsTable.test.tsx.snap b/apps/web/src/components/Tokens/TokenDetails/tables/__snapshots__/TokenDetailsPoolsTable.test.tsx.snap index 4c07dfdece9..683adf140aa 100644 --- a/apps/web/src/components/Tokens/TokenDetails/tables/__snapshots__/TokenDetailsPoolsTable.test.tsx.snap +++ b/apps/web/src/components/Tokens/TokenDetails/tables/__snapshots__/TokenDetailsPoolsTable.test.tsx.snap @@ -2,40 +2,7 @@ exports[`TDPPoolTable renders data filled state 1`] = ` - .c4 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c4 img { - width: 13px; - height: 28px; - object-fit: cover; -} - -.c4 img:first-child { - border-radius: 14px 0 0 14px; - object-position: 0 0; -} - -.c4 img:last-child { - border-radius: 0 14px 14px 0; - object-position: 100% 0; -} - -.c5 { - width: 14px; - height: 28px; - border-radius: 50%; -} - -.c3 { + .c3 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -282,19 +249,56 @@ exports[`TDPPoolTable renders data filled state 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
diff --git a/apps/web/src/components/Tokens/TokenTable/NetworkFilter.tsx b/apps/web/src/components/Tokens/TokenTable/NetworkFilter.tsx index 1045620b2e5..81b9a1f2787 100644 --- a/apps/web/src/components/Tokens/TokenTable/NetworkFilter.tsx +++ b/apps/web/src/components/Tokens/TokenTable/NetworkFilter.tsx @@ -2,15 +2,16 @@ import { InterfaceEventName, InterfacePageName } from '@uniswap/analytics-events import Badge from 'components/Badge/Badge' import { DropdownSelector, InternalMenuItem } from 'components/DropdownSelector' import { ChainLogo } from 'components/Logo/ChainLogo' -import { AllNetworksIcon } from 'components/Tokens/TokenTable/icons' import deprecatedStyled, { useTheme } from 'lib/styled-components' import { ExploreTab } from 'pages/Explore' import { useExploreParams } from 'pages/Explore/redirects' import { Dispatch, SetStateAction, memo, useCallback, useState } from 'react' import { Check } from 'react-feather' +import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { EllipsisTamaguiStyle } from 'theme/components' import { ElementAfterText, Flex, FlexProps, ScrollView, styled } from 'ui/src' +import { NetworkLogo } from 'uniswap/src/components/CurrencyLogo/NetworkLogo' import { NewTag } from 'uniswap/src/components/pill/NewTag' import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' @@ -21,7 +22,6 @@ import { ALL_CHAIN_IDS, UniverseChainId, UniverseChainInfo } from 'uniswap/src/f import { isBackendSupportedChainId, isTestnetChain, toGraphQLChain } from 'uniswap/src/features/chains/utils' import Trace from 'uniswap/src/features/telemetry/Trace' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' import { useChainIdFromUrlParam } from 'utils/chainParams' const NetworkLabel = styled(Flex, { @@ -87,7 +87,7 @@ export default function TableNetworkFilter({ showMultichainOption = true }: { sh menuLabel={ {!currentChainId && showMultichainOption ? ( - + ) : ( - {isAllNetworks ? : }{' '} + {isAllNetworks ? ( + + ) : ( + + )} ` @@ -56,6 +56,7 @@ const SearchInput = styled.input<{ isOpen?: boolean }>` ` export default function SearchBar({ tab }: { tab?: string }) { + const { t } = useTranslation() const currentString = useAtomValue(exploreSearchStringAtom) const [localFilterString, setLocalFilterString] = useState(currentString) const setFilterString = useUpdateAtom(exploreSearchStringAtom) diff --git a/apps/web/src/components/Tokens/TokenTable/VolumeTimeFrameSelector.tsx b/apps/web/src/components/Tokens/TokenTable/VolumeTimeFrameSelector.tsx index e1dad3c24c5..2bf15d23042 100644 --- a/apps/web/src/components/Tokens/TokenTable/VolumeTimeFrameSelector.tsx +++ b/apps/web/src/components/Tokens/TokenTable/VolumeTimeFrameSelector.tsx @@ -6,8 +6,8 @@ import { useAtom } from 'jotai' import { useTheme } from 'lib/styled-components' import { useState } from 'react' import { Check } from 'react-feather' +import { useTranslation } from 'react-i18next' import { FlexProps } from 'ui/src' -import { useTranslation } from 'uniswap/src/i18n' export enum TimePeriodDisplay { HOUR = '1H', diff --git a/apps/web/src/components/Tokens/TokenTable/icons.tsx b/apps/web/src/components/Tokens/TokenTable/icons.tsx deleted file mode 100644 index 306e68377c9..00000000000 --- a/apps/web/src/components/Tokens/TokenTable/icons.tsx +++ /dev/null @@ -1,36 +0,0 @@ -export const AllNetworksIcon = () => ( - - - - - - - - - - -) diff --git a/apps/web/src/components/Tokens/TokenTable/index.tsx b/apps/web/src/components/Tokens/TokenTable/index.tsx index 7dbfa5a558c..80c5ac0d58c 100644 --- a/apps/web/src/components/Tokens/TokenTable/index.tsx +++ b/apps/web/src/components/Tokens/TokenTable/index.tsx @@ -24,13 +24,13 @@ import { OrderDirection, getTokenDetailsURL, unwrapToken } from 'graphql/data/ut import useSimplePagination from 'hooks/useSimplePagination' import { useAtomValue } from 'jotai/utils' import { ReactElement, ReactNode, memo, useMemo } from 'react' +import { Trans } from 'react-i18next' import { TABLE_PAGE_SIZE, giveExploreStatDefaultValue } from 'state/explore' import { useTopTokens as useRestTopTokens } from 'state/explore/topTokens' import { TokenStat } from 'state/explore/types' import { Flex, Text, styled } from 'ui/src' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { toGraphQLChain } from 'uniswap/src/features/chains/utils' -import { Trans } from 'uniswap/src/i18n' import { getChainIdFromChainUrlParam } from 'utils/chainParams' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/components/TopLevelBanners/MobileAppPromoBanner.tsx b/apps/web/src/components/TopLevelBanners/MobileAppPromoBanner.tsx index c26e5d77fdf..b4f7f4a426f 100644 --- a/apps/web/src/components/TopLevelBanners/MobileAppPromoBanner.tsx +++ b/apps/web/src/components/TopLevelBanners/MobileAppPromoBanner.tsx @@ -7,12 +7,12 @@ import { useAtomValue } from 'jotai/utils' import styled, { useTheme } from 'lib/styled-components' import { useState } from 'react' import { X } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { hideMobileAppPromoBannerAtom } from 'state/application/atoms' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' import { Text } from 'ui/src' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { isWebAndroid, isWebIOS } from 'utilities/src/platform' import { getWalletMeta } from 'utils/walletMeta' diff --git a/apps/web/src/components/TopLevelBanners/UkBanner.tsx b/apps/web/src/components/TopLevelBanners/UkBanner.tsx index 0932fed0fed..d66541636be 100644 --- a/apps/web/src/components/TopLevelBanners/UkBanner.tsx +++ b/apps/web/src/components/TopLevelBanners/UkBanner.tsx @@ -1,4 +1,5 @@ import styled from 'lib/styled-components' +import { useTranslation } from 'react-i18next' import { useOpenModal } from 'state/application/hooks' import { ApplicationModal } from 'state/application/reducer' import { useAppSelector } from 'state/hooks' @@ -6,7 +7,6 @@ import { InterfaceState } from 'state/webReducer' import { BREAKPOINTS } from 'theme' import { ButtonText, ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' -import { Trans, t } from 'uniswap/src/i18n' const BannerWrapper = styled.div` position: relative; @@ -69,18 +69,17 @@ export const useRenderUkBanner = () => { return Boolean(originCountry) && originCountry === 'GB' } -export const bannerText = t('notice.uk') - export function UkBanner() { + const { t } = useTranslation() const openDisclaimer = useOpenModal({ name: ApplicationModal.UK_DISCLAIMER }) return ( - {t('notice.uk.label') + ' ' + bannerText} + {t('notice.uk.label') + ' ' + t('notice.uk')} - + {t('common.readMore')} diff --git a/apps/web/src/components/TopLevelModals/LaunchModal.tsx b/apps/web/src/components/TopLevelModals/LaunchModal.tsx index 92333bd65bf..330dd02c0f8 100644 --- a/apps/web/src/components/TopLevelModals/LaunchModal.tsx +++ b/apps/web/src/components/TopLevelModals/LaunchModal.tsx @@ -7,17 +7,17 @@ import { LAUNCH_MODAL_MOBILE_MAX_HEIGHT, LAUNCH_MODAL_MOBILE_MAX_IMAGE_HEIGHT, } from 'components/TopLevelModals/constants' -import { useIsLandingPage } from 'hooks/useIsLandingPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import { useAtom } from 'jotai' import { atomWithStorage } from 'jotai/utils' import { useMemo } from 'react' +import { useTranslation } from 'react-i18next' import { Button, Flex, Image, ImageProps, Text, TouchableArea, useMedia } from 'ui/src' import { X } from 'ui/src/components/icons/X' import { iconSizes } from 'ui/src/theme' import { Modal } from 'uniswap/src/components/modals/Modal' import Trace from 'uniswap/src/features/telemetry/Trace' import { ModalNameType } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' import { openUri } from 'uniswap/src/utils/linking' type Props = { @@ -41,7 +41,7 @@ export function LaunchModal({ }: Props) { const showModalAtom = useMemo(() => atomWithStorage(`showModal.${interfaceModalName}`, true), [interfaceModalName]) const [showModal, setShowModal] = useAtom(showModalAtom) - const isOnLandingPage = useIsLandingPage() + const isLandingPage = useIsPage(PageType.LANDING) const media = useMedia() const { t } = useTranslation() @@ -51,7 +51,7 @@ export function LaunchModal({ name={interfaceModalName} maxWidth={media.md ? undefined : LAUNCH_MODAL_DESKTOP_MAX_WIDTH} height={media.md ? LAUNCH_MODAL_MOBILE_MAX_HEIGHT : LAUNCH_MODAL_DESKTOP_MAX_HEIGHT} - isModalOpen={showModal && !isOnLandingPage} + isModalOpen={showModal && !isLandingPage} onClose={() => setShowModal(false)} padding={0} > diff --git a/apps/web/src/components/TopLevelModals/UkDisclaimerModal.tsx b/apps/web/src/components/TopLevelModals/UkDisclaimerModal.tsx index 61aca50d4fc..1dd810d3bc9 100644 --- a/apps/web/src/components/TopLevelModals/UkDisclaimerModal.tsx +++ b/apps/web/src/components/TopLevelModals/UkDisclaimerModal.tsx @@ -1,14 +1,13 @@ import { ButtonEmphasis, ButtonSize, ThemeButton } from 'components/Button/buttons' import Column from 'components/deprecated/Column' -import { bannerText } from 'components/TopLevelBanners/UkBanner' import styled from 'lib/styled-components' import { X } from 'react-feather' +import { useTranslation } from 'react-i18next' import { useCloseModal, useModalIsOpen } from 'state/application/hooks' import { ApplicationModal } from 'state/application/reducer' import { ButtonText, ThemedText } from 'theme/components' import { Modal } from 'uniswap/src/components/modals/Modal' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' const Wrapper = styled(Column)` padding: 8px; @@ -34,6 +33,7 @@ const StyledThemeButton = styled(ThemeButton)` ` export function UkDisclaimerModal() { + const { t } = useTranslation() const isOpen = useModalIsOpen(ApplicationModal.UK_DISCLAIMER) const closeModal = useCloseModal() @@ -45,15 +45,15 @@ export function UkDisclaimerModal() { - + {t('search.ukDisclaimer')} - {bannerText} + {t('notice.uk')} closeModal()}> - + {t('common.dismiss')} diff --git a/apps/web/src/components/TopLevelModals/index.tsx b/apps/web/src/components/TopLevelModals/index.tsx index 621192722e6..b196f9beae7 100644 --- a/apps/web/src/components/TopLevelModals/index.tsx +++ b/apps/web/src/components/TopLevelModals/index.tsx @@ -13,7 +13,7 @@ import AddressClaimModal from 'components/claim/AddressClaimModal' import DevFlagsBox from 'dev/DevFlagsBox' import { useAccount } from 'hooks/useAccount' import useAccountRiskCheck from 'hooks/useAccountRiskCheck' -import { useIsLandingPage } from 'hooks/useIsLandingPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import Bag from 'nft/components/bag/Bag' import TransactionCompleteModal from 'nft/components/collection/TransactionCompleteModal' import { IncreaseLiquidityModal } from 'pages/IncreaseLiquidity/IncreaseLiquidityModal' @@ -27,7 +27,7 @@ import { TestnetModeModal } from 'uniswap/src/features/testnets/TestnetModeModal import { isBetaEnv, isDevEnv } from 'utilities/src/environment/env' export default function TopLevelModals() { - const isLandingPage = useIsLandingPage() + const isLandingPage = useIsPage(PageType.LANDING) const media = useMedia() const addressClaimOpen = useModalIsOpen(ApplicationModal.ADDRESS_CLAIM) diff --git a/apps/web/src/components/TransactionConfirmationModal/index.tsx b/apps/web/src/components/TransactionConfirmationModal/index.tsx index 7f9353d15b2..372a9b29787 100644 --- a/apps/web/src/components/TransactionConfirmationModal/index.tsx +++ b/apps/web/src/components/TransactionConfirmationModal/index.tsx @@ -13,6 +13,7 @@ import { useAccount } from 'hooks/useAccount' import styled, { useTheme } from 'lib/styled-components' import { ReactNode, useCallback, useState } from 'react' import { AlertCircle, ArrowUpCircle, CheckCircle } from 'react-feather' +import { Trans } from 'react-i18next' import { useTransaction } from 'state/transactions/hooks' import { isConfirmedTx } from 'state/transactions/utils' import { CloseIcon, CustomLightSpinner, ExternalLink, ThemedText } from 'theme/components' @@ -23,7 +24,6 @@ import { useIsSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupp import { UniverseChainId } from 'uniswap/src/features/chains/types' import { isL2ChainId } from 'uniswap/src/features/chains/utils' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' const Wrapper = styled.div` diff --git a/apps/web/src/components/V2Unsupported.tsx b/apps/web/src/components/V2Unsupported.tsx index 9bc89565b59..dbd6b3912ec 100644 --- a/apps/web/src/components/V2Unsupported.tsx +++ b/apps/web/src/components/V2Unsupported.tsx @@ -1,7 +1,7 @@ import { AutoColumn } from 'components/deprecated/Column' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const TextWrapper = styled.div` border: 1px solid ${({ theme }) => theme.neutral3}; diff --git a/apps/web/src/components/WalletModal/ConnectionErrorView.tsx b/apps/web/src/components/WalletModal/ConnectionErrorView.tsx index 84b062fcff7..5357ff84e33 100644 --- a/apps/web/src/components/WalletModal/ConnectionErrorView.tsx +++ b/apps/web/src/components/WalletModal/ConnectionErrorView.tsx @@ -3,11 +3,11 @@ import { useConnect } from 'hooks/useConnect' import styled from 'lib/styled-components' import { useCallback } from 'react' import { AlertTriangle } from 'react-feather' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' import { flexColumnNoWrap } from 'theme/styles' import { Modal } from 'uniswap/src/components/modals/Modal' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' const Wrapper = styled.div` ${flexColumnNoWrap}; diff --git a/apps/web/src/components/WalletModal/DownloadWalletOption.tsx b/apps/web/src/components/WalletModal/DownloadWalletOption.tsx index 923d76b3853..d9ad44aecf8 100644 --- a/apps/web/src/components/WalletModal/DownloadWalletOption.tsx +++ b/apps/web/src/components/WalletModal/DownloadWalletOption.tsx @@ -1,17 +1,17 @@ import { InterfaceElementName } from '@uniswap/analytics-events' import UNIWALLET_ICON from 'assets/wallets/uniswap-wallet-icon.png' +import { AppIcon, OptionContainer } from 'components/WalletModal/UniswapWalletOptions' import Column from 'components/deprecated/Column' import Row from 'components/deprecated/Row' -import { AppIcon, OptionContainer } from 'components/WalletModal/UniswapWalletOptions' import styled from 'lib/styled-components' import { useState } from 'react' +import { Trans } from 'react-i18next' import { useOpenModal } from 'state/application/hooks' import { ApplicationModal } from 'state/application/reducer' import { colors } from 'theme/colors' import { Z_INDEX } from 'theme/zIndex' import { Text } from 'ui/src' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' // The light background is needed so that when hovered the background image always becomes lighter even when the app is in dark mode const LightBackground = styled.div` diff --git a/apps/web/src/components/WalletModal/Option.tsx b/apps/web/src/components/WalletModal/Option.tsx index aeb94f9827d..f7e332a7c7f 100644 --- a/apps/web/src/components/WalletModal/Option.tsx +++ b/apps/web/src/components/WalletModal/Option.tsx @@ -6,10 +6,10 @@ import { CONNECTOR_ICON_OVERRIDE_MAP, useRecentConnectorId } from 'components/We import { walletTypeToAmplitudeWalletType } from 'components/Web3Provider/walletConnect' import { useConnect } from 'hooks/useConnect' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' import { flexColumnNoWrap, flexRowNoWrap } from 'theme/styles' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' import { isIFramed } from 'utils/isIFramed' import { Connector } from 'wagmi' diff --git a/apps/web/src/components/WalletModal/PrivacyPolicyNotice.tsx b/apps/web/src/components/WalletModal/PrivacyPolicyNotice.tsx index d6f414096d1..a721462781f 100644 --- a/apps/web/src/components/WalletModal/PrivacyPolicyNotice.tsx +++ b/apps/web/src/components/WalletModal/PrivacyPolicyNotice.tsx @@ -1,6 +1,6 @@ import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ExternalLink, ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const StyledLink = styled(ExternalLink)` font-weight: 535; diff --git a/apps/web/src/components/WalletModal/UniswapWalletOptions.tsx b/apps/web/src/components/WalletModal/UniswapWalletOptions.tsx index 193a6206401..962a4197e4f 100644 --- a/apps/web/src/components/WalletModal/UniswapWalletOptions.tsx +++ b/apps/web/src/components/WalletModal/UniswapWalletOptions.tsx @@ -8,6 +8,7 @@ import Column from 'components/deprecated/Column' import Row from 'components/deprecated/Row' import { useConnect } from 'hooks/useConnect' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { Z_INDEX } from 'theme/zIndex' import { Flex, Image, Text } from 'ui/src' import { UNISWAP_LOGO } from 'ui/src/assets' @@ -16,7 +17,6 @@ import { PhoneDownload } from 'ui/src/components/icons/PhoneDownload' import { ScanQr } from 'ui/src/components/icons/ScanQr' import { iconSizes } from 'ui/src/theme' import { CONNECTION_PROVIDER_IDS } from 'uniswap/src/constants/web3' -import { Trans } from 'uniswap/src/i18n' import { isMobileWeb, isWebIOS } from 'utilities/src/platform' import { openDownloadApp } from 'utils/openDownloadApp' diff --git a/apps/web/src/components/WalletModal/index.tsx b/apps/web/src/components/WalletModal/index.tsx index 0c9d6287a07..aa49e91ff36 100644 --- a/apps/web/src/components/WalletModal/index.tsx +++ b/apps/web/src/components/WalletModal/index.tsx @@ -11,12 +11,12 @@ import Row, { AutoRow } from 'components/deprecated/Row' import { useIsUniExtensionAvailable } from 'hooks/useUniswapWalletOptions' import styled, { css } from 'lib/styled-components' import { useReducer } from 'react' -import { ClickableStyle, ThemedText } from 'theme/components' +import { Trans, useTranslation } from 'react-i18next' +import { ClickableTamaguiStyle, ThemedText } from 'theme/components' import { flexColumnNoWrap } from 'theme/styles' import { Flex, Text } from 'ui/src' import { AccountCTAsExperimentGroup, Experiments } from 'uniswap/src/features/gating/experiments' import { useExperimentGroupName } from 'uniswap/src/features/gating/hooks' -import { Trans, useTranslation } from 'uniswap/src/i18n' const Wrapper = styled.div<{ isUniExtensionAvailable?: boolean }>` ${flexColumnNoWrap}; @@ -45,10 +45,6 @@ const TextSectionWrapper = styled.div` padding: 0 4px; ` -const OtherWalletsDividerRow = styled(Row)<{ clickable?: boolean }>` - ${({ clickable }) => clickable && ClickableStyle}; - user-select: none; -` const Line = styled.div` height: 1px; width: 100%; @@ -90,21 +86,23 @@ export default function WalletModal() { - isUniExtensionAvailable && toggleShowOtherWallets()} + isUniExtensionAvailable && toggleShowOtherWallets()} + {...(isUniExtensionAvailable ? ClickableTamaguiStyle : {})} > - + {isUniExtensionAvailable ? showOtherWallets ? : : null} - + - + diff --git a/apps/web/src/components/WalletModal/shared.tsx b/apps/web/src/components/WalletModal/shared.tsx index 973a8c937d9..9762938534b 100644 --- a/apps/web/src/components/WalletModal/shared.tsx +++ b/apps/web/src/components/WalletModal/shared.tsx @@ -1,5 +1,5 @@ +import { Trans } from 'react-i18next' import { Flex, Text, useMedia } from 'ui/src' -import { Trans } from 'uniswap/src/i18n' export const DetectedBadge = () => { const media = useMedia() diff --git a/apps/web/src/components/Web3Status/index.tsx b/apps/web/src/components/Web3Status/index.tsx index 3ba8cd0793c..0ecaab10a5b 100644 --- a/apps/web/src/components/Web3Status/index.tsx +++ b/apps/web/src/components/Web3Status/index.tsx @@ -15,6 +15,7 @@ import styled from 'lib/styled-components' import { Portal } from 'nft/components/common/Portal' import { darken } from 'polished' import { RefObject, useCallback, useEffect, useRef } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useAppSelector } from 'state/hooks' import { flexRowNoWrap } from 'theme/styles' import { Text } from 'ui/src' @@ -23,7 +24,6 @@ import { AccountCTAsExperimentGroup, Experiments } from 'uniswap/src/features/ga import { useExperimentGroupNameWithLoading } from 'uniswap/src/features/gating/hooks' import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { isIFramed } from 'utils/isIFramed' // https://stackoverflow.com/a/31617326 diff --git a/apps/web/src/components/addLiquidity/OutOfSyncWarning.tsx b/apps/web/src/components/addLiquidity/OutOfSyncWarning.tsx index c047547be8d..f8da7d10aeb 100644 --- a/apps/web/src/components/addLiquidity/OutOfSyncWarning.tsx +++ b/apps/web/src/components/addLiquidity/OutOfSyncWarning.tsx @@ -1,6 +1,6 @@ import { PoolWarning } from 'components/addLiquidity/PoolWarning' +import { Trans } from 'react-i18next' import { uniswapUrls } from 'uniswap/src/constants/urls' -import { Trans } from 'uniswap/src/i18n' export function OutOfSyncWarning() { return ( diff --git a/apps/web/src/components/addLiquidity/OwnershipWarning.tsx b/apps/web/src/components/addLiquidity/OwnershipWarning.tsx index f0d921fe2a9..19780f11a4e 100644 --- a/apps/web/src/components/addLiquidity/OwnershipWarning.tsx +++ b/apps/web/src/components/addLiquidity/OwnershipWarning.tsx @@ -1,7 +1,7 @@ import styled from 'lib/styled-components' import { AlertTriangle } from 'react-feather' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const ExplainerText = styled.div` color: ${({ theme }) => theme.neutral2}; diff --git a/apps/web/src/components/addLiquidity/PoolWarning.tsx b/apps/web/src/components/addLiquidity/PoolWarning.tsx index 3bf192ef7c3..7143c9f8548 100644 --- a/apps/web/src/components/addLiquidity/PoolWarning.tsx +++ b/apps/web/src/components/addLiquidity/PoolWarning.tsx @@ -2,11 +2,11 @@ import Column from 'components/deprecated/Column' import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { ReactNode } from 'react' +import { Trans } from 'react-i18next' import { ExternalLink } from 'theme/components' import { Text } from 'ui/src' import { AlertTriangleFilled } from 'ui/src/components/icons/AlertTriangleFilled' import { iconSizes } from 'ui/src/theme' -import { Trans } from 'uniswap/src/i18n' const Container = styled.div` height: 100%; diff --git a/apps/web/src/components/addLiquidity/TokenTaxV3Warning.tsx b/apps/web/src/components/addLiquidity/TokenTaxV3Warning.tsx index dead159b338..bbaba8d29a8 100644 --- a/apps/web/src/components/addLiquidity/TokenTaxV3Warning.tsx +++ b/apps/web/src/components/addLiquidity/TokenTaxV3Warning.tsx @@ -1,6 +1,6 @@ import { PoolWarning } from 'components/addLiquidity/PoolWarning' +import { Trans } from 'react-i18next' import { uniswapUrls } from 'uniswap/src/constants/urls' -import { Trans } from 'uniswap/src/i18n' export function TokenTaxV3Warning() { return ( diff --git a/apps/web/src/components/swap/GasBreakdownTooltip.tsx b/apps/web/src/components/swap/GasBreakdownTooltip.tsx index 7aab19f3060..3bcbe5c5aa8 100644 --- a/apps/web/src/components/swap/GasBreakdownTooltip.tsx +++ b/apps/web/src/components/swap/GasBreakdownTooltip.tsx @@ -4,6 +4,7 @@ import { AutoColumn } from 'components/deprecated/Column' import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { ReactNode } from 'react' +import { Trans } from 'react-i18next' import { InterfaceTrade } from 'state/routing/types' import { isPreviewTrade, isUniswapXTrade } from 'state/routing/utils' import { Divider, ExternalLink, ThemedText } from 'theme/components' @@ -12,7 +13,6 @@ import { uniswapUrls } from 'uniswap/src/constants/urls' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId' import { toGraphQLChain } from 'uniswap/src/features/chains/utils' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const Container = styled(AutoColumn)` diff --git a/apps/web/src/components/swap/LimitDisclaimer.tsx b/apps/web/src/components/swap/LimitDisclaimer.tsx index fdd7f56c40d..fa86e883692 100644 --- a/apps/web/src/components/swap/LimitDisclaimer.tsx +++ b/apps/web/src/components/swap/LimitDisclaimer.tsx @@ -1,7 +1,7 @@ import Column from 'components/deprecated/Column' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ExternalLink, ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const Container = styled(Column)` background-color: ${({ theme }) => theme.surface2}; diff --git a/apps/web/src/components/swap/PriceImpactModal.tsx b/apps/web/src/components/swap/PriceImpactModal.tsx index a732ed10aa0..7eace1cece9 100644 --- a/apps/web/src/components/swap/PriceImpactModal.tsx +++ b/apps/web/src/components/swap/PriceImpactModal.tsx @@ -1,10 +1,10 @@ import { Percent } from '@uniswap/sdk-core' import { GetHelpHeader } from 'components/Modal/GetHelpHeader' +import { Trans } from 'react-i18next' import { Button, Flex, Text } from 'ui/src' import { AlertTriangleFilled } from 'ui/src/components/icons/AlertTriangleFilled' import { Modal } from 'uniswap/src/components/modals/Modal' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' import { useFormatter } from 'utils/formatNumbers' interface PriceImpactModalProps { diff --git a/apps/web/src/components/swap/SwapDetails.tsx b/apps/web/src/components/swap/SwapDetails.tsx index a87f6c60b6c..d7023313859 100644 --- a/apps/web/src/components/swap/SwapDetails.tsx +++ b/apps/web/src/components/swap/SwapDetails.tsx @@ -14,6 +14,7 @@ import styled, { useTheme } from 'lib/styled-components' import ms from 'ms' import { ReactNode, useMemo, useState } from 'react' import { AlertTriangle } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { Text } from 'rebass' import { InterfaceTrade, LimitOrderTrade, RouterPreference } from 'state/routing/types' import { isClassicTrade, isLimitTrade } from 'state/routing/utils' @@ -21,7 +22,6 @@ import { useRouterPreference, useUserSlippageTolerance } from 'state/user/hooks' import { ExternalLink, Separator, ThemedText } from 'theme/components' import { Flex, HeightAnimator, SpinningLoader } from 'ui/src' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans, t } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import getRoutingDiagramEntries from 'utils/getRoutingDiagramEntries' import { formatSwapButtonClickEventProperties } from 'utils/loggingFormatters' @@ -123,6 +123,7 @@ export function SwapDetails({ isLoading: boolean priceImpact?: Percent }) { + const { t } = useTranslation() const isAutoSlippage = useUserSlippageTolerance()[0] === 'auto' const [routerPreference] = useRouterPreference() const routes = isClassicTrade(trade) ? getRoutingDiagramEntries(trade) : undefined @@ -147,7 +148,7 @@ export function SwapDetails({ buttonText: isLimitTrade(trade) ? t('swap.placeOrder') : t('swap.confirmSwap'), } } - }, [allowance, trade]) + }, [allowance, t, trade]) return ( <> diff --git a/apps/web/src/components/swap/SwapDetailsDropdown.tsx b/apps/web/src/components/swap/SwapDetailsDropdown.tsx index 07a72fff23c..a9dcad035dc 100644 --- a/apps/web/src/components/swap/SwapDetailsDropdown.tsx +++ b/apps/web/src/components/swap/SwapDetailsDropdown.tsx @@ -10,12 +10,12 @@ import styled, { useTheme } from 'lib/styled-components' import { formatCommonPropertiesForTrade } from 'lib/utils/analytics' import { useState } from 'react' import { ChevronDown } from 'react-feather' +import { Trans } from 'react-i18next' import { InterfaceTrade } from 'state/routing/types' import { isSubmittableTrade } from 'state/routing/utils' import { ThemedText } from 'theme/components' import { HeightAnimator } from 'ui/src' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/components/swap/SwapHeader.tsx b/apps/web/src/components/swap/SwapHeader.tsx index 36a889b4c96..5179efb472c 100644 --- a/apps/web/src/components/swap/SwapHeader.tsx +++ b/apps/web/src/components/swap/SwapHeader.tsx @@ -3,12 +3,12 @@ import { RowBetween, RowFixed } from 'components/deprecated/Row' import { SwapHeaderTabButton } from 'components/swap/styled' import styled from 'lib/styled-components' import { useCallback, useEffect } from 'react' +import { Trans } from 'react-i18next' import { useLocation, useNavigate } from 'react-router-dom' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { useSwapAndLimitContext, useSwapContext } from 'state/swap/useSwapContext' import { InterfaceEventNameLocal } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' import { SwapTab } from 'uniswap/src/types/screens/interface' import { isIFramed } from 'utils/isIFramed' diff --git a/apps/web/src/components/swap/SwapLineItem.tsx b/apps/web/src/components/swap/SwapLineItem.tsx index 170e441ce2c..1a29ce52a74 100644 --- a/apps/web/src/components/swap/SwapLineItem.tsx +++ b/apps/web/src/components/swap/SwapLineItem.tsx @@ -10,8 +10,10 @@ import GasEstimateTooltip from 'components/swap/GasEstimateTooltip' import { RoutingTooltip, SwapRoute } from 'components/swap/SwapRoute' import TradePrice from 'components/swap/TradePrice' import { useUSDPrice } from 'hooks/useUSDPrice' +import { TFunction } from 'i18next' import styled, { DefaultTheme } from 'lib/styled-components' import React, { ReactNode, useEffect, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { InterfaceTrade, SubmittableTrade, TradeFillType } from 'state/routing/types' import { isLimitTrade, isPreviewTrade, isUniswapXTrade, isUniswapXTradeType } from 'state/routing/utils' import { useUserSlippageTolerance } from 'state/user/hooks' @@ -19,7 +21,6 @@ import { SlippageTolerance } from 'state/user/types' import { ExternalLink, ThemedText } from 'theme/components' import { Flex } from 'ui/src' import { chainSupportsGasEstimates } from 'uniswap/src/features/chains/utils' -import { Trans, t } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' import { getPriceImpactColor } from 'utils/prices' @@ -132,6 +133,7 @@ function FeeRow({ trade: { swapFee, outputAmount } }: { trade: SubmittableTrade // eslint-disable-next-line consistent-return function useLineItem(props: SwapLineItemProps): LineItemData | undefined { + const { t } = useTranslation() const { trade, syncing, allowedSlippage, type, priceImpact } = props const { formatPercent } = useFormatter() const isAutoSlippage = useUserSlippageTolerance()[0] === SlippageTolerance.Auto @@ -240,7 +242,7 @@ function useLineItem(props: SwapLineItemProps): LineItemData | undefined { } case SwapLineItemType.INPUT_TOKEN_FEE_ON_TRANSFER: case SwapLineItemType.OUTPUT_TOKEN_FEE_ON_TRANSFER: - return getFOTLineItem(props) + return getFOTLineItem({ ...props, t }) case SwapLineItemType.EXPIRY: if (!isLimitTrade(trade)) { return undefined @@ -252,7 +254,7 @@ function useLineItem(props: SwapLineItemProps): LineItemData | undefined { } } -function getFOTLineItem({ type, trade }: SwapLineItemProps): LineItemData | undefined { +function getFOTLineItem({ type, trade, t }: SwapLineItemProps & { t: TFunction }): LineItemData | undefined { const isInput = type === SwapLineItemType.INPUT_TOKEN_FEE_ON_TRANSFER const currency = isInput ? trade.inputAmount.currency : trade.outputAmount.currency const tax = isInput ? trade.inputTax : trade.outputTax diff --git a/apps/web/src/components/swap/SwapPreview.tsx b/apps/web/src/components/swap/SwapPreview.tsx index 6ff18513e0f..9b8b877c2dd 100644 --- a/apps/web/src/components/swap/SwapPreview.tsx +++ b/apps/web/src/components/swap/SwapPreview.tsx @@ -3,10 +3,10 @@ import Column, { AutoColumn } from 'components/deprecated/Column' import { SwapModalHeaderAmount } from 'components/swap/SwapModalHeaderAmount' import { useUSDPrice } from 'hooks/useUSDPrice' import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { InterfaceTrade } from 'state/routing/types' import { isPreviewTrade } from 'state/routing/utils' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' import { CurrencyField } from 'uniswap/src/types/currency' const HeaderContainer = styled(AutoColumn)` diff --git a/apps/web/src/components/swap/SwapRoute.tsx b/apps/web/src/components/swap/SwapRoute.tsx index f082e4319ef..03b4b75bd0e 100644 --- a/apps/web/src/components/swap/SwapRoute.tsx +++ b/apps/web/src/components/swap/SwapRoute.tsx @@ -2,12 +2,12 @@ import RouterLabel from 'components/RouterLabel' import Column from 'components/deprecated/Column' import { RowBetween } from 'components/deprecated/Row' import { UniswapXDescription } from 'components/swap/GasBreakdownTooltip' +import { Trans } from 'react-i18next' import { ClassicTrade, SubmittableTrade } from 'state/routing/types' import { isClassicTrade } from 'state/routing/utils' import { Separator, ThemedText } from 'theme/components' import RoutingDiagram from 'uniswap/src/components/RoutingDiagram/RoutingDiagram' import { chainSupportsGasEstimates } from 'uniswap/src/features/chains/utils' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' import getRoutingDiagramEntries from 'utils/getRoutingDiagramEntries' diff --git a/apps/web/src/components/swap/SwapSkeleton.tsx b/apps/web/src/components/swap/SwapSkeleton.tsx index afbdb96cd70..936f4b84771 100644 --- a/apps/web/src/components/swap/SwapSkeleton.tsx +++ b/apps/web/src/components/swap/SwapSkeleton.tsx @@ -1,8 +1,8 @@ import { ArrowContainer, ArrowWrapper } from 'components/swap/styled' import styled, { useTheme } from 'lib/styled-components' import { ArrowDown } from 'react-feather' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const StyledArrowWrapper = styled(ArrowWrapper)` position: absolute; diff --git a/apps/web/src/components/swap/UnsupportedCurrencyFooter.tsx b/apps/web/src/components/swap/UnsupportedCurrencyFooter.tsx index 53ce07865de..46bdb2d3c69 100644 --- a/apps/web/src/components/swap/UnsupportedCurrencyFooter.tsx +++ b/apps/web/src/components/swap/UnsupportedCurrencyFooter.tsx @@ -8,6 +8,7 @@ import { useCurrencyInfo } from 'hooks/Tokens' import { useAccount } from 'hooks/useAccount' import styled from 'lib/styled-components' import { useState } from 'react' +import { Trans } from 'react-i18next' import { CloseIcon, ExternalLink, ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' import { Text } from 'ui/src' @@ -15,7 +16,6 @@ import { Modal } from 'uniswap/src/components/modals/Modal' import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { shortenAddress } from 'utilities/src/addresses' diff --git a/apps/web/src/components/swap/__snapshots__/SwapLineItem.test.tsx.snap b/apps/web/src/components/swap/__snapshots__/SwapLineItem.test.tsx.snap index 69821a07506..febfc388014 100644 --- a/apps/web/src/components/swap/__snapshots__/SwapLineItem.test.tsx.snap +++ b/apps/web/src/components/swap/__snapshots__/SwapLineItem.test.tsx.snap @@ -340,7 +340,7 @@ exports[`SwapLineItem.tsx dutch order eth input 1`] = ` aggregates liquidity sources for better prices and gas free swaps.
@@ -377,7 +377,7 @@ exports[`SwapLineItem.tsx dutch order eth input 1`] = ` aggregates liquidity sources for better prices and gas free swaps. @@ -648,7 +648,7 @@ exports[`SwapLineItem.tsx dutch order eth input 1`] = ` aggregates liquidity sources for better prices and gas free swaps. @@ -1010,7 +1010,7 @@ exports[`SwapLineItem.tsx dutch v2 order eth input 1`] = ` aggregates liquidity sources for better prices and gas free swaps. @@ -1047,7 +1047,7 @@ exports[`SwapLineItem.tsx dutch v2 order eth input 1`] = ` aggregates liquidity sources for better prices and gas free swaps. @@ -1318,7 +1318,7 @@ exports[`SwapLineItem.tsx dutch v2 order eth input 1`] = ` aggregates liquidity sources for better prices and gas free swaps. @@ -2029,7 +2029,7 @@ exports[`SwapLineItem.tsx exact input 1`] = `
- Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step. + Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
@@ -2736,7 +2736,7 @@ exports[`SwapLineItem.tsx exact input api 1`] = `
- Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step. + Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
@@ -3487,7 +3487,7 @@ exports[`SwapLineItem.tsx exact output 1`] = `
- This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step. + This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
@@ -4251,7 +4251,7 @@ exports[`SwapLineItem.tsx fee on buy 1`] = `
- Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step. + Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
@@ -5015,7 +5015,7 @@ exports[`SwapLineItem.tsx fee on sell 1`] = `
- Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step. + Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
diff --git a/apps/web/src/constants/deprecatedTokenSafety.tsx b/apps/web/src/constants/deprecatedTokenSafety.tsx index c9a76a838bc..b86b7f09a83 100644 --- a/apps/web/src/constants/deprecatedTokenSafety.tsx +++ b/apps/web/src/constants/deprecatedTokenSafety.tsx @@ -4,9 +4,10 @@ * TODO(WEB-4896): remove this file */ import { useCurrencyInfo } from 'hooks/Tokens' +import { Trans } from 'react-i18next' import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { Trans, t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' export const TOKEN_SAFETY_ARTICLE = 'https://support.uniswap.org/hc/en-us/articles/8723118437133' @@ -37,26 +38,26 @@ export function getWarningCopy(warning: Warning | undefined, plural = false, tok switch (warning.level) { case SafetyLevel.MediumWarning: heading = tokenSymbol - ? t('token.safety.warning.medium.heading.named', { + ? i18n.t('token.safety.warning.medium.heading.named', { tokenSymbol, }) - : t('token.safety.warning.medium.heading.default', { count: plural ? 2 : 1 }) - description = t('token.safety.warning.doYourOwnResearch') + : i18n.t('token.safety.warning.medium.heading.default', { count: plural ? 2 : 1 }) + description = i18n.t('token.safety.warning.doYourOwnResearch') break case SafetyLevel.StrongWarning: heading = tokenSymbol - ? t('token.safety.warning.strong.heading.named', { + ? i18n.t('token.safety.warning.strong.heading.named', { tokenSymbol, }) - : t('token.safety.warning.strong.heading.default', { count: plural ? 2 : 1 }) - description = t('token.safety.warning.doYourOwnResearch') + : i18n.t('token.safety.warning.strong.heading.default', { count: plural ? 2 : 1 }) + description = i18n.t('token.safety.warning.doYourOwnResearch') break case SafetyLevel.Blocked: description = tokenSymbol - ? t(`token.safety.warning.blocked.description.named`, { + ? i18n.t(`token.safety.warning.blocked.description.named`, { tokenSymbol, }) - : t('token.safety.warning.blocked.description.default', { count: plural ? 2 : 1 }) + : i18n.t('token.safety.warning.blocked.description.default', { count: plural ? 2 : 1 }) break } } diff --git a/apps/web/src/hooks/useIsBuyPage.ts b/apps/web/src/hooks/useIsBuyPage.ts deleted file mode 100644 index bb8eae83d3a..00000000000 --- a/apps/web/src/hooks/useIsBuyPage.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useLocation } from 'react-router-dom' - -export function useIsBuyPage() { - const { pathname } = useLocation() - return pathname === '/buy' -} diff --git a/apps/web/src/hooks/useIsExplorePage.ts b/apps/web/src/hooks/useIsExplorePage.ts deleted file mode 100644 index ba2ff4b3f81..00000000000 --- a/apps/web/src/hooks/useIsExplorePage.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useLocation } from 'react-router-dom' -export function useIsExplorePage() { - const { pathname } = useLocation() - return pathname.includes('/explore') -} diff --git a/apps/web/src/hooks/useIsLandingPage.ts b/apps/web/src/hooks/useIsLandingPage.ts deleted file mode 100644 index 8a6f9693f55..00000000000 --- a/apps/web/src/hooks/useIsLandingPage.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useLocation } from 'react-router-dom' - -export function useIsLandingPage() { - const { pathname } = useLocation() - return pathname === '/' -} diff --git a/apps/web/src/hooks/useIsLimitPage.ts b/apps/web/src/hooks/useIsLimitPage.ts deleted file mode 100644 index 8712902e7a3..00000000000 --- a/apps/web/src/hooks/useIsLimitPage.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useLocation } from 'react-router-dom' -export function useIsLimitPage() { - const { pathname } = useLocation() - return pathname.endsWith('/limit') -} diff --git a/apps/web/src/hooks/useIsMigrateV3Page.ts b/apps/web/src/hooks/useIsMigrateV3Page.ts deleted file mode 100644 index 0d64899f832..00000000000 --- a/apps/web/src/hooks/useIsMigrateV3Page.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useLocation } from 'react-router-dom' -export function useIsMigrateV3Page() { - const { pathname } = useLocation() - return pathname.includes('/migrate/v3') -} diff --git a/apps/web/src/hooks/useIsNftPage.ts b/apps/web/src/hooks/useIsNftPage.ts deleted file mode 100644 index 87dfc718838..00000000000 --- a/apps/web/src/hooks/useIsNftPage.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { useLocation } from 'react-router-dom' - -export function useIsNftPage() { - const { pathname } = useLocation() - return pathname.startsWith('/nfts') -} - -export function useIsNftProfilePage() { - const { pathname } = useLocation() - return pathname.startsWith('/nfts/profile') -} - -export function useIsNftDetailsPage() { - const { pathname } = useLocation() - return pathname.startsWith('/nfts/asset') -} diff --git a/apps/web/src/hooks/useIsPage.test.tsx b/apps/web/src/hooks/useIsPage.test.tsx new file mode 100644 index 00000000000..f1840abeda0 --- /dev/null +++ b/apps/web/src/hooks/useIsPage.test.tsx @@ -0,0 +1,45 @@ +import { renderHook } from '@testing-library/react' +import { MatchType, PageType, useIsPage } from 'hooks/useIsPage' +import { BrowserRouter } from 'react-router-dom' + +describe('useIsPage', () => { + it.each([ + [PageType.BUY, '/buy'], + [PageType.EXPLORE, '/explore/details'], + [PageType.LANDING, '/'], + [PageType.LIMIT, '/limit'], + [PageType.MIGRATE_V3, '/migrate/v3/info'], + [PageType.NFTS, '/nfts/asset/123'], + [PageType.SEND, '/path/to/send'], + ])('matches default behavior for %s based on path %s', (pageType, path) => { + window.history.pushState({}, '', path) + const { result } = renderHook(() => useIsPage(pageType), { + wrapper: BrowserRouter, + }) + expect(result.current).toBe(true) + }) + + it.each([ + [PageType.SWAP, '/swap/details', MatchType.STARTS_WITH], + [PageType.POSITIONS, '/view/positions', MatchType.INCLUDES], + [PageType.SEND, '/send', MatchType.EXACT], + ])('overrides default MatchType for %s when custom MatchType %s is provided', (pageType, path, matchType) => { + window.history.pushState({}, '', path) + const { result } = renderHook(() => useIsPage(pageType, matchType), { + wrapper: BrowserRouter, + }) + expect(result.current).toBe(true) + }) + + it.each([ + [PageType.NFTS, '/wrong/path/nfts'], + [PageType.SWAP, '/different/swap/location'], + [PageType.POSITIONS, '/incorrect/position'], + ])('does not match default behavior for %s with path %s', (pageType, path) => { + window.history.pushState({}, '', path) + const { result } = renderHook(() => useIsPage(pageType), { + wrapper: BrowserRouter, + }) + expect(result.current).toBe(false) + }) +}) diff --git a/apps/web/src/hooks/useIsPage.ts b/apps/web/src/hooks/useIsPage.ts new file mode 100644 index 00000000000..9b1b271095b --- /dev/null +++ b/apps/web/src/hooks/useIsPage.ts @@ -0,0 +1,65 @@ +import { useLocation } from 'react-router-dom' + +export enum PageType { + BUY = '/buy', + EXPLORE = '/explore', + LANDING = '/', + LIMIT = '/limit', + MIGRATE_V3 = '/migrate/v3', + NFTS = '/nfts', + NFTS_DETAILS = '/nfts/asset', + NFTS_PROFILE = '/nfts/profile', + POSITIONS = '/positions', + SEND = '/send', + SWAP = '/swap', +} + +// eslint-disable-next-line import/no-unused-modules -- currently used in a test file +export enum MatchType { + EXACT, + STARTS_WITH, + ENDS_WITH, + INCLUDES, +} + +// Default mapping of PageType to MatchType +const pageMatchDefaults: Record = { + [PageType.BUY]: MatchType.EXACT, + [PageType.EXPLORE]: MatchType.INCLUDES, + [PageType.LANDING]: MatchType.EXACT, + [PageType.LIMIT]: MatchType.ENDS_WITH, + [PageType.MIGRATE_V3]: MatchType.INCLUDES, + [PageType.NFTS]: MatchType.STARTS_WITH, + [PageType.NFTS_DETAILS]: MatchType.STARTS_WITH, + [PageType.NFTS_PROFILE]: MatchType.STARTS_WITH, + [PageType.POSITIONS]: MatchType.INCLUDES, + [PageType.SEND]: MatchType.ENDS_WITH, + [PageType.SWAP]: MatchType.ENDS_WITH, +} + +/** + * Custom hook to check if the current pathname matches a specified page path. + * + * @param {PageType} page - The page path to check (e.g., '/explore', '/nfts/profile') + * @param {MatchType} [matchTypeOverride] - Optional match type to override the default + * @returns {boolean} - True if the pathname matches the condition, false otherwise + */ +export function useIsPage(page: PageType, matchTypeOverride?: MatchType) { + const { pathname } = useLocation() + + // Determine the match type: override or default from the mapping + const matchType = matchTypeOverride ?? pageMatchDefaults[page] + + switch (matchType) { + case MatchType.EXACT: + return pathname === page + case MatchType.ENDS_WITH: + return pathname.endsWith(page) + case MatchType.INCLUDES: + return pathname.includes(page) + case MatchType.STARTS_WITH: + return pathname.startsWith(page) + default: + return pathname === page + } +} diff --git a/apps/web/src/hooks/useIsPositionsPage.ts b/apps/web/src/hooks/useIsPositionsPage.ts deleted file mode 100644 index 32fd75265a5..00000000000 --- a/apps/web/src/hooks/useIsPositionsPage.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useLocation } from 'react-router-dom' -export function useIsPositionsPage() { - const { pathname } = useLocation() - return pathname.includes('/positions') -} diff --git a/apps/web/src/hooks/useIsSendPage.ts b/apps/web/src/hooks/useIsSendPage.ts deleted file mode 100644 index edfaade32ee..00000000000 --- a/apps/web/src/hooks/useIsSendPage.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useLocation } from 'react-router-dom' -export function useIsSendPage() { - const { pathname } = useLocation() - return pathname.endsWith('/send') -} diff --git a/apps/web/src/hooks/useIsSwapPage.ts b/apps/web/src/hooks/useIsSwapPage.ts deleted file mode 100644 index 0715f5e648d..00000000000 --- a/apps/web/src/hooks/useIsSwapPage.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { useLocation } from 'react-router-dom' -export function useIsSwapPage() { - const { pathname } = useLocation() - return pathname.endsWith('/swap') -} diff --git a/apps/web/src/hooks/useUniswapXSwapCallback.ts b/apps/web/src/hooks/useUniswapXSwapCallback.ts index 73b89c3a8a9..eae2947e19e 100644 --- a/apps/web/src/hooks/useUniswapXSwapCallback.ts +++ b/apps/web/src/hooks/useUniswapXSwapCallback.ts @@ -16,6 +16,7 @@ import { useAccount } from 'hooks/useAccount' import { useEthersWeb3Provider } from 'hooks/useEthersProvider' import { formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics' import { useCallback, useRef } from 'react' +import { useTranslation } from 'react-i18next' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { DutchOrderTrade, @@ -89,6 +90,7 @@ export function useUniswapXSwapCallback({ fiatValues: { amountIn?: number; amountOut?: number; feeUsd?: number } allowedSlippage: Percent }) { + const { t } = useTranslation() const account = useAccount() const accountRef = useRef(account) accountRef.current = account @@ -196,7 +198,7 @@ export function useUniswapXSwapCallback({ } catch (error) { if (didUserReject(error)) { walletTrace.setStatus('cancelled') - throw new UserRejectedRequestError(swapErrorToUserReadableMessage(error)) + throw new UserRejectedRequestError(swapErrorToUserReadableMessage(t, error)) } else { throw error } @@ -321,10 +323,10 @@ export function useUniswapXSwapCallback({ throw error } else { trace.setError(error) - throw new Error(swapErrorToUserReadableMessage(error)) + throw new Error(swapErrorToUserReadableMessage(t, error)) } } }), - [chainId, trade, allowedSlippage, fiatValues, portfolioBalanceUsd, analyticsContext], + [trade, chainId, allowedSlippage, fiatValues, portfolioBalanceUsd, analyticsContext, t], ) } diff --git a/apps/web/src/hooks/useUniversalRouter.ts b/apps/web/src/hooks/useUniversalRouter.ts index 46d9c7b0858..9635c92bab6 100644 --- a/apps/web/src/hooks/useUniversalRouter.ts +++ b/apps/web/src/hooks/useUniversalRouter.ts @@ -17,12 +17,13 @@ import { useGetTransactionDeadline } from 'hooks/useTransactionDeadline' import useBlockNumber from 'lib/hooks/useBlockNumber' import { formatCommonPropertiesForTrade, formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics' import { useCallback, useRef } from 'react' +import { useTranslation } from 'react-i18next' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { ClassicTrade, TradeFillType } from 'state/routing/types' import { useUserSlippageTolerance } from 'state/user/hooks' import { trace } from 'tracing/trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { calculateGasMargin } from 'utils/calculateGasMargin' @@ -34,7 +35,7 @@ import { getWalletMeta } from 'utils/walletMeta' /** Thrown when gas estimation fails. This class of error usually requires an emulator to determine the root cause. */ class GasEstimationError extends Error { constructor() { - super(t('swap.error.expectedToFail')) + super(i18n.t('swap.error.expectedToFail')) } } @@ -44,7 +45,7 @@ class GasEstimationError extends Error { */ class ModifiedSwapError extends Error { constructor() { - super(t('swap.error.modifiedByWallet')) + super(i18n.t('swap.error.modifiedByWallet')) } } @@ -60,6 +61,7 @@ export function useUniversalRouterSwapCallback( fiatValues: { amountIn?: number; amountOut?: number; feeUsd?: number }, options: SwapOptions, ) { + const { t } = useTranslation() const account = useAccount() const accountRef = useRef(account) accountRef.current = account @@ -143,7 +145,7 @@ export function useUniversalRouterSwapCallback( } catch (error) { if (didUserReject(error)) { walletTrace.setStatus('cancelled') - throw new UserRejectedRequestError(swapErrorToUserReadableMessage(error)) + throw new UserRejectedRequestError(swapErrorToUserReadableMessage(t, error)) } else { throw error } @@ -188,7 +190,7 @@ export function useUniversalRouterSwapCallback( throw error } else { trace.setError(error) - throw Error(swapErrorToUserReadableMessage(error)) + throw Error(swapErrorToUserReadableMessage(t, error)) } } }), diff --git a/apps/web/src/hooks/useWrapCallback.tsx b/apps/web/src/hooks/useWrapCallback.tsx index ba2142c4403..44d6985e0cf 100644 --- a/apps/web/src/hooks/useWrapCallback.tsx +++ b/apps/web/src/hooks/useWrapCallback.tsx @@ -6,6 +6,7 @@ import useNativeCurrency from 'lib/hooks/useNativeCurrency' import { formatToDecimal, getTokenAddress } from 'lib/utils/analytics' import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount' import { useMemo, useRef, useState } from 'react' +import { Trans } from 'react-i18next' import { useCurrencyBalance } from 'state/connection/hooks' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { useTransactionAdder } from 'state/transactions/hooks' @@ -14,7 +15,6 @@ import { trace } from 'tracing/trace' import { WRAPPED_NATIVE_CURRENCY } from 'uniswap/src/constants/tokens' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { WrapType } from 'uniswap/src/features/transactions/types/wrap' -import { Trans } from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' const NOT_APPLICABLE = { wrapType: WrapType.NotApplicable } diff --git a/apps/web/src/index.tsx b/apps/web/src/index.tsx index 4fcf67e419d..96ccbfa9c5d 100644 --- a/apps/web/src/index.tsx +++ b/apps/web/src/index.tsx @@ -19,6 +19,7 @@ import App from 'pages/App' import { PropsWithChildren, StrictMode, useEffect, useMemo } from 'react' import { createRoot } from 'react-dom/client' import { Helmet, HelmetProvider } from 'react-helmet-async/lib/index' +import { I18nextProvider } from 'react-i18next' import { Provider } from 'react-redux' import { BrowserRouter, HashRouter, useLocation } from 'react-router-dom' import store from 'state' @@ -38,6 +39,7 @@ import { SharedQueryClient } from 'uniswap/src/data/apiClients/SharedQueryClient import { DUMMY_STATSIG_SDK_KEY } from 'uniswap/src/features/gating/constants' import { LocalizationContextProvider } from 'uniswap/src/features/language/LocalizationContext' import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context' +import i18n from 'uniswap/src/i18n' import { isBrowserRouterEnabled } from 'utils/env' import { unregister as unregisterServiceWorker } from 'utils/serviceWorker' import { getCanonicalUrl } from 'utils/urlRoutes' @@ -122,33 +124,35 @@ createRoot(container).render( - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/src/nft/components/bag/Bag.tsx b/apps/web/src/nft/components/bag/Bag.tsx index 71e2548e8ee..0263ada9af7 100644 --- a/apps/web/src/nft/components/bag/Bag.tsx +++ b/apps/web/src/nft/components/bag/Bag.tsx @@ -1,7 +1,7 @@ import { NFTEventName } from '@uniswap/analytics-events' import { Box } from 'components/deprecated/Box' import { useIsMobile } from 'hooks/screenSize/useIsMobile' -import { useIsNftDetailsPage, useIsNftPage, useIsNftProfilePage } from 'hooks/useIsNftPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import styled from 'lib/styled-components' import { Column } from 'nft/components/Flex' import * as styles from 'nft/components/bag/Bag.css' @@ -16,9 +16,9 @@ import { useBag, useProfilePageState, useSellAsset, useSubscribeScrollState } fr import { BagStatus, ProfilePageStateType } from 'nft/types' import { formatAssetEventProperties, recalculateBagUsingPooledAssets } from 'nft/utils' import { useCallback, useEffect, useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { Z_INDEX } from 'theme/zIndex' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' export const BAG_WIDTH = 320 export const XXXL_BAG_WIDTH = 360 @@ -111,9 +111,9 @@ const Bag = () => { })) const { uncheckedItemsInBag } = useBag(({ itemsInBag }) => ({ uncheckedItemsInBag: itemsInBag })) - const isProfilePage = useIsNftProfilePage() - const isDetailsPage = useIsNftDetailsPage() - const isNFTPage = useIsNftPage() + const isProfilePage = useIsPage(PageType.NFTS_PROFILE) + const isDetailsPage = useIsPage(PageType.NFTS_DETAILS) + const isNFTPage = useIsPage(PageType.NFTS) const isMobile = useIsMobile() const itemsInBag = useMemo(() => recalculateBagUsingPooledAssets(uncheckedItemsInBag), [uncheckedItemsInBag]) diff --git a/apps/web/src/nft/components/bag/BagFooter.test.tsx b/apps/web/src/nft/components/bag/BagFooter.test.tsx index d123f8e5ca5..94747f4aa4b 100644 --- a/apps/web/src/nft/components/bag/BagFooter.test.tsx +++ b/apps/web/src/nft/components/bag/BagFooter.test.tsx @@ -41,6 +41,14 @@ jest.mock('graphql/data/nft/NftUniversalRouterAddress', () => { }) jest.mock('hooks/usePermit2Allowance') jest.mock('nft/hooks/usePriceImpact') +jest.mock('utilities/src/logger/logger', () => ({ + logger: { + error: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + debug: jest.fn(), + }, +})) const renderBagFooter = () => { render( undefined} eventProperties={{}} />) diff --git a/apps/web/src/nft/components/bag/BagFooter.tsx b/apps/web/src/nft/components/bag/BagFooter.tsx index 4145bac2660..a9f78710499 100644 --- a/apps/web/src/nft/components/bag/BagFooter.tsx +++ b/apps/web/src/nft/components/bag/BagFooter.tsx @@ -32,6 +32,7 @@ import { useTokenInput } from 'nft/hooks/useTokenInput' import { BagStatus } from 'nft/types' import { PropsWithChildren, useEffect, useMemo, useState } from 'react' import { AlertTriangle, ChevronDown } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { InterfaceTrade, TradeFillType, TradeState } from 'state/routing/types' import { ThemedText } from 'theme/components' import { useIsSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId' @@ -39,7 +40,6 @@ import { UniverseChainId } from 'uniswap/src/features/chains/types' import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans, t } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const FooterContainer = styled.div` @@ -228,6 +228,7 @@ const FiatValue = ({ tradeState: TradeState usingPayWithAnyToken: boolean }) => { + const { t } = useTranslation() const { formatNumberOrString } = useFormatter() if (!usdcValue) { diff --git a/apps/web/src/nft/components/bag/BagHeader.tsx b/apps/web/src/nft/components/bag/BagHeader.tsx index d6eb96627e4..9f764d5966f 100644 --- a/apps/web/src/nft/components/bag/BagHeader.tsx +++ b/apps/web/src/nft/components/bag/BagHeader.tsx @@ -2,8 +2,8 @@ import { OpacityHoverState } from 'components/Common/styles' import styled from 'lib/styled-components' import { BagCloseIcon } from 'nft/components/icons' import { useMemo } from 'react' +import { Trans } from 'react-i18next' import { ButtonText, ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const ClearButton = styled(ButtonText)` color: ${({ theme }) => theme.neutral2}; diff --git a/apps/web/src/nft/components/bag/ButtonStates.tsx b/apps/web/src/nft/components/bag/ButtonStates.tsx index 5aab1a9cb66..2981a56046e 100644 --- a/apps/web/src/nft/components/bag/ButtonStates.tsx +++ b/apps/web/src/nft/components/bag/ButtonStates.tsx @@ -2,7 +2,7 @@ import { ConnectWalletButtonText } from 'components/NavBar/accountCTAsExperiment import { DefaultTheme } from 'lib/styled-components' import { PriceImpact } from 'nft/hooks/usePriceImpact' import { ReactNode } from 'react' -import { Trans } from 'uniswap/src/i18n' +import { Trans } from 'react-i18next' export enum BuyButtonStates { WALLET_NOT_CONNECTED, diff --git a/apps/web/src/nft/components/bag/EmptyContent.tsx b/apps/web/src/nft/components/bag/EmptyContent.tsx index 7b759ee9b8e..6e697d2efa4 100644 --- a/apps/web/src/nft/components/bag/EmptyContent.tsx +++ b/apps/web/src/nft/components/bag/EmptyContent.tsx @@ -1,4 +1,4 @@ -import { useIsNftProfilePage } from 'hooks/useIsNftPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import styled from 'lib/styled-components' import { Center, Column } from 'nft/components/Flex' import { BagIcon, LargeTagIcon } from 'nft/components/icons' @@ -11,7 +11,7 @@ const StyledColumn = styled(Column)` ` const EmptyState = () => { - const isProfilePage = useIsNftProfilePage() + const isProfilePage = useIsPage(PageType.NFTS_PROFILE) return ( diff --git a/apps/web/src/nft/components/card/icons.tsx b/apps/web/src/nft/components/card/icons.tsx index 6f9e9a2313d..fab8d5ea360 100644 --- a/apps/web/src/nft/components/card/icons.tsx +++ b/apps/web/src/nft/components/card/icons.tsx @@ -1,13 +1,13 @@ -import Row from 'components/deprecated/Row' import { MouseoverTooltip } from 'components/Tooltip' +import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { getMarketplaceIcon } from 'nft/components/card/utils' import { CollectionSelectedAssetIcon } from 'nft/components/icons' import { Markets } from 'nft/types' import { AlertTriangle, Check, Tag } from 'react-feather' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' import { NftStandard } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const StyledMarketplaceContainer = styled.div<{ isText?: boolean }>` diff --git a/apps/web/src/nft/components/card/media.tsx b/apps/web/src/nft/components/card/media.tsx index 6c2cf9d68f0..7120b92c4b2 100644 --- a/apps/web/src/nft/components/card/media.tsx +++ b/apps/web/src/nft/components/card/media.tsx @@ -4,10 +4,10 @@ import { getHeightFromAspectRatio, getMediaAspectRatio, handleUniformAspectRatio import { UniformAspectRatio, UniformAspectRatios } from 'nft/types' import { ReactNode, useEffect, useRef, useState } from 'react' import { Pause, Play } from 'react-feather' +import { Trans } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { colors } from 'theme/colors' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const StyledImageContainer = styled.div<{ isDisabled?: boolean }>` position: relative; diff --git a/apps/web/src/nft/components/collection/ActivityCells.tsx b/apps/web/src/nft/components/collection/ActivityCells.tsx index 3d77db63ba7..ea289f1dd93 100644 --- a/apps/web/src/nft/components/collection/ActivityCells.tsx +++ b/apps/web/src/nft/components/collection/ActivityCells.tsx @@ -26,6 +26,7 @@ import { getMarketplaceIcon } from 'nft/utils' import { buildActivityAsset } from 'nft/utils/buildActivityAsset' import { getTimeDifference } from 'nft/utils/date' import { MouseEvent, ReactNode, useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { ExternalLink } from 'theme/components' import { NftActivityType, @@ -34,7 +35,6 @@ import { } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { shortenAddress } from 'utilities/src/addresses' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' diff --git a/apps/web/src/nft/components/collection/CollectionAsset.tsx b/apps/web/src/nft/components/collection/CollectionAsset.tsx index dbe5725ffe6..a40572ca5bb 100644 --- a/apps/web/src/nft/components/collection/CollectionAsset.tsx +++ b/apps/web/src/nft/components/collection/CollectionAsset.tsx @@ -5,8 +5,8 @@ import { Ranking as RankingContainer, Suspicious as SuspiciousContainer } from ' import { useBag } from 'nft/hooks' import { GenieAsset, UniformAspectRatio } from 'nft/types' import { useCallback, useMemo } from 'react' +import { Trans } from 'react-i18next' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/nft/components/collection/Sweep.tsx b/apps/web/src/nft/components/collection/Sweep.tsx index 6ef47f36f81..a5a64ef23e5 100644 --- a/apps/web/src/nft/components/collection/Sweep.tsx +++ b/apps/web/src/nft/components/collection/Sweep.tsx @@ -9,8 +9,8 @@ import { GenieAsset, Markets, isPooledMarket } from 'nft/types' import { calcPoolPrice, isInSameSudoSwapPool } from 'nft/utils' import { default as Slider } from 'rc-slider' import { useEffect, useMemo, useReducer, useState } from 'react' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const SweepContainer = styled.div` diff --git a/apps/web/src/nft/components/collection/TransactionCompleteModal.tsx b/apps/web/src/nft/components/collection/TransactionCompleteModal.tsx index 38e0a0713b7..730d07b62da 100644 --- a/apps/web/src/nft/components/collection/TransactionCompleteModal.tsx +++ b/apps/web/src/nft/components/collection/TransactionCompleteModal.tsx @@ -17,8 +17,8 @@ import { TxResponse, TxStateType } from 'nft/types' import { generateTweetForPurchase, getSuccessfulImageSize, parseTransactionResponse } from 'nft/utils' import { formatAssetEventProperties } from 'nft/utils/formatEventProperties' import { useEffect, useMemo, useRef, useState } from 'react' +import { Trans } from 'react-i18next' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/nft/components/collection/UnavailableCollectionPage.tsx b/apps/web/src/nft/components/collection/UnavailableCollectionPage.tsx index 2b506d5ebfa..45933e88fb7 100644 --- a/apps/web/src/nft/components/collection/UnavailableCollectionPage.tsx +++ b/apps/web/src/nft/components/collection/UnavailableCollectionPage.tsx @@ -1,9 +1,9 @@ import Column from 'components/deprecated/Column' import styled, { useTheme } from 'lib/styled-components' import { AlertTriangle } from 'react-feather' +import { Trans } from 'react-i18next' import { ExternalLink, StyledInternalLink, ThemedText } from 'theme/components' import { uniswapUrls } from 'uniswap/src/constants/urls' -import { Trans } from 'uniswap/src/i18n' const Container = styled(Column)` height: 75vh; diff --git a/apps/web/src/nft/components/details/AssetActivity.tsx b/apps/web/src/nft/components/details/AssetActivity.tsx index 4994c4624ba..d019c8af0c0 100644 --- a/apps/web/src/nft/components/details/AssetActivity.tsx +++ b/apps/web/src/nft/components/details/AssetActivity.tsx @@ -6,7 +6,7 @@ import { ActivityEvent } from 'nft/types' import { getMarketplaceIcon } from 'nft/utils' import { getTimeDifference } from 'nft/utils/date' import { ReactNode } from 'react' -import { Trans } from 'uniswap/src/i18n' +import { Trans } from 'react-i18next' import { shortenAddress } from 'utilities/src/addresses' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/nft/components/profile/list/ListPage.tsx b/apps/web/src/nft/components/profile/list/ListPage.tsx index 365bf29a3a2..91be8c47c07 100644 --- a/apps/web/src/nft/components/profile/list/ListPage.tsx +++ b/apps/web/src/nft/components/profile/list/ListPage.tsx @@ -24,12 +24,12 @@ import { ProfilePageStateType } from 'nft/types' import { ListingMarkets } from 'nft/utils/listNfts' import { useEffect, useMemo, useReducer, useState } from 'react' import { ArrowLeft } from 'react-feather' +import { Trans } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/nft/components/profile/list/ListingButton.tsx b/apps/web/src/nft/components/profile/list/ListingButton.tsx index 1042e62d44a..a1e132fa36f 100644 --- a/apps/web/src/nft/components/profile/list/ListingButton.tsx +++ b/apps/web/src/nft/components/profile/list/ListingButton.tsx @@ -5,8 +5,8 @@ import { BelowFloorWarningModal } from 'nft/components/profile/list/Modal/BelowF import { findListingIssues } from 'nft/components/profile/list/utils' import { useSellAsset } from 'nft/hooks' import { useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { BREAKPOINTS } from 'theme' -import { Plural, Trans, t } from 'uniswap/src/i18n' const StyledListingButton = styled(BaseButton)<{ showResolveIssues: boolean; missingPrices: boolean }>` background: ${({ showResolveIssues, theme }) => (showResolveIssues ? theme.critical : theme.accent1)}; @@ -29,6 +29,7 @@ const StyledListingButton = styled(BaseButton)<{ showResolveIssues: boolean; mis ` export const ListingButton = ({ onClick }: { onClick: () => void }) => { + const { t } = useTranslation() const { sellAssets, showResolveIssues, toggleShowResolveIssues, issues, setIssues } = useSellAsset( ({ sellAssets, showResolveIssues, toggleShowResolveIssues, issues, setIssues }) => ({ sellAssets, @@ -84,17 +85,11 @@ export const ListingButton = ({ onClick }: { onClick: () => void }) => { missingPrices={!!listingsMissingPrice.length} showResolveIssues={showResolveIssues} > - {showResolveIssues ? ( - - ) : listingsMissingPrice.length && !isMobile ? ( - - ) : ( - - )} + {showResolveIssues + ? t('common.resolveIssues', { count: issues }) + : listingsMissingPrice.length && !isMobile + ? t('nft.setPrices') + : t('nft.startListing')} {showWarning && ( diff --git a/apps/web/src/nft/components/profile/list/MarketplaceRow.tsx b/apps/web/src/nft/components/profile/list/MarketplaceRow.tsx index 23374484be4..d3b52a1e339 100644 --- a/apps/web/src/nft/components/profile/list/MarketplaceRow.tsx +++ b/apps/web/src/nft/components/profile/list/MarketplaceRow.tsx @@ -13,9 +13,9 @@ import { useNativeUsdPrice } from 'nft/hooks/useUsdPrice' import { ListingMarket, WalletAsset } from 'nft/types' import { getMarketplaceIcon } from 'nft/utils' import { Dispatch, DispatchWithoutAction, useCallback, useEffect, useMemo, useReducer, useState } from 'react' +import { useTranslation } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' -import { t } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const LastPriceInfo = styled(Column)` @@ -126,6 +126,7 @@ export const MarketplaceRow = ({ toggleExpandMarketplaceRows, rowHovered, }: MarketplaceRowProps) => { + const { t } = useTranslation() const { formatNumberOrString, formatDelta } = useFormatter() const setAssetListPrice = useSellAsset((state) => state.setAssetListPrice) const removeAssetMarketplace = useSellAsset((state) => state.removeAssetMarketplace) diff --git a/apps/web/src/nft/components/profile/list/Modal/BelowFloorWarningModal.tsx b/apps/web/src/nft/components/profile/list/Modal/BelowFloorWarningModal.tsx index 63a5fa39820..7cc09ad11b5 100644 --- a/apps/web/src/nft/components/profile/list/Modal/BelowFloorWarningModal.tsx +++ b/apps/web/src/nft/components/profile/list/Modal/BelowFloorWarningModal.tsx @@ -6,10 +6,10 @@ import { Overlay } from 'nft/components/modals/Overlay' import { Listing, WalletAsset } from 'nft/types' import React from 'react' import { AlertTriangle, X } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { useFormatter } from 'utils/formatNumbers' const ModalWrapper = styled(Column)` diff --git a/apps/web/src/nft/components/profile/list/Modal/ContentRow.tsx b/apps/web/src/nft/components/profile/list/Modal/ContentRow.tsx index fe6b0124fab..a326503fb59 100644 --- a/apps/web/src/nft/components/profile/list/Modal/ContentRow.tsx +++ b/apps/web/src/nft/components/profile/list/Modal/ContentRow.tsx @@ -7,9 +7,9 @@ import { AssetRow, CollectionRow, ListingStatus } from 'nft/types' import { getMarketplaceIcon } from 'nft/utils' import { useEffect, useRef } from 'react' import { Check, XOctagon } from 'react-feather' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' import { opacify } from 'theme/utils' -import { Trans } from 'uniswap/src/i18n' const ContentColumn = styled(Column)<{ failed: boolean }>` background-color: ${({ theme, failed }) => failed && opacify(12, theme.critical)}; diff --git a/apps/web/src/nft/components/profile/list/Modal/ListModal.tsx b/apps/web/src/nft/components/profile/list/Modal/ListModal.tsx index 08452b2898a..7ae8bd8fd7b 100644 --- a/apps/web/src/nft/components/profile/list/Modal/ListModal.tsx +++ b/apps/web/src/nft/components/profile/list/Modal/ListModal.tsx @@ -14,13 +14,13 @@ import { useNFTList, useSellAsset } from 'nft/hooks' import { ListingStatus } from 'nft/types' import { useCallback, useEffect, useMemo, useReducer } from 'react' import { X } from 'react-feather' +import { Trans } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/nft/components/profile/list/Modal/ListModalSection.tsx b/apps/web/src/nft/components/profile/list/Modal/ListModalSection.tsx index 8f17c6c9c34..4efd5b19ac0 100644 --- a/apps/web/src/nft/components/profile/list/Modal/ListModalSection.tsx +++ b/apps/web/src/nft/components/profile/list/Modal/ListModalSection.tsx @@ -9,10 +9,10 @@ import { useSellAsset } from 'nft/hooks' import { AssetRow, CollectionRow, ListingRow, ListingStatus } from 'nft/types' import { useMemo } from 'react' import { Info } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { colors } from 'theme/colors' import { ThemedText } from 'theme/components' import { TRANSITION_DURATIONS } from 'theme/styles' -import { Trans, useTranslation } from 'uniswap/src/i18n' const SectionHeader = styled(Row)` justify-content: space-between; diff --git a/apps/web/src/nft/components/profile/list/Modal/SuccessScreen.tsx b/apps/web/src/nft/components/profile/list/Modal/SuccessScreen.tsx index 721ecf30e3e..a486999b522 100644 --- a/apps/web/src/nft/components/profile/list/Modal/SuccessScreen.tsx +++ b/apps/web/src/nft/components/profile/list/Modal/SuccessScreen.tsx @@ -11,10 +11,10 @@ import { useSellAsset } from 'nft/hooks' import { generateTweetForList, pluralize } from 'nft/utils' import { useMemo } from 'react' import { Twitter, X } from 'react-feather' +import { Trans } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const SuccessImage = styled.img<{ numImages: number }>` diff --git a/apps/web/src/nft/components/profile/list/NFTListingsGrid.tsx b/apps/web/src/nft/components/profile/list/NFTListingsGrid.tsx index fd81fbae537..bc077139c97 100644 --- a/apps/web/src/nft/components/profile/list/NFTListingsGrid.tsx +++ b/apps/web/src/nft/components/profile/list/NFTListingsGrid.tsx @@ -9,8 +9,8 @@ import { useSellAsset } from 'nft/hooks' import { DropDownOption, ListingMarket } from 'nft/types' import { useMemo, useReducer, useRef, useState } from 'react' import { ChevronDown } from 'react-feather' +import { Trans } from 'react-i18next' import { BREAKPOINTS } from 'theme' -import { Trans } from 'uniswap/src/i18n' const TableHeader = styled.div` display: flex; diff --git a/apps/web/src/nft/components/profile/list/PriceTextInput.tsx b/apps/web/src/nft/components/profile/list/PriceTextInput.tsx index dd238475dbe..107d82c7a32 100644 --- a/apps/web/src/nft/components/profile/list/PriceTextInput.tsx +++ b/apps/web/src/nft/components/profile/list/PriceTextInput.tsx @@ -10,9 +10,9 @@ import { useSellAsset } from 'nft/hooks' import { WalletAsset } from 'nft/types' import { Dispatch, useRef, useState } from 'react' import { AlertTriangle, Link } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { colors } from 'theme/colors' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const PriceTextInputWrapper = styled(Column)` diff --git a/apps/web/src/nft/components/profile/list/RoyaltyTooltip.tsx b/apps/web/src/nft/components/profile/list/RoyaltyTooltip.tsx index bd8e738ef13..553d6190fb4 100644 --- a/apps/web/src/nft/components/profile/list/RoyaltyTooltip.tsx +++ b/apps/web/src/nft/components/profile/list/RoyaltyTooltip.tsx @@ -4,8 +4,8 @@ import styled, { css } from 'lib/styled-components' import { getRoyalty } from 'nft/components/profile/list/utils' import { ListingMarket, WalletAsset } from 'nft/types' import { getMarketplaceIcon } from 'nft/utils' +import { Trans, useTranslation } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const FeeWrap = styled(Row)` diff --git a/apps/web/src/nft/components/profile/list/SetDurationModal.tsx b/apps/web/src/nft/components/profile/list/SetDurationModal.tsx index cc9010e1969..34c15b8162a 100644 --- a/apps/web/src/nft/components/profile/list/SetDurationModal.tsx +++ b/apps/web/src/nft/components/profile/list/SetDurationModal.tsx @@ -9,8 +9,8 @@ import { useSellAsset } from 'nft/hooks' import { DropDownOption } from 'nft/types' import { useEffect, useMemo, useReducer, useRef, useState } from 'react' import { AlertTriangle, ChevronDown } from 'react-feather' +import { useTranslation } from 'react-i18next' import { Z_INDEX } from 'theme/zIndex' -import { Plural, useTranslation } from 'uniswap/src/i18n' const ModalWrapper = styled(Column)` gap: 4px; @@ -145,16 +145,16 @@ export const SetDurationModal = () => { let prompt switch (duration) { case Duration.hour: - prompt = + prompt = t('common.time.hours', { count: +amount }) break case Duration.day: - prompt = + prompt = t('common.time.days', { count: +amount }) break case Duration.week: - prompt = + prompt = t('common.time.weeks', { count: +amount }) break case Duration.month: - prompt = + prompt = t('common.time.months', { count: +amount }) break default: break diff --git a/apps/web/src/nft/components/profile/view/EmptyWalletContent.tsx b/apps/web/src/nft/components/profile/view/EmptyWalletContent.tsx index 2f970a6e763..38ccc2ff166 100644 --- a/apps/web/src/nft/components/profile/view/EmptyWalletContent.tsx +++ b/apps/web/src/nft/components/profile/view/EmptyWalletContent.tsx @@ -2,9 +2,9 @@ import styled from 'lib/styled-components' import { EmptyActivityIcon, EmptyNftsIcon, EmptyPoolsIcon, EmptyTokensIcon } from 'nft/components/profile/view/icons' import { headlineMedium } from 'nft/css/common.css' import { useCallback } from 'react' +import { Trans } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const EmptyWalletContainer = styled.div` display: flex; diff --git a/apps/web/src/nft/components/profile/view/ViewMyNftsAsset.tsx b/apps/web/src/nft/components/profile/view/ViewMyNftsAsset.tsx index 43e6c4d5dc8..2b7bd013184 100644 --- a/apps/web/src/nft/components/profile/view/ViewMyNftsAsset.tsx +++ b/apps/web/src/nft/components/profile/view/ViewMyNftsAsset.tsx @@ -6,9 +6,9 @@ import { VerifiedIcon } from 'nft/components/icons' import { useBag, useSellAsset } from 'nft/hooks' import { WalletAsset } from 'nft/types' import { useMemo } from 'react' +import { Trans } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans } from 'uniswap/src/i18n' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' interface ViewMyNftsAssetProps { diff --git a/apps/web/src/nft/pages/asset/Asset.tsx b/apps/web/src/nft/pages/asset/Asset.tsx index 662d24c2e1f..f454c477936 100644 --- a/apps/web/src/nft/pages/asset/Asset.tsx +++ b/apps/web/src/nft/pages/asset/Asset.tsx @@ -8,10 +8,10 @@ import { blocklistedCollections } from 'nft/utils' import { useDynamicMetatags } from 'pages/metatags' import { useMemo } from 'react' import { Helmet } from 'react-helmet-async/lib/index' +import { useTranslation } from 'react-i18next' import { Navigate, useParams } from 'react-router-dom' import { formatNFTAssetMetatagTitleName } from 'shared-cloud/metatags' import Trace from 'uniswap/src/features/telemetry/Trace' -import { t } from 'uniswap/src/i18n' import { isIFramed } from 'utils/isIFramed' const AssetContainer = styled.div` @@ -42,6 +42,7 @@ const AssetPriceDetailsContainer = styled.div` ` const AssetPage = () => { + const { t } = useTranslation() const { tokenId = '', contractAddress = '' } = useParams() const { data, loading } = useNftAssetDetails(contractAddress, tokenId) diff --git a/apps/web/src/nft/pages/collection/index.tsx b/apps/web/src/nft/pages/collection/index.tsx index d41237de367..dee1319b375 100644 --- a/apps/web/src/nft/pages/collection/index.tsx +++ b/apps/web/src/nft/pages/collection/index.tsx @@ -21,11 +21,11 @@ import { blocklistedCollections } from 'nft/utils' import { useDynamicMetatags } from 'pages/metatags' import { Suspense, useEffect, useMemo } from 'react' import { Helmet } from 'react-helmet-async/lib/index' +import { useTranslation } from 'react-i18next' import { useLocation, useNavigate, useParams } from 'react-router-dom' import { ThemedText } from 'theme/components' import { Z_INDEX } from 'theme/zIndex' import Trace from 'uniswap/src/features/telemetry/Trace' -import { t } from 'uniswap/src/i18n' const FILTER_WIDTH = 332 const EMPTY_TRAIT_OBJ = {} @@ -120,6 +120,7 @@ const IconWrapper = styled.button` ` const Collection = () => { + const { t } = useTranslation() const { contractAddress } = useParams() const isMobile = useIsMobile() const [isFiltersExpanded, setFiltersExpanded] = useFiltersExpanded() diff --git a/apps/web/src/nft/pages/profile/index.tsx b/apps/web/src/nft/pages/profile/index.tsx index b7a0a9c6edc..97f7b7ac993 100644 --- a/apps/web/src/nft/pages/profile/index.tsx +++ b/apps/web/src/nft/pages/profile/index.tsx @@ -4,6 +4,7 @@ import { ButtonPrimary } from 'components/Button/buttons' import { ConnectWalletButtonText } from 'components/NavBar/accountCTAsExperimentUtils' import { useAccount } from 'hooks/useAccount' import useENSName from 'hooks/useENSName' +import { TFunction } from 'i18next' import styled from 'lib/styled-components' import { XXXL_BAG_WIDTH } from 'nft/components/bag/Bag' import { ListPage } from 'nft/components/profile/list/ListPage' @@ -13,10 +14,10 @@ import { LIST_PAGE_MARGIN, LIST_PAGE_MARGIN_MOBILE } from 'nft/pages/profile/sha import { ProfilePageStateType } from 'nft/types' import { useEffect, useRef } from 'react' import { Helmet } from 'react-helmet-async/lib/index' +import { Trans, useTranslation } from 'react-i18next' import { BREAKPOINTS } from 'theme' import { ThemedText } from 'theme/components' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans, t } from 'uniswap/src/i18n' import { shortenAddress } from 'utilities/src/addresses' const ProfilePageWrapper = styled.div` @@ -62,7 +63,7 @@ const ConnectWalletButton = styled(ButtonPrimary)` border: none; ` -function getProfilePageTitle(account: string | undefined, ENSName: string | null | undefined): string { +function getProfilePageTitle(t: TFunction, account: string | undefined, ENSName: string | null | undefined): string { if (!account) { return t('nft.collectionOnUni') } @@ -79,6 +80,7 @@ function getProfilePageTitle(account: string | undefined, ENSName: string | null } export default function Profile() { + const { t } = useTranslation() const sellPageState = useProfilePageState((state) => state.state) const setSellPageState = useProfilePageState((state) => state.setProfilePageState) const resetSellAssets = useSellAsset((state) => state.reset) @@ -103,7 +105,7 @@ export default function Profile() { return ( <> - {getProfilePageTitle(account.address, ENSName)} + {getProfilePageTitle(t, account.address, ENSName)} diff --git a/apps/web/src/pages/AddLiquidityV2/ConfirmAddModalBottom.tsx b/apps/web/src/pages/AddLiquidityV2/ConfirmAddModalBottom.tsx index f75ac74a1a7..c08e3bd9f64 100644 --- a/apps/web/src/pages/AddLiquidityV2/ConfirmAddModalBottom.tsx +++ b/apps/web/src/pages/AddLiquidityV2/ConfirmAddModalBottom.tsx @@ -2,10 +2,10 @@ import { Currency, CurrencyAmount, Fraction, Percent } from '@uniswap/sdk-core' import { ButtonPrimary } from 'components/Button/buttons' import CurrencyLogo from 'components/Logo/CurrencyLogo' import { RowBetween, RowFixed } from 'components/deprecated/Row' +import { Trans } from 'react-i18next' import { Text } from 'rebass' import { Field } from 'state/mint/actions' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' export function ConfirmAddModalBottom({ noLiquidity, diff --git a/apps/web/src/pages/AddLiquidityV2/PoolPriceBar.tsx b/apps/web/src/pages/AddLiquidityV2/PoolPriceBar.tsx index 375e34d81de..3771a5150da 100644 --- a/apps/web/src/pages/AddLiquidityV2/PoolPriceBar.tsx +++ b/apps/web/src/pages/AddLiquidityV2/PoolPriceBar.tsx @@ -3,10 +3,10 @@ import { AutoColumn } from 'components/deprecated/Column' import { AutoRow } from 'components/deprecated/Row' import { ONE_BIPS } from 'constants/misc' import { useTheme } from 'lib/styled-components' +import { Trans } from 'react-i18next' import { Text } from 'rebass' import { Field } from 'state/mint/actions' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' export function PoolPriceBar({ currencies, diff --git a/apps/web/src/pages/AddLiquidityV2/index.tsx b/apps/web/src/pages/AddLiquidityV2/index.tsx index f76e0c58186..f3fa1f580be 100644 --- a/apps/web/src/pages/AddLiquidityV2/index.tsx +++ b/apps/web/src/pages/AddLiquidityV2/index.tsx @@ -38,6 +38,7 @@ import AppBody from 'pages/App/AppBody' import { Dots, Wrapper } from 'pages/LegacyPool/styled' import { useCallback, useState } from 'react' import { Plus } from 'react-feather' +import { Trans } from 'react-i18next' import { useLocation, useNavigate, useParams } from 'react-router-dom' import { Field } from 'state/mint/actions' import { useDerivedMintInfo, useMintActionHandlers, useMintState } from 'state/mint/hooks' @@ -50,7 +51,6 @@ import { WRAPPED_NATIVE_CURRENCY } from 'uniswap/src/constants/tokens' import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans } from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { calculateGasMargin } from 'utils/calculateGasMargin' diff --git a/apps/web/src/pages/AddLiquidityV3/blastAlerts.tsx b/apps/web/src/pages/AddLiquidityV3/blastAlerts.tsx index 1c83578f333..0c4bccf513f 100644 --- a/apps/web/src/pages/AddLiquidityV3/blastAlerts.tsx +++ b/apps/web/src/pages/AddLiquidityV3/blastAlerts.tsx @@ -5,9 +5,9 @@ import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { useCallback, useState } from 'react' import { ChevronDown } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { ButtonText, ExternalLink, ThemedText } from 'theme/components' -import { Trans, t } from 'uniswap/src/i18n' const StyledAlertIcon = styled(AlertTriangleFilled)` path { @@ -111,6 +111,7 @@ const StyledChevronDown = styled(ChevronDown)<{ $expanded: boolean }>` ` export function BlastRebasingAlert() { + const { t } = useTranslation() const [expanded, setExpanded] = useState(false) const handleSetExpanded = useCallback(() => setExpanded(!expanded), [expanded]) diff --git a/apps/web/src/pages/AddLiquidityV3/index.tsx b/apps/web/src/pages/AddLiquidityV3/index.tsx index dc8f1cb2606..e1f7281df27 100644 --- a/apps/web/src/pages/AddLiquidityV3/index.tsx +++ b/apps/web/src/pages/AddLiquidityV3/index.tsx @@ -66,6 +66,7 @@ import { Dots } from 'pages/LegacyPool/styled' import { useCallback, useEffect, useMemo, useState } from 'react' import { AlertTriangle } from 'react-feather' import { Helmet } from 'react-helmet-async/lib/index' +import { Trans, useTranslation } from 'react-i18next' import { useNavigate, useParams, useSearchParams } from 'react-router-dom' import { Bound, Field } from 'state/mint/v3/actions' import { @@ -86,7 +87,6 @@ import { getChainLabel } from 'uniswap/src/features/chains/utils' import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans, t } from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { addressesAreEquivalent } from 'utils/addressesAreEquivalent' @@ -134,6 +134,7 @@ function AddLiquidity() { feeAmount?: string tokenId?: string }>() + const { t } = useTranslation() const account = useAccount() const signer = useEthersSigner() const theme = useTheme() diff --git a/apps/web/src/pages/Explore/charts/ExploreChartsSection.tsx b/apps/web/src/pages/Explore/charts/ExploreChartsSection.tsx index 9ba0304e09b..f4afd1b205f 100644 --- a/apps/web/src/pages/Explore/charts/ExploreChartsSection.tsx +++ b/apps/web/src/pages/Explore/charts/ExploreChartsSection.tsx @@ -14,6 +14,7 @@ import { useScreenSize } from 'hooks/screenSize/useScreenSize' import { useAtomValue } from 'jotai/utils' import { useTheme } from 'lib/styled-components' import { ReactNode, useMemo, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useDailyProtocolTVL as useRestDailyProtocolTVL, useHistoricalProtocolVolume as useRestHistoricalProtocolVolume, @@ -23,7 +24,6 @@ import { Flex, SegmentedControl, Text, styled } from 'ui/src' import { HistoryDuration, PriceSource } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlagWithLoading } from 'uniswap/src/features/gating/hooks' -import { Trans } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const EXPLORE_CHART_HEIGHT_PX = 368 @@ -32,16 +32,6 @@ const EXPLORE_PRICE_SOURCES_V4 = [PriceSource.SubgraphV2, PriceSource.SubgraphV3 const TIME_SELECTOR_OPTIONS = [{ value: TimePeriod.DAY }, { value: TimePeriod.WEEK }, { value: TimePeriod.MONTH }] -const ChartsContainer = styled(Flex, { - row: true, - justifyContent: 'space-between', - maxWidth: MAX_WIDTH_MEDIA_BREAKPOINT, - width: '100%', - ml: 'auto', - mr: 'auto', - pb: 56, -}) - // a 6% gap is achieved using two 47% width containers, as a parent gap causes an autosizing error with side-by-side lightweight-charts const SectionContainer = styled(Flex, { position: 'relative', @@ -69,6 +59,7 @@ const SectionTitle = styled(Text, { }) function VolumeChartSection() { + const { t } = useTranslation() const [timePeriod, setTimePeriod] = useState(TimePeriod.DAY) const theme = useTheme() const isSmallScreen = !useScreenSize()['sm'] @@ -173,7 +164,7 @@ function VolumeChartSection() { )} @@ -255,9 +246,20 @@ function MinimalStatDisplay({ title, value, time }: { title: ReactNode; value: n export function ExploreChartsSection() { return ( - + - + ) } diff --git a/apps/web/src/pages/Explore/index.tsx b/apps/web/src/pages/Explore/index.tsx index cab71879fa8..f32faa25e8c 100644 --- a/apps/web/src/pages/Explore/index.tsx +++ b/apps/web/src/pages/Explore/index.tsx @@ -13,6 +13,7 @@ import { ExploreChartsSection } from 'pages/Explore/charts/ExploreChartsSection' import { useExploreParams } from 'pages/Explore/redirects' import RecentTransactions from 'pages/Explore/tables/RecentTransactions' import { NamedExoticComponent, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { ExploreContextProvider } from 'state/explore' import { TamaguiClickableStyle } from 'theme/components' @@ -23,7 +24,6 @@ import { isBackendSupportedChain } from 'uniswap/src/features/chains/utils' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans, t } from 'uniswap/src/i18n' import { useChainIdFromUrlParam } from 'utils/chainParams' export enum ExploreTab { @@ -75,6 +75,9 @@ const HeaderTab = tamaguiStyled(Text, { active: { true: { color: '$neutral1', + hoverStyle: { + opacity: 1, + }, }, }, disabled: { @@ -90,6 +93,7 @@ const HeaderTab = tamaguiStyled(Text, { }) const Explore = ({ initialTab }: { initialTab?: ExploreTab }) => { + const { t } = useTranslation() const tabNavRef = useRef(null) const resetManualOutage = useResetAtom(manualChainOutageAtom) const isLPRedesignEnabled = useFeatureFlag(FeatureFlags.LPRedesign) diff --git a/apps/web/src/pages/Explore/tables/RecentTransactions.tsx b/apps/web/src/pages/Explore/tables/RecentTransactions.tsx index 67536218825..f2a56f3ca4f 100644 --- a/apps/web/src/pages/Explore/tables/RecentTransactions.tsx +++ b/apps/web/src/pages/Explore/tables/RecentTransactions.tsx @@ -15,6 +15,7 @@ import { useUpdateManualOutage } from 'featureFlags/flags/outageBanner' import { BETypeToTransactionType, TransactionType, useAllTransactions } from 'graphql/data/useAllTransactions' import { OrderDirection } from 'graphql/data/util' import { memo, useMemo, useReducer, useRef, useState } from 'react' +import { Trans } from 'react-i18next' import { Flex, Text, styled } from 'ui/src' import { PoolTransaction, @@ -23,7 +24,6 @@ import { import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { useAppFiatCurrency } from 'uniswap/src/features/fiatCurrency/hooks' -import { Trans } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { shortenAddress } from 'utilities/src/addresses' import { useChainIdFromUrlParam } from 'utils/chainParams' diff --git a/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx b/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx index 0923318e8b4..a78d0ee15dc 100644 --- a/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx +++ b/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx @@ -1,3 +1,4 @@ +import { CurrencyAmount } from '@uniswap/sdk-core' import { LoaderButton } from 'components/Button/LoaderButton' import { IncreaseLiquidityStep, @@ -8,15 +9,24 @@ import { DepositInputForm } from 'components/Liquidity/DepositInputForm' import { LiquidityModalDetailRows } from 'components/Liquidity/LiquidityModalDetailRows' import { LiquidityPositionInfo } from 'components/Liquidity/LiquidityPositionInfo' import { TradingAPIError } from 'pages/Pool/Positions/create/TradingAPIError' +import { useCanUnwrapCurrency, useCurrencyInfoWithUnwrapForTradingApi } from 'pages/Pool/Positions/create/utils' +import { useMemo } from 'react' +import { useTranslation } from 'react-i18next' import { PositionField } from 'types/position' -import { Flex, Text } from 'ui/src' -import { useTranslation } from 'uniswap/src/i18n' +import { Flex, Switch, Text } from 'ui/src' +import { useNativeCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' export function IncreaseLiquidityForm() { const { t } = useTranslation() - const { setStep, increaseLiquidityState, derivedIncreaseLiquidityInfo, setIncreaseLiquidityState } = - useIncreaseLiquidityContext() + const { + setStep, + increaseLiquidityState, + derivedIncreaseLiquidityInfo, + setIncreaseLiquidityState, + unwrapNativeCurrency, + setUnwrapNativeCurrency, + } = useIncreaseLiquidityContext() const { formattedAmounts, currencyAmounts, @@ -34,9 +44,35 @@ export function IncreaseLiquidityForm() { throw new Error('AddLiquidityModal must have an initial state when opening') } - const { currency0Amount, currency1Amount } = position - const token0 = currency0Amount.currency - const token1 = currency1Amount.currency + const { currency0Amount: initialCurrency0Amount, currency1Amount: initialCurrency1Amount } = position + const currency0Info = useCurrencyInfoWithUnwrapForTradingApi({ + currency: initialCurrency0Amount.currency, + shouldUnwrap: unwrapNativeCurrency, + }) + const currency1Info = useCurrencyInfoWithUnwrapForTradingApi({ + currency: initialCurrency1Amount.currency, + shouldUnwrap: unwrapNativeCurrency, + }) + + const token0 = currency0Info?.currency + const token1 = currency1Info?.currency + const canUnwrap0 = useCanUnwrapCurrency(initialCurrency0Amount.currency) + const canUnwrap1 = useCanUnwrapCurrency(initialCurrency1Amount.currency) + const nativeCurrencyInfo = useNativeCurrencyInfo(position.chainId) + + const currency0Amount = useMemo(() => { + if (unwrapNativeCurrency && canUnwrap0) { + return CurrencyAmount.fromRawAmount(currency0Info?.currency, initialCurrency0Amount.quotient) + } + return initialCurrency0Amount + }, [unwrapNativeCurrency, canUnwrap0, currency0Info, initialCurrency0Amount]) + + const currency1Amount = useMemo(() => { + if (unwrapNativeCurrency && canUnwrap1) { + return CurrencyAmount.fromRawAmount(currency1Info?.currency, initialCurrency1Amount.quotient) + } + return initialCurrency1Amount + }, [unwrapNativeCurrency, canUnwrap1, currency1Info, initialCurrency1Amount]) const handleUserInput = (field: PositionField, newValue: string) => { setIncreaseLiquidityState((prev) => ({ @@ -60,6 +96,26 @@ export function IncreaseLiquidityForm() { } } + const UnwrapNativeCurrencyToggle = useMemo(() => { + if (!nativeCurrencyInfo) { + return null + } + + return ( + + + {t('pool.addAs', { nativeWrappedSymbol: nativeCurrencyInfo.currency.symbol })} + + setUnwrapNativeCurrency((unwrapNativeCurrency) => !unwrapNativeCurrency)} + variant="branded" + /> + + ) + }, [nativeCurrencyInfo, t, unwrapNativeCurrency, setUnwrapNativeCurrency]) + return ( @@ -75,6 +131,8 @@ export function IncreaseLiquidityForm() { onSetMax={handleOnSetMax} deposit0Disabled={deposit0Disabled} deposit1Disabled={deposit1Disabled} + token0UnderCardComponent={canUnwrap0 ? UnwrapNativeCurrencyToggle : undefined} + token1UnderCardComponent={canUnwrap1 ? UnwrapNativeCurrencyToggle : undefined} /> + {title} - {items.map((item, index) => ( - - ))} + + {items.map((item, index) => ( + + ))} + ) } diff --git a/apps/web/src/pages/Landing/sections/Hero.tsx b/apps/web/src/pages/Landing/sections/Hero.tsx index d201ac4571e..d24e4083919 100644 --- a/apps/web/src/pages/Landing/sections/Hero.tsx +++ b/apps/web/src/pages/Landing/sections/Hero.tsx @@ -6,12 +6,12 @@ import { Hover, RiseIn, RiseInText } from 'pages/Landing/components/animations' import { Swap } from 'pages/Swap' import { Fragment, useCallback, useMemo } from 'react' import { ChevronDown } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { serializeSwapStateToURLParameters } from 'state/swap/hooks' import { Flex, Text, useMedia } from 'ui/src' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { SwapRedirectFn } from 'uniswap/src/features/transactions/TransactionModal/TransactionModalContext' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { INTERFACE_NAV_HEIGHT } from 'uniswap/src/theme/heights' interface HeroProps { @@ -88,7 +88,8 @@ export function Hero({ scrollToRef, transition }: HeroProps) { $short={{ variant: 'heading2', fontSize: 36 }} > {t('hero.swap.title') - .split(' ') + .split(/()|\s+/) + .filter(Boolean) // splits the string by spaces but also captures "
" as a separate element in the array .map((word, index) => { if (word === '
') { return
diff --git a/apps/web/src/pages/Landing/sections/NewsletterEtc.tsx b/apps/web/src/pages/Landing/sections/NewsletterEtc.tsx index d903b5e26ea..704871c9bff 100644 --- a/apps/web/src/pages/Landing/sections/NewsletterEtc.tsx +++ b/apps/web/src/pages/Landing/sections/NewsletterEtc.tsx @@ -1,8 +1,8 @@ import { H2, H3 } from 'pages/Landing/components/Generics' import { BookOpen, ChatBubbles, HelpCircle } from 'pages/Landing/components/Icons' import { PillButton } from 'pages/Landing/components/cards/PillButton' +import { Trans, useTranslation } from 'react-i18next' import { Flex, Text, styled, useSporeColors } from 'ui/src' -import { Trans, t } from 'uniswap/src/i18n' const SectionLayout = styled(Flex, { width: '100%', @@ -100,6 +100,7 @@ const helpPrimary = '#FF4D00' const blogPrimary = '#8E8767' export function NewsletterEtc() { + const { t } = useTranslation() const theme = useSporeColors() return ( diff --git a/apps/web/src/pages/Landing/sections/Stats.tsx b/apps/web/src/pages/Landing/sections/Stats.tsx index da893d7949c..dc5b1851d9e 100644 --- a/apps/web/src/pages/Landing/sections/Stats.tsx +++ b/apps/web/src/pages/Landing/sections/Stats.tsx @@ -3,13 +3,13 @@ import { StatCard } from 'pages/Landing/components/StatCard' import { useInView } from 'pages/Landing/sections/useInView' import { useMemo } from 'react' import { ArrowRightCircle } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { ExternalLink } from 'theme/components' import { Flex, Text, styled, useSporeColors } from 'ui/src' import { ProtocolVersion, useDailyProtocolVolumeQuery, } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' -import { Trans, t } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' const Container = styled(Flex, { @@ -209,6 +209,7 @@ const RightBottom = styled(Flex, { }) function Cards({ inView }: { inView: boolean }) { + const { t } = useTranslation() const { formatNumber } = useFormatter() const dailyV2VolumeQuery = useDailyProtocolVolumeQuery({ variables: { diff --git a/apps/web/src/pages/LegacyPool/CTACards.tsx b/apps/web/src/pages/LegacyPool/CTACards.tsx index 6bcb380d14f..7f0e3414775 100644 --- a/apps/web/src/pages/LegacyPool/CTACards.tsx +++ b/apps/web/src/pages/LegacyPool/CTACards.tsx @@ -1,11 +1,11 @@ import { AutoColumn } from 'components/deprecated/Column' import { useAccount } from 'hooks/useAccount' import styled, { css } from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ExternalLink, StyledInternalLink, ThemedText } from 'theme/components' 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 { Trans } from 'uniswap/src/i18n' const CTASection = styled.section` display: grid; diff --git a/apps/web/src/pages/LegacyPool/PositionPage.tsx b/apps/web/src/pages/LegacyPool/PositionPage.tsx index c4bdfaa6f84..e0a61c67e3b 100644 --- a/apps/web/src/pages/LegacyPool/PositionPage.tsx +++ b/apps/web/src/pages/LegacyPool/PositionPage.tsx @@ -37,6 +37,7 @@ import styled, { useTheme } from 'lib/styled-components' import { LoadingRows } from 'pages/LegacyPool/styled' import { PropsWithChildren, useCallback, useMemo, useState } from 'react' import { Helmet } from 'react-helmet-async/lib/index' +import { Trans, useTranslation } from 'react-i18next' import { Link, useParams } from 'react-router-dom' import { Bound } from 'state/mint/v3/actions' import { useIsTransactionPending, useTransactionAdder } from 'state/transactions/hooks' @@ -50,7 +51,6 @@ import { toGraphQLChain } from 'uniswap/src/features/chains/utils' import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { useUSDCPrice } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans, t } from 'uniswap/src/i18n' import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking' import { logger } from 'utilities/src/logger/logger' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' @@ -332,6 +332,7 @@ function parseTokenId(tokenId: string | undefined): BigNumber | undefined { } function PositionPageContent() { + const { t } = useTranslation() const trace = useTrace() const { tokenId: tokenIdFromUrl } = useParams<{ tokenId?: string }>() const account = useAccount() diff --git a/apps/web/src/pages/LegacyPool/index.tsx b/apps/web/src/pages/LegacyPool/index.tsx index 74f8c564a1c..2d11fea8a95 100644 --- a/apps/web/src/pages/LegacyPool/index.tsx +++ b/apps/web/src/pages/LegacyPool/index.tsx @@ -15,6 +15,7 @@ import { PoolVersionMenu } from 'pages/LegacyPool/shared' import { LoadingRows } from 'pages/LegacyPool/styled' import { useMemo, useState } from 'react' import { AlertTriangle, BookOpen, ChevronsRight, Inbox, Layers } from 'react-feather' +import { useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' import { useUserHideClosedPositions } from 'state/user/hooks' import { HideSmall, ThemedText } from 'theme/components' @@ -23,7 +24,6 @@ import { Anchor, Flex, Text, styled } from 'ui/src' import { ProtocolVersion } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { useIsSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId' import Trace from 'uniswap/src/features/telemetry/Trace' -import { t, useTranslation } from 'uniswap/src/i18n' const PageWrapper = deprecatedStyled(AutoColumn)` padding: 68px 8px 0px; @@ -121,6 +121,7 @@ function PositionsLoadingPlaceholder() { } function WrongNetworkCard() { + const { t } = useTranslation() return ( <> diff --git a/apps/web/src/pages/LegacyPool/shared.tsx b/apps/web/src/pages/LegacyPool/shared.tsx index 89e915381fc..3df7229b3c9 100644 --- a/apps/web/src/pages/LegacyPool/shared.tsx +++ b/apps/web/src/pages/LegacyPool/shared.tsx @@ -1,11 +1,11 @@ import { DropdownSelector } from 'components/DropdownSelector' import { Pool } from 'components/Icons/Pool' import { useState } from 'react' +import { useTranslation } from 'react-i18next' import { Anchor, styled, Text } from 'ui/src' import { ProtocolVersion } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' -import { t } from 'uniswap/src/i18n' const PoolVersionItem = styled(Anchor, { display: 'flex', @@ -20,21 +20,6 @@ const PoolVersionItem = styled(Anchor, { }, }) -const menuItems = { - [ProtocolVersion.V4]: { - title: t('pool.v4'), - link: '/pool', - }, - [ProtocolVersion.V3]: { - title: t('pool.v3'), - link: '/pool', - }, - [ProtocolVersion.V2]: { - title: t('pool.v2'), - link: '/pools/v2', - }, -} - const titles = { [ProtocolVersion.V4]: 'v4', [ProtocolVersion.V3]: 'v3', @@ -42,9 +27,25 @@ const titles = { } export function PoolVersionMenu({ protocolVersion }: { protocolVersion: ProtocolVersion }) { + const { t } = useTranslation() const [isOpen, setIsOpen] = useState(false) const isLPRedesignEnabled = useFeatureFlag(FeatureFlags.LPRedesign) + const menuItems = { + [ProtocolVersion.V4]: { + title: t('pool.v4'), + link: '/pool', + }, + [ProtocolVersion.V3]: { + title: t('pool.v3'), + link: '/pool', + }, + [ProtocolVersion.V2]: { + title: t('pool.v2'), + link: '/pools/v2', + }, + } + return ( } @@ -215,6 +224,14 @@ function PositionPage() { quoteCurrencyId: currencyIdToAddress(currencyId(currency1Amount.currency)), }} > + + + {t(`liquidityPool.positions.page.title`, { + quoteSymbol: currency1Amount.currency.symbol, + baseSymbol: currency0Amount.currency.symbol, + })} + + @@ -246,7 +263,12 @@ function PositionPage() { { - dispatch(setOpenModal({ name: ModalName.AddLiquidity, initialState: positionInfo })) + dispatch( + setOpenModal({ + name: ModalName.AddLiquidity, + initialState: { ...positionInfo, collectAsWeth }, + }), + ) }} > @@ -256,7 +278,12 @@ function PositionPage() { { - dispatch(setOpenModal({ name: ModalName.RemoveLiquidity, initialState: positionInfo })) + dispatch( + setOpenModal({ + name: ModalName.RemoveLiquidity, + initialState: { ...positionInfo, collectAsWeth }, + }), + ) }} > @@ -345,10 +372,13 @@ function PositionPage() { fiatValue1={fiatFeeValue1} /> )} - {positionInfo.version !== ProtocolVersion.V4 && ( + {canUnwrap && ( - + - - - - - - - {positionInfo && {shortenAddress(positionInfo.poolId)}} - - - - {positionLoading || !positionInfo ? ( - - - - ) : ( - - )} - {isOwner && ( - - { - navigate('/migrate/v2') - }} - > - - - - - { - dispatch(setOpenModal({ name: ModalName.AddLiquidity, initialState: positionInfo })) - }} - > - - - - - { - dispatch(setOpenModal({ name: ModalName.RemoveLiquidity, initialState: positionInfo })) - }} - > - - - - + <> + + + {t(`liquidityPool.positions.page.title`, { + quoteSymbol: currency1Amount?.currency.symbol, + baseSymbol: currency0Amount?.currency.symbol, + })} + + + + + + + + + + {positionInfo && {shortenAddress(positionInfo.poolId)}} + - )} - - {positionLoading || !currency0Amount || !currency1Amount ? ( + + {positionLoading || !positionInfo ? ( - - - - - - - + ) : ( - <> - - - + + )} + {isOwner && ( + + { + navigate('/migrate/v2') + }} + > + + - - {token0USDValue && token1USDValue - ? formatCurrencyAmount({ value: token0USDValue.add(token1USDValue), type: NumberType.FiatStandard }) - : '-'} + + { + dispatch(setOpenModal({ name: ModalName.AddLiquidity, initialState: positionInfo })) + }} + > + + - - - - + + { + dispatch(setOpenModal({ name: ModalName.RemoveLiquidity, initialState: positionInfo })) + }} + > + + - + + + )} + + {positionLoading || !currency0Amount || !currency1Amount ? ( + + + + + + + + + + ) : ( + <> + + + + - {formatCurrencyAmount({ value: liquidityAmount, type: NumberType.TokenNonTx })} + {token0USDValue && token1USDValue + ? formatCurrencyAmount({ + value: token0USDValue.add(token1USDValue), + type: NumberType.FiatStandard, + }) + : '-'} - - - - - - - - - {formatCurrencyAmount({ value: currency0Amount, type: NumberType.TokenNonTx })} + + + - + + + {formatCurrencyAmount({ value: liquidityAmount, type: NumberType.TokenNonTx })} + + + - - - - - - - - {formatCurrencyAmount({ value: currency1Amount, type: NumberType.TokenNonTx })} + + + - + + + {formatCurrencyAmount({ value: currency0Amount, type: NumberType.TokenNonTx })} + + + - - - - - - {formatPercent(poolTokenPercentage?.toFixed(6))} - - - )} + + + + + + + {formatCurrencyAmount({ value: currency1Amount, type: NumberType.TokenNonTx })} + + + + + + + + + {formatPercent(poolTokenPercentage?.toSignificant(6))} + + + )} + -
- + + ) } diff --git a/apps/web/src/pages/Pool/Positions/create/AddHook.tsx b/apps/web/src/pages/Pool/Positions/create/AddHook.tsx index 62974948c5f..3afa8a76406 100644 --- a/apps/web/src/pages/Pool/Positions/create/AddHook.tsx +++ b/apps/web/src/pages/Pool/Positions/create/AddHook.tsx @@ -4,6 +4,7 @@ import { useCreatePositionContext } from 'pages/Pool/Positions/create/CreatePosi import { AdvancedButton } from 'pages/Pool/Positions/create/shared' import { DEFAULT_POSITION_STATE } from 'pages/Pool/Positions/create/types' import { useCallback, useRef, useState } from 'react' +import { useTranslation } from 'react-i18next' import { Button, Text, TouchableArea, styled } from 'ui/src' import { DocumentList } from 'ui/src/components/icons/DocumentList' import { X } from 'ui/src/components/icons/X' @@ -11,7 +12,6 @@ import { Flex } from 'ui/src/components/layout/Flex' import { fonts } from 'ui/src/theme' import { TextInput } from 'uniswap/src/components/input/TextInput' import { ElementName } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' import { getValidAddress } from 'uniswap/src/utils/addresses' import { shortenAddress } from 'utilities/src/addresses' import { useOnClickOutside } from 'utilities/src/react/hooks' diff --git a/apps/web/src/pages/Pool/Positions/create/CreatePosition.tsx b/apps/web/src/pages/Pool/Positions/create/CreatePosition.tsx index 212fb89633b..1d3489c9ef2 100644 --- a/apps/web/src/pages/Pool/Positions/create/CreatePosition.tsx +++ b/apps/web/src/pages/Pool/Positions/create/CreatePosition.tsx @@ -29,6 +29,7 @@ import { useInitialCurrencyInputs } from 'pages/Pool/Positions/create/hooks' import { DEFAULT_POSITION_STATE, PositionFlowStep } from 'pages/Pool/Positions/create/types' import { useCallback, useEffect, useMemo, useState } from 'react' import { ChevronRight } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { Navigate, useNavigate, useParams } from 'react-router-dom' import { MultichainContextProvider } from 'state/multichain/MultichainContext' import { useMultichainContext } from 'state/multichain/useMultichainContext' @@ -48,7 +49,6 @@ import { TransactionSettingsContextProvider } from 'uniswap/src/features/transac import { TransactionSettingKey } from 'uniswap/src/features/transactions/settings/slice' import { SwapFormSettings } from 'uniswap/src/features/transactions/swap/form/SwapFormSettings' import { Deadline } from 'uniswap/src/features/transactions/swap/settings/configs/Deadline' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { INTERFACE_NAV_HEIGHT } from 'uniswap/src/theme/heights' import { usePrevious } from 'utilities/src/react/hooks' diff --git a/apps/web/src/pages/Pool/Positions/create/CreatePositionModal.tsx b/apps/web/src/pages/Pool/Positions/create/CreatePositionModal.tsx index 513e1f2fc64..32a1d4df801 100644 --- a/apps/web/src/pages/Pool/Positions/create/CreatePositionModal.tsx +++ b/apps/web/src/pages/Pool/Positions/create/CreatePositionModal.tsx @@ -26,6 +26,7 @@ import { TradingAPIError } from 'pages/Pool/Positions/create/TradingAPIError' import { formatPrices } from 'pages/Pool/Positions/create/shared' import { getInvertedTuple, getPoolIdOrAddressFromCreatePositionInfo } from 'pages/Pool/Positions/create/utils' import { useCallback, useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { useDispatch } from 'react-redux' import { useNavigate } from 'react-router-dom' import { liquiditySaga } from 'state/sagas/liquidity/liquiditySaga' @@ -42,7 +43,6 @@ import { useLocalizationContext } from 'uniswap/src/features/language/Localizati import { ModalName } from 'uniswap/src/features/telemetry/constants' import { isValidLiquidityTxContext } from 'uniswap/src/features/transactions/liquidity/types' import { TransactionStep } from 'uniswap/src/features/transactions/swap/types/steps' -import { Trans } from 'uniswap/src/i18n' import { NumberType } from 'utilities/src/format/types' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' import { useAccount } from 'wagmi' diff --git a/apps/web/src/pages/Pool/Positions/create/Deposit.tsx b/apps/web/src/pages/Pool/Positions/create/Deposit.tsx index 06396f84d52..7ac7436a016 100644 --- a/apps/web/src/pages/Pool/Positions/create/Deposit.tsx +++ b/apps/web/src/pages/Pool/Positions/create/Deposit.tsx @@ -10,9 +10,9 @@ import { import { CreatePositionModal } from 'pages/Pool/Positions/create/CreatePositionModal' import { Container } from 'pages/Pool/Positions/create/shared' import { useCallback, useState } from 'react' +import { Trans } from 'react-i18next' import { PositionField } from 'types/position' import { Flex, FlexProps, Text } from 'ui/src' -import { Trans } from 'uniswap/src/i18n' export const DepositStep = ({ ...rest }: FlexProps) => { const { diff --git a/apps/web/src/pages/Pool/Positions/create/DynamicFeeTierSpeedbump.tsx b/apps/web/src/pages/Pool/Positions/create/DynamicFeeTierSpeedbump.tsx index 6f9f91fe885..5fdd703d010 100644 --- a/apps/web/src/pages/Pool/Positions/create/DynamicFeeTierSpeedbump.tsx +++ b/apps/web/src/pages/Pool/Positions/create/DynamicFeeTierSpeedbump.tsx @@ -1,8 +1,8 @@ import { Dialog } from 'components/Dialog/Dialog' import { useCreatePositionContext } from 'pages/Pool/Positions/create/CreatePositionContext' +import { Trans } from 'react-i18next' import { Button, Text } from 'ui/src' import { InfoCircleFilled } from 'ui/src/components/icons/InfoCircleFilled' -import { Trans } from 'uniswap/src/i18n' export const DynamicFeeTierSpeedbump = () => { const { setPositionState, dynamicFeeTierSpeedbumpData, setDynamicFeeTierSpeedbumpData } = useCreatePositionContext() diff --git a/apps/web/src/pages/Pool/Positions/create/EditStep.tsx b/apps/web/src/pages/Pool/Positions/create/EditStep.tsx index e88d7476190..9cbd81d0ce3 100644 --- a/apps/web/src/pages/Pool/Positions/create/EditStep.tsx +++ b/apps/web/src/pages/Pool/Positions/create/EditStep.tsx @@ -18,12 +18,12 @@ import { Container, formatPrices } from 'pages/Pool/Positions/create/shared' import { PositionFlowStep } from 'pages/Pool/Positions/create/types' import { getInvertedTuple } from 'pages/Pool/Positions/create/utils' import { useCallback, useMemo } from 'react' +import { Trans } from 'react-i18next' import { Button, Flex, FlexProps, Text } from 'ui/src' import { ArrowsLeftRight } from 'ui/src/components/icons/ArrowsLeftRight' import { Edit } from 'ui/src/components/icons/Edit' import { iconSizes } from 'ui/src/theme' import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext' -import { Trans } from 'uniswap/src/i18n' const EditStep = ({ children, onClick, ...rest }: { children: JSX.Element; onClick: () => void } & FlexProps) => { return ( diff --git a/apps/web/src/pages/Pool/Positions/create/PoolOutOfSyncError.tsx b/apps/web/src/pages/Pool/Positions/create/PoolOutOfSyncError.tsx index 36796187380..5fe9936f861 100644 --- a/apps/web/src/pages/Pool/Positions/create/PoolOutOfSyncError.tsx +++ b/apps/web/src/pages/Pool/Positions/create/PoolOutOfSyncError.tsx @@ -1,9 +1,9 @@ import { useCreatePositionContext } from 'pages/Pool/Positions/create/CreatePositionContext' +import { useTranslation } from 'react-i18next' import { Flex, Text } from 'ui/src' import { AlertTriangleFilled } from 'ui/src/components/icons/AlertTriangleFilled' import { LearnMoreLink } from 'uniswap/src/components/text/LearnMoreLink' import { uniswapUrls } from 'uniswap/src/constants/urls' -import { useTranslation } from 'uniswap/src/i18n' export function PoolOutOfSyncError() { const { t } = useTranslation() diff --git a/apps/web/src/pages/Pool/Positions/create/RangeSelectionStep.tsx b/apps/web/src/pages/Pool/Positions/create/RangeSelectionStep.tsx index c9031590f9e..a1ba1b19ef8 100644 --- a/apps/web/src/pages/Pool/Positions/create/RangeSelectionStep.tsx +++ b/apps/web/src/pages/Pool/Positions/create/RangeSelectionStep.tsx @@ -9,6 +9,7 @@ import { Container } from 'pages/Pool/Positions/create/shared' import { getInvertedTuple } from 'pages/Pool/Positions/create/utils' import { useCallback, useMemo, useState } from 'react' import { Minus, Plus } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { useRangeHopCallbacks } from 'state/mint/v3/hooks' import { Button, Flex, FlexProps, SegmentedControl, Text, useSporeColors } from 'ui/src' import { AlertTriangleFilled } from 'ui/src/components/icons/AlertTriangleFilled' @@ -16,7 +17,6 @@ import { fonts } from 'ui/src/theme' import { AmountInput, numericInputRegex } from 'uniswap/src/components/CurrencyInputPanel/AmountInput' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { areCurrenciesEqual } from 'uniswap/src/utils/currencyId' enum RangeSelectionInput { diff --git a/apps/web/src/pages/Pool/Positions/create/ResetCreatePositionsFormModal.tsx b/apps/web/src/pages/Pool/Positions/create/ResetCreatePositionsFormModal.tsx index d16489d4696..07c4f647374 100644 --- a/apps/web/src/pages/Pool/Positions/create/ResetCreatePositionsFormModal.tsx +++ b/apps/web/src/pages/Pool/Positions/create/ResetCreatePositionsFormModal.tsx @@ -1,11 +1,11 @@ import GetHelp from 'components/Button/GetHelp' import { HelpCircle } from 'react-feather' +import { Trans } from 'react-i18next' import { CloseIcon } from 'theme/components' import { Button, Flex, Text, useSporeColors } from 'ui/src' import { iconSizes } from 'ui/src/theme' import { Modal } from 'uniswap/src/components/modals/Modal' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n/Trans' interface ResetCreatePositionFormModalProps { isOpen: boolean diff --git a/apps/web/src/pages/Pool/Positions/create/SelectTokenStep.tsx b/apps/web/src/pages/Pool/Positions/create/SelectTokenStep.tsx index 0dfcb73fc19..86fc7a6626e 100644 --- a/apps/web/src/pages/Pool/Positions/create/SelectTokenStep.tsx +++ b/apps/web/src/pages/Pool/Positions/create/SelectTokenStep.tsx @@ -16,6 +16,7 @@ import { useCreatePositionContext } from 'pages/Pool/Positions/create/CreatePosi import { AdvancedButton, Container } from 'pages/Pool/Positions/create/shared' import { FeeData } from 'pages/Pool/Positions/create/types' import { useCallback, useEffect, useMemo, useReducer, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { TamaguiClickableStyle } from 'theme/components' import { PositionField } from 'types/position' @@ -28,7 +29,6 @@ import { TokenLogo } from 'uniswap/src/components/CurrencyLogo/TokenLogo' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans, t, useTranslation } from 'uniswap/src/i18n' import { areCurrenciesEqual } from 'uniswap/src/utils/currencyId' import { NumberType } from 'utilities/src/format/types' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' @@ -106,6 +106,7 @@ const FeeTier = ({ selected: boolean onSelect: (value: FeeData) => void }) => { + const { t } = useTranslation() const { formatPercent } = useFormatter() const { formatNumberOrString } = useLocalizationContext() diff --git a/apps/web/src/pages/Pool/Positions/create/TradingAPIError.tsx b/apps/web/src/pages/Pool/Positions/create/TradingAPIError.tsx index 6d44015fb1c..8d986f607a6 100644 --- a/apps/web/src/pages/Pool/Positions/create/TradingAPIError.tsx +++ b/apps/web/src/pages/Pool/Positions/create/TradingAPIError.tsx @@ -1,8 +1,8 @@ +import { useTranslation } from 'react-i18next' import { ClickableTamaguiStyle } from 'theme/components' import { Flex, Text, TouchableArea } from 'ui/src' import { AlertTriangleFilled } from 'ui/src/components/icons/AlertTriangleFilled' import { RotateLeft } from 'ui/src/components/icons/RotateLeft' -import { useTranslation } from 'uniswap/src/i18n' export function TradingAPIError({ refetch }: { refetch?: () => void }) { const { t } = useTranslation() diff --git a/apps/web/src/pages/Pool/Positions/create/hooks.tsx b/apps/web/src/pages/Pool/Positions/create/hooks.tsx index ae9be4a5de4..cd0f7dc4393 100644 --- a/apps/web/src/pages/Pool/Positions/create/hooks.tsx +++ b/apps/web/src/pages/Pool/Positions/create/hooks.tsx @@ -44,6 +44,7 @@ import { validateCurrencyInput, } from 'pages/Pool/Positions/create/utils' import { useMemo } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { parseCurrencyFromURLParameter } from 'state/swap/hooks' import { PositionField } from 'types/position' @@ -53,7 +54,6 @@ import { useGetPoolsByTokens } from 'uniswap/src/data/rest/getPools' import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains' import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { getParsedChainId } from 'utils/chainParams' /** diff --git a/apps/web/src/pages/Pool/Positions/create/shared.tsx b/apps/web/src/pages/Pool/Positions/create/shared.tsx index 84c35853dc3..1cf549ac793 100644 --- a/apps/web/src/pages/Pool/Positions/create/shared.tsx +++ b/apps/web/src/pages/Pool/Positions/create/shared.tsx @@ -2,6 +2,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' import { MouseoverTooltip } from 'components/Tooltip' import { PriceRangeInfo } from 'pages/Pool/Positions/create/types' +import { useTranslation } from 'react-i18next' import { ClickableTamaguiStyle } from 'theme/components' import { Flex, GeneratedIcon, Text, styled } from 'ui/src' import { InfoCircleFilled } from 'ui/src/components/icons/InfoCircleFilled' @@ -9,7 +10,6 @@ import { iconSizes } from 'ui/src/theme' import { FormatNumberOrStringInput } from 'uniswap/src/features/language/formatter' import Trace from 'uniswap/src/features/telemetry/Trace' import { ElementNameType } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' import { NumberType } from 'utilities/src/format/types' export const Container = styled(Flex, { diff --git a/apps/web/src/pages/Pool/Positions/create/utils.tsx b/apps/web/src/pages/Pool/Positions/create/utils.tsx index 5a88aac170d..00eba039e2f 100644 --- a/apps/web/src/pages/Pool/Positions/create/utils.tsx +++ b/apps/web/src/pages/Pool/Positions/create/utils.tsx @@ -45,6 +45,7 @@ import { } from 'uniswap/src/data/tradingApi/__generated__' import { AccountMeta } from 'uniswap/src/features/accounts/types' import { UniverseChainId } from 'uniswap/src/features/chains/types' +import { CurrencyInfo } from 'uniswap/src/features/dataApi/types' import { useCurrencyInfo, useNativeCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' import { CreatePositionTxAndGasInfo, LiquidityTransactionType } from 'uniswap/src/features/transactions/liquidity/types' import { validatePermit, validateTransactionRequest } from 'uniswap/src/features/transactions/swap/utils/trade' @@ -1110,6 +1111,33 @@ export function getPoolIdOrAddressFromCreatePositionInfo(positionInfo: CreatePos } } +export function useCanUnwrapCurrency(currency: OptionalCurrency): boolean { + const chainId = currency?.chainId ?? UniverseChainId.Mainnet + const nativeCurrencyInfo = useNativeCurrencyInfo(chainId) + const currencyId = currency ? (currency.isNative ? undefined : buildCurrencyId(chainId, currency.address)) : undefined + const currencyInfo = useCurrencyInfo(currencyId, { skip: !currencyId }) ?? nativeCurrencyInfo + + if (!currency) { + return false + } + + return areCurrenciesEqual(currencyInfo?.currency, nativeCurrencyInfo?.currency.wrapped) +} + +export function useCurrencyInfoWithUnwrapForTradingApi({ + currency, + shouldUnwrap, +}: { + currency: Currency + shouldUnwrap: boolean +}): CurrencyInfo +export function useCurrencyInfoWithUnwrapForTradingApi({ + currency, + shouldUnwrap, +}: { + currency: OptionalCurrency + shouldUnwrap: boolean +}): Maybe export function useCurrencyInfoWithUnwrapForTradingApi({ currency, shouldUnwrap, diff --git a/apps/web/src/pages/Pool/index.tsx b/apps/web/src/pages/Pool/index.tsx index e1884798044..7a46a053d90 100644 --- a/apps/web/src/pages/Pool/index.tsx +++ b/apps/web/src/pages/Pool/index.tsx @@ -16,6 +16,7 @@ import { PositionsHeader } from 'pages/Pool/Positions/PositionsHeader' import { TopPools } from 'pages/Pool/Positions/TopPools' import { ExternalArrowLink } from 'pages/Pool/Positions/shared' import { useEffect, useMemo, useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { Link, Navigate, useNavigate } from 'react-router-dom' import { useTopPools } from 'state/explore/topPools' import { usePendingLPTransactionsChangeListener } from 'state/transactions/hooks' @@ -35,7 +36,6 @@ import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag, useFeatureFlagWithLoading } from 'uniswap/src/features/gating/hooks' import Trace from 'uniswap/src/features/telemetry/Trace' import { InterfacePageNameLocal } from 'uniswap/src/features/telemetry/constants' -import { Trans, useTranslation } from 'uniswap/src/i18n' const PAGE_SIZE = 25 diff --git a/apps/web/src/pages/PoolDetails/index.tsx b/apps/web/src/pages/PoolDetails/index.tsx index 0b6e82167e2..f038af771cc 100644 --- a/apps/web/src/pages/PoolDetails/index.tsx +++ b/apps/web/src/pages/PoolDetails/index.tsx @@ -16,12 +16,12 @@ import { getPoolDetailPageTitle } from 'pages/PoolDetails/utils' import { useDynamicMetatags } from 'pages/metatags' import { useMemo, useReducer } from 'react' import { Helmet } from 'react-helmet-async/lib/index' +import { Trans, useTranslation } from 'react-i18next' import { useParams } from 'react-router-dom' import { Text } from 'rebass' import { BREAKPOINTS, ThemeProvider } from 'theme' import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import Trace from 'uniswap/src/features/telemetry/Trace' -import { Trans } from 'uniswap/src/i18n' import { useChainIdFromUrlParam } from 'utils/chainParams' const PageWrapper = styled(Row)` @@ -106,6 +106,7 @@ function getUnwrappedPoolToken(poolData?: PoolData, chainId?: number) { } export default function PoolDetailsPage() { + const { t } = useTranslation() const { poolAddress } = useParams<{ poolAddress: string }>() const urlChain = useChainIdFromUrlParam() const chainInfo = urlChain ? getChainInfo(urlChain) : undefined @@ -146,7 +147,7 @@ export default function PoolDetailsPage() { return ( - {getPoolDetailPageTitle(poolData)} + {getPoolDetailPageTitle(t, poolData)} {metatags.map((tag, index) => ( ))} diff --git a/apps/web/src/pages/PoolDetails/utils.test.ts b/apps/web/src/pages/PoolDetails/utils.test.ts index 1506e8e2f52..77775634f42 100644 --- a/apps/web/src/pages/PoolDetails/utils.test.ts +++ b/apps/web/src/pages/PoolDetails/utils.test.ts @@ -1,10 +1,11 @@ import { PoolData } from 'graphql/data/pools/usePoolData' import { getPoolDetailPageTitle } from 'pages/PoolDetails/utils' import { validPoolDataResponse } from 'test-utils/pools/fixtures' +import i18n from 'uniswap/src/i18n' describe('getPoolDetailPageTitle', () => { it('should return the base title when poolData is undefined', () => { - const result = getPoolDetailPageTitle() + const result = getPoolDetailPageTitle(i18n.t) expect(result).toBe('Buy and sell on Uniswap') }) @@ -13,13 +14,13 @@ describe('getPoolDetailPageTitle', () => { token0: { symbol: undefined }, token1: { symbol: undefined }, } as PoolData - const result = getPoolDetailPageTitle(poolData) + const result = getPoolDetailPageTitle(i18n.t, poolData) expect(result).toBe('Buy and sell on Uniswap') }) it('should return the correct title when token symbols are defined', () => { const poolData: PoolData = validPoolDataResponse.data - const result = getPoolDetailPageTitle(poolData) + const result = getPoolDetailPageTitle(i18n.t, poolData) expect(result).toBe('USDC/WETH: Buy and sell on Uniswap') }) }) diff --git a/apps/web/src/pages/PoolDetails/utils.ts b/apps/web/src/pages/PoolDetails/utils.ts index 218699b1dea..342302c68db 100644 --- a/apps/web/src/pages/PoolDetails/utils.ts +++ b/apps/web/src/pages/PoolDetails/utils.ts @@ -1,7 +1,7 @@ import { PoolData } from 'graphql/data/pools/usePoolData' -import { t } from 'uniswap/src/i18n' +import { TFunction } from 'i18next' -export const getPoolDetailPageTitle = (poolData?: PoolData) => { +export const getPoolDetailPageTitle = (t: TFunction, poolData?: PoolData) => { const token0Symbol = poolData?.token0.symbol const token1Symbol = poolData?.token1.symbol const baseTitle = t('common.buyAndSell') diff --git a/apps/web/src/pages/PoolFinder/index.tsx b/apps/web/src/pages/PoolFinder/index.tsx index 28bf202b518..cb3d764d170 100644 --- a/apps/web/src/pages/PoolFinder/index.tsx +++ b/apps/web/src/pages/PoolFinder/index.tsx @@ -14,6 +14,7 @@ import ms from 'ms' import { CurrencySelector } from 'pages/Pool/Positions/create/SelectTokenStep' import { useEffect, useState } from 'react' import { ArrowLeft } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { useTokenBalance } from 'state/connection/hooks' import { usePairAdder } from 'state/user/hooks' import { PositionField } from 'types/position' @@ -21,7 +22,6 @@ import { Button, Flex, Text } from 'ui/src' import { nativeOnChain } from 'uniswap/src/constants/tokens' import Trace from 'uniswap/src/features/telemetry/Trace' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { NumberType, useFormatter } from 'utils/formatNumbers' export default function PoolFinder() { diff --git a/apps/web/src/pages/RemoveLiquidity/RemoveLiquidityForm.tsx b/apps/web/src/pages/RemoveLiquidity/RemoveLiquidityForm.tsx index 7071c6140f1..1bc166e0155 100644 --- a/apps/web/src/pages/RemoveLiquidity/RemoveLiquidityForm.tsx +++ b/apps/web/src/pages/RemoveLiquidity/RemoveLiquidityForm.tsx @@ -8,10 +8,13 @@ import { } from 'components/RemoveLiquidity/RemoveLiquidityModalContext' import { useRemoveLiquidityTxContext } from 'components/RemoveLiquidity/RemoveLiquidityTxContext' import { TradingAPIError } from 'pages/Pool/Positions/create/TradingAPIError' +import { useCanUnwrapCurrency } from 'pages/Pool/Positions/create/utils' import { ClickablePill } from 'pages/Swap/Buy/PredefinedAmount' import { NumericalInputMimic, NumericalInputSymbolContainer, NumericalInputWrapper } from 'pages/Swap/common/shared' -import { Flex, Text, useSporeColors } from 'ui/src' -import { Trans, useTranslation } from 'uniswap/src/i18n' +import { useMemo } from 'react' +import { Trans, useTranslation } from 'react-i18next' +import { Flex, Switch, Text, useSporeColors } from 'ui/src' +import { useNativeCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' import useResizeObserver from 'use-resize-observer' export function RemoveLiquidityForm() { @@ -19,7 +22,8 @@ export function RemoveLiquidityForm() { const { t } = useTranslation() const colors = useSporeColors() - const { percent, positionInfo, setPercent, setStep, percentInvalid } = useRemoveLiquidityModalContext() + const { percent, positionInfo, setPercent, setStep, percentInvalid, unwrapNativeCurrency, setUnwrapNativeCurrency } = + useRemoveLiquidityModalContext() const { gasFeeEstimateUSD, txContext, error, refetch } = useRemoveLiquidityTxContext() if (!positionInfo) { @@ -27,6 +31,39 @@ export function RemoveLiquidityForm() { } const { currency0Amount, currency1Amount } = positionInfo + const canUnwrap0 = useCanUnwrapCurrency(currency0Amount.currency) + const canUnwrap1 = useCanUnwrapCurrency(currency1Amount.currency) + const nativeCurrencyInfo = useNativeCurrencyInfo(positionInfo.chainId) + const canUnwrap = canUnwrap0 || canUnwrap1 + + const unwrapUnderCard = useMemo(() => { + if (!canUnwrap || !nativeCurrencyInfo) { + return null + } + + return ( + + + + + setUnwrapNativeCurrency((unwrapNativeCurrency) => !unwrapNativeCurrency)} + variant="branded" + /> + + ) + }, [nativeCurrencyInfo, unwrapNativeCurrency, canUnwrap, setUnwrapNativeCurrency]) return ( @@ -35,47 +72,58 @@ export function RemoveLiquidityForm() { {/* Percent input panel */} - - - - - - - { - setPercent(value) - }} - placeholder="0" - $width={percent && hiddenObserver.width ? hiddenObserver.width + 1 : undefined} - maxDecimals={1} - maxLength={2} - /> - % - {percent} - - - - {[25, 50, 75, 100].map((option) => { - const active = percent === option.toString() - const disabled = false - return ( - { - setPercent(option.toString()) + + + + + + + + { + setPercent(value) }} - $disabled={disabled} - $active={active} - customBorderColor={colors.surface3.val} - foregroundColor={colors[disabled ? 'neutral3' : active ? 'neutral1' : 'neutral2'].val} - label={option < 100 ? option + '%' : t('swap.button.max')} - px="$spacing16" - textVariant="buttonLabel2" + placeholder="0" + $width={percent && hiddenObserver.width ? hiddenObserver.width + 1 : undefined} + maxDecimals={1} + maxLength={2} /> - ) - })} + % + {percent} + + + + {[25, 50, 75, 100].map((option) => { + const active = percent === option.toString() + const disabled = false + return ( + { + setPercent(option.toString()) + }} + $disabled={disabled} + $active={active} + customBorderColor={colors.surface3.val} + foregroundColor={colors[disabled ? 'neutral3' : active ? 'neutral1' : 'neutral2'].val} + label={option < 100 ? option + '%' : t('swap.button.max')} + px="$spacing16" + textVariant="buttonLabel2" + /> + ) + })} + + {unwrapUnderCard} {/* Detail rows */} import('nft/pages/explore')) const Collection = lazy(() => import('nft/pages/collection')) @@ -69,18 +69,18 @@ export function useRouterConfig(): RouterConfig { // SEO titles and descriptions sourced from https://docs.google.com/spreadsheets/d/1_6vSxGgmsx6QGEZ4mdHppv1VkuiJEro3Y_IopxUHGB4/edit#gid=0 // getTitle and getDescription are used as static metatags for SEO. Dynamic metatags should be set in the page component itself const StaticTitlesAndDescriptions = { - UniswapTitle: t('title.uniswapTradeCrypto'), - SwapTitle: t('title.buySellTradeEthereum'), - SwapDescription: t('title.swappingMadeSimple'), - DetailsPageBaseTitle: t('common.buyAndSell'), - TDPDescription: t('title.realTime'), - PDPDescription: t('title.tradeTokens'), - NFTTitle: t('title.explore'), - MigrateTitle: t('title.migratev2'), - MigrateTitleV3: t('title.migratev3'), - MigrateDescription: t('title.easilyRemove'), - MigrateDescriptionV4: t('title.easilyRemoveV4'), - AddLiquidityDescription: t('title.earnFees'), + UniswapTitle: i18n.t('title.uniswapTradeCrypto'), + SwapTitle: i18n.t('title.buySellTradeEthereum'), + SwapDescription: i18n.t('title.swappingMadeSimple'), + DetailsPageBaseTitle: i18n.t('common.buyAndSell'), + TDPDescription: i18n.t('title.realTime'), + PDPDescription: i18n.t('title.tradeTokens'), + NFTTitle: i18n.t('title.explore'), + MigrateTitle: i18n.t('title.migratev2'), + MigrateTitleV3: i18n.t('title.migratev3'), + MigrateDescription: i18n.t('title.easilyRemove'), + MigrateDescriptionV4: i18n.t('title.easilyRemoveV4'), + AddLiquidityDescription: i18n.t('title.earnFees'), } export interface RouteDefinition { @@ -124,7 +124,7 @@ export const routes: RouteDefinition[] = [ }), createRouteDefinition({ path: '/explore/tokens/:chainName/:tokenAddress', - getTitle: () => t('common.buyAndSell'), + getTitle: () => i18n.t('common.buyAndSell'), getDescription: () => StaticTitlesAndDescriptions.TDPDescription, getElement: () => , }), @@ -158,8 +158,8 @@ export const routes: RouteDefinition[] = [ }), createRouteDefinition({ path: '/vote/*', - getTitle: () => t('title.voteOnGov'), - getDescription: () => t('title.uniToken'), + getTitle: () => i18n.t('title.voteOnGov'), + getDescription: () => i18n.t('title.uniToken'), getElement: () => { return ( @@ -176,8 +176,8 @@ export const routes: RouteDefinition[] = [ }), createRouteDefinition({ path: '/create-proposal', - getTitle: () => t('title.createGovernanceOn'), - getDescription: () => t('title.createGovernanceTo'), + getTitle: () => i18n.t('title.createGovernanceOn'), + getDescription: () => i18n.t('title.createGovernanceTo'), getElement: () => , }), createRouteDefinition({ @@ -188,17 +188,17 @@ export const routes: RouteDefinition[] = [ createRouteDefinition({ path: '/send', getElement: () => , - getTitle: () => t('title.sendTokens'), + getTitle: () => i18n.t('title.sendTokens'), }), createRouteDefinition({ path: '/limits', getElement: () => , - getTitle: () => t('title.placeLimit'), + getTitle: () => i18n.t('title.placeLimit'), }), createRouteDefinition({ path: '/limit', getElement: () => , - getTitle: () => t('title.placeLimit'), + getTitle: () => i18n.t('title.placeLimit'), }), createRouteDefinition({ path: '/buy', @@ -319,14 +319,14 @@ export const routes: RouteDefinition[] = [ createRouteDefinition({ path: '/remove/v2/:currencyIdA/:currencyIdB', getElement: () => , - getTitle: () => t('title.removeLiquidityv2'), - getDescription: () => t('title.removeTokensv2'), + getTitle: () => i18n.t('title.removeLiquidityv2'), + getDescription: () => i18n.t('title.removeTokensv2'), }), createRouteDefinition({ path: '/remove/:tokenId', getElement: () => , - getTitle: () => t('title.removePoolLiquidity'), - getDescription: () => t('title.removev3Liquidity'), + getTitle: () => i18n.t('title.removePoolLiquidity'), + getDescription: () => i18n.t('title.removev3Liquidity'), }), createRouteDefinition({ path: '/migrate/v2', @@ -348,8 +348,8 @@ export const routes: RouteDefinition[] = [ ), enabled: (args) => !args.shouldDisableNFTRoutes, - getTitle: () => t('title.exploreNFTs'), - getDescription: () => t('title.betterPricesMoreListings'), + getTitle: () => i18n.t('title.exploreNFTs'), + getDescription: () => i18n.t('title.betterPricesMoreListings'), }), createRouteDefinition({ path: '/nfts/asset/:contractAddress/:tokenId', @@ -370,7 +370,7 @@ export const routes: RouteDefinition[] = [ ), enabled: (args) => !args.shouldDisableNFTRoutes, getTitle: () => StaticTitlesAndDescriptions.NFTTitle, - getDescription: () => t('title.manageNFT'), + getDescription: () => i18n.t('title.manageNFT'), }), createRouteDefinition({ path: '/nfts/collection/:contractAddress', diff --git a/apps/web/src/pages/Swap/Buy/BuyForm.tsx b/apps/web/src/pages/Swap/Buy/BuyForm.tsx index 6d0ed1ee7f2..49d165dedad 100644 --- a/apps/web/src/pages/Swap/Buy/BuyForm.tsx +++ b/apps/web/src/pages/Swap/Buy/BuyForm.tsx @@ -13,6 +13,7 @@ import { useWidthAdjustedDisplayValue, } from 'pages/Swap/common/shared' import { useEffect } from 'react' +import { useTranslation } from 'react-i18next' import { Flex, Text, styled } from 'ui/src' import { useUrlContext } from 'uniswap/src/contexts/UrlContext' import { UniverseChainId } from 'uniswap/src/features/chains/types' @@ -23,7 +24,6 @@ import { useFiatOnRampAggregatorGetCountryQuery } from 'uniswap/src/features/fia import Trace from 'uniswap/src/features/telemetry/Trace' import { FiatOnRampEventName, InterfacePageNameLocal } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { useTranslation } from 'uniswap/src/i18n' import { TestID } from 'uniswap/src/test/fixtures/testIDs' import useResizeObserver from 'use-resize-observer' import { useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/pages/Swap/Buy/BuyFormButton.tsx b/apps/web/src/pages/Swap/Buy/BuyFormButton.tsx index 7f2c789e943..fa36302e765 100644 --- a/apps/web/src/pages/Swap/Buy/BuyFormButton.tsx +++ b/apps/web/src/pages/Swap/Buy/BuyFormButton.tsx @@ -3,8 +3,8 @@ import { LoaderButton } from 'components/Button/LoaderButton' import { ButtonLight } from 'components/Button/buttons' import { ConnectWalletButtonText } from 'components/NavBar/accountCTAsExperimentUtils' import { useBuyFormContext } from 'pages/Swap/Buy/BuyFormContext' +import { useTranslation } from 'react-i18next' import { Button, Text } from 'ui/src' -import { useTranslation } from 'uniswap/src/i18n' import { useAccount } from 'wagmi' interface BuyFormButtonProps { diff --git a/apps/web/src/pages/Swap/Buy/BuyFormContext.tsx b/apps/web/src/pages/Swap/Buy/BuyFormContext.tsx index c55d4444624..36a47857cdb 100644 --- a/apps/web/src/pages/Swap/Buy/BuyFormContext.tsx +++ b/apps/web/src/pages/Swap/Buy/BuyFormContext.tsx @@ -3,6 +3,7 @@ import { useUSDTokenUpdater } from 'hooks/useUSDTokenUpdater' import { useFiatOnRampSupportedTokens, useMeldFiatCurrencyInfo } from 'pages/Swap/Buy/hooks' import { formatFiatOnRampFiatAmount } from 'pages/Swap/Buy/shared' import { Dispatch, PropsWithChildren, SetStateAction, createContext, useContext, useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { buildPartialCurrencyInfo } from 'uniswap/src/constants/routing' import { nativeOnChain } from 'uniswap/src/constants/tokens' import { UniverseChainId } from 'uniswap/src/features/chains/types' @@ -24,7 +25,6 @@ import { isInvalidRequestAmountTooHigh, isInvalidRequestAmountTooLow, } from 'uniswap/src/features/fiatOnRamp/utils' -import { t } from 'uniswap/src/i18n' import { useAccount } from 'wagmi' class BuyFormError extends Error { @@ -91,6 +91,7 @@ export function useBuyFormContext() { } function useDerivedBuyFormInfo(state: BuyFormState): BuyInfo { + const { t } = useTranslation() const account = useAccount() const { formattedAmount: amountOut, loading: amountOutLoading } = useUSDTokenUpdater( true /* inputInFiat */, @@ -149,7 +150,7 @@ function useDerivedBuyFormInfo(state: BuyFormState): BuyInfo { return new BuyFormError(t('common.card.error.description')) } return undefined - }, [meldSupportedFiatCurrency, quotesError]) + }, [meldSupportedFiatCurrency, quotesError, t]) return useMemo( () => ({ diff --git a/apps/web/src/pages/Swap/Buy/ChooseProviderModal.tsx b/apps/web/src/pages/Swap/Buy/ChooseProviderModal.tsx index 05f6f7c5420..f8376127896 100644 --- a/apps/web/src/pages/Swap/Buy/ChooseProviderModal.tsx +++ b/apps/web/src/pages/Swap/Buy/ChooseProviderModal.tsx @@ -7,13 +7,13 @@ import { ProviderConnectionError } from 'pages/Swap/Buy/ProviderConnectionError' import { ProviderOption } from 'pages/Swap/Buy/ProviderOption' import { ContentWrapper } from 'pages/Swap/Buy/shared' import { useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { Flex, Separator, Text } from 'ui/src' import { TimePast } from 'ui/src/components/icons/TimePast' import { Modal } from 'uniswap/src/components/modals/Modal' import { uniswapUrls } from 'uniswap/src/constants/urls' import { FORQuote, FORServiceProvider } from 'uniswap/src/features/fiatOnRamp/types' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' import { useInterval } from 'utilities/src/time/timing' diff --git a/apps/web/src/pages/Swap/Buy/CountryListModal.tsx b/apps/web/src/pages/Swap/Buy/CountryListModal.tsx index 6617b407492..e5b7ce89f0c 100644 --- a/apps/web/src/pages/Swap/Buy/CountryListModal.tsx +++ b/apps/web/src/pages/Swap/Buy/CountryListModal.tsx @@ -4,6 +4,7 @@ import { SearchInput } from 'components/SearchModal/styled' import { CountryListRow } from 'pages/Swap/Buy/CountryListRow' import { ContentWrapper } from 'pages/Swap/Buy/shared' import { ChangeEvent, useCallback, useMemo, useRef, useState } from 'react' +import { useTranslation } from 'react-i18next' import AutoSizer from 'react-virtualized-auto-sizer' import { FixedSizeList } from 'react-window' import { CloseIcon } from 'theme/components' @@ -13,7 +14,6 @@ import { iconSizes } from 'ui/src/theme' import { Modal } from 'uniswap/src/components/modals/Modal' import { FORCountry } from 'uniswap/src/features/fiatOnRamp/types' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' import { bubbleToTop } from 'utilities/src/primitives/array' const ROW_ITEM_SIZE = 56 diff --git a/apps/web/src/pages/Swap/Buy/FiatOnRampCurrencyModal.tsx b/apps/web/src/pages/Swap/Buy/FiatOnRampCurrencyModal.tsx index af3eb75d182..ed4a728c6bb 100644 --- a/apps/web/src/pages/Swap/Buy/FiatOnRampCurrencyModal.tsx +++ b/apps/web/src/pages/Swap/Buy/FiatOnRampCurrencyModal.tsx @@ -3,6 +3,7 @@ import { CurrencyRow } from 'components/SearchModal/CurrencyList' import { HeaderContent } from 'pages/Swap/Buy/CountryListModal' import { ContentWrapper } from 'pages/Swap/Buy/shared' import { CSSProperties } from 'react' +import { useTranslation } from 'react-i18next' import AutoSizer from 'react-virtualized-auto-sizer' import { FixedSizeList } from 'react-window' import { CloseIcon } from 'theme/components' @@ -11,7 +12,6 @@ import { Text } from 'ui/src/components/text/Text' import { Modal } from 'uniswap/src/components/modals/Modal' import { FiatOnRampCurrency } from 'uniswap/src/features/fiatOnRamp/types' import { ModalName } from 'uniswap/src/features/telemetry/constants' -import { useTranslation } from 'uniswap/src/i18n' const ROW_ITEM_SIZE = 56 diff --git a/apps/web/src/pages/Swap/Buy/ProviderConnectedView.tsx b/apps/web/src/pages/Swap/Buy/ProviderConnectedView.tsx index 42d61fc444d..0241570b1c0 100644 --- a/apps/web/src/pages/Swap/Buy/ProviderConnectedView.tsx +++ b/apps/web/src/pages/Swap/Buy/ProviderConnectedView.tsx @@ -1,11 +1,11 @@ import styled, { useTheme } from 'lib/styled-components' import { ConnectingViewWrapper } from 'pages/Swap/Buy/shared' +import { Trans, useTranslation } from 'react-i18next' import { ExternalLink } from 'theme/components' import { Flex, Text, useIsDarkMode } from 'ui/src' import { ServiceProviderLogoStyles } from 'uniswap/src/features/fiatOnRamp/constants' import { FORServiceProvider } from 'uniswap/src/features/fiatOnRamp/types' import { getOptionalServiceProviderLogo } from 'uniswap/src/features/fiatOnRamp/utils' -import { Trans, t } from 'uniswap/src/i18n' const StyledLink = styled(ExternalLink)` font-weight: 535; @@ -20,6 +20,7 @@ interface ProviderConnectedViewProps { export function ProviderConnectedView({ closeModal, selectedServiceProvider }: ProviderConnectedViewProps) { const isDarkMode = useIsDarkMode() const theme = useTheme() + const { t } = useTranslation() return ( diff --git a/apps/web/src/pages/Swap/Buy/ProviderConnectionError.tsx b/apps/web/src/pages/Swap/Buy/ProviderConnectionError.tsx index 96a35cd851b..9cf150470b1 100644 --- a/apps/web/src/pages/Swap/Buy/ProviderConnectionError.tsx +++ b/apps/web/src/pages/Swap/Buy/ProviderConnectionError.tsx @@ -1,11 +1,11 @@ import { ConnectingViewWrapper } from 'pages/Swap/Buy/shared' +import { Trans } from 'react-i18next' import { Button, Flex, Image, Text, useIsDarkMode } from 'ui/src' import { UNISWAP_LOGO_LARGE } from 'ui/src/assets' import { iconSizes } from 'ui/src/theme' import { ServiceProviderLogoStyles } from 'uniswap/src/features/fiatOnRamp/constants' import { FORServiceProvider } from 'uniswap/src/features/fiatOnRamp/types' import { getOptionalServiceProviderLogo } from 'uniswap/src/features/fiatOnRamp/utils' -import { Trans } from 'uniswap/src/i18n' interface ProviderConnectionErrorProps { onBack: () => void diff --git a/apps/web/src/pages/Swap/Buy/hooks.ts b/apps/web/src/pages/Swap/Buy/hooks.ts index ff1e9291d2e..46df68f56f4 100644 --- a/apps/web/src/pages/Swap/Buy/hooks.ts +++ b/apps/web/src/pages/Swap/Buy/hooks.ts @@ -1,5 +1,6 @@ import { meldSupportedCurrencyToCurrencyInfo } from 'graphql/data/types' import { useMemo } from 'react' +import { useTranslation } from 'react-i18next' import { getFiatCurrencyName, useAppFiatCurrency, @@ -10,7 +11,6 @@ import { useFiatOnRampAggregatorSupportedTokensQuery, } from 'uniswap/src/features/fiatOnRamp/api' import { FORCountry, FiatCurrencyInfo, FiatOnRampCurrency } from 'uniswap/src/features/fiatOnRamp/types' -import { useTranslation } from 'uniswap/src/i18n' // eslint-disable-next-line no-restricted-imports import { getFiatCurrencyComponents } from 'utilities/src/format/localeBased' diff --git a/apps/web/src/pages/Swap/Limit/LimitExpirySection.tsx b/apps/web/src/pages/Swap/Limit/LimitExpirySection.tsx index d701f65c822..540bcc757aa 100644 --- a/apps/web/src/pages/Swap/Limit/LimitExpirySection.tsx +++ b/apps/web/src/pages/Swap/Limit/LimitExpirySection.tsx @@ -1,10 +1,11 @@ import Row from 'components/deprecated/Row' +import { TFunction } from 'i18next' import styled from 'lib/styled-components' +import { Trans, useTranslation } from 'react-i18next' import { useLimitContext } from 'state/limit/LimitContext' import { ClickableStyle, ThemedText } from 'theme/components' import { InterfaceEventNameLocal } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { Trans, t } from 'uniswap/src/i18n' import { LimitsExpiry } from 'uniswap/src/types/limits' const ExpirySection = styled(Row)` @@ -30,7 +31,7 @@ const LimitExpiryButton = styled.button<{ $selected: boolean }>` const EXPIRY_OPTIONS = [LimitsExpiry.Day, LimitsExpiry.Week, LimitsExpiry.Month, LimitsExpiry.Year] // eslint-disable-next-line consistent-return -function getExpiryLabelText(expiry: LimitsExpiry): string { +function getExpiryLabelText(t: TFunction, expiry: LimitsExpiry): string { switch (expiry) { case LimitsExpiry.Day: return t('common.oneDay') @@ -44,6 +45,7 @@ function getExpiryLabelText(expiry: LimitsExpiry): string { } export function LimitExpirySection() { + const { t } = useTranslation() const { limitState, setLimitState } = useLimitContext() return ( @@ -70,7 +72,7 @@ export function LimitExpirySection() { }} > - {getExpiryLabelText(expiry)} + {getExpiryLabelText(t, expiry)} ))} diff --git a/apps/web/src/pages/Swap/Limit/LimitForm.tsx b/apps/web/src/pages/Swap/Limit/LimitForm.tsx index c297042bfbc..34db2dc0a1d 100644 --- a/apps/web/src/pages/Swap/Limit/LimitForm.tsx +++ b/apps/web/src/pages/Swap/Limit/LimitForm.tsx @@ -28,6 +28,7 @@ import { LimitExpirySection } from 'pages/Swap/Limit/LimitExpirySection' import { LimitPriceError } from 'pages/Swap/Limit/LimitPriceError' import { useCallback, useEffect, useMemo, useState } from 'react' import { ArrowDown } from 'react-feather' +import { Trans } from 'react-i18next' import { LimitContextProvider, useLimitContext } from 'state/limit/LimitContext' import { getDefaultPriceInverted } from 'state/limit/hooks' import { LimitState } from 'state/limit/types' @@ -45,7 +46,6 @@ import { useIsSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupp import { Locale } from 'uniswap/src/features/language/constants' import Trace from 'uniswap/src/features/telemetry/Trace' import { ElementName, InterfacePageNameLocal } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' import { CurrencyField } from 'uniswap/src/types/currency' import { NumberType, diff --git a/apps/web/src/pages/Swap/Limit/LimitPriceError.tsx b/apps/web/src/pages/Swap/Limit/LimitPriceError.tsx index e50aa088ea0..3d8dc8a22ea 100644 --- a/apps/web/src/pages/Swap/Limit/LimitPriceError.tsx +++ b/apps/web/src/pages/Swap/Limit/LimitPriceError.tsx @@ -5,9 +5,9 @@ import Row from 'components/deprecated/Row' import styled, { useTheme } from 'lib/styled-components' import { ReactNode } from 'react' import { AlertTriangle } from 'react-feather' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' import { FadePresence, FadePresenceAnimationType } from 'theme/components/FadePresence' -import { Trans } from 'uniswap/src/i18n' const Container = styled(Row)` padding: 12px; diff --git a/apps/web/src/pages/Swap/Send/NewAddressSpeedBump.tsx b/apps/web/src/pages/Swap/Send/NewAddressSpeedBump.tsx index a9e57af3d96..d57f55d1a9d 100644 --- a/apps/web/src/pages/Swap/Send/NewAddressSpeedBump.tsx +++ b/apps/web/src/pages/Swap/Send/NewAddressSpeedBump.tsx @@ -4,9 +4,9 @@ import Identicon, { IdenticonType, useIdenticonType } from 'components/Identicon import { ColumnCenter } from 'components/deprecated/Column' import Row from 'components/deprecated/Row' import styled, { useTheme } from 'lib/styled-components' +import { Trans } from 'react-i18next' import { useSendContext } from 'state/send/SendContext' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const StyledUserIcon = styled(UserIcon)` width: 28px; diff --git a/apps/web/src/pages/Swap/Send/SendCurrencyInputForm.tsx b/apps/web/src/pages/Swap/Send/SendCurrencyInputForm.tsx index 8c0221af6cb..872d0f7ad6a 100644 --- a/apps/web/src/pages/Swap/Send/SendCurrencyInputForm.tsx +++ b/apps/web/src/pages/Swap/Send/SendCurrencyInputForm.tsx @@ -18,6 +18,7 @@ import { useWidthAdjustedDisplayValue, } from 'pages/Swap/common/shared' import { useCallback, useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { useSendContext } from 'state/send/SendContext' import { SendInputError } from 'state/send/hooks' @@ -32,7 +33,6 @@ import { UniverseChainId } from 'uniswap/src/features/chains/types' import { useAppFiatCurrency, useFiatCurrencyComponents } from 'uniswap/src/features/fiatCurrency/hooks' import Trace from 'uniswap/src/features/telemetry/Trace' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans } from 'uniswap/src/i18n' import useResizeObserver from 'use-resize-observer' import { NumberType, useFormatter } from 'utils/formatNumbers' import { maxAmountSpend } from 'utils/maxAmountSpend' diff --git a/apps/web/src/pages/Swap/Send/SendForm.tsx b/apps/web/src/pages/Swap/Send/SendForm.tsx index 7bf2b8da7c5..96d6f2a5eb5 100644 --- a/apps/web/src/pages/Swap/Send/SendForm.tsx +++ b/apps/web/src/pages/Swap/Send/SendForm.tsx @@ -12,11 +12,11 @@ import { SendRecipientForm } from 'pages/Swap/Send/SendRecipientForm' import { SendReviewModal } from 'pages/Swap/Send/SendReviewModal' import { SmartContractSpeedBumpModal } from 'pages/Swap/Send/SmartContractSpeedBump' import { useCallback, useEffect, useMemo, useState } from 'react' +import { Trans } from 'react-i18next' import { SendContextProvider, useSendContext } from 'state/send/SendContext' import { CurrencyState } from 'state/swap/types' import Trace from 'uniswap/src/features/telemetry/Trace' import { InterfacePageNameLocal } from 'uniswap/src/features/telemetry/constants' -import { Trans } from 'uniswap/src/i18n' import { useIsSmartContractAddress } from 'utils/transfer' type SendFormProps = { diff --git a/apps/web/src/pages/Swap/Send/SendRecipientForm.tsx b/apps/web/src/pages/Swap/Send/SendRecipientForm.tsx index 942d0d2a1c2..4139c9d7b80 100644 --- a/apps/web/src/pages/Swap/Send/SendRecipientForm.tsx +++ b/apps/web/src/pages/Swap/Send/SendRecipientForm.tsx @@ -10,6 +10,7 @@ import { useUnmountingAnimation } from 'hooks/useUnmountingAnimation' import styled, { css, keyframes } from 'lib/styled-components' import { ChangeEvent, ForwardedRef, KeyboardEvent, forwardRef, useCallback, useRef, useState } from 'react' import { X } from 'react-feather' +import { useTranslation } from 'react-i18next' import { useSendContext } from 'state/send/SendContext' import { RecipientData } from 'state/send/hooks' import { ClickableStyle, ThemedText } from 'theme/components' @@ -18,7 +19,6 @@ import { capitalize } from 'tsafe' import { Text } from 'ui/src' import { Unitag } from 'ui/src/components/icons/Unitag' import { useUnitagByAddress } from 'uniswap/src/features/unitags/hooks' -import { Plural, Trans, t, useTranslation } from 'uniswap/src/i18n' import { shortenAddress } from 'utilities/src/addresses' const StyledConfirmedRecipientRow = styled(Row)` @@ -121,6 +121,7 @@ const AutocompleteRow = ({ numberOfTransfers: number selectRecipient: (recipient: RecipientData) => void }) => { + const { t } = useTranslation() const account = useAccount() const { unitag } = useUnitagByAddress(address) const { ENSName } = useENSName(address) @@ -164,8 +165,7 @@ const AutocompleteRow = ({ {account.isConnected && ( - {numberOfTransfers}{' '} - + {numberOfTransfers} {t('common.transfer', { count: numberOfTransfers })} )} @@ -180,6 +180,7 @@ interface AutocompleteFlyoutProps { const AutocompleteFlyout = forwardRef((props: AutocompleteFlyoutProps, ref: ForwardedRef) => { const { transfers, validatedRecipientData, selectRecipient } = props + const { t } = useTranslation() if (validatedRecipientData) { return ( @@ -200,9 +201,7 @@ const AutocompleteFlyout = forwardRef((props: AutocompleteFlyoutProps, ref: Forw return ( - - - + {t('sendRecipientForm.recentAddresses.label')} {Object.keys(transfers) .slice(0, 3) .map((address) => ( diff --git a/apps/web/src/pages/Swap/Send/SendReviewModal.tsx b/apps/web/src/pages/Swap/Send/SendReviewModal.tsx index 54e16bd47a4..7a5562b9bf6 100644 --- a/apps/web/src/pages/Swap/Send/SendReviewModal.tsx +++ b/apps/web/src/pages/Swap/Send/SendReviewModal.tsx @@ -8,6 +8,7 @@ import Column, { ColumnCenter } from 'components/deprecated/Column' import Row from 'components/deprecated/Row' import styled from 'lib/styled-components' import { ReactNode } from 'react' +import { Trans, useTranslation } from 'react-i18next' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { useSendContext } from 'state/send/SendContext' import { Separator, ThemedText } from 'theme/components' @@ -18,7 +19,6 @@ import { UniverseChainId } from 'uniswap/src/features/chains/types' import Trace from 'uniswap/src/features/telemetry/Trace' import { ModalName } from 'uniswap/src/features/telemetry/constants' import { useUSDCValue } from 'uniswap/src/features/transactions/swap/hooks/useUSDCPrice' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { shortenAddress } from 'utilities/src/addresses' import { NumberType, useFormatter } from 'utils/formatNumbers' diff --git a/apps/web/src/pages/Swap/Send/SmartContractSpeedBump.tsx b/apps/web/src/pages/Swap/Send/SmartContractSpeedBump.tsx index 2f2edcda4ca..c8cc616fbe6 100644 --- a/apps/web/src/pages/Swap/Send/SmartContractSpeedBump.tsx +++ b/apps/web/src/pages/Swap/Send/SmartContractSpeedBump.tsx @@ -1,7 +1,7 @@ import { Dialog } from 'components/Dialog/Dialog' import AlertTriangleFilled from 'components/Icons/AlertTriangleFilled' import styled from 'lib/styled-components' -import { Trans } from 'uniswap/src/i18n' +import { Trans } from 'react-i18next' const StyledAlertIcon = styled(AlertTriangleFilled)` path { diff --git a/apps/web/src/pages/Swap/Send/__snapshots__/SendCurrencyInputForm.test.tsx.snap b/apps/web/src/pages/Swap/Send/__snapshots__/SendCurrencyInputForm.test.tsx.snap index d1c14b08bf9..b6c64736d44 100644 --- a/apps/web/src/pages/Swap/Send/__snapshots__/SendCurrencyInputForm.test.tsx.snap +++ b/apps/web/src/pages/Swap/Send/__snapshots__/SendCurrencyInputForm.test.tsx.snap @@ -1,39 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` -.c22 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c22 img { - width: 17px; - height: 36px; - object-fit: cover; -} - -.c22 img:first-child { - border-radius: 18px 0 0 18px; - object-position: 0 0; -} - -.c22 img:last-child { - border-radius: 0 18px 18px 0; - object-position: 100% 0; -} - -.c23 { - width: 18px; - height: 36px; - border-radius: 50%; -} - .c21 { display: -webkit-box; display: -webkit-flex; @@ -69,7 +36,7 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` letter-spacing: -0.01em; } -.c24 { +.c22 { color: #222222; -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; @@ -202,7 +169,7 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` gap: 12px; } -.c25 { +.c23 { width: 100%; display: -webkit-box; display: -webkit-flex; @@ -348,7 +315,7 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` left: 16px; } -.c26 { +.c24 { -webkit-text-decoration: none; text-decoration: none; cursor: pointer; @@ -358,15 +325,15 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` height: 8px; } -.c26:hover { +.c24:hover { opacity: 0.6; } -.c26:active { +.c24:active { opacity: 0.4; } -.c26 path { +.c24 path { stroke: #CECECE; stroke-width: 2px; } @@ -504,19 +471,56 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
@@ -528,12 +532,12 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` class="c0" >
DAI
@@ -541,7 +545,7 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = `
dropdown.svg @@ -564,39 +568,6 @@ exports[`SendCurrencyInputform renders input in fiat correctly 1`] = ` `; exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` -.c21 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c21 img { - width: 17px; - height: 36px; - object-fit: cover; -} - -.c21 img:first-child { - border-radius: 18px 0 0 18px; - object-position: 0 0; -} - -.c21 img:last-child { - border-radius: 0 18px 18px 0; - object-position: 100% 0; -} - -.c22 { - width: 18px; - height: 36px; - border-radius: 50%; -} - .c20 { display: -webkit-box; display: -webkit-flex; @@ -632,7 +603,7 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` letter-spacing: -0.01em; } -.c23 { +.c21 { color: #222222; -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; @@ -765,7 +736,7 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` gap: 12px; } -.c24 { +.c22 { width: 100%; display: -webkit-box; display: -webkit-flex; @@ -900,7 +871,7 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` left: 16px; } -.c25 { +.c23 { -webkit-text-decoration: none; text-decoration: none; cursor: pointer; @@ -910,15 +881,15 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` height: 8px; } -.c25:hover { +.c23:hover { opacity: 0.6; } -.c25:active { +.c23:active { opacity: 0.4; } -.c25 path { +.c23 path { stroke: #CECECE; stroke-width: 2px; } @@ -1051,19 +1022,56 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
@@ -1075,12 +1083,12 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` class="c0" >
DAI
@@ -1088,7 +1096,7 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = `
dropdown.svg @@ -1111,39 +1119,6 @@ exports[`SendCurrencyInputform renders input in token amount correctly 1`] = ` `; exports[`SendCurrencyInputform should render placeholder values 1`] = ` -.c22 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c22 img { - width: 17px; - height: 36px; - object-fit: cover; -} - -.c22 img:first-child { - border-radius: 18px 0 0 18px; - object-position: 0 0; -} - -.c22 img:last-child { - border-radius: 0 18px 18px 0; - object-position: 100% 0; -} - -.c23 { - width: 18px; - height: 36px; - border-radius: 50%; -} - .c21 { display: -webkit-box; display: -webkit-flex; @@ -1179,7 +1154,7 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = ` letter-spacing: -0.01em; } -.c24 { +.c22 { color: #222222; -webkit-letter-spacing: -0.01em; -moz-letter-spacing: -0.01em; @@ -1312,7 +1287,7 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = ` gap: 12px; } -.c25 { +.c23 { width: 100%; display: -webkit-box; display: -webkit-flex; @@ -1459,7 +1434,7 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = ` left: 16px; } -.c26 { +.c24 { -webkit-text-decoration: none; text-decoration: none; cursor: pointer; @@ -1469,15 +1444,15 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = ` height: 8px; } -.c26:hover { +.c24:hover { opacity: 0.6; } -.c26:active { +.c24:active { opacity: 0.4; } -.c26 path { +.c24 path { stroke: #CECECE; stroke-width: 2px; } @@ -1613,19 +1588,56 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
@@ -1637,12 +1649,12 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = ` class="c0" >
DAI
@@ -1650,7 +1662,7 @@ exports[`SendCurrencyInputform should render placeholder values 1`] = `
dropdown.svg diff --git a/apps/web/src/pages/Swap/Send/__snapshots__/SendReviewModal.test.tsx.snap b/apps/web/src/pages/Swap/Send/__snapshots__/SendReviewModal.test.tsx.snap index 41b262fb595..886b691f387 100644 --- a/apps/web/src/pages/Swap/Send/__snapshots__/SendReviewModal.test.tsx.snap +++ b/apps/web/src/pages/Swap/Send/__snapshots__/SendReviewModal.test.tsx.snap @@ -1,45 +1,22 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` -.c19 { +.c17 { height: 36px; width: 36px; } -.c19 path { +.c17 path { stroke: #CECECE; background: #7D7D7D; fill: #CECECE; } -.c20 { +.c18 { -webkit-animation: 2s fvtopB linear infinite; animation: 2s fvtopB linear infinite; } -.c17 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c17 img { - width: 36px; - height: 36px; - border-radius: 50%; -} - -.c18 { - width: 18px; - height: 36px; - border-radius: 50%; -} - .c16 { display: -webkit-box; display: -webkit-flex; @@ -60,14 +37,14 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` min-width: 0; } -.c22 { +.c20 { box-sizing: border-box; margin: 0; min-width: 0; width: 100%; } -.c23 { +.c21 { box-sizing: border-box; margin: 0; min-width: 0; @@ -76,7 +53,7 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` width: min-content; } -.c25 { +.c23 { box-sizing: border-box; margin: 0; min-width: 0; @@ -152,13 +129,13 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` opacity: 0.4; } -.c21 { +.c19 { width: 100%; height: 1px; background-color: #22222212; } -.c26 { +.c24 { padding: 16px; width: 100%; line-height: 24px; @@ -197,25 +174,25 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` transform: perspective(1px) translateZ(0); } -.c26:disabled { +.c24:disabled { opacity: 50%; cursor: auto; pointer-events: none; } -.c26 > * { +.c24 > * { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } -.c26 > a { +.c24 > a { -webkit-text-decoration: none; text-decoration: none; } -.c27 { +.c25 { background-color: #FC72FF; font-size: 20px; font-weight: 535; @@ -223,21 +200,21 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` color: #FFFFFF; } -.c27:focus { +.c25:focus { box-shadow: 0 0 0 1pt #fb58ff; background-color: #fb58ff; } -.c27:hover { +.c25:hover { background-color: #fb58ff; } -.c27:active { +.c25:active { box-shadow: 0 0 0 1pt #fb3fff; background-color: #fb3fff; } -.c27:disabled { +.c25:disabled { background-color: #22222212; color: #7D7D7D; cursor: auto; @@ -281,7 +258,7 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` justify-content: space-between; } -.c24 { +.c22 { width: -webkit-min-content; width: -moz-min-content; width: min-content; @@ -518,15 +495,23 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+ +
@@ -566,7 +551,7 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` style="height: 36px;" >
@@ -627,45 +612,22 @@ exports[`SendCurrencyInputform should render input in fiat correctly 1`] = ` `; exports[`SendCurrencyInputform should render input in token amount correctly 1`] = ` -.c19 { +.c17 { height: 36px; width: 36px; } -.c19 path { +.c17 path { stroke: #CECECE; background: #7D7D7D; fill: #CECECE; } -.c20 { +.c18 { -webkit-animation: 2s fvtopB linear infinite; animation: 2s fvtopB linear infinite; } -.c17 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - gap: 2px; - position: relative; - top: 0; - left: 0; -} - -.c17 img { - width: 36px; - height: 36px; - border-radius: 50%; -} - -.c18 { - width: 18px; - height: 36px; - border-radius: 50%; -} - .c16 { display: -webkit-box; display: -webkit-flex; @@ -686,14 +648,14 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] min-width: 0; } -.c22 { +.c20 { box-sizing: border-box; margin: 0; min-width: 0; width: 100%; } -.c23 { +.c21 { box-sizing: border-box; margin: 0; min-width: 0; @@ -702,7 +664,7 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] width: min-content; } -.c25 { +.c23 { box-sizing: border-box; margin: 0; min-width: 0; @@ -778,13 +740,13 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] opacity: 0.4; } -.c21 { +.c19 { width: 100%; height: 1px; background-color: #22222212; } -.c26 { +.c24 { padding: 16px; width: 100%; line-height: 24px; @@ -823,25 +785,25 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] transform: perspective(1px) translateZ(0); } -.c26:disabled { +.c24:disabled { opacity: 50%; cursor: auto; pointer-events: none; } -.c26 > * { +.c24 > * { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } -.c26 > a { +.c24 > a { -webkit-text-decoration: none; text-decoration: none; } -.c27 { +.c25 { background-color: #FC72FF; font-size: 20px; font-weight: 535; @@ -849,21 +811,21 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] color: #FFFFFF; } -.c27:focus { +.c25:focus { box-shadow: 0 0 0 1pt #fb58ff; background-color: #fb58ff; } -.c27:hover { +.c25:hover { background-color: #fb58ff; } -.c27:active { +.c25:active { box-shadow: 0 0 0 1pt #fb3fff; background-color: #fb3fff; } -.c27:disabled { +.c25:disabled { background-color: #22222212; color: #7D7D7D; cursor: auto; @@ -907,7 +869,7 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] justify-content: space-between; } -.c24 { +.c22 { width: -webkit-min-content; width: -moz-min-content; width: min-content; @@ -1144,15 +1106,23 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] class="_display-flex _alignItems-stretch _flexBasis-auto _boxSizing-border-box _minHeight-0px _minWidth-0px _flexShrink-0 _flexDirection-column _position-relative" >
- - +
+ +
@@ -1192,7 +1162,7 @@ exports[`SendCurrencyInputform should render input in token amount correctly 1`] style="height: 36px;" >
diff --git a/apps/web/src/pages/Swap/SwapForm.tsx b/apps/web/src/pages/Swap/SwapForm.tsx index 4a3d396b9b2..a13b5db778e 100644 --- a/apps/web/src/pages/Swap/SwapForm.tsx +++ b/apps/web/src/pages/Swap/SwapForm.tsx @@ -23,7 +23,7 @@ import confirmPriceImpactWithoutFee from 'components/swap/confirmPriceImpactWith import { ArrowContainer, ArrowWrapper, OutputSwapSection, SwapSection } from 'components/swap/styled' import { useCurrencyInfo } from 'hooks/Tokens' import { useAccount } from 'hooks/useAccount' -import { useIsLandingPage } from 'hooks/useIsLandingPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import { useIsSwapUnsupported } from 'hooks/useIsSwapUnsupported' import { useMaxAmountIn } from 'hooks/useMaxAmountIn' import usePermit2Allowance, { AllowanceState } from 'hooks/usePermit2Allowance' @@ -39,6 +39,7 @@ import { getIsReviewableQuote } from 'pages/Swap' import { OutputTaxTooltipBody } from 'pages/Swap/TaxTooltipBody' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { ArrowDown } from 'react-feather' +import { Trans } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { InterfaceTrade, RouterPreference, TradeState } from 'state/routing/types' @@ -55,7 +56,6 @@ import Trace from 'uniswap/src/features/telemetry/Trace' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { maybeLogFirstSwapAction } from 'uniswap/src/features/transactions/swap/utils/maybeLogFirstSwapAction' import { WrapType } from 'uniswap/src/features/transactions/types/wrap' -import { Trans } from 'uniswap/src/i18n' import { CurrencyField } from 'uniswap/src/types/currency' import { logger } from 'utilities/src/logger/logger' import { useTrace } from 'utilities/src/telemetry/trace/TraceContext' @@ -231,7 +231,7 @@ export function SwapForm({ const navigate = useNavigate() const swapIsUnsupported = useIsSwapUnsupported(currencies[CurrencyField.INPUT], currencies[CurrencyField.OUTPUT]) - const isLandingPage = useIsLandingPage() + const isLandingPage = useIsPage(PageType.LANDING) const navigateToSwapWithParams = useCallback(() => { const serializedSwapState = serializeSwapStateToURLParameters({ diff --git a/apps/web/src/pages/Swap/TaxTooltipBody.tsx b/apps/web/src/pages/Swap/TaxTooltipBody.tsx index 0507562781f..0e02337da7b 100644 --- a/apps/web/src/pages/Swap/TaxTooltipBody.tsx +++ b/apps/web/src/pages/Swap/TaxTooltipBody.tsx @@ -1,6 +1,6 @@ import styled from 'lib/styled-components' +import { Trans } from 'react-i18next' import { ThemedText } from 'theme/components' -import { Trans } from 'uniswap/src/i18n' const Divider = styled.div` width: 100%; diff --git a/apps/web/src/pages/Swap/index.tsx b/apps/web/src/pages/Swap/index.tsx index 3ada862e760..71970681320 100644 --- a/apps/web/src/pages/Swap/index.tsx +++ b/apps/web/src/pages/Swap/index.tsx @@ -7,12 +7,13 @@ import SwapHeader, { PathnameToTab } from 'components/swap/SwapHeader' import { PageWrapper, SwapWrapper } from 'components/swap/styled' import { PrefetchBalancesWrapper } from 'graphql/data/apollo/AdaptiveTokenBalancesProvider' import { useScreenSize } from 'hooks/screenSize/useScreenSize' -import { useIsExplorePage } from 'hooks/useIsExplorePage' +import { PageType, useIsPage } from 'hooks/useIsPage' import { BuyForm } from 'pages/Swap/Buy/BuyForm' import { LimitFormWrapper } from 'pages/Swap/Limit/LimitForm' import { SendForm } from 'pages/Swap/Send/SendForm' import { SwapForm } from 'pages/Swap/SwapForm' import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { useLocation, useNavigate } from 'react-router-dom' import { MultichainContextProvider } from 'state/multichain/MultichainContext' import { InterfaceTrade, TradeState } from 'state/routing/types' @@ -44,10 +45,10 @@ import { Deadline } from 'uniswap/src/features/transactions/swap/settings/config import { ProtocolPreference } from 'uniswap/src/features/transactions/swap/settings/configs/ProtocolPreference' import { Slippage } from 'uniswap/src/features/transactions/swap/settings/configs/Slippage' import { currencyToAsset } from 'uniswap/src/features/transactions/swap/utils/asset' -import { useTranslation } from 'uniswap/src/i18n' import { CurrencyField } from 'uniswap/src/types/currency' import { SwapTab } from 'uniswap/src/types/screens/interface' import { isTestEnv } from 'utilities/src/environment/env' +import { isMobileWeb } from 'utilities/src/platform' import noop from 'utilities/src/react/noop' export function getIsReviewableQuote( @@ -150,12 +151,12 @@ export function Swap({ }) { const isDark = useIsDarkMode() const screenSize = useScreenSize() - const isExplore = useIsExplorePage() + const isExplorePage = useIsPage(PageType.EXPLORE) const { value: universalSwapFlow, isLoading } = useFeatureFlagWithLoading(FeatureFlags.UniversalSwap) const { isTestnetModeEnabled } = useEnabledChains() - const isSharedSwapDisabled = isTestnetModeEnabled && isExplore + const isSharedSwapDisabled = isTestnetModeEnabled && isExplorePage const input = currencyToAsset(initialInputCurrency) const output = currencyToAsset(initialOutputCurrency) @@ -323,6 +324,7 @@ function UniversalSwapFlow({ options={SWAP_TAB_OPTIONS} selectedOption={currentTab} onSelectOption={onTabClick} + gap={isMobileWeb ? '$spacing8' : undefined} /> )} diff --git a/apps/web/src/pages/TokenDetails/index.tsx b/apps/web/src/pages/TokenDetails/index.tsx index 26c1ace8a17..fa6f979053c 100644 --- a/apps/web/src/pages/TokenDetails/index.tsx +++ b/apps/web/src/pages/TokenDetails/index.tsx @@ -15,6 +15,7 @@ import { getTokenPageDescription, getTokenPageTitle } from 'pages/TokenDetails/u import { useDynamicMetatags } from 'pages/metatags' import { useMemo } from 'react' import { Helmet } from 'react-helmet-async/lib/index' +import { useTranslation } from 'react-i18next' import { useLocation, useParams } from 'react-router-dom' import { formatTokenMetatagTitleName } from 'shared-cloud/metatags' import { ThemeProvider } from 'theme' @@ -158,6 +159,7 @@ function useCreateTDPContext(): PendingTDPContext | LoadedTDPContext { } export default function TokenDetailsPage() { + const { t } = useTranslation() const account = useAccount() const pageChainId = account.chainId ?? UniverseChainId.Mainnet const contextValue = useCreateTDPContext() @@ -182,7 +184,7 @@ export default function TokenDetailsPage() { return ( - {getTokenPageTitle(currency, currencyChainId)} + {getTokenPageTitle(t, currency, currencyChainId)} {metatags.map((tag, index) => ( ))} diff --git a/apps/web/src/pages/TokenDetails/util.test.ts b/apps/web/src/pages/TokenDetails/util.test.ts index 45b0a025c35..405f05a26fa 100644 --- a/apps/web/src/pages/TokenDetails/util.test.ts +++ b/apps/web/src/pages/TokenDetails/util.test.ts @@ -1,26 +1,27 @@ import { Token } from '@uniswap/sdk-core' import { ZERO_ADDRESS } from 'constants/misc' import { getTokenPageTitle } from 'pages/TokenDetails/utils' +import i18n from 'uniswap/src/i18n' describe('pages/TokenDetails/util', () => { describe('getTokenPageTitle', () => { it('should return the correct title when tokenName and tokenSymbol are undefined', () => { - const result = getTokenPageTitle(new Token(1, ZERO_ADDRESS, 18)) + const result = getTokenPageTitle(i18n.t, new Token(1, ZERO_ADDRESS, 18)) expect(result).toBe('Buy and sell on Uniswap') }) it('should return the correct title when only tokenName is defined', () => { - const result = getTokenPageTitle(new Token(1, ZERO_ADDRESS, 18, undefined, 'Baby Doge Token')) + const result = getTokenPageTitle(i18n.t, new Token(1, ZERO_ADDRESS, 18, undefined, 'Baby Doge Token')) expect(result).toBe('Baby Doge Token: Buy and sell on Uniswap') }) it('should return the correct title when only tokenSymbol is defined', () => { - const result = getTokenPageTitle(new Token(1, ZERO_ADDRESS, 18, 'BDT', undefined)) + const result = getTokenPageTitle(i18n.t, new Token(1, ZERO_ADDRESS, 18, 'BDT', undefined)) expect(result).toBe('BDT: Buy and sell on Uniswap') }) it('should return the correct title when tokenName and tokenSymbol are defined', () => { - const result = getTokenPageTitle(new Token(1, ZERO_ADDRESS, 18, 'BDT', 'Baby Doge Token')) + const result = getTokenPageTitle(i18n.t, new Token(1, ZERO_ADDRESS, 18, 'BDT', 'Baby Doge Token')) expect(result).toBe('Baby Doge Token (BDT): Buy and sell on Uniswap') }) }) diff --git a/apps/web/src/pages/TokenDetails/utils.ts b/apps/web/src/pages/TokenDetails/utils.ts index b4c39513710..857f8fffdf2 100644 --- a/apps/web/src/pages/TokenDetails/utils.ts +++ b/apps/web/src/pages/TokenDetails/utils.ts @@ -1,9 +1,9 @@ import { Currency } from '@uniswap/sdk-core' +import { TFunction } from 'i18next' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { getChainLabel } from 'uniswap/src/features/chains/utils' -import { t } from 'uniswap/src/i18n' -export const getTokenPageTitle = (currency?: Currency, chainId?: UniverseChainId) => { +export function getTokenPageTitle(t: TFunction, currency?: Currency, chainId?: UniverseChainId) { const tokenName = currency?.name const tokenSymbol = currency?.symbol const baseTitle = t('common.buyAndSell') diff --git a/apps/web/src/pages/getExploreTitle.ts b/apps/web/src/pages/getExploreTitle.ts index a5dc9a35896..328d4a9b731 100644 --- a/apps/web/src/pages/getExploreTitle.ts +++ b/apps/web/src/pages/getExploreTitle.ts @@ -1,6 +1,6 @@ import { ExploreTab } from 'pages/Explore' import { capitalize } from 'tsafe/capitalize' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' import { isChainUrlParam } from 'utils/chainParams' @@ -14,15 +14,15 @@ export const getExploreTitle = (path?: string) => { switch (tab) { case ExploreTab.Pools: - return t(`web.explore.title.pools`, { + return i18n.t(`web.explore.title.pools`, { network, }) case ExploreTab.Tokens: - return t(`web.explore.title.tokens`, { + return i18n.t(`web.explore.title.tokens`, { network, }) case ExploreTab.Transactions: - return t(`web.explore.title.transactions`, { + return i18n.t(`web.explore.title.transactions`, { network, }) default: @@ -40,7 +40,7 @@ export const getExploreDescription = (path?: string) => { const parts = path?.split('/').filter((part) => part !== '') const network: string = parts?.find(isChainUrlParam) ?? 'ethereum' - return t(`web.explore.description`, { + return i18n.t(`web.explore.description`, { network: capitalize(network), }) } diff --git a/apps/web/src/pages/getPositionPageTitle.ts b/apps/web/src/pages/getPositionPageTitle.ts index e3e7fc7dc35..a3bf43fa879 100644 --- a/apps/web/src/pages/getPositionPageTitle.ts +++ b/apps/web/src/pages/getPositionPageTitle.ts @@ -1,11 +1,11 @@ -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' export const getPositionPageTitle = (path?: string) => { const parts = path?.split('/').filter((part) => part !== '') const isV2 = parts?.find((part) => part === 'v2') const isV3 = parts?.find((part) => part === 'v3') - return t(`liquidityPool.positions.page.version.title`, { + return i18n.t(`liquidityPool.positions.page.version.title`, { version: isV2 ? ' (v2)' : isV3 ? ' (v3)' : '', }) } @@ -15,7 +15,7 @@ export const getPositionPageDescription = (path?: string) => { const isV2 = parts?.find((part) => part === 'v2') const isV3 = parts?.find((part) => part === 'v3') - return t(`liquidityPool.positions.page.version.description`, { + return i18n.t(`liquidityPool.positions.page.version.description`, { version: isV2 ? 'v2' : isV3 ? 'v3' : 'v4', }) } @@ -25,7 +25,7 @@ export const getAddLiquidityPageTitle = (path?: string) => { const isV2 = parts?.find((part) => part === 'v2') const isV3 = parts?.find((part) => part === 'v3') - return t('liquidityPool.page.title', { + return i18n.t('liquidityPool.page.title', { version: isV2 ? ' (v2)' : isV3 ? ' (v3)' : '', }) } diff --git a/apps/web/src/pages/metatags.ts b/apps/web/src/pages/metatags.ts index 89c9be4c55c..8ce9a8410ab 100644 --- a/apps/web/src/pages/metatags.ts +++ b/apps/web/src/pages/metatags.ts @@ -1,11 +1,11 @@ import { useEffect, useState } from 'react' import { useLocation } from 'react-router-dom' import { MetaTagInjectorInput } from 'shared-cloud/metatags' -import { t } from 'uniswap/src/i18n' +import i18n from 'uniswap/src/i18n' const DEFAULT_METATAGS: MetaTagInjectorInput = { - title: t('interface.metatags.title'), - description: t`interface.metatags.description`, + title: i18n.t('interface.metatags.title'), + description: i18n.t('interface.metatags.description'), image: `https://app.uniswap.com/images/1200x630_Rich_Link_Preview_Image.png`, url: 'https://app.uniswap.com', } diff --git a/apps/web/src/state/burn/hooks.tsx b/apps/web/src/state/burn/hooks.tsx index a72e01cb648..9f939188c5d 100644 --- a/apps/web/src/state/burn/hooks.tsx +++ b/apps/web/src/state/burn/hooks.tsx @@ -8,10 +8,10 @@ import JSBI from 'jsbi' import useCurrencyBalance from 'lib/hooks/useCurrencyBalance' import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount' import { ReactNode, useCallback } from 'react' +import { Trans } from 'react-i18next' import { Field, typeInput } from 'state/burn/actions' import { useAppDispatch, useAppSelector } from 'state/hooks' import { InterfaceState } from 'state/webReducer' -import { Trans } from 'uniswap/src/i18n' export function useBurnState(): InterfaceState['burn'] { return useAppSelector((state) => state.burn) diff --git a/apps/web/src/state/burn/v3/hooks.tsx b/apps/web/src/state/burn/v3/hooks.tsx index 981381d5039..ec761e43d41 100644 --- a/apps/web/src/state/burn/v3/hooks.tsx +++ b/apps/web/src/state/burn/v3/hooks.tsx @@ -6,11 +6,11 @@ import { useAccount } from 'hooks/useAccount' import { usePool } from 'hooks/usePools' import { useV3PositionFees } from 'hooks/useV3PositionFees' import { ReactNode, useCallback, useMemo } from 'react' +import { Trans } from 'react-i18next' import { selectPercent } from 'state/burn/v3/actions' import { useAppDispatch, useAppSelector } from 'state/hooks' import { InterfaceState } from 'state/webReducer' import { PositionDetails } from 'types/position' -import { Trans } from 'uniswap/src/i18n' import { unwrappedToken } from 'utils/unwrappedToken' export function useBurnV3State(): InterfaceState['burnV3'] { diff --git a/apps/web/src/state/migrations.ts b/apps/web/src/state/migrations.ts index 8782e23128b..1984bfdedf0 100644 --- a/apps/web/src/state/migrations.ts +++ b/apps/web/src/state/migrations.ts @@ -16,6 +16,7 @@ import { migration19 } from 'state/migrations/19' import { migration2 } from 'state/migrations/2' import { migration20 } from 'state/migrations/20' import { migration21 } from 'state/migrations/21' +import { migration22 } from 'state/migrations/22' import { migration3 } from 'state/migrations/3' import { migration4 } from 'state/migrations/4' import { migration5 } from 'state/migrations/5' @@ -57,9 +58,10 @@ export const migrations: MigrationManifest = { 19: migration19, 20: migration20, 21: migration21, + 22: migration22, } as const -export const PERSIST_VERSION = 21 +export const PERSIST_VERSION = 22 export const INDEXED_DB_REDUX_TABLE_NAME = 'redux' diff --git a/apps/web/src/state/migrations/22.test.ts b/apps/web/src/state/migrations/22.test.ts new file mode 100644 index 00000000000..ab41940ab88 --- /dev/null +++ b/apps/web/src/state/migrations/22.test.ts @@ -0,0 +1,115 @@ +import { createMigrate } from 'redux-persist' +import { migration1 } from 'state/migrations/1' +import { migration10 } from 'state/migrations/10' +import { migration11 } from 'state/migrations/11' +import { migration12 } from 'state/migrations/12' +import { migration13 } from 'state/migrations/13' +import { migration14 } from 'state/migrations/14' +import { migration15 } from 'state/migrations/15' +import { migration16 } from 'state/migrations/16' +import { migration17 } from 'state/migrations/17' +import { migration18 } from 'state/migrations/18' +import { migration19 } from 'state/migrations/19' +import { migration2 } from 'state/migrations/2' +import { migration20 } from 'state/migrations/20' +import { migration21 } from 'state/migrations/21' +import { migration22 } from 'state/migrations/22' +import { migration3 } from 'state/migrations/3' +import { migration4 } from 'state/migrations/4' +import { migration5 } from 'state/migrations/5' +import { migration6 } from 'state/migrations/6' +import { migration7 } from 'state/migrations/7' +import { migration8 } from 'state/migrations/8' +import { migration9 } from 'state/migrations/9' +import { FiatCurrency } from 'uniswap/src/features/fiatCurrency/constants' +import { Language } from 'uniswap/src/features/language/constants' +import * as languageUtils from 'uniswap/src/features/language/utils' + +jest.mock('utilities/src/platform', () => ({ + isInterface: true, +})) + +jest.mock('uniswap/src/features/language/utils', () => ({ + getCurrentLanguageFromNavigator: jest.fn().mockReturnValue('en'), +})) + +const mockGetCurrentLanguageFromNavigator = jest.mocked(languageUtils.getCurrentLanguageFromNavigator) + +jest.mock('utilities/src/platform', () => ({ + isInterface: true, +})) + +jest.mock('uniswap/src/features/language/hooks', () => ({ + navigatorLocale: jest.fn().mockReturnValue('en-US'), +})) + +const previousState = { + _persist: { + version: 21, + rehydrated: true, + }, + userSettings: { + currentCurrency: FiatCurrency.UnitedStatesDollar, + currentLanguage: Language.English, + hideSmallBalances: true, + hideSpamTokens: true, + }, +} + +const migrator = createMigrate( + { + 1: migration1, + 2: migration2, + 3: migration3, + 4: migration4, + 5: migration5, + 6: migration6, + 7: migration7, + 8: migration8, + 9: migration9, + 10: migration10, + 11: migration11, + 12: migration12, + 13: migration13, + 14: migration14, + 15: migration15, + 16: migration16, + 17: migration17, + 18: migration18, + 19: migration19, + 20: migration20, + 21: migration21, + 22: migration22, + }, + { debug: false }, +) + +describe('migration to v22', () => { + beforeEach(() => { + mockGetCurrentLanguageFromNavigator.mockClear() + mockGetCurrentLanguageFromNavigator.mockReturnValue(Language.English) + }) + + it('should preserve English language settings if user locale and current language are both English', async () => { + const result: any = await migrator(previousState, 22) + expect(result.userSettings.currentLanguage).toEqual(Language.English) + }) + + it('should preserve non-English language settings if user language is not set to English', async () => { + const japaneseState = { + ...previousState, + userSettings: { currentLanguage: Language.Japanese }, + } + const result: any = await migrator(japaneseState, 22) + expect(result.userSettings.currentLanguage).toEqual(Language.Japanese) + }) + + it('should update current language if state is set to English but navigator language is not English', async () => { + mockGetCurrentLanguageFromNavigator.mockReturnValue(Language.French) + + const result: any = await migrator(previousState, 22) + + expect(mockGetCurrentLanguageFromNavigator).toHaveBeenCalled() + expect(result.userSettings.currentLanguage).toEqual(Language.French) + }) +}) diff --git a/apps/web/src/state/migrations/22.ts b/apps/web/src/state/migrations/22.ts new file mode 100644 index 00000000000..61cb2195e49 --- /dev/null +++ b/apps/web/src/state/migrations/22.ts @@ -0,0 +1,28 @@ +import { PersistState } from 'redux-persist' +import { Language } from 'uniswap/src/features/language/constants' +import { getCurrentLanguageFromNavigator } from 'uniswap/src/features/language/utils' +import { isInterface } from 'utilities/src/platform' + +type PersistAppStateV22 = { + _persist: PersistState + userSettings?: { + currentLanguage: Language + } +} + +/** + * Migration 22: Unset currentLanguage if it is set to English ('en'), and set currentLanguage based on navigator language - (Interface only) + */ +export const migration22 = (state: PersistAppStateV22 | undefined) => { + if (!state?.userSettings) { + return undefined + } + + const newState: any = { ...state } + + if (newState.userSettings.currentLanguage === Language.English && isInterface) { + newState.userSettings.currentLanguage = getCurrentLanguageFromNavigator() + } + + return { ...newState, _persist: { ...state._persist, version: 22 } } +} diff --git a/apps/web/src/state/mint/hooks.tsx b/apps/web/src/state/mint/hooks.tsx index 941b516031a..cd96c64629e 100644 --- a/apps/web/src/state/mint/hooks.tsx +++ b/apps/web/src/state/mint/hooks.tsx @@ -7,11 +7,11 @@ import { PairState, useV2Pair } from 'hooks/useV2Pairs' import JSBI from 'jsbi' import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount' import { ReactNode, useCallback, useMemo } from 'react' +import { Trans } from 'react-i18next' import { useCurrencyBalances } from 'state/connection/hooks' import { useAppDispatch, useAppSelector } from 'state/hooks' import { Field, typeInput } from 'state/mint/actions' import { InterfaceState } from 'state/webReducer' -import { Trans } from 'uniswap/src/i18n' import { logger } from 'utilities/src/logger/logger' const ZERO = JSBI.BigInt(0) diff --git a/apps/web/src/state/mint/v3/hooks.tsx b/apps/web/src/state/mint/v3/hooks.tsx index 8de24b32227..c4d80ac717a 100644 --- a/apps/web/src/state/mint/v3/hooks.tsx +++ b/apps/web/src/state/mint/v3/hooks.tsx @@ -20,6 +20,7 @@ import JSBI from 'jsbi' import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount' import { FeeData } from 'pages/Pool/Positions/create/types' import { ReactNode, useCallback, useMemo } from 'react' +import { Trans } from 'react-i18next' import { useSearchParams } from 'react-router-dom' import { useCurrencyBalances } from 'state/connection/hooks' import { useAppDispatch, useAppSelector } from 'state/hooks' @@ -34,7 +35,6 @@ import { } from 'state/mint/v3/actions' import { tryParseTick } from 'state/mint/v3/utils' import { InterfaceState } from 'state/webReducer' -import { Trans } from 'uniswap/src/i18n' import { getTickToPrice } from 'utils/getTickToPrice' export function useV3MintState(): InterfaceState['mintV3'] { diff --git a/apps/web/src/state/reducerTypeTest.ts b/apps/web/src/state/reducerTypeTest.ts index 41d17ad816e..316796dfe57 100644 --- a/apps/web/src/state/reducerTypeTest.ts +++ b/apps/web/src/state/reducerTypeTest.ts @@ -30,6 +30,7 @@ import { UniverseChainId } from 'uniswap/src/features/chains/types' import { FavoritesState } from 'uniswap/src/features/favorites/slice' import { getFiatOnRampAggregatorApi } from 'uniswap/src/features/fiatOnRamp/api' import { NotificationState } from 'uniswap/src/features/notifications/slice' +import { PortfolioState } from 'uniswap/src/features/portfolio/slice/slice' import { SearchHistoryState } from 'uniswap/src/features/search/searchHistorySlice' import { UserSettingsState } from 'uniswap/src/features/settings/slice' import { TimingState } from 'uniswap/src/features/timing/slice' @@ -87,6 +88,7 @@ type ExpectedAppState = CombinedState<{ readonly transactions: TransactionsState readonly transactionSettings: ReturnType readonly userSettings: UserSettingsState + readonly portfolio: PortfolioState }> assert>() diff --git a/apps/web/src/state/sagas/transactions/watcherSaga.ts b/apps/web/src/state/sagas/transactions/watcherSaga.ts index 9e3e9c6aa35..ded53e647fd 100644 --- a/apps/web/src/state/sagas/transactions/watcherSaga.ts +++ b/apps/web/src/state/sagas/transactions/watcherSaga.ts @@ -5,7 +5,7 @@ import { createUniverseTransaction } from 'state/sagas/utils/transaction' import { PendingTransactionDetails } from 'state/transactions/types' import { call } from 'typed-redux-saga' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { refetchGQLQueries } from 'uniswap/src/features/transactions/refetchGQLQueriesSaga' +import { refetchGQLQueries } from 'uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesSaga' import { createSaga } from 'uniswap/src/utils/saga' diff --git a/apps/web/src/state/swap/hooks.tsx b/apps/web/src/state/swap/hooks.tsx index 24a6f79e825..73c681dd2f6 100644 --- a/apps/web/src/state/swap/hooks.tsx +++ b/apps/web/src/state/swap/hooks.tsx @@ -11,6 +11,7 @@ import useNativeCurrency from 'lib/hooks/useNativeCurrency' import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount' import { ParsedQs } from 'qs' import { ReactNode, useCallback, useEffect, useMemo } from 'react' +import { Trans } from 'react-i18next' import { useCurrencyBalance, useCurrencyBalances } from 'state/connection/hooks' import { useMultichainContext } from 'state/multichain/useMultichainContext' import { InterfaceTrade, RouterPreference, TradeState } from 'state/routing/types' @@ -24,7 +25,6 @@ import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledCh import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId' import { UniverseChainId, isUniverseChainId } from 'uniswap/src/features/chains/types' import { useTokenProjects } from 'uniswap/src/features/dataApi/tokenProjects' -import { Trans } from 'uniswap/src/i18n' import { CurrencyField } from 'uniswap/src/types/currency' import { areCurrencyIdsEqual, currencyId } from 'uniswap/src/utils/currencyId' import { isAddress } from 'utilities/src/addresses' @@ -407,7 +407,7 @@ export function useInitialCurrencyState(): { initialCurrencyLoading: boolean triggerConnect: boolean } { - const { chainId, setIsUserSelectedToken } = useMultichainContext() + const { setIsUserSelectedToken } = useMultichainContext() const { defaultChainId } = useEnabledChains() const { useParsedQueryString } = useUrlContext() @@ -416,7 +416,7 @@ export function useInitialCurrencyState(): { return queryParametersToCurrencyState(parsedQs) }, [parsedQs]) - const supportedChainId = useSupportedChainId(parsedCurrencyState.chainId ?? chainId) ?? UniverseChainId.Mainnet + const supportedChainId = useSupportedChainId(parsedCurrencyState.chainId ?? defaultChainId) ?? UniverseChainId.Mainnet const hasCurrencyQueryParams = parsedCurrencyState.inputCurrencyId || parsedCurrencyState.outputCurrencyId || parsedCurrencyState.chainId diff --git a/apps/web/src/test-utils/bundle-size-test.ts b/apps/web/src/test-utils/bundle-size-test.ts index 2da27fabf4e..83e8df96a08 100644 --- a/apps/web/src/test-utils/bundle-size-test.ts +++ b/apps/web/src/test-utils/bundle-size-test.ts @@ -32,9 +32,8 @@ const entryGzipSize = report.reduce( 0, ) -// somewhat arbitrary, based on current size (11/26/2024) -const limit = 2_380_000 - +// somewhat arbitrary, based on current size (1/3/2024) +const limit = 2_400_000 if (entryGzipSize > limit) { console.error(`Bundle size has grown too big! Entry JS size is ${entryGzipSize}, over the limit of ${limit}.`) process.exit(1) diff --git a/apps/web/src/theme/components/RadialGradientByChainUpdater.ts b/apps/web/src/theme/components/RadialGradientByChainUpdater.ts index 6fd4d369bab..1dacf70ed52 100644 --- a/apps/web/src/theme/components/RadialGradientByChainUpdater.ts +++ b/apps/web/src/theme/components/RadialGradientByChainUpdater.ts @@ -1,5 +1,5 @@ import { useAccount } from 'hooks/useAccount' -import { useIsNftPage } from 'hooks/useIsNftPage' +import { PageType, useIsPage } from 'hooks/useIsPage' import { useEffect } from 'react' import { darkTheme, lightTheme } from 'theme/colors' import { useDarkModeManager } from 'theme/components/ThemeToggle' @@ -37,7 +37,7 @@ function setDefaultBackground(backgroundRadialGradientElement: HTMLElement, dark export default function RadialGradientByChainUpdater(): null { const { chainId } = useAccount() const [darkMode] = useDarkModeManager() - const isNftPage = useIsNftPage() + const isNFTPage = useIsPage(PageType.NFTS) // manage background color useEffect(() => { @@ -45,7 +45,7 @@ export default function RadialGradientByChainUpdater(): null { return } - if (isNftPage) { + if (isNFTPage) { setBackground(initialStyles) backgroundRadialGradientElement.style.background = darkMode ? darkTheme.surface1 : lightTheme.surface1 return @@ -119,6 +119,6 @@ export default function RadialGradientByChainUpdater(): null { setDefaultBackground(backgroundRadialGradientElement, darkMode) } } - }, [darkMode, chainId, isNftPage]) + }, [darkMode, chainId, isNFTPage]) return null } diff --git a/apps/web/src/theme/components/ThemeToggle.tsx b/apps/web/src/theme/components/ThemeToggle.tsx index 170ea80d650..1e8202d1aab 100644 --- a/apps/web/src/theme/components/ThemeToggle.tsx +++ b/apps/web/src/theme/components/ThemeToggle.tsx @@ -3,10 +3,10 @@ import { atomWithStorage, useAtomValue, useUpdateAtom } from 'jotai/utils' import ms from 'ms' import { useCallback, useEffect, useMemo } from 'react' import { Moon, Sun } from 'react-feather' +import { Trans, useTranslation } from 'react-i18next' import { Flex, SegmentedControl, Text, styled, useSporeColors } from 'ui/src' import { Moon as MoonFilled } from 'ui/src/components/icons/Moon' import { Sun as SunFilled } from 'ui/src/components/icons/Sun' -import { Trans, useTranslation } from 'uniswap/src/i18n' import { addMediaQueryListener, removeMediaQueryListener } from 'utils/matchMedia' const THEME_UPDATE_DELAY = ms(`0.1s`) @@ -95,7 +95,15 @@ export function useDarkModeManager(): [boolean, (mode: ThemeMode) => void] { }, [isDarkMode, setMode]) } -export function ThemeSelector({ disabled, compact = false }: { disabled?: boolean; compact?: boolean }) { +export function ThemeSelector({ + disabled, + compact = false, + fullWidth = false, +}: { + disabled?: boolean + compact?: boolean + fullWidth?: boolean +}) { const { t } = useTranslation() const colors = useSporeColors() const [mode, setMode] = useAtom(themeModeAtom) @@ -162,9 +170,9 @@ export function ThemeSelector({ disabled, compact = false }: { disabled?: boolea ] return ( - + { + const assets = { + ...jest.requireActual('ui/src/assets'), + } + + Object.keys(assets).map((key) => { + assets[key] = `mock-asset-${key}.png` + }) + + return assets +}) diff --git a/packages/ui/jest-setup.js b/packages/ui/jest-setup.js index d5f4811d287..c932de97691 100644 --- a/packages/ui/jest-setup.js +++ b/packages/ui/jest-setup.js @@ -1,16 +1 @@ -jest.mock('expo-localization', () => ({ - getLocales: () => [ - { - languageCode: 'en', - languageTag: 'en-US', - regionCode: null, - currencyCode: null, - currencySymbol: null, - decimalSeparator: null, - digitGroupingSeparator: null, - textDirection: null, - measurementSystem: null, - temperatureUnit: null, - }, - ], -})) +import 'utilities/jest-package-mocks' diff --git a/packages/ui/src/assets/icons/more-horizontal.svg b/packages/ui/src/assets/icons/more-horizontal.svg new file mode 100644 index 00000000000..8591feaf5ad --- /dev/null +++ b/packages/ui/src/assets/icons/more-horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ui/src/components/SegmentedControl/SegmentedControl.tsx b/packages/ui/src/components/SegmentedControl/SegmentedControl.tsx index b0d7035773a..246c452ac1c 100644 --- a/packages/ui/src/components/SegmentedControl/SegmentedControl.tsx +++ b/packages/ui/src/components/SegmentedControl/SegmentedControl.tsx @@ -1,5 +1,5 @@ import { cloneElement, useState } from 'react' -import { AnimatePresence, ColorTokens, TabLayout, Tabs, TabsTabProps, styled } from 'tamagui' +import { AnimatePresence, ColorTokens, SpaceTokens, TabLayout, Tabs, TabsTabProps, styled } from 'tamagui' import { Flex } from 'ui/src/components/layout/Flex' import { Text } from 'ui/src/components/text/Text' import { assert } from 'utilities/src/errors' @@ -147,6 +147,7 @@ interface SegmentedControlProps { disabled?: boolean fullWidth?: boolean outlined?: boolean + gap?: SpaceTokens } /** @@ -175,6 +176,7 @@ export function SegmentedControl({ disabled, fullWidth, outlined = true, + gap, }: SegmentedControlProps): JSX.Element { assert(options.length >= 2 && options.length <= 6, 'Segmented control must have between 2 and 6 options, inclusive.') @@ -220,6 +222,7 @@ export function SegmentedControl({ outlined={outlined} loop={false} size={size} + gap={gap} > {options.map((option, index) => { const { value, display, wrapper } = option diff --git a/packages/ui/src/components/UniversalImage/types.ts b/packages/ui/src/components/UniversalImage/types.ts index 01274f02d68..8ae8e748632 100644 --- a/packages/ui/src/components/UniversalImage/types.ts +++ b/packages/ui/src/components/UniversalImage/types.ts @@ -5,6 +5,7 @@ export interface UniversalImageStyle { backgroundColor?: string borderRadius?: number verticalAlign?: FlexProps['verticalAlign'] + zIndex?: number } export enum UniversalImageResizeMode { diff --git a/packages/ui/src/components/icons/MoreHorizontal.tsx b/packages/ui/src/components/icons/MoreHorizontal.tsx new file mode 100644 index 00000000000..187b9d3c9d2 --- /dev/null +++ b/packages/ui/src/components/icons/MoreHorizontal.tsx @@ -0,0 +1,17 @@ +import { Path, Svg } from 'react-native-svg' + +// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths +import { createIcon } from '../factories/createIcon' + +export const [MoreHorizontal, AnimatedMoreHorizontal] = createIcon({ + name: 'MoreHorizontal', + getIcon: (props) => ( + + + + ), + defaultFill: '#9B9B9B', +}) diff --git a/packages/ui/src/components/icons/exported.ts b/packages/ui/src/components/icons/exported.ts index 50c54db5172..98b16ddc47e 100644 --- a/packages/ui/src/components/icons/exported.ts +++ b/packages/ui/src/components/icons/exported.ts @@ -132,6 +132,7 @@ export * from './Mobile' export * from './MoneyBillSend' export * from './Moon' export * from './More' +export * from './MoreHorizontal' export * from './NoNfts' export * from './NoPools' export * from './NoTokens' diff --git a/packages/ui/src/hooks/useSporeColors.ts b/packages/ui/src/hooks/useSporeColors.ts index fad36f0a8d0..50d0fd53990 100644 --- a/packages/ui/src/hooks/useSporeColors.ts +++ b/packages/ui/src/hooks/useSporeColors.ts @@ -30,3 +30,10 @@ export const useSporeColors = (name?: ThemeProps['name']): UseSporeColorsReturn return useTheme(config) as unknown as UseSporeColorsReturn } + +export const useSporeColorsForTheme = (name?: ThemeProps['name']): UseSporeColorsReturn => { + const darkColors = useSporeColors('dark') + const themeColors = useSporeColors() + + return name === 'dark' ? darkColors : themeColors +} diff --git a/packages/ui/src/theme/zIndices.ts b/packages/ui/src/theme/zIndices.ts index 2734e1855ff..b4885283525 100644 --- a/packages/ui/src/theme/zIndices.ts +++ b/packages/ui/src/theme/zIndices.ts @@ -10,6 +10,7 @@ export const zIndices = { modalBackdrop: 1040, offcanvas: 1050, modal: 1060, + popoverBackdrop: 1065, popover: 1070, tooltip: 1080, // Custom value needed to properly display components diff --git a/packages/uniswap/jest-package-mocks.js b/packages/uniswap/jest-package-mocks.js new file mode 100644 index 00000000000..6ba1948d84a --- /dev/null +++ b/packages/uniswap/jest-package-mocks.js @@ -0,0 +1,16 @@ +/** + * Common mocks for this package. This file is intended to be imported in the jest-setup.js file of the package. + * + * Notes: + * * Try not to add test specific mocks here. + * * Be wary of the import order. + * * mocks can be overridden + */ + +import mockRNLocalize from 'react-native-localize/mock' +import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale' +import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider' + +jest.mock('react-native-localize', () => mockRNLocalize) +jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({})) +jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider) diff --git a/packages/uniswap/jest-setup.js b/packages/uniswap/jest-setup.js index 0eeff60ee66..7793142c0b1 100644 --- a/packages/uniswap/jest-setup.js +++ b/packages/uniswap/jest-setup.js @@ -1,14 +1,8 @@ -import 'uniswap/src/i18n/i18n' // Uses real translations for tests -import 'utilities/src/logger/mocks' +import 'utilities/jest-package-mocks' +import 'uniswap/jest-package-mocks' -import { localizeMock as mockRNLocalize } from 'react-native-localize/mock' -import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale' -import { TextEncoder, TextDecoder } from 'util'; -import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider' +import 'uniswap/src/i18n' // Uses real translations for tests -jest.mock('react-native-localize', () => mockRNLocalize) - -jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({})) jest.mock('uniswap/src/features/transactions/settings/contexts/TransactionSettingsContext', () => { return { @@ -31,14 +25,4 @@ jest.mock('utilities/src/telemetry/trace/utils/calculateElapsedTimeWithPerforman return jest.requireActual('utilities/src/telemetry/trace/utils/calculateElapsedTimeWithPerformanceMarkMs.web.ts') }) -jest.mock('utilities/src/environment/env', () => ({ - isTestEnv: jest.fn(() => true), - isDevEnv: jest.fn(() => false), - isBetaEnv: jest.fn(() => false), - isProdEnv: jest.fn(() => false), -})) - -jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider) -global.TextEncoder = TextEncoder; -global.TextDecoder = TextDecoder; diff --git a/packages/uniswap/package.json b/packages/uniswap/package.json index c31e54265e5..517b46c7c7a 100644 --- a/packages/uniswap/package.json +++ b/packages/uniswap/package.json @@ -94,7 +94,8 @@ "utilities": "workspace:^", "uuid": "9.0.0", "wagmi": "2.9.3", - "wcag-contrast": "3.0.0" + "wcag-contrast": "3.0.0", + "zod": "3.22.4" }, "devDependencies": { "@faker-js/faker": "7.6.0", diff --git a/packages/uniswap/src/components/CurrencyLogo/NetworkLogo.tsx b/packages/uniswap/src/components/CurrencyLogo/NetworkLogo.tsx index 1d66d6e2703..96877655ddb 100644 --- a/packages/uniswap/src/components/CurrencyLogo/NetworkLogo.tsx +++ b/packages/uniswap/src/components/CurrencyLogo/NetworkLogo.tsx @@ -1,7 +1,7 @@ import React from 'react' import { Flex, FlexProps, Image, useSporeColors } from 'ui/src' import { ALL_NETWORKS_LOGO } from 'ui/src/assets' -import { iconSizes } from 'ui/src/theme' +import { iconSizes, zIndices } from 'ui/src/theme' import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { UniverseChainId } from 'uniswap/src/features/chains/types' @@ -53,7 +53,7 @@ function _NetworkLogo({ const imageSize = size - borderWidth * 2 // this prevents the border from cutting off the logo return logo ? ( - + ) : null diff --git a/packages/uniswap/src/components/CurrencyLogo/SplitLogo.tsx b/packages/uniswap/src/components/CurrencyLogo/SplitLogo.tsx index d51a9982184..43d50e107f3 100644 --- a/packages/uniswap/src/components/CurrencyLogo/SplitLogo.tsx +++ b/packages/uniswap/src/components/CurrencyLogo/SplitLogo.tsx @@ -1,15 +1,18 @@ import { ReactNode } from 'react' import { Flex } from 'ui/src' import { Shuffle } from 'ui/src/components/icons/Shuffle' -import { iconSizes } from 'ui/src/theme' +import { iconSizes, zIndices } from 'ui/src/theme' import { CurrencyLogo, STATUS_RATIO } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo' import { TransactionSummaryNetworkLogo } from 'uniswap/src/components/CurrencyLogo/NetworkLogo' +import { TokenLogo } from 'uniswap/src/components/CurrencyLogo/TokenLogo' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { CurrencyInfo } from 'uniswap/src/features/dataApi/types' interface Props { inputCurrencyInfo: Maybe outputCurrencyInfo: Maybe + inputLogoUrl?: string + outputLogoUrl?: string size: number chainId: UniverseChainId | null customIcon?: ReactNode @@ -19,7 +22,15 @@ interface Props { * Logo, where left 50% of width is taken from one icon (its left 50%) * and right side is taken from another icon (its right 50%) */ -export function SplitLogo({ size, inputCurrencyInfo, outputCurrencyInfo, chainId, customIcon }: Props): JSX.Element { +export function SplitLogo({ + size, + inputCurrencyInfo, + outputCurrencyInfo, + inputLogoUrl, + outputLogoUrl, + chainId, + customIcon, +}: Props): JSX.Element { const iconSize = size / 2 const networkLogo = chainId && chainId !== UniverseChainId.Mainnet ? ( @@ -36,7 +47,11 @@ export function SplitLogo({ size, inputCurrencyInfo, outputCurrencyInfo, chainId top={0} width={iconSize - 1 /* -1 to allow for space between the icons */} > - + {inputLogoUrl ? ( + + ) : ( + + )} - + {outputLogoUrl ? ( + + ) : ( + + )} {(customIcon || networkLogo) && ( - + {customIcon ?? networkLogo} )} diff --git a/packages/uniswap/src/components/CurrencyLogo/TokenLogo.tsx b/packages/uniswap/src/components/CurrencyLogo/TokenLogo.tsx index 84554330652..a004c3678cd 100644 --- a/packages/uniswap/src/components/CurrencyLogo/TokenLogo.tsx +++ b/packages/uniswap/src/components/CurrencyLogo/TokenLogo.tsx @@ -1,6 +1,6 @@ import { memo, useState } from 'react' import { Flex, Text, UniversalImage, useColorSchemeFromSeed, useSporeColors } from 'ui/src' -import { iconSizes, validColor } from 'ui/src/theme' +import { iconSizes, validColor, zIndices } from 'ui/src/theme' import { STATUS_RATIO } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo' import { NetworkLogo } from 'uniswap/src/components/CurrencyLogo/NetworkLogo' import { UniverseChainId } from 'uniswap/src/features/chains/types' @@ -85,6 +85,7 @@ export const TokenLogo = memo(function _TokenLogo({ style={{ image: { borderRadius: size / 2, + zIndex: zIndices.default, }, }} testID="token-image" @@ -99,6 +100,7 @@ export const TokenLogo = memo(function _TokenLogo({ height={size} justifyContent="center" testID="token-logo" + pointerEvents="auto" width={size} position="relative" > @@ -107,7 +109,7 @@ export const TokenLogo = memo(function _TokenLogo({ opacity={showBackground ? 1 : 0} height="96%" width="96%" - zIndex={-1} + zIndex={zIndices.background} backgroundColor={colors.white.val} position="absolute" top="2%" @@ -129,7 +131,7 @@ export const TokenLogo = memo(function _TokenLogo({ /> )} {showNetworkLogo && ( - + )} diff --git a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/CurrencyLogo.test.tsx.snap b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/CurrencyLogo.test.tsx.snap index fc85db3e607..69ed3a95198 100644 --- a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/CurrencyLogo.test.tsx.snap +++ b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/CurrencyLogo.test.tsx.snap @@ -2,6 +2,7 @@ exports[`CurrencyLogo renders a currency logo with network logo 1`] = ` @@ -51,6 +52,7 @@ exports[`CurrencyLogo renders a currency logo with network logo 1`] = ` "aspectRatio": undefined, "borderRadius": 20, "objectFit": "contain", + "zIndex": 1, } } width={40} @@ -63,6 +65,7 @@ exports[`CurrencyLogo renders a currency logo with network logo 1`] = ` "flexDirection": "column", "position": "absolute", "right": -3, + "zIndex": 10, } } > @@ -77,6 +80,7 @@ exports[`CurrencyLogo renders a currency logo with network logo 1`] = ` "height": 21, "overflow": "hidden", "width": 21, + "zIndex": 10, } } testID="network-logo" @@ -104,6 +108,7 @@ exports[`CurrencyLogo renders a currency logo with network logo 1`] = ` exports[`CurrencyLogo renders without error 1`] = ` @@ -153,6 +158,7 @@ exports[`CurrencyLogo renders without error 1`] = ` "aspectRatio": undefined, "borderRadius": 20, "objectFit": "contain", + "zIndex": 1, } } width={40} diff --git a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/NetworkLogo.test.tsx.snap b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/NetworkLogo.test.tsx.snap index 1a691e6cb1f..0b86e893dcd 100644 --- a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/NetworkLogo.test.tsx.snap +++ b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/NetworkLogo.test.tsx.snap @@ -12,6 +12,7 @@ exports[`NetworkLogo renders without error 1`] = ` "height": 20, "overflow": "hidden", "width": 20, + "zIndex": 10, } } testID="network-logo" @@ -47,6 +48,7 @@ exports[`TransactionSummaryNetworkLogo renders without error 1`] = ` "height": 23, "overflow": "hidden", "width": 23, + "zIndex": 10, } } testID="network-logo" diff --git a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/SplitLogo.test.tsx.snap b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/SplitLogo.test.tsx.snap index 58335c2856b..ade468b193c 100644 --- a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/SplitLogo.test.tsx.snap +++ b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/SplitLogo.test.tsx.snap @@ -24,6 +24,7 @@ exports[`SplitLogo renders without error 1`] = ` testID="input-currency-logo-container" > @@ -73,6 +74,7 @@ exports[`SplitLogo renders without error 1`] = ` "aspectRatio": undefined, "borderRadius": 5, "objectFit": "contain", + "zIndex": 1, } } width={10} @@ -94,6 +96,7 @@ exports[`SplitLogo renders without error 1`] = ` testID="output-currency-logo-container" > @@ -143,6 +146,7 @@ exports[`SplitLogo renders without error 1`] = ` "aspectRatio": undefined, "borderRadius": 5, "objectFit": "contain", + "zIndex": 1, } } width={10} @@ -157,6 +161,7 @@ exports[`SplitLogo renders without error 1`] = ` "flexDirection": "column", "position": "absolute", "right": -4, + "zIndex": 10, } } > @@ -171,6 +176,7 @@ exports[`SplitLogo renders without error 1`] = ` "height": 7.5, "overflow": "hidden", "width": 7.5, + "zIndex": 10, } } testID="network-logo" diff --git a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/TokenLogo.test.tsx.snap b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/TokenLogo.test.tsx.snap index ad0430c7971..049b5b84c73 100644 --- a/packages/uniswap/src/components/CurrencyLogo/__snapshots__/TokenLogo.test.tsx.snap +++ b/packages/uniswap/src/components/CurrencyLogo/__snapshots__/TokenLogo.test.tsx.snap @@ -2,6 +2,7 @@ exports[`TokenLogo renders without error 1`] = ` @@ -51,6 +52,7 @@ exports[`TokenLogo renders without error 1`] = ` "aspectRatio": undefined, "borderRadius": 20, "objectFit": "contain", + "zIndex": 1, } } width={40} @@ -63,6 +65,7 @@ exports[`TokenLogo renders without error 1`] = ` "flexDirection": "column", "position": "absolute", "right": -3, + "zIndex": 10, } } > @@ -77,6 +80,7 @@ exports[`TokenLogo renders without error 1`] = ` "height": 21, "overflow": "hidden", "width": 21, + "zIndex": 10, } } testID="network-logo" diff --git a/packages/uniswap/src/components/RoutingDiagram/RoutingDiagram.tsx b/packages/uniswap/src/components/RoutingDiagram/RoutingDiagram.tsx index 44d2fbd2e94..8346dc54a23 100644 --- a/packages/uniswap/src/components/RoutingDiagram/RoutingDiagram.tsx +++ b/packages/uniswap/src/components/RoutingDiagram/RoutingDiagram.tsx @@ -1,6 +1,7 @@ import { Protocol } from '@uniswap/router-sdk' import { Currency } from '@uniswap/sdk-core' import { FeeAmount } from '@uniswap/v3-sdk' +import { Trans } from 'react-i18next' import { Flex, Text, Tooltip, styled as tamaguiStyled } from 'ui/src' import { DotLine } from 'ui/src/components/icons/DotLine' import { zIndices } from 'ui/src/theme' @@ -8,7 +9,6 @@ import { CurrencyLogo } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo' import { SplitLogo } from 'uniswap/src/components/CurrencyLogo/SplitLogo' import { BIPS_BASE } from 'uniswap/src/constants/misc' import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' -import { Trans } from 'uniswap/src/i18n' import { buildCurrencyId, buildNativeCurrencyId } from 'uniswap/src/utils/currencyId' import { RoutingDiagramEntry } from 'uniswap/src/utils/getRoutingDiagramEntries' diff --git a/packages/uniswap/src/components/TokenSelector/TokenSelector.tsx b/packages/uniswap/src/components/TokenSelector/TokenSelector.tsx index e9de13f60ba..c2fa7143ac8 100644 --- a/packages/uniswap/src/components/TokenSelector/TokenSelector.tsx +++ b/packages/uniswap/src/components/TokenSelector/TokenSelector.tsx @@ -285,6 +285,7 @@ export function TokenSelectorContent({ chainIds={chainIds || enabledChains} selectedChain={chainFilter} styles={isExtension ? { dropdownZIndex: zIndices.overlay } : undefined} + onDismiss={dismissNativeKeyboard} onPressChain={(newChainId) => { onChangeChainFilter(newChainId) onSelectChain?.(newChainId) diff --git a/packages/uniswap/src/components/gas/__snapshots__/NetworkFee.test.tsx.snap b/packages/uniswap/src/components/gas/__snapshots__/NetworkFee.test.tsx.snap index e2cbd23fe3c..3a1c3789e91 100644 --- a/packages/uniswap/src/components/gas/__snapshots__/NetworkFee.test.tsx.snap +++ b/packages/uniswap/src/components/gas/__snapshots__/NetworkFee.test.tsx.snap @@ -308,6 +308,7 @@ exports[`NetworkFee renders a NetworkFee in an error state 1`] = ` "height": 16, "overflow": "hidden", "width": 16, + "zIndex": 10, } } testID="network-logo" @@ -493,6 +494,7 @@ exports[`NetworkFee renders a NetworkFee normally 1`] = ` "height": 16, "overflow": "hidden", "width": 16, + "zIndex": 10, } } testID="network-logo" diff --git a/packages/uniswap/src/components/modals/Modal.native.tsx b/packages/uniswap/src/components/modals/Modal.native.tsx index a3b4ac2d1b3..a3b3e7fc285 100644 --- a/packages/uniswap/src/components/modals/Modal.native.tsx +++ b/packages/uniswap/src/components/modals/Modal.native.tsx @@ -13,7 +13,7 @@ import { BackHandler, StyleProp, StyleSheet, ViewStyle } from 'react-native' import Animated, { Extrapolate, interpolate, useAnimatedStyle, useSharedValue } from 'react-native-reanimated' import { Flex, useIsDarkMode, useMedia, useSporeColors } from 'ui/src' import { useDeviceDimensions } from 'ui/src/hooks/useDeviceDimensions' -import { borderRadii, spacing } from 'ui/src/theme' +import { borderRadii, spacing, zIndices } from 'ui/src/theme' import { BottomSheetContextProvider } from 'uniswap/src/components/modals/BottomSheetContext' import { HandleBar } from 'uniswap/src/components/modals/HandleBar' import { ModalProps } from 'uniswap/src/components/modals/ModalProps' @@ -53,6 +53,7 @@ const Backdrop = (props: BottomSheetBackdropProps): JSX.Element => { return ( ( ), - [blurredBackground, hideScrim, isDismissible], + [blurredBackground, hideScrim, isDismissible, fullScreen], ) const renderHandleBar = useCallback( @@ -260,6 +262,7 @@ function BottomSheetModalContents({ animatedPosition={animatedPosition} backgroundStyle={backgroundStyle} containerComponent={containerComponent} + containerStyle={{ zIndex: fullScreen ? undefined : zIndices.modal }} enableContentPanningGesture={isDismissible} enableDynamicSizing={!snapPoints || enableDynamicSizing} enableHandlePanningGesture={isDismissible} @@ -332,6 +335,7 @@ export function BottomSheetDetachedModal({ backdropComponent={Backdrop} backgroundStyle={backgroundStyle} bottomInset={insets.bottom} + containerStyle={{ zIndex: zIndices.popover }} detached={true} enableContentPanningGesture={isDismissible} enableDynamicSizing={!snapPoints} diff --git a/packages/uniswap/src/components/network/__snapshots__/NetworkFilter.test.tsx.snap b/packages/uniswap/src/components/network/__snapshots__/NetworkFilter.test.tsx.snap index 3ca14bac24f..dcb195fa3c7 100644 --- a/packages/uniswap/src/components/network/__snapshots__/NetworkFilter.test.tsx.snap +++ b/packages/uniswap/src/components/network/__snapshots__/NetworkFilter.test.tsx.snap @@ -52,6 +52,7 @@ exports[`NetworkFilter renders a NetworkFilter 1`] = ` "height": 20, "overflow": "hidden", "width": 20, + "zIndex": 10, } } testID="network-logo" diff --git a/packages/uniswap/src/components/pill/NewTag.tsx b/packages/uniswap/src/components/pill/NewTag.tsx index 55e3885e95e..f6927c14007 100644 --- a/packages/uniswap/src/components/pill/NewTag.tsx +++ b/packages/uniswap/src/components/pill/NewTag.tsx @@ -1,6 +1,6 @@ import { memo } from 'react' +import { useTranslation } from 'react-i18next' import { ColorTokens, Flex, FlexProps, Text } from 'ui/src' -import { useTranslation } from 'uniswap/src/i18n' interface NewTagProps { backgroundColor?: ColorTokens diff --git a/packages/uniswap/src/config.ts b/packages/uniswap/src/config.ts index 03c42266f28..6049ada0620 100644 --- a/packages/uniswap/src/config.ts +++ b/packages/uniswap/src/config.ts @@ -1,10 +1,16 @@ // eslint-disable-next-line no-restricted-imports import { + AMPLITUDE_PROXY_URL_OVERRIDE, + API_BASE_URL_OVERRIDE, + API_BASE_URL_V2_OVERRIDE, APPSFLYER_API_KEY, APPSFLYER_APP_ID, DATADOG_CLIENT_TOKEN, DATADOG_PROJECT_ID, + FIAT_ON_RAMP_API_URL_OVERRIDE, FIREBASE_APP_CHECK_DEBUG_TOKEN, + FOR_API_URL_OVERRIDE, + GRAPHQL_URL_OVERRIDE, INFURA_KEY, ONESIGNAL_APP_ID, OPENAI_API_KEY, @@ -23,12 +29,15 @@ import { QUICKNODE_WORLDCHAIN_RPC_URL, QUICKNODE_ZKSYNC_RPC_URL, QUICKNODE_ZORA_RPC_URL, + SCANTASTIC_API_URL_OVERRIDE, SENTRY_DSN, SIMPLEHASH_API_KEY, SIMPLEHASH_API_URL, - STATSIG_PROXY_URL, + STATSIG_PROXY_URL_OVERRIDE, TRADING_API_KEY, + TRADING_API_URL_OVERRIDE, UNISWAP_API_KEY, + UNITAGS_API_URL_OVERRIDE, WALLETCONNECT_PROJECT_ID, } from 'react-native-dotenv' import { isNonJestDev } from 'utilities/src/environment/constants' @@ -44,36 +53,45 @@ import { isNonJestDev } from 'utilities/src/environment/constants' */ export interface Config { + amplitudeProxyUrlOverride: string + apiBaseUrlOverride: string + apiBaseUrlV2Override: string appsflyerApiKey: string appsflyerAppId: string datadogClientToken: string datadogProjectId: string - uniswapApiKey: string + fiatOnRampApiUrlOverride: string + firebaseAppCheckDebugToken: string + forApiUrlOverride: string + graphqlUrlOverride: string infuraKey: string onesignalAppId: string openaiApiKey: string - sentryDsn: string - simpleHashApiKey: string - simpleHashApiUrl: string - statSigProxyUrl: string - walletConnectProjectId: string quicknodeArbitrumRpcUrl: string quicknodeAvaxRpcUrl: string quicknodeBaseRpcUrl: string quicknodeBlastRpcUrl: string quicknodeBnbRpcUrl: string quicknodeCeloRpcUrl: string + quicknodeMainnetRpcUrl: string + quicknodeMonadTestnetRpcUrl: string quicknodeOpRpcUrl: string quicknodePolygonRpcUrl: string - quicknodeZoraRpcUrl: string - quicknodeZkSyncRpcUrl: string - quicknodeWorldChainRpcUrl: string - quicknodeUnichainSepoliaRpcUrl: string - quicknodeMonadTestnetRpcUrl: string - quicknodeMainnetRpcUrl: string quicknodeSepoliaRpcUrl: string + quicknodeUnichainSepoliaRpcUrl: string + quicknodeWorldChainRpcUrl: string + quicknodeZkSyncRpcUrl: string + quicknodeZoraRpcUrl: string + scantasticApiUrlOverride: string + sentryDsn: string + simpleHashApiKey: string + simpleHashApiUrl: string + statsigProxyUrlOverride: string tradingApiKey: string - firebaseAppCheckDebugToken: string + tradingApiUrlOverride: string + uniswapApiKey: string + unitagsApiUrlOverride: string + walletConnectProjectId: string } /** @@ -87,20 +105,20 @@ export interface Config { */ const _config: Config = { + amplitudeProxyUrlOverride: process.env.AMPLITUDE_PROXY_URL_OVERRIDE || AMPLITUDE_PROXY_URL_OVERRIDE, + apiBaseUrlOverride: process.env.API_BASE_URL_OVERRIDE || API_BASE_URL_OVERRIDE, + apiBaseUrlV2Override: process.env.API_BASE_URL_V2_OVERRIDE || API_BASE_URL_V2_OVERRIDE, appsflyerApiKey: process.env.APPSFLYER_API_KEY || APPSFLYER_API_KEY, appsflyerAppId: process.env.APPSFLYER_APP_ID || APPSFLYER_APP_ID, datadogClientToken: process.env.DATADOG_CLIENT_TOKEN || DATADOG_CLIENT_TOKEN, datadogProjectId: process.env.DATADOG_PROJECT_ID || DATADOG_PROJECT_ID, - uniswapApiKey: process.env.UNISWAP_API_KEY || UNISWAP_API_KEY, + fiatOnRampApiUrlOverride: process.env.FIAT_ON_RAMP_API_URL_OVERRIDE || FIAT_ON_RAMP_API_URL_OVERRIDE, + firebaseAppCheckDebugToken: process.env.FIREBASE_APP_CHECK_DEBUG_TOKEN || FIREBASE_APP_CHECK_DEBUG_TOKEN, + forApiUrlOverride: process.env.FOR_API_URL_OVERRIDE || FOR_API_URL_OVERRIDE, + graphqlUrlOverride: process.env.GRAPHQL_URL_OVERRIDE || GRAPHQL_URL_OVERRIDE, infuraKey: process.env.REACT_APP_INFURA_KEY || INFURA_KEY, onesignalAppId: process.env.ONESIGNAL_APP_ID || ONESIGNAL_APP_ID, openaiApiKey: process.env.OPENAI_API_KEY || OPENAI_API_KEY, - sentryDsn: process.env.REACT_APP_SENTRY_DSN || process.env.SENTRY_DSN || SENTRY_DSN, - simpleHashApiKey: process.env.SIMPLEHASH_API_KEY || SIMPLEHASH_API_KEY, - simpleHashApiUrl: process.env.SIMPLEHASH_API_URL || SIMPLEHASH_API_URL, - statSigProxyUrl: process.env.REACT_APP_STATSIG_PROXY_URL || process.env.STATSIG_PROXY_URL || STATSIG_PROXY_URL, - walletConnectProjectId: - process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID || process.env.WALLETCONNECT_PROJECT_ID || WALLETCONNECT_PROJECT_ID, quicknodeArbitrumRpcUrl: process.env.REACT_APP_QUICKNODE_ARBITRUM_RPC_URL || process.env.QUICKNODE_ARBITRUM_RPC_URL || @@ -115,6 +133,10 @@ const _config: Config = { process.env.REACT_APP_QUICKNODE_BNB_RPC_URL || process.env.QUICKNODE_BNB_RPC_URL || QUICKNODE_BNB_RPC_URL, quicknodeCeloRpcUrl: process.env.REACT_APP_QUICKNODE_CELO_RPC_URL || process.env.QUICKNODE_CELO_RPC_URL || QUICKNODE_CELO_RPC_URL, + quicknodeMainnetRpcUrl: + process.env.REACT_APP_QUICKNODE_MAINNET_RPC_URL || + process.env.QUICKNODE_MAINNET_RPC_URL || + QUICKNODE_MAINNET_RPC_URL, quicknodeMonadTestnetRpcUrl: process.env.REACT_APP_QUICKNODE_MONAD_TESTNET_RPC_URL || process.env.QUICKNODE_MONAD_TESTNET_RPC_URL || @@ -125,28 +147,33 @@ const _config: Config = { process.env.REACT_APP_QUICKNODE_POLYGON_RPC_URL || process.env.QUICKNODE_POLYGON_RPC_URL || QUICKNODE_POLYGON_RPC_URL, - quicknodeZoraRpcUrl: - process.env.REACT_APP_QUICKNODE_ZORA_RPC_URL || process.env.QUICKNODE_ZORA_RPC_URL || QUICKNODE_ZORA_RPC_URL, - quicknodeZkSyncRpcUrl: - process.env.REACT_APP_QUICKNODE_ZKSYNC_RPC_URL || process.env.QUICKNODE_ZKSYNC_RPC_URL || QUICKNODE_ZKSYNC_RPC_URL, - quicknodeWorldChainRpcUrl: - process.env.REACT_APP_QUICKNODE_WORLDCHAIN_RPC_URL || - process.env.QUICKNODE_WORLDCHAIN_RPC_URL || - QUICKNODE_WORLDCHAIN_RPC_URL, - quicknodeUnichainSepoliaRpcUrl: - process.env.REACT_APP_QUICKNODE_ASTROCHAIN_SEPOLIA_RPC_URL || - process.env.QUICKNODE_ASTROCHAIN_SEPOLIA_RPC_URL || - QUICKNODE_ASTROCHAIN_SEPOLIA_RPC_URL, - quicknodeMainnetRpcUrl: - process.env.REACT_APP_QUICKNODE_MAINNET_RPC_URL || - process.env.QUICKNODE_MAINNET_RPC_URL || - QUICKNODE_MAINNET_RPC_URL, quicknodeSepoliaRpcUrl: process.env.REACT_APP_QUICKNODE_SEPOLIA_RPC_URL || process.env.QUICKNODE_SEPOLIA_RPC_URL || QUICKNODE_SEPOLIA_RPC_URL, + quicknodeUnichainSepoliaRpcUrl: + process.env.REACT_APP_QUICKNODE_ASTROCHAIN_SEPOLIA_RPC_URL || + process.env.QUICKNODE_ASTROCHAIN_SEPOLIA_RPC_URL || + QUICKNODE_ASTROCHAIN_SEPOLIA_RPC_URL, + quicknodeWorldChainRpcUrl: + process.env.REACT_APP_QUICKNODE_WORLDCHAIN_RPC_URL || + process.env.QUICKNODE_WORLDCHAIN_RPC_URL || + QUICKNODE_WORLDCHAIN_RPC_URL, + quicknodeZkSyncRpcUrl: + process.env.REACT_APP_QUICKNODE_ZKSYNC_RPC_URL || process.env.QUICKNODE_ZKSYNC_RPC_URL || QUICKNODE_ZKSYNC_RPC_URL, + quicknodeZoraRpcUrl: + process.env.REACT_APP_QUICKNODE_ZORA_RPC_URL || process.env.QUICKNODE_ZORA_RPC_URL || QUICKNODE_ZORA_RPC_URL, + scantasticApiUrlOverride: process.env.SCANTASTIC_API_URL_OVERRIDE || SCANTASTIC_API_URL_OVERRIDE, + sentryDsn: process.env.REACT_APP_SENTRY_DSN || process.env.SENTRY_DSN || SENTRY_DSN, + simpleHashApiKey: process.env.SIMPLEHASH_API_KEY || SIMPLEHASH_API_KEY, + simpleHashApiUrl: process.env.SIMPLEHASH_API_URL || SIMPLEHASH_API_URL, + statsigProxyUrlOverride: process.env.STATSIG_PROXY_URL_OVERRIDE || STATSIG_PROXY_URL_OVERRIDE, tradingApiKey: process.env.REACT_APP_TRADING_API_KEY || process.env.TRADING_API_KEY || TRADING_API_KEY, - firebaseAppCheckDebugToken: process.env.FIREBASE_APP_CHECK_DEBUG_TOKEN || FIREBASE_APP_CHECK_DEBUG_TOKEN, + tradingApiUrlOverride: process.env.TRADING_API_URL_OVERRIDE || TRADING_API_URL_OVERRIDE, + uniswapApiKey: process.env.UNISWAP_API_KEY || UNISWAP_API_KEY, + unitagsApiUrlOverride: process.env.UNITAGS_API_URL_OVERRIDE || UNITAGS_API_URL_OVERRIDE, + walletConnectProjectId: + process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID || process.env.WALLETCONNECT_PROJECT_ID || WALLETCONNECT_PROJECT_ID, } export const config = Object.freeze(_config) diff --git a/packages/uniswap/src/constants/transactions.ts b/packages/uniswap/src/constants/transactions.ts index 7b24b8f8d5c..4b93dca71dd 100644 --- a/packages/uniswap/src/constants/transactions.ts +++ b/packages/uniswap/src/constants/transactions.ts @@ -5,6 +5,9 @@ export const MAX_AUTO_SLIPPAGE_TOLERANCE = 5.5 export const MAX_CUSTOM_SLIPPAGE_TOLERANCE = 100 export const SLIPPAGE_CRITICAL_TOLERANCE = 20 -export const MAX_CUSTOM_DEADLINE = 3 * 24 * 60 // 3 days in minutes - export const MAX_FIAT_INPUT_DECIMALS = 2 + +// Default settings for swap deadline thresholds +export const DEFAULT_CUSTOM_DEADLINE = 30 // 30 minutes +export const WARNING_DEADLINE_TOLERANCE = 60 // 1 hour +export const MAX_CUSTOM_DEADLINE = 3 * 24 * 60 // 3 days diff --git a/packages/uniswap/src/constants/urls.ts b/packages/uniswap/src/constants/urls.ts index 6d9ac30924d..33e0566222b 100644 --- a/packages/uniswap/src/constants/urls.ts +++ b/packages/uniswap/src/constants/urls.ts @@ -1,3 +1,4 @@ +import { config } from 'uniswap/src/config' import { isDevEnv, isTestEnv } from 'utilities/src/environment/env' import { isAndroid, isExtension, isInterface, isMobileApp } from 'utilities/src/platform' @@ -57,7 +58,7 @@ export const uniswapUrls = { swapSlippage: `${helpUrl}/articles/8643879653261-What-is-Price-Slippage-`, tokenWarning: `${helpUrl}/articles/8723118437133-What-are-token-warnings-`, transactionFailure: `${helpUrl}/articles/8643975058829-Why-did-my-transaction-fail-`, - uniswapXInfo: `${helpUrl}/articles/17515415311501`, + uniswapXInfo: `${helpUrl}/articles/17544708791821`, uniswapXFailure: `${helpUrl}/articles/17515489874189-Why-can-my-swap-not-be-filled-`, unitagClaimPeriod: `${helpUrl}/articles/24009960408589`, unsupportedTokenPolicy: `${helpUrl}/articles/18783694078989-Unsupported-Token-Policy`, @@ -74,20 +75,22 @@ export const uniswapUrls = { // Core API Urls apiOrigin: 'https://api.uniswap.org', - apiBaseUrl: getCloudflareApiBaseUrl(), - apiBaseUrlV2: `${getCloudflareApiBaseUrl()}/v2`, - graphQLUrl: `${getCloudflareApiBaseUrl(TrafficFlows.GraphQL)}/v1/graphql`, + apiBaseUrl: config.apiBaseUrlOverride || getCloudflareApiBaseUrl(), + apiBaseUrlV2: config.apiBaseUrlV2Override || `${getCloudflareApiBaseUrl()}/v2`, + graphQLUrl: config.graphqlUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.GraphQL)}/v1/graphql`, // Proxies - amplitudeProxyUrl: `${getCloudflareApiBaseUrl(TrafficFlows.Metrics)}/v1/amplitude-proxy`, - statsigProxyUrl: `${getCloudflareApiBaseUrl(TrafficFlows.Gating)}/v1/statsig-proxy`, + amplitudeProxyUrl: + config.amplitudeProxyUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.Metrics)}/v1/amplitude-proxy`, + statsigProxyUrl: config.statsigProxyUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.Gating)}/v1/statsig-proxy`, // Feature service URL's - unitagsApiUrl: `${getCloudflareApiBaseUrl(TrafficFlows.Unitags)}/v2/unitags`, - scantasticApiUrl: `${getCloudflareApiBaseUrl(TrafficFlows.Scantastic)}/v2/scantastic`, - fiatOnRampApiUrl: `${getCloudflareApiBaseUrl(TrafficFlows.FOR)}/v2/fiat-on-ramp`, // TODO: WALL-5189 - remove this once we finish migrating away from original FOR endpoint service - forApiUrl: `${getCloudflareApiBaseUrl(TrafficFlows.FOR)}/v2/FOR.v1.FORService`, - tradingApiUrl: getCloudflareApiBaseUrl(TrafficFlows.TradingApi), + unitagsApiUrl: config.unitagsApiUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.Unitags)}/v2/unitags`, + scantasticApiUrl: + config.scantasticApiUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.Scantastic)}/v2/scantastic`, + fiatOnRampApiUrl: config.fiatOnRampApiUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.FOR)}/v2/fiat-on-ramp`, + forApiUrl: config.forApiUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.FOR)}/v2/FOR.v1.FORService`, + tradingApiUrl: config.tradingApiUrlOverride || getCloudflareApiBaseUrl(TrafficFlows.TradingApi), // API Paths trmPath: '/v1/screen', diff --git a/packages/uniswap/src/data/apiClients/unitagsApi/useUnitagsUsernameQuery.ts b/packages/uniswap/src/data/apiClients/unitagsApi/useUnitagsUsernameQuery.ts index 90f831e388e..96c2ca18faa 100644 --- a/packages/uniswap/src/data/apiClients/unitagsApi/useUnitagsUsernameQuery.ts +++ b/packages/uniswap/src/data/apiClients/unitagsApi/useUnitagsUsernameQuery.ts @@ -1,6 +1,7 @@ import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query' import { UseQueryApiHelperHookArgs } from 'uniswap/src/data/apiClients/types' import { UNITAGS_API_CACHE_KEY, fetchUsername } from 'uniswap/src/data/apiClients/unitagsApi/UnitagsApiClient' +import { UNITAG_SUFFIX } from 'uniswap/src/features/unitags/constants' import { UnitagUsernameRequest, UnitagUsernameResponse } from 'uniswap/src/features/unitags/types' import { MAX_REACT_QUERY_CACHE_TIME_MS, ONE_MINUTE_MS } from 'utilities/src/time/time' @@ -9,10 +10,19 @@ export function useUnitagsUsernameQuery({ ...rest }: UseQueryApiHelperHookArgs): UseQueryResult { const queryKey = [UNITAGS_API_CACHE_KEY, 'username', params] + const formattedParams = params + ? { + username: params.username.endsWith(UNITAG_SUFFIX) + ? params.username.slice(0, params.username.length - UNITAG_SUFFIX.length) + : params.username, + } + : undefined return useQuery({ queryKey, - queryFn: params ? async (): ReturnType => await fetchUsername(params) : skipToken, + queryFn: formattedParams + ? async (): ReturnType => await fetchUsername(formattedParams) + : skipToken, staleTime: ONE_MINUTE_MS, gcTime: MAX_REACT_QUERY_CACHE_TIME_MS, ...rest, diff --git a/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql b/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql index de681916c4f..8301ec9c929 100644 --- a/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql +++ b/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql @@ -323,6 +323,14 @@ fragment TokenBalanceQuantityParts on TokenBalance { quantity } +fragment TokenBalanceParts on TokenBalance { + ...TokenBalanceMainParts + isHidden + token { + ...TokenParts + } +} + query PortfolioBalances( $ownerAddress: String! $valueModifiers: [PortfolioValueModifier!] @@ -349,11 +357,7 @@ query PortfolioBalances( # Individual portfolio token balances tokenBalances { - ...TokenBalanceMainParts - isHidden - token { - ...TokenParts - } + ...TokenBalanceParts } } } @@ -513,6 +517,7 @@ query TokenProjects($contracts: [ContractInput!]!) { } } +# TODO: WALL-5532 - Add support for offramp transactions on the graphql service query TransactionList($address: String!, $onRampAuth: OnRampTransactionsAuth, $chains: [Chain!]!, $pageSize: Int = 100) { portfolios( ownerAddresses: [$address] diff --git a/packages/uniswap/src/features/address/TokenAddressView.tsx b/packages/uniswap/src/features/address/TokenAddressView.tsx index cbadb87086a..c67c5387e64 100644 --- a/packages/uniswap/src/features/address/TokenAddressView.tsx +++ b/packages/uniswap/src/features/address/TokenAddressView.tsx @@ -1,6 +1,7 @@ import { SharedEventName } from '@uniswap/analytics-events' import { Currency } from '@uniswap/sdk-core' import { useState } from 'react' +import { useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' import { Flex, Text, TouchableArea } from 'ui/src' import { CheckCircleFilled } from 'ui/src/components/icons/CheckCircleFilled' @@ -11,7 +12,6 @@ import { AppNotificationType, CopyNotificationType } from 'uniswap/src/features/ import { ElementName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { WarningModalInfoContainer } from 'uniswap/src/features/tokens/WarningInfoModalContainer' -import { useTranslation } from 'uniswap/src/i18n' import { setClipboard } from 'uniswap/src/utils/clipboard' import { isInterface } from 'utilities/src/platform' diff --git a/packages/uniswap/src/features/chains/chainInfo.ts b/packages/uniswap/src/features/chains/chainInfo.ts index bbb519a062f..1cd55eea8d3 100644 --- a/packages/uniswap/src/features/chains/chainInfo.ts +++ b/packages/uniswap/src/features/chains/chainInfo.ts @@ -124,10 +124,10 @@ export const UNIVERSE_CHAIN_INFO: Record = { http: [config.quicknodeMainnetRpcUrl], }, [RPCType.Default]: { - http: ['https://rpc.ankr.com/eth'], + http: ['https://cloudflare-eth.com'], }, [RPCType.Fallback]: { - http: ['https://cloudflare-eth.com', 'https://eth-mainnet.public.blastapi.io'], + http: ['https://rpc.ankr.com/eth', 'https://eth-mainnet.public.blastapi.io'], }, [RPCType.Interface]: { http: [`https://mainnet.infura.io/v3/${config.infuraKey}`, config.quicknodeMainnetRpcUrl], diff --git a/packages/uniswap/src/features/fiatOnRamp/SelectTokenButton.tsx b/packages/uniswap/src/features/fiatOnRamp/SelectTokenButton.tsx index 4fec51a1a27..c6fabed6bd1 100644 --- a/packages/uniswap/src/features/fiatOnRamp/SelectTokenButton.tsx +++ b/packages/uniswap/src/features/fiatOnRamp/SelectTokenButton.tsx @@ -1,10 +1,10 @@ import { ComponentProps } from 'react' +import { Trans } from 'react-i18next' import { Flex, SpinningLoader, Text, TouchableArea } from 'ui/src' import { RotatableChevron } from 'ui/src/components/icons/RotatableChevron' import { iconSizes, spacing } from 'ui/src/theme' import { CurrencyLogo } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo' import { CurrencyInfo } from 'uniswap/src/features/dataApi/types' -import { Trans } from 'uniswap/src/i18n' import { TestIDType } from 'uniswap/src/test/fixtures/testIDs' import { getSymbolDisplayText } from 'uniswap/src/utils/currency' diff --git a/packages/uniswap/src/features/fiatOnRamp/hooks.ts b/packages/uniswap/src/features/fiatOnRamp/hooks.ts index 645307e1b98..f2cdb79b144 100644 --- a/packages/uniswap/src/features/fiatOnRamp/hooks.ts +++ b/packages/uniswap/src/features/fiatOnRamp/hooks.ts @@ -63,32 +63,35 @@ export function useFiatOnRampTransactionCreator( serviceProvider?: string, ): { externalTransactionId: string - dispatchAddTransaction: () => void + dispatchAddTransaction: ({ isOffRamp }: { isOffRamp: boolean }) => void } { const dispatch = useDispatch() const externalTransactionId = useRef(createOnRampTransactionId(serviceProvider)) - const dispatchAddTransaction = useCallback(() => { - // Adds a LocalOnRampTransaction to track the transaction - // Later we will query the transaction details for that id - const transactionDetail: TransactionDetails = { - routing: Routing.CLASSIC, - chainId, - id: externalTransactionId.current, - from: ownerAddress, - typeInfo: { - type: TransactionType.LocalOnRamp, - }, - status: TransactionStatus.Pending, - addedTime: Date.now(), - hash: '', - options: { request: {} }, - transactionOriginType: TransactionOriginType.Internal, - } - // use addTransaction action so transactionWatcher picks it up - dispatch(addTransaction(transactionDetail)) - }, [chainId, ownerAddress, dispatch]) + const dispatchAddTransaction = useCallback( + ({ isOffRamp }: { isOffRamp: boolean }) => { + // Adds a local FOR transaction to track the transaction + // Later we will query the transaction details for that id + const transactionDetail: TransactionDetails = { + routing: Routing.CLASSIC, + chainId, + id: externalTransactionId.current, + from: ownerAddress, + typeInfo: { + type: isOffRamp ? TransactionType.LocalOffRamp : TransactionType.LocalOnRamp, + }, + status: TransactionStatus.Pending, + addedTime: Date.now(), + hash: '', + options: { request: {} }, + transactionOriginType: TransactionOriginType.Internal, + } + // use addTransaction action so transactionWatcher picks it up + dispatch(addTransaction(transactionDetail)) + }, + [chainId, ownerAddress, dispatch], + ) return { externalTransactionId: externalTransactionId.current, dispatchAddTransaction } } diff --git a/packages/uniswap/src/features/fiatOnRamp/types.ts b/packages/uniswap/src/features/fiatOnRamp/types.ts index 1d8f4579a95..a559cddf140 100644 --- a/packages/uniswap/src/features/fiatOnRamp/types.ts +++ b/packages/uniswap/src/features/fiatOnRamp/types.ts @@ -1,6 +1,8 @@ import { CurrencyInfo, PortfolioBalance } from 'uniswap/src/features/dataApi/types' import { + LocalOffRampTransactionInfo, LocalOnRampTransactionInfo, + OffRampSaleInfo, OnRampPurchaseInfo, OnRampTransferInfo, TransactionDetails, @@ -14,6 +16,12 @@ export type FiatOnRampTransactionDetails = TransactionDetails & { typeInfo: LocalOnRampTransactionInfo | OnRampPurchaseInfo | OnRampTransferInfo } +export type FiatOffRampTransactionDetails = TransactionDetails & { + typeInfo: LocalOffRampTransactionInfo | OffRampSaleInfo +} + +export type FORTransactionDetails = FiatOnRampTransactionDetails | FiatOffRampTransactionDetails + export type FORCountry = { countryCode: string displayName: string diff --git a/packages/uniswap/src/features/gating/configs.ts b/packages/uniswap/src/features/gating/configs.ts index fe50e9267d4..78f21f3724e 100644 --- a/packages/uniswap/src/features/gating/configs.ts +++ b/packages/uniswap/src/features/gating/configs.ts @@ -17,6 +17,7 @@ export enum DynamicConfigs { UwuLink = 'uwulink_config', GasStrategies = 'gas_strategy', MainnetPrivateRpc = 'mainnet_private_rpc', + DatadogIgnoredErrors = 'datadog_ignored_errors', // Web QuickRouteChains = 'quick_route_chains', @@ -75,6 +76,12 @@ export enum UwuLinkConfigKey { Allowlist = 'allowlist', } +export enum DatadogIgnoredErrorsConfigKey { + Errors = 'errors', +} + +export type DatadogIgnoredErrorsValType = Array<{ messageContains: string; sampleRate: number }> + export type GasStrategyType = 'general' | 'swap' export type GasStrategyConditions = { @@ -95,6 +102,7 @@ export type GasStrategies = { export enum MainnetPrivateRpcConfigKey { UseFlashbots = 'use_flashbots', + FlashbotsBlockRange = 'flashbots_block_range', SendFlashbotsAuthenticationHeader = 'send_authentication_header', } @@ -119,6 +127,7 @@ export type DynamicConfigKeys = { [DynamicConfigs.OnDeviceRecovery]: OnDeviceRecoveryConfigKey [DynamicConfigs.UwuLink]: UwuLinkConfigKey [DynamicConfigs.MainnetPrivateRpc]: MainnetPrivateRpcConfigKey + [DynamicConfigs.DatadogIgnoredErrors]: DatadogIgnoredErrorsConfigKey // Web [DynamicConfigs.QuickRouteChains]: QuickRouteChainsConfigKey diff --git a/packages/uniswap/src/features/gating/flags.ts b/packages/uniswap/src/features/gating/flags.ts index b1fcce2cc02..db368f881b0 100644 --- a/packages/uniswap/src/features/gating/flags.ts +++ b/packages/uniswap/src/features/gating/flags.ts @@ -8,6 +8,8 @@ export enum FeatureFlags { Datadog, ForAggregator, IndicativeSwapQuotes, + InstantTokenBalanceUpdate, + MonadTestnet, PortionFields, SharedSwapArbitrumUniswapXExperiment, TokenProtection, @@ -15,7 +17,6 @@ export enum FeatureFlags { UniswapX, UniswapXPriorityOrders, V4Swap, - MonadTestnet, // Wallet DisableFiatOnRampKorea, @@ -67,6 +68,7 @@ export enum FeatureFlags { export const SHARED_FEATURE_FLAG_NAMES = new Map([ [FeatureFlags.Datadog, 'datadog'], [FeatureFlags.IndicativeSwapQuotes, 'indicative-quotes'], + [FeatureFlags.InstantTokenBalanceUpdate, 'instant-token-balance-update'], [FeatureFlags.MonadTestnet, 'monad_testnet'], [FeatureFlags.PortionFields, 'portion-fields'], [FeatureFlags.SharedSwapArbitrumUniswapXExperiment, 'shared_swap_arbitrum_uniswapx_experiment'], diff --git a/packages/uniswap/src/features/language/saga.ts b/packages/uniswap/src/features/language/saga.ts index 24c171c3653..e07cdc8337c 100644 --- a/packages/uniswap/src/features/language/saga.ts +++ b/packages/uniswap/src/features/language/saga.ts @@ -13,7 +13,7 @@ import { import { getLocale } from 'uniswap/src/features/language/hooks' import { selectCurrentLanguage } from 'uniswap/src/features/settings/selectors' import { setCurrentLanguage, updateLanguage } from 'uniswap/src/features/settings/slice' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { getDeviceLocales } from 'utilities/src/device/locales' import { logger } from 'utilities/src/logger/logger' import { isMobileApp } from 'utilities/src/platform' diff --git a/packages/uniswap/src/features/language/utils.ts b/packages/uniswap/src/features/language/utils.ts new file mode 100644 index 00000000000..106865e6139 --- /dev/null +++ b/packages/uniswap/src/features/language/utils.ts @@ -0,0 +1,8 @@ +import { Language, mapLocaleToLanguage } from 'uniswap/src/features/language/constants' +import { navigatorLocale } from 'uniswap/src/features/language/hooks' + +// Determines the current language based on the user's locale settings, falling back to English if no mapping exists. +export function getCurrentLanguageFromNavigator(): Language { + const locale = navigatorLocale() + return locale ? mapLocaleToLanguage[locale] : Language.English +} diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/constants.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/constants.ts new file mode 100644 index 00000000000..77cbbb10941 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/constants.ts @@ -0,0 +1,7 @@ +import { GQLQueries } from 'uniswap/src/data/graphql/uniswap-data-api/queries' + +export const GQL_QUERIES_TO_REFETCH_ON_TXN_UPDATE = [ + GQLQueries.PortfolioBalances, + GQLQueries.TransactionList, + GQLQueries.NftsTab, +] diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.test.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.test.ts new file mode 100644 index 00000000000..8dfbffc921f --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.test.ts @@ -0,0 +1,166 @@ +import { ApolloCache, NormalizedCacheObject } from '@apollo/client' +import { TokenDocument } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' +import { UniverseChainId } from 'uniswap/src/features/chains/types' +import { getOnChainBalancesFetch } from 'uniswap/src/features/portfolio/api' +import { fetchOnChainBalances } from 'uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' + +jest.mock('uniswap/src/features/portfolio/api', () => ({ + getOnChainBalancesFetch: jest.fn(), +})) + +const mockGetOnChainBalancesFetch = getOnChainBalancesFetch as jest.MockedFunction + +const TEST_ACCOUNT = '0x1234567890123456789012345678901234567890' +const TEST_TOKEN_ADDRESS = '0xabcdef0123456789abcdef0123456789abcdef01' +const TEST_CHAIN_ID = UniverseChainId.Mainnet + +const mockToken = { + id: TEST_TOKEN_ADDRESS, + name: 'Test Token', + symbol: 'TEST', + decimals: 18, + chain: 'ETHEREUM', + address: TEST_TOKEN_ADDRESS, + project: { + id: 'test-project', + __typename: 'TokenProject' as const, + }, + __typename: 'Token' as const, +} + +describe(fetchOnChainBalances, () => { + const mockApolloCache = { + readQuery: jest.fn(), + } as unknown as ApolloCache + + beforeEach(() => { + jest.clearAllMocks() + }) + + it('fetches on-chain balances for valid currency IDs', async () => { + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + const mockBalance = '1000000000000000000' // 1 ETH + + mockGetOnChainBalancesFetch.mockResolvedValueOnce({ + balance: mockBalance, + }) + ;(mockApolloCache.readQuery as jest.Mock).mockReturnValueOnce({ + token: mockToken, + }) + + const result = await fetchOnChainBalances({ + apolloCache: mockApolloCache, + accountAddress: TEST_ACCOUNT, + currencyIds: new Set([currencyId]), + }) + + expect(mockGetOnChainBalancesFetch).toHaveBeenCalledWith({ + currencyAddress: TEST_TOKEN_ADDRESS, + chainId: TEST_CHAIN_ID, + currencyIsNative: false, + accountAddress: TEST_ACCOUNT, + }) + + expect(mockApolloCache.readQuery).toHaveBeenCalledWith({ + query: TokenDocument, + variables: { + chain: 'ETHEREUM', + address: TEST_TOKEN_ADDRESS, + }, + }) + + const onchainBalance = result.get(currencyId) + expect(onchainBalance).toBeDefined() + expect(onchainBalance?.rawBalance).toBe(mockBalance) + expect(onchainBalance?.quantity).toBe(1) + }) + + it('handles native currency correctly', async () => { + const nativeCurrencyAddress = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + const currencyId = buildCurrencyId(TEST_CHAIN_ID, nativeCurrencyAddress) + const mockBalance = '2000000000000000000' // 2 ETH + + mockGetOnChainBalancesFetch.mockResolvedValueOnce({ + balance: mockBalance, + }) + ;(mockApolloCache.readQuery as jest.Mock).mockReturnValueOnce({ + token: { + ...mockToken, + address: nativeCurrencyAddress, + }, + }) + + const result = await fetchOnChainBalances({ + apolloCache: mockApolloCache, + accountAddress: TEST_ACCOUNT, + currencyIds: new Set([currencyId]), + }) + + expect(mockGetOnChainBalancesFetch).toHaveBeenCalledWith({ + currencyAddress: nativeCurrencyAddress, + chainId: TEST_CHAIN_ID, + currencyIsNative: true, + accountAddress: TEST_ACCOUNT, + }) + + const balanceInfo = result.get(currencyId) + expect(balanceInfo).toBeDefined() + expect(balanceInfo?.rawBalance).toBe(mockBalance) + expect(balanceInfo?.quantity).toBe(2) + }) + + it('returns undefined if the token is not found in the Apollo cache', async () => { + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + + mockGetOnChainBalancesFetch.mockResolvedValueOnce({ + balance: '1000000000000000000', + }) + ;(mockApolloCache.readQuery as jest.Mock).mockReturnValueOnce({ + token: null, + }) + + const result = await fetchOnChainBalances({ + apolloCache: mockApolloCache, + accountAddress: TEST_ACCOUNT, + currencyIds: new Set([currencyId]), + }) + + const balanceInfo = result.get(currencyId) + expect(balanceInfo).toBeUndefined() + }) + + it('returns undefined for an invalid currencyId', async () => { + const invalidCurrencyId = 'invalid-currency-id' + + const result = await fetchOnChainBalances({ + apolloCache: mockApolloCache, + accountAddress: TEST_ACCOUNT, + currencyIds: new Set([invalidCurrencyId]), + }) + + expect(result.size).toBe(0) + expect(mockGetOnChainBalancesFetch).not.toHaveBeenCalled() + }) + + it('processes multiple currency IDs in parallel', async () => { + const currencyId1 = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + const currencyId2 = buildCurrencyId(TEST_CHAIN_ID, '0x2222222222222222222222222222222222222222') + + mockGetOnChainBalancesFetch + .mockResolvedValueOnce({ balance: '1000000000000000000' }) + .mockResolvedValueOnce({ balance: '2000000000000000000' }) + ;(mockApolloCache.readQuery as jest.Mock).mockReturnValueOnce({ token: mockToken }).mockReturnValueOnce({ + token: { ...mockToken, address: '0x2222222222222222222222222222222222222222' }, + }) + + const result = await fetchOnChainBalances({ + apolloCache: mockApolloCache, + accountAddress: TEST_ACCOUNT, + currencyIds: new Set([currencyId1, currencyId2]), + }) + + expect(result.size).toBe(2) + expect(mockGetOnChainBalancesFetch).toHaveBeenCalledTimes(2) + }) +}) diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts new file mode 100644 index 00000000000..8328355702e --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts @@ -0,0 +1,83 @@ +import { ApolloCache, NormalizedCacheObject } from '@apollo/client' +import { TokenDocument, TokenQuery } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' +import { UniverseChainId } from 'uniswap/src/features/chains/types' +import { currencyIdToContractInput, gqlTokenToCurrencyInfo } from 'uniswap/src/features/dataApi/utils' +import { getOnChainBalancesFetch } from 'uniswap/src/features/portfolio/api' +import { ValueType, getCurrencyAmount } from 'uniswap/src/features/tokens/getCurrencyAmount' +import { CurrencyId } from 'uniswap/src/types/currency' +import { currencyIdToAddress, currencyIdToChain, isNativeCurrencyAddress } from 'uniswap/src/utils/currencyId' +import { logger } from 'utilities/src/logger/logger' + +type OnChainMap = Map< + CurrencyId, + { currencyAddress: Address; chainId: UniverseChainId; rawBalance?: string; quantity?: number } +> + +export async function fetchOnChainBalances({ + apolloCache, + accountAddress, + currencyIds, +}: { + apolloCache: ApolloCache + accountAddress: Address + currencyIds: Set +}): Promise { + const onchainBalancesByCurrencyId = new Map< + CurrencyId, + { currencyAddress: Address; chainId: UniverseChainId; rawBalance?: string; quantity?: number } + >() + + await Promise.all( + Array.from(currencyIds).map(async (currencyId): Promise => { + const currencyAddress = currencyIdToAddress(currencyId) + const chainId = currencyIdToChain(currencyId) + + if (!currencyAddress || !chainId) { + logger.error(new Error('Unable to parse `currencyId`'), { + tags: { file: 'fetchOnChainBalances.ts', function: 'fetchOnChainBalances' }, + extra: { currencyId }, + }) + return + } + + const { balance: onchainBalance } = await getOnChainBalancesFetch({ + currencyAddress, + chainId, + currencyIsNative: isNativeCurrencyAddress(chainId, currencyAddress), + accountAddress, + }) + + const token = apolloCache.readQuery({ + query: TokenDocument, + variables: currencyIdToContractInput(currencyId), + })?.token + + if (!token) { + logger.warn('fetchOnChainBalances.ts', 'fetchOnChainBalances', 'No `token` found', { currencyId }) + return + } + + const currencyInfo = gqlTokenToCurrencyInfo(token) + + if (!currencyInfo) { + logger.warn('fetchOnChainBalances.ts', 'fetchOnChainBalances', 'No `currency` found') + return + } + + const quantity = getCurrencyAmount({ + value: onchainBalance, + valueType: ValueType.Raw, + currency: currencyInfo.currency, + })?.toExact() + + onchainBalancesByCurrencyId.set(currencyId, { + currencyAddress, + chainId, + rawBalance: onchainBalance, + quantity: quantity ? parseFloat(quantity) : undefined, + }) + }), + ) + + return onchainBalancesByCurrencyId +} diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/getCurrenciesWithExpectedUpdates.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/getCurrenciesWithExpectedUpdates.ts new file mode 100644 index 00000000000..059a68c8ebb --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/getCurrenciesWithExpectedUpdates.ts @@ -0,0 +1,47 @@ +import { TransactionDetails, TransactionType } from 'uniswap/src/features/transactions/types/transactionDetails' +import { CurrencyId } from 'uniswap/src/types/currency' +import { buildCurrencyId, buildNativeCurrencyId, buildWrappedNativeCurrencyId } from 'uniswap/src/utils/currencyId' +import { logger } from 'utilities/src/logger/logger' + +// based on transaction data, determine which currencies we expect to see a balance update on +export function getCurrenciesWithExpectedUpdates(transaction: TransactionDetails): Set | undefined { + const currenciesWithBalToUpdate: Set = new Set() + const txChainId = transaction.chainId + + // All txs besides FOR at least use gas so check for update of gas token + currenciesWithBalToUpdate.add(buildNativeCurrencyId(txChainId)) + + switch (transaction.typeInfo?.type) { + case TransactionType.Swap: + case TransactionType.Bridge: + currenciesWithBalToUpdate.add(transaction.typeInfo.inputCurrencyId.toLowerCase()) + currenciesWithBalToUpdate.add(transaction.typeInfo.outputCurrencyId.toLowerCase()) + break + case TransactionType.Send: + currenciesWithBalToUpdate.add(buildCurrencyId(txChainId, transaction.typeInfo.tokenAddress).toLowerCase()) + break + case TransactionType.Wrap: + currenciesWithBalToUpdate.add(buildWrappedNativeCurrencyId(txChainId)) + break + case TransactionType.OnRampPurchase: + case TransactionType.OnRampTransfer: + case TransactionType.OffRampSale: + currenciesWithBalToUpdate.add( + buildCurrencyId(txChainId, transaction.typeInfo.destinationTokenAddress).toLowerCase(), + ) + break + default: + logger.info( + 'getCurrenciesWithExpectedUpdates.ts', + 'getCurrenciesWithExpectedUpdates', + 'Unhandled transaction type', + { + type: transaction.typeInfo?.type, + info: JSON.stringify(transaction.typeInfo), + }, + ) + break + } + + return currenciesWithBalToUpdate +} diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/getInstantTokenBalanceUpdateApolloLink.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/getInstantTokenBalanceUpdateApolloLink.ts new file mode 100644 index 00000000000..f6221c7526f --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/getInstantTokenBalanceUpdateApolloLink.ts @@ -0,0 +1,332 @@ +import { ApolloCache, ApolloLink, NormalizedCacheObject } from '@apollo/client' +import { Reference, asyncMap } from '@apollo/client/utilities' +// eslint-disable-next-line no-restricted-imports +import { ToolkitStore } from '@reduxjs/toolkit/dist/configureStore' +import { getNativeAddress } from 'uniswap/src/constants/addresses' +import { + Currency, + Portfolio, + TokenBalance, + TokenBalancePartsFragmentDoc, + TokenDocument, + TokenQuery, +} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' +import { GQLQueries } from 'uniswap/src/data/graphql/uniswap-data-api/queries' +import { fromGraphQLChain } from 'uniswap/src/features/chains/utils' +import { currencyIdToContractInput } from 'uniswap/src/features/dataApi/utils' +import { fetchOnChainBalances } from 'uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances' +import { makeSelectTokenBalanceOverridesForWalletAddress } from 'uniswap/src/features/portfolio/slice/selectors' +import { + removeExpiredBalanceOverrides, + removeTokenFromBalanceOverride, +} from 'uniswap/src/features/portfolio/slice/slice' +import { CurrencyId } from 'uniswap/src/types/currency' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' +import { logger } from 'utilities/src/logger/logger' + +const APPROXIMATE_EQUALITY_THRESHOLD_PERCENT = 0.02 // 2% + +export function getInstantTokenBalanceUpdateApolloLink({ reduxStore }: { reduxStore: ToolkitStore }): ApolloLink { + return new ApolloLink((operation, forward) => { + if (operation.operationName !== GQLQueries.PortfolioBalances) { + return forward(operation) + } + + return asyncMap(forward(operation), async (response) => { + try { + const walletAddress = operation.variables.ownerAddress as string + + reduxStore.dispatch(removeExpiredBalanceOverrides()) + const selectTokenBalanceOverridesForWalletAddress = makeSelectTokenBalanceOverridesForWalletAddress() + const tokenBalanceOverrides = selectTokenBalanceOverridesForWalletAddress(reduxStore.getState(), walletAddress) + + if (!tokenBalanceOverrides) { + return response + } + + logger.debug( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] Maybe overriding token balance in apollo response', + ) + + if (!response?.data?.portfolios) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] Unexpected response from `PortfolioBalances` query', + { response }, + ) + return response + } + + const data = response.data as Maybe<{ portfolios: Array }> + const tokenBalances = data?.portfolios?.[0]?.tokenBalances + + if (!tokenBalances) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] No `tokenBalances` array found in `PortfolioBalances` response', + { response }, + ) + return response + } + + const { cache: apolloCache } = operation.getContext() as { cache: ApolloCache } + + const onchainBalancesByCurrencyId = await fetchOnChainBalances({ + apolloCache, + accountAddress: walletAddress, + currencyIds: new Set(Object.keys(tokenBalanceOverrides)), + }) + + logger.debug( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] Onchain balances fetched', + { onchainBalancesByCurrencyId }, + ) + + const tokenBalanceAlreadyExists: Record = {} + + tokenBalances.forEach((tokenBalance) => { + if (!tokenBalance) { + return + } + + const chainId = fromGraphQLChain(tokenBalance.token?.chain) + + if (!chainId) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] No `chain` found for token', + { tokenBalance }, + ) + return + } + + const tokenAddress = tokenBalance.token?.address ?? getNativeAddress(chainId) + const currencyId = buildCurrencyId(chainId, tokenAddress).toLowerCase() + + const tokenBalanceOverride = tokenBalanceOverrides[currencyId] + + if (!tokenBalanceOverride) { + return + } + + tokenBalanceAlreadyExists[currencyId] = true + + const onchainBalance = onchainBalancesByCurrencyId.get(currencyId) + + if (!onchainBalance?.quantity) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] No `onchainBalance.quantity` found for token', + { currencyId, walletAddress }, + ) + return + } + + const onchainQuantity = onchainBalance.quantity + const cachedQuantity = tokenBalance.quantity + + // The backend seems to be truncating some decimals for certain tokens, + // so instead of checking for exact equality, we check if the quantities are "aproximately" equal. + const areQuantitiesAproximatelyEqual = + typeof cachedQuantity === 'number' + ? Math.abs(onchainQuantity - cachedQuantity) / cachedQuantity <= APPROXIMATE_EQUALITY_THRESHOLD_PERCENT + : false + + if (areQuantitiesAproximatelyEqual) { + logger.debug( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] Quantities are aproximately equal, removing from store', + { cachedQuantity, onchainQuantity }, + ) + + reduxStore.dispatch( + removeTokenFromBalanceOverride({ + ownerAddress: walletAddress, + chainId, + tokenAddress, + }), + ) + + return + } + + tokenBalance.quantity = onchainQuantity + + logger.debug( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] Overriding quantity', + { cachedQuantity, onchainQuantity }, + ) + + if (cachedQuantity && tokenBalance.denominatedValue?.value) { + tokenBalance.denominatedValue = { + ...tokenBalance.denominatedValue, + value: (tokenBalance.denominatedValue.value * onchainQuantity) / cachedQuantity, + } + } + }) + + if (tokenBalanceOverrides.length === tokenBalanceAlreadyExists.length) { + return response + } + + const missingTokenBalances = Object.keys(tokenBalanceOverrides).filter( + (currencyId) => !tokenBalanceAlreadyExists[currencyId], + ) + + missingTokenBalances.forEach((currencyId) => { + const onchainBalanceQuantity = onchainBalancesByCurrencyId.get(currencyId)?.quantity + + if (onchainBalanceQuantity === undefined) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'getInstantTokenBalanceUpdateApolloLink', + '[ITBU] No `onchainBalance.quantity` found for token', + { currencyId, walletAddress }, + ) + return + } + + const newTokenBalance = createTokenBalance({ + apolloCache, + ownerAddress: walletAddress, + currencyId, + onchainBalanceQuantity, + }) + + if (!newTokenBalance) { + // This shouldn't happen, but if it does, we're already logging it in `createTokenBalance`. + return + } + + tokenBalances.push(newTokenBalance) + }) + + return response + } catch (error) { + logger.error(error, { + tags: { + file: 'getInstantTokenBalanceUpdateApolloLink.ts', + function: 'getInstantTokenBalanceUpdateApolloLink', + }, + }) + + return response + } + }) + }) +} + +export function createTokenBalanceRef({ + apolloCache, + ownerAddress, + currencyId, + onchainBalanceQuantity, +}: { + apolloCache: ApolloCache + ownerAddress: Address + currencyId: CurrencyId + onchainBalanceQuantity: number +}): Reference | null { + const token = apolloCache.readQuery({ + query: TokenDocument, + variables: currencyIdToContractInput(currencyId), + })?.token + + if (!token) { + logger.warn('getInstantTokenBalanceUpdateApolloLink.ts', 'createTokenBalance', 'No `token` found', { currencyId }) + return null + } + + // This must match our graphql backend ID generation. + const tokenBalanceId = generateEntityId('TokenBalance', [ownerAddress, token.id, Currency.Usd]) + + const newTokenBalanceRef = apolloCache.writeFragment({ + data: { + __typename: 'TokenBalance' satisfies TokenBalance['__typename'], + id: tokenBalanceId, + quantity: onchainBalanceQuantity, + // TODO(WALL-5548): Fetch and calculate USD value for new tokens that are not already in the user's balance. + denominatedValue: null, + isHidden: false, + token, + tokenProjectMarket: { + relativeChange24: null, + }, + }, + fragment: TokenBalancePartsFragmentDoc, + fragmentName: 'TokenBalanceParts', + }) + + if (!newTokenBalanceRef) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'createTokenBalance', + 'Failed to write `newTokenBalanceRef`', + { + tokenBalanceId, + ownerAddress, + currencyId, + }, + ) + return null + } + + return newTokenBalanceRef +} + +function createTokenBalance({ + apolloCache, + ownerAddress, + currencyId, + onchainBalanceQuantity, +}: Parameters[0]): TokenBalance | null { + const newTokenBalanceRef = createTokenBalanceRef({ + apolloCache, + ownerAddress, + currencyId, + onchainBalanceQuantity, + }) + + if (!newTokenBalanceRef) { + return null + } + + const newTokenBalance = apolloCache.readFragment({ + id: apolloCache.identify(newTokenBalanceRef), + fragment: TokenBalancePartsFragmentDoc, + fragmentName: 'TokenBalanceParts', + }) + + if (!newTokenBalance) { + logger.warn( + 'getInstantTokenBalanceUpdateApolloLink.ts', + 'createTokenBalance', + '[ITBU] Failed to read `newTokenBalance` from cache', + { currencyId, ownerAddress }, + ) + return null + } + + return newTokenBalance +} + +// Copy/pasted from our graphql backend +function generateEntityId(typeName: string, identifiers: Array): string { + const id = identifiers + .map((x) => { + return x === null ? 'null' : x // we allow null identifiers because null is a valid value for addresses (ex. native eth) + }) + .join('_') + return Buffer.from(`${typeName}:${id}`).toString('base64') +} diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/isInstantTokenBalanceUpdateEnabled.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/isInstantTokenBalanceUpdateEnabled.ts new file mode 100644 index 00000000000..481c3c17190 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/isInstantTokenBalanceUpdateEnabled.ts @@ -0,0 +1,6 @@ +import { FeatureFlags, getFeatureFlagName } from 'uniswap/src/features/gating/flags' +import { Statsig } from 'uniswap/src/features/gating/sdk/statsig' + +export function isInstantTokenBalanceUpdateEnabled(): boolean { + return Statsig.checkGate(getFeatureFlagName(FeatureFlags.InstantTokenBalanceUpdate)) +} diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesSaga.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesSaga.ts new file mode 100644 index 00000000000..eb6418bc568 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesSaga.ts @@ -0,0 +1,22 @@ +import { ApolloClient, NormalizedCacheObject } from '@apollo/client' +import { isInstantTokenBalanceUpdateEnabled } from 'uniswap/src/features/portfolio/portfolioUpdates/isInstantTokenBalanceUpdateEnabled' +import { refetchGQLQueriesViaBackendPollVariant } from 'uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaBackendPollVariantSaga' +import { refetchGQLQueriesViaOnchainOverrideVariant } from 'uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaOnchainOverrideVariantSaga' + +import { TransactionDetails } from 'uniswap/src/features/transactions/types/transactionDetails' + +export function* refetchGQLQueries({ + transaction, + apolloClient, + activeAddress, +}: { + transaction: TransactionDetails + apolloClient: ApolloClient + activeAddress: string | null +}) { + if (isInstantTokenBalanceUpdateEnabled()) { + yield* refetchGQLQueriesViaOnchainOverrideVariant({ transaction, apolloClient, activeAddress }) + } else { + yield* refetchGQLQueriesViaBackendPollVariant({ transaction, apolloClient, activeAddress }) + } +} diff --git a/packages/uniswap/src/features/transactions/refetchGQLQueriesSaga.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaBackendPollVariantSaga.ts similarity index 77% rename from packages/uniswap/src/features/transactions/refetchGQLQueriesSaga.ts rename to packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaBackendPollVariantSaga.ts index eab54d01dc4..58f502fb75d 100644 --- a/packages/uniswap/src/features/transactions/refetchGQLQueriesSaga.ts +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaBackendPollVariantSaga.ts @@ -10,28 +10,24 @@ import { GQL_MAINNET_CHAINS, GQL_TESTNET_CHAINS } from 'uniswap/src/features/cha import { fromGraphQLChain } from 'uniswap/src/features/chains/utils' import { DynamicConfigs, NetworkRequestsConfigKey } from 'uniswap/src/features/gating/configs' import { getDynamicConfigValue } from 'uniswap/src/features/gating/hooks' +import { GQL_QUERIES_TO_REFETCH_ON_TXN_UPDATE } from 'uniswap/src/features/portfolio/portfolioUpdates/constants' +import { getCurrenciesWithExpectedUpdates } from 'uniswap/src/features/portfolio/portfolioUpdates/getCurrenciesWithExpectedUpdates' import { selectIsTestnetModeEnabled } from 'uniswap/src/features/settings/selectors' import { WalletEventName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' -import { TransactionDetails, TransactionType } from 'uniswap/src/features/transactions/types/transactionDetails' +import { TransactionDetails } from 'uniswap/src/features/transactions/types/transactionDetails' import { CurrencyId } from 'uniswap/src/types/currency' -import { buildCurrencyId, buildNativeCurrencyId, buildWrappedNativeCurrencyId } from 'uniswap/src/utils/currencyId' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' import { logger } from 'utilities/src/logger/logger' import { ONE_SECOND_MS } from 'utilities/src/time/time' -export const GQL_QUERIES_TO_REFETCH_ON_TXN_UPDATE = [ - GQLQueries.PortfolioBalances, - GQLQueries.TransactionList, - GQLQueries.NftsTab, -] - type CurrencyIdToBalance = Record const REFETCH_INTERVAL = ONE_SECOND_MS * 3 const MAX_REFETCH_ATTEMPTS_FALLBACK = 30 -export function* refetchGQLQueries({ +export function* refetchGQLQueriesViaBackendPollVariant({ transaction, apolloClient, activeAddress, @@ -131,43 +127,6 @@ export function* refetchGQLQueries({ }) } -// based on transaction data, determine which currencies we expect to see a balance update on -function getCurrenciesWithExpectedUpdates(transaction: TransactionDetails): Set | undefined { - const currenciesWithBalToUpdate: Set = new Set() - const txChainId = transaction.chainId - - // All txs besides FOR at least use gas so check for update of gas token - currenciesWithBalToUpdate.add(buildNativeCurrencyId(txChainId)) - - switch (transaction.typeInfo?.type) { - case TransactionType.Swap: - case TransactionType.Bridge: - currenciesWithBalToUpdate.add(transaction.typeInfo.inputCurrencyId.toLowerCase()) - currenciesWithBalToUpdate.add(transaction.typeInfo.outputCurrencyId.toLowerCase()) - break - case TransactionType.Send: - currenciesWithBalToUpdate.add(buildCurrencyId(txChainId, transaction.typeInfo.tokenAddress).toLowerCase()) - break - case TransactionType.Wrap: - currenciesWithBalToUpdate.add(buildWrappedNativeCurrencyId(txChainId)) - break - case TransactionType.OnRampPurchase: - case TransactionType.OnRampTransfer: - currenciesWithBalToUpdate.add( - buildCurrencyId(txChainId, transaction.typeInfo.destinationTokenAddress).toLowerCase(), - ) - break - default: - logger.info('refetchGQLQueriesSaga', 'getCurrenciesWithExpectedUpdates', 'Unhandled transaction type', { - type: transaction.typeInfo?.type, - info: JSON.stringify(transaction.typeInfo), - }) - break - } - - return currenciesWithBalToUpdate -} - function readBalancesFromCache({ owner, currencyIds, @@ -226,7 +185,7 @@ function readBalancesFromCache({ return currencyIdToBalance } -function checkIfBalancesUpdated(balance1: CurrencyIdToBalance, balance2: Maybe) { +function checkIfBalancesUpdated(balance1: CurrencyIdToBalance, balance2: Maybe): boolean { if (!balance2) { return true } // if no currencies to check, then assume balances are updated diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaOnchainOverrideVariantSaga.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaOnchainOverrideVariantSaga.ts new file mode 100644 index 00000000000..ba0f6ce61f6 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesViaOnchainOverrideVariantSaga.ts @@ -0,0 +1,208 @@ +import { ApolloClient, NormalizedCacheObject, Reference } from '@apollo/client' +import { AsStoreObject, isArray, isReference } from '@apollo/client/utilities' +import { call, delay, put } from 'typed-redux-saga' +import { getNativeAddress } from 'uniswap/src/constants/addresses' +import { + Amount, + PortfolioBalancesDocument, + PortfolioBalancesQuery, +} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' +import { fromGraphQLChain } from 'uniswap/src/features/chains/utils' +import { GQL_QUERIES_TO_REFETCH_ON_TXN_UPDATE } from 'uniswap/src/features/portfolio/portfolioUpdates/constants' +import { fetchOnChainBalances } from 'uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances' +import { getCurrenciesWithExpectedUpdates } from 'uniswap/src/features/portfolio/portfolioUpdates/getCurrenciesWithExpectedUpdates' +import { createTokenBalanceRef } from 'uniswap/src/features/portfolio/portfolioUpdates/getInstantTokenBalanceUpdateApolloLink' +import { addTokensToBalanceOverride } from 'uniswap/src/features/portfolio/slice/slice' +import { getEnabledChainIdsSaga } from 'uniswap/src/features/settings/saga' +import { TransactionDetails } from 'uniswap/src/features/transactions/types/transactionDetails' +import { CurrencyId } from 'uniswap/src/types/currency' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' +import { logger } from 'utilities/src/logger/logger' +import { ONE_SECOND_MS } from 'utilities/src/time/time' + +const REFETCH_DELAY = ONE_SECOND_MS * 3 + +export function* refetchGQLQueriesViaOnchainOverrideVariant({ + transaction, + apolloClient, + activeAddress, +}: { + transaction: TransactionDetails + apolloClient: ApolloClient + activeAddress: string | null +}): Generator { + const owner = transaction.from + const currenciesWithBalanceToUpdate = getCurrenciesWithExpectedUpdates(transaction) + + if (owner !== activeAddress) { + // We can ignore if the transaction does not belong to the active account. + return + } + + if (currenciesWithBalanceToUpdate) { + // We override the apollo cache with the onchain balances. + yield* call(modifyLocalCache, { + apolloClient, + ownerAddress: activeAddress, + currencyIds: currenciesWithBalanceToUpdate, + }) + } + + // When there is a new local tx, we wait `REFETCH_DELAY` and then refetch all queries. + yield* delay(REFETCH_DELAY) + + // We refetch all queries for the Tokens, NFT and Activity tabs. + yield* call([apolloClient, apolloClient.refetchQueries], { include: GQL_QUERIES_TO_REFETCH_ON_TXN_UPDATE }) + + // On every refetch going forward, our custom ApolloLink in `getInstantTokenBalanceUpdateApolloLink.ts` will do another onchain balance check + // and will continue to override the apollo cache balance until backend balance matches the onchain balance. +} + +export function* modifyLocalCache({ + apolloClient, + ownerAddress, + currencyIds, +}: { + apolloClient: ApolloClient + ownerAddress: string + currencyIds: Set +}) { + yield* put( + addTokensToBalanceOverride({ + ownerAddress, + currencyIds: Array.from(currencyIds), + }), + ) + + const onchainBalancesByCurrencyId = yield* call(fetchOnChainBalances, { + apolloCache: apolloClient.cache, + accountAddress: ownerAddress, + currencyIds, + }) + + const { gqlChains } = yield* call(getEnabledChainIdsSaga) + + const cachedPortfolio = apolloClient.readQuery({ + query: PortfolioBalancesDocument, + variables: { + ownerAddress, + chains: gqlChains, + }, + })?.portfolios?.[0] + + if (!cachedPortfolio) { + logger.warn( + 'refetchGQLQueriesViaOnchainOverrideVariantSaga.ts', + 'modifyLocalCache', + '[ITBU] No `cachedPortfolio` found', + ) + return + } + + apolloClient.cache.modify({ + id: apolloClient.cache.identify(cachedPortfolio), + fields: { + tokenBalances(tokenBalancesRefs: Reference | readonly Reference[], { readField }) { + if (!isArray(tokenBalancesRefs)) { + return tokenBalancesRefs + } + + // We first look for an existing `TokenBalance` that we can update. + tokenBalancesRefs.forEach((tokenBalanceRef) => { + const tokenRef = readField('token', tokenBalanceRef) + const chainId = fromGraphQLChain(readField('chain', tokenRef)) + const tokenAddress = chainId ? readField
('address', tokenRef) ?? getNativeAddress(chainId) : null + + if (!tokenRef || !chainId || !tokenAddress) { + return + } + + const currencyId = buildCurrencyId(chainId, tokenAddress).toLowerCase() + const onchainQuantity = onchainBalancesByCurrencyId.get(currencyId)?.quantity + onchainBalancesByCurrencyId.delete(currencyId) + + if (onchainQuantity === undefined) { + logger.warn( + 'refetchGQLQueriesViaOnchainOverrideVariantSaga.ts', + 'modifyLocalCache', + '[ITBU] Unable to override local cache because of missing `onchainQuantity`', + { + currencyId, + }, + ) + return + } + + const cachedQuantity = readField('quantity', tokenBalanceRef) + + apolloClient.cache.modify({ + id: apolloClient.cache.identify(tokenBalanceRef), + fields: { + quantity: () => { + return onchainQuantity + }, + denominatedValue: (cachedDenominatedValue: Reference | AsStoreObject) => { + if (!cachedQuantity) { + return cachedDenominatedValue + } + + if (isReference(cachedDenominatedValue)) { + // This should never happen unless there's a regression in our apollo cache config. + logger.error(new Error('Unexpected `cachedDenominatedValue` as Reference instead of Amount'), { + tags: { + file: 'refetchGQLQueriesViaOnchainOverrideVariantSaga.ts', + function: 'modifyLocalCache', + }, + extra: { + currencyId, + cachedDenominatedValue, + }, + }) + return cachedDenominatedValue + } + + return { + ...cachedDenominatedValue, + value: (cachedDenominatedValue.value * onchainQuantity) / cachedQuantity, + } + }, + }, + }) + }) + + // If there are any tokens left in `onchainBalancesByCurrencyId`, it means the user swapped for a new token so we need to create new `TokenBalance` entries. + const newTokenBalancesRefs: Reference[] = [] + + Array.from(onchainBalancesByCurrencyId).forEach(([currencyId]) => { + const onchainBalanceQuantity = onchainBalancesByCurrencyId.get(currencyId)?.quantity + + if (onchainBalanceQuantity === undefined) { + logger.warn( + 'refetchGQLQueriesViaOnchainOverrideVariantSaga.ts', + 'modifyLocalCache', + '[ITBU] No `onchainBalance.quantity` found for token', + { currencyId, ownerAddress }, + ) + return + } + + const newTokenBalanceRef = createTokenBalanceRef({ + apolloCache: apolloClient.cache, + ownerAddress, + currencyId, + onchainBalanceQuantity, + }) + + if (!newTokenBalanceRef) { + // This shouldn't happen, but if it does we're already logging this in `createTokenBalanceRef`. + return + } + + newTokenBalancesRefs.push(newTokenBalanceRef) + }) + + return newTokenBalancesRefs.length > 0 ? [...tokenBalancesRefs, ...newTokenBalancesRefs] : tokenBalancesRefs + }, + }, + }) +} diff --git a/packages/uniswap/src/features/portfolio/slice/selectors.ts b/packages/uniswap/src/features/portfolio/slice/selectors.ts new file mode 100644 index 00000000000..b83c322f366 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/slice/selectors.ts @@ -0,0 +1,17 @@ +import { Selector, createSelector } from '@reduxjs/toolkit' +import { PortfolioState, TokenBalanceOverride } from 'uniswap/src/features/portfolio/slice/slice' +import { UniswapState } from 'uniswap/src/state/uniswapReducer' + +export const selectTokenBalanceOverrides = (state: UniswapState): PortfolioState['tokenBalanceOverrides'] => + state.portfolio.tokenBalanceOverrides + +export const makeSelectTokenBalanceOverridesForWalletAddress = (): Selector< + UniswapState, + undefined | TokenBalanceOverride, + [Address] +> => + createSelector( + selectTokenBalanceOverrides, + (_: UniswapState, walletAddress: Address) => walletAddress, + (tokenBalanceOverrides, walletAddress) => tokenBalanceOverrides[walletAddress.toLowerCase()], + ) diff --git a/packages/uniswap/src/features/portfolio/slice/slice.test.ts b/packages/uniswap/src/features/portfolio/slice/slice.test.ts new file mode 100644 index 00000000000..3f75fd1e912 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/slice/slice.test.ts @@ -0,0 +1,179 @@ +import { UniverseChainId } from 'uniswap/src/features/chains/types' +import { + addTokensToBalanceOverride, + initialPortfolioState, + portfolioReducer, + removeExpiredBalanceOverrides, + removeTokenFromBalanceOverride, +} from 'uniswap/src/features/portfolio/slice/slice' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' + +const TEST_ADDRESS1 = '0x1234567890123456789012345678901234567890' +const TEST_ADDRESS2 = '0x0987654321098765432109876543210987654321' +const TEST_TOKEN_ADDRESS = '0xabcdef0123456789abcdef0123456789abcdef01' +const TEST_CHAIN_ID = UniverseChainId.Mainnet + +describe(portfolioReducer, () => { + describe(addTokensToBalanceOverride, () => { + it('adds token overrides for a valid address', () => { + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + + const state = portfolioReducer( + initialPortfolioState, + addTokensToBalanceOverride({ + ownerAddress: TEST_ADDRESS1, + currencyIds: [currencyId], + }), + ) + + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]).toBeDefined() + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]?.[currencyId]).toBeDefined() + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]?.[currencyId]?.updatedAt).toBeGreaterThan(0) + }) + + it('ignores invalid addresses', () => { + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + + const state = portfolioReducer( + initialPortfolioState, + addTokensToBalanceOverride({ + ownerAddress: 'invalid-address', + currencyIds: [currencyId], + }), + ) + + expect(state).toEqual(initialPortfolioState) + }) + + it('updates existing overrides', () => { + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + + let state = portfolioReducer( + initialPortfolioState, + addTokensToBalanceOverride({ + ownerAddress: TEST_ADDRESS1, + currencyIds: [currencyId], + }), + ) + + const firstTimestamp = state.tokenBalanceOverrides[TEST_ADDRESS1]![currencyId]!.updatedAt + + // Wait a small amount to ensure different timestamps + jest.advanceTimersByTime(1000) + + state = portfolioReducer( + state, + addTokensToBalanceOverride({ + ownerAddress: TEST_ADDRESS1, + currencyIds: [currencyId], + }), + ) + + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]![currencyId]!.updatedAt).toBeGreaterThan(firstTimestamp) + }) + }) + + describe(removeTokenFromBalanceOverride, () => { + it('removes token override for valid address', () => { + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + + let state = portfolioReducer( + initialPortfolioState, + addTokensToBalanceOverride({ + ownerAddress: TEST_ADDRESS1, + currencyIds: [currencyId], + }), + ) + + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]).toBeDefined() + + state = portfolioReducer( + state, + removeTokenFromBalanceOverride({ + ownerAddress: TEST_ADDRESS1, + chainId: TEST_CHAIN_ID, + tokenAddress: TEST_TOKEN_ADDRESS, + }), + ) + + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]).toBeUndefined() + }) + + it('ignores invalid addresses', () => { + const initialState = { + ...initialPortfolioState, + tokenBalanceOverrides: { + [TEST_ADDRESS1]: { + [buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS)]: { + updatedAt: Date.now(), + }, + }, + }, + } + + const state = portfolioReducer( + initialState, + removeTokenFromBalanceOverride({ + ownerAddress: 'invalid-address', + chainId: TEST_CHAIN_ID, + tokenAddress: TEST_TOKEN_ADDRESS, + }), + ) + + expect(state).toEqual(initialState) + }) + }) + + describe(removeExpiredBalanceOverrides, () => { + it('removes expired overrides', () => { + const now = Date.now() + const currencyId = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + + const initialState = { + ...initialPortfolioState, + tokenBalanceOverrides: { + [TEST_ADDRESS1]: { + [currencyId]: { + updatedAt: now - 31 * 60 * 1000, // 31 minutes ago (expired) + }, + }, + [TEST_ADDRESS2]: { + [currencyId]: { + updatedAt: now - 29 * 60 * 1000, // 29 minutes ago (not expired) + }, + }, + }, + } + + const state = portfolioReducer(initialState, removeExpiredBalanceOverrides()) + + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]).toBeUndefined() + expect(state.tokenBalanceOverrides[TEST_ADDRESS2]).toBeDefined() + }) + + it('removes account entry when all overrides are expired', () => { + const now = Date.now() + const currencyId1 = buildCurrencyId(TEST_CHAIN_ID, TEST_TOKEN_ADDRESS) + const currencyId2 = buildCurrencyId(TEST_CHAIN_ID, TEST_ADDRESS2) + + const initialState = { + ...initialPortfolioState, + tokenBalanceOverrides: { + [TEST_ADDRESS1]: { + [currencyId1]: { + updatedAt: now - 31 * 60 * 1000, // expired + }, + [currencyId2]: { + updatedAt: now - 31 * 60 * 1000, // expired + }, + }, + }, + } + + const state = portfolioReducer(initialState, removeExpiredBalanceOverrides()) + + expect(state.tokenBalanceOverrides[TEST_ADDRESS1]).toBeUndefined() + expect(Object.keys(state.tokenBalanceOverrides)).toHaveLength(0) + }) + }) +}) diff --git a/packages/uniswap/src/features/portfolio/slice/slice.ts b/packages/uniswap/src/features/portfolio/slice/slice.ts new file mode 100644 index 00000000000..661d89e7c98 --- /dev/null +++ b/packages/uniswap/src/features/portfolio/slice/slice.ts @@ -0,0 +1,104 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import { UniverseChainId } from 'uniswap/src/features/chains/types' +import { CurrencyId } from 'uniswap/src/types/currency' +import { getValidAddress } from 'uniswap/src/utils/addresses' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' +import { logger } from 'utilities/src/logger/logger' + +const OVERRIDE_MAX_AGE = 30 * 60 * 1000 // 30 minutes + +export type TokenBalanceOverride = Record + +export type PortfolioState = { + tokenBalanceOverrides: Record +} + +export const initialPortfolioState: PortfolioState = { + tokenBalanceOverrides: {}, +} + +const slice = createSlice({ + name: 'portfolio', + initialState: initialPortfolioState, + reducers: { + addTokensToBalanceOverride: (state, action: PayloadAction<{ ownerAddress: Address; currencyIds: string[] }>) => { + const { ownerAddress, currencyIds } = action.payload + + const accountId = getValidAddress(ownerAddress) + + if (!accountId) { + logger.error(new Error('Unexpected call to `addTokensToBalanceOverride` with an invalid address'), { + tags: { file: 'portfolio/slice/slice.ts', function: 'addTokensToBalanceOverride' }, + extra: { ownerAddress, currencyIds }, + }) + return + } + + const accountOverrides = state.tokenBalanceOverrides[accountId] ?? {} + + const now = new Date().getTime() + currencyIds.forEach((currencyId) => { + accountOverrides[currencyId] = { + updatedAt: now, + } + }) + + state.tokenBalanceOverrides[accountId] = accountOverrides + }, + removeTokenFromBalanceOverride: ( + state, + action: PayloadAction<{ ownerAddress: Address; chainId: UniverseChainId; tokenAddress: Address }>, + ) => { + const { ownerAddress, chainId, tokenAddress } = action.payload + + const accountId = getValidAddress(ownerAddress) + + if (!accountId) { + logger.error(new Error('Unexpected call to `removeTokenFromBalanceOverride` with an invalid address'), { + tags: { file: 'portfolio/slice/slice.ts', function: 'removeTokenFromBalanceOverride' }, + extra: { ownerAddress, chainId, tokenAddress }, + }) + return + } + + const currencyId = buildCurrencyId(chainId, tokenAddress).toLowerCase() + + delete state.tokenBalanceOverrides[accountId]?.[currencyId] + + if (Object.keys(state.tokenBalanceOverrides[accountId] ?? {}).length === 0) { + delete state.tokenBalanceOverrides[accountId] + } + }, + removeExpiredBalanceOverrides: (state) => { + Object.keys(state.tokenBalanceOverrides).forEach((accountId) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const accountOverrides = state.tokenBalanceOverrides[accountId]! + + const now = Date.now() + + Object.keys(accountOverrides).forEach((currencyId) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if (now - accountOverrides[currencyId]!.updatedAt > OVERRIDE_MAX_AGE) { + logger.warn( + 'portfolio/slice/slice.ts', + 'removeExpiredBalanceOverrides', + `[ITBU] Removing expired token balance override for ${accountId}: ${currencyId}`, + ) + + delete accountOverrides[currencyId] + } + }) + + // If the account has no overrides left, remove the account entry. + if (Object.keys(accountOverrides).length === 0) { + delete state.tokenBalanceOverrides[accountId] + } + }) + }, + }, +}) + +export const { addTokensToBalanceOverride, removeTokenFromBalanceOverride, removeExpiredBalanceOverrides } = + slice.actions + +export const portfolioReducer = slice.reducer diff --git a/packages/uniswap/src/features/providers/FlashbotsRpcProvider.test.ts b/packages/uniswap/src/features/providers/FlashbotsRpcProvider.test.ts index a533640e51a..26983c77011 100644 --- a/packages/uniswap/src/features/providers/FlashbotsRpcProvider.test.ts +++ b/packages/uniswap/src/features/providers/FlashbotsRpcProvider.test.ts @@ -1,7 +1,10 @@ import { Signer } from '@ethersproject/abstract-signer' import { JsonRpcProvider } from '@ethersproject/providers' import { ConnectionInfo } from '@ethersproject/web' -import { FlashbotsRpcProvider } from 'uniswap/src/features/providers/FlashbotsRpcProvider' +import { + FLASHBOTS_DEFAULT_BLOCK_RANGE, + FlashbotsRpcProvider, +} from 'uniswap/src/features/providers/FlashbotsRpcProvider' jest.mock('@ethersproject/web') const testAddress = '0xF570F45f598fD48AF83FABD692629a2caFe899ec' @@ -18,7 +21,7 @@ describe('FlashbotsRpcProvider', () => { getAddress: jest.fn().mockResolvedValue(testAddress), signMessage: jest.fn().mockResolvedValue('0xsignature'), } as unknown as jest.Mocked - provider = new FlashbotsRpcProvider(mockSigner) + provider = new FlashbotsRpcProvider(FLASHBOTS_DEFAULT_BLOCK_RANGE, mockSigner) }) afterEach(() => { diff --git a/packages/uniswap/src/features/providers/FlashbotsRpcProvider.ts b/packages/uniswap/src/features/providers/FlashbotsRpcProvider.ts index fa15ace8ede..b7fc7e9e81e 100644 --- a/packages/uniswap/src/features/providers/FlashbotsRpcProvider.ts +++ b/packages/uniswap/src/features/providers/FlashbotsRpcProvider.ts @@ -4,6 +4,8 @@ import { id } from '@ethersproject/hash' import { resolveProperties } from '@ethersproject/properties' import { BlockTag, JsonRpcProvider } from '@ethersproject/providers' import { ConnectionInfo, fetchJson } from '@ethersproject/web' +import { sleep } from 'utilities/src/time/timing' +import { z } from 'zod' /** * A provider that uses a signer to authenticate requests. @@ -17,7 +19,32 @@ class AuthenticatedJsonRpcProvider extends JsonRpcProvider { } } +/** + * Interface representing the structure of the response from Flashbots API. + * @see {@link https://protect.flashbots.net/tx/docs} + */ +const FlashbotsReceiptSchema = z.object({ + status: z.enum(['UNKNOWN', 'PENDING', 'INCLUDED', 'FAILED', 'CANCELLED']), + hash: z.string(), + maxBlockNumber: z.number(), + transaction: z.object({ + from: z.string(), + to: z.string(), + gasLimit: z.string(), + maxFeePerGas: z.string(), + maxPriorityFeePerGas: z.string(), + nonce: z.string(), + value: z.string(), + }), + fastMode: z.boolean(), + seenInMempool: z.boolean(), + simError: z.string().optional(), +}) + +type FlashbotsReceipt = z.infer + export const FLASHBOTS_RPC_URL = 'https://rpc.flashbots.net/fast?originId=uniswapwallet' +export const FLASHBOTS_DEFAULT_BLOCK_RANGE = 10 /** * A provider to Flashbots RPC that uses a signer to authenticate requests. @@ -25,8 +52,16 @@ export const FLASHBOTS_RPC_URL = 'https://rpc.flashbots.net/fast?originId=uniswa export class FlashbotsRpcProvider extends AuthenticatedJsonRpcProvider { private signatureHeaderName = 'X-Flashbots-Signature' - constructor(signer?: Signer) { - super(FLASHBOTS_RPC_URL, signer) + /** + * Create a Flashbots RPC provider. + * @param blockRange - The maximum number of blocks in which the transaction will be included. + * @default 10 + * @see {@link https://docs.flashbots.net/flashbots-protect/settings-guide#block-range} + * @param signer - The signer to use for authenticated requests. + */ + constructor(blockRange?: number, signer?: Signer) { + const url = `${FLASHBOTS_RPC_URL}&blockRange=${blockRange && blockRange > 0 ? blockRange : FLASHBOTS_DEFAULT_BLOCK_RANGE}` + super(url, signer) } /** @@ -123,3 +158,56 @@ function getResult(payload: { return payload.result } + +const POLL_INTERVAL_MS = 4000 +const MAX_ATTEMPTS = (25 * 12000) / POLL_INTERVAL_MS // 25 blocks of 12 seconds, queried every 4 seconds + +/** + * Waits for a Flashbots Protect transaction receipt by polling the Flashbots Protect API until a final status is reached or a timeout occurs. + * @param hash - The transaction hash to wait for. + * @param timeoutTimestampMs - The Unix timestamp in milliseconds by which the polling should timeout. + * @returns A promise that resolves to the final status of the transaction. + * @throws Will throw an error if the polling exceeds the timeout, max attempts, or if there is an issue fetching the transaction status. + */ +export async function waitForFlashbotsProtectReceipt( + hash: string, + timeoutTimestampMs: number | undefined, +): Promise { + const url = `https://protect.flashbots.net/tx/${hash}` + let attempt = 0 + + while (true) { + const currentTime = Date.now() + if (timeoutTimestampMs && currentTime > timeoutTimestampMs) { + throw new Error(`Polling Flashbots Protect API for transaction ${hash} timed out after ${attempt} attempts`) + } + + if (attempt >= MAX_ATTEMPTS) { + throw new Error(`Polling Flashbots Protect API for transaction ${hash} reached maximum ${MAX_ATTEMPTS} attempts`) + } + + const connection: ConnectionInfo = { + url, + headers: { + 'Content-Type': 'application/json', + }, + } + + const data: FlashbotsReceipt = await fetchJson(connection, undefined, (payload) => { + // Validate and return the payload as FlashbotsReceipt + try { + return FlashbotsReceiptSchema.parse(payload) + } catch (error) { + throw new Error(`Invalid response structure from Flashbots API: ${error}`) + } + }) + + if (data.status !== 'PENDING') { + return data + } + + // Wait for POLL_INTERVAL_MS milliseconds before the next check + await sleep(POLL_INTERVAL_MS) + attempt++ + } +} diff --git a/packages/uniswap/src/features/providers/createEthersProvider.ts b/packages/uniswap/src/features/providers/createEthersProvider.ts index 2ad4c1e5211..696ad12590a 100644 --- a/packages/uniswap/src/features/providers/createEthersProvider.ts +++ b/packages/uniswap/src/features/providers/createEthersProvider.ts @@ -3,7 +3,10 @@ import { getChainInfo } from 'uniswap/src/features/chains/chainInfo' import { RPCType, UniverseChainId } from 'uniswap/src/features/chains/types' import { DynamicConfigs, MainnetPrivateRpcConfigKey } from 'uniswap/src/features/gating/configs' import { getDynamicConfigValue } from 'uniswap/src/features/gating/hooks' -import { FLASHBOTS_RPC_URL, FlashbotsRpcProvider } from 'uniswap/src/features/providers/FlashbotsRpcProvider' +import { + FLASHBOTS_DEFAULT_BLOCK_RANGE, + FlashbotsRpcProvider, +} from 'uniswap/src/features/providers/FlashbotsRpcProvider' import { logger } from 'utilities/src/logger/logger' // Should use ProviderManager for provider access unless being accessed outside of ProviderManagerContext (e.g., Apollo initialization) @@ -32,11 +35,17 @@ export function createEthersProvider( boolean >(DynamicConfigs.MainnetPrivateRpc, MainnetPrivateRpcConfigKey.SendFlashbotsAuthenticationHeader, false) - if (sendAuthenticationHeader) { - return new FlashbotsRpcProvider(signer) - } else { - return new ethersProviders.JsonRpcProvider(FLASHBOTS_RPC_URL) - } + const flashbotsBlockRange = getDynamicConfigValue< + DynamicConfigs.MainnetPrivateRpc, + MainnetPrivateRpcConfigKey, + number + >( + DynamicConfigs.MainnetPrivateRpc, + MainnetPrivateRpcConfigKey.FlashbotsBlockRange, + FLASHBOTS_DEFAULT_BLOCK_RANGE, + ) + + return new FlashbotsRpcProvider(flashbotsBlockRange, sendAuthenticationHeader ? signer : undefined) } return new ethersProviders.JsonRpcProvider(privateRPCUrl) diff --git a/packages/uniswap/src/features/settings/slice.ts b/packages/uniswap/src/features/settings/slice.ts index 9c78ffb3e76..b9e8ed03d66 100644 --- a/packages/uniswap/src/features/settings/slice.ts +++ b/packages/uniswap/src/features/settings/slice.ts @@ -1,7 +1,9 @@ import { createAction, createSlice, PayloadAction } from '@reduxjs/toolkit' import { FiatCurrency } from 'uniswap/src/features/fiatCurrency/constants' import { Language } from 'uniswap/src/features/language/constants' +import { getCurrentLanguageFromNavigator } from 'uniswap/src/features/language/utils' import { WALLET_TESTNET_CONFIG } from 'uniswap/src/features/telemetry/constants' +import { isInterface } from 'utilities/src/platform' // eslint-disable-next-line no-restricted-imports import { analytics } from 'utilities/src/telemetry/analytics/analytics' @@ -14,7 +16,7 @@ export interface UserSettingsState { } export const initialUserSettingsState: UserSettingsState = { - currentLanguage: Language.English, + currentLanguage: isInterface ? getCurrentLanguageFromNavigator() : Language.English, currentCurrency: FiatCurrency.UnitedStatesDollar, hideSmallBalances: true, hideSpamTokens: true, diff --git a/packages/uniswap/src/features/telemetry/constants/mobile.ts b/packages/uniswap/src/features/telemetry/constants/mobile.ts index c7791457a6d..aacd8ddfcba 100644 --- a/packages/uniswap/src/features/telemetry/constants/mobile.ts +++ b/packages/uniswap/src/features/telemetry/constants/mobile.ts @@ -2,7 +2,6 @@ * Event names that occur in this specific application */ export enum MobileEventName { - AppRating = 'App Rating', AutomatedOnDeviceRecoveryTriggered = 'Automated On Device Recovery Triggered', AutomatedOnDeviceRecoveryMnemonicsFound = 'Automated On Device Recovery Mnemonics Found', AutomatedOnDeviceRecoverySingleMnemonicFetched = 'Automated On Device Recovery Mnemonic Fetched', diff --git a/packages/uniswap/src/features/telemetry/constants/wallet.ts b/packages/uniswap/src/features/telemetry/constants/wallet.ts index f15a033e542..03a9f4c0748 100644 --- a/packages/uniswap/src/features/telemetry/constants/wallet.ts +++ b/packages/uniswap/src/features/telemetry/constants/wallet.ts @@ -4,6 +4,7 @@ import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants/ext import { TestnetModeConfig } from 'utilities/src/telemetry/analytics/analytics' export enum WalletEventName { + AppRating = 'App Rating', BackupMethodAdded = 'Backup Method Added', BackupMethodRemoved = 'Backup Method Removed', DappRequestCardPressed = 'DappRequestCardPressed', diff --git a/packages/uniswap/src/features/telemetry/types.ts b/packages/uniswap/src/features/telemetry/types.ts index f61e0a447d1..2450e0dc999 100644 --- a/packages/uniswap/src/features/telemetry/types.ts +++ b/packages/uniswap/src/features/telemetry/types.ts @@ -76,6 +76,7 @@ export type GasEstimateAccuracyProperties = { export type PendingTransactionTimeoutProperties = { use_flashbots: boolean + flashbots_block_range: number send_authentication_header: boolean private_rpc: boolean chain_id: number @@ -517,11 +518,6 @@ export type UniverseEventProperties = { expected?: string actual: string } & LiquidityAnalyticsProperties - [MobileEventName.AppRating]: { - type: 'store-review' | 'feedback-form' | 'remind' - appRatingPromptedMs?: number - appRatingProvidedMs?: number - } [MobileEventName.AutomatedOnDeviceRecoveryTriggered]: { showNotificationScreen: boolean showBiometricsScreen: boolean @@ -784,6 +780,12 @@ export type UniverseEventProperties = { twitter: boolean } [UnitagEventName.UnitagRemoved]: undefined + [WalletEventName.AppRating]: { + type: 'store-review' | 'feedback-form' | 'remind' | 'close' + appRatingPromptedMs?: number + appRatingProvidedMs?: number + } + [WalletEventName.BackupMethodAdded]: { backupMethodType: 'manual' | 'cloud' newBackupCount: number diff --git a/packages/uniswap/src/features/tokens/TokenWarningCard.tsx b/packages/uniswap/src/features/tokens/TokenWarningCard.tsx index 68723200c72..5e4538759bf 100644 --- a/packages/uniswap/src/features/tokens/TokenWarningCard.tsx +++ b/packages/uniswap/src/features/tokens/TokenWarningCard.tsx @@ -1,3 +1,4 @@ +import { useTranslation } from 'react-i18next' import { TouchableArea } from 'ui/src' import { InlineWarningCard } from 'uniswap/src/components/InlineWarningCard/InlineWarningCard' import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types' @@ -15,7 +16,6 @@ import { getTokenWarningSeverity, useTokenWarningCardText, } from 'uniswap/src/features/tokens/safetyUtils' -import { useTranslation } from 'uniswap/src/i18n' import { currencyIdToAddress } from 'uniswap/src/utils/currencyId' type TokenWarningCardProps = { diff --git a/packages/uniswap/src/features/tokens/TokenWarningModal.tsx b/packages/uniswap/src/features/tokens/TokenWarningModal.tsx index 85241d245c8..fc5b010886a 100644 --- a/packages/uniswap/src/features/tokens/TokenWarningModal.tsx +++ b/packages/uniswap/src/features/tokens/TokenWarningModal.tsx @@ -1,6 +1,6 @@ import { TFunction } from 'i18next' import { useState } from 'react' -import { Trans } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import { AnimateTransition, Flex, LabeledCheckbox, Text, useSporeColors } from 'ui/src' import { BlockaidLogo } from 'ui/src/components/logos/BlockaidLogo' import { Modal } from 'uniswap/src/components/modals/Modal' @@ -31,7 +31,6 @@ import { getTokenWarningSeverity, } from 'uniswap/src/features/tokens/safetyUtils' import { useDismissedTokenWarnings } from 'uniswap/src/features/tokens/slice/hooks' -import { useTranslation } from 'uniswap/src/i18n' import { currencyId, currencyIdToAddress } from 'uniswap/src/utils/currencyId' interface TokenWarningProps { diff --git a/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPadInput.tsx b/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPadInput.tsx index 3520bb10c5c..646457022a8 100644 --- a/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPadInput.tsx +++ b/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPadInput.tsx @@ -104,6 +104,10 @@ export const DecimalPadInput = memo( const [disabledKeys, setDisabledKeys] = useState>>({}) const [maxHeight, setMaxHeight] = useState(null) + const hasDecimalSeparator = (v: string): boolean => { + return v.includes('.') + } + useEffect(() => { updateDisabledKeys(valueRef.current) // eslint-disable-next-line react-hooks/exhaustive-deps @@ -123,28 +127,54 @@ export const DecimalPadInput = memo( return { start: selection?.start, end: selection?.end } }, [selectionRef]) - const disableKeysConditions = useMemo>>( - () => ({ - '0': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '1': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '2': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '3': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '4': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '5': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '6': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '7': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '8': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '9': (v) => maxDecimalsReached({ value: v, maxDecimals }), - '.': (v) => v.includes('.'), - backspace: (v): boolean => { - const { start, end } = getCurrentSelection() - const cursorAtStart = start === 0 && end === 0 - return cursorAtStart || v.length === 0 - }, - }), - [getCurrentSelection, maxDecimals], + const isCursorBeforeDecimalSeparator = useCallback( + (v: string): boolean => { + const { start } = getCurrentSelection() + const dotIndex = v.indexOf('.') + + // If no dot exists, we can insert freely, otherwise, check if the cursor is before it + if (dotIndex === -1) { + return true + } + + // If dot exists, check if the cursor is before the dot + return start !== undefined && start <= dotIndex + }, + [getCurrentSelection], ) + const disableKeysConditions = useMemo>>(() => { + const disableOnMaxDecimals = (v: string): boolean => { + // If there's no decimal separator or cursor is before it, always allow input no need to check decimals + if (!hasDecimalSeparator(v) || isCursorBeforeDecimalSeparator(v)) { + return false + } + // Otherwise check if we've reached max decimals + return maxDecimalsReached({ value: v, maxDecimals }) + } + + const numericKeys = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] as const + + const disableConditions: Partial> = {} + + // Adding conditions for numeric keys + numericKeys.forEach((key) => { + disableConditions[key] = disableOnMaxDecimals + }) + + // Adding condition for the dot key + disableConditions['.'] = hasDecimalSeparator + + // Adding condition for the backspace key + disableConditions.backspace = (v: string): boolean => { + const { start, end } = getCurrentSelection() + const cursorAtStart = start === 0 && end === 0 + return cursorAtStart || v.length === 0 + } + + return disableConditions + }, [getCurrentSelection, isCursorBeforeDecimalSeparator, maxDecimals]) + const updateDisabledKeys = useCallback( (value: string): void => { setDisabledKeys((prevDisabledKeys) => { diff --git a/packages/uniswap/src/features/transactions/selectors.ts b/packages/uniswap/src/features/transactions/selectors.ts index 5185105d875..96ee41ece57 100644 --- a/packages/uniswap/src/features/transactions/selectors.ts +++ b/packages/uniswap/src/features/transactions/selectors.ts @@ -54,8 +54,8 @@ export const makeSelectAddressTransactions = (): Selector< } return unique(flattenObjectOfObjects(addressTransactions), (tx, _, self) => { - // Remove dummy local onramp transactions from TransactionList, notification badge, etc. - if (tx.typeInfo.type === TransactionType.LocalOnRamp) { + // Remove dummy local FOR transactions from TransactionList, notification badge, etc. + if (tx.typeInfo.type === TransactionType.LocalOnRamp || tx.typeInfo.type === TransactionType.LocalOffRamp) { return false } /* diff --git a/packages/uniswap/src/features/transactions/settings/slice.ts b/packages/uniswap/src/features/transactions/settings/slice.ts index 1431ffd16ba..7006a41bf32 100644 --- a/packages/uniswap/src/features/transactions/settings/slice.ts +++ b/packages/uniswap/src/features/transactions/settings/slice.ts @@ -1,5 +1,5 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import { DEFAULT_CUSTOM_DEADLINE } from 'uniswap/src/features/transactions/swap/settings/useDeadlineSettings' +import { DEFAULT_CUSTOM_DEADLINE } from 'uniswap/src/constants/transactions' import { DEFAULT_PROTOCOL_OPTIONS, FrontendSupportedProtocol, diff --git a/packages/uniswap/src/features/transactions/slice.ts b/packages/uniswap/src/features/transactions/slice.ts index 57387e5b42c..1f1217a2f3e 100644 --- a/packages/uniswap/src/features/transactions/slice.ts +++ b/packages/uniswap/src/features/transactions/slice.ts @@ -2,7 +2,7 @@ /* helpful when dealing with deeply nested state objects */ import { createAction, createSlice, PayloadAction } from '@reduxjs/toolkit' import { providers } from 'ethers/lib/ethers' -import { FiatOnRampTransactionDetails } from 'uniswap/src/features/fiatOnRamp/types' +import { FORTransactionDetails } from 'uniswap/src/features/fiatOnRamp/types' import { isUniswapX } from 'uniswap/src/features/transactions/swap/utils/routing' import { ChainIdToTxIdToDetails, @@ -99,8 +99,8 @@ const slice = createSlice({ state[address]![chainId]![id]!.status = TransactionStatus.Replacing }, resetTransactions: () => initialTransactionsState, - // fiat onramp transactions re-use this slice to store (off-chain) pending txs - upsertFiatOnRampTransaction: (state, { payload: transaction }: PayloadAction) => { + // FOR transactions re-use this slice to store (off-chain) pending txs + upsertFiatOnRampTransaction: (state, { payload: transaction }: PayloadAction) => { const { chainId, id, @@ -110,9 +110,11 @@ const slice = createSlice({ assert( type === TransactionType.LocalOnRamp || + type === TransactionType.LocalOffRamp || type === TransactionType.OnRampPurchase || - type === TransactionType.OnRampTransfer, - `only on-ramp transactions can be upserted`, + type === TransactionType.OnRampTransfer || + type === TransactionType.OffRampSale, + `only FOR transactions can be upserted`, ) state[from] ??= {} diff --git a/packages/uniswap/src/features/transactions/swap/analytics.ts b/packages/uniswap/src/features/transactions/swap/analytics.ts index d7a0f581519..f30eec2f0b0 100644 --- a/packages/uniswap/src/features/transactions/swap/analytics.ts +++ b/packages/uniswap/src/features/transactions/swap/analytics.ts @@ -20,6 +20,7 @@ import { CurrencyField } from 'uniswap/src/types/currency' import { getCurrencyAddressForAnalytics } from 'uniswap/src/utils/currencyId' import { percentFromFloat } from 'utilities/src/format/percent' import { NumberType } from 'utilities/src/format/types' +import { logger } from 'utilities/src/logger/logger' import { ITraceContext, useTrace } from 'utilities/src/telemetry/trace/TraceContext' // hook-based analytics because this one is data-lifecycle dependent @@ -221,6 +222,11 @@ export function logSwapQuoteFetch({ performanceMetrics = { time_to_first_quote_request, time_to_first_quote_request_since_first_input } } sendAnalyticsEvent(SwapEventName.SWAP_QUOTE_FETCH, { chainId, isQuickRoute, ...performanceMetrics }) + logger.info('analytics', 'logSwapQuoteFetch', SwapEventName.SWAP_QUOTE_FETCH, { + chainId, + isQuickRoute, + ...performanceMetrics, + }) } // eslint-disable-next-line consistent-return diff --git a/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx b/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx index 676ded49606..dd5ee8e512e 100644 --- a/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx +++ b/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx @@ -1,7 +1,7 @@ /* eslint-disable complexity */ import { useCallback, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' -import { Button, ColorTokens, Flex, SpinningLoader, Text, isWeb, useIsShortMobileDevice } from 'ui/src' +import { Button, ColorTokens, Flex, SpinningLoader, Text, useIsShortMobileDevice } from 'ui/src' import { iconSizes } from 'ui/src/theme/iconSizes' import { useAccountMeta, useUniswapContext } from 'uniswap/src/contexts/UniswapContext' import { AccountType } from 'uniswap/src/features/accounts/types' @@ -246,11 +246,7 @@ export function SwapFormButton({ wrapCallback }: { wrapCallback?: WrapCallback } // Custom styles are matched with our theme hover opacities - can remove this when we implement full theme support in Button pressStyle={{ backgroundColor: buttonProps.backgroundColor, scale: 0.98 }} hoverStyle={{ backgroundColor: buttonProps.hoverBackgroundColor }} - icon={ - indicative ? ( - - ) : undefined - } + icon={indicative ? : undefined} backgroundColor={buttonProps.backgroundColor} disabled={disabled} opacity={buttonProps.opacity} diff --git a/packages/uniswap/src/features/transactions/swap/form/SwapFormSettings.tsx b/packages/uniswap/src/features/transactions/swap/form/SwapFormSettings.tsx index 0a211371884..0875c6e0f13 100644 --- a/packages/uniswap/src/features/transactions/swap/form/SwapFormSettings.tsx +++ b/packages/uniswap/src/features/transactions/swap/form/SwapFormSettings.tsx @@ -75,7 +75,7 @@ export function SwapFormSettings({ const isViewOnlyWallet = account?.type === AccountType.Readonly - const topAlignment = adjustTopAlignment ? (isInterface ? -34 : 6) : 0 + const topAlignment = adjustTopAlignment ? (isInterface ? -38 : 6) : 0 const rightAlignment = adjustRightAlignment ? (isMobileApp ? 24 : 4) : 0 const showCustomSlippage = customSlippageTolerance && !isBridgeTrade diff --git a/packages/uniswap/src/features/transactions/swap/form/SwapFormSettingsButton.tsx b/packages/uniswap/src/features/transactions/swap/form/SwapFormSettingsButton.tsx index 4c9ac4f19a1..16f13c8e8ea 100644 --- a/packages/uniswap/src/features/transactions/swap/form/SwapFormSettingsButton.tsx +++ b/packages/uniswap/src/features/transactions/swap/form/SwapFormSettingsButton.tsx @@ -9,6 +9,7 @@ import { useLocalizationContext } from 'uniswap/src/features/language/Localizati import { useSlippageSettings } from 'uniswap/src/features/transactions/swap/settings/useSlippageSettings' import { getSlippageWarningColor } from 'uniswap/src/features/transactions/swap/utils/styleHelpers' import { TestID } from 'uniswap/src/test/fixtures/testIDs' +import { isInterface } from 'utilities/src/platform' const getSettingsIconBackgroundColor = (autoSlippageTolerance: number, slippageTolerance?: number): ColorTokens => { if (!slippageTolerance) { @@ -65,6 +66,7 @@ export function SwapFormSettingsButton({ gap="$spacing4" px={showCustomSlippage ? '$spacing8' : '$spacing4'} py="$spacing4" + height={isInterface ? '$spacing32' : 'auto'} > {showCustomSlippage && ( diff --git a/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.test.ts b/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.test.ts index aeade2b971f..16722e5f1b7 100644 --- a/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.test.ts +++ b/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.test.ts @@ -9,7 +9,7 @@ import { NativeCurrency } from 'uniswap/src/features/tokens/NativeCurrency' import { getSwapWarnings } from 'uniswap/src/features/transactions/swap/hooks/useSwapWarnings' import { DerivedSwapInfo } from 'uniswap/src/features/transactions/swap/types/derivedSwapInfo' import { WrapType } from 'uniswap/src/features/transactions/types/wrap' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { daiCurrencyInfo, ethCurrencyInfo } from 'uniswap/src/test/fixtures' import { createGasFeeEstimates } from 'uniswap/src/test/fixtures/tradingApi' import { mockLocalizedFormatter } from 'uniswap/src/test/mocks' diff --git a/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts b/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts index 290d0f95973..ed46e240ebb 100644 --- a/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts +++ b/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts @@ -108,10 +108,7 @@ export function useTransactionRequestInfo({ if (!swapQuote) { return undefined } - // We cant get correct calldata from /swap if we dont have a valid slippage tolerance - if (tradeWithStatus.trade?.slippageTolerance === undefined && !isBridgeTrade) { - return undefined - } + const deadline = getTradeSettingsDeadline(transactionSettings.customDeadline) const swapArgs: WithV4Flag = { @@ -130,13 +127,11 @@ export function useTransactionRequestInfo({ }, [ activeGasStrategy, transactionSettings.customDeadline, - isBridgeTrade, permitData, shadowGasStrategies, shouldSimulateTxn, signatureInfo.signature, swapQuote, - tradeWithStatus, v4Enabled, ]) diff --git a/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx b/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx index a160945ea39..69aa8b6f089 100644 --- a/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx +++ b/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx @@ -1,6 +1,5 @@ -import { t } from 'i18next' import { PropsWithChildren, useMemo } from 'react' -import { Trans } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import { Flex, Text, TouchableArea, UniswapXText, isWeb, useSporeColors } from 'ui/src' import { OrderRouting } from 'ui/src/components/icons/OrderRouting' import { RouterLabel } from 'uniswap/src/components/RouterLabel/RouterLabel' @@ -30,7 +29,7 @@ export function RoutingInfo({ gasFee: GasFeeResult }>): JSX.Element | null { const colors = useSporeColors() - + const { t } = useTranslation() const { trade } = useSwapTxContext() const { convertFiatAmountFormatted } = useLocalizationContext() const { value: gasFeeUSD } = useUSDValueOfGasFee(chainId, gasFee.displayValue ?? undefined) @@ -96,7 +95,7 @@ export function RoutingInfo({ ) } return null - }, [trade, routes, gasFeeFormatted, isMaybeV4]) + }, [t, trade, routes, gasFeeFormatted, isMaybeV4]) const InfoButton = useMemo(() => { if (!trade) { @@ -121,7 +120,7 @@ export function RoutingInfo({ ) - }, [trade, isMaybeV4]) + }, [t, trade, isMaybeV4]) return ( diff --git a/packages/uniswap/src/features/transactions/swap/settings/SlippageControl.tsx b/packages/uniswap/src/features/transactions/swap/settings/SlippageControl.tsx index f7877025212..1aa941e93be 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/SlippageControl.tsx +++ b/packages/uniswap/src/features/transactions/swap/settings/SlippageControl.tsx @@ -81,6 +81,7 @@ export function SlippageControl({ saveOnBlur }: SlippageControlProps): JSX.Eleme color={inputValueTextColor} editable={true} fontFamily="$subHeading" + fontWeight="normal" fontSize="$small" height="100%" outlineColor="$transparent" @@ -91,7 +92,7 @@ export function SlippageControl({ saveOnBlur }: SlippageControlProps): JSX.Eleme width={inputWidth} onBlur={onBlurSlippageInput} onChangeText={onChangeSlippageInput} - onFocus={onFocusSlippageInput} + onPressIn={onFocusSlippageInput} /> - - - + {t('swap.settings.slippage.warning')} - + {t('swap.settings.slippage.warning.description')} @@ -51,7 +50,7 @@ export default function SlippageWarningModal({ isOpen, onClose }: SlippageWarnin onPress={onClose} > - + {t('common.close')} diff --git a/packages/uniswap/src/features/transactions/swap/settings/SwapSettingsRow.tsx b/packages/uniswap/src/features/transactions/swap/settings/SwapSettingsRow.tsx index 50d65539a65..f7f95d65b67 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/SwapSettingsRow.tsx +++ b/packages/uniswap/src/features/transactions/swap/settings/SwapSettingsRow.tsx @@ -1,42 +1,26 @@ -import { PropsWithChildren, useCallback, useMemo, useState } from 'react' +import { PropsWithChildren, useCallback, useState } from 'react' +import { useTranslation } from 'react-i18next' import { Flex, Text, TouchableArea } from 'ui/src' import { InfoCircleFilled } from 'ui/src/components/icons/InfoCircleFilled' import { RotatableChevron } from 'ui/src/components/icons/RotatableChevron' import { iconSizes } from 'ui/src/theme' import { InfoTooltip } from 'uniswap/src/components/tooltip/InfoTooltip' -import { WarningMessage } from 'uniswap/src/components/WarningMessage/WarningMessage' -import { SLIPPAGE_CRITICAL_TOLERANCE } from 'uniswap/src/constants/transactions' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' import { SwapSettingConfig } from 'uniswap/src/features/transactions/swap/settings/configs/types' -import { useSlippageSettings } from 'uniswap/src/features/transactions/swap/settings/useSlippageSettings' -import { useTranslation } from 'uniswap/src/i18n' -import { isMobileWeb, isWeb } from 'utilities/src/platform' interface SwapSettingRowProps { setting: SwapSettingConfig setSelectedSetting: (setting: SwapSettingConfig) => void - customSlippageTolerance?: number + warning?: JSX.Element | undefined } -export function SwapSettingRow({ - setting, - setSelectedSetting, - customSlippageTolerance, -}: SwapSettingRowProps): JSX.Element | null { +export function SwapSettingRow({ setting, setSelectedSetting, warning }: SwapSettingRowProps): JSX.Element | null { const { renderTitle, renderTooltip, Control, Description, Screen, InfoModal, featureFlag } = setting - const { autoSlippageTolerance } = useSlippageSettings() const { t } = useTranslation() - const isCriticalSlippage = customSlippageTolerance && customSlippageTolerance >= SLIPPAGE_CRITICAL_TOLERANCE const [showInfoModal, setShowInfoModal] = useState(false) - const showSlippageWarning = useMemo( - () => - !!customSlippageTolerance && customSlippageTolerance > autoSlippageTolerance && setting.settingId === 'slippage', - [autoSlippageTolerance, customSlippageTolerance, setting.settingId], - ) - const onPressControl = useCallback(() => { // If the setting has a screen, navigate to it, else inline control will handle the interaction. if (Screen) { @@ -49,7 +33,7 @@ export function SwapSettingRow({ setShowInfoModal(true)}> - + {renderTitle(t)} @@ -71,15 +55,7 @@ export function SwapSettingRow({ )} - {showSlippageWarning && ( - - )} + {warning} diff --git a/packages/uniswap/src/features/transactions/swap/settings/TransactionSettingsModal.tsx b/packages/uniswap/src/features/transactions/swap/settings/TransactionSettingsModal.tsx index f8e4c73a1cc..9a157a41ac8 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/TransactionSettingsModal.tsx +++ b/packages/uniswap/src/features/transactions/swap/settings/TransactionSettingsModal.tsx @@ -3,7 +3,9 @@ import { useTranslation } from 'react-i18next' import { Button, Flex, Popover, Text, TouchableArea, isWeb, useSporeColors } from 'ui/src' import { RotatableChevron } from 'ui/src/components/icons/RotatableChevron' import { iconSizes } from 'ui/src/theme' +import { WarningMessage } from 'uniswap/src/components/WarningMessage/WarningMessage' import { Modal } from 'uniswap/src/components/modals/Modal' +import { SLIPPAGE_CRITICAL_TOLERANCE, WARNING_DEADLINE_TOLERANCE } from 'uniswap/src/constants/transactions' import { ModalName } from 'uniswap/src/features/telemetry/constants' import { TransactionSettingsContext, @@ -11,8 +13,9 @@ import { } from 'uniswap/src/features/transactions/settings/contexts/TransactionSettingsContext' import { SwapFormContext, useSwapFormContext } from 'uniswap/src/features/transactions/swap/contexts/SwapFormContext' import { SwapSettingRow } from 'uniswap/src/features/transactions/swap/settings/SwapSettingsRow' -import { SwapSettingConfig } from 'uniswap/src/features/transactions/swap/settings/configs/types' -import { isExtension, isInterface } from 'utilities/src/platform' +import { SwapSettingConfig, SwapSettingId } from 'uniswap/src/features/transactions/swap/settings/configs/types' +import { useSlippageSettings } from 'uniswap/src/features/transactions/swap/settings/useSlippageSettings' +import { isExtension, isInterface, isMobileWeb } from 'utilities/src/platform' const POPOVER_WIDTH = 320 @@ -31,23 +34,51 @@ const TransactionSettingsModalContent = ({ onClose, }: Omit): JSX.Element => { const { t } = useTranslation() - const { customSlippageTolerance } = useTransactionSettingsContext() + const { customSlippageTolerance, customDeadline } = useTransactionSettingsContext() + const { autoSlippageTolerance } = useSlippageSettings() + + const isCriticalSlippage = customSlippageTolerance && customSlippageTolerance >= SLIPPAGE_CRITICAL_TOLERANCE const [SelectedSetting, setSelectedSetting] = useState() + const rowWarningContent: Record JSX.Element | undefined }> = { + [SwapSettingId.SLIPPAGE]: { + condition: !!customSlippageTolerance && customSlippageTolerance > autoSlippageTolerance, + render: () => ( + + ), + }, + [SwapSettingId.DEADLINE]: { + condition: !!customDeadline && customDeadline >= WARNING_DEADLINE_TOLERANCE, + render: () => , + }, + } + + const getSettingsRowWarning = (settingId: SwapSettingId): JSX.Element | undefined => { + const warning = rowWarningContent[settingId] + return warning?.condition ? warning.render() : undefined + } + const title = SelectedSetting ? SelectedSetting.renderTitle(t) : defaultTitle ?? t('swap.settings.title') const screen = SelectedSetting?.Screen ? ( ) : ( - {settings.map((setting, index) => ( - - ))} + {settings.map((setting, index) => { + const warning = setting.settingId ? getSettingsRowWarning(setting.settingId) : undefined + return ( + + ) + })} ) diff --git a/packages/uniswap/src/features/transactions/swap/settings/configs/Deadline.web.tsx b/packages/uniswap/src/features/transactions/swap/settings/configs/Deadline.web.tsx index b5b6973e7d0..c930a655814 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/configs/Deadline.web.tsx +++ b/packages/uniswap/src/features/transactions/swap/settings/configs/Deadline.web.tsx @@ -1,12 +1,14 @@ import { useEffect, useRef, useState } from 'react' import { Flex, Input, Text } from 'ui/src' -import { SwapSettingConfig } from 'uniswap/src/features/transactions/swap/settings/configs/types' +import { SwapSettingConfig, SwapSettingId } from 'uniswap/src/features/transactions/swap/settings/configs/types' import { useDeadlineSettings } from 'uniswap/src/features/transactions/swap/settings/useDeadlineSettings' const INPUT_MIN_WIDTH = 44 export const Deadline: SwapSettingConfig = { - renderTitle: (t) => t('swap.deadline.settings.title'), + settingId: SwapSettingId.DEADLINE, + renderTitle: (t) => t('swap.deadline.settings.title.short'), + renderTooltip: (t) => t('swap.settings.deadline.tooltip'), Control() { const [inputWidth] = useState(INPUT_MIN_WIDTH) const { isEditingDeadline, inputDeadline, onChangeDeadlineInput, onFocusDeadlineInput, onBlurDeadlineInput } = @@ -42,6 +44,7 @@ export const Deadline: SwapSettingConfig = { color="$neutral1" editable={true} fontFamily="$subHeading" + fontWeight="normal" fontSize="$small" height="100%" keyboardType="numeric" diff --git a/packages/uniswap/src/features/transactions/swap/settings/configs/Slippage.web.tsx b/packages/uniswap/src/features/transactions/swap/settings/configs/Slippage.web.tsx index 4cd618b109e..14df9fb37e4 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/configs/Slippage.web.tsx +++ b/packages/uniswap/src/features/transactions/swap/settings/configs/Slippage.web.tsx @@ -1,10 +1,10 @@ import { SlippageControl } from 'uniswap/src/features/transactions/swap/settings/SlippageControl' -import { SwapSettingConfig } from 'uniswap/src/features/transactions/swap/settings/configs/types' +import { SwapSettingConfig, SwapSettingId } from 'uniswap/src/features/transactions/swap/settings/configs/types' export const Slippage: SwapSettingConfig = { renderTitle: (t) => t('swap.slippage.settings.title'), renderTooltip: (t) => t('swap.settings.slippage.description'), - settingId: 'slippage', + settingId: SwapSettingId.SLIPPAGE, Control() { return }, diff --git a/packages/uniswap/src/features/transactions/swap/settings/configs/types.ts b/packages/uniswap/src/features/transactions/swap/settings/configs/types.ts index 8abda7782ba..e8947a3a01f 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/configs/types.ts +++ b/packages/uniswap/src/features/transactions/swap/settings/configs/types.ts @@ -1,7 +1,10 @@ import { AppTFunction } from 'ui/src/i18n/types' import { FeatureFlags } from 'uniswap/src/features/gating/flags' -type SwapSettingId = 'slippage' +export enum SwapSettingId { + SLIPPAGE = 'slippage', + DEADLINE = 'deadline', +} export type SwapSettingConfig = { renderTitle: (t: AppTFunction) => string diff --git a/packages/uniswap/src/features/transactions/swap/settings/useDeadlineSettings.ts b/packages/uniswap/src/features/transactions/swap/settings/useDeadlineSettings.ts index ede35f8f83a..4348ec26496 100644 --- a/packages/uniswap/src/features/transactions/swap/settings/useDeadlineSettings.ts +++ b/packages/uniswap/src/features/transactions/swap/settings/useDeadlineSettings.ts @@ -1,10 +1,8 @@ import { useCallback, useState } from 'react' -import { MAX_CUSTOM_DEADLINE } from 'uniswap/src/constants/transactions' +import { DEFAULT_CUSTOM_DEADLINE, MAX_CUSTOM_DEADLINE } from 'uniswap/src/constants/transactions' import { useTransactionSettingsContext } from 'uniswap/src/features/transactions/settings/contexts/TransactionSettingsContext' -export const DEFAULT_CUSTOM_DEADLINE = 30 - export function useDeadlineSettings(): { isEditingDeadline: boolean showDeadlineWarning: boolean diff --git a/packages/uniswap/src/features/transactions/types/transactionDetails.ts b/packages/uniswap/src/features/transactions/types/transactionDetails.ts index 2f69497a276..58447a45273 100644 --- a/packages/uniswap/src/features/transactions/types/transactionDetails.ts +++ b/packages/uniswap/src/features/transactions/types/transactionDetails.ts @@ -126,6 +126,12 @@ export enum QueuedOrderStatus { Submitted = 'submitted', } +export const TEMPORARY_TRANSACTION_STATUSES = [ + TransactionStatus.Pending, + TransactionStatus.Replacing, + TransactionStatus.Cancelling, +] + const FINAL_STATUSES = [ TransactionStatus.Success, TransactionStatus.Failed, @@ -151,6 +157,7 @@ export type TransactionOptions = { request: providers.TransactionRequest submittedTimestampMs?: number timeoutTimestampMs?: number + timeoutLogged?: boolean submitViaPrivateRpc?: boolean } @@ -200,8 +207,10 @@ export enum TransactionType { // Fiat onramp FiatPurchaseDeprecated = 'fiat-purchase', // Deprecated, still here for use in migrations. LocalOnRamp = 'local-onramp', + LocalOffRamp = 'local-offramp', OnRampPurchase = 'onramp-purchase', OnRampTransfer = 'onramp-transfer', + OffRampSale = 'offramp-sale', // General WCConfirm = 'wc-confirm', @@ -304,6 +313,10 @@ export interface LocalOnRampTransactionInfo extends BaseTransactionInfo { type: TransactionType.LocalOnRamp } +export interface LocalOffRampTransactionInfo extends BaseTransactionInfo { + type: TransactionType.LocalOffRamp +} + export interface OnRampTransactionInfo extends BaseTransactionInfo { type: TransactionType id: string @@ -328,6 +341,12 @@ export interface OnRampTransferInfo extends OnRampTransactionInfo { type: TransactionType.OnRampTransfer } +export interface OffRampSaleInfo extends OnRampTransactionInfo { + type: TransactionType.OffRampSale + sourceCurrency: string + sourceAmount?: number +} + export interface ServiceProviderInfo { id: string name: string @@ -393,9 +412,11 @@ export type TransactionTypeInfo = | UnknownTransactionInfo | OnRampPurchaseInfo | OnRampTransferInfo + | OffRampSaleInfo | LocalOnRampTransactionInfo + | LocalOffRampTransactionInfo -export function isConfirmedSwapTypeInfo(typeInfo: TransactionTypeInfo): typeInfo is ConfirmedSwapTransactionInfo { + export function isConfirmedSwapTypeInfo(typeInfo: TransactionTypeInfo): typeInfo is ConfirmedSwapTransactionInfo { return Boolean( (typeInfo as ConfirmedSwapTransactionInfo).inputCurrencyAmountRaw && (typeInfo as ConfirmedSwapTransactionInfo).outputCurrencyAmountRaw, @@ -431,5 +452,6 @@ export function isFinalizedTx(tx: TransactionDetails | FinalizedTransactionDetai export enum TransactionDetailsType { Transaction = 'TransactionDetails', OnRamp = 'OnRampTransactionDetails', + OffRamp = 'OffRampTransactionDetails', UniswapXOrder = 'SwapOrderDetails', } diff --git a/packages/uniswap/src/i18n/Plural.tsx b/packages/uniswap/src/i18n/Plural.tsx deleted file mode 100644 index 6bf93edcb19..00000000000 --- a/packages/uniswap/src/i18n/Plural.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Translation } from 'react-i18next' -import { PluralProps } from 'uniswap/src/i18n/shared' -import { isTestEnv } from 'utilities/src/environment/env' - -export function Plural({ value, one, other }: PluralProps): JSX.Element { - const children = value === 1 ? one : other - if (isTestEnv()) { - return <>{children} - } - // ensures it re-renders when language changes - return {() => children} -} diff --git a/packages/uniswap/src/i18n/Trans.tsx b/packages/uniswap/src/i18n/Trans.tsx deleted file mode 100644 index d899db41179..00000000000 --- a/packages/uniswap/src/i18n/Trans.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { Trans as OGTrans, useTranslation } from 'react-i18next' - -export const Trans = ((props): JSX.Element => { - // forces re-render on language change because it doesn't by default - useTranslation() - - return {props.children} -}) satisfies typeof OGTrans diff --git a/packages/uniswap/src/i18n/i18n.ts b/packages/uniswap/src/i18n/i18n.ts deleted file mode 100644 index 8352e5d3baa..00000000000 --- a/packages/uniswap/src/i18n/i18n.ts +++ /dev/null @@ -1,6 +0,0 @@ -import i18n from 'uniswap/src/i18n/index' - -// TODO(WALL-3996): remove this file in favor of just index.ts -export * from './index' - -export default i18n diff --git a/packages/uniswap/src/i18n/index.ts b/packages/uniswap/src/i18n/index.ts index 6d1fb6af5d1..5f983312d45 100644 --- a/packages/uniswap/src/i18n/index.ts +++ b/packages/uniswap/src/i18n/index.ts @@ -5,10 +5,6 @@ if (!process.env.REACT_APP_IS_UNISWAP_INTERFACE) { require('./i18n-setup') } -export { t } from 'i18next' -export { Plural } from './Plural' -export { Trans } from './Trans' export { changeLanguage } from './changeLanguage' -export { useTranslation } from './useTranslation' export default i18n diff --git a/packages/uniswap/src/i18n/locales/source/en-US.json b/packages/uniswap/src/i18n/locales/source/en-US.json index 8c3db1c0dec..dd06b33a14c 100644 --- a/packages/uniswap/src/i18n/locales/source/en-US.json +++ b/packages/uniswap/src/i18n/locales/source/en-US.json @@ -541,8 +541,8 @@ "common.resetLimit": "Reset {{symbol}} limit", "common.resetLimitWallet": "Reset {{symbol}} limit in wallet", "common.resettingLimit": "Resetting {{symbol}} limit...", - "common.resolveIssue": "Resolve issue", - "common.resolveIssues": "Resolve {{issues}} issues", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Restricted region", "common.return.label": "Return", "common.returnToTop": "Return to top", @@ -603,21 +603,25 @@ "common.thisWeek": "This week", "common.thisYear": "This year", "common.time": "Time", - "common.time.day": "day", "common.time.days": "days", - "common.time.hour": "hour", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "hours", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minutes", - "common.time.month": "month", "common.time.months": "months", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}}d ago", "common.time.past.hours": "{{hours}}h ago", "common.time.past.minutes": "{{minutes}}m ago", "common.time.past.months": "{{months}}mo ago", "common.time.past.seconds": "{{seconds}}s ago", - "common.time.week": "week", "common.time.weeks": "weeks", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Tip:", "common.to": "to", "common.today": "Today", @@ -635,8 +639,8 @@ "common.transactions": "Transactions", "common.transactionSettings": "Transaction Settings", "common.transactionSubmitted": "Transaction submitted", - "common.transfer": "transfer", - "common.transfers": "transfers", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Try again", "common.twitter": "Twitter", "common.type.label": "Type", @@ -868,6 +872,7 @@ "fiatOffRamp.checkout.title": "Sell with", "fiatOffRamp.connection.quote": "Selling {{amount}} worth of {{currencySymbol}}", "fiatOffRamp.error.balance": "Exceeds balance", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Go back", "fiatOffRamp.unsupportedToken.divider": "Unsupported tokens", "fiatOffRamp.unsupportedToken.message": "This token is not supported to sell. Swap this asset to one of the supported tokens.", @@ -1035,7 +1040,6 @@ "liquidityPool.positions.page.title": "Manage {{quoteSymbol}}/{{baseSymbol}} pool liquidity on Uniswap", "liquidityPool.positions.page.version.description": "View your active {{version}} liquidity positions. Add new positions.", "liquidityPool.positions.page.version.title": "Manage pool liquidity{{version}} on Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Allowed", "migrate.allowLpMigration": "Allow LP token migration", @@ -1340,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 allows token approvals to be shared and managed across different applications.", "pool.activePositions.appear": "Your active V3 liquidity positions will appear here.", "pool.activeRange": "Active tick range", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Add liquidity to {{tokenPair}} ({{chain}}) on Uniswap", "pool.addMoreLiquidity": "Add more liquidity", "pool.apr": "APR", @@ -1453,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 day volume", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Your V2 liquidity", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1775,11 +1781,12 @@ "swap.button.unwrap": "Unwrap", "swap.button.wrap": "Wrap", "swap.buy.countryModal.placeholder": "Search by country or region", - "swap.cancel.cannotExecute": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", - "swap.cancel.cannotExecute.plural": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Confirm limit", "swap.confirmSwap": "Confirm swap", "swap.deadline.settings.title": "Transaction deadline", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} fee", "swap.details.feeOnTransfer.default": "Token fee", "swap.details.newQuote.input": "New input", @@ -1843,7 +1850,9 @@ "swap.review": "Review swap", "swap.review.summary": "You’re swapping", "swap.reviewLimit": "Review limit", - "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the gas cost of each step.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "With swap protection on, your Ethereum transactions will be protected from sandwich attacks, with reduced chances of failure.", "swap.settings.protection.subtitle.supported": "{{chainName}} Network", "swap.settings.protection.subtitle.unavailable": "Not available on {{chainName}}", @@ -2116,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "From", "transaction.details.networkFee": "Network cost", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Rate", "transaction.details.transaction": "Transaction", "transaction.details.uniswapFee": "Fee ({{ feePercent }}%)", @@ -2167,6 +2177,11 @@ "transaction.status.revoke.pending": "Revoking", "transaction.status.revoke.success": "Revoked", "transaction.status.revoke.successDapp": "Revoked on {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Canceled sell", "transaction.status.sell.canceling": "Canceling sell", "transaction.status.sell.failed": "Failed to sell", diff --git a/packages/uniswap/src/i18n/locales/translations/af-ZA.json b/packages/uniswap/src/i18n/locales/translations/af-ZA.json index bfc622730ca..1af1616d7a4 100644 --- a/packages/uniswap/src/i18n/locales/translations/af-ZA.json +++ b/packages/uniswap/src/i18n/locales/translations/af-ZA.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likiditeit verwyder", "common.loading": "Laai tans", "common.loadingAllowance": "Laaitoelaag", + "common.loadMore": "Laai meer", "common.longText.button.less": "Lees minder", "common.longText.button.more": "Lees meer", "common.lowPrice": "Lae prys", @@ -540,8 +541,8 @@ "common.resetLimit": "Stel {{symbol}} limiet terug", "common.resetLimitWallet": "Stel {{symbol}} limiet in beursie terug", "common.resettingLimit": "Stel tans {{symbol}} limiet terug …", - "common.resolveIssue": "Los probleem op", - "common.resolveIssues": "Los {{issues}} kwessies op", + "common.resolveIssues_one": "Los probleem op", + "common.resolveIssues_other": "Los {{count}} kwessies op", "common.restricted.region": "Beperkte streek", "common.return.label": "Keer terug", "common.returnToTop": "Keer terug na bo", @@ -602,21 +603,25 @@ "common.thisWeek": "Hierdie week", "common.thisYear": "Hierdie jaar", "common.time": "Tyd", - "common.time.day": "dag", "common.time.days": "dae", - "common.time.hour": "uur", + "common.time.days_one": "dag", + "common.time.days_other": "dae", "common.time.hours": "ure", + "common.time.hours_one": "uur", + "common.time.hours_other": "ure", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minute", - "common.time.month": "maand", "common.time.months": "maande", + "common.time.months_one": "maand", + "common.time.months_other": "maande", "common.time.past.days": "{{days}}d gelede", "common.time.past.hours": "{{hours}}h gelede", "common.time.past.minutes": "{{minutes}}m gelede", "common.time.past.months": "{{months}}ma gelede", "common.time.past.seconds": "{{seconds}}s gelede", - "common.time.week": "week", "common.time.weeks": "weke", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weke", "common.tip.label": "Wenk:", "common.to": "om", "common.today": "Vandag", @@ -634,8 +639,8 @@ "common.transactions": "Transaksies", "common.transactionSettings": "Transaksie-instellings", "common.transactionSubmitted": "Transaksie ingedien", - "common.transfer": "oordrag", - "common.transfers": "oordragte", + "common.transfer_one": "oordrag", + "common.transfer_other": "oordragte", "common.tryAgain.error": "Probeer weer", "common.twitter": "Twitter", "common.type.label": "Tik", @@ -856,6 +861,7 @@ "fee.tier.new": "Nuwe vlak", "fee.tier.percent.select": "{{percentage}} kies", "fee.tier.recommended": "Aanbeveel", + "fee.tier.recommended.description": "Aanbeveel op grond van die hoogste aandeel likiditeit vir die geselekteerde tokenpaar.", "fee.tier.search": "Soek of skep ander fooivlakke", "fee.tier.search.short": "Soek vlakke", "fee.tier.select": "Kies fooivlak", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Verkoop met", "fiatOffRamp.connection.quote": "Verkoop {{amount}} ter waarde van {{currencySymbol}}", "fiatOffRamp.error.balance": "Oorskry balans", + "fiatOffRamp.summary.total": "{{cryptoAmount}} vir {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Gaan terug", "fiatOffRamp.unsupportedToken.divider": "Onondersteunde tokens", "fiatOffRamp.unsupportedToken.message": "Hierdie teken word nie ondersteun om te verkoop nie. Ruil hierdie bate na een van die ondersteunde tokens.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Bestuur {{quoteSymbol}}/{{baseSymbol}} poel likiditeit op Uniswap", "liquidityPool.positions.page.version.description": "Bekyk jou aktiewe {{version}} likiditeitsposisies. Voeg nuwe posisies by.", "liquidityPool.positions.page.version.title": "Bestuur poellikiditeit{{version}} op Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Toegelaat", "migrate.allowLpMigration": "Laat LP-tokenmigrasie toe", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 laat tokengoedkeurings toe om oor verskillende toepassings gedeel en bestuur te word.", "pool.activePositions.appear": "Jou aktiewe V3-likiditeitsposisies sal hier verskyn.", "pool.activeRange": "Aktiewe bosluisreeks", + "pool.addAs": "Voeg by as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Voeg likiditeit by {{tokenPair}} ({{chain}}) op Uniswap", "pool.addMoreLiquidity": "Voeg meer likiditeit by", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 dae volume", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Onttrek as {{nativeWrappedSymbol}}", "pool.yourv2": "Jou V2-likiditeit", "poolFinder.availablePools": "Beskikbare swembaddens", "poolFinder.availablePools.found.description": "v2 poele wat ooreenstem met jou paar seleksie.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Ontwikkel", "swap.button.wrap": "Wikkel", "swap.buy.countryModal.placeholder": "Soek volgens land of streek", - "swap.cancel.cannotExecute": "Jou ruil kan uitgevoer word voordat kansellasie verwerk word. Jou netwerkkoste kan nie terugbetaal word nie. Wil jy voortgaan?", - "swap.cancel.cannotExecute.plural": "Jou omruilings kan uitgevoer word voordat kansellasie verwerk word. Jou netwerkkoste kan nie terugbetaal word nie. Wil jy voortgaan?", + "swap.cancel.cannotExecute_one": "Jou ruil kan uitgevoer word voordat kansellasie verwerk word. Jou netwerkkoste kan nie terugbetaal word nie. Wil jy voortgaan?", + "swap.cancel.cannotExecute_other": "Jou omruilings kan uitgevoer word voordat kansellasie verwerk word. Jou netwerkkoste kan nie terugbetaal word nie. Wil jy voortgaan?", "swap.confirmLimit": "Bevestig limiet", "swap.confirmSwap": "Bevestig omruiling", "swap.deadline.settings.title": "Transaksie sperdatum", + "swap.deadline.settings.title.short": "Tx. sperdatum", "swap.details.feeOnTransfer": "{{tokenSymbol}} fooi", "swap.details.feeOnTransfer.default": "Token fooi", "swap.details.newQuote.input": "Nuwe insette", @@ -1841,7 +1850,9 @@ "swap.review": "Review ruil", "swap.review.summary": "Jy ruil", "swap.reviewLimit": "Hersien limiet", - "swap.route.optimizedGasCost": "Hierdie roete optimaliseer jou totale uitset deur gesplete roetes, veelvuldige hops en die gaskoste van elke stap in ag te neem.", + "swap.route.optimizedGasCost": "Hierdie roete optimaliseer jou totale uitset deur gesplete roetes, veelvuldige hops en die netwerkkoste van elke stap in ag te neem.", + "swap.settings.deadline.tooltip": "Jou transaksie sal terugdraai as dit vir langer as hierdie tydperk hangende is. (Maksimum: 3 dae).", + "swap.settings.deadline.warning": "Hoë sperdatum", "swap.settings.protection.description": "Met ruilbeskerming aan, sal jou Ethereum-transaksies teen toebroodjie-aanvalle beskerm word, met verminderde kanse op mislukking.", "swap.settings.protection.subtitle.supported": "{{chainName}} Netwerk", "swap.settings.protection.subtitle.unavailable": "Nie beskikbaar op {{chainName}}nie", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 swembaddens", "swap.settings.routingPreference.option.v4.title": "v4 swembaddens", "swap.settings.routingPreference.title": "Handel opsies", + "swap.settings.slippage.alert": "Hoë gly", "swap.settings.slippage.control.auto": "Outo", "swap.settings.slippage.description": "Jou transaksie sal terugdraai as die prys meer as die glippersentasie verander.", "swap.settings.slippage.input.message": "As die prys verder gly, sal jou transaksie terugdraai. Hieronder is die minimum bedrag wat jy gewaarborg is om te ontvang.", "swap.settings.slippage.input.receive.title": "Ontvang ten minste", "swap.settings.slippage.output.message": "As die prys verder gly, sal jou transaksie terugdraai. Hieronder is die maksimum bedrag wat jy sal moet spandeer.", "swap.settings.slippage.output.spend.title": "Spandeer hoogstens", + "swap.settings.slippage.warning": "Baie hoë gly", + "swap.settings.slippage.warning.description": "Glip bo 20% sal waarskynlik lei tot 'n ongunstige handel. Verlaag jou instellings om die risiko van voorloper te verminder.", + "swap.settings.slippage.warning.hover": "Dit kan lei tot 'n ongunstige handel. Probeer om jou glip-instelling te verlaag.", "swap.settings.slippage.warning.max": "Voer 'n waarde minder as {{maxSlippageTolerance}}in", "swap.settings.slippage.warning.message": "Glip kan hoër wees as wat nodig is", "swap.settings.slippage.warning.min": "Voer 'n waarde groter as 0 in", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Toep", "transaction.details.from": "Van", "transaction.details.networkFee": "Netwerk koste", + "transaction.details.providerFee": "Verskaffersfooi", "transaction.details.swapRate": "Koers", "transaction.details.transaction": "Transaksie", "transaction.details.uniswapFee": "Fooi ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Herroeping", "transaction.status.revoke.success": "Herroep", "transaction.status.revoke.successDapp": "Herroep op {{externalDappName}}", + "transaction.status.sale.canceled": "Gekanselleerde uitverkoping", + "transaction.status.sale.canceling": "Kanselleer uitverkoping", + "transaction.status.sale.failedOn": "Verkoping het misluk via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Verkoop via {{serviceProvider}}", + "transaction.status.sale.successOn": "Verkoop via {{serviceProvider}}", "transaction.status.sell.canceled": "Verkoop gekanselleer", "transaction.status.sell.canceling": "Kanselleer verkoop", "transaction.status.sell.failed": "Kon nie verkoop nie", diff --git a/packages/uniswap/src/i18n/locales/translations/ar-SA.json b/packages/uniswap/src/i18n/locales/translations/ar-SA.json index 7d1853f636b..a068859f926 100644 --- a/packages/uniswap/src/i18n/locales/translations/ar-SA.json +++ b/packages/uniswap/src/i18n/locales/translations/ar-SA.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "تمت إزالة السيولة", "common.loading": "تحميل", "common.loadingAllowance": "بدل التحميل", + "common.loadMore": "تحميل المزيد", "common.longText.button.less": "أقرأ أقل", "common.longText.button.more": "اقرأ أكثر", "common.lowPrice": "سعر منخفض", @@ -540,8 +541,8 @@ "common.resetLimit": "إعادة تعيين {{symbol}} الحد", "common.resetLimitWallet": "إعادة تعيين {{symbol}} الحد في المحفظة", "common.resettingLimit": "إعادة تعيين {{symbol}} الحد...", - "common.resolveIssue": "حل المشكلة", - "common.resolveIssues": "حل مشكلات {{issues}}", + "common.resolveIssues_one": "حل المشكلة", + "common.resolveIssues_other": "حل مشاكل {{count}}", "common.restricted.region": "المنطقة المحظورة", "common.return.label": "يعود", "common.returnToTop": "العودة للقمة", @@ -602,21 +603,25 @@ "common.thisWeek": "هذا الاسبوع", "common.thisYear": "هذا العام", "common.time": "وقت", - "common.time.day": "يوم", "common.time.days": "أيام", - "common.time.hour": "ساعة", + "common.time.days_one": "يوم", + "common.time.days_other": "أيام", "common.time.hours": "ساعات", + "common.time.hours_one": "ساعة", + "common.time.hours_other": "ساعات", "common.time.minute.amt": "{{time}}م", "common.time.minutes": "دقائق", - "common.time.month": "شهر", "common.time.months": "شهور", + "common.time.months_one": "شهر", + "common.time.months_other": "شهور", "common.time.past.days": "{{days}}د منذ", "common.time.past.hours": "{{hours}}ح منذ", "common.time.past.minutes": "{{minutes}}م", "common.time.past.months": "{{months}}منذ شهر", "common.time.past.seconds": "{{seconds}}منذ", - "common.time.week": "أسبوع", "common.time.weeks": "أسابيع", + "common.time.weeks_one": "أسبوع", + "common.time.weeks_other": "أسابيع", "common.tip.label": "نصيحة:", "common.to": "ل", "common.today": "اليوم", @@ -634,8 +639,8 @@ "common.transactions": "المعاملات", "common.transactionSettings": "إعدادات المعاملات", "common.transactionSubmitted": "تم إرسال المعاملة", - "common.transfer": "تحويل", - "common.transfers": "التحويلات", + "common.transfer_one": "تحويل", + "common.transfer_other": "التحويلات", "common.tryAgain.error": "حاول ثانية", "common.twitter": "تويتر", "common.type.label": "يكتب", @@ -856,6 +861,7 @@ "fee.tier.new": "طبقة جديدة", "fee.tier.percent.select": "{{percentage}} حدد", "fee.tier.recommended": "مُستَحسَن", + "fee.tier.recommended.description": "يوصى به بناءً على وجود أعلى حصة من السيولة لزوج الرمز المحدد.", "fee.tier.search": "البحث عن مستويات رسوم أخرى أو إنشاءها", "fee.tier.search.short": "مستويات البحث", "fee.tier.select": "حدد مستوى الرسوم", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "بيع مع", "fiatOffRamp.connection.quote": "بيع ما قيمته {{amount}} من {{currencySymbol}}", "fiatOffRamp.error.balance": "يتجاوز التوازن", + "fiatOffRamp.summary.total": "{{cryptoAmount}} لـ {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "عُد", "fiatOffRamp.unsupportedToken.divider": "الرموز غير المدعومة", "fiatOffRamp.unsupportedToken.message": "لا يُسمَح ببيع هذا الرمز. قم بتبديل هذا الأصل بأحد الرموز المدعومة.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "إدارة {{quoteSymbol}}/{{baseSymbol}} تجمع السيولة على Uniswap", "liquidityPool.positions.page.version.description": "عرض مراكز السيولة النشطة الخاصة بك {{version}} . إضافة مناصب جديدة.", "liquidityPool.positions.page.version.title": "إدارة سيولة المجمع{{version}} على Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} لكل {{outputToken}}", "liquidityPool.positions.price.formatted": " لكل ", "migrate.allowed": "مسموح", "migrate.allowLpMigration": "السماح بترحيل رمز LP المميز", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "يسمح Permit2 بمشاركة الموافقات الرمزية وإدارتها عبر تطبيقات مختلفة.", "pool.activePositions.appear": "ستظهر هنا مراكز السيولة النشطة V3 الخاصة بك.", "pool.activeRange": "نطاق القراد النشط", + "pool.addAs": "أضف كـ {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "أضف السيولة إلى {{tokenPair}} ({{chain}}) على Uniswap", "pool.addMoreLiquidity": "إضافة المزيد من السيولة", "pool.apr": "معدل الفائدة السنوي", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D حجم/حجم الصورة", "pool.volume.thirtyDay": "حجم 30 يوم", "pool.volume.thirtyDay.short": "حجم 30D", + "pool.withdrawAs": "سحب كـ {{nativeWrappedSymbol}}", "pool.yourv2": "السيولة V2 الخاصة بك", "poolFinder.availablePools": "المسابح المتاحة", "poolFinder.availablePools.found.description": "تجمعات v2 التي تتوافق مع اختيار الزوج الخاص بك.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "بسط", "swap.button.wrap": "طَوّق", "swap.buy.countryModal.placeholder": "البحث حسب البلد أو المنطقة", - "swap.cancel.cannotExecute": "يمكن تنفيذ المبادلة الخاصة بك قبل معالجة الإلغاء. لا يمكن استرداد تكاليف الشبكة الخاصة بك. هل ترغب في المتابعة؟", - "swap.cancel.cannotExecute.plural": "يمكن تنفيذ مقايضاتك قبل معالجة الإلغاء. لا يمكن استرداد تكاليف الشبكة الخاصة بك. هل ترغب في المتابعة؟", + "swap.cancel.cannotExecute_one": "يمكن تنفيذ المبادلة الخاصة بك قبل معالجة الإلغاء. لا يمكن استرداد تكاليف الشبكة الخاصة بك. هل ترغب في المتابعة؟", + "swap.cancel.cannotExecute_other": "يمكن تنفيذ مقايضاتك قبل معالجة الإلغاء. لا يمكن استرداد تكاليف الشبكة الخاصة بك. هل ترغب في المتابعة؟", "swap.confirmLimit": "تأكيد الحد", "swap.confirmSwap": "تأكيد المبادلة", "swap.deadline.settings.title": "الموعد النهائي للمعاملة", + "swap.deadline.settings.title.short": "الموعد النهائي لـ Tx.", "swap.details.feeOnTransfer": "{{tokenSymbol}} رسوم", "swap.details.feeOnTransfer.default": "رسوم رمزية", "swap.details.newQuote.input": "مدخلات جديدة", @@ -1841,7 +1850,9 @@ "swap.review": "مراجعة المبادلة", "swap.review.summary": "أنت تقوم بالتبديل", "swap.reviewLimit": "حد المراجعة", - "swap.route.optimizedGasCost": "يعمل هذا المسار على تحسين إجمالي إنتاجك من خلال النظر في المسارات المقسمة والقفزات المتعددة وتكلفة الوقود لكل خطوة.", + "swap.route.optimizedGasCost": "يعمل هذا المسار على تحسين إجمالي الناتج لديك من خلال مراعاة المسارات المنقسمة والقفزات المتعددة وتكاليف الشبكة لكل خطوة.", + "swap.settings.deadline.tooltip": "سيتم استرداد معاملتك إذا ظلت معلقة لأكثر من هذه الفترة الزمنية. (الحد الأقصى: 3 أيام).", + "swap.settings.deadline.warning": "الموعد النهائي مرتفع", "swap.settings.protection.description": "مع تشغيل حماية المبادلة، ستتم حماية معاملاتك على الإيثيريوم من هجمات الساندويتش، مع تقليل فرص الفشل.", "swap.settings.protection.subtitle.supported": "{{chainName}} الشبكة", "swap.settings.protection.subtitle.unavailable": "غير متوفر على {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "حمامات v3", "swap.settings.routingPreference.option.v4.title": "حمامات سباحة v4", "swap.settings.routingPreference.title": "خيارات التجارة", + "swap.settings.slippage.alert": "انزلاق عالي", "swap.settings.slippage.control.auto": "آلي", "swap.settings.slippage.description": "سيتم إرجاع معاملتك إذا تغير السعر بأكثر من نسبة الانزلاق.", "swap.settings.slippage.input.message": "إذا انخفض السعر أكثر من ذلك، فسيتم إرجاع معاملتك. فيما يلي الحد الأدنى للمبلغ الذي نضمن حصولك عليه.", "swap.settings.slippage.input.receive.title": "تلقي على الأقل", "swap.settings.slippage.output.message": "إذا انخفض السعر أكثر من ذلك، فسيتم إرجاع معاملتك. فيما يلي الحد الأقصى للمبلغ الذي قد تحتاج إلى إنفاقه.", "swap.settings.slippage.output.spend.title": "قضاء على الأكثر", + "swap.settings.slippage.warning": "انزلاق عالي جدًا", + "swap.settings.slippage.warning.description": "من المرجح أن يؤدي الانزلاق فوق 20% إلى تداول غير مواتٍ. لتقليل خطر الانطلاق، قم بخفض إعداداتك.", + "swap.settings.slippage.warning.hover": "قد يؤدي هذا إلى تداول غير مواتٍ. حاول خفض إعدادات الانزلاق.", "swap.settings.slippage.warning.max": "أدخل قيمة أقل من {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "قد يكون الانزلاق أعلى من اللازم", "swap.settings.slippage.warning.min": "أدخل قيمة أكبر من 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "برنامج", "transaction.details.from": "من", "transaction.details.networkFee": "تكلفة الشبكة", + "transaction.details.providerFee": "رسوم مقدم الخدمة", "transaction.details.swapRate": "معدل", "transaction.details.transaction": "عملية", "transaction.details.uniswapFee": "الرسوم ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "إبطال", "transaction.status.revoke.success": "إلغاء - فسخ", "transaction.status.revoke.successDapp": "تم الإلغاء في {{externalDappName}}", + "transaction.status.sale.canceled": "تم إلغاء البيع", + "transaction.status.sale.canceling": "الغاء البيع", + "transaction.status.sale.failedOn": "فشل البيع عبر {{serviceProvider}}", + "transaction.status.sale.pendingOn": "البيع عبر {{serviceProvider}}", + "transaction.status.sale.successOn": "تم البيع عبر {{serviceProvider}}", "transaction.status.sell.canceled": "تم إلغاء البيع", "transaction.status.sell.canceling": "إلغاء البيع", "transaction.status.sell.failed": "فشل في البيع", diff --git a/packages/uniswap/src/i18n/locales/translations/ca-ES.json b/packages/uniswap/src/i18n/locales/translations/ca-ES.json index 800e2c4fa37..2d979bbe95d 100644 --- a/packages/uniswap/src/i18n/locales/translations/ca-ES.json +++ b/packages/uniswap/src/i18n/locales/translations/ca-ES.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Liquiditat eliminada", "common.loading": "Carregant", "common.loadingAllowance": "Bonificació de càrrega", + "common.loadMore": "Carregueu més", "common.longText.button.less": "Llegeix menys", "common.longText.button.more": "Llegeix més", "common.lowPrice": "Preu baix", @@ -540,8 +541,8 @@ "common.resetLimit": "Restableix el límit de {{symbol}}", "common.resetLimitWallet": "Restableix el límit de {{symbol}} a la cartera", "common.resettingLimit": "S'està restablint el límit {{symbol}} ...", - "common.resolveIssue": "Resol el problema", - "common.resolveIssues": "Resoldre problemes {{issues}}", + "common.resolveIssues_one": "Resol el problema", + "common.resolveIssues_other": "Resoldre problemes {{count}}", "common.restricted.region": "Regió restringida", "common.return.label": "Tornar", "common.returnToTop": "Tornar a dalt", @@ -602,21 +603,25 @@ "common.thisWeek": "Aquesta setmana", "common.thisYear": "Aquest any", "common.time": "Temps", - "common.time.day": "dia", "common.time.days": "dies", - "common.time.hour": "hores", + "common.time.days_one": "dia", + "common.time.days_other": "dies", "common.time.hours": "hores", + "common.time.hours_one": "hores", + "common.time.hours_other": "hores", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minuts", - "common.time.month": "mes", "common.time.months": "mesos", + "common.time.months_one": "mes", + "common.time.months_other": "mesos", "common.time.past.days": "fa {{days}}dies", "common.time.past.hours": "fa {{hours}}hores", "common.time.past.minutes": "fa {{minutes}}m", "common.time.past.months": "fa {{months}}mesos", "common.time.past.seconds": "fa {{seconds}}s", - "common.time.week": "setmana", "common.time.weeks": "setmanes", + "common.time.weeks_one": "setmana", + "common.time.weeks_other": "setmanes", "common.tip.label": "Consell:", "common.to": "a", "common.today": "Avui", @@ -634,8 +639,8 @@ "common.transactions": "Transaccions", "common.transactionSettings": "Configuració de la transacció", "common.transactionSubmitted": "Transacció enviada", - "common.transfer": "transferència", - "common.transfers": "transferències", + "common.transfer_one": "transferència", + "common.transfer_other": "transferències", "common.tryAgain.error": "Torna-ho a provar", "common.twitter": "Twitter", "common.type.label": "Tipus", @@ -856,6 +861,7 @@ "fee.tier.new": "Nou nivell", "fee.tier.percent.select": "{{percentage}} selecciona", "fee.tier.recommended": "Recomanat", + "fee.tier.recommended.description": "Recomanat en funció de tenir la quota més alta de liquiditat per al parell de fitxes seleccionat.", "fee.tier.search": "Cerqueu o creeu altres nivells de tarifes", "fee.tier.search.short": "Cerca nivells", "fee.tier.select": "Seleccioneu el nivell de tarifa", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Ven amb", "fiatOffRamp.connection.quote": "Venint {{amount}} per valor de {{currencySymbol}}", "fiatOffRamp.error.balance": "Supera l'equilibri", + "fiatOffRamp.summary.total": "{{cryptoAmount}} per a {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Torna", "fiatOffRamp.unsupportedToken.divider": "Fitxes no compatibles", "fiatOffRamp.unsupportedToken.message": "Aquest testimoni no s'admet per vendre. Canvia aquest actiu per un dels testimonis admesos.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Gestioneu la liquiditat del grup {{quoteSymbol}}/{{baseSymbol}} a Uniswap", "liquidityPool.positions.page.version.description": "Consulteu les vostres posicions de liquiditat {{version}} actives. Afegeix noves posicions.", "liquidityPool.positions.page.version.title": "Gestioneu la liquiditat del grup{{version}} a Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Permès", "migrate.allowLpMigration": "Permet la migració del testimoni LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 permet compartir i gestionar les aprovacions de testimonis entre diferents aplicacions.", "pool.activePositions.appear": "Les vostres posicions de liquiditat V3 actives apareixeran aquí.", "pool.activeRange": "Interval de tick actiu", + "pool.addAs": "Afegeix com a {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Afegeix liquiditat a {{tokenPair}} ({{chain}}) a Uniswap", "pool.addMoreLiquidity": "Afegiu més liquiditat", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "volum de 30 dies", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Retira't com a {{nativeWrappedSymbol}}", "pool.yourv2": "La teva liquiditat V2", "poolFinder.availablePools": "Piscines disponibles", "poolFinder.availablePools.found.description": "grups v2 que coincideixen amb la vostra selecció de parella.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Desembolicar", "swap.button.wrap": "Embolicar", "swap.buy.countryModal.placeholder": "Cerca per país o regió", - "swap.cancel.cannotExecute": "El vostre intercanvi es podria executar abans que es processi la cancel·lació. Els costos de la vostra xarxa no es poden reemborsar. Vols continuar?", - "swap.cancel.cannotExecute.plural": "Els vostres intercanvis es podrien executar abans que es processi la cancel·lació. Els costos de la vostra xarxa no es poden reemborsar. Vols continuar?", + "swap.cancel.cannotExecute_one": "El vostre intercanvi es podria executar abans que es processi la cancel·lació. Els costos de la vostra xarxa no es poden reemborsar. Vols continuar?", + "swap.cancel.cannotExecute_other": "Els vostres intercanvis es podrien executar abans que es processi la cancel·lació. Els costos de la vostra xarxa no es poden reemborsar. Vols continuar?", "swap.confirmLimit": "Confirmeu el límit", "swap.confirmSwap": "Confirmeu l'intercanvi", "swap.deadline.settings.title": "Termini de transacció", + "swap.deadline.settings.title.short": "Tx. termini", "swap.details.feeOnTransfer": "{{tokenSymbol}} quota", "swap.details.feeOnTransfer.default": "Quota de testimoni", "swap.details.newQuote.input": "Nova entrada", @@ -1841,7 +1850,9 @@ "swap.review": "Intercanvi de ressenyes", "swap.review.summary": "Estàs intercanviant", "swap.reviewLimit": "Límit de revisió", - "swap.route.optimizedGasCost": "Aquesta ruta optimitza la producció total tenint en compte les rutes dividides, els salts múltiples i el cost del gas de cada pas.", + "swap.route.optimizedGasCost": "Aquesta ruta optimitza la vostra sortida total tenint en compte les rutes dividides, els salts múltiples i els costos de xarxa de cada pas.", + "swap.settings.deadline.tooltip": "La transacció es revertirà si està pendent durant més d'aquest període de temps. (Màxim: 3 dies).", + "swap.settings.deadline.warning": "Termini elevat", "swap.settings.protection.description": "Amb la protecció d'intercanvi activada, les vostres transaccions d'Ethereum estaran protegides dels atacs sandvitx, amb possibilitats de fracàs reduïdes.", "swap.settings.protection.subtitle.supported": "{{chainName}} Xarxa", "swap.settings.protection.subtitle.unavailable": "No disponible el {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "piscines v3", "swap.settings.routingPreference.option.v4.title": "piscines v4", "swap.settings.routingPreference.title": "Opcions comercials", + "swap.settings.slippage.alert": "Alt lliscament", "swap.settings.slippage.control.auto": "Automàtic", "swap.settings.slippage.description": "La vostra transacció es revertirà si el preu canvia més que el percentatge de lliscament.", "swap.settings.slippage.input.message": "Si el preu baixa més, la transacció es revertirà. A continuació es mostra la quantitat mínima que es garanteix rebre.", "swap.settings.slippage.input.receive.title": "Rebre almenys", "swap.settings.slippage.output.message": "Si el preu baixa més, la transacció es revertirà. A continuació es mostra la quantitat màxima que hauríeu de gastar.", "swap.settings.slippage.output.spend.title": "Gastar com a màxim", + "swap.settings.slippage.warning": "Lliscament molt alt", + "swap.settings.slippage.warning.description": "És probable que un lliscament per sobre del 20% es tradueixi en un comerç desfavorable. Per reduir el risc de ser de primera línia, reduïu la configuració.", + "swap.settings.slippage.warning.hover": "Això pot donar lloc a un comerç desfavorable. Proveu de reduir la configuració de lliscament.", "swap.settings.slippage.warning.max": "Introduïu un valor inferior a {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "El lliscament pot ser més gran del necessari", "swap.settings.slippage.warning.min": "Introduïu un valor superior a 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Des de", "transaction.details.networkFee": "Cost de la xarxa", + "transaction.details.providerFee": "Tarifa del proveïdor", "transaction.details.swapRate": "Taxa", "transaction.details.transaction": "Transacció", "transaction.details.uniswapFee": "Comissió ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Revocant", "transaction.status.revoke.success": "Revocat", "transaction.status.revoke.successDapp": "Revocat el {{externalDappName}}", + "transaction.status.sale.canceled": "Venda cancel·lada", + "transaction.status.sale.canceling": "Anul·lació de venda", + "transaction.status.sale.failedOn": "La venda ha fallat mitjançant {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Ven a través de {{serviceProvider}}", + "transaction.status.sale.successOn": "Venut a través de {{serviceProvider}}", "transaction.status.sell.canceled": "Venda cancel·lada", "transaction.status.sell.canceling": "S'està cancel·lant la venda", "transaction.status.sell.failed": "No s'ha pogut vendre", diff --git a/packages/uniswap/src/i18n/locales/translations/cs-CZ.json b/packages/uniswap/src/i18n/locales/translations/cs-CZ.json index 6e6d009c92a..fee332e2bf6 100644 --- a/packages/uniswap/src/i18n/locales/translations/cs-CZ.json +++ b/packages/uniswap/src/i18n/locales/translations/cs-CZ.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likvidita odstraněna", "common.loading": "načítání", "common.loadingAllowance": "Přídavek na zatížení", + "common.loadMore": "Načíst více", "common.longText.button.less": "Méně čtěte", "common.longText.button.more": "Přečtěte si více", "common.lowPrice": "Nízká cena", @@ -540,8 +541,8 @@ "common.resetLimit": "Resetovat limit {{symbol}}", "common.resetLimitWallet": "Resetujte limit {{symbol}} v peněžence", "common.resettingLimit": "Resetování limitu {{symbol}} ...", - "common.resolveIssue": "Vyřešte problém", - "common.resolveIssues": "Vyřešte {{issues}} problémů", + "common.resolveIssues_one": "Vyřešte problém", + "common.resolveIssues_other": "Vyřešte {{count}} problémů", "common.restricted.region": "Omezený region", "common.return.label": "Vrátit se", "common.returnToTop": "Návrat nahoru", @@ -602,21 +603,25 @@ "common.thisWeek": "Tento týden", "common.thisYear": "Tento rok", "common.time": "Čas", - "common.time.day": "den", "common.time.days": "dní", - "common.time.hour": "hodina", + "common.time.days_one": "den", + "common.time.days_other": "dní", "common.time.hours": "hodin", + "common.time.hours_one": "hodina", + "common.time.hours_other": "hodin", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minut", - "common.time.month": "měsíc", "common.time.months": "měsíce", + "common.time.months_one": "měsíc", + "common.time.months_other": "měsíce", "common.time.past.days": "Před {{days}}d", "common.time.past.hours": "Před {{hours}}h", "common.time.past.minutes": "Před {{minutes}}m", "common.time.past.months": "{{months}}před měsícem", "common.time.past.seconds": "Před {{seconds}}s", - "common.time.week": "týden", "common.time.weeks": "týdnů", + "common.time.weeks_one": "týden", + "common.time.weeks_other": "týdnů", "common.tip.label": "Spropitné:", "common.to": "na", "common.today": "Dnes", @@ -634,8 +639,8 @@ "common.transactions": "Transakce", "common.transactionSettings": "Nastavení transakcí", "common.transactionSubmitted": "Transakce odeslána", - "common.transfer": "převod", - "common.transfers": "převody", + "common.transfer_one": "převod", + "common.transfer_other": "převody", "common.tryAgain.error": "Zkus to znovu", "common.twitter": "Cvrlikání", "common.type.label": "Typ", @@ -856,6 +861,7 @@ "fee.tier.new": "Nová úroveň", "fee.tier.percent.select": "{{percentage}} vyberte", "fee.tier.recommended": "Doporučeno", + "fee.tier.recommended.description": "Doporučeno na základě nejvyššího podílu likvidity pro vybraný pár tokenů.", "fee.tier.search": "Vyhledejte nebo vytvořte další úrovně poplatků", "fee.tier.search.short": "Hledejte úrovně", "fee.tier.select": "Vyberte úroveň poplatků", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Prodej s", "fiatOffRamp.connection.quote": "Prodej {{amount}} v hodnotě {{currencySymbol}}", "fiatOffRamp.error.balance": "Překračuje rovnováhu", + "fiatOffRamp.summary.total": "{{cryptoAmount}} pro {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Vraťte se", "fiatOffRamp.unsupportedToken.divider": "Nepodporované tokeny", "fiatOffRamp.unsupportedToken.message": "Prodej tohoto tokenu není podporován. Vyměňte toto aktivum za jeden z podporovaných tokenů.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Spravujte {{quoteSymbol}}/{{baseSymbol}} likviditu fondu na Uniswapu", "liquidityPool.positions.page.version.description": "Prohlédněte si své aktivní {{version}} pozice likvidity. Přidejte nové pozice.", "liquidityPool.positions.page.version.title": "Spravujte likviditu fondu{{version}} na Uniswapu", - "liquidityPool.positions.price": "{{amountWithSymbol}} za {{outputToken}}", "liquidityPool.positions.price.formatted": " za ", "migrate.allowed": "Povoleno", "migrate.allowLpMigration": "Povolit migraci tokenu LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 umožňuje sdílení a správu tokenů napříč různými aplikacemi.", "pool.activePositions.appear": "Zde se zobrazí vaše aktivní pozice likvidity V3.", "pool.activeRange": "Aktivní rozsah klíšťat", + "pool.addAs": "Přidat jako {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Přidejte likviditu na {{tokenPair}} ({{chain}}) na Uniswapu", "pool.addMoreLiquidity": "Přidejte více likvidity", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D obj./TVL", "pool.volume.thirtyDay": "30denní objem", "pool.volume.thirtyDay.short": "30D sv", + "pool.withdrawAs": "Odeberte jako {{nativeWrappedSymbol}}", "pool.yourv2": "Vaše likvidita V2", "poolFinder.availablePools": "K dispozici bazény", "poolFinder.availablePools.found.description": "v2 bazény odpovídající vašemu výběru páru.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Rozbalit", "swap.button.wrap": "Zabalit", "swap.buy.countryModal.placeholder": "Vyhledávání podle země nebo regionu", - "swap.cancel.cannotExecute": "Váš swap se může provést před zpracováním zrušení. Vaše síťové náklady nelze vrátit. Přejete si pokračovat?", - "swap.cancel.cannotExecute.plural": "Vaše swapy se mohou provést před zpracováním zrušení. Vaše síťové náklady nelze vrátit. Přejete si pokračovat?", + "swap.cancel.cannotExecute_one": "Váš swap se může provést před zpracováním zrušení. Vaše síťové náklady nelze vrátit. Přejete si pokračovat?", + "swap.cancel.cannotExecute_other": "Vaše swapy se mohou provést před zpracováním zrušení. Vaše síťové náklady nelze vrátit. Přejete si pokračovat?", "swap.confirmLimit": "Potvrďte limit", "swap.confirmSwap": "Potvrďte výměnu", "swap.deadline.settings.title": "Termín transakce", + "swap.deadline.settings.title.short": "Tx. lhůta", "swap.details.feeOnTransfer": "{{tokenSymbol}} poplatek", "swap.details.feeOnTransfer.default": "Token poplatek", "swap.details.newQuote.input": "Nový vstup", @@ -1841,7 +1850,9 @@ "swap.review": "Výměna recenze", "swap.review.summary": "Vyměňujete se", "swap.reviewLimit": "Limit kontroly", - "swap.route.optimizedGasCost": "Tato trasa optimalizuje váš celkový výkon zohledněním rozdělených tras, více skoků a ceny plynu každého kroku.", + "swap.route.optimizedGasCost": "Tato trasa optimalizuje váš celkový výstup zohledněním rozdělených tras, více skoků a síťových nákladů každého kroku.", + "swap.settings.deadline.tooltip": "Vaše transakce bude vrácena, pokud bude nevyřízena déle než toto časové období. (Maximálně: 3 dny).", + "swap.settings.deadline.warning": "Vysoký termín", "swap.settings.protection.description": "Se zapnutou ochranou swapu budou vaše transakce Ethereum chráněny před sendvičovými útoky se sníženou pravděpodobností selhání.", "swap.settings.protection.subtitle.supported": "{{chainName}} Síť", "swap.settings.protection.subtitle.unavailable": "Není k dispozici na {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 bazény", "swap.settings.routingPreference.option.v4.title": "v4 bazény", "swap.settings.routingPreference.title": "Obchodní opce", + "swap.settings.slippage.alert": "Vysoký skluz", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Vaše transakce se vrátí, pokud se cena změní více než procento skluzu.", "swap.settings.slippage.input.message": "Pokud cena klesne ještě více, vaše transakce se vrátí. Níže je uvedena minimální částka, kterou zaručeně obdržíte.", "swap.settings.slippage.input.receive.title": "Přijmout alespoň", "swap.settings.slippage.output.message": "Pokud cena klesne ještě více, vaše transakce se vrátí zpět. Níže je uvedena maximální částka, kterou budete muset utratit.", "swap.settings.slippage.output.spend.title": "Maximálně utratit", + "swap.settings.slippage.warning": "Velmi vysoký skluz", + "swap.settings.slippage.warning.description": "Skluz nad 20 % pravděpodobně povede k nepříznivému obchodu. Chcete-li snížit riziko, že bude spuštěn zepředu, snižte nastavení.", + "swap.settings.slippage.warning.hover": "To může mít za následek nevýhodný obchod. Zkuste snížit nastavení prokluzu.", "swap.settings.slippage.warning.max": "Zadejte hodnotu menší než {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Prokluz může být vyšší, než je nutné", "swap.settings.slippage.warning.min": "Zadejte hodnotu větší než 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Aplikace", "transaction.details.from": "Z", "transaction.details.networkFee": "Náklady na síť", + "transaction.details.providerFee": "Poplatek poskytovatele", "transaction.details.swapRate": "Hodnotit", "transaction.details.transaction": "Transakce", "transaction.details.uniswapFee": "Poplatek ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Odvolávání", "transaction.status.revoke.success": "Odvoláno", "transaction.status.revoke.successDapp": "Odvoláno dne {{externalDappName}}", + "transaction.status.sale.canceled": "Zrušený prodej", + "transaction.status.sale.canceling": "Zrušení prodeje", + "transaction.status.sale.failedOn": "Prodej se nezdařil přes {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Prodej přes {{serviceProvider}}", + "transaction.status.sale.successOn": "Prodáváno přes {{serviceProvider}}", "transaction.status.sell.canceled": "Prodej zrušen", "transaction.status.sell.canceling": "Zrušení prodeje", "transaction.status.sell.failed": "Nepodařilo se prodat", diff --git a/packages/uniswap/src/i18n/locales/translations/da-DK.json b/packages/uniswap/src/i18n/locales/translations/da-DK.json index 94606dbd330..fe4ace02d26 100644 --- a/packages/uniswap/src/i18n/locales/translations/da-DK.json +++ b/packages/uniswap/src/i18n/locales/translations/da-DK.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likviditet fjernet", "common.loading": "Indlæser", "common.loadingAllowance": "Lastegodtgørelse", + "common.loadMore": "Indlæs mere", "common.longText.button.less": "Læs mindre", "common.longText.button.more": "Læs mere", "common.lowPrice": "Lav pris", @@ -540,8 +541,8 @@ "common.resetLimit": "Nulstil {{symbol}} grænsen", "common.resetLimitWallet": "Nulstil {{symbol}} grænsen i tegnebogen", "common.resettingLimit": "Nulstiller {{symbol}} grænse...", - "common.resolveIssue": "Løs problemet", - "common.resolveIssues": "Løs {{issues}} problemer", + "common.resolveIssues_one": "Løs problemet", + "common.resolveIssues_other": "Løs {{count}} problemer", "common.restricted.region": "Begrænset region", "common.return.label": "Vend tilbage", "common.returnToTop": "Vend tilbage til toppen", @@ -602,21 +603,25 @@ "common.thisWeek": "Denne uge", "common.thisYear": "Dette år", "common.time": "Tid", - "common.time.day": "dag", "common.time.days": "dage", - "common.time.hour": "time", + "common.time.days_one": "dag", + "common.time.days_other": "dage", "common.time.hours": "timer", + "common.time.hours_one": "time", + "common.time.hours_other": "timer", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minutter", - "common.time.month": "måned", "common.time.months": "måneder", + "common.time.months_one": "måned", + "common.time.months_other": "måneder", "common.time.past.days": "{{days}}d siden", "common.time.past.hours": "{{hours}}t siden", "common.time.past.minutes": "{{minutes}}m siden", "common.time.past.months": "{{months}}måned siden", "common.time.past.seconds": "{{seconds}}s siden", - "common.time.week": "uge", "common.time.weeks": "uger", + "common.time.weeks_one": "uge", + "common.time.weeks_other": "uger", "common.tip.label": "Tip:", "common.to": "til", "common.today": "I dag", @@ -634,8 +639,8 @@ "common.transactions": "Transaktioner", "common.transactionSettings": "Transaktionsindstillinger", "common.transactionSubmitted": "Transaktion indsendt", - "common.transfer": "overførsel", - "common.transfers": "overførsler", + "common.transfer_one": "overførsel", + "common.transfer_other": "overførsler", "common.tryAgain.error": "Prøv igen", "common.twitter": "Twitter", "common.type.label": "Type", @@ -856,6 +861,7 @@ "fee.tier.new": "Nyt niveau", "fee.tier.percent.select": "{{percentage}} vælg", "fee.tier.recommended": "Anbefales", + "fee.tier.recommended.description": "Anbefalet baseret på at have den højeste andel af likviditet for det valgte token-par.", "fee.tier.search": "Søg eller opret andre gebyrniveauer", "fee.tier.search.short": "Søg i niveauer", "fee.tier.select": "Vælg gebyrniveau", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Sælg med", "fiatOffRamp.connection.quote": "Sælger {{amount}} til en værdi af {{currencySymbol}}", "fiatOffRamp.error.balance": "Overstiger balancen", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Gå tilbage", "fiatOffRamp.unsupportedToken.divider": "Ikke-understøttede tokens", "fiatOffRamp.unsupportedToken.message": "Dette token er ikke understøttet til at sælge. Skift dette aktiv til et af de understøttede tokens.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Administrer {{quoteSymbol}}/{{baseSymbol}} pulje likviditet på Uniswap", "liquidityPool.positions.page.version.description": "Se dine aktive {{version}} likviditetspositioner. Tilføj nye stillinger.", "liquidityPool.positions.page.version.title": "Administrer puljelikviditet{{version}} på Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} pr. {{outputToken}}", "liquidityPool.positions.price.formatted": " pr. ", "migrate.allowed": "Tilladt", "migrate.allowLpMigration": "Tillad migrering af LP-token", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 tillader token-godkendelser at blive delt og administreret på tværs af forskellige applikationer.", "pool.activePositions.appear": "Dine aktive V3-likviditetspositioner vises her.", "pool.activeRange": "Aktivt krydsområde", + "pool.addAs": "Tilføj som {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Tilføj likviditet til {{tokenPair}} ({{chain}}) på Uniswap", "pool.addMoreLiquidity": "Tilføj mere likviditet", "pool.apr": "ÅOP", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 dages volumen", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Træk tilbage som {{nativeWrappedSymbol}}", "pool.yourv2": "Din V2-likviditet", "poolFinder.availablePools": "Tilgængelige pools", "poolFinder.availablePools.found.description": "v2-puljer, der matcher dit parvalg.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Pak ud", "swap.button.wrap": "Indpakning", "swap.buy.countryModal.placeholder": "Søg efter land eller region", - "swap.cancel.cannotExecute": "Dit bytte kan udføres, før annulleringen er behandlet. Dine netværksomkostninger kan ikke refunderes. Ønsker du at fortsætte?", - "swap.cancel.cannotExecute.plural": "Dine swaps kan udføres, før annulleringen er behandlet. Dine netværksomkostninger kan ikke refunderes. Ønsker du at fortsætte?", + "swap.cancel.cannotExecute_one": "Dit bytte kan udføres, før annulleringen er behandlet. Dine netværksomkostninger kan ikke refunderes. Ønsker du at fortsætte?", + "swap.cancel.cannotExecute_other": "Dine swaps kan udføres, før annulleringen er behandlet. Dine netværksomkostninger kan ikke refunderes. Ønsker du at fortsætte?", "swap.confirmLimit": "Bekræft grænse", "swap.confirmSwap": "Bekræft bytte", "swap.deadline.settings.title": "Transaktionsfrist", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} gebyr", "swap.details.feeOnTransfer.default": "Token gebyr", "swap.details.newQuote.input": "Nyt input", @@ -1841,7 +1850,9 @@ "swap.review": "Anmeldelsesbytte", "swap.review.summary": "Du bytter", "swap.reviewLimit": "Gennemgå grænse", - "swap.route.optimizedGasCost": "Denne rute optimerer dit samlede output ved at overveje opdelte ruter, flere hop og gasprisen for hvert trin.", + "swap.route.optimizedGasCost": "Denne rute optimerer dit samlede output ved at overveje opdelte ruter, flere hop og netværksomkostningerne for hvert trin.", + "swap.settings.deadline.tooltip": "Din transaktion vil vende tilbage, hvis den er afventende i mere end denne periode. (Maksimum: 3 dage).", + "swap.settings.deadline.warning": "Høj deadline", "swap.settings.protection.description": "Med swap-beskyttelse aktiveret vil dine Ethereum-transaktioner være beskyttet mod sandwich-angreb med reducerede chancer for fiasko.", "swap.settings.protection.subtitle.supported": "{{chainName}} Netværk", "swap.settings.protection.subtitle.unavailable": "Ikke tilgængelig på {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 puljer", "swap.settings.routingPreference.option.v4.title": "v4 puljer", "swap.settings.routingPreference.title": "Handelsmuligheder", + "swap.settings.slippage.alert": "Høj glidning", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Din transaktion går tilbage, hvis prisen ændrer sig mere end slipprocenten.", "swap.settings.slippage.input.message": "Hvis prisen falder yderligere, vil din transaktion vende tilbage. Nedenfor er det minimumsbeløb, du er garanteret at modtage.", "swap.settings.slippage.input.receive.title": "Modtag i det mindste", "swap.settings.slippage.output.message": "Hvis prisen falder yderligere, vil din transaktion vende tilbage. Nedenfor er det maksimale beløb, du skal bruge.", "swap.settings.slippage.output.spend.title": "Brug højst", + "swap.settings.slippage.warning": "Meget høj glidning", + "swap.settings.slippage.warning.description": "Skridning over 20% vil sandsynligvis resultere i en ugunstig handel. Sænk dine indstillinger for at reducere risikoen for at blive frontløbet.", + "swap.settings.slippage.warning.hover": "Dette kan resultere i en ugunstig handel. Prøv at sænke din slip-indstilling.", "swap.settings.slippage.warning.max": "Indtast en værdi mindre end {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Skridningen kan være højere end nødvendigt", "swap.settings.slippage.warning.min": "Indtast en værdi større end 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Fra", "transaction.details.networkFee": "Netværksomkostninger", + "transaction.details.providerFee": "Udbyder gebyr", "transaction.details.swapRate": "Sats", "transaction.details.transaction": "Transaktion", "transaction.details.uniswapFee": "Gebyr ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Tilbagekaldelse", "transaction.status.revoke.success": "Tilbagekaldt", "transaction.status.revoke.successDapp": "Tilbagekaldt den {{externalDappName}}", + "transaction.status.sale.canceled": "Annulleret salg", + "transaction.status.sale.canceling": "Annullerer salg", + "transaction.status.sale.failedOn": "Salg mislykkedes via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Sælges via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sælges via {{serviceProvider}}", "transaction.status.sell.canceled": "Annulleret salg", "transaction.status.sell.canceling": "Annullerer salg", "transaction.status.sell.failed": "Det lykkedes ikke at sælge", diff --git a/packages/uniswap/src/i18n/locales/translations/de-DE.json b/packages/uniswap/src/i18n/locales/translations/de-DE.json index 5016acaaeb5..226585fe7f5 100644 --- a/packages/uniswap/src/i18n/locales/translations/de-DE.json +++ b/packages/uniswap/src/i18n/locales/translations/de-DE.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Liquidität entfernt", "common.loading": "Wird geladen", "common.loadingAllowance": "Zuladung", + "common.loadMore": "Mehr laden", "common.longText.button.less": "Lese weniger", "common.longText.button.more": "Mehr lesen", "common.lowPrice": "Niedriger Preis", @@ -540,8 +541,8 @@ "common.resetLimit": "Limit {{symbol}} zurücksetzen", "common.resetLimitWallet": "Limit von {{symbol}} im Portemonnaie zurücksetzen", "common.resettingLimit": "Limit {{symbol}} wird zurückgesetzt …", - "common.resolveIssue": "Problem beheben", - "common.resolveIssues": "{{issues}} Probleme lösen", + "common.resolveIssues_one": "Problem beheben", + "common.resolveIssues_other": "{{count}} Probleme lösen", "common.restricted.region": "Eingeschränkter Bereich", "common.return.label": "Zurückkehren", "common.returnToTop": "Zurück nach oben", @@ -602,21 +603,25 @@ "common.thisWeek": "Diese Woche", "common.thisYear": "Dieses Jahr", "common.time": "Zeit", - "common.time.day": "Tag", "common.time.days": "Tage", - "common.time.hour": "Stunde", + "common.time.days_one": "Tag", + "common.time.days_other": "Tage", "common.time.hours": "Std.", + "common.time.hours_one": "Stunde", + "common.time.hours_other": "Std.", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "Protokoll", - "common.time.month": "Monat", "common.time.months": "Monate", + "common.time.months_one": "Monat", + "common.time.months_other": "Monate", "common.time.past.days": "vor {{days}}Tagen", "common.time.past.hours": "vor {{hours}}Stunden", "common.time.past.minutes": "vor {{minutes}} Monaten", "common.time.past.months": "vor {{months}}Monaten", "common.time.past.seconds": "vor {{seconds}}Sek.", - "common.time.week": "Woche", "common.time.weeks": "Wochen", + "common.time.weeks_one": "Woche", + "common.time.weeks_other": "Wochen", "common.tip.label": "Tipp:", "common.to": "zu", "common.today": "Heute", @@ -634,8 +639,8 @@ "common.transactions": "Transaktionen", "common.transactionSettings": "Transaktionseinstellungen", "common.transactionSubmitted": "Transaktion übermittelt", - "common.transfer": "überweisen", - "common.transfers": "Überweisungen", + "common.transfer_one": "überweisen", + "common.transfer_other": "Überweisungen", "common.tryAgain.error": "Versuchen Sie es erneut", "common.twitter": "Þjórsárdalur", "common.type.label": "Typ", @@ -856,6 +861,7 @@ "fee.tier.new": "Neue Stufe", "fee.tier.percent.select": "{{percentage}} auswählen", "fee.tier.recommended": "Empfohlen", + "fee.tier.recommended.description": "Empfohlen basierend auf dem höchsten Liquiditätsanteil für das ausgewählte Token-Paar.", "fee.tier.search": "Suchen oder erstellen Sie andere Gebührenstufen", "fee.tier.search.short": "Suchebenen", "fee.tier.select": "Gebührenstufe auswählen", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Verkaufen mit", "fiatOffRamp.connection.quote": "Verkaufe {{currencySymbol}}im Wert von {{amount}}", "fiatOffRamp.error.balance": "Überschreitet das Guthaben", + "fiatOffRamp.summary.total": "{{cryptoAmount}} für {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Geh zurück", "fiatOffRamp.unsupportedToken.divider": "Nicht unterstützte Token", "fiatOffRamp.unsupportedToken.message": "Der Verkauf dieses Tokens wird nicht unterstützt. Tauschen Sie diesen Vermögenswert gegen einen der unterstützten Token aus.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Verwalten Sie {{quoteSymbol}}/{{baseSymbol}} Poolliquidität auf Uniswap", "liquidityPool.positions.page.version.description": "Zeigen Sie Ihre aktiven {{version}} Liquiditätspositionen an. Fügen Sie neue Positionen hinzu.", "liquidityPool.positions.page.version.title": "Verwalten Sie die Poolliquidität{{version}} auf Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} pro {{outputToken}}", "liquidityPool.positions.price.formatted": " pro ", "migrate.allowed": "Erlaubt", "migrate.allowLpMigration": "LP-Token-Migration zulassen", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 ermöglicht die gemeinsame Nutzung und Verwaltung von Token-Genehmigungen über verschiedene Anwendungen hinweg.", "pool.activePositions.appear": "Ihre aktiven V3-Liquiditätspositionen werden hier angezeigt.", "pool.activeRange": "Aktiver Tickbereich", + "pool.addAs": "Hinzufügen als {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Fügen Sie Liquidität zu {{tokenPair}} ({{chain}}) auf Uniswap hinzu", "pool.addMoreLiquidity": "Mehr Liquidität schaffen", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D-Volt/TVL", "pool.volume.thirtyDay": "30 Tage Volumen", "pool.volume.thirtyDay.short": "30D Volumen", + "pool.withdrawAs": "Abheben als {{nativeWrappedSymbol}}", "pool.yourv2": "Ihre V2-Liquidität", "poolFinder.availablePools": "Verfügbare Pools", "poolFinder.availablePools.found.description": "v2-Pools, die zu Ihrer Paarauswahl passen.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Auspacken", "swap.button.wrap": "Wickeln", "swap.buy.countryModal.placeholder": "Suche nach Land oder Region", - "swap.cancel.cannotExecute": "Ihr Tausch könnte ausgeführt werden, bevor die Stornierung bearbeitet wird. Ihre Netzwerkkosten können nicht erstattet werden. Möchten Sie fortfahren?", - "swap.cancel.cannotExecute.plural": "Ihre Swaps könnten ausgeführt werden, bevor die Stornierung bearbeitet wird. Ihre Netzwerkkosten können nicht erstattet werden. Möchten Sie fortfahren?", + "swap.cancel.cannotExecute_one": "Ihr Tausch könnte ausgeführt werden, bevor die Stornierung bearbeitet wird. Ihre Netzwerkkosten können nicht erstattet werden. Möchten Sie fortfahren?", + "swap.cancel.cannotExecute_other": "Ihre Swaps könnten ausgeführt werden, bevor die Stornierung bearbeitet wird. Ihre Netzwerkkosten können nicht erstattet werden. Möchten Sie fortfahren?", "swap.confirmLimit": "Limit bestätigen", "swap.confirmSwap": "Tausch bestätigen", "swap.deadline.settings.title": "Transaktionsfrist", + "swap.deadline.settings.title.short": "Sendefrist", "swap.details.feeOnTransfer": "{{tokenSymbol}} Gebühr", "swap.details.feeOnTransfer.default": "Token-Gebühr", "swap.details.newQuote.input": "Neuer Input", @@ -1841,7 +1850,9 @@ "swap.review": "Rezensionstausch", "swap.review.summary": "Du tauschst", "swap.reviewLimit": "Überprüfungslimit", - "swap.route.optimizedGasCost": "Diese Route optimiert Ihre Gesamtausgabe, indem sie geteilte Routen, mehrere Hops und die Gaskosten jedes Schritts berücksichtigt.", + "swap.route.optimizedGasCost": "Diese Route optimiert Ihre Gesamtausgabe, indem sie geteilte Routen, mehrere Hops und die Netzwerkkosten jedes Schritts berücksichtigt.", + "swap.settings.deadline.tooltip": "Ihre Transaktion wird rückgängig gemacht, wenn sie länger als diesen Zeitraum aussteht. (Maximal: 3 Tage).", + "swap.settings.deadline.warning": "Hohe Frist", "swap.settings.protection.description": "Wenn der Swap-Schutz aktiviert ist, sind Ihre Ethereum-Transaktionen vor Sandwich-Angriffen geschützt und die Wahrscheinlichkeit eines Fehlers ist geringer.", "swap.settings.protection.subtitle.supported": "{{chainName}} Netzwerk", "swap.settings.protection.subtitle.unavailable": "Nicht verfügbar am {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "V3-Pools", "swap.settings.routingPreference.option.v4.title": "v4-Pools", "swap.settings.routingPreference.title": "Handelsoptionen", + "swap.settings.slippage.alert": "Hoher Schlupf", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Ihre Transaktion wird rückgängig gemacht, wenn sich der Preis um mehr als den Slippage-Prozentsatz ändert.", "swap.settings.slippage.input.message": "Wenn der Preis weiter sinkt, wird Ihre Transaktion rückgängig gemacht. Unten sehen Sie den Mindestbetrag, den Sie garantiert erhalten.", "swap.settings.slippage.input.receive.title": "Erhalten Sie mindestens", "swap.settings.slippage.output.message": "Wenn der Preis weiter sinkt, wird Ihre Transaktion rückgängig gemacht. Unten sehen Sie den Höchstbetrag, den Sie ausgeben müssen.", "swap.settings.slippage.output.spend.title": "Geben Sie höchstens", + "swap.settings.slippage.warning": "Sehr hoher Schlupf", + "swap.settings.slippage.warning.description": "Ein Slippage von über 20 % führt wahrscheinlich zu einem ungünstigen Handel. Um das Risiko eines Frontruns zu verringern, verringern Sie Ihre Einstellungen.", + "swap.settings.slippage.warning.hover": "Dies kann zu einem ungünstigen Handel führen. Versuchen Sie, Ihre Slippage-Einstellung zu verringern.", "swap.settings.slippage.warning.max": "Geben Sie einen Wert kleiner als {{maxSlippageTolerance}}ein", "swap.settings.slippage.warning.message": "Der Schlupf kann höher sein als nötig", "swap.settings.slippage.warning.min": "Geben Sie einen Wert größer als 0 ein", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Aus", "transaction.details.networkFee": "Netzwerkkosten", + "transaction.details.providerFee": "Anbietergebühr", "transaction.details.swapRate": "Rate", "transaction.details.transaction": "Transaktion", "transaction.details.uniswapFee": "Gebühr ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Widerruf", "transaction.status.revoke.success": "Widerrufen", "transaction.status.revoke.successDapp": "Widerrufen am {{externalDappName}}", + "transaction.status.sale.canceled": "Abgebrochener Verkauf", + "transaction.status.sale.canceling": "Verkauf abbrechen", + "transaction.status.sale.failedOn": "Verkauf fehlgeschlagen über {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Verkauf über {{serviceProvider}}", + "transaction.status.sale.successOn": "Verkauft über {{serviceProvider}}", "transaction.status.sell.canceled": "Verkauf abgebrochen", "transaction.status.sell.canceling": "Verkauf abbrechen", "transaction.status.sell.failed": "Verkauf fehlgeschlagen", diff --git a/packages/uniswap/src/i18n/locales/translations/el-GR.json b/packages/uniswap/src/i18n/locales/translations/el-GR.json index 159e382d8ac..c0bfd435370 100644 --- a/packages/uniswap/src/i18n/locales/translations/el-GR.json +++ b/packages/uniswap/src/i18n/locales/translations/el-GR.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Η ρευστότητα αφαιρέθηκε", "common.loading": "Φόρτωση", "common.loadingAllowance": "Επίδομα φόρτωσης", + "common.loadMore": "Φορτώστε περισσότερα", "common.longText.button.less": "Διαβάστε λιγότερο", "common.longText.button.more": "Διαβάστε περισσότερα", "common.lowPrice": "Χαμηλή τιμή", @@ -540,8 +541,8 @@ "common.resetLimit": "Επαναφορά ορίου {{symbol}}", "common.resetLimitWallet": "Επαναφέρετε το όριο {{symbol}} στο πορτοφόλι", "common.resettingLimit": "Επαναφορά ορίου {{symbol}} ...", - "common.resolveIssue": "Επίλυση προβλήματος", - "common.resolveIssues": "Επίλυση προβλημάτων {{issues}}", + "common.resolveIssues_one": "Επίλυση προβλήματος", + "common.resolveIssues_other": "Επίλυση προβλημάτων {{count}}", "common.restricted.region": "Περιορισμένη περιοχή", "common.return.label": "ΕΠΙΣΤΡΟΦΗ", "common.returnToTop": "Επιστροφή στην κορυφή", @@ -602,21 +603,25 @@ "common.thisWeek": "Αυτή την εβδομάδα", "common.thisYear": "Αυτή την χρονιά", "common.time": "χρόνος", - "common.time.day": "ημέρα", "common.time.days": "ημέρες", - "common.time.hour": "ώρα", + "common.time.days_one": "ημέρα", + "common.time.days_other": "ημέρες", "common.time.hours": "ώρες", + "common.time.hours_one": "ώρα", + "common.time.hours_other": "ώρες", "common.time.minute.amt": "{{time}}μ", "common.time.minutes": "λεπτά", - "common.time.month": "μήνα", "common.time.months": "μήνες", + "common.time.months_one": "μήνα", + "common.time.months_other": "μήνες", "common.time.past.days": "Πριν από {{days}}η", "common.time.past.hours": "Πριν από {{hours}}ώρες", "common.time.past.minutes": "Πριν από {{minutes}}μ", "common.time.past.months": "{{months}}πριν από ένα μήνα", "common.time.past.seconds": "Πριν από {{seconds}}", - "common.time.week": "εβδομάδα", "common.time.weeks": "εβδομάδες", + "common.time.weeks_one": "εβδομάδα", + "common.time.weeks_other": "εβδομάδες", "common.tip.label": "Υπόδειξη:", "common.to": "προς την", "common.today": "Σήμερα", @@ -634,8 +639,8 @@ "common.transactions": "Συναλλαγές", "common.transactionSettings": "Ρυθμίσεις συναλλαγών", "common.transactionSubmitted": "Η συναλλαγή υποβλήθηκε", - "common.transfer": "ΜΕΤΑΦΟΡΑ", - "common.transfers": "μεταγραφές", + "common.transfer_one": "ΜΕΤΑΦΟΡΑ", + "common.transfer_other": "μεταγραφές", "common.tryAgain.error": "Προσπάθησε ξανά", "common.twitter": "Κελάδημα", "common.type.label": "Τύπος", @@ -856,6 +861,7 @@ "fee.tier.new": "Νέα βαθμίδα", "fee.tier.percent.select": "{{percentage}} επιλέξτε", "fee.tier.recommended": "Συνιστάται", + "fee.tier.recommended.description": "Συνιστάται με βάση το ότι έχετε το υψηλότερο μερίδιο ρευστότητας για το επιλεγμένο ζεύγος διακριτικών.", "fee.tier.search": "Αναζητήστε ή δημιουργήστε άλλα επίπεδα χρέωσης", "fee.tier.search.short": "Επίπεδα αναζήτησης", "fee.tier.select": "Επιλέξτε επίπεδο χρέωσης", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Πουλήστε με", "fiatOffRamp.connection.quote": "Πωλείται {{amount}} αξίας {{currencySymbol}}", "fiatOffRamp.error.balance": "Υπερβαίνει το υπόλοιπο", + "fiatOffRamp.summary.total": "{{cryptoAmount}} για {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Πήγαινε πίσω", "fiatOffRamp.unsupportedToken.divider": "Μη υποστηριζόμενα διακριτικά", "fiatOffRamp.unsupportedToken.message": "Αυτό το διακριτικό δεν υποστηρίζεται για πώληση. Αλλάξτε αυτό το στοιχείο σε ένα από τα υποστηριζόμενα διακριτικά.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Διαχείριση {{quoteSymbol}}/{{baseSymbol}} ρευστότητας στο Uniswap", "liquidityPool.positions.page.version.description": "Δείτε τις ενεργές {{version}} θέσεις ρευστότητάς σας. Προσθήκη νέων θέσεων.", "liquidityPool.positions.page.version.title": "Διαχειριστείτε τη ρευστότητα της ομάδας{{version}} στο Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} ανά {{outputToken}}", "liquidityPool.positions.price.formatted": " ανά ", "migrate.allowed": "Επιτρέπεται", "migrate.allowLpMigration": "Να επιτρέπεται η μετεγκατάσταση διακριτικού LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Το Permit2 επιτρέπει την κοινή χρήση και τη διαχείριση των εγκρίσεων διακριτικών σε διαφορετικές εφαρμογές.", "pool.activePositions.appear": "Οι ενεργές σας θέσεις ρευστότητας V3 θα εμφανίζονται εδώ.", "pool.activeRange": "Εύρος ενεργού κρότωνα", + "pool.addAs": "Προσθήκη ως {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Προσθέστε ρευστότητα στο {{tokenPair}} ({{chain}}) στο Uniswap", "pool.addMoreLiquidity": "Προσθέστε περισσότερη ρευστότητα", "pool.apr": "ΑΠΡ", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "Τόμος 30 ημερών", "pool.volume.thirtyDay.short": "30D τόμ", + "pool.withdrawAs": "Απόσυρση ως {{nativeWrappedSymbol}}", "pool.yourv2": "Η ρευστότητά σας V2", "poolFinder.availablePools": "Διαθέσιμες πισίνες", "poolFinder.availablePools.found.description": "v2 πισίνες που ταιριάζουν με την επιλογή του ζευγαριού σας.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Ξεδιπλώνω", "swap.button.wrap": "Κάλυμμα", "swap.buy.countryModal.placeholder": "Αναζήτηση ανά χώρα ή περιοχή", - "swap.cancel.cannotExecute": "Η ανταλλαγή σας θα μπορούσε να εκτελεστεί πριν από την επεξεργασία της ακύρωσης. Το κόστος του δικτύου σας δεν μπορεί να επιστραφεί. Θέλετε να προχωρήσετε;", - "swap.cancel.cannotExecute.plural": "Οι ανταλλαγές σας θα μπορούσαν να εκτελεστούν πριν από την επεξεργασία της ακύρωσης. Το κόστος του δικτύου σας δεν μπορεί να επιστραφεί. Θέλετε να προχωρήσετε;", + "swap.cancel.cannotExecute_one": "Η ανταλλαγή σας θα μπορούσε να εκτελεστεί πριν από την επεξεργασία της ακύρωσης. Το κόστος του δικτύου σας δεν μπορεί να επιστραφεί. Θέλετε να προχωρήσετε;", + "swap.cancel.cannotExecute_other": "Οι ανταλλαγές σας θα μπορούσαν να εκτελεστούν πριν από την επεξεργασία της ακύρωσης. Το κόστος του δικτύου σας δεν μπορεί να επιστραφεί. Θέλετε να προχωρήσετε;", "swap.confirmLimit": "Επιβεβαίωση ορίου", "swap.confirmSwap": "Επιβεβαίωση ανταλλαγής", "swap.deadline.settings.title": "Προθεσμία συναλλαγής", + "swap.deadline.settings.title.short": "Tx. διορία", "swap.details.feeOnTransfer": "{{tokenSymbol}} αμοιβή", "swap.details.feeOnTransfer.default": "Συμβολική αμοιβή", "swap.details.newQuote.input": "Νέα εισαγωγή", @@ -1841,7 +1850,9 @@ "swap.review": "Ανταλλαγή κριτικής", "swap.review.summary": "Ανταλλάσσετε", "swap.reviewLimit": "Όριο ελέγχου", - "swap.route.optimizedGasCost": "Αυτή η διαδρομή βελτιστοποιεί τη συνολική σας απόδοση λαμβάνοντας υπόψη τις διαιρούμενες διαδρομές, τα πολλαπλά άλματα και το κόστος αερίου κάθε βήματος.", + "swap.route.optimizedGasCost": "Αυτή η διαδρομή βελτιστοποιεί τη συνολική απόδοση λαμβάνοντας υπόψη τις διαχωρισμένες διαδρομές, τα πολλαπλά άλματα και το κόστος δικτύου κάθε βήματος.", + "swap.settings.deadline.tooltip": "Η συναλλαγή σας θα επανέλθει εάν είναι σε εκκρεμότητα για περισσότερο από αυτό το χρονικό διάστημα. (Μέγιστο: 3 ημέρες).", + "swap.settings.deadline.warning": "Υψηλή προθεσμία", "swap.settings.protection.description": "Με ενεργοποιημένη την προστασία ανταλλαγής, οι συναλλαγές σας στο Ethereum θα προστατεύονται από επιθέσεις σάντουιτς, με μειωμένες πιθανότητες αποτυχίας.", "swap.settings.protection.subtitle.supported": "{{chainName}} Δίκτυο", "swap.settings.protection.subtitle.unavailable": "Μη διαθέσιμο στις {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 πισίνες", "swap.settings.routingPreference.option.v4.title": "v4 πισίνες", "swap.settings.routingPreference.title": "Εμπορικές επιλογές", + "swap.settings.slippage.alert": "Υψηλή ολίσθηση", "swap.settings.slippage.control.auto": "Αυτο", "swap.settings.slippage.description": "Η συναλλαγή σας θα επανέλθει εάν η τιμή αλλάξει περισσότερο από το ποσοστό ολίσθησης.", "swap.settings.slippage.input.message": "Εάν η τιμή πέσει περαιτέρω, η συναλλαγή σας θα επανέλθει. Παρακάτω είναι το ελάχιστο ποσό που είναι εγγυημένο ότι θα λάβετε.", "swap.settings.slippage.input.receive.title": "Λάβετε τουλάχιστον", "swap.settings.slippage.output.message": "Εάν η τιμή πέσει περαιτέρω, η συναλλαγή σας θα επανέλθει. Παρακάτω είναι το μέγιστο ποσό που θα χρειαστεί να δαπανήσετε.", "swap.settings.slippage.output.spend.title": "Ξοδέψτε το πολύ", + "swap.settings.slippage.warning": "Πολύ υψηλή ολίσθηση", + "swap.settings.slippage.warning.description": "Η διολίσθηση άνω του 20% είναι πιθανό να οδηγήσει σε δυσμενή συναλλαγή. Για να μειώσετε τον κίνδυνο εκ των προτέρων, χαμηλώστε τις ρυθμίσεις σας.", + "swap.settings.slippage.warning.hover": "Αυτό μπορεί να οδηγήσει σε ένα δυσμενές εμπόριο. Δοκιμάστε να μειώσετε τη ρύθμιση ολίσθησης.", "swap.settings.slippage.warning.max": "Εισαγάγετε μια τιμή μικρότερη από {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Η ολίσθηση μπορεί να είναι μεγαλύτερη από όσο χρειάζεται", "swap.settings.slippage.warning.min": "Εισαγάγετε μια τιμή μεγαλύτερη από 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Από", "transaction.details.networkFee": "Κόστος δικτύου", + "transaction.details.providerFee": "Αμοιβή παρόχου", "transaction.details.swapRate": "Τιμή", "transaction.details.transaction": "Συναλλαγή", "transaction.details.uniswapFee": "Χρέωση ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Ανάκληση", "transaction.status.revoke.success": "Ανακλήθηκε", "transaction.status.revoke.successDapp": "Ανακλήθηκε στις {{externalDappName}}", + "transaction.status.sale.canceled": "Ακυρώθηκε η πώληση", + "transaction.status.sale.canceling": "Ακύρωση πώλησης", + "transaction.status.sale.failedOn": "Η πώληση απέτυχε μέσω {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Πώληση μέσω {{serviceProvider}}", + "transaction.status.sale.successOn": "Πωλείται μέσω {{serviceProvider}}", "transaction.status.sell.canceled": "Ακυρώθηκε η πώληση", "transaction.status.sell.canceling": "Ακύρωση πώλησης", "transaction.status.sell.failed": "Αποτυχία πώλησης", diff --git a/packages/uniswap/src/i18n/locales/translations/es-ES.json b/packages/uniswap/src/i18n/locales/translations/es-ES.json index 2f6ecef011c..2be03b73a31 100644 --- a/packages/uniswap/src/i18n/locales/translations/es-ES.json +++ b/packages/uniswap/src/i18n/locales/translations/es-ES.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Se eliminó la liquidez", "common.loading": "Cargando", "common.loadingAllowance": "Cargando prestación", + "common.loadMore": "Load more", "common.longText.button.less": "Leer menos", "common.longText.button.more": "Leer más", "common.lowPrice": "Precio bajo", @@ -540,8 +541,8 @@ "common.resetLimit": "Restablecer el límite de {{symbol}}", "common.resetLimitWallet": "Restablecer el límite de {{symbol}} en la billetera", "common.resettingLimit": "Restableciendo el límite de {{symbol}}…", - "common.resolveIssue": "Resolver problema", - "common.resolveIssues": "Resolver problemas de {{issues}}", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Región restringida", "common.return.label": "Volver", "common.returnToTop": "Volver al principio", @@ -602,21 +603,25 @@ "common.thisWeek": "Esta semana", "common.thisYear": "Este año", "common.time": "Hora", - "common.time.day": "día", "common.time.days": "días", - "common.time.hour": "hora", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "horas", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} min", "common.time.minutes": "minutos", - "common.time.month": "mes", "common.time.months": "meses", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "hace {{days}} días", "common.time.past.hours": "hace {{hours}} h", "common.time.past.minutes": "hace {{minutes}} min", "common.time.past.months": "hace {{months}} meses", "common.time.past.seconds": "hace {{seconds}} s", - "common.time.week": "semana", "common.time.weeks": "semanas", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Tip:", "common.to": "para", "common.today": "Hoy", @@ -634,8 +639,8 @@ "common.transactions": "Transacciones", "common.transactionSettings": "Configuración de la transacción", "common.transactionSubmitted": "Se envió la transacción", - "common.transfer": "transferencia", - "common.transfers": "transferencias", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Volver a intentarlo", "common.twitter": "Twitter", "common.type.label": "Tipo", @@ -856,6 +861,7 @@ "fee.tier.new": "Nuevo nivel", "fee.tier.percent.select": "{{percentage}} seleccionado", "fee.tier.recommended": "Recomendado", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Buscar o crear otros niveles de comisión", "fee.tier.search.short": "Buscar niveles", "fee.tier.select": "Seleccionar nivel de comisión", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Vender con", "fiatOffRamp.connection.quote": "Vendiendo {{amount}} por valor de {{currencySymbol}}", "fiatOffRamp.error.balance": "Supera el saldo", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Volver", "fiatOffRamp.unsupportedToken.divider": "Tokens no compatibles", "fiatOffRamp.unsupportedToken.message": "Este token no es compatible para la venta. Intercambia este activo por uno de los tokens compatibles.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Administra la liquidez del fondo {{quoteSymbol}}/{{baseSymbol}} en Uniswap", "liquidityPool.positions.page.version.description": "Ve tus posiciones de liquidez {{version}} activas. Agrega posiciones nuevas.", "liquidityPool.positions.page.version.title": "Administra la liquidez del fondo {{version}} en Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} por {{outputToken}}", "liquidityPool.positions.price.formatted": " por ", "migrate.allowed": "Permitido", "migrate.allowLpMigration": "Permitir la migración de tokens del LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 permite compartir y administrar las aprobaciones de tokens entre diferentes aplicaciones.", "pool.activePositions.appear": "Tus posiciones de liquidez V3 activas aparecerán aquí.", "pool.activeRange": "Rango de tick activo", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Agrega liquidez a {{tokenPair}} ({{chain}}) en Uniswap", "pool.addMoreLiquidity": "Agregar más liquidez", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "Volumen de 1 día/TVL", "pool.volume.thirtyDay": "Volumen de 30 días", "pool.volume.thirtyDay.short": "Vol. de 30 d", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Tu liquidez V2", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Desenvolver", "swap.button.wrap": "Envolver", "swap.buy.countryModal.placeholder": "Buscar por país o región", - "swap.cancel.cannotExecute": "El intercambio se podría ejecutar antes de que se procese la cancelación. Los costos de la red no se pueden reembolsar. ¿Quieres continuar?", - "swap.cancel.cannotExecute.plural": "Los intercambios se podrían ejecutar antes de que se procese la cancelación. Los costos de la red no se pueden reembolsar. ¿Quieres continuar?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Confirmar límite", "swap.confirmSwap": "Confirmar intercambio", "swap.deadline.settings.title": "Fecha límite de la transacción", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "Comisión de {{tokenSymbol}}", "swap.details.feeOnTransfer.default": "Comisión del token", "swap.details.newQuote.input": "Nueva entrada", @@ -1841,7 +1850,9 @@ "swap.review": "Revisar intercambio", "swap.review.summary": "Estás intercambiando", "swap.reviewLimit": "Revisar límite", - "swap.route.optimizedGasCost": "Esta ruta optimiza tu salida total, ya que considera rutas divididas, varios saltos y el costo de gas de cada paso.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Con la protección de intercambio activada, tus transacciones de Ethereum estarán protegidas de ataques sándwich, con menores posibilidades de falla.", "swap.settings.protection.subtitle.supported": "Red {{chainName}}", "swap.settings.protection.subtitle.unavailable": "No está disponible en {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Fondos v3", "swap.settings.routingPreference.option.v4.title": "Fondos v4", "swap.settings.routingPreference.title": "Opciones de trading", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Automático", "swap.settings.slippage.description": "La transacción se revertirá si el precio cambia más que el porcentaje de deslizamiento.", "swap.settings.slippage.input.message": "Si el precio baja más, la transacción se revertirá. A continuación, se muestra la cantidad mínima que tienes garantizado recibir.", "swap.settings.slippage.input.receive.title": "Recibir al menos", "swap.settings.slippage.output.message": "Si el precio baja más, la transacción se revertirá. A continuación, se muestra la cantidad máxima que tendrías que gastar.", "swap.settings.slippage.output.spend.title": "Gastar como máximo", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Ingresa un valor menor que {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "El deslizamiento puede ser mayor de lo necesario", "swap.settings.slippage.warning.min": "Ingresa un valor mayor que 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "De", "transaction.details.networkFee": "Costo de la red", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Tasa", "transaction.details.transaction": "Transacción", "transaction.details.uniswapFee": "Comisión ({{ feePercent }} %)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Revocando", "transaction.status.revoke.success": "Revocado", "transaction.status.revoke.successDapp": "Se revocó en {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Se canceló la venta", "transaction.status.sell.canceling": "Cancelando la venta", "transaction.status.sell.failed": "No se pudo vender", diff --git a/packages/uniswap/src/i18n/locales/translations/fi-FI.json b/packages/uniswap/src/i18n/locales/translations/fi-FI.json index e45a2f20b11..de8635d1cd9 100644 --- a/packages/uniswap/src/i18n/locales/translations/fi-FI.json +++ b/packages/uniswap/src/i18n/locales/translations/fi-FI.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likviditeetti poistettu", "common.loading": "Ladataan", "common.loadingAllowance": "Latauskorvaus", + "common.loadMore": "Lataa lisää", "common.longText.button.less": "Lue vähemmän", "common.longText.button.more": "Lue lisää", "common.lowPrice": "Alhainen hinta", @@ -540,8 +541,8 @@ "common.resetLimit": "Nollaa {{symbol}} -raja", "common.resetLimitWallet": "Nollaa {{symbol}} -raja lompakossa", "common.resettingLimit": "Nollataan {{symbol}} -rajaa...", - "common.resolveIssue": "Ratkaise ongelma", - "common.resolveIssues": "Ratkaise {{issues}} -ongelmat", + "common.resolveIssues_one": "Ratkaise ongelma", + "common.resolveIssues_other": "Ratkaise {{count}} -ongelmat", "common.restricted.region": "Rajoitettu alue", "common.return.label": "Palata", "common.returnToTop": "Palaa alkuun", @@ -602,21 +603,25 @@ "common.thisWeek": "Tämä viikko", "common.thisYear": "Tämä vuosi", "common.time": "Aika", - "common.time.day": "päivä", "common.time.days": "päivää", - "common.time.hour": "tunnin", + "common.time.days_one": "päivä", + "common.time.days_other": "päivää", "common.time.hours": "tuntia", + "common.time.hours_one": "tunnin", + "common.time.hours_other": "tuntia", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "pöytäkirja", - "common.time.month": "kuukausi", "common.time.months": "kuukaudet", + "common.time.months_one": "kuukausi", + "common.time.months_other": "kuukaudet", "common.time.past.days": "{{days}}d sitten", "common.time.past.hours": "{{hours}}h sitten", "common.time.past.minutes": "{{minutes}}min sitten", "common.time.past.months": "{{months}}kk sitten", "common.time.past.seconds": "{{seconds}}s sitten", - "common.time.week": "viikko", "common.time.weeks": "viikkoa", + "common.time.weeks_one": "viikko", + "common.time.weeks_other": "viikkoa", "common.tip.label": "Kärki:", "common.to": "vastaanottaja", "common.today": "Tänään", @@ -634,8 +639,8 @@ "common.transactions": "Tapahtumat", "common.transactionSettings": "Tapahtumaasetukset", "common.transactionSubmitted": "Tapahtuma lähetetty", - "common.transfer": "siirtää", - "common.transfers": "siirrot", + "common.transfer_one": "siirtää", + "common.transfer_other": "siirrot", "common.tryAgain.error": "Yritä uudelleen", "common.twitter": "Viserrys", "common.type.label": "Tyyppi", @@ -856,6 +861,7 @@ "fee.tier.new": "Uusi taso", "fee.tier.percent.select": "{{percentage}} valitse", "fee.tier.recommended": "Suositeltava", + "fee.tier.recommended.description": "Suositus perustuu valitun rahakeparin korkeimpaan likviditeettiosuuteen.", "fee.tier.search": "Hae tai luo muita maksutasoja", "fee.tier.search.short": "Hakutasot", "fee.tier.select": "Valitse maksutaso", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Myy kanssa", "fiatOffRamp.connection.quote": "Myydään {{amount}} arvosta {{currencySymbol}}", "fiatOffRamp.error.balance": "Ylittää tasapainon", + "fiatOffRamp.summary.total": "{{cryptoAmount}} {{fiatAmount}}:lle", "fiatOffRamp.unsupportedToken.back": "Mene takaisin", "fiatOffRamp.unsupportedToken.divider": "Tunnuksia ei tueta", "fiatOffRamp.unsupportedToken.message": "Tämän tunnuksen myyntiä ei tueta. Vaihda tämä omaisuus johonkin tuetuista tunnuksista.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Hallitse {{quoteSymbol}}/{{baseSymbol}} poolin likviditeettiä Uniswapissa", "liquidityPool.positions.page.version.description": "Tarkastele aktiivisia {{version}} likviditeettipositioitasi. Lisää uusia paikkoja.", "liquidityPool.positions.page.version.title": "Hallitse poolin likviditeettiä{{version}} Uniswapissa", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Sallittu", "migrate.allowLpMigration": "Salli LP-tunnuksen siirto", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 mahdollistaa tunnuksen hyväksyntöjen jakamisen ja hallinnan eri sovelluksissa.", "pool.activePositions.appear": "Aktiiviset V3-likviditeettipositiosi näkyvät täällä.", "pool.activeRange": "Aktiivinen punkkialue", + "pool.addAs": "Lisää muodossa {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Lisää likviditeettiä kohtaan {{tokenPair}} ({{chain}}) Uniswapissa", "pool.addMoreLiquidity": "Lisää likviditeettiä", "pool.apr": "HUHT", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 päivän volyymi", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Nosta kuin {{nativeWrappedSymbol}}", "pool.yourv2": "V2-likviditeettisi", "poolFinder.availablePools": "Käytettävissä olevat uima-altaat", "poolFinder.availablePools.found.description": "v2 poolit, jotka vastaavat parivalintaasi.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Avaa pakkaus", "swap.button.wrap": "Kääri", "swap.buy.countryModal.placeholder": "Hae maan tai alueen mukaan", - "swap.cancel.cannotExecute": "Vaihtosi voidaan suorittaa ennen kuin peruutus on käsitelty. Verkkokulujasi ei voida hyvittää. Haluatko jatkaa?", - "swap.cancel.cannotExecute.plural": "Vaihtosopimukset voidaan suorittaa ennen kuin peruutus on käsitelty. Verkkokulujasi ei voida hyvittää. Haluatko jatkaa?", + "swap.cancel.cannotExecute_one": "Vaihtosi voidaan suorittaa ennen kuin peruutus on käsitelty. Verkkokulujasi ei voida hyvittää. Haluatko jatkaa?", + "swap.cancel.cannotExecute_other": "Vaihtosopimukset voidaan suorittaa ennen kuin peruutus on käsitelty. Verkkokulujasi ei voida hyvittää. Haluatko jatkaa?", "swap.confirmLimit": "Vahvista raja", "swap.confirmSwap": "Vahvista vaihto", "swap.deadline.settings.title": "Kaupan määräaika", + "swap.deadline.settings.title.short": "Tx. määräaika", "swap.details.feeOnTransfer": "{{tokenSymbol}} maksu", "swap.details.feeOnTransfer.default": "Token maksu", "swap.details.newQuote.input": "Uusi tulo", @@ -1841,7 +1850,9 @@ "swap.review": "Arvostelun vaihto", "swap.review.summary": "Olet vaihtamassa", "swap.reviewLimit": "Tarkistamisraja", - "swap.route.optimizedGasCost": "Tämä reitti optimoi kokonaistehosi ottamalla huomioon jaetut reitit, useita hyppyjä ja kunkin askeleen polttoainekustannukset.", + "swap.route.optimizedGasCost": "Tämä reitti optimoi kokonaistuloksesi ottamalla huomioon jaetut reitit, useita hyppyjä ja kunkin vaiheen verkkokustannukset.", + "swap.settings.deadline.tooltip": "Tapahtumasi palautetaan, jos se on vireillä yli tämän ajanjakson. (Enintään: 3 päivää).", + "swap.settings.deadline.warning": "Korkea määräaika", "swap.settings.protection.description": "Kun swap-suojaus on käytössä, Ethereum-tapahtumasi suojataan sandwich-hyökkäyksiltä, mikä vähentää epäonnistumisen mahdollisuuksia.", "swap.settings.protection.subtitle.supported": "{{chainName}} Verkko", "swap.settings.protection.subtitle.unavailable": "Ei saatavilla {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 poolit", "swap.settings.routingPreference.option.v4.title": "v4 poolit", "swap.settings.routingPreference.title": "Kaupan vaihtoehdot", + "swap.settings.slippage.alert": "Korkea luisto", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Tapahtumasi palautuu, jos hinta muuttuu enemmän kuin lipsumaprosentti.", "swap.settings.slippage.input.message": "Jos hinta putoaa entisestään, kauppasi palautuu. Alla on vähimmäissumma, jonka saat taatusti.", "swap.settings.slippage.input.receive.title": "Vastaanota ainakin", "swap.settings.slippage.output.message": "Jos hinta putoaa entisestään, kauppasi palautuu. Alla on enimmäissumma, jonka sinun on käytettävä.", "swap.settings.slippage.output.spend.title": "Kuluta korkeintaan", + "swap.settings.slippage.warning": "Erittäin korkea luisto", + "swap.settings.slippage.warning.description": "Yli 20 %:n lipsahdus johtaa todennäköisesti epäsuotuisaan kauppaan. Pienennä asetuksiasi vähentääksesi etukäteistyön riskiä.", + "swap.settings.slippage.warning.hover": "Tämä voi johtaa epäsuotuisaan kauppaan. Kokeile alentaa liukuma-asetusta.", "swap.settings.slippage.warning.max": "Anna arvo, joka on pienempi kuin {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Luisuma voi olla suurempi kuin on tarpeen", "swap.settings.slippage.warning.min": "Anna arvo, joka on suurempi kuin 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Sovellus", "transaction.details.from": "From", "transaction.details.networkFee": "Verkon hinta", + "transaction.details.providerFee": "Palveluntarjoajan maksu", "transaction.details.swapRate": "Rate", "transaction.details.transaction": "Tapahtuma", "transaction.details.uniswapFee": "Maksu ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Peruuttaminen", "transaction.status.revoke.success": "Peruutettu", "transaction.status.revoke.successDapp": "Peruutettu {{externalDappName}}", + "transaction.status.sale.canceled": "Peruutettu myynti", + "transaction.status.sale.canceling": "Myynnin peruuttaminen", + "transaction.status.sale.failedOn": "Myynti epäonnistui {{serviceProvider}}kautta", + "transaction.status.sale.pendingOn": "Myydään {{serviceProvider}}kautta", + "transaction.status.sale.successOn": "Myydään {{serviceProvider}}kautta", "transaction.status.sell.canceled": "Myynti peruttu", "transaction.status.sell.canceling": "Myynnin peruuttaminen", "transaction.status.sell.failed": "Myynti epäonnistui", diff --git a/packages/uniswap/src/i18n/locales/translations/fil-PH.json b/packages/uniswap/src/i18n/locales/translations/fil-PH.json index e458f2c4013..e07f933f6c1 100644 --- a/packages/uniswap/src/i18n/locales/translations/fil-PH.json +++ b/packages/uniswap/src/i18n/locales/translations/fil-PH.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Inalis ang liquidity", "common.loading": "Nilo-load", "common.loadingAllowance": "Nilo-load ang allowance", + "common.loadMore": "Load more", "common.longText.button.less": "Magbasa nang mas kaunti", "common.longText.button.more": "Magbasa pa", "common.lowPrice": "Mababang presyo", @@ -540,8 +541,8 @@ "common.resetLimit": "I-reset ang limit sa {{symbol}}", "common.resetLimitWallet": "I-reset ang limit sa {{symbol}} sa wallet", "common.resettingLimit": "Nire-reset ang limit sa {{symbol}}...", - "common.resolveIssue": "Resolbahin ang isyu", - "common.resolveIssues": "Resolbahin ang {{issues}} (na) isyu", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Pinaghihigpitang rehiyon", "common.return.label": "Bumalik", "common.returnToTop": "Bumalik sa itaas", @@ -602,21 +603,25 @@ "common.thisWeek": "Ngayong linggo", "common.thisYear": "Ngayong taon", "common.time": "Oras", - "common.time.day": "araw", "common.time.days": "(na) araw", - "common.time.hour": "oras", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "(na) oras", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "(na) minuto", - "common.time.month": "buwan", "common.time.months": "(na) buwan", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}}d ang nakalipas", "common.time.past.hours": "{{hours}}h ang nakalipas", "common.time.past.minutes": "{{minutes}}m ang nakalipas", "common.time.past.months": "{{months}}mo ang nakalipas", "common.time.past.seconds": "{{seconds}}s ang nakalipas", - "common.time.week": "linggo", "common.time.weeks": "(na) linggo", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Tip:", "common.to": "sa", "common.today": "Ngayong araw", @@ -634,8 +639,8 @@ "common.transactions": "Mga transaksyon", "common.transactionSettings": "Mga Setting ng Transaksyon", "common.transactionSubmitted": "Naisumite na ang transaksyon", - "common.transfer": "pag-transfer", - "common.transfers": "(na) pag-transfer", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Subukan ulit", "common.twitter": "Twitter", "common.type.label": "Uri", @@ -856,6 +861,7 @@ "fee.tier.new": "Bagong tier", "fee.tier.percent.select": "{{percentage}} piliin", "fee.tier.recommended": "Inirerekomenda", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Maghanap o gumawa ng iba pang tier ng fee", "fee.tier.search.short": "Maghanap ng mga tier", "fee.tier.select": "Pumili ng tier ng fee", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Ibenta gamit ang", "fiatOffRamp.connection.quote": "Magbebenta ng {{amount}} na halaga sa {{currencySymbol}}", "fiatOffRamp.error.balance": "Lumampas sa balanse", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Bumalik", "fiatOffRamp.unsupportedToken.divider": "Hindi sinusuportahan ang mga token", "fiatOffRamp.unsupportedToken.message": "Hindi sinusuportahan ang pagbebenta ng token na ito. I-swap ang asset na ito sa isa sa mga sinusuportahang token.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Pamahalaan ang liquidity ng pool ma {{quoteSymbol}}/{{baseSymbol}} sa Uniswap", "liquidityPool.positions.page.version.description": "Tingnan ang mga posisyon ng aktibong liquidity mo na {{version}}. Magdagdag ng mga bagong posisyon.", "liquidityPool.positions.page.version.title": "Pamahalaan ang liquidity ng pool na {{version}} sa Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} sa bawat {{outputToken}}", "liquidityPool.positions.price.formatted": " sa bawat ", "migrate.allowed": "Pinapayagan", "migrate.allowLpMigration": "Payagan ang pag-migrate ng token ng LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Pinapayagan ng Permit2 na maibahagi at mapamahalaan sa iba't ibang application ang mga pag-apruba ng token.", "pool.activePositions.appear": "Lalabas dito ang iyong mga aktibong posisyon sa liquidity ng V3.", "pool.activeRange": "Aktibong range sa pag-tick", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Magdagdag ng liquidity sa {{tokenPair}} ({{chain}}) sa Uniswap", "pool.addMoreLiquidity": "Magdagdag ng higit pang liquidity", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 araw na volume", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Ang iyong V2 liquidity", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "I-unwrap", "swap.button.wrap": "I-wrap", "swap.buy.countryModal.placeholder": "Maghanap ayon sa bansa o rehiyon", - "swap.cancel.cannotExecute": "Puwedeng gawin ang pag-swap mo bago maproseso ang pagkansela. Hindi na mare-refund ang mga bayad mo sa network. Gusto mo bang magpatuloy?", - "swap.cancel.cannotExecute.plural": "Puwedeng gawin ang mga pag-swap mo bago maproseso ang pagkansela. Hindi na mare-refund ang mga bayad mo sa network. Gusto mo bang magpatuloy?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Kumpirmahin ang limit", "swap.confirmSwap": "Kumpirmahin ang pag-swap", "swap.deadline.settings.title": "Deadline ng transaksyon", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "Fee sa {{tokenSymbol}}", "swap.details.feeOnTransfer.default": "Fee sa token", "swap.details.newQuote.input": "Bagong input", @@ -1841,7 +1850,9 @@ "swap.review": "Suriin ang pag-swap", "swap.review.summary": "Magsa-swap ka", "swap.reviewLimit": "Suriin ang limit", - "swap.route.optimizedGasCost": "Ino-optimize ng route na ito ang iyong kabuuang output sa pamamagitan ng pagsasaalang-alang sa mga split route, maraming hop, at bayad sa gas sa bawat hakbang.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Kapag naka-on ang proteksyon sa pag-swap, mapoprotektahan ang iyong mga transaksyon sa Ethereum mula sa mga sandwich attack, na may mas mabababang tsansang pumalya.", "swap.settings.protection.subtitle.supported": "{{chainName}} Network", "swap.settings.protection.subtitle.unavailable": "Hindi available sa {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Mga v3 pool", "swap.settings.routingPreference.option.v4.title": "Mga v4 pool", "swap.settings.routingPreference.title": "Mga opsyon sa trade", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Mare-revert ang iyong transaksyon kung magbabago ang presyo nang mahigit sa porsyento ng slippage.", "swap.settings.slippage.input.message": "Kung magsi-slip pang lalo ang presyo, mare-revert ang transaksyon mo. Nasa ibaba ang pinakamababang halaga na garantisadong matanggap mo.", "swap.settings.slippage.input.receive.title": "Makatanggap ng hindi bababa sa", "swap.settings.slippage.output.message": "Kung magsi-slip pang lalo ang presyo, mare-revert ang transaksyon mo. Nasa ibaba ang pinakamataas na halaga na kailangan mong gastusin.", "swap.settings.slippage.output.spend.title": "Gumastos ng hanggang", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Maglagay ng value na mas mababa sa {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Maaaring mas mataas ang slippage kaysa sa kinakailangan", "swap.settings.slippage.warning.min": "Maglagay ng value na mas malaki sa 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Mula kay", "transaction.details.networkFee": "Bayad sa network", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Rate", "transaction.details.transaction": "Transaksyon", "transaction.details.uniswapFee": "Fee ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Binabawi", "transaction.status.revoke.success": "Binawi", "transaction.status.revoke.successDapp": "Binawi sa {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Kinansela ang pagbebenta", "transaction.status.sell.canceling": "Kinakansela ang pagbebenta", "transaction.status.sell.failed": "Hindi nabenta", diff --git a/packages/uniswap/src/i18n/locales/translations/fr-FR.json b/packages/uniswap/src/i18n/locales/translations/fr-FR.json index c6f43920afb..cf754b63866 100644 --- a/packages/uniswap/src/i18n/locales/translations/fr-FR.json +++ b/packages/uniswap/src/i18n/locales/translations/fr-FR.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Liquidité supprimée", "common.loading": "Chargement en cours", "common.loadingAllowance": "Chargement de l'autorisation en cours", + "common.loadMore": "Load more", "common.longText.button.less": "Lire moins", "common.longText.button.more": "Lire plus", "common.lowPrice": "Prix bas", @@ -540,8 +541,8 @@ "common.resetLimit": "Réinitialiser la limite en {{symbol}}", "common.resetLimitWallet": "Réinitialiser la limite en {{symbol}} dans le wallet", "common.resettingLimit": "Réinitialisation de la limite en {{symbol}} en cours…", - "common.resolveIssue": "Résoudre le problème", - "common.resolveIssues": "Résoudre les problèmes {{issues}}", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Région faisant l'objet de restrictions", "common.return.label": "Retour", "common.returnToTop": "Retour vers le haut", @@ -602,21 +603,25 @@ "common.thisWeek": "Cette semaine", "common.thisYear": "Cette année", "common.time": "Heure", - "common.time.day": "jour", "common.time.days": "jours", - "common.time.hour": "heure", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "heures", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} min", "common.time.minutes": "minutes", - "common.time.month": "mois", "common.time.months": "mois", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "Il y a {{days}} j", "common.time.past.hours": "Il y a {{hours}} h", "common.time.past.minutes": "Il y a {{minutes}} min", "common.time.past.months": "Il y a {{months}} mois", "common.time.past.seconds": "Il y a {{seconds}} s", - "common.time.week": "semaine", "common.time.weeks": "semaines", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Conseil :", "common.to": "à", "common.today": "Aujourd'hui", @@ -634,8 +639,8 @@ "common.transactions": "Transactions", "common.transactionSettings": "Paramètres de transaction", "common.transactionSubmitted": "Transaction transmise", - "common.transfer": "transfert", - "common.transfers": "transferts", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Réessayer", "common.twitter": "X", "common.type.label": "Saisir", @@ -856,6 +861,7 @@ "fee.tier.new": "Nouveau niveau", "fee.tier.percent.select": "{{percentage}} sélectionné(s)", "fee.tier.recommended": "Recommandé", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Search or create other fee tiers", "fee.tier.search.short": "Rechercher des niveaux", "fee.tier.select": "Sélectionner le niveau de frais", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Vendre avec", "fiatOffRamp.connection.quote": "Vente de {{currencySymbol}} (valeur : {{amount}}) en cours", "fiatOffRamp.error.balance": "Exceeds balance", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Revenir", "fiatOffRamp.unsupportedToken.divider": "Tokens non pris en charge", "fiatOffRamp.unsupportedToken.message": "La vente de ce token n'est pas prise en charge. Échangez cet actif contre un token pris en charge.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Gérer la liquidité du pool en {{quoteSymbol}}/{{baseSymbol}} sur Uniswap", "liquidityPool.positions.page.version.description": "Consultez vos positions de liquidité actives sur {{version}}. Ajoutez de nouvelles positions.", "liquidityPool.positions.page.version.title": "Gérer la liquidité du pool de {{version}} sur Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} par {{outputToken}}", "liquidityPool.positions.price.formatted": " par ", "migrate.allowed": "Autorisé", "migrate.allowLpMigration": "Autoriser la migration des tokens LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 permet de partager et de gérer les approbations de tokens entre différentes applications.", "pool.activePositions.appear": "Vos positions de liquidité V3 actives apparaîtront ici.", "pool.activeRange": "Plage de ticks active", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Ajouter de la liquidité en {{tokenPair}} ({{chain}}) sur Uniswap", "pool.addMoreLiquidity": "Ajouter plus de liquidité", "pool.apr": "AVR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "Vol. 1 j/TVL", "pool.volume.thirtyDay": "30 day volume", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Votre liquidité V2", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Annuler l'enveloppement", "swap.button.wrap": "Envelopper", "swap.buy.countryModal.placeholder": "Rechercher par pays ou région", - "swap.cancel.cannotExecute": "Votre échange pourrait être exécuté avant que l'annulation ne soit traitée. Vos frais de réseau ne peuvent pas être remboursés. Souhaitez-vous poursuivre ?", - "swap.cancel.cannotExecute.plural": "Vos échanges pourraient être exécutés avant que l'annulation ne soit traitée. Vos frais de réseau ne peuvent pas être remboursés. Souhaitez-vous poursuivre ?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Confirmer la limite", "swap.confirmSwap": "Confirmer l'échange", "swap.deadline.settings.title": "Délai de la transaction", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "Frais de {{tokenSymbol}}", "swap.details.feeOnTransfer.default": "Frais de token", "swap.details.newQuote.input": "Nouvelle entrée", @@ -1841,7 +1850,9 @@ "swap.review": "Vérifier l'échange", "swap.review.summary": "Vous échangez", "swap.reviewLimit": "Vérifier la limite", - "swap.route.optimizedGasCost": "Ce parcours optimise votre rendement total en tenant compte des parcours divisés, des sauts multiples et du coût du gaz à chaque étape.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "En activant la protection des échanges, vous contribuez à protéger vos transactions Ethereum contre les attaques sandwich, et les risques d'échec seront réduits.", "swap.settings.protection.subtitle.supported": "Réseau {{chainName}}", "swap.settings.protection.subtitle.unavailable": "Indisponible sur {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Pools v3", "swap.settings.routingPreference.option.v4.title": "Pools v4", "swap.settings.routingPreference.title": "Options de négociation", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Automatique", "swap.settings.slippage.description": "Votre transaction sera annulée si le prix change plus que le pourcentage de glissement.", "swap.settings.slippage.input.message": "Si le prix glisse encore, votre transaction sera annulée. Vous trouverez ci-dessous le montant minimal que vous êtes assuré de recevoir.", "swap.settings.slippage.input.receive.title": "Recevoir au moins", "swap.settings.slippage.output.message": "Si le prix glisse encore, votre transaction sera annulée. Vous trouverez ci-dessous le montant maximal que vous devrez dépenser.", "swap.settings.slippage.output.spend.title": "Dépenser au maximum", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Saisir une valeur inférieure à {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Le glissement est peut-être plus élevé que nécessaire", "swap.settings.slippage.warning.min": "Saisir une valeur supérieure à 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "De", "transaction.details.networkFee": "Frais de réseau", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Taux", "transaction.details.transaction": "Transaction", "transaction.details.uniswapFee": "Frais ({{ feePercent }} %)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Révocation en cours", "transaction.status.revoke.success": "Révoqué", "transaction.status.revoke.successDapp": "Révoqué sur {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Vente annulée", "transaction.status.sell.canceling": "Annulation de la vente en cours", "transaction.status.sell.failed": "Échec de la vente", diff --git a/packages/uniswap/src/i18n/locales/translations/he-IL.json b/packages/uniswap/src/i18n/locales/translations/he-IL.json index 110f3e0272a..43d7eeaf1e8 100644 --- a/packages/uniswap/src/i18n/locales/translations/he-IL.json +++ b/packages/uniswap/src/i18n/locales/translations/he-IL.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "הנזילות הוסרה", "common.loading": "טוען", "common.loadingAllowance": "קצבת טעינה", + "common.loadMore": "טען עוד", "common.longText.button.less": "תקרא פחות", "common.longText.button.more": "קרא עוד", "common.lowPrice": "מחיר נמוך", @@ -540,8 +541,8 @@ "common.resetLimit": "אפס את המגבלה של {{symbol}}", "common.resetLimitWallet": "אפס את המגבלה של {{symbol}} בארנק", "common.resettingLimit": "מאפס את המגבלה של {{symbol}} ...", - "common.resolveIssue": "פתור את הבעיה", - "common.resolveIssues": "פתור בעיות של {{issues}}", + "common.resolveIssues_one": "פתור את הבעיה", + "common.resolveIssues_other": "פתור בעיות של {{count}}", "common.restricted.region": "אזור מוגבל", "common.return.label": "לַחֲזוֹר", "common.returnToTop": "חזור למעלה", @@ -602,21 +603,25 @@ "common.thisWeek": "השבוע", "common.thisYear": "השנה", "common.time": "זְמַן", - "common.time.day": "יְוֹם", "common.time.days": "ימים", - "common.time.hour": "שָׁעָה", + "common.time.days_one": "יְוֹם", + "common.time.days_other": "ימים", "common.time.hours": "שעה (ות", + "common.time.hours_one": "שָׁעָה", + "common.time.hours_other": "שעה (ות", "common.time.minute.amt": "{{time}}מ", "common.time.minutes": "דקות", - "common.time.month": "חודש", "common.time.months": "חודשים", + "common.time.months_one": "חודש", + "common.time.months_other": "חודשים", "common.time.past.days": "{{days}}לפני ד'", "common.time.past.hours": "{{hours}}לפני שעה", "common.time.past.minutes": "{{minutes}}לפני מ'", "common.time.past.months": "{{months}}לפני חודש", "common.time.past.seconds": "לפני {{seconds}}שניות", - "common.time.week": "שָׁבוּעַ", "common.time.weeks": "שבועות", + "common.time.weeks_one": "שָׁבוּעַ", + "common.time.weeks_other": "שבועות", "common.tip.label": "עֵצָה:", "common.to": "ל", "common.today": "היום", @@ -634,8 +639,8 @@ "common.transactions": "עסקאות", "common.transactionSettings": "הגדרות עסקה", "common.transactionSubmitted": "העסקה הוגשה", - "common.transfer": "לְהַעֲבִיר", - "common.transfers": "העברות", + "common.transfer_one": "לְהַעֲבִיר", + "common.transfer_other": "העברות", "common.tryAgain.error": "נסה שוב", "common.twitter": "טוויטר", "common.type.label": "סוּג", @@ -856,6 +861,7 @@ "fee.tier.new": "נדבך חדש", "fee.tier.percent.select": "{{percentage}} בחר", "fee.tier.recommended": "מוּמלָץ", + "fee.tier.recommended.description": "מומלץ על בסיס נתח הנזילות הגבוה ביותר עבור צמד האסימונים שנבחר.", "fee.tier.search": "חפש או צור שכבות עמלות אחרות", "fee.tier.search.short": "חיפוש שכבות", "fee.tier.select": "בחר דרגת עמלות", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "למכור עם", "fiatOffRamp.connection.quote": "מוכר בשווי {{amount}} של {{currencySymbol}}", "fiatOffRamp.error.balance": "עולה על איזון", + "fiatOffRamp.summary.total": "{{cryptoAmount}} עבור {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "תחזור", "fiatOffRamp.unsupportedToken.divider": "אסימונים לא נתמכים", "fiatOffRamp.unsupportedToken.message": "אסימון זה אינו נתמך למכירה. החלף את הנכס הזה לאחד מהאסימונים הנתמכים.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "נהל נזילות של {{quoteSymbol}}/{{baseSymbol}} ב-Uniswap", "liquidityPool.positions.page.version.description": "הצג את עמדות הנזילות הפעילות של {{version}} שלך. הוסף עמדות חדשות.", "liquidityPool.positions.page.version.title": "נהל את נזילות המאגר{{version}} ב-Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} לכל {{outputToken}}", "liquidityPool.positions.price.formatted": " לכל ", "migrate.allowed": "מוּתָר", "migrate.allowLpMigration": "אפשר העברת אסימון LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 מאפשר שיתוף וניהול של אישורי אסימונים בין יישומים שונים.", "pool.activePositions.appear": "עמדות הנזילות הפעילות V3 שלך יופיעו כאן.", "pool.activeRange": "טווח קרציות פעיל", + "pool.addAs": "הוסף בתור {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "הוסף נזילות ל- {{tokenPair}} ({{chain}}) ב-Uniswap", "pool.addMoreLiquidity": "הוסף עוד נזילות", "pool.apr": "אפריל", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "נפח 30 יום", "pool.volume.thirtyDay.short": "כרך 30D", + "pool.withdrawAs": "משיכה בתור {{nativeWrappedSymbol}}", "pool.yourv2": "הנזילות שלך ב-V2", "poolFinder.availablePools": "בריכות זמינות", "poolFinder.availablePools.found.description": "בריכות v2 התואמות את בחירת הזוגות שלך.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "לְגוֹלֵל", "swap.button.wrap": "לַעֲטוֹף", "swap.buy.countryModal.placeholder": "חפש לפי מדינה או אזור", - "swap.cancel.cannotExecute": "ההחלפה שלך עשויה להתבצע לפני עיבוד הביטול. לא ניתן להחזיר את עלויות הרשת שלך. האם אתה מעוניין להמשיך?", - "swap.cancel.cannotExecute.plural": "ההחלפות שלך עשויות להתבצע לפני עיבוד הביטול. לא ניתן להחזיר את עלויות הרשת שלך. האם אתה מעוניין להמשיך?", + "swap.cancel.cannotExecute_one": "ההחלפה שלך עשויה להתבצע לפני עיבוד הביטול. לא ניתן להחזיר את עלויות הרשת שלך. האם אתה מעוניין להמשיך?", + "swap.cancel.cannotExecute_other": "ההחלפות שלך עשויות להתבצע לפני עיבוד הביטול. לא ניתן להחזיר את עלויות הרשת שלך. האם אתה מעוניין להמשיך?", "swap.confirmLimit": "אשר מגבלה", "swap.confirmSwap": "אשר את ההחלפה", "swap.deadline.settings.title": "מועד אחרון לעסקה", + "swap.deadline.settings.title.short": "Tx. מוֹעֵד אַחֲרוֹן", "swap.details.feeOnTransfer": "{{tokenSymbol}} עמלה", "swap.details.feeOnTransfer.default": "עמלת סמלי", "swap.details.newQuote.input": "קלט חדש", @@ -1841,7 +1850,9 @@ "swap.review": "סקירה החלפה", "swap.review.summary": "אתה מחליף", "swap.reviewLimit": "מגבלת ביקורת", - "swap.route.optimizedGasCost": "מסלול זה מייעל את התפוקה הכוללת שלך על ידי התחשבות במסלולים מפוצלים, ריבוי דילוגים ועלות הגז של כל שלב.", + "swap.route.optimizedGasCost": "מסלול זה מייעל את התפוקה הכוללת שלך על ידי התחשבות במסלולים מפוצלים, ריבוי דילוגים ועלויות הרשת של כל שלב.", + "swap.settings.deadline.tooltip": "העסקה שלך תחזור אם היא בהמתנה במשך יותר מתקופת זמן זו. (מקסימום: 3 ימים).", + "swap.settings.deadline.warning": "דדליין גבוה", "swap.settings.protection.description": "עם הגנת החלפה מופעלת, עסקאות ה-Ethereum שלך יהיו מוגנות מפני התקפות סנדוויץ', עם סיכויים מופחתים לכישלון.", "swap.settings.protection.subtitle.supported": "{{chainName}} רשת", "swap.settings.protection.subtitle.unavailable": "לא זמין ב- {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 בריכות", "swap.settings.routingPreference.option.v4.title": "v4 בריכות", "swap.settings.routingPreference.title": "אפשרויות סחר", + "swap.settings.slippage.alert": "החלקה גבוהה", "swap.settings.slippage.control.auto": "אוטומטי", "swap.settings.slippage.description": "העסקה שלך תחזור אם המחיר ישתנה יותר מאחוז ההחלקה.", "swap.settings.slippage.input.message": "אם המחיר יורד עוד יותר, העסקה שלך תחזור. להלן הסכום המינימלי שמובטח לך שתקבל.", "swap.settings.slippage.input.receive.title": "קבלו לפחות", "swap.settings.slippage.output.message": "אם המחיר יורד עוד יותר, העסקה שלך תחזור. להלן הסכום המקסימלי שתצטרך להוציא.", "swap.settings.slippage.output.spend.title": "להוציא לכל היותר", + "swap.settings.slippage.warning": "החלקה גבוהה מאוד", + "swap.settings.slippage.warning.description": "החלקה מעל 20% עשויה לגרום למסחר לא חיובי. כדי להפחית את הסיכון להיות חזיתית, הורד את ההגדרות שלך.", + "swap.settings.slippage.warning.hover": "זה עלול לגרום לסחר לא חיובי. נסה להנמיך את הגדרת ההחלקה שלך.", "swap.settings.slippage.warning.max": "הזן ערך קטן מ- {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "החלקה עשויה להיות גבוהה מהנדרש", "swap.settings.slippage.warning.min": "הזן ערך גדול מ-0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "אפליקציה", "transaction.details.from": "מ", "transaction.details.networkFee": "עלות רשת", + "transaction.details.providerFee": "עמלת ספק", "transaction.details.swapRate": "ציון", "transaction.details.transaction": "עִסקָה", "transaction.details.uniswapFee": "עמלה ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "מבטל", "transaction.status.revoke.success": "בוטל", "transaction.status.revoke.successDapp": "בוטל בתאריך {{externalDappName}}", + "transaction.status.sale.canceled": "מכירה בוטלה", + "transaction.status.sale.canceling": "ביטול מכירה", + "transaction.status.sale.failedOn": "המכירה נכשלה דרך {{serviceProvider}}", + "transaction.status.sale.pendingOn": "מוכר דרך {{serviceProvider}}", + "transaction.status.sale.successOn": "נמכר דרך {{serviceProvider}}", "transaction.status.sell.canceled": "מכירה בוטלה", "transaction.status.sell.canceling": "ביטול מכירה", "transaction.status.sell.failed": "לא הצליח למכור", diff --git a/packages/uniswap/src/i18n/locales/translations/hi-IN.json b/packages/uniswap/src/i18n/locales/translations/hi-IN.json index 98683b12ca3..b8e349befb4 100644 --- a/packages/uniswap/src/i18n/locales/translations/hi-IN.json +++ b/packages/uniswap/src/i18n/locales/translations/hi-IN.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "तरलता हटा दी गई", "common.loading": "लोड हो रहा है", "common.loadingAllowance": "लोडिंग भत्ता", + "common.loadMore": "और लोड करें", "common.longText.button.less": "कम पढ़ें", "common.longText.button.more": "और पढ़ें", "common.lowPrice": "कम कीमत", @@ -540,8 +541,8 @@ "common.resetLimit": "{{symbol}} सीमा रीसेट करें", "common.resetLimitWallet": "वॉलेट में {{symbol}} सीमा रीसेट करें", "common.resettingLimit": "{{symbol}} सीमा रीसेट की जा रही है...", - "common.resolveIssue": "मामला हल करना", - "common.resolveIssues": "{{issues}} समस्याओं का समाधान करें", + "common.resolveIssues_one": "मामला हल करना", + "common.resolveIssues_other": "{{count}} समस्याओं का समाधान करें", "common.restricted.region": "प्रतिबंधित क्षेत्र", "common.return.label": "वापस करना", "common.returnToTop": "ऊपर लौटें", @@ -602,21 +603,25 @@ "common.thisWeek": "इस सप्ताह", "common.thisYear": "इस साल", "common.time": "समय", - "common.time.day": "दिन", "common.time.days": "दिन", - "common.time.hour": "घंटा", + "common.time.days_one": "दिन", + "common.time.days_other": "दिन", "common.time.hours": "घंटे", + "common.time.hours_one": "घंटा", + "common.time.hours_other": "घंटे", "common.time.minute.amt": "{{time}}मिनट", "common.time.minutes": "मिनट", - "common.time.month": "महीना", "common.time.months": "महीने", + "common.time.months_one": "महीना", + "common.time.months_other": "महीने", "common.time.past.days": "{{days}}दिन पहले", "common.time.past.hours": "{{hours}}घंटे पहले", "common.time.past.minutes": "{{minutes}}मी पहले", "common.time.past.months": "{{months}}महीने पहले", "common.time.past.seconds": "{{seconds}}सेकंड पहले", - "common.time.week": "सप्ताह", "common.time.weeks": "हफ्तों", + "common.time.weeks_one": "सप्ताह", + "common.time.weeks_other": "हफ्तों", "common.tip.label": "बख्शीश:", "common.to": "को", "common.today": "आज", @@ -634,8 +639,8 @@ "common.transactions": "लेनदेन", "common.transactionSettings": "लेनदेन सेटिंग्स", "common.transactionSubmitted": "लेनदेन प्रस्तुत किया गया", - "common.transfer": "स्थानांतरण", - "common.transfers": "तबादलों", + "common.transfer_one": "स्थानांतरण", + "common.transfer_other": "तबादलों", "common.tryAgain.error": "पुनः प्रयास करें", "common.twitter": "ट्विटर", "common.type.label": "प्रकार", @@ -856,6 +861,7 @@ "fee.tier.new": "नया स्तर", "fee.tier.percent.select": "{{percentage}} चयन करें", "fee.tier.recommended": "अनुशंसित", + "fee.tier.recommended.description": "चयनित टोकन जोड़ी के लिए तरलता का उच्चतम हिस्सा होने के आधार पर अनुशंसित।", "fee.tier.search": "अन्य शुल्क स्तर खोजें या बनाएं", "fee.tier.search.short": "खोज स्तर", "fee.tier.select": "शुल्क स्तर चुनें", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "बेचें", "fiatOffRamp.connection.quote": "{{amount}} मूल्य का {{currencySymbol}}बेचना", "fiatOffRamp.error.balance": "शेष राशि से अधिक", + "fiatOffRamp.summary.total": "{{fiatAmount}}के बदले {{cryptoAmount}}", "fiatOffRamp.unsupportedToken.back": "वापस जाओ", "fiatOffRamp.unsupportedToken.divider": "असमर्थित टोकन", "fiatOffRamp.unsupportedToken.message": "यह टोकन बेचने के लिए समर्थित नहीं है। इस परिसंपत्ति को समर्थित टोकन में से किसी एक में स्वैप करें।", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Uniswap पर {{quoteSymbol}}/{{baseSymbol}} पूल लिक्विडिटी प्रबंधित करें", "liquidityPool.positions.page.version.description": "अपनी सक्रिय {{version}} लिक्विडिटी पोजीशन देखें। नई पोजीशन जोड़ें।", "liquidityPool.positions.page.version.title": "Uniswap पर पूल लिक्विडिटी{{version}} प्रबंधित करें", - "liquidityPool.positions.price": "{{amountWithSymbol}} प्रति {{outputToken}}", "liquidityPool.positions.price.formatted": " प्रति ", "migrate.allowed": "अनुमत", "migrate.allowLpMigration": "एलपी टोकन माइग्रेशन की अनुमति दें", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "परमिट2 टोकन अनुमोदन को विभिन्न अनुप्रयोगों में साझा और प्रबंधित करने की अनुमति देता है।", "pool.activePositions.appear": "आपकी सक्रिय V3 तरलता स्थितियाँ यहाँ दिखाई देंगी।", "pool.activeRange": "सक्रिय टिक रेंज", + "pool.addAs": "{{nativeWrappedSymbol}}के रूप में जोड़ें", "pool.addLiquidity.seoTitle": "Uniswap पर {{tokenPair}} ({{chain}}) में तरलता जोड़ें", "pool.addMoreLiquidity": "अधिक तरलता जोड़ें", "pool.apr": "अप्रैल", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1डी वॉल/टीवीएल", "pool.volume.thirtyDay": "30 दिन का वॉल्यूम", "pool.volume.thirtyDay.short": "30डी वॉल्यूम", + "pool.withdrawAs": "{{nativeWrappedSymbol}}के रूप में निकालें", "pool.yourv2": "आपकी V2 तरलता", "poolFinder.availablePools": "उपलब्ध पूल", "poolFinder.availablePools.found.description": "v2 पूल आपके जोड़ी चयन से मेल खाते हैं।", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "खोलना", "swap.button.wrap": "लपेटना", "swap.buy.countryModal.placeholder": "देश या क्षेत्र के अनुसार खोजें", - "swap.cancel.cannotExecute": "रद्दीकरण प्रक्रिया से पहले आपका स्वैप निष्पादित हो सकता है। आपकी नेटवर्क लागत वापस नहीं की जा सकती। क्या आप आगे बढ़ना चाहते हैं?", - "swap.cancel.cannotExecute.plural": "रद्दीकरण प्रक्रिया से पहले आपके स्वैप निष्पादित हो सकते हैं। आपकी नेटवर्क लागत वापस नहीं की जा सकती। क्या आप आगे बढ़ना चाहते हैं?", + "swap.cancel.cannotExecute_one": "रद्दीकरण प्रक्रिया से पहले आपका स्वैप निष्पादित हो सकता है। आपकी नेटवर्क लागत वापस नहीं की जा सकती। क्या आप आगे बढ़ना चाहते हैं?", + "swap.cancel.cannotExecute_other": "रद्दीकरण प्रक्रिया से पहले आपके स्वैप निष्पादित हो सकते हैं। आपकी नेटवर्क लागत वापस नहीं की जा सकती। क्या आप आगे बढ़ना चाहते हैं?", "swap.confirmLimit": "सीमा की पुष्टि करें", "swap.confirmSwap": "स्वैप की पुष्टि करें", "swap.deadline.settings.title": "लेन-देन की समय सीमा", + "swap.deadline.settings.title.short": "Tx. समय सीमा", "swap.details.feeOnTransfer": "{{tokenSymbol}} शुल्क", "swap.details.feeOnTransfer.default": "टोकन शुल्क", "swap.details.newQuote.input": "नया इनपुट", @@ -1841,7 +1850,9 @@ "swap.review": "समीक्षा स्वैप", "swap.review.summary": "आप अदला-बदली कर रहे हैं", "swap.reviewLimit": "समीक्षा सीमा", - "swap.route.optimizedGasCost": "यह मार्ग विभाजित मार्गों, एकाधिक हॉप्स और प्रत्येक चरण की गैस लागत पर विचार करके आपके कुल आउटपुट को अनुकूलित करता है।", + "swap.route.optimizedGasCost": "यह मार्ग विभाजित मार्गों, एकाधिक हॉप्स और प्रत्येक चरण की नेटवर्क लागतों पर विचार करके आपके कुल आउटपुट को अनुकूलित करता है।", + "swap.settings.deadline.tooltip": "यदि आपका लेन-देन इस समयावधि से अधिक समय तक लंबित रहता है तो उसे वापस कर दिया जाएगा। (अधिकतम: 3 दिन)।", + "swap.settings.deadline.warning": "उच्च समय सीमा", "swap.settings.protection.description": "स्वैप सुरक्षा चालू होने पर, आपका एथेरियम लेनदेन सैंडविच हमलों से सुरक्षित रहेगा, और विफलता की संभावना कम हो जाएगी।", "swap.settings.protection.subtitle.supported": "{{chainName}} नेटवर्क", "swap.settings.protection.subtitle.unavailable": "{{chainName}}पर उपलब्ध नहीं है", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 पूल", "swap.settings.routingPreference.option.v4.title": "v4 पूल", "swap.settings.routingPreference.title": "व्यापार विकल्प", + "swap.settings.slippage.alert": "उच्च फिसलन", "swap.settings.slippage.control.auto": "ऑटो", "swap.settings.slippage.description": "यदि कीमत में स्लिपेज प्रतिशत से अधिक परिवर्तन होता है तो आपका लेनदेन वापस कर दिया जाएगा।", "swap.settings.slippage.input.message": "यदि कीमत में और गिरावट आती है, तो आपका लेनदेन वापस कर दिया जाएगा। नीचे वह न्यूनतम राशि दी गई है जो आपको मिलने की गारंटी है।", "swap.settings.slippage.input.receive.title": "कम से कम प्राप्त करें", "swap.settings.slippage.output.message": "यदि कीमत में और गिरावट आती है, तो आपका लेनदेन वापस कर दिया जाएगा। नीचे वह अधिकतम राशि दी गई है जो आपको खर्च करनी होगी।", "swap.settings.slippage.output.spend.title": "ज्यादा से ज्यादा खर्च करो", + "swap.settings.slippage.warning": "बहुत अधिक फिसलन", + "swap.settings.slippage.warning.description": "20% से अधिक स्लिपेज के परिणामस्वरूप प्रतिकूल व्यापार होने की संभावना है। फ्रंट-रन होने के जोखिम को कम करने के लिए, अपनी सेटिंग्स कम करें।", + "swap.settings.slippage.warning.hover": "इससे प्रतिकूल ट्रेड हो सकता है। अपनी स्लिपेज सेटिंग कम करने का प्रयास करें।", "swap.settings.slippage.warning.max": "{{maxSlippageTolerance}}से कम मान दर्ज करें", "swap.settings.slippage.warning.message": "फिसलन आवश्यकता से अधिक हो सकती है", "swap.settings.slippage.warning.min": "0 से बड़ा मान दर्ज करें", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "अनुप्रयोग", "transaction.details.from": "से", "transaction.details.networkFee": "नेटवर्क लागत", + "transaction.details.providerFee": "प्रदाता शुल्क", "transaction.details.swapRate": "दर", "transaction.details.transaction": "लेन-देन", "transaction.details.uniswapFee": "शुल्क ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "निरस्त हो रहा है", "transaction.status.revoke.success": "निरस्त किया गया", "transaction.status.revoke.successDapp": "{{externalDappName}}पर निरस्त किया गया", + "transaction.status.sale.canceled": "रद्द की गई बिक्री", + "transaction.status.sale.canceling": "बिक्री रद्द करना", + "transaction.status.sale.failedOn": "बिक्री विफल हुई {{serviceProvider}}", + "transaction.status.sale.pendingOn": "{{serviceProvider}}के माध्यम से बेचना", + "transaction.status.sale.successOn": "{{serviceProvider}}द्वारा बेचा गया", "transaction.status.sell.canceled": "रद्द की गई बिक्री", "transaction.status.sell.canceling": "बिक्री रद्द करना", "transaction.status.sell.failed": "बेचने में विफल", diff --git a/packages/uniswap/src/i18n/locales/translations/hu-HU.json b/packages/uniswap/src/i18n/locales/translations/hu-HU.json index 4b21563daaa..ad7a87c2e54 100644 --- a/packages/uniswap/src/i18n/locales/translations/hu-HU.json +++ b/packages/uniswap/src/i18n/locales/translations/hu-HU.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likviditás eltávolítva", "common.loading": "Betöltés", "common.loadingAllowance": "Rakodási juttatás", + "common.loadMore": "Töltsön be többet", "common.longText.button.less": "Olvass kevesebbet", "common.longText.button.more": "Olvass tovább", "common.lowPrice": "Alacsony ár", @@ -540,8 +541,8 @@ "common.resetLimit": "Állítsa vissza a {{symbol}} korlátot", "common.resetLimitWallet": "Állítsa vissza a {{symbol}} korlátot a pénztárcában", "common.resettingLimit": "{{symbol}} korlát visszaállítása...", - "common.resolveIssue": "Probléma megoldása", - "common.resolveIssues": "Oldja meg a {{issues}} problémákat", + "common.resolveIssues_one": "Probléma megoldása", + "common.resolveIssues_other": "Oldja meg a {{count}} problémákat", "common.restricted.region": "Korlátozott régió", "common.return.label": "Visszatérés", "common.returnToTop": "Vissza a tetejére", @@ -602,21 +603,25 @@ "common.thisWeek": "Ezen a héten", "common.thisYear": "Idén", "common.time": "Idő", - "common.time.day": "nap", "common.time.days": "napok", - "common.time.hour": "óra", + "common.time.days_one": "nap", + "common.time.days_other": "napok", "common.time.hours": "órák", + "common.time.hours_one": "óra", + "common.time.hours_other": "órák", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "percek", - "common.time.month": "hónap", "common.time.months": "hónapok", + "common.time.months_one": "hónap", + "common.time.months_other": "hónapok", "common.time.past.days": "{{days}}d ezelőtt", "common.time.past.hours": "{{hours}}órája", "common.time.past.minutes": "{{minutes}}perce", "common.time.past.months": "{{months}}hónapja", "common.time.past.seconds": "{{seconds}}s ezelőtt", - "common.time.week": "hét", "common.time.weeks": "hétig", + "common.time.weeks_one": "hét", + "common.time.weeks_other": "hétig", "common.tip.label": "Tipp:", "common.to": "nak nek", "common.today": "Ma", @@ -634,8 +639,8 @@ "common.transactions": "Tranzakciók", "common.transactionSettings": "Tranzakció beállításai", "common.transactionSubmitted": "Tranzakció elküldve", - "common.transfer": "átruházás", - "common.transfers": "transzferek", + "common.transfer_one": "átruházás", + "common.transfer_other": "transzferek", "common.tryAgain.error": "Próbáld újra", "common.twitter": "Twitter", "common.type.label": "típus", @@ -856,6 +861,7 @@ "fee.tier.new": "Új szint", "fee.tier.percent.select": "{{percentage}} válassza ki", "fee.tier.recommended": "Ajánlott", + "fee.tier.recommended.description": "Javasolt a kiválasztott tokenpár legmagasabb likviditási részesedése alapján.", "fee.tier.search": "Keressen vagy hozzon létre más díjszinteket", "fee.tier.search.short": "Keresési szintek", "fee.tier.select": "Válassza ki a díjszintet", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Eladni vele", "fiatOffRamp.connection.quote": "Eladás {{amount}} értékben {{currencySymbol}}értékben", "fiatOffRamp.error.balance": "Túllépi az egyensúlyt", + "fiatOffRamp.summary.total": "{{cryptoAmount}} {{fiatAmount}}esetén", "fiatOffRamp.unsupportedToken.back": "Menjen vissza", "fiatOffRamp.unsupportedToken.divider": "Nem támogatott tokenek", "fiatOffRamp.unsupportedToken.message": "Ennek a tokennek az értékesítése nem támogatott. Cserélje le ezt az eszközt a támogatott tokenek egyikére.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "{{quoteSymbol}}/{{baseSymbol}} pool likviditás kezelése Uniswap esetén", "liquidityPool.positions.page.version.description": "Tekintse meg aktív {{version}} likviditási pozícióit. Új pozíciók hozzáadása.", "liquidityPool.positions.page.version.title": "A{{version}} pool likviditásának kezelése Uniswapon", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Engedélyezett", "migrate.allowLpMigration": "LP token migráció engedélyezése", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "A Permit2 lehetővé teszi a token jóváhagyások megosztását és kezelését különböző alkalmazások között.", "pool.activePositions.appear": "Itt jelennek meg aktív V3 likviditási pozíciói.", "pool.activeRange": "Aktív kullancs tartomány", + "pool.addAs": "Hozzáadás mint {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Likviditás hozzáadása a {{tokenPair}} ({{chain}}) értékhez Uniswap esetén", "pool.addMoreLiquidity": "Adjon hozzá több likviditást", "pool.apr": "ÁPRILIS", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 napos mennyiség", "pool.volume.thirtyDay.short": "30D köt", + "pool.withdrawAs": "Visszavonás {{nativeWrappedSymbol}}-ként", "pool.yourv2": "Az Ön V2 likviditása", "poolFinder.availablePools": "Rendelkezésre álló medencék", "poolFinder.availablePools.found.description": "v2 poolok, amelyek megfelelnek a párválasztásnak.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Kibont", "swap.button.wrap": "Betakar", "swap.buy.countryModal.placeholder": "Keresés ország vagy régió szerint", - "swap.cancel.cannotExecute": "A csere még a törlés feldolgozása előtt végrehajtható. Hálózati költségei nem téríthetők vissza. Szeretné folytatni?", - "swap.cancel.cannotExecute.plural": "A csereügyletek még a törlés feldolgozása előtt végrehajthatók. Hálózati költségei nem téríthetők vissza. Szeretné folytatni?", + "swap.cancel.cannotExecute_one": "A csere még a törlés feldolgozása előtt végrehajtható. Hálózati költségei nem téríthetők vissza. Szeretné folytatni?", + "swap.cancel.cannotExecute_other": "A csereügyletek még a törlés feldolgozása előtt végrehajthatók. Hálózati költségei nem téríthetők vissza. Szeretné folytatni?", "swap.confirmLimit": "Erősítse meg a limitet", "swap.confirmSwap": "Erősítse meg a cserét", "swap.deadline.settings.title": "Tranzakció határideje", + "swap.deadline.settings.title.short": "Tx. határidő", "swap.details.feeOnTransfer": "{{tokenSymbol}} díj", "swap.details.feeOnTransfer.default": "Jelképes díj", "swap.details.newQuote.input": "Új bemenet", @@ -1841,7 +1850,9 @@ "swap.review": "Véleménycsere", "swap.review.summary": "Cserélsz", "swap.reviewLimit": "Ellenőrzési korlát", - "swap.route.optimizedGasCost": "Ez az útvonal optimalizálja a teljes teljesítményt, figyelembe véve az osztott útvonalakat, a több ugrást és az egyes lépések gázköltségét.", + "swap.route.optimizedGasCost": "Ez az útvonal optimalizálja a teljes teljesítményt, figyelembe véve az osztott útvonalakat, a többszörös ugrásokat és az egyes lépések hálózati költségeit.", + "swap.settings.deadline.tooltip": "A tranzakció visszaáll, ha az ennél hosszabb ideig függőben van. (Maximum: 3 nap).", + "swap.settings.deadline.warning": "Magas határidő", "swap.settings.protection.description": "A cserevédelem bekapcsolásával az Ethereum-tranzakciói védettek lesznek a szendvicstámadásokkal szemben, és csökken a kudarc esélye.", "swap.settings.protection.subtitle.supported": "{{chainName}} Hálózat", "swap.settings.protection.subtitle.unavailable": "Nem érhető el itt: {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 poolok", "swap.settings.routingPreference.option.v4.title": "v4 poolok", "swap.settings.routingPreference.title": "Kereskedelmi lehetőségek", + "swap.settings.slippage.alert": "Magas csúszás", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "A tranzakció visszaáll, ha az ár a csúszási százaléknál nagyobb mértékben változik.", "swap.settings.slippage.input.message": "Ha az ár tovább csúszik, a tranzakció visszaáll. Az alábbiakban látható a garantáltan megkapott minimális összeg.", "swap.settings.slippage.input.receive.title": "Fogadjon legalább", "swap.settings.slippage.output.message": "Ha az ár tovább csúszik, a tranzakció visszaáll. Az alábbiakban látható a maximálisan elkölthető összeg.", "swap.settings.slippage.output.spend.title": "Legfeljebb költeni", + "swap.settings.slippage.warning": "Nagyon nagy csúszás", + "swap.settings.slippage.warning.description": "A 20% feletti csúszás valószínűleg kedvezőtlen kereskedést eredményez. Csökkentse a beállításokat az első lépések kockázatának csökkentése érdekében.", + "swap.settings.slippage.warning.hover": "Ez kedvezőtlen kereskedést eredményezhet. Próbálja csökkenteni a csúszási beállítást.", "swap.settings.slippage.warning.max": "Adjon meg egy kisebb értéket, mint {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "A csúszás a szükségesnél nagyobb lehet", "swap.settings.slippage.warning.min": "Adjon meg 0-nál nagyobb értéket", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Tól től", "transaction.details.networkFee": "Hálózati költség", + "transaction.details.providerFee": "Szolgáltatói díj", "transaction.details.swapRate": "Mérték", "transaction.details.transaction": "Tranzakció", "transaction.details.uniswapFee": "Díj ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Visszavonás", "transaction.status.revoke.success": "Visszavonva", "transaction.status.revoke.successDapp": "Visszavonva ekkor: {{externalDappName}}", + "transaction.status.sale.canceled": "Törölt értékesítés", + "transaction.status.sale.canceling": "Eladás törlése", + "transaction.status.sale.failedOn": "Az értékesítés sikertelen a következőn keresztül: {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Eladás: {{serviceProvider}}", + "transaction.status.sale.successOn": "{{serviceProvider}}keresztül értékesítve", "transaction.status.sell.canceled": "Eladás törölve", "transaction.status.sell.canceling": "Eladás visszavonása", "transaction.status.sell.failed": "Nem sikerült eladni", diff --git a/packages/uniswap/src/i18n/locales/translations/id-ID.json b/packages/uniswap/src/i18n/locales/translations/id-ID.json index f8c9fae225f..6d6f3d8cc41 100644 --- a/packages/uniswap/src/i18n/locales/translations/id-ID.json +++ b/packages/uniswap/src/i18n/locales/translations/id-ID.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likuiditas dihapus", "common.loading": "Memuat", "common.loadingAllowance": "Memuat tunjangan", + "common.loadMore": "Load more", "common.longText.button.less": "Baca lebih sedikit", "common.longText.button.more": "Baca selengkapnya", "common.lowPrice": "Harga rendah", @@ -540,8 +541,8 @@ "common.resetLimit": "Setel ulang batas {{symbol}}", "common.resetLimitWallet": "Setel ulang batas {{symbol}} di dompet", "common.resettingLimit": "Menyetel ulang batas {{symbol}}...", - "common.resolveIssue": "Menyelesaikan masalah", - "common.resolveIssues": "Selesaikan masalah {{issues}}", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Wilayah yang dibatasi", "common.return.label": "Kembali", "common.returnToTop": "Kembali ke atas", @@ -602,21 +603,25 @@ "common.thisWeek": "Minggu ini", "common.thisYear": "Tahun ini", "common.time": "Waktu", - "common.time.day": "hari", "common.time.days": "hari", - "common.time.hour": "jam", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "jam", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} mnt", "common.time.minutes": "menit", - "common.time.month": "bulan", "common.time.months": "bulan", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} hari yang lalu", "common.time.past.hours": "{{hours}} jam yang lalu", "common.time.past.minutes": "{{minutes}} menit yang lalu", "common.time.past.months": "{{months}} bulan yang lalu", "common.time.past.seconds": "{{seconds}} detik yang lalu", - "common.time.week": "minggu", "common.time.weeks": "minggu", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Tip:", "common.to": "ke", "common.today": "Hari ini", @@ -634,8 +639,8 @@ "common.transactions": "Transaksi", "common.transactionSettings": "Pengaturan Transaksi", "common.transactionSubmitted": "Transaksi dikirim", - "common.transfer": "transfer", - "common.transfers": "transfer", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Coba lagi", "common.twitter": "X (Twitter)", "common.type.label": "Jenis", @@ -856,6 +861,7 @@ "fee.tier.new": "Tingkatan baru", "fee.tier.percent.select": "Pilih {{percentage}}", "fee.tier.recommended": "Direkomendasikan", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Cari atau buat tier biaya lainnya", "fee.tier.search.short": "Cari tingkatan", "fee.tier.select": "Pilih tingkatan biaya", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Jual dengan", "fiatOffRamp.connection.quote": "Menjual {{amount}} senilai {{currencySymbol}}", "fiatOffRamp.error.balance": "Saldo berlebih", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Kembali", "fiatOffRamp.unsupportedToken.divider": "Token yang tidak didukung", "fiatOffRamp.unsupportedToken.message": "Token ini tidak dapat dijual. Tukar aset ini dengan salah satu token yang didukung.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Kelola likuiditas cadangan aset {{quoteSymbol}}/{{baseSymbol}} di Uniswap", "liquidityPool.positions.page.version.description": "Lihat posisi likuiditas {{version}} aktif Anda. Tambahkan posisi baru.", "liquidityPool.positions.page.version.title": "Kelola likuiditas cadangan aset{{version}} di Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} untuk {{outputToken}}", "liquidityPool.positions.price.formatted": " untuk ", "migrate.allowed": "Diizinkan", "migrate.allowLpMigration": "Izinkan migrasi token LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Izin2 memungkinkan persetujuan token untuk dibagikan dan dikelola di berbagai aplikasi.", "pool.activePositions.appear": "Posisi likuiditas V3 aktif Anda akan muncul di sini.", "pool.activeRange": "Rentang centang aktif", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Tambahkan likuiditas ke {{tokenPair}} ({{chain}}) di Uniswap", "pool.addMoreLiquidity": "Tambahkan lebih banyak likuiditas", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "Vol/TVL 1 Hari", "pool.volume.thirtyDay": "Volume 30 hari", "pool.volume.thirtyDay.short": "Vol 30hari", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Likuiditas V2 Anda", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Buka wrapping", "swap.button.wrap": "Wrapping", "swap.buy.countryModal.placeholder": "Cari berdasarkan negara atau wilayah", - "swap.cancel.cannotExecute": "Pertukaran Anda dapat dilakukan sebelum pembatalan diproses. Biaya jaringan Anda tidak dapat dikembalikan. Apakah Anda ingin melanjutkan?", - "swap.cancel.cannotExecute.plural": "Pertukaran Anda dapat dilakukan sebelum pembatalan diproses. Biaya jaringan Anda tidak dapat dikembalikan. Apakah Anda ingin melanjutkan?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Konfirmasikan batas", "swap.confirmSwap": "Konfirmasikan pertukaran", "swap.deadline.settings.title": "Batas waktu transaksi", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} biaya", "swap.details.feeOnTransfer.default": "Biaya token", "swap.details.newQuote.input": "Input baru", @@ -1841,7 +1850,9 @@ "swap.review": "Tinjau pertukaran", "swap.review.summary": "Anda bertukar", "swap.reviewLimit": "Tinjau batasan", - "swap.route.optimizedGasCost": "Rute ini mengoptimalkan total output Anda dengan mempertimbangkan rute terpisah, beberapa lompatan, dan biaya gas di setiap langkah.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Dengan mengaktifkan perlindungan pertukaran, transaksi Ethereum Anda akan terlindungi dari serangan sandwich, dengan kemungkinan kegagalan yang lebih kecil.", "swap.settings.protection.subtitle.supported": "{{chainName}} Jaringan", "swap.settings.protection.subtitle.unavailable": "Tidak tersedia pada {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Cadangan aset v3", "swap.settings.routingPreference.option.v4.title": "Cadangan aset v4", "swap.settings.routingPreference.title": "Opsi perdagangan", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Otomatis", "swap.settings.slippage.description": "Transaksi Anda akan dibatalkan jika harga berubah lebih dari persentase slippage.", "swap.settings.slippage.input.message": "Jika harga turun lebih jauh, transaksi Anda akan dibatalkan. Di bawah ini adalah jumlah minimum yang dijamin akan Anda terima.", "swap.settings.slippage.input.receive.title": "Terima setidaknya", "swap.settings.slippage.output.message": "Jika harga turun lebih jauh, transaksi Anda akan dibatalkan. Di bawah ini adalah jumlah maksimum yang perlu Anda belanjakan.", "swap.settings.slippage.output.spend.title": "Belanjakan maks", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Masukkan nilai kurang dari {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Slippage mungkin diatur terlalu tinggi", "swap.settings.slippage.warning.min": "Masukkan nilai yang lebih besar dari 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Aplikasi", "transaction.details.from": "Dari", "transaction.details.networkFee": "Biaya jaringan", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Tarif", "transaction.details.transaction": "Transaksi", "transaction.details.uniswapFee": "Biaya ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Mencabut", "transaction.status.revoke.success": "Dicabut", "transaction.status.revoke.successDapp": "Dicabut di {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Penjualan dibatalkan", "transaction.status.sell.canceling": "Membatalkan penjualan", "transaction.status.sell.failed": "Gagal menjual", diff --git a/packages/uniswap/src/i18n/locales/translations/it-IT.json b/packages/uniswap/src/i18n/locales/translations/it-IT.json index 9c90713f9f9..e77333deca0 100644 --- a/packages/uniswap/src/i18n/locales/translations/it-IT.json +++ b/packages/uniswap/src/i18n/locales/translations/it-IT.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Liquidità rimossa", "common.loading": "Caricamento", "common.loadingAllowance": "Indennità di carico", + "common.loadMore": "Carica altro", "common.longText.button.less": "Leggi di meno", "common.longText.button.more": "Per saperne di più", "common.lowPrice": "Prezzo basso", @@ -540,8 +541,8 @@ "common.resetLimit": "Reimposta il limite di {{symbol}}", "common.resetLimitWallet": "Reimposta il limite di {{symbol}} nel portafoglio", "common.resettingLimit": "Reimpostazione del limite di {{symbol}} ...", - "common.resolveIssue": "Risolvere il problema", - "common.resolveIssues": "Risolvi {{issues}} problemi", + "common.resolveIssues_one": "Risolvere il problema", + "common.resolveIssues_other": "Risolvi i problemi {{count}}", "common.restricted.region": "Regione riservata", "common.return.label": "Ritorno", "common.returnToTop": "Ritorna su", @@ -602,21 +603,25 @@ "common.thisWeek": "Questa settimana", "common.thisYear": "Quest'anno", "common.time": "Tempo", - "common.time.day": "giorno", "common.time.days": "giorni", - "common.time.hour": "ora", + "common.time.days_one": "giorno", + "common.time.days_other": "giorni", "common.time.hours": "ore", + "common.time.hours_one": "ora", + "common.time.hours_other": "ore", "common.time.minute.amt": "{{time}}il", "common.time.minutes": "minuti", - "common.time.month": "mese", "common.time.months": "mesi", + "common.time.months_one": "mese", + "common.time.months_other": "mesi", "common.time.past.days": "{{days}}giorni fa", "common.time.past.hours": "{{hours}}ore fa", "common.time.past.minutes": "{{minutes}}m fa", "common.time.past.months": "{{months}}mesi fa", "common.time.past.seconds": "{{seconds}}s fa", - "common.time.week": "settimana", "common.time.weeks": "settimane", + "common.time.weeks_one": "settimana", + "common.time.weeks_other": "settimane", "common.tip.label": "Mancia:", "common.to": "a", "common.today": "Oggi", @@ -634,8 +639,8 @@ "common.transactions": "Transazioni", "common.transactionSettings": "Impostazioni della transazione", "common.transactionSubmitted": "Transazione inviata", - "common.transfer": "trasferimento", - "common.transfers": "trasferimenti", + "common.transfer_one": "trasferimento", + "common.transfer_other": "trasferimenti", "common.tryAgain.error": "Riprova", "common.twitter": "Cinguettio", "common.type.label": "Tipo", @@ -856,6 +861,7 @@ "fee.tier.new": "Nuovo livello", "fee.tier.percent.select": "{{percentage}} seleziona", "fee.tier.recommended": "Raccomandato", + "fee.tier.recommended.description": "Consigliato in quanto offre la quota più elevata di liquidità per la coppia di token selezionata.", "fee.tier.search": "Cerca o crea altri livelli tariffari", "fee.tier.search.short": "Cerca livelli", "fee.tier.select": "Seleziona il livello di tariffa", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Vendi con", "fiatOffRamp.connection.quote": "Vendita di {{amount}} di {{currencySymbol}}", "fiatOffRamp.error.balance": "Supera il saldo", + "fiatOffRamp.summary.total": "{{cryptoAmount}} per {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Torna indietro", "fiatOffRamp.unsupportedToken.divider": "Token non supportati", "fiatOffRamp.unsupportedToken.message": "Questo token non è supportato per la vendita. Scambia questa risorsa con uno dei token supportati.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Gestisci la liquidità del pool di {{quoteSymbol}}/{{baseSymbol}} su Uniswap", "liquidityPool.positions.page.version.description": "Visualizza le tue {{version}} posizioni di liquidità attive. Aggiungi nuove posizioni.", "liquidityPool.positions.page.version.title": "Gestisci la liquidità del pool{{version}} su Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} ogni {{outputToken}}", "liquidityPool.positions.price.formatted": " ogni ", "migrate.allowed": "Consentito", "migrate.allowLpMigration": "Consenti la migrazione del token LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 consente di condividere e gestire le approvazioni dei token tra diverse applicazioni.", "pool.activePositions.appear": "Le tue posizioni di liquidità V3 attive appariranno qui.", "pool.activeRange": "Intervallo di tick attivo", + "pool.addAs": "Aggiungi come {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Aggiungi liquidità a {{tokenPair}} ({{chain}}) su Uniswap", "pool.addMoreLiquidity": "Aggiungere più liquidità", "pool.apr": "TAEG", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "Volume 30 giorni", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Ritira come {{nativeWrappedSymbol}}", "pool.yourv2": "La tua liquidità V2", "poolFinder.availablePools": "Piscine disponibili", "poolFinder.availablePools.found.description": "Pool v2 corrispondenti alla tua selezione di coppie.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Scartare", "swap.button.wrap": "Avvolgere", "swap.buy.countryModal.placeholder": "Cerca per paese o regione", - "swap.cancel.cannotExecute": "Il tuo scambio potrebbe essere eseguito prima che venga elaborata la cancellazione. I costi di rete non possono essere rimborsati. Desideri procedere?", - "swap.cancel.cannotExecute.plural": "I tuoi swap potrebbero essere eseguiti prima che venga elaborata la cancellazione. I costi di rete non possono essere rimborsati. Desideri procedere?", + "swap.cancel.cannotExecute_one": "Il tuo scambio potrebbe essere eseguito prima che venga elaborata la cancellazione. I costi di rete non possono essere rimborsati. Desideri procedere?", + "swap.cancel.cannotExecute_other": "I tuoi swap potrebbero essere eseguiti prima che venga elaborata la cancellazione. I costi di rete non possono essere rimborsati. Desideri procedere?", "swap.confirmLimit": "Conferma limite", "swap.confirmSwap": "Conferma lo scambio", "swap.deadline.settings.title": "Scadenza della transazione", + "swap.deadline.settings.title.short": "Scadenza Tx.", "swap.details.feeOnTransfer": "{{tokenSymbol}} tariffa", "swap.details.feeOnTransfer.default": "Tariffa simbolica", "swap.details.newQuote.input": "Nuovo ingresso", @@ -1841,7 +1850,9 @@ "swap.review": "Scambio di recensioni", "swap.review.summary": "Stai scambiando", "swap.reviewLimit": "Limite di revisione", - "swap.route.optimizedGasCost": "Questo percorso ottimizza la produzione totale considerando percorsi suddivisi, salti multipli e il costo del gas di ogni passaggio.", + "swap.route.optimizedGasCost": "Questo percorso ottimizza il tuo output totale tenendo conto di percorsi suddivisi, hop multipli e costi di rete di ogni passaggio.", + "swap.settings.deadline.tooltip": "La transazione verrà annullata se rimane in sospeso per un periodo di tempo superiore a questo. (Massimo: 3 giorni).", + "swap.settings.deadline.warning": "Scadenza elevata", "swap.settings.protection.description": "Con la protezione swap attiva, le tue transazioni Ethereum saranno protette dagli attacchi sandwich, con ridotte possibilità di fallimento.", "swap.settings.protection.subtitle.supported": "{{chainName}} Rete", "swap.settings.protection.subtitle.unavailable": "Non disponibile su {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "pool v3", "swap.settings.routingPreference.option.v4.title": "piscine v4", "swap.settings.routingPreference.title": "Opzioni commerciali", + "swap.settings.slippage.alert": "Elevato slittamento", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "La transazione verrà annullata se il prezzo cambia più della percentuale di slittamento.", "swap.settings.slippage.input.message": "Se il prezzo scende ulteriormente, la transazione verrà annullata. Di seguito è riportato l'importo minimo che hai la garanzia di ricevere.", "swap.settings.slippage.input.receive.title": "Ricevi almeno", "swap.settings.slippage.output.message": "Se il prezzo scende ulteriormente, la transazione verrà annullata. Di seguito è riportato l'importo massimo che dovresti spendere.", "swap.settings.slippage.output.spend.title": "Spendere al massimo", + "swap.settings.slippage.warning": "Slittamento molto elevato", + "swap.settings.slippage.warning.description": "Uno slippage superiore al 20% probabilmente darà luogo a un trade sfavorevole. Per ridurre il rischio di essere front-run, abbassa le tue impostazioni.", + "swap.settings.slippage.warning.hover": "Ciò potrebbe comportare un trade sfavorevole. Prova ad abbassare l'impostazione dello slippage.", "swap.settings.slippage.warning.max": "Inserisci un valore inferiore a {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Lo slittamento potrebbe essere superiore al necessario", "swap.settings.slippage.warning.min": "Inserisci un valore maggiore di 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Applicazione", "transaction.details.from": "Da", "transaction.details.networkFee": "Costo di rete", + "transaction.details.providerFee": "Commissione del fornitore", "transaction.details.swapRate": "Valutare", "transaction.details.transaction": "Transazione", "transaction.details.uniswapFee": "Commissione ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Revoca", "transaction.status.revoke.success": "Revocato", "transaction.status.revoke.successDapp": "Revocato il {{externalDappName}}", + "transaction.status.sale.canceled": "Vendita annullata", + "transaction.status.sale.canceling": "Annullamento della vendita", + "transaction.status.sale.failedOn": "Vendita fallita tramite {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Vendita tramite {{serviceProvider}}", + "transaction.status.sale.successOn": "Venduto tramite {{serviceProvider}}", "transaction.status.sell.canceled": "Vendita annullata", "transaction.status.sell.canceling": "Annullamento della vendita", "transaction.status.sell.failed": "Impossibile vendere", diff --git a/packages/uniswap/src/i18n/locales/translations/ja-JP.json b/packages/uniswap/src/i18n/locales/translations/ja-JP.json index 3b777b18720..a1f98ddf7b8 100644 --- a/packages/uniswap/src/i18n/locales/translations/ja-JP.json +++ b/packages/uniswap/src/i18n/locales/translations/ja-JP.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "流動性が削除されました", "common.loading": "読み込み中です", "common.loadingAllowance": "アローワンスを読み込み中です", + "common.loadMore": "Load more", "common.longText.button.less": "表示を減らす", "common.longText.button.more": "もっと表示", "common.lowPrice": "低価格", @@ -540,8 +541,8 @@ "common.resetLimit": "{{symbol}} の制限をリセット", "common.resetLimitWallet": "ウォレットの {{symbol}} の制限をリセット", "common.resettingLimit": "{{symbol}} の制限をリセット中です...", - "common.resolveIssue": "問題を解決", - "common.resolveIssues": "{{issues}} の問題を解決", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "地域が制限されています", "common.return.label": "戻る", "common.returnToTop": "トップに戻る", @@ -602,21 +603,25 @@ "common.thisWeek": "今週", "common.thisYear": "今年", "common.time": "時間", - "common.time.day": "日", "common.time.days": "日", - "common.time.hour": "時間", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "時間", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} 分", "common.time.minutes": "分", - "common.time.month": "か月", "common.time.months": "か月", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} 日前", "common.time.past.hours": "{{hours}} 時間前", "common.time.past.minutes": "{{minutes}} 分前", "common.time.past.months": "{{months}} か月前", "common.time.past.seconds": "{{seconds}} 秒前", - "common.time.week": "週", "common.time.weeks": "週", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "ヒント:", "common.to": "受取先", "common.today": "今日", @@ -634,8 +639,8 @@ "common.transactions": "トランザクション", "common.transactionSettings": "トランザクションの設定", "common.transactionSubmitted": "トランザクションが送信されました", - "common.transfer": "転送", - "common.transfers": "転送", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "もう一度試す", "common.twitter": "Twitter", "common.type.label": "タイプ", @@ -856,6 +861,7 @@ "fee.tier.new": "新規区分", "fee.tier.percent.select": "{{percentage}} 選択", "fee.tier.recommended": "おすすめ", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "他の手数料区分を検索または作成", "fee.tier.search.short": "区分を検索", "fee.tier.select": "手数料区分を選択", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "売却で使用するプロバイダ:", "fiatOffRamp.connection.quote": "{{amount}} 相当の {{currencySymbol}} を売る", "fiatOffRamp.error.balance": "残高を超えています", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "戻る", "fiatOffRamp.unsupportedToken.divider": "サポートされていないトークン", "fiatOffRamp.unsupportedToken.message": "このトークンは販売できません。このアセットをサポートされているトークンの 1 つにスワップします。", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Uniswap で {{quoteSymbol}}/{{baseSymbol}} プールの流動性を管理", "liquidityPool.positions.page.version.description": "アクティブな {{version}} 流動性ポジションを表示します。新しいポジションを追加してください。", "liquidityPool.positions.page.version.title": "Uniswap でプールの流動性 {{version}} を管理", - "liquidityPool.positions.price": "{{outputToken}} あたり {{amountWithSymbol}}", "liquidityPool.positions.price.formatted": " あたり ", "migrate.allowed": "許可しました", "migrate.allowLpMigration": "LP トークンの移行を許可", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 を使用すると、トークンの承認をさまざまなアプリケーション間で共有および管理できます。", "pool.activePositions.appear": "アクティブな V3 流動性ポジションがここに表示されます。", "pool.activeRange": "アクティブなティック範囲", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Uniswap の {{tokenPair}} ({{chain}}) に流動性を追加", "pool.addMoreLiquidity": "流動性をさらに追加", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1 日のボリューム/TVL", "pool.volume.thirtyDay": "30 日間のボリューム", "pool.volume.thirtyDay.short": "30 日間のボリューム", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "お客様の V2 流動性", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "アンラップ", "swap.button.wrap": "ラップ", "swap.buy.countryModal.placeholder": "国または地域で検索", - "swap.cancel.cannotExecute": "キャンセルが処理される前にスワップが実行される場合があります。ネットワークコストは返金できません。続行しますか?", - "swap.cancel.cannotExecute.plural": "キャンセルが処理される前にスワップが実行される可能性があります。ネットワークコストは返金できません。続行しますか?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "指値注文を確定", "swap.confirmSwap": "スワップを確定", "swap.deadline.settings.title": "トランザクション期限", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} 手数料", "swap.details.feeOnTransfer.default": "トークン手数料", "swap.details.newQuote.input": "新規の入金", @@ -1841,7 +1850,9 @@ "swap.review": "スワップをレビュー", "swap.review.summary": "スワップ中です", "swap.reviewLimit": "指値注文をレビュー", - "swap.route.optimizedGasCost": "このルートは、分割ルート、複数のホップ、および各ステップのガス代を考慮して、合計出力を最適化します。", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "スワップ保護をオンにすると、イーサリアムトランザクションはサンドイッチ攻撃から保護され、失敗の可能性が低くなります。", "swap.settings.protection.subtitle.supported": "{{chainName}} ネットワーク", "swap.settings.protection.subtitle.unavailable": "{{chainName}} では利用できません", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 プール", "swap.settings.routingPreference.option.v4.title": "v4 プール", "swap.settings.routingPreference.title": "取引の選択肢", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "自動", "swap.settings.slippage.description": "価格がスリッページ率を超えて変動した場合、トランザクションは取り消されます。", "swap.settings.slippage.input.message": "価格がさらに下落した場合、トランザクションは取り消されます。お客様が受け取ることを保証されている最低金額は以下のとおりです。", "swap.settings.slippage.input.receive.title": "最小受取額", "swap.settings.slippage.output.message": "価格がさらに下落した場合、トランザクションは取り消されます。お客様に必要となる支出の最大金額は以下のとおりです。", "swap.settings.slippage.output.spend.title": "最大支出額", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "{{maxSlippageTolerance}} 未満の値を入力してください", "swap.settings.slippage.warning.message": "スリッページが必要以上に高くなる可能性があります", "swap.settings.slippage.warning.min": "0 を超える値を入力してください", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "アプリ", "transaction.details.from": "送信元", "transaction.details.networkFee": "ネットワークコスト", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "レート", "transaction.details.transaction": "トランザクション", "transaction.details.uniswapFee": "手数料({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "取り消し中です", "transaction.status.revoke.success": "取り消しました", "transaction.status.revoke.successDapp": "{{externalDappName}} で取り消しました", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "売却をキャンセルしました", "transaction.status.sell.canceling": "売却をキャンセル中です", "transaction.status.sell.failed": "売却に失敗しました", diff --git a/packages/uniswap/src/i18n/locales/translations/ko-KR.json b/packages/uniswap/src/i18n/locales/translations/ko-KR.json index a87f72e622b..fe116906fcc 100644 --- a/packages/uniswap/src/i18n/locales/translations/ko-KR.json +++ b/packages/uniswap/src/i18n/locales/translations/ko-KR.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "유동성 제거됨", "common.loading": "로드 중", "common.loadingAllowance": "선적 여유", + "common.loadMore": "Load more", "common.longText.button.less": "숨기기", "common.longText.button.more": "더 읽기", "common.lowPrice": "저렴한 가격", @@ -540,8 +541,8 @@ "common.resetLimit": "{{symbol}} 한도 재설정", "common.resetLimitWallet": "지갑에서 {{symbol}} 한도 재설정", "common.resettingLimit": "{{symbol}} 한도 재설정 중...", - "common.resolveIssue": "문제 해결", - "common.resolveIssues": "{{issues}} 문제 해결", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "제한된 지역", "common.return.label": "돌아가기", "common.returnToTop": "맨 위로 돌아가기", @@ -602,21 +603,25 @@ "common.thisWeek": "이번 주", "common.thisYear": "올해", "common.time": "시간", - "common.time.day": "일", "common.time.days": "일", - "common.time.hour": "시간", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "시간", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}}분", "common.time.minutes": "분", - "common.time.month": "개월", "common.time.months": "개월", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}}일전", "common.time.past.hours": "{{hours}}시간 전", "common.time.past.minutes": "{{minutes}}분 전", "common.time.past.months": "{{months}}개월 전", "common.time.past.seconds": "{{seconds}}초 전", - "common.time.week": "주", "common.time.weeks": "주", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "팁:", "common.to": "에게", "common.today": "오늘", @@ -634,8 +639,8 @@ "common.transactions": "트랜잭션", "common.transactionSettings": "트랜잭션 설정", "common.transactionSubmitted": "트랜잭션 제출됨", - "common.transfer": "전송", - "common.transfers": "전송", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "다시 시도하십시오", "common.twitter": "트위터", "common.type.label": "유형", @@ -856,6 +861,7 @@ "fee.tier.new": "새로운 등급", "fee.tier.percent.select": "{{percentage}} 선택", "fee.tier.recommended": "추천", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "다른 수수료 등급 검색 또는 생성", "fee.tier.search.short": "등급 검색", "fee.tier.select": "수수료 등급 선택", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "판매하기", "fiatOffRamp.connection.quote": "{{amount}} 상당의 {{currencySymbol}} 판매", "fiatOffRamp.error.balance": "잔액 초과", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "뒤로 가기", "fiatOffRamp.unsupportedToken.divider": "지원되지 않는 토큰", "fiatOffRamp.unsupportedToken.message": "이 토큰은 판매를 지원하지 않습니다. 이 자산을 지원되는 토큰으로 교환하세요.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Uniswap에서 {{quoteSymbol}}/{{baseSymbol}} 풀 유동성 관리", "liquidityPool.positions.page.version.description": "활성 {{version}} 유동성 포지션을 확인하세요. 새 포지션을 추가하세요.", "liquidityPool.positions.page.version.title": "Uniswap에서 풀 유동성{{version}} 관리", - "liquidityPool.positions.price": "{{outputToken}}당 {{amountWithSymbol}}", "liquidityPool.positions.price.formatted": "", "migrate.allowed": "허용된", "migrate.allowLpMigration": "LP 토큰 마이그레이션 허용", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2를 사용하면 토큰 승인을 다양한 애플리케이션에서 공유하고 관리할 수 있습니다.", "pool.activePositions.appear": "당신의 활성 V3 유동성 포지션이 여기에 표시됩니다.", "pool.activeRange": "활성 틱 범위", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Uniswap의 {{tokenPair}} ({{chain}})에 유동성 추가", "pool.addMoreLiquidity": "유동성 추가하기", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D 볼륨/TVL", "pool.volume.thirtyDay": "30일 거래량", "pool.volume.thirtyDay.short": "30일 거래량", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "당신의 V2 유동성", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "언랩핑", "swap.button.wrap": "랩핑하다", "swap.buy.countryModal.placeholder": "국가 또는 지역으로 검색", - "swap.cancel.cannotExecute": "취소가 처리되기 전에 스왑이 실행될 수 있습니다. 네트워크 비용은 환불될 수 없습니다. 계속하시겠습니까?", - "swap.cancel.cannotExecute.plural": "취소가 처리되기 전에 스왑이 실행될 수 있습니다. 네트워크 비용은 환불될 수 없습니다. 계속하시겠습니까?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "한도 확인", "swap.confirmSwap": "스왑 확인", "swap.deadline.settings.title": "트랜잭션 마감시간", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} 수수료", "swap.details.feeOnTransfer.default": "토큰 수수료", "swap.details.newQuote.input": "새로운 입력", @@ -1841,7 +1850,9 @@ "swap.review": "스왑 검토", "swap.review.summary": "당신은 스왑 중입니다", "swap.reviewLimit": "지정가 주문 검토", - "swap.route.optimizedGasCost": "이 경로는 분할 경로, 다중 홉 및 각 단계의 가스 비용을 고려하여 총 출력을 최적화합니다.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "스왑 보호가 켜져 있으면 이더리움 트랜잭션이 샌드위치 공격으로부터 보호되며 실패 가능성이 줄어듭니다.", "swap.settings.protection.subtitle.supported": "{{chainName}} 네트워크", "swap.settings.protection.subtitle.unavailable": "{{chainName}}에는 이용 불가", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 풀", "swap.settings.routingPreference.option.v4.title": "v4 풀", "swap.settings.routingPreference.title": "거래 옵션", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "자동", "swap.settings.slippage.description": "가격이 슬리피지 비율 이상으로 변동하면 트랜잭션이 취소됩니다.", "swap.settings.slippage.input.message": "가격이 더 이상 하락하면 트랜잭션이 취소됩니다. 다음은 귀하가 받을 수 있는 최소 금액입니다.", "swap.settings.slippage.input.receive.title": "최소 수령", "swap.settings.slippage.output.message": "가격이 더 이상 하락하면 트랜잭션이 취소됩니다. 다음은 지출해야 하는 최대 금액입니다.", "swap.settings.slippage.output.spend.title": "최대 지출", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "{{maxSlippageTolerance}}보다 작은 값을 입력하세요.", "swap.settings.slippage.warning.message": "슬리피지가 필요 이상으로 높을 수 있음", "swap.settings.slippage.warning.min": "0보다 큰 값을 입력하세요.", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "앱", "transaction.details.from": "에서", "transaction.details.networkFee": "네트워크 비용", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "비율", "transaction.details.transaction": "트랜잭션", "transaction.details.uniswapFee": "수수료({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "취소 중", "transaction.status.revoke.success": "취소됨", "transaction.status.revoke.successDapp": "{{externalDappName}}에 취소됨", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "취소된 판매", "transaction.status.sell.canceling": "판매 취소 중", "transaction.status.sell.failed": "판매 실패", diff --git a/packages/uniswap/src/i18n/locales/translations/ms-MY.json b/packages/uniswap/src/i18n/locales/translations/ms-MY.json index 99dd8607f26..cebe8ea5915 100644 --- a/packages/uniswap/src/i18n/locales/translations/ms-MY.json +++ b/packages/uniswap/src/i18n/locales/translations/ms-MY.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Kecairan dikeluarkan", "common.loading": "Memuatkan", "common.loadingAllowance": "Elaun memuatkan", + "common.loadMore": "Muatkan lagi", "common.longText.button.less": "Kurangkan membaca", "common.longText.button.more": "Baca lagi", "common.lowPrice": "Harga rendah", @@ -540,8 +541,8 @@ "common.resetLimit": "Tetapkan semula had {{symbol}}", "common.resetLimitWallet": "Tetapkan semula had {{symbol}} dalam dompet", "common.resettingLimit": "Menetapkan semula had {{symbol}} ...", - "common.resolveIssue": "Selesaikan isu", - "common.resolveIssues": "Selesaikan {{issues}} isu", + "common.resolveIssues_one": "Selesaikan isu", + "common.resolveIssues_other": "Selesaikan masalah {{count}}", "common.restricted.region": "Wilayah terhad", "common.return.label": "Kembali", "common.returnToTop": "Kembali ke atas", @@ -602,21 +603,25 @@ "common.thisWeek": "Minggu ini", "common.thisYear": "Tahun ini", "common.time": "Masa", - "common.time.day": "hari", "common.time.days": "hari", - "common.time.hour": "jam", + "common.time.days_one": "hari", + "common.time.days_other": "hari", "common.time.hours": "Jam", + "common.time.hours_one": "jam", + "common.time.hours_other": "Jam", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minit", - "common.time.month": "bulan", "common.time.months": "bulan", + "common.time.months_one": "bulan", + "common.time.months_other": "bulan", "common.time.past.days": "{{days}}d lalu", "common.time.past.hours": "{{hours}}h lalu", "common.time.past.minutes": "{{minutes}}m yang lalu", "common.time.past.months": "{{months}}bulan lalu", "common.time.past.seconds": "{{seconds}}s lalu", - "common.time.week": "minggu", "common.time.weeks": "minggu", + "common.time.weeks_one": "minggu", + "common.time.weeks_other": "minggu", "common.tip.label": "Petua:", "common.to": "kepada", "common.today": "Hari ini", @@ -634,8 +639,8 @@ "common.transactions": "Transaksi", "common.transactionSettings": "Tetapan Transaksi", "common.transactionSubmitted": "Urus niaga diserahkan", - "common.transfer": "pemindahan", - "common.transfers": "pemindahan", + "common.transfer_one": "pemindahan", + "common.transfer_other": "pemindahan", "common.tryAgain.error": "Cuba lagi", "common.twitter": "Twitter", "common.type.label": "taip", @@ -856,6 +861,7 @@ "fee.tier.new": "Peringkat baharu", "fee.tier.percent.select": "{{percentage}} pilih", "fee.tier.recommended": "Disyorkan", + "fee.tier.recommended.description": "Disyorkan berdasarkan mempunyai bahagian kecairan tertinggi untuk pasangan token yang dipilih.", "fee.tier.search": "Cari atau buat peringkat yuran lain", "fee.tier.search.short": "Cari peringkat", "fee.tier.select": "Pilih peringkat yuran", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Jual dengan", "fiatOffRamp.connection.quote": "Menjual {{amount}} bernilai {{currencySymbol}}", "fiatOffRamp.error.balance": "Melebihi keseimbangan", + "fiatOffRamp.summary.total": "{{cryptoAmount}} untuk {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Pergi balik", "fiatOffRamp.unsupportedToken.divider": "Token yang tidak disokong", "fiatOffRamp.unsupportedToken.message": "Token ini tidak disokong untuk dijual. Tukar aset ini kepada salah satu token yang disokong.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Urus {{quoteSymbol}}/{{baseSymbol}} kecairan kumpulan pada Uniswap", "liquidityPool.positions.page.version.description": "Lihat {{version}} kedudukan mudah tunai anda yang aktif. Tambah jawatan baharu.", "liquidityPool.positions.page.version.title": "Urus kecairan kumpulan{{version}} pada Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} setiap {{outputToken}}", "liquidityPool.positions.price.formatted": " setiap ", "migrate.allowed": "Dibenarkan", "migrate.allowLpMigration": "Benarkan penghijrahan token LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 membenarkan kelulusan token dikongsi dan diuruskan merentas aplikasi yang berbeza.", "pool.activePositions.appear": "Kedudukan mudah tunai V3 anda yang aktif akan dipaparkan di sini.", "pool.activeRange": "Julat tanda aktif", + "pool.addAs": "Tambahkan sebagai {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Tambahkan kecairan kepada {{tokenPair}} ({{chain}}) pada Uniswap", "pool.addMoreLiquidity": "Tambah lebih kecairan", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "volum 30 hari", "pool.volume.thirtyDay.short": "30D jld", + "pool.withdrawAs": "Tarik balik sebagai {{nativeWrappedSymbol}}", "pool.yourv2": "Kecairan V2 anda", "poolFinder.availablePools": "Kolam yang tersedia", "poolFinder.availablePools.found.description": "kolam v2 sepadan dengan pilihan pasangan anda.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Buka bungkus", "swap.button.wrap": "Bungkus", "swap.buy.countryModal.placeholder": "Cari mengikut negara atau wilayah", - "swap.cancel.cannotExecute": "Pertukaran anda boleh dilaksanakan sebelum pembatalan diproses. Kos rangkaian anda tidak boleh dikembalikan. Adakah anda ingin meneruskan?", - "swap.cancel.cannotExecute.plural": "Swap anda boleh dilaksanakan sebelum pembatalan diproses. Kos rangkaian anda tidak boleh dikembalikan. Adakah anda ingin meneruskan?", + "swap.cancel.cannotExecute_one": "Pertukaran anda boleh dilaksanakan sebelum pembatalan diproses. Kos rangkaian anda tidak boleh dikembalikan. Adakah anda ingin meneruskan?", + "swap.cancel.cannotExecute_other": "Swap anda boleh dilaksanakan sebelum pembatalan diproses. Kos rangkaian anda tidak boleh dikembalikan. Adakah anda ingin meneruskan?", "swap.confirmLimit": "Sahkan had", "swap.confirmSwap": "Sahkan pertukaran", "swap.deadline.settings.title": "Tarikh akhir urus niaga", + "swap.deadline.settings.title.short": "Tx. tarikh akhir", "swap.details.feeOnTransfer": "{{tokenSymbol}} yuran", "swap.details.feeOnTransfer.default": "Bayaran token", "swap.details.newQuote.input": "Input baharu", @@ -1841,7 +1850,9 @@ "swap.review": "Tukar ulasan", "swap.review.summary": "Anda bertukar-tukar", "swap.reviewLimit": "Had semakan", - "swap.route.optimizedGasCost": "Laluan ini mengoptimumkan jumlah output anda dengan mempertimbangkan laluan berpecah, berbilang lompatan dan kos gas setiap langkah.", + "swap.route.optimizedGasCost": "Laluan ini mengoptimumkan jumlah output anda dengan mempertimbangkan laluan berpecah, berbilang lompatan dan kos rangkaian bagi setiap langkah.", + "swap.settings.deadline.tooltip": "Urus niaga anda akan kembali jika ia belum selesai lebih daripada tempoh masa ini. (Maksimum: 3 hari).", + "swap.settings.deadline.warning": "Tarikh akhir yang tinggi", "swap.settings.protection.description": "Dengan perlindungan swap dihidupkan, urus niaga Ethereum anda akan dilindungi daripada serangan sandwic, dengan mengurangkan kemungkinan kegagalan.", "swap.settings.protection.subtitle.supported": "{{chainName}} Rangkaian", "swap.settings.protection.subtitle.unavailable": "Tidak tersedia pada {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "kolam v3", "swap.settings.routingPreference.option.v4.title": "kolam v4", "swap.settings.routingPreference.title": "Pilihan perdagangan", + "swap.settings.slippage.alert": "gelinciran tinggi", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Urus niaga anda akan kembali jika harga berubah lebih daripada peratusan gelinciran.", "swap.settings.slippage.input.message": "Jika harga turun lagi, transaksi anda akan kembali. Di bawah ialah jumlah minimum yang dijamin anda akan terima.", "swap.settings.slippage.input.receive.title": "Terima sekurang-kurangnya", "swap.settings.slippage.output.message": "Jika harga turun lagi, transaksi anda akan kembali. Di bawah ialah jumlah maksimum yang anda perlu belanjakan.", "swap.settings.slippage.output.spend.title": "Berbelanja paling banyak", + "swap.settings.slippage.warning": "gelinciran yang sangat tinggi", + "swap.settings.slippage.warning.description": "Kegelinciran melebihi 20% mungkin akan mengakibatkan perdagangan yang tidak menguntungkan. Untuk mengurangkan risiko dijalankan di hadapan, turunkan tetapan anda.", + "swap.settings.slippage.warning.hover": "Ini boleh mengakibatkan perdagangan yang tidak menguntungkan. Cuba turunkan tetapan gelinciran anda.", "swap.settings.slippage.warning.max": "Masukkan nilai kurang daripada {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Gelinciran mungkin lebih tinggi daripada yang diperlukan", "swap.settings.slippage.warning.min": "Masukkan nilai yang lebih besar daripada 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Aplikasi", "transaction.details.from": "daripada", "transaction.details.networkFee": "Kos rangkaian", + "transaction.details.providerFee": "Bayaran pembekal", "transaction.details.swapRate": "Kadar", "transaction.details.transaction": "Transaksi", "transaction.details.uniswapFee": "Yuran ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Membatalkan", "transaction.status.revoke.success": "Dibatalkan", "transaction.status.revoke.successDapp": "Dibatalkan pada {{externalDappName}}", + "transaction.status.sale.canceled": "Jualan dibatalkan", + "transaction.status.sale.canceling": "Membatalkan jualan", + "transaction.status.sale.failedOn": "Jualan Gagal melalui {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Menjual melalui {{serviceProvider}}", + "transaction.status.sale.successOn": "Dijual melalui {{serviceProvider}}", "transaction.status.sell.canceled": "Jualan dibatalkan", "transaction.status.sell.canceling": "Membatalkan penjualan", "transaction.status.sell.failed": "Gagal menjual", diff --git a/packages/uniswap/src/i18n/locales/translations/nl-NL.json b/packages/uniswap/src/i18n/locales/translations/nl-NL.json index 9cf4b073a21..371353757f9 100644 --- a/packages/uniswap/src/i18n/locales/translations/nl-NL.json +++ b/packages/uniswap/src/i18n/locales/translations/nl-NL.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Liquiditeit verwijderd", "common.loading": "Bezig met laden", "common.loadingAllowance": "Toegestane bedrag wordt geladen", + "common.loadMore": "Load more", "common.longText.button.less": "Minder lezen", "common.longText.button.more": "Meer lezen", "common.lowPrice": "Lage prijs", @@ -540,8 +541,8 @@ "common.resetLimit": "Limiet van {{symbol}} resetten", "common.resetLimitWallet": "Limiet van {{symbol}} in wallet resetten", "common.resettingLimit": "Bezig de limiet van {{symbol}} te resetten...", - "common.resolveIssue": "Probleem oplossen", - "common.resolveIssues": "{{issues}} problemen oplossen", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Beperkt gebied", "common.return.label": "Terug", "common.returnToTop": "Terug naar boven", @@ -602,21 +603,25 @@ "common.thisWeek": "Deze week", "common.thisYear": "Dit jaar", "common.time": "Tijd", - "common.time.day": "dag", "common.time.days": "dagen", - "common.time.hour": "uur", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "uur", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minuten", - "common.time.month": "maand", "common.time.months": "maanden", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}}d geleden", "common.time.past.hours": "{{hours}}u geleden", "common.time.past.minutes": "{{minutes}}m geleden", "common.time.past.months": "{{months}}ma geleden", "common.time.past.seconds": "{{seconds}}s geleden", - "common.time.week": "week", "common.time.weeks": "weken", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Tip:", "common.to": "aan", "common.today": "Vandaag", @@ -634,8 +639,8 @@ "common.transactions": "Transacties", "common.transactionSettings": "Transactie-instellingen", "common.transactionSubmitted": "Transactie verstuurd", - "common.transfer": "overboeking", - "common.transfers": "overboekingen", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Probeer het opnieuw", "common.twitter": "Twitter", "common.type.label": "Type", @@ -856,6 +861,7 @@ "fee.tier.new": "Nieuw niveau", "fee.tier.percent.select": "{{percentage}} selecteren", "fee.tier.recommended": "Aanbevolen", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Andere kostenniveaus zoeken of aanmaken", "fee.tier.search.short": "Niveaus zoeken", "fee.tier.select": "Vergoedingsniveau selecteren", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Verkopen met", "fiatOffRamp.connection.quote": "{{amount}} ter waarde van {{currencySymbol}} verkopen", "fiatOffRamp.error.balance": "Overschrijdt saldo", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Ga terug", "fiatOffRamp.unsupportedToken.divider": "Niet-ondersteunde tokens", "fiatOffRamp.unsupportedToken.message": "Deze token wordt niet ondersteund om te verkopen. Swap deze asset naar een van de ondersteunde tokens.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Beheer {{quoteSymbol}}/{{baseSymbol}} poolliquiditeit op Uniswap", "liquidityPool.positions.page.version.description": "Bekijk je actieve liquiditeitsposities van {{version}}. Voeg nieuwe posities toe.", "liquidityPool.positions.page.version.title": "Beheer de liquiditeit van de pool in {{version}} op Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} voor {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Toegestaan", "migrate.allowLpMigration": "LP-token migratie toestaan", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Met Permit2 kunnen tokengoedkeuringen worden gedeeld en beheerd tussen verschillende applicaties.", "pool.activePositions.appear": "Je actieve V3-liquiditeitsposities verschijnen hier.", "pool.activeRange": "Actief tick-bereik", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Voeg liquiditeit aan {{tokenPair}} ({{chain}}) toe op Uniswap", "pool.addMoreLiquidity": "Voeg meer liquiditeit toe", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/Totale waarde vergrendeld (TVL)", "pool.volume.thirtyDay": "30-daags volume", "pool.volume.thirtyDay.short": "30-d vol", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Je V2-liquiditeit", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Unwrappen", "swap.button.wrap": "Wrappen", "swap.buy.countryModal.placeholder": "Zoeken op land of regio", - "swap.cancel.cannotExecute": "Je swap kan worden uitgevoerd voordat de annulering is verwerkt. Je netwerkkosten kunnen niet worden terugbetaald. Wil je doorgaan?", - "swap.cancel.cannotExecute.plural": "Je swaps kunnen worden uitgevoerd voordat de annulering is verwerkt. Je netwerkkosten kunnen niet worden terugbetaald. Wil je doorgaan?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Limiet bevestigen", "swap.confirmSwap": "Swap bevestigen", "swap.deadline.settings.title": "Transactiedeadline", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}}-vergoeding", "swap.details.feeOnTransfer.default": "Tokenvergoeding", "swap.details.newQuote.input": "Nieuwe invoer", @@ -1841,7 +1850,9 @@ "swap.review": "Swap controleren", "swap.review.summary": "Je bent aan het swappen", "swap.reviewLimit": "Limiet controleren", - "swap.route.optimizedGasCost": "Deze route optimaliseert je totale output door rekening te houden met gesplitste routes, meerdere hops en de gasprijs van elke stap.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Met swapbescherming ingeschakeld, worden je Ethereum-transacties beschermd tegen sandwichaanvallen, met verminderde kans op mislukkingen.", "swap.settings.protection.subtitle.supported": "{{chainName}}-netwerk", "swap.settings.protection.subtitle.unavailable": "Niet beschikbaar op {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3-pools", "swap.settings.routingPreference.option.v4.title": "v4-pools", "swap.settings.routingPreference.title": "Trade-opties", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Automatisch", "swap.settings.slippage.description": "Je transactie wordt teruggedraaid als de prijs meer verandert dan het slippage-percentage.", "swap.settings.slippage.input.message": "Als de prijs nog verder verschuift, wordt je transactie teruggedraaid. Hieronder vind je het minimumbedrag dat je gegarandeerd ontvangt.", "swap.settings.slippage.input.receive.title": "Minstens ontvangen:", "swap.settings.slippage.output.message": "Als de prijs verder verschuift, wordt je transactie geannuleerd. Hieronder staat het maximale bedrag dat je zou moeten uitgeven.", "swap.settings.slippage.output.spend.title": "Besteed maximaal", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Voer een waarde in die kleiner is dan {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Slippage kan groter zijn dan nodig", "swap.settings.slippage.warning.min": "Voer een waarde in die groter is dan 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Van", "transaction.details.networkFee": "Netwerkkosten", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Tarief", "transaction.details.transaction": "Transactie", "transaction.details.uniswapFee": "Kosten ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Bezig met herroepen", "transaction.status.revoke.success": "Herroepen", "transaction.status.revoke.successDapp": "Herroepen op {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Verkoop geannuleerd", "transaction.status.sell.canceling": "Bezig verkoop te annuleren", "transaction.status.sell.failed": "Kon niet verkopen", diff --git a/packages/uniswap/src/i18n/locales/translations/no-NO.json b/packages/uniswap/src/i18n/locales/translations/no-NO.json index 2e19ef8609c..05a22eb74fe 100644 --- a/packages/uniswap/src/i18n/locales/translations/no-NO.json +++ b/packages/uniswap/src/i18n/locales/translations/no-NO.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likviditet fjernet", "common.loading": "Laster", "common.loadingAllowance": "Lastegodtgjørelse", + "common.loadMore": "Last inn mer", "common.longText.button.less": "Les mindre", "common.longText.button.more": "Les mer", "common.lowPrice": "Lav pris", @@ -540,8 +541,8 @@ "common.resetLimit": "Tilbakestill {{symbol}} grensen", "common.resetLimitWallet": "Tilbakestill {{symbol}} grensen i lommeboken", "common.resettingLimit": "Tilbakestiller {{symbol}} grensen...", - "common.resolveIssue": "Løs problemet", - "common.resolveIssues": "Løs {{issues}} problemer", + "common.resolveIssues_one": "Løs problemet", + "common.resolveIssues_other": "Løs {{count}} problemer", "common.restricted.region": "Begrenset region", "common.return.label": "Komme tilbake", "common.returnToTop": "Gå tilbake til toppen", @@ -602,21 +603,25 @@ "common.thisWeek": "Denne uka", "common.thisYear": "I år", "common.time": "Tid", - "common.time.day": "dag", "common.time.days": "dager", - "common.time.hour": "time", + "common.time.days_one": "dag", + "common.time.days_other": "dager", "common.time.hours": "timer", + "common.time.hours_one": "time", + "common.time.hours_other": "timer", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minutter", - "common.time.month": "måned", "common.time.months": "måneder", + "common.time.months_one": "måned", + "common.time.months_other": "måneder", "common.time.past.days": "{{days}}d siden", "common.time.past.hours": "{{hours}}t siden", "common.time.past.minutes": "{{minutes}}m siden", "common.time.past.months": "{{months}}måned siden", "common.time.past.seconds": "{{seconds}}s siden", - "common.time.week": "uke", "common.time.weeks": "uker", + "common.time.weeks_one": "uke", + "common.time.weeks_other": "uker", "common.tip.label": "Tips:", "common.to": "til", "common.today": "I dag", @@ -634,8 +639,8 @@ "common.transactions": "Transaksjoner", "common.transactionSettings": "Transaksjonsinnstillinger", "common.transactionSubmitted": "Transaksjonen er sendt inn", - "common.transfer": "overføre", - "common.transfers": "overføringer", + "common.transfer_one": "overføre", + "common.transfer_other": "overføringer", "common.tryAgain.error": "Prøv igjen", "common.twitter": "Twitter", "common.type.label": "Type", @@ -856,6 +861,7 @@ "fee.tier.new": "Nytt nivå", "fee.tier.percent.select": "{{percentage}} velg", "fee.tier.recommended": "Anbefalt", + "fee.tier.recommended.description": "Anbefalt basert på å ha den høyeste andelen likviditet for det valgte token-paret.", "fee.tier.search": "Søk eller opprett andre gebyrnivåer", "fee.tier.search.short": "Søk i nivåer", "fee.tier.select": "Velg gebyrnivå", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Selg med", "fiatOffRamp.connection.quote": "Selger {{amount}} verdt {{currencySymbol}}", "fiatOffRamp.error.balance": "Overskrider balansen", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Gå tilbake", "fiatOffRamp.unsupportedToken.divider": "Ikke-støttede tokens", "fiatOffRamp.unsupportedToken.message": "Dette tokenet støttes ikke for salg. Bytt denne ressursen til en av de støttede tokenene.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Administrer {{quoteSymbol}}/{{baseSymbol}} pool likviditet på Uniswap", "liquidityPool.positions.page.version.description": "Se dine aktive {{version}} likviditetsposisjoner. Legg til nye stillinger.", "liquidityPool.positions.page.version.title": "Administrer poollikviditet{{version}} på Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Tillatt", "migrate.allowLpMigration": "Tillat migrering av LP-token", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 lar token-godkjenninger deles og administreres på tvers av forskjellige applikasjoner.", "pool.activePositions.appear": "Dine aktive V3-likviditetsposisjoner vil vises her.", "pool.activeRange": "Aktivt flåttområde", + "pool.addAs": "Legg til som {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Legg til likviditet til {{tokenPair}} ({{chain}}) på Uniswap", "pool.addMoreLiquidity": "Legg til mer likviditet", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 dagers volum", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Trekk tilbake som {{nativeWrappedSymbol}}", "pool.yourv2": "Din V2-likviditet", "poolFinder.availablePools": "Tilgjengelige bassenger", "poolFinder.availablePools.found.description": "v2-puljer som matcher parvalget ditt.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Pakk ut", "swap.button.wrap": "Pakke inn", "swap.buy.countryModal.placeholder": "Søk etter land eller region", - "swap.cancel.cannotExecute": "Byttet ditt kan utføres før kanselleringen er behandlet. Nettverkskostnadene dine kan ikke refunderes. Ønsker du å fortsette?", - "swap.cancel.cannotExecute.plural": "Byttene dine kan utføres før kanselleringen er behandlet. Nettverkskostnadene dine kan ikke refunderes. Ønsker du å fortsette?", + "swap.cancel.cannotExecute_one": "Byttet ditt kan utføres før kanselleringen er behandlet. Nettverkskostnadene dine kan ikke refunderes. Ønsker du å fortsette?", + "swap.cancel.cannotExecute_other": "Byttene dine kan utføres før kanselleringen er behandlet. Nettverkskostnadene dine kan ikke refunderes. Ønsker du å fortsette?", "swap.confirmLimit": "Bekreft grense", "swap.confirmSwap": "Bekreft bytte", "swap.deadline.settings.title": "Transaksjonsfrist", + "swap.deadline.settings.title.short": "Tx. frist", "swap.details.feeOnTransfer": "{{tokenSymbol}} gebyr", "swap.details.feeOnTransfer.default": "Tokenavgift", "swap.details.newQuote.input": "Nytt innspill", @@ -1841,7 +1850,9 @@ "swap.review": "Anmeldelsesbytte", "swap.review.summary": "Du bytter", "swap.reviewLimit": "Gjennomgangsgrense", - "swap.route.optimizedGasCost": "Denne ruten optimaliserer din totale produksjon ved å vurdere delte ruter, flere hopp og gasskostnadene for hvert trinn.", + "swap.route.optimizedGasCost": "Denne ruten optimerer din totale produksjon ved å vurdere delte ruter, flere hopp og nettverkskostnadene for hvert trinn.", + "swap.settings.deadline.tooltip": "Transaksjonen din vil gå tilbake hvis den venter i mer enn denne perioden. (Maksimalt: 3 dager).", + "swap.settings.deadline.warning": "Høy frist", "swap.settings.protection.description": "Med byttebeskyttelse på, vil dine Ethereum-transaksjoner være beskyttet mot sandwich-angrep, med reduserte sjanser for å mislykkes.", "swap.settings.protection.subtitle.supported": "{{chainName}} Nettverk", "swap.settings.protection.subtitle.unavailable": "Ikke tilgjengelig på {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 bassenger", "swap.settings.routingPreference.option.v4.title": "v4 bassenger", "swap.settings.routingPreference.title": "Handel med alternativer", + "swap.settings.slippage.alert": "Høy glidning", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Transaksjonen din vil gå tilbake hvis prisen endres mer enn glidningsprosenten.", "swap.settings.slippage.input.message": "Hvis prisen faller ytterligere, vil transaksjonen gå tilbake. Nedenfor er minimumsbeløpet du er garantert å motta.", "swap.settings.slippage.input.receive.title": "Motta i det minste", "swap.settings.slippage.output.message": "Hvis prisen faller ytterligere, vil transaksjonen gå tilbake. Nedenfor er det maksimale beløpet du trenger å bruke.", "swap.settings.slippage.output.spend.title": "Bruk på det meste", + "swap.settings.slippage.warning": "Svært høy utglidning", + "swap.settings.slippage.warning.description": "Slipp over 20 % vil sannsynligvis føre til en ugunstig handel. Senk innstillingene dine for å redusere risikoen for frontkjøring.", + "swap.settings.slippage.warning.hover": "Dette kan føre til en ugunstig handel. Prøv å senke utglidningsinnstillingen.", "swap.settings.slippage.warning.max": "Skriv inn en verdi mindre enn {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Utglidningen kan være høyere enn nødvendig", "swap.settings.slippage.warning.min": "Skriv inn en verdi større enn 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Fra", "transaction.details.networkFee": "Nettverkskostnad", + "transaction.details.providerFee": "Leverandøravgift", "transaction.details.swapRate": "Vurdere", "transaction.details.transaction": "Transaksjon", "transaction.details.uniswapFee": "Gebyr ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Opphever", "transaction.status.revoke.success": "Opphevet", "transaction.status.revoke.successDapp": "Opphevet {{externalDappName}}", + "transaction.status.sale.canceled": "Kansellert salg", + "transaction.status.sale.canceling": "Avbryter salg", + "transaction.status.sale.failedOn": "Salg mislyktes via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selges via {{serviceProvider}}", + "transaction.status.sale.successOn": "Selges via {{serviceProvider}}", "transaction.status.sell.canceled": "Kansellert salg", "transaction.status.sell.canceling": "Kansellerer salg", "transaction.status.sell.failed": "Kunne ikke selge", diff --git a/packages/uniswap/src/i18n/locales/translations/pl-PL.json b/packages/uniswap/src/i18n/locales/translations/pl-PL.json index aebaebc7b54..b056c159692 100644 --- a/packages/uniswap/src/i18n/locales/translations/pl-PL.json +++ b/packages/uniswap/src/i18n/locales/translations/pl-PL.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Usunięto płynność", "common.loading": "Ładowanie", "common.loadingAllowance": "Dodatek załadunkowy", + "common.loadMore": "Załaduj więcej", "common.longText.button.less": "Mniej czytać", "common.longText.button.more": "Czytaj więcej", "common.lowPrice": "Niska cena", @@ -540,8 +541,8 @@ "common.resetLimit": "Zresetuj limit {{symbol}}", "common.resetLimitWallet": "Zresetuj limit {{symbol}} w portfelu", "common.resettingLimit": "Resetuję limit {{symbol}} ...", - "common.resolveIssue": "Rozwiąż problem", - "common.resolveIssues": "Rozwiąż {{issues}} problemy", + "common.resolveIssues_one": "Rozwiąż problem", + "common.resolveIssues_other": "Rozwiąż {{count}} problemów", "common.restricted.region": "Region ograniczony", "common.return.label": "Powrót", "common.returnToTop": "Wróć na górę", @@ -602,21 +603,25 @@ "common.thisWeek": "W tym tygodniu", "common.thisYear": "W tym roku", "common.time": "Czas", - "common.time.day": "dzień", "common.time.days": "dni", - "common.time.hour": "godzina", + "common.time.days_one": "dzień", + "common.time.days_other": "dni", "common.time.hours": "godziny", + "common.time.hours_one": "godzina", + "common.time.hours_other": "godziny", "common.time.minute.amt": "{{time}}miesiąc", "common.time.minutes": "minuty", - "common.time.month": "miesiąc", "common.time.months": "miesiące", + "common.time.months_one": "miesiąc", + "common.time.months_other": "miesiące", "common.time.past.days": "{{days}}d temu", "common.time.past.hours": "{{hours}}godz. temu", "common.time.past.minutes": "{{minutes}}m temu", "common.time.past.months": "{{months}}miesiąc temu", "common.time.past.seconds": "{{seconds}}temu", - "common.time.week": "tydzień", "common.time.weeks": "tygodnie", + "common.time.weeks_one": "tydzień", + "common.time.weeks_other": "tygodnie", "common.tip.label": "Wskazówka:", "common.to": "do", "common.today": "Dzisiaj", @@ -634,8 +639,8 @@ "common.transactions": "Transakcje", "common.transactionSettings": "Ustawienia transakcji", "common.transactionSubmitted": "Transakcja przesłana", - "common.transfer": "przenosić", - "common.transfers": "transfery", + "common.transfer_one": "przenosić", + "common.transfer_other": "transfery", "common.tryAgain.error": "Spróbuj ponownie", "common.twitter": "Świergot", "common.type.label": "Typ", @@ -856,6 +861,7 @@ "fee.tier.new": "Nowy poziom", "fee.tier.percent.select": "{{percentage}} wybierz", "fee.tier.recommended": "Zalecony", + "fee.tier.recommended.description": "Polecane na podstawie najwyższego udziału płynności dla wybranej pary tokenów.", "fee.tier.search": "Wyszukaj lub utwórz inne poziomy opłat", "fee.tier.search.short": "Wyszukaj poziomy", "fee.tier.select": "Wybierz poziom opłat", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Sprzedaj z", "fiatOffRamp.connection.quote": "Sprzedaję {{amount}} o wartości {{currencySymbol}}", "fiatOffRamp.error.balance": "Przekracza równowagę", + "fiatOffRamp.summary.total": "{{cryptoAmount}} dla {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Wróć", "fiatOffRamp.unsupportedToken.divider": "Nieobsługiwane tokeny", "fiatOffRamp.unsupportedToken.message": "Ten token nie jest obsługiwany do sprzedaży. Zamień ten zasób na jeden z obsługiwanych tokenów.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Zarządzaj {{quoteSymbol}}/{{baseSymbol}} płynnością puli na Uniswap", "liquidityPool.positions.page.version.description": "Wyświetl swoje aktywne pozycje płynności {{version}} . Dodaj nowe pozycje.", "liquidityPool.positions.page.version.title": "Zarządzaj płynnością puli{{version}} na Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} na {{outputToken}}", "liquidityPool.positions.price.formatted": " na ", "migrate.allowed": "Dozwolony", "migrate.allowLpMigration": "Zezwalaj na migrację tokenów LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 umożliwia udostępnianie zatwierdzeń tokenów i zarządzanie nimi w różnych aplikacjach.", "pool.activePositions.appear": "Tutaj pojawią się Twoje aktywne pozycje płynnościowe V3.", "pool.activeRange": "Aktywny zakres zaznaczeń", + "pool.addAs": "Dodaj jako {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Dodaj płynność do {{tokenPair}} ({{chain}}) na Uniswap", "pool.addMoreLiquidity": "Dodaj więcej płynności", "pool.apr": "KWIECIEŃ", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D objętość/TVL", "pool.volume.thirtyDay": "30-dniowy wolumen", "pool.volume.thirtyDay.short": "30D tom", + "pool.withdrawAs": "Wypłać jako {{nativeWrappedSymbol}}", "pool.yourv2": "Twoja płynność V2", "poolFinder.availablePools": "Dostępne baseny", "poolFinder.availablePools.found.description": "Pule v2 odpowiadające wybranemu przez Ciebie wyborowi par.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Odwijać się", "swap.button.wrap": "Zawinąć", "swap.buy.countryModal.placeholder": "Szukaj według kraju lub regionu", - "swap.cancel.cannotExecute": "Twoja zamiana może zostać wykonana przed przetworzeniem anulowania. Koszty Twojej sieci nie podlegają zwrotowi. Czy chcesz kontynuować?", - "swap.cancel.cannotExecute.plural": "Twoje swapy mogą zostać zrealizowane przed przetworzeniem anulowania. Koszty Twojej sieci nie podlegają zwrotowi. Czy chcesz kontynuować?", + "swap.cancel.cannotExecute_one": "Twoja zamiana może zostać wykonana przed przetworzeniem anulowania. Koszty Twojej sieci nie podlegają zwrotowi. Czy chcesz kontynuować?", + "swap.cancel.cannotExecute_other": "Twoje swapy mogą zostać zrealizowane przed przetworzeniem anulowania. Koszty Twojej sieci nie podlegają zwrotowi. Czy chcesz kontynuować?", "swap.confirmLimit": "Potwierdź limit", "swap.confirmSwap": "Potwierdź zamianę", "swap.deadline.settings.title": "Termin transakcji", + "swap.deadline.settings.title.short": "Termin Tx.", "swap.details.feeOnTransfer": "{{tokenSymbol}} opłata", "swap.details.feeOnTransfer.default": "Opłata za token", "swap.details.newQuote.input": "Nowe wejście", @@ -1841,7 +1850,9 @@ "swap.review": "Przejrzyj wymianę", "swap.review.summary": "Zamieniasz się", "swap.reviewLimit": "Limit przeglądu", - "swap.route.optimizedGasCost": "Ta trasa optymalizuje całkowitą wydajność, biorąc pod uwagę podzielone trasy, wiele przeskoków i koszt paliwa na każdym etapie.", + "swap.route.optimizedGasCost": "Ta trasa optymalizuje całkowitą wydajność poprzez uwzględnienie tras podzielonych, wielu przeskoków i kosztów sieciowych każdego etapu.", + "swap.settings.deadline.tooltip": "Twoja transakcja zostanie cofnięta, jeśli będzie oczekiwała na realizację przez okres dłuższy niż ten. (Maksymalnie: 3 dni).", + "swap.settings.deadline.warning": "Wysoki termin", "swap.settings.protection.description": "Po włączeniu ochrony swap Twoje transakcje Ethereum będą chronione przed atakami typu „sandwich”, przy zmniejszonym ryzyku niepowodzenia.", "swap.settings.protection.subtitle.supported": "{{chainName}} Sieć", "swap.settings.protection.subtitle.unavailable": "Niedostępne w {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "baseny v3", "swap.settings.routingPreference.option.v4.title": "pule v4", "swap.settings.routingPreference.title": "Opcje handlu", + "swap.settings.slippage.alert": "Duży poślizg", "swap.settings.slippage.control.auto": "Automatyczny", "swap.settings.slippage.description": "Twoja transakcja zostanie cofnięta, jeśli cena zmieni się bardziej niż procent poślizgu.", "swap.settings.slippage.input.message": "Jeżeli cena spadnie jeszcze bardziej, transakcja zostanie cofnięta. Poniżej znajduje się minimalna kwota, którą masz gwarancję otrzymania.", "swap.settings.slippage.input.receive.title": "Odbierz przynajmniej", "swap.settings.slippage.output.message": "Jeżeli cena spadnie jeszcze bardziej, transakcja zostanie cofnięta. Poniżej znajduje się maksymalna kwota, jaką musisz wydać.", "swap.settings.slippage.output.spend.title": "Wydaj co najwyżej", + "swap.settings.slippage.warning": "Bardzo duży poślizg", + "swap.settings.slippage.warning.description": "Poślizg powyżej 20% prawdopodobnie spowoduje niekorzystną transakcję. Aby zmniejszyć ryzyko bycia front-run, obniż swoje ustawienia.", + "swap.settings.slippage.warning.hover": "Może to skutkować niekorzystną transakcją. Spróbuj obniżyć ustawienie poślizgu.", "swap.settings.slippage.warning.max": "Wprowadź wartość mniejszą niż {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Poślizg może być większy niż jest to konieczne", "swap.settings.slippage.warning.min": "Wprowadź wartość większą niż 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Aplikacja", "transaction.details.from": "Z", "transaction.details.networkFee": "Koszt sieci", + "transaction.details.providerFee": "Opłata dostawcy", "transaction.details.swapRate": "Wskaźnik", "transaction.details.transaction": "Transakcja", "transaction.details.uniswapFee": "Opłata ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Odwołanie", "transaction.status.revoke.success": "Odwołany", "transaction.status.revoke.successDapp": "Unieważniono {{externalDappName}}", + "transaction.status.sale.canceled": "Anulowana sprzedaż", + "transaction.status.sale.canceling": "Anulowanie sprzedaży", + "transaction.status.sale.failedOn": "Sprzedaż nie powiodła się przez {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Sprzedaję przez {{serviceProvider}}", + "transaction.status.sale.successOn": "Sprzedano przez {{serviceProvider}}", "transaction.status.sell.canceled": "Anulowano sprzedaż", "transaction.status.sell.canceling": "Anulowanie sprzedaży", "transaction.status.sell.failed": "Nie udało się sprzedać", diff --git a/packages/uniswap/src/i18n/locales/translations/pt-PT.json b/packages/uniswap/src/i18n/locales/translations/pt-PT.json index c9358dae4db..34e4f095a2e 100644 --- a/packages/uniswap/src/i18n/locales/translations/pt-PT.json +++ b/packages/uniswap/src/i18n/locales/translations/pt-PT.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Liquidez removida", "common.loading": "Carregando", "common.loadingAllowance": "Carregamento autorizado", + "common.loadMore": "Load more", "common.longText.button.less": "Ler menos", "common.longText.button.more": "Ler mais", "common.lowPrice": "Preço baixo", @@ -540,8 +541,8 @@ "common.resetLimit": "Redefinir limite de {{symbol}}", "common.resetLimitWallet": "Redefinir limite de {{symbol}} na carteira", "common.resettingLimit": "Redefinindo limite de {{symbol}}...", - "common.resolveIssue": "Resolver problema", - "common.resolveIssues": "Resolver problemas de {{issues}}", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Região restrita", "common.return.label": "Voltar", "common.returnToTop": "Voltar ao início", @@ -602,21 +603,25 @@ "common.thisWeek": "Esta semana", "common.thisYear": "Este ano", "common.time": "Horário", - "common.time.day": "dia", "common.time.days": "dias", - "common.time.hour": "hora", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "horas", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} min", "common.time.minutes": "minutos", - "common.time.month": "mês", "common.time.months": "meses", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} dias atrás", "common.time.past.hours": "{{hours}} h atrás", "common.time.past.minutes": "{{minutes}} min atrás", "common.time.past.months": "{{months}} meses atrás", "common.time.past.seconds": "{{seconds}} s atrás", - "common.time.week": "semana", "common.time.weeks": "semanas", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Dica:", "common.to": "para", "common.today": "Hoje", @@ -634,8 +639,8 @@ "common.transactions": "Transações", "common.transactionSettings": "Configurações da transação", "common.transactionSubmitted": "Transação enviada", - "common.transfer": "transferência", - "common.transfers": "transferências", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Tentar novamente", "common.twitter": "Twitter", "common.type.label": "Tipo", @@ -856,6 +861,7 @@ "fee.tier.new": "Novo nível", "fee.tier.percent.select": "Seleção de {{percentage}}", "fee.tier.recommended": "Recomendado", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Buscar ou criar outros níveis de tarifas", "fee.tier.search.short": "Procurar níveis", "fee.tier.select": "Selecionar nível de tarifas", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Vender com", "fiatOffRamp.connection.quote": "Vendendo {{amount}} em {{currencySymbol}}", "fiatOffRamp.error.balance": "Excede o saldo", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Voltar", "fiatOffRamp.unsupportedToken.divider": "Tokens sem suporte", "fiatOffRamp.unsupportedToken.message": "Não há suporte para a venda deste token. Troque este ativo por um dos tokens com suporte.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Gerenciar liquidez do pool {{quoteSymbol}}/{{baseSymbol}} na Uniswap", "liquidityPool.positions.page.version.description": "Visualize suas posições de liquidez {{version}} ativas. Adicione novas posições.", "liquidityPool.positions.page.version.title": "Gerenciar liquidez do pool {{version}} na Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} por {{outputToken}}", "liquidityPool.positions.price.formatted": " por ", "migrate.allowed": "Permitido", "migrate.allowLpMigration": "Permitir migração de tokens do PL", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "O Permit2 permite o compartilhamento e o gerenciamento de aprovações de tokens em diferentes aplicativos.", "pool.activePositions.appear": "Suas posições de liquidez do V3 ativas aparecerão aqui.", "pool.activeRange": "Intervalo de variação ativo", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Adicione liquidez a {{tokenPair}} ({{chain}}) na Uniswap", "pool.addMoreLiquidity": "Adicione mais liquidez", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "Vol. de 1 dia/TVL", "pool.volume.thirtyDay": "Volume de 30 dias", "pool.volume.thirtyDay.short": "Vol. 30 d", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Sua liquidez V2", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Fazer unwrap", "swap.button.wrap": "Fazer wrap", "swap.buy.countryModal.placeholder": "Pesquisar por país ou região", - "swap.cancel.cannotExecute": "Sua troca pode ser executada antes de processar o cancelamento. Não será possível reembolsar suas taxas de rede. Deseja continuar?", - "swap.cancel.cannotExecute.plural": "Suas trocas podem ser executadas antes de processar o cancelamento. Não será possível reembolsar suas taxas de rede. Deseja continuar?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Confirmar ordem-limite", "swap.confirmSwap": "Confirmar troca", "swap.deadline.settings.title": "Prazo da transação", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "Tarifa de {{tokenSymbol}}", "swap.details.feeOnTransfer.default": "Tarifa do token", "swap.details.newQuote.input": "Nova entrada", @@ -1841,7 +1850,9 @@ "swap.review": "Analisar troca", "swap.review.summary": "Você está trocando", "swap.reviewLimit": "Revisar ordem-limite", - "swap.route.optimizedGasCost": "Esta rota otimiza o total da sua saída considerando rotas divididas, vários saltos e o custo do gas de cada etapa.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Com a proteção de troca ativada, suas transações de Ethereum estarão protegidas contra ataques de sandwich, com menos chances de falha.", "swap.settings.protection.subtitle.supported": "Rede {{chainName}}", "swap.settings.protection.subtitle.unavailable": "Não disponível em {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Pools v3", "swap.settings.routingPreference.option.v4.title": "Pools v4", "swap.settings.routingPreference.title": "Opções de negociação", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Automático", "swap.settings.slippage.description": "Sua transação será revertida se o preço mudar mais do que a porcentagem de derrapagem.", "swap.settings.slippage.input.message": "Se ocorrer ainda mais movimentação no preço, sua transação será revertida. Abaixo está o valor mínimo garantido que você pode receber.", "swap.settings.slippage.input.receive.title": "Receber no mínimo", "swap.settings.slippage.output.message": "Se ocorrer ainda mais movimentação no preço, sua transação será revertida. Abaixo está o valor máximo que você precisaria gastar.", "swap.settings.slippage.output.spend.title": "Gastar no máximo", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Digite um valor menor que {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "A derrapagem pode ser maior que o necessário", "swap.settings.slippage.warning.min": "Digite um valor maior que 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Aplicativo", "transaction.details.from": "De", "transaction.details.networkFee": "Taxa de rede", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Taxa", "transaction.details.transaction": "Transação", "transaction.details.uniswapFee": "Tarifa ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Revogando", "transaction.status.revoke.success": "Revogada", "transaction.status.revoke.successDapp": "Revogada em {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Venda cancelada", "transaction.status.sell.canceling": "Cancelando venda", "transaction.status.sell.failed": "Falha ao vender", diff --git a/packages/uniswap/src/i18n/locales/translations/ro-RO.json b/packages/uniswap/src/i18n/locales/translations/ro-RO.json index e922ceef8d7..6ecb1ee7076 100644 --- a/packages/uniswap/src/i18n/locales/translations/ro-RO.json +++ b/packages/uniswap/src/i18n/locales/translations/ro-RO.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Lichiditatea eliminată", "common.loading": "Se încarcă", "common.loadingAllowance": "Indemnizație de încărcare", + "common.loadMore": "Încărcați mai multe", "common.longText.button.less": "Citiți mai puțin", "common.longText.button.more": "Citeşte mai mult", "common.lowPrice": "Preț scăzut", @@ -540,8 +541,8 @@ "common.resetLimit": "Resetați limita {{symbol}}", "common.resetLimitWallet": "Resetați limita de {{symbol}} în portofel", "common.resettingLimit": "Se resetează limita {{symbol}} ...", - "common.resolveIssue": "Rezolvați problema", - "common.resolveIssues": "Rezolvați problemele {{issues}}", + "common.resolveIssues_one": "Rezolvați problema", + "common.resolveIssues_other": "Rezolvați problemele {{count}}", "common.restricted.region": "Regiunea restrânsă", "common.return.label": "Întoarcere", "common.returnToTop": "Înapoi sus", @@ -602,21 +603,25 @@ "common.thisWeek": "În această săptămână", "common.thisYear": "Anul acesta", "common.time": "Timp", - "common.time.day": "zi", "common.time.days": "zile", - "common.time.hour": "ora", + "common.time.days_one": "zi", + "common.time.days_other": "zile", "common.time.hours": "ore", + "common.time.hours_one": "ora", + "common.time.hours_other": "ore", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minute", - "common.time.month": "lună", "common.time.months": "luni", + "common.time.months_one": "lună", + "common.time.months_other": "luni", "common.time.past.days": "acum {{days}}zi", "common.time.past.hours": "{{hours}}h în urmă", "common.time.past.minutes": "{{minutes}}m în urmă", "common.time.past.months": "{{months}}lună în urmă", "common.time.past.seconds": "{{seconds}}acum", - "common.time.week": "săptămână", "common.time.weeks": "săptămâni", + "common.time.weeks_one": "săptămână", + "common.time.weeks_other": "săptămâni", "common.tip.label": "Bacsis:", "common.to": "la", "common.today": "Astăzi", @@ -634,8 +639,8 @@ "common.transactions": "Tranzacții", "common.transactionSettings": "Setări de tranzacție", "common.transactionSubmitted": "Tranzacție trimisă", - "common.transfer": "transfer", - "common.transfers": "transferuri", + "common.transfer_one": "transfer", + "common.transfer_other": "transferuri", "common.tryAgain.error": "Încearcă din nou", "common.twitter": "Stare de nervozitate", "common.type.label": "Tip", @@ -856,6 +861,7 @@ "fee.tier.new": "Nivel nou", "fee.tier.percent.select": "{{percentage}} selectează", "fee.tier.recommended": "Recomandat", + "fee.tier.recommended.description": "Recomandat pe baza faptului că are cea mai mare cotă de lichiditate pentru perechea de jetoane selectată.", "fee.tier.search": "Căutați sau creați alte niveluri de taxe", "fee.tier.search.short": "Căutare niveluri", "fee.tier.select": "Selectați nivelul de taxă", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Vinde cu", "fiatOffRamp.connection.quote": "Vând {{amount}} în valoare de {{currencySymbol}}", "fiatOffRamp.error.balance": "Depășește echilibrul", + "fiatOffRamp.summary.total": "{{cryptoAmount}} pentru {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Întoarce-te", "fiatOffRamp.unsupportedToken.divider": "Jetoane neacceptate", "fiatOffRamp.unsupportedToken.message": "Acest token nu este acceptat pentru vânzare. Schimbați acest activ cu unul dintre jetoanele acceptate.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Gestionați lichiditatea pool-ului de {{quoteSymbol}}/{{baseSymbol}} pe Uniswap", "liquidityPool.positions.page.version.description": "Vedeți pozițiile dvs. active de lichiditate {{version}} . Adăugați noi poziții.", "liquidityPool.positions.page.version.title": "Gestionați lichiditatea poolului{{version}} pe Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} pe {{outputToken}}", "liquidityPool.positions.price.formatted": " pe ", "migrate.allowed": "Permis", "migrate.allowLpMigration": "Permite migrarea jetonului LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permisul2 permite aprobările jetonelor să fie partajate și gestionate în diferite aplicații.", "pool.activePositions.appear": "Pozițiile dvs. active de lichiditate V3 vor apărea aici.", "pool.activeRange": "Interval de bifă activ", + "pool.addAs": "Adăugați ca {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Adăugați lichiditate la {{tokenPair}} ({{chain}}) pe Uniswap", "pool.addMoreLiquidity": "Adăugați mai multă lichiditate", "pool.apr": "APRILIE", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "Volum de 30 de zile", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Retrageți ca {{nativeWrappedSymbol}}", "pool.yourv2": "Lichiditatea dvs. V2", "poolFinder.availablePools": "Piscine disponibile", "poolFinder.availablePools.found.description": "v2 pool-uri care se potrivesc cu selecția dvs. de pereche.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Desfaceți", "swap.button.wrap": "Înfășurați", "swap.buy.countryModal.placeholder": "Căutați după țară sau regiune", - "swap.cancel.cannotExecute": "Schimbul dvs. se poate executa înainte ca anularea să fie procesată. Costurile de rețea nu pot fi rambursate. Doresti sa continui?", - "swap.cancel.cannotExecute.plural": "Schimburile dvs. se pot executa înainte ca anularea să fie procesată. Costurile de rețea nu pot fi rambursate. Doresti sa continui?", + "swap.cancel.cannotExecute_one": "Schimbul dvs. se poate executa înainte ca anularea să fie procesată. Costurile de rețea nu pot fi rambursate. Doresti sa continui?", + "swap.cancel.cannotExecute_other": "Schimburile dvs. se pot executa înainte ca anularea să fie procesată. Costurile de rețea nu pot fi rambursate. Doresti sa continui?", "swap.confirmLimit": "Confirmați limita", "swap.confirmSwap": "Confirmați schimbul", "swap.deadline.settings.title": "Termenul limită pentru tranzacție", + "swap.deadline.settings.title.short": "Tx. Termen limită", "swap.details.feeOnTransfer": "{{tokenSymbol}} taxă", "swap.details.feeOnTransfer.default": "Taxa de simbol", "swap.details.newQuote.input": "Intrare nouă", @@ -1841,7 +1850,9 @@ "swap.review": "Schimb de recenzii", "swap.review.summary": "Schimbați", "swap.reviewLimit": "Limita de revizuire", - "swap.route.optimizedGasCost": "Această rută vă optimizează producția totală, luând în considerare rutele împărțite, mai multe salturi și costul gazului pentru fiecare pas.", + "swap.route.optimizedGasCost": "Această rută vă optimizează producția totală, luând în considerare rutele împărțite, salturile multiple și costurile de rețea ale fiecărui pas.", + "swap.settings.deadline.tooltip": "Tranzacția dvs. va reveni dacă este în așteptare mai mult de această perioadă de timp. (Maximum: 3 zile).", + "swap.settings.deadline.warning": "Termen mare", "swap.settings.protection.description": "Cu protecția swap activată, tranzacțiile dvs. Ethereum vor fi protejate de atacurile tip sandwich, cu șanse reduse de eșec.", "swap.settings.protection.subtitle.supported": "{{chainName}} Rețea", "swap.settings.protection.subtitle.unavailable": "Nu este disponibil pe {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "piscine v3", "swap.settings.routingPreference.option.v4.title": "piscine v4", "swap.settings.routingPreference.title": "Opțiuni comerciale", + "swap.settings.slippage.alert": "Alunecare mare", "swap.settings.slippage.control.auto": "Auto", "swap.settings.slippage.description": "Tranzacția dvs. va reveni dacă prețul se modifică mai mult decât procentul de alunecare.", "swap.settings.slippage.input.message": "Dacă prețul scade și mai mult, tranzacția dvs. va reveni. Mai jos este suma minimă pe care sunteți garantat să o primiți.", "swap.settings.slippage.input.receive.title": "Primește cel puțin", "swap.settings.slippage.output.message": "Dacă prețul scade și mai mult, tranzacția dvs. va reveni. Mai jos este suma maximă pe care ar trebui să o cheltuiți.", "swap.settings.slippage.output.spend.title": "Cheltuiește cel mult", + "swap.settings.slippage.warning": "Alunecare foarte mare", + "swap.settings.slippage.warning.description": "Alunecarea peste 20% este probabil să aibă ca rezultat o tranzacție nefavorabilă. Pentru a reduce riscul de a fi în avans, reduceți setările.", + "swap.settings.slippage.warning.hover": "Acest lucru poate duce la o tranzacție nefavorabilă. Încercați să reduceți setarea de alunecare.", "swap.settings.slippage.warning.max": "Introduceți o valoare mai mică de {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Alunecarea poate fi mai mare decât este necesar", "swap.settings.slippage.warning.min": "Introduceți o valoare mai mare decât 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Din", "transaction.details.networkFee": "Costul rețelei", + "transaction.details.providerFee": "Taxa de furnizor", "transaction.details.swapRate": "Rată", "transaction.details.transaction": "Tranzacţie", "transaction.details.uniswapFee": "Comision ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Revocare", "transaction.status.revoke.success": "Revocat", "transaction.status.revoke.successDapp": "Revocat pe {{externalDappName}}", + "transaction.status.sale.canceled": "Vânzare anulată", + "transaction.status.sale.canceling": "Anularea vânzării", + "transaction.status.sale.failedOn": "Vânzarea eșuată prin {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Se vinde prin {{serviceProvider}}", + "transaction.status.sale.successOn": "Vândut prin {{serviceProvider}}", "transaction.status.sell.canceled": "Vânzare anulată", "transaction.status.sell.canceling": "Anularea vânzării", "transaction.status.sell.failed": "Nu s-a putut vinde", diff --git a/packages/uniswap/src/i18n/locales/translations/ru-RU.json b/packages/uniswap/src/i18n/locales/translations/ru-RU.json index 8c7e1ee45c7..0402b39105d 100644 --- a/packages/uniswap/src/i18n/locales/translations/ru-RU.json +++ b/packages/uniswap/src/i18n/locales/translations/ru-RU.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Ликвидность удалена", "common.loading": "Загрузка", "common.loadingAllowance": "Загрузка разрешения", + "common.loadMore": "Load more", "common.longText.button.less": "Свернуть", "common.longText.button.more": "Подробнее", "common.lowPrice": "Низкая цена", @@ -540,8 +541,8 @@ "common.resetLimit": "Сбросить ограничение {{symbol}}", "common.resetLimitWallet": "Сбросить ограничение {{symbol}} в кошельке", "common.resettingLimit": "Сброс ограничения {{symbol}}…", - "common.resolveIssue": "Решить проблему", - "common.resolveIssues": "Решить проблемы ({{issues}})", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Регион с ограничениями", "common.return.label": "Вернуться", "common.returnToTop": "Вернуться наверх", @@ -602,21 +603,25 @@ "common.thisWeek": "Эта неделя", "common.thisYear": "Этот год", "common.time": "Время", - "common.time.day": "дн.", "common.time.days": "дн.", - "common.time.hour": "ч.", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "ч.", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} мин.", "common.time.minutes": "мин.", - "common.time.month": "мес.", "common.time.months": "мес.", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} дн. назад", "common.time.past.hours": "{{hours}} ч. назад", "common.time.past.minutes": "{{minutes}} мин. назад", "common.time.past.months": "{{months}} мес. назад", "common.time.past.seconds": "{{seconds}} с. назад", - "common.time.week": "нед.", "common.time.weeks": "нед.", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Совет:", "common.to": "в", "common.today": "Сегодня", @@ -634,8 +639,8 @@ "common.transactions": "Транзакции", "common.transactionSettings": "Настройки транзакции", "common.transactionSubmitted": "Транзакция отправлена", - "common.transfer": "перевод", - "common.transfers": "переводы", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Повторить попытку", "common.twitter": "Твиттер", "common.type.label": "Тип", @@ -856,6 +861,7 @@ "fee.tier.new": "Новый уровень", "fee.tier.percent.select": "Выбрано {{percentage}}", "fee.tier.recommended": "Рекомендовано", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Поиск или создание других уровней комиссии", "fee.tier.search.short": "Поиск уровней", "fee.tier.select": "Выберите уровень комиссии", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Продажа с", "fiatOffRamp.connection.quote": "Продажа {{amount}} на сумму {{currencySymbol}}", "fiatOffRamp.error.balance": "Превышает баланс", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Вернуться", "fiatOffRamp.unsupportedToken.divider": "Неподдерживаемые токены", "fiatOffRamp.unsupportedToken.message": "Этот токен не поддерживается для продажи. Обменяйте этот актив на один из поддерживаемых токенов.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Управление ликвидностью пула {{quoteSymbol}}/{{baseSymbol}} на Uniswap", "liquidityPool.positions.page.version.description": "Просмотрите свои активные позиции ликвидности {{version}}. Добавьте новые позиции.", "liquidityPool.positions.page.version.title": "Управление ликвидностью пула {{version}} на Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} за {{outputToken}}", "liquidityPool.positions.price.formatted": " за ", "migrate.allowed": "Разрешено", "migrate.allowLpMigration": "Разрешить перенос токенов LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 позволяет совместно использовать утверждения токенов и управлять ими в разных приложениях.", "pool.activePositions.appear": "Здесь будут отображаться ваши активные позиции ликвидности V3.", "pool.activeRange": "Активный диапазон тиков", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Добавьте ликвидность в {{tokenPair}} ({{chain}}) на Uniswap", "pool.addMoreLiquidity": "Добавьте больше ликвидности", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "Объем/TVL за 1 дн.", "pool.volume.thirtyDay": "Объем за 30 дней", "pool.volume.thirtyDay.short": "Объем за 30 дн.", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Ваша ликвидность V2", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Развернуть", "swap.button.wrap": "Обернуть", "swap.buy.countryModal.placeholder": "Поиск по стране или региону", - "swap.cancel.cannotExecute": "Ваш своп может быть выполнен до обработки отмены. Комиссии сети невозможно возместить. Вы хотите продолжить?", - "swap.cancel.cannotExecute.plural": "Ваши свопы могут быть выполнены до обработки отмены. Комиссии сети невозможно возместить. Вы хотите продолжить?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Подтвердить лимит", "swap.confirmSwap": "Подтвердить своп", "swap.deadline.settings.title": "Конечный срок транзакции", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "Комиссия {{tokenSymbol}}", "swap.details.feeOnTransfer.default": "Комиссия токена", "swap.details.newQuote.input": "Новый ввод", @@ -1841,7 +1850,9 @@ "swap.review": "Просмотреть сведения о свопе", "swap.review.summary": "Вы выполняете своп", "swap.reviewLimit": "Проверить лимит", - "swap.route.optimizedGasCost": "Этот маршрут оптимизирует общую производительность за счет учета разделенных маршрутов, нескольких переходов и стоимости газа на каждом этапе.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Если включена защита свопа, ваши транзакции Эфириум будут защищены от сэндвич-атак с уменьшенной вероятностью сбоя.", "swap.settings.protection.subtitle.supported": "Сеть {{chainName}}", "swap.settings.protection.subtitle.unavailable": "Недоступно в {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Пулы V3", "swap.settings.routingPreference.option.v4.title": "Пулы V4", "swap.settings.routingPreference.title": "Варианты торговли", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Авто", "swap.settings.slippage.description": "Ваша транзакция будет отменена, если цена изменится больше, чем процент проскальзывания.", "swap.settings.slippage.input.message": "Если цена упадет еще больше, ваша транзакция будет отменена. Ниже указана минимальная сумма, которую вы гарантированно получите.", "swap.settings.slippage.input.receive.title": "Получите как минимум", "swap.settings.slippage.output.message": "Если цена упадет еще больше, ваша транзакция будет отменена. Ниже указана максимальная сумма, которую вам придется потратить.", "swap.settings.slippage.output.spend.title": "Потратите максимум", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Введите значение меньше {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Проскальзывание может быть выше, чем необходимо", "swap.settings.slippage.warning.min": "Введите значение больше 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Приложение", "transaction.details.from": "Откуда", "transaction.details.networkFee": "Комиссия сети", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Курс", "transaction.details.transaction": "Транзакция", "transaction.details.uniswapFee": "Комиссия ({{ feePercent }} %)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Отзыв", "transaction.status.revoke.success": "Отозвано", "transaction.status.revoke.successDapp": "Отозвано в {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Отменена продажа", "transaction.status.sell.canceling": "Отмена продажи", "transaction.status.sell.failed": "Не удалось продать", diff --git a/packages/uniswap/src/i18n/locales/translations/sl-SI.json b/packages/uniswap/src/i18n/locales/translations/sl-SI.json index 8bbc412030c..70982f72067 100644 --- a/packages/uniswap/src/i18n/locales/translations/sl-SI.json +++ b/packages/uniswap/src/i18n/locales/translations/sl-SI.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Odstranjena likvidnost", "common.loading": "nalaganje", "common.loadingAllowance": "Dodatek za nalaganje", + "common.loadMore": "Naloži več", "common.longText.button.less": "Berite manj", "common.longText.button.more": "Preberi več", "common.lowPrice": "Nizka cena", @@ -540,8 +541,8 @@ "common.resetLimit": "Ponastavi omejitev {{symbol}}", "common.resetLimitWallet": "Ponastavi omejitev {{symbol}} v denarnici", "common.resettingLimit": "Ponastavitev omejitve {{symbol}}...", - "common.resolveIssue": "Rešite težavo", - "common.resolveIssues": "Razreši {{issues}} težave", + "common.resolveIssues_one": "Rešite težavo", + "common.resolveIssues_other": "Razreši {{count}} težave", "common.restricted.region": "Omejeno območje", "common.return.label": "Vrnitev", "common.returnToTop": "Nazaj na vrh", @@ -602,21 +603,25 @@ "common.thisWeek": "Ta teden", "common.thisYear": "To leto", "common.time": "Čas", - "common.time.day": "dan", "common.time.days": "dnevi", - "common.time.hour": "uro", + "common.time.days_one": "dan", + "common.time.days_other": "dnevi", "common.time.hours": "ure", + "common.time.hours_one": "uro", + "common.time.hours_other": "ure", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minut", - "common.time.month": "mesec", "common.time.months": "mesecih", + "common.time.months_one": "mesec", + "common.time.months_other": "mesecih", "common.time.past.days": "{{days}}pred d", "common.time.past.hours": "{{hours}}h nazaj", "common.time.past.minutes": "{{minutes}}m nazaj", "common.time.past.months": "{{months}}pred mes", "common.time.past.seconds": "{{seconds}}s pred", - "common.time.week": "teden", "common.time.weeks": "tedne", + "common.time.weeks_one": "teden", + "common.time.weeks_other": "tedne", "common.tip.label": "Nasvet:", "common.to": "za", "common.today": "Danes", @@ -634,8 +639,8 @@ "common.transactions": "Transakcije", "common.transactionSettings": "Nastavitve transakcije", "common.transactionSubmitted": "Transakcija poslana", - "common.transfer": "prenos", - "common.transfers": "prenosi", + "common.transfer_one": "prenos", + "common.transfer_other": "prenosi", "common.tryAgain.error": "Poskusi ponovno", "common.twitter": "Twitter", "common.type.label": "Vrsta", @@ -856,6 +861,7 @@ "fee.tier.new": "Nova stopnja", "fee.tier.percent.select": "{{percentage}} izberite", "fee.tier.recommended": "Priporočeno", + "fee.tier.recommended.description": "Priporočeno na podlagi najvišjega deleža likvidnosti za izbrani par žetonov.", "fee.tier.search": "Poiščite ali ustvarite druge stopnje pristojbin", "fee.tier.search.short": "Stopnje iskanja", "fee.tier.select": "Izberite stopnjo pristojbine", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Prodaja z", "fiatOffRamp.connection.quote": "Prodam {{amount}} v vrednosti {{currencySymbol}}", "fiatOffRamp.error.balance": "Presega ravnotežje", + "fiatOffRamp.summary.total": "{{cryptoAmount}} za {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Pojdi nazaj", "fiatOffRamp.unsupportedToken.divider": "Nepodprti žetoni", "fiatOffRamp.unsupportedToken.message": "Ta žeton ni podprt za prodajo. Zamenjajte to sredstvo z enim od podprtih žetonov.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Upravljajte {{quoteSymbol}}/{{baseSymbol}} likvidnost združenja na Uniswap", "liquidityPool.positions.page.version.description": "Oglejte si svoje aktivne {{version}} likvidnostne pozicije. Dodajte nove položaje.", "liquidityPool.positions.page.version.title": "Upravljajte likvidnost bazena{{version}} na Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} na {{outputToken}}", "liquidityPool.positions.price.formatted": " na ", "migrate.allowed": "Dovoljeno", "migrate.allowLpMigration": "Dovoli selitev žetona LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Dovoljenje2 omogoča skupno rabo in upravljanje odobritev žetonov v različnih aplikacijah.", "pool.activePositions.appear": "Vaše aktivne likvidnostne pozicije V3 bodo prikazane tukaj.", "pool.activeRange": "Aktivni obseg kljukic", + "pool.addAs": "Dodaj kot {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Dodajte likvidnost {{tokenPair}} ({{chain}}) na Uniswap", "pool.addMoreLiquidity": "Dodajte več likvidnosti", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 dnevni volumen", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Umakni kot {{nativeWrappedSymbol}}", "pool.yourv2": "Vaša likvidnost V2", "poolFinder.availablePools": "Na voljo bazeni", "poolFinder.availablePools.found.description": "v2 bazeni, ki ustrezajo vaši izbiri para.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Odvij", "swap.button.wrap": "Ovitek", "swap.buy.countryModal.placeholder": "Iskanje po državi ali regiji", - "swap.cancel.cannotExecute": "Vaša zamenjava se lahko izvede pred obdelavo preklica. Vaših stroškov omrežja ni mogoče povrniti. Ali želite nadaljevati?", - "swap.cancel.cannotExecute.plural": "Vaše zamenjave bi se lahko izvedle pred obdelavo preklica. Vaših omrežnih stroškov ni mogoče povrniti. Ali želite nadaljevati?", + "swap.cancel.cannotExecute_one": "Vaša zamenjava se lahko izvede pred obdelavo preklica. Vaših stroškov omrežja ni mogoče povrniti. Ali želite nadaljevati?", + "swap.cancel.cannotExecute_other": "Vaše zamenjave bi se lahko izvedle pred obdelavo preklica. Vaših omrežnih stroškov ni mogoče povrniti. Ali želite nadaljevati?", "swap.confirmLimit": "Potrdite omejitev", "swap.confirmSwap": "Potrdite zamenjavo", "swap.deadline.settings.title": "Rok transakcije", + "swap.deadline.settings.title.short": "Tx. rok", "swap.details.feeOnTransfer": "{{tokenSymbol}} pristojbina", "swap.details.feeOnTransfer.default": "Žetonska pristojbina", "swap.details.newQuote.input": "Nov vnos", @@ -1841,7 +1850,9 @@ "swap.review": "Pregled zamenjave", "swap.review.summary": "Menjaš se", "swap.reviewLimit": "Omejitev pregleda", - "swap.route.optimizedGasCost": "Ta pot optimizira vaš skupni rezultat z upoštevanjem razdeljenih poti, več skokov in stroškov goriva za vsak korak.", + "swap.route.optimizedGasCost": "Ta pot optimizira vaš skupni rezultat z upoštevanjem razdeljenih poti, več skokov in omrežnih stroškov vsakega koraka.", + "swap.settings.deadline.tooltip": "Vaša transakcija bo razveljavljena, če je na čakanju dlje od tega časa. (Največ: 3 dni).", + "swap.settings.deadline.warning": "Visok rok", "swap.settings.protection.description": "Z vklopljeno zaščito pred zamenjavo bodo vaše transakcije Ethereum zaščitene pred sendvič napadi z zmanjšanimi možnostmi neuspeha.", "swap.settings.protection.subtitle.supported": "{{chainName}} Omrežje", "swap.settings.protection.subtitle.unavailable": "Ni na voljo na {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 bazeni", "swap.settings.routingPreference.option.v4.title": "v4 bazeni", "swap.settings.routingPreference.title": "Možnosti trgovanja", + "swap.settings.slippage.alert": "Visok zdrs", "swap.settings.slippage.control.auto": "Avto", "swap.settings.slippage.description": "Vaša transakcija se bo razveljavila, če se cena spremeni bolj kot odstotek zdrsa.", "swap.settings.slippage.input.message": "Če cena še naprej pade, se bo vaša transakcija razveljavila. Spodaj je minimalni znesek, ki ga boste zagotovo prejeli.", "swap.settings.slippage.input.receive.title": "Prejmi vsaj", "swap.settings.slippage.output.message": "Če cena še naprej pade, se bo vaša transakcija razveljavila. Spodaj je najvišji znesek, ki bi ga morali porabiti.", "swap.settings.slippage.output.spend.title": "Porabite največ", + "swap.settings.slippage.warning": "Zelo visok zdrs", + "swap.settings.slippage.warning.description": "Zdrs nad 20 % bo verjetno povzročil neugodno trgovanje. Če želite zmanjšati tveganje, da bi bili prvi, znižajte nastavitve.", + "swap.settings.slippage.warning.hover": "To lahko povzroči neugodno trgovanje. Poskusite znižati nastavitev zdrsa.", "swap.settings.slippage.warning.max": "Vnesite vrednost, manjšo od {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Zdrs je lahko večji, kot je potrebno", "swap.settings.slippage.warning.min": "Vnesite vrednost, večjo od 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "aplikacija", "transaction.details.from": "Od", "transaction.details.networkFee": "Stroški omrežja", + "transaction.details.providerFee": "Provizija ponudnika", "transaction.details.swapRate": "Oceniti", "transaction.details.transaction": "Transakcija", "transaction.details.uniswapFee": "Provizija ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Preklic", "transaction.status.revoke.success": "Preklicano", "transaction.status.revoke.successDapp": "Preklicano {{externalDappName}}", + "transaction.status.sale.canceled": "Preklicana prodaja", + "transaction.status.sale.canceling": "Preklic prodaje", + "transaction.status.sale.failedOn": "Prodaja ni uspela prek {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Prodaja preko {{serviceProvider}}", + "transaction.status.sale.successOn": "Prodano prek {{serviceProvider}}", "transaction.status.sell.canceled": "Preklicana prodaja", "transaction.status.sell.canceling": "Preklic prodaje", "transaction.status.sell.failed": "Prodaja ni uspela", diff --git a/packages/uniswap/src/i18n/locales/translations/sr-SP.json b/packages/uniswap/src/i18n/locales/translations/sr-SP.json index 0b8a7045ad4..9e0e12fdc4c 100644 --- a/packages/uniswap/src/i18n/locales/translations/sr-SP.json +++ b/packages/uniswap/src/i18n/locales/translations/sr-SP.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Ликвидност уклоњена", "common.loading": "Лоадинг", "common.loadingAllowance": "Додатак за утовар", + "common.loadMore": "Load more", "common.longText.button.less": "Читај мање", "common.longText.button.more": "Опширније", "common.lowPrice": "Ниска цена", @@ -540,8 +541,8 @@ "common.resetLimit": "Ресетујте {{symbol}} ограничење", "common.resetLimitWallet": "Ресетујте {{symbol}} ограничење у новчанику", "common.resettingLimit": "Ресетовање границе {{symbol}} ...", - "common.resolveIssue": "Решите проблем", - "common.resolveIssues": "Решите {{issues}} проблеме", + "common.resolveIssues_one": "Решите проблем", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Рестрицтед регион", "common.return.label": "Повратак", "common.returnToTop": "Вратите се на врх", @@ -602,21 +603,25 @@ "common.thisWeek": "Ове недеље", "common.thisYear": "Ове године", "common.time": "време", - "common.time.day": "дан", "common.time.days": "дана", - "common.time.hour": "сат", + "common.time.days_one": "дан", + "common.time.days_other": "дана", "common.time.hours": "сати", + "common.time.hours_one": "сат", + "common.time.hours_other": "сати", "common.time.minute.amt": "{{time}}м", "common.time.minutes": "минута", - "common.time.month": "месец дана", "common.time.months": "месеци", + "common.time.months_one": "месец дана", + "common.time.months_other": "месеци", "common.time.past.days": "{{days}}пре д", "common.time.past.hours": "{{hours}}пре х", "common.time.past.minutes": "{{minutes}}м пре", "common.time.past.months": "{{months}}пре месец дана", "common.time.past.seconds": "{{seconds}}пре с", - "common.time.week": "Недеља", "common.time.weeks": "недеље", + "common.time.weeks_one": "Недеља", + "common.time.weeks_other": "недеље", "common.tip.label": "Савет:", "common.to": "до", "common.today": "Данас", @@ -634,8 +639,8 @@ "common.transactions": "Трансакције", "common.transactionSettings": "Подешавања трансакције", "common.transactionSubmitted": "Трансакција је послата", - "common.transfer": "трансфер", - "common.transfers": "трансфери", + "common.transfer_one": "трансфер", + "common.transfer_other": "трансфери", "common.tryAgain.error": "Покушајте поново", "common.twitter": "Твиттер", "common.type.label": "Тип", @@ -856,6 +861,7 @@ "fee.tier.new": "Нови ниво", "fee.tier.percent.select": "{{percentage}} select", "fee.tier.recommended": "Препоручено", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Search or create other fee tiers", "fee.tier.search.short": "Претражи нивое", "fee.tier.select": "Изаберите ниво накнаде", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Продај с", "fiatOffRamp.connection.quote": "Продаја {{amount}} у вредности од {{currencySymbol}}", "fiatOffRamp.error.balance": "Exceeds balance", + "fiatOffRamp.summary.total": "{{cryptoAmount}} за {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Вратити се", "fiatOffRamp.unsupportedToken.divider": "Неподржани токени", "fiatOffRamp.unsupportedToken.message": "Овај токен није подржан за продају. Замените ову активу за један од подржаних токена.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Управљајте {{quoteSymbol}}/{{baseSymbol}} ликвидношћу пула на Унисвап-у", "liquidityPool.positions.page.version.description": "Погледајте своје активне {{version}} позиције ликвидности. Додајте нове позиције.", "liquidityPool.positions.page.version.title": "Управљајте ликвидношћу пула{{version}} на Унисвап-у", - "liquidityPool.positions.price": "{{amountWithSymbol}} по {{outputToken}}", "liquidityPool.positions.price.formatted": " по ", "migrate.allowed": "Дозвољен", "migrate.allowLpMigration": "Дозволи миграцију ЛП токена", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Пермит2 омогућава да се одобрења токена деле и управљају у различитим апликацијама.", "pool.activePositions.appear": "Овде ће се појавити ваше активне В3 позиције ликвидности.", "pool.activeRange": "Активни опсег крпеља", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Додајте ликвидност {{tokenPair}} ({{chain}}) на Унисвап-у", "pool.addMoreLiquidity": "Додајте више ликвидности", "pool.apr": "АПР", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1Д вол/ТВЛ", "pool.volume.thirtyDay": "30 day volume", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Ваша В2 ликвидност", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Унврап", "swap.button.wrap": "Замотајте", "swap.buy.countryModal.placeholder": "Претражујте по земљи или региону", - "swap.cancel.cannotExecute": "Ваша замена би могла да се изврши пре него што се отказивање обради. Ваши мрежни трошкови се не могу рефундирати. Да ли желите да наставите?", - "swap.cancel.cannotExecute.plural": "Ваше замене могу да се изврше пре него што се отказивање обради. Ваши мрежни трошкови се не могу рефундирати. Да ли желите да наставите?", + "swap.cancel.cannotExecute_one": "Ваша замена би могла да се изврши пре него што се отказивање обради. Ваши мрежни трошкови се не могу рефундирати. Да ли желите да наставите?", + "swap.cancel.cannotExecute_other": "Ваше замене могу да се изврше пре него што се отказивање обради. Ваши мрежни трошкови се не могу рефундирати. Да ли желите да наставите?", "swap.confirmLimit": "Потврдите ограничење", "swap.confirmSwap": "Потврдите замену", "swap.deadline.settings.title": "Рок за трансакцију", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} накнада", "swap.details.feeOnTransfer.default": "Токен накнада", "swap.details.newQuote.input": "Нови унос", @@ -1841,7 +1850,9 @@ "swap.review": "Замена прегледа", "swap.review.summary": "Мењате се", "swap.reviewLimit": "Ограничење прегледа", - "swap.route.optimizedGasCost": "Ова рута оптимизује ваш укупни учинак узимајући у обзир подељене руте, вишеструке скокове и цену гаса за сваки корак.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Са укљученом заштитом замене, ваше Етхереум трансакције ће бити заштићене од сендвич напада, са смањеним шансама за неуспех.", "swap.settings.protection.subtitle.supported": "{{chainName}} Мрежа", "swap.settings.protection.subtitle.unavailable": "Није доступно на {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "в3 базени", "swap.settings.routingPreference.option.v4.title": "в4 базени", "swap.settings.routingPreference.title": "Опције трговине", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Ауто", "swap.settings.slippage.description": "Ваша трансакција ће се вратити ако се цена промени више од процента клизања.", "swap.settings.slippage.input.message": "Ако цена још више падне, ваша трансакција ће се вратити. Испод је минимални износ који ћете гарантовано примити.", "swap.settings.slippage.input.receive.title": "Примите барем", "swap.settings.slippage.output.message": "Ако цена још више падне, ваша трансакција ће се вратити. Испод је максимални износ који би требало да потрошите.", "swap.settings.slippage.output.spend.title": "Потрошите највише", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Унесите вредност мању од {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Клизање може бити веће него што је потребно", "swap.settings.slippage.warning.min": "Унесите вредност већу од 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Апликација", "transaction.details.from": "Од", "transaction.details.networkFee": "Трошкови мреже", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Рате", "transaction.details.transaction": "Трансакција", "transaction.details.uniswapFee": "Накнада ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Опозив", "transaction.status.revoke.success": "Опозвано", "transaction.status.revoke.successDapp": "Опозван {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Отказана продаја", "transaction.status.sell.canceling": "Отказивање продаје", "transaction.status.sell.failed": "Продаја није успела", diff --git a/packages/uniswap/src/i18n/locales/translations/sv-SE.json b/packages/uniswap/src/i18n/locales/translations/sv-SE.json index 6ca836e63b1..716f30506df 100644 --- a/packages/uniswap/src/i18n/locales/translations/sv-SE.json +++ b/packages/uniswap/src/i18n/locales/translations/sv-SE.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likviditet borttagen", "common.loading": "Läser in", "common.loadingAllowance": "Lasttillägg", + "common.loadMore": "Ladda mer", "common.longText.button.less": "Läs mindre", "common.longText.button.more": "Läs mer", "common.lowPrice": "Lågt pris", @@ -540,8 +541,8 @@ "common.resetLimit": "Återställ {{symbol}} gränsen", "common.resetLimitWallet": "Återställ {{symbol}} -gränsen i plånboken", "common.resettingLimit": "Återställer {{symbol}} gräns...", - "common.resolveIssue": "Lös problemet", - "common.resolveIssues": "Lös {{issues}} problem", + "common.resolveIssues_one": "Lös problemet", + "common.resolveIssues_other": "Lös {{count}} problem", "common.restricted.region": "Begränsad region", "common.return.label": "Lämna tillbaka", "common.returnToTop": "Återgå till toppen", @@ -602,21 +603,25 @@ "common.thisWeek": "Denna vecka", "common.thisYear": "Det här året", "common.time": "Tid", - "common.time.day": "dag", "common.time.days": "dagar", - "common.time.hour": "timme", + "common.time.days_one": "dag", + "common.time.days_other": "dagar", "common.time.hours": "timmar", + "common.time.hours_one": "timme", + "common.time.hours_other": "timmar", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "minuter", - "common.time.month": "månad", "common.time.months": "månader", + "common.time.months_one": "månad", + "common.time.months_other": "månader", "common.time.past.days": "{{days}}d sedan", "common.time.past.hours": "{{hours}}h sedan", "common.time.past.minutes": "{{minutes}}m sedan", "common.time.past.months": "{{months}}månad sedan", "common.time.past.seconds": "{{seconds}}s sedan", - "common.time.week": "vecka", "common.time.weeks": "Veckor", + "common.time.weeks_one": "vecka", + "common.time.weeks_other": "Veckor", "common.tip.label": "Dricks:", "common.to": "till", "common.today": "I dag", @@ -634,8 +639,8 @@ "common.transactions": "Transaktioner", "common.transactionSettings": "Transaktionsinställningar", "common.transactionSubmitted": "Transaktionen har skickats", - "common.transfer": "överföra", - "common.transfers": "överföringar", + "common.transfer_one": "överföra", + "common.transfer_other": "överföringar", "common.tryAgain.error": "Försök igen", "common.twitter": "Kvittra", "common.type.label": "Typ", @@ -856,6 +861,7 @@ "fee.tier.new": "Ny nivå", "fee.tier.percent.select": "{{percentage}} välj", "fee.tier.recommended": "Rekommenderad", + "fee.tier.recommended.description": "Rekommenderas baserat på att ha den högsta andelen likviditet för det valda tokenparet.", "fee.tier.search": "Sök eller skapa andra avgiftsnivåer", "fee.tier.search.short": "Sök nivåer", "fee.tier.select": "Välj avgiftsnivå", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Sälj med", "fiatOffRamp.connection.quote": "Säljer {{amount}} till ett värde av {{currencySymbol}}", "fiatOffRamp.error.balance": "Överskrider balansen", + "fiatOffRamp.summary.total": "{{cryptoAmount}} för {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Gå tillbaka", "fiatOffRamp.unsupportedToken.divider": "Tokens som inte stöds", "fiatOffRamp.unsupportedToken.message": "Denna token stöds inte för försäljning. Byt ut denna tillgång till en av de token som stöds.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Hantera {{quoteSymbol}}/{{baseSymbol}} pool likviditet på Uniswap", "liquidityPool.positions.page.version.description": "Se dina aktiva {{version}} likviditetspositioner. Lägg till nya positioner.", "liquidityPool.positions.page.version.title": "Hantera poollikviditet{{version}} på Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} per {{outputToken}}", "liquidityPool.positions.price.formatted": " per ", "migrate.allowed": "Tillåten", "migrate.allowLpMigration": "Tillåt migrering av LP-token", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 tillåter att tokengodkännanden delas och hanteras över olika applikationer.", "pool.activePositions.appear": "Dina aktiva V3-likviditetspositioner kommer att visas här.", "pool.activeRange": "Aktivt fästingområde", + "pool.addAs": "Lägg till som {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Lägg till likviditet till {{tokenPair}} ({{chain}}) på Uniswap", "pool.addMoreLiquidity": "Lägg till mer likviditet", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 dagars volym", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Dra tillbaka som {{nativeWrappedSymbol}}", "pool.yourv2": "Din V2-likviditet", "poolFinder.availablePools": "Tillgängliga pooler", "poolFinder.availablePools.found.description": "v2-pooler som matchar ditt parval.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Packa upp", "swap.button.wrap": "Slå in", "swap.buy.countryModal.placeholder": "Sök efter land eller region", - "swap.cancel.cannotExecute": "Ditt byte kan köras innan avbokningen behandlas. Dina nätverkskostnader kan inte återbetalas. Vill du fortsätta?", - "swap.cancel.cannotExecute.plural": "Dina byten kan köras innan avbokningen behandlas. Dina nätverkskostnader kan inte återbetalas. Vill du fortsätta?", + "swap.cancel.cannotExecute_one": "Ditt byte kan köras innan avbokningen behandlas. Dina nätverkskostnader kan inte återbetalas. Vill du fortsätta?", + "swap.cancel.cannotExecute_other": "Dina byten kan köras innan avbokningen behandlas. Dina nätverkskostnader kan inte återbetalas. Vill du fortsätta?", "swap.confirmLimit": "Bekräfta gränsen", "swap.confirmSwap": "Bekräfta bytet", "swap.deadline.settings.title": "Transaktionens deadline", + "swap.deadline.settings.title.short": "Tx. tidsfrist", "swap.details.feeOnTransfer": "{{tokenSymbol}} avgift", "swap.details.feeOnTransfer.default": "Token avgift", "swap.details.newQuote.input": "Ny ingång", @@ -1841,7 +1850,9 @@ "swap.review": "Recensionsbyte", "swap.review.summary": "Du byter", "swap.reviewLimit": "Granskningsgräns", - "swap.route.optimizedGasCost": "Denna rutt optimerar din totala produktion genom att överväga delade rutter, flera hopp och gaskostnaden för varje steg.", + "swap.route.optimizedGasCost": "Denna rutt optimerar din totala produktion genom att ta hänsyn till delade rutter, flera hopp och nätverkskostnaderna för varje steg.", + "swap.settings.deadline.tooltip": "Din transaktion kommer att återställas om den väntar längre än denna tidsperiod. (Max: 3 dagar).", + "swap.settings.deadline.warning": "Hög deadline", "swap.settings.protection.description": "Med swap-skydd på kommer dina Ethereum-transaktioner att skyddas från sandwichattacker, med minskade chanser att misslyckas.", "swap.settings.protection.subtitle.supported": "{{chainName}} Nätverk", "swap.settings.protection.subtitle.unavailable": "Ej tillgängligt på {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 pooler", "swap.settings.routingPreference.option.v4.title": "v4 pooler", "swap.settings.routingPreference.title": "Handel med alternativ", + "swap.settings.slippage.alert": "Hög glidning", "swap.settings.slippage.control.auto": "Bil", "swap.settings.slippage.description": "Din transaktion kommer att återgå om priset ändras mer än glidningsprocenten.", "swap.settings.slippage.input.message": "Om priset sjunker ytterligare kommer din transaktion att återgå. Nedan är det lägsta belopp som du garanterat får.", "swap.settings.slippage.input.receive.title": "Ta emot åtminstone", "swap.settings.slippage.output.message": "Om priset sjunker ytterligare kommer din transaktion att återgå. Nedan är det maximala belopp du skulle behöva spendera.", "swap.settings.slippage.output.spend.title": "Spendera högst", + "swap.settings.slippage.warning": "Mycket hög glidning", + "swap.settings.slippage.warning.description": "En glidning över 20 % kommer sannolikt att resultera i en ogynnsam handel. Sänk dina inställningar för att minska risken för att vara i framkant.", + "swap.settings.slippage.warning.hover": "Detta kan resultera i en ogynnsam handel. Prova att sänka din glidningsinställning.", "swap.settings.slippage.warning.max": "Ange ett värde som är mindre än {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Slirningen kan vara högre än nödvändigt", "swap.settings.slippage.warning.min": "Ange ett värde som är större än 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "App", "transaction.details.from": "Från", "transaction.details.networkFee": "Nätverkskostnad", + "transaction.details.providerFee": "Leverantörsavgift", "transaction.details.swapRate": "Betygsätta", "transaction.details.transaction": "Transaktion", "transaction.details.uniswapFee": "Avgift ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Återkallar", "transaction.status.revoke.success": "Återkallad", "transaction.status.revoke.successDapp": "Återkallades den {{externalDappName}}", + "transaction.status.sale.canceled": "Inställd försäljning", + "transaction.status.sale.canceling": "Avbryter försäljning", + "transaction.status.sale.failedOn": "Försäljningen misslyckades via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Säljer via {{serviceProvider}}", + "transaction.status.sale.successOn": "Säljes via {{serviceProvider}}", "transaction.status.sell.canceled": "Avbruten försäljning", "transaction.status.sell.canceling": "Avbryter försäljning", "transaction.status.sell.failed": "Det gick inte att sälja", diff --git a/packages/uniswap/src/i18n/locales/translations/sw-TZ.json b/packages/uniswap/src/i18n/locales/translations/sw-TZ.json index a24d9c0d888..e4d9b0e44d2 100644 --- a/packages/uniswap/src/i18n/locales/translations/sw-TZ.json +++ b/packages/uniswap/src/i18n/locales/translations/sw-TZ.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Uondoaji wa udalali", "common.loading": "Inapakia", "common.loadingAllowance": "Kupakia posho", + "common.loadMore": "Load more", "common.longText.button.less": "Soma kidogo", "common.longText.button.more": "Soma zaidi", "common.lowPrice": "Bei ya chini", @@ -540,8 +541,8 @@ "common.resetLimit": "Weka upya {{symbol}} kikomo", "common.resetLimitWallet": "Weka upya {{symbol}} kikomo kwenye pochi", "common.resettingLimit": "Inaweka upya {{symbol}} kikomo...", - "common.resolveIssue": "Tatua suala", - "common.resolveIssues": "Tatua {{issues}} masuala", + "common.resolveIssues_one": "Tatua suala", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Eneo lenye vikwazo", "common.return.label": "Rudi", "common.returnToTop": "Rudi juu", @@ -602,21 +603,25 @@ "common.thisWeek": "Wiki hii", "common.thisYear": "Mwaka huu", "common.time": "Wakati", - "common.time.day": "siku", "common.time.days": "siku", - "common.time.hour": "saa", + "common.time.days_one": "siku", + "common.time.days_other": "siku", "common.time.hours": "masaa", + "common.time.hours_one": "saa", + "common.time.hours_other": "masaa", "common.time.minute.amt": "{{time}}d", "common.time.minutes": "dakika", - "common.time.month": "mwezi", "common.time.months": "miezi", + "common.time.months_one": "mwezi", + "common.time.months_other": "miezi", "common.time.past.days": "{{days}}d iliyopita", "common.time.past.hours": "{{hours}}h iliyopita", "common.time.past.minutes": "{{minutes}}m iliyopita", "common.time.past.months": "{{months}}mwezi uliopita", "common.time.past.seconds": "{{seconds}}s iliyopita", - "common.time.week": "wiki", "common.time.weeks": "wiki", + "common.time.weeks_one": "wiki", + "common.time.weeks_other": "wiki", "common.tip.label": "Kidokezo:", "common.to": "kwa", "common.today": "Leo", @@ -634,8 +639,8 @@ "common.transactions": "Shughuli", "common.transactionSettings": "Mipangilio ya Muamala", "common.transactionSubmitted": "Muamala umewasilishwa", - "common.transfer": "uhamisho", - "common.transfers": "uhamisho", + "common.transfer_one": "uhamisho", + "common.transfer_other": "uhamisho", "common.tryAgain.error": "Jaribu tena", "common.twitter": "Twitter", "common.type.label": "Aina", @@ -856,6 +861,7 @@ "fee.tier.new": "Daraja jipya", "fee.tier.percent.select": "{{percentage}} select", "fee.tier.recommended": "Ilipendekezwa", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Search or create other fee tiers", "fee.tier.search.short": "Tafuta madaraja", "fee.tier.select": "Chagua daraja la ada", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Uza na", "fiatOffRamp.connection.quote": "Kuuza thamani ya {{amount}} ya {{currencySymbol}}", "fiatOffRamp.error.balance": "Exceeds balance", + "fiatOffRamp.summary.total": "{{cryptoAmount}} kwa {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Rudi nyuma", "fiatOffRamp.unsupportedToken.divider": "Ishara zisizotumika", "fiatOffRamp.unsupportedToken.message": "Ishara hii haiwezi kuuzwa. Badilisha kipengee hiki na moja ya ishara zinazotumika.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Dhibiti {{quoteSymbol}}/{{baseSymbol}} ukwasi wa bwawa kwenye Uniswap", "liquidityPool.positions.page.version.description": "Tazama nafasi zako za ukwasi {{version}} zinazotumika. Ongeza nafasi mpya.", "liquidityPool.positions.page.version.title": "Dhibiti ukwasi wa bwawa{{version}} kwenye Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} kwa {{outputToken}}", "liquidityPool.positions.price.formatted": " kwa ", "migrate.allowed": "Ruhusiwa", "migrate.allowLpMigration": "Ruhusu uhamishaji wa tokeni za LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 inaruhusu uidhinishaji wa tokeni kushirikiwa na kudhibitiwa katika programu mbalimbali.", "pool.activePositions.appear": "Nafasi zako za ukwasi za V3 zinazotumika zitaonekana hapa.", "pool.activeRange": "Safu inayotumika ya tiki", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Ongeza ukwasi kwa {{tokenPair}} ({{chain}}) kwenye Uniswap", "pool.addMoreLiquidity": "Ongeza ukwasi zaidi", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D vol/TVL", "pool.volume.thirtyDay": "30 day volume", "pool.volume.thirtyDay.short": "30D vol", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Ukwasi wako wa V2", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Fungua", "swap.button.wrap": "Funga", "swap.buy.countryModal.placeholder": "Tafuta kulingana na nchi au eneo", - "swap.cancel.cannotExecute": "Ubadilishanaji wako unaweza kutekeleza kabla ya kughairi kuchakatwa. Gharama za mtandao wako haziwezi kurejeshwa. Je, ungependa kuendelea?", - "swap.cancel.cannotExecute.plural": "Ubadilishanaji wako unaweza kutekelezwa kabla ya kughairi kuchakatwa. Gharama za mtandao wako haziwezi kurejeshwa. Je, ungependa kuendelea?", + "swap.cancel.cannotExecute_one": "Ubadilishanaji wako unaweza kutekeleza kabla ya kughairi kuchakatwa. Gharama za mtandao wako haziwezi kurejeshwa. Je, ungependa kuendelea?", + "swap.cancel.cannotExecute_other": "Ubadilishanaji wako unaweza kutekelezwa kabla ya kughairi kuchakatwa. Gharama za mtandao wako haziwezi kurejeshwa. Je, ungependa kuendelea?", "swap.confirmLimit": "Thibitisha kikomo", "swap.confirmSwap": "Thibitisha ubadilishaji", "swap.deadline.settings.title": "Tarehe ya mwisho ya muamala", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} ada", "swap.details.feeOnTransfer.default": "Ada ya ishara", "swap.details.newQuote.input": "Ingizo mpya", @@ -1841,7 +1850,9 @@ "swap.review": "Kagua ubadilishaji", "swap.review.summary": "Unabadilishana", "swap.reviewLimit": "Kagua kikomo", - "swap.route.optimizedGasCost": "Njia hii huboresha jumla ya matokeo yako kwa kuzingatia njia zilizogawanyika, miinuko mingi na gharama ya gesi ya kila hatua.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Ulinzi wa kubadilishana ukiwa umewashwa, miamala yako ya Ethereum italindwa dhidi ya mashambulizi ya sandwich, na uwezekano mdogo wa kushindwa.", "swap.settings.protection.subtitle.supported": "{{chainName}} Mtandao", "swap.settings.protection.subtitle.unavailable": "Haipatikani kwenye {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 mabwawa", "swap.settings.routingPreference.option.v4.title": "mabwawa ya v4", "swap.settings.routingPreference.title": "Chaguzi za biashara", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Otomatiki", "swap.settings.slippage.description": "Muamala wako utarejeshwa ikiwa bei itabadilika zaidi ya asilimia ya utelezi.", "swap.settings.slippage.input.message": "Ikiwa bei itapungua zaidi, muamala wako utarejeshwa. Chini ni kiwango cha chini ambacho umehakikishiwa kupokea.", "swap.settings.slippage.input.receive.title": "Pokea angalau", "swap.settings.slippage.output.message": "Ikiwa bei itapungua zaidi, muamala wako utarejeshwa. Chini ni kiwango cha juu ambacho ungehitaji kutumia.", "swap.settings.slippage.output.spend.title": "Tumia zaidi", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Weka thamani chini ya {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Kuteleza kunaweza kuwa juu kuliko inavyohitajika", "swap.settings.slippage.warning.min": "Weka thamani kubwa kuliko 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Programu", "transaction.details.from": "Kutoka", "transaction.details.networkFee": "Gharama ya mtandao", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Kiwango", "transaction.details.transaction": "Shughuli", "transaction.details.uniswapFee": "Ada ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Kubatilisha", "transaction.status.revoke.success": "Imebatilishwa", "transaction.status.revoke.successDapp": "Imebatilishwa kwenye {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Imeghairiwa kuuza", "transaction.status.sell.canceling": "Kughairi kuuza", "transaction.status.sell.failed": "Imeshindwa kuuza", diff --git a/packages/uniswap/src/i18n/locales/translations/tr-TR.json b/packages/uniswap/src/i18n/locales/translations/tr-TR.json index d2518cd47c0..cdaa7b080a6 100644 --- a/packages/uniswap/src/i18n/locales/translations/tr-TR.json +++ b/packages/uniswap/src/i18n/locales/translations/tr-TR.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Likidite kaldırıldı", "common.loading": "Yükleniyor", "common.loadingAllowance": "Erişim izni olan varlıklar yükleniyor", + "common.loadMore": "Load more", "common.longText.button.less": "Daha az göster", "common.longText.button.more": "Devamını oku", "common.lowPrice": "Düşük fiyat", @@ -540,8 +541,8 @@ "common.resetLimit": "{{symbol}} limitini sıfırla", "common.resetLimitWallet": "Cüzdandaki {{symbol}} limitini sıfırla", "common.resettingLimit": "{{symbol}} limiti sıfırlanıyor...", - "common.resolveIssue": "Sorunu çöz", - "common.resolveIssues": "{{issues}} sorunlarını çöz", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Kısıtlı bölge", "common.return.label": "Geri dön", "common.returnToTop": "Başa dön", @@ -602,21 +603,25 @@ "common.thisWeek": "Bu hafta", "common.thisYear": "Bu yıl", "common.time": "Zaman", - "common.time.day": "gün", "common.time.days": "gün", - "common.time.hour": "saat", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "saat", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} dk", "common.time.minutes": "dakika", - "common.time.month": "ay", "common.time.months": "ay", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} gün önce", "common.time.past.hours": "{{hours}} sa önce", "common.time.past.minutes": "{{minutes}} dk önce", "common.time.past.months": "{{months}} ay önce", "common.time.past.seconds": "{{seconds}} sn önce", - "common.time.week": "hafta", "common.time.weeks": "hafta", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "İpucu:", "common.to": "kime", "common.today": "Bugün", @@ -634,8 +639,8 @@ "common.transactions": "İşlemler", "common.transactionSettings": "İşlem Ayarları", "common.transactionSubmitted": "İşlem gönderildi", - "common.transfer": "transfer", - "common.transfers": "transferler", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Tekrar dene", "common.twitter": "Twitter", "common.type.label": "Tip", @@ -856,6 +861,7 @@ "fee.tier.new": "Yeni kademe", "fee.tier.percent.select": "{{percentage}} için seçim", "fee.tier.recommended": "Önerilen", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Başka ücret kademeleri ara veya oluştur", "fee.tier.search.short": "Kademeleri ara", "fee.tier.select": "Ücret kademesi seç", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Şununla sat:", "fiatOffRamp.connection.quote": "{{currencySymbol}} değerinde {{amount}} satılıyor", "fiatOffRamp.error.balance": "Bakiyeyi aşıyor", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Geri dön", "fiatOffRamp.unsupportedToken.divider": "Desteklenmeyen token'lar", "fiatOffRamp.unsupportedToken.message": "Bu token'ın satışı desteklenmiyor. Bu varlığı desteklenen token'lardan biriyle swap et.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Uniswap'ta {{quoteSymbol}}/{{baseSymbol}} havuz likiditesini yönet", "liquidityPool.positions.page.version.description": "Aktif {{version}} likidite pozisyonlarını görüntüle. Yeni pozisyonlar ekle.", "liquidityPool.positions.page.version.title": "Uniswap'ta havuz likiditesini {{version}} yönet", - "liquidityPool.positions.price": "{{outputToken}} başına {{amountWithSymbol}}", "liquidityPool.positions.price.formatted": " başına ", "migrate.allowed": "İzin verildi", "migrate.allowLpMigration": "LP token'ının taşınmasına izin ver", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "İzin2, token onaylarının farklı uygulamalar arasında paylaşılmasına ve yönetilmesine olanak tanır.", "pool.activePositions.appear": "Aktif V3 likidite pozisyonların burada görünür.", "pool.activeRange": "Aktif adım aralığı", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Uniswap'ta {{tokenPair}} ({{chain}}) işlem çiftine likidite ekle", "pool.addMoreLiquidity": "Daha fazla likidite ekle", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1 günlük hacim/TVL", "pool.volume.thirtyDay": "30 günlük hacim", "pool.volume.thirtyDay.short": "30 günlük hacim", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "V2 likiditen", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Aç", "swap.button.wrap": "Sar", "swap.buy.countryModal.placeholder": "Ülkeye veya bölgeye göre ara", - "swap.cancel.cannotExecute": "Swap işlemin iptal işleminden önce gerçekleştirilebilir. Ağ maliyetlerin iade edilemez. Devam etmek istiyor musun?", - "swap.cancel.cannotExecute.plural": "Swap işlemlerin iptal işleminden önce gerçekleştirilebilir. Ağ maliyetlerin iade edilemez. Devam etmek istiyor musun?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Limiti onayla", "swap.confirmSwap": "Swap işlemini onayla", "swap.deadline.settings.title": "İşlem son tarihi", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} ücreti", "swap.details.feeOnTransfer.default": "Token ücreti", "swap.details.newQuote.input": "Yeni giriş", @@ -1841,7 +1850,9 @@ "swap.review": "Swap işlemini incele", "swap.review.summary": "Swap işlemi yapıyorsun", "swap.reviewLimit": "Limiti incele", - "swap.route.optimizedGasCost": "Bu rota, bölünmüş rotaları, çoklu atlamaları ve her adımın Gas maliyetini dikkate alarak toplam çıkışını optimize eder.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Swap koruması açıkken Ethereum işlemleriniz sandviç saldırılarına karşı korunur ve başarısızlık olasılığı azalır.", "swap.settings.protection.subtitle.supported": "{{chainName}} Ağı", "swap.settings.protection.subtitle.unavailable": "{{chainName}} zincirinde mevcut değil", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 havuzları", "swap.settings.routingPreference.option.v4.title": "v4 havuzları", "swap.settings.routingPreference.title": "Alım satım seçenekleri", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Otomatik", "swap.settings.slippage.description": "Fiyatın slipaj yüzdesinden daha fazla değişmesi durumunda işlemin geri alınır.", "swap.settings.slippage.input.message": "Fiyatın daha fazla farklılık göstermesi durumunda işlemin geri alınır. Alacağın garanti edilen minimum tutarı aşağıda görebilirsin.", "swap.settings.slippage.input.receive.title": "Minimum alınacak:", "swap.settings.slippage.output.message": "Fiyatın daha fazla farklılık göstermesi durumunda işlemin geri alınır. Harcaman gereken maksimum tutarı aşağıda görebilirsin.", "swap.settings.slippage.output.spend.title": "Maksimum harcanacak:", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "{{maxSlippageTolerance}} altında bir değer gir", "swap.settings.slippage.warning.message": "Slipaj gereğinden fazla olabilir", "swap.settings.slippage.warning.min": "0'dan büyük bir değer gir", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Uygulama", "transaction.details.from": "Kimden", "transaction.details.networkFee": "Ağ maliyeti", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Oran", "transaction.details.transaction": "İşlem", "transaction.details.uniswapFee": "Ücret (%{{ feePercent }})", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "İptal ediliyor", "transaction.status.revoke.success": "İptal edildi", "transaction.status.revoke.successDapp": "{{externalDappName}} dApp'inde iptal edildi", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Satış iptal edildi", "transaction.status.sell.canceling": "Satış iptal ediliyor", "transaction.status.sell.failed": "Satış başarısız oldu", diff --git a/packages/uniswap/src/i18n/locales/translations/uk-UA.json b/packages/uniswap/src/i18n/locales/translations/uk-UA.json index 4887913d22c..09bf80c2e25 100644 --- a/packages/uniswap/src/i18n/locales/translations/uk-UA.json +++ b/packages/uniswap/src/i18n/locales/translations/uk-UA.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Вилучено ліквідність", "common.loading": "Завантаження", "common.loadingAllowance": "Надбавка на завантаження", + "common.loadMore": "Завантажте більше", "common.longText.button.less": "Читайте менше", "common.longText.button.more": "Читати далі", "common.lowPrice": "Низька ціна", @@ -540,8 +541,8 @@ "common.resetLimit": "Скинути ліміт {{symbol}}", "common.resetLimitWallet": "Скиньте {{symbol}} ліміт у гаманці", "common.resettingLimit": "Скидання ліміту {{symbol}} ...", - "common.resolveIssue": "Вирішити проблему", - "common.resolveIssues": "Вирішіть {{issues}} проблеми", + "common.resolveIssues_one": "Вирішити проблему", + "common.resolveIssues_other": "Вирішіть {{count}} проблеми", "common.restricted.region": "Заборонений регіон", "common.return.label": "Повернення", "common.returnToTop": "Повернутися до початку", @@ -602,21 +603,25 @@ "common.thisWeek": "Цього тижня", "common.thisYear": "Цього року", "common.time": "час", - "common.time.day": "день", "common.time.days": "днів", - "common.time.hour": "година", + "common.time.days_one": "день", + "common.time.days_other": "днів", "common.time.hours": "години", + "common.time.hours_one": "година", + "common.time.hours_other": "години", "common.time.minute.amt": "{{time}}м", "common.time.minutes": "хвилин", - "common.time.month": "місяць", "common.time.months": "місяців", + "common.time.months_one": "місяць", + "common.time.months_other": "місяців", "common.time.past.days": "{{days}}дн. тому", "common.time.past.hours": "{{hours}}год тому", "common.time.past.minutes": "{{minutes}}хв тому", "common.time.past.months": "{{months}}міс. тому", "common.time.past.seconds": "{{seconds}}с тому", - "common.time.week": "тиждень", "common.time.weeks": "тижнів", + "common.time.weeks_one": "тиждень", + "common.time.weeks_other": "тижнів", "common.tip.label": "Порада:", "common.to": "до", "common.today": "Сьогодні", @@ -634,8 +639,8 @@ "common.transactions": "транзакції", "common.transactionSettings": "Налаштування транзакцій", "common.transactionSubmitted": "Трансакцію подано", - "common.transfer": "передача", - "common.transfers": "перекази", + "common.transfer_one": "передача", + "common.transfer_other": "перекази", "common.tryAgain.error": "Спробуйте знову", "common.twitter": "Twitter", "common.type.label": "Тип", @@ -856,6 +861,7 @@ "fee.tier.new": "Новий рівень", "fee.tier.percent.select": "{{percentage}} вибрати", "fee.tier.recommended": "Рекомендовано", + "fee.tier.recommended.description": "Рекомендується на основі найвищої частки ліквідності для вибраної пари токенів.", "fee.tier.search": "Знайдіть або створіть інші рівні комісії", "fee.tier.search.short": "Рівні пошуку", "fee.tier.select": "Виберіть рівень комісії", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Продати с", "fiatOffRamp.connection.quote": "Продам {{amount}} на суму {{currencySymbol}}", "fiatOffRamp.error.balance": "Перевищує баланс", + "fiatOffRamp.summary.total": "{{cryptoAmount}} за {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Повертайся", "fiatOffRamp.unsupportedToken.divider": "Непідтримувані токени", "fiatOffRamp.unsupportedToken.message": "Цей маркер не підтримується для продажу. Замініть цей ресурс на один із підтримуваних токенів.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Керуйте ліквідністю пулу {{quoteSymbol}}/{{baseSymbol}} на Uniswap", "liquidityPool.positions.page.version.description": "Перегляньте свої активні {{version}} позиції ліквідності. Додайте нові посади.", "liquidityPool.positions.page.version.title": "Керуйте ліквідністю пулу{{version}} на Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} на {{outputToken}}", "liquidityPool.positions.price.formatted": " на ", "migrate.allowed": "Дозволено", "migrate.allowLpMigration": "Дозволити міграцію маркера LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 дозволяє спільно використовувати схвалення маркерів і керувати ними в різних програмах.", "pool.activePositions.appear": "Тут відображатимуться ваші активні позиції ліквідності V3.", "pool.activeRange": "Активний тиковий діапазон", + "pool.addAs": "Додати як {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Додайте ліквідність {{tokenPair}} ({{chain}}) на Uniswap", "pool.addMoreLiquidity": "Додайте більше ліквідності", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D об'єм/TVL", "pool.volume.thirtyDay": "30-денний обсяг", "pool.volume.thirtyDay.short": "30D об", + "pool.withdrawAs": "Зняти як {{nativeWrappedSymbol}}", "pool.yourv2": "Ваша ліквідність V2", "poolFinder.availablePools": "Наявні басейни", "poolFinder.availablePools.found.description": "пули v2, що відповідають вибраній вами парі.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Розгорніть", "swap.button.wrap": "Обгортка", "swap.buy.countryModal.placeholder": "Пошук за країною чи регіоном", - "swap.cancel.cannotExecute": "Ваш обмін може бути виконано до того, як буде оброблено скасування. Ваші витрати на мережу не можуть бути відшкодовані. Ви бажаєте продовжити?", - "swap.cancel.cannotExecute.plural": "Ваші обміни можуть бути виконані до того, як буде оброблено скасування. Ваші витрати на мережу не можуть бути відшкодовані. Ви бажаєте продовжити?", + "swap.cancel.cannotExecute_one": "Ваш обмін може бути виконано до того, як буде оброблено скасування. Ваші витрати на мережу не можуть бути відшкодовані. Ви бажаєте продовжити?", + "swap.cancel.cannotExecute_other": "Ваші обміни можуть бути виконані до того, як буде оброблено скасування. Ваші витрати на мережу не можуть бути відшкодовані. Ви бажаєте продовжити?", "swap.confirmLimit": "Підтвердити ліміт", "swap.confirmSwap": "Підтвердити обмін", "swap.deadline.settings.title": "Кінцевий термін транзакції", + "swap.deadline.settings.title.short": "Tx. крайній термін", "swap.details.feeOnTransfer": "{{tokenSymbol}} комісія", "swap.details.feeOnTransfer.default": "Символічна плата", "swap.details.newQuote.input": "Новий вхід", @@ -1841,7 +1850,9 @@ "swap.review": "Огляд обміну", "swap.review.summary": "Ви міняєтеся", "swap.reviewLimit": "Ліміт огляду", - "swap.route.optimizedGasCost": "Цей маршрут оптимізує ваш загальний вихід, враховуючи розділені маршрути, кілька стрибків і вартість газу для кожного кроку.", + "swap.route.optimizedGasCost": "Цей маршрут оптимізує ваш загальний результат, враховуючи розділені маршрути, кілька переходів і мережеву вартість кожного кроку.", + "swap.settings.deadline.tooltip": "Ваша трансакція буде скасована, якщо вона очікує на розгляд більше цього періоду часу. (Максимум: 3 дні).", + "swap.settings.deadline.warning": "Високий термін", "swap.settings.protection.description": "Якщо захист від обміну ввімкнено, ваші транзакції Ethereum будуть захищені від сендвіч-атак із меншими ймовірністю збою.", "swap.settings.protection.subtitle.supported": "{{chainName}} Мережа", "swap.settings.protection.subtitle.unavailable": "Недоступно на {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 пули", "swap.settings.routingPreference.option.v4.title": "v4 пули", "swap.settings.routingPreference.title": "Варіанти торгівлі", + "swap.settings.slippage.alert": "Високе ковзання", "swap.settings.slippage.control.auto": "Авто", "swap.settings.slippage.description": "Ваша трансакція буде скасована, якщо ціна зміниться більше, ніж відсоток ковзання.", "swap.settings.slippage.input.message": "Якщо ціна знизиться далі, вашу транзакцію буде скасовано. Нижче наведено мінімальну суму, яку ви гарантовано отримаєте.", "swap.settings.slippage.input.receive.title": "Отримайте хоча б", "swap.settings.slippage.output.message": "Якщо ціна знизиться далі, вашу транзакцію буде скасовано. Нижче наведено максимальну суму, яку вам потрібно буде витратити.", "swap.settings.slippage.output.spend.title": "Витрати максимум", + "swap.settings.slippage.warning": "Дуже високе ковзання", + "swap.settings.slippage.warning.description": "Пробуксовування вище 20%, ймовірно, призведе до несприятливої торгівлі. Щоб зменшити ризик бути лідером, зменште налаштування.", + "swap.settings.slippage.warning.hover": "Це може призвести до несприятливої торгівлі. Спробуйте зменшити налаштування ковзання.", "swap.settings.slippage.warning.max": "Введіть значення менше {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Ковзання може бути вищим, ніж необхідно", "swap.settings.slippage.warning.min": "Введіть значення більше 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "додаток", "transaction.details.from": "Від", "transaction.details.networkFee": "Вартість мережі", + "transaction.details.providerFee": "Комісія провайдера", "transaction.details.swapRate": "Оцінка", "transaction.details.transaction": "Транзакція", "transaction.details.uniswapFee": "Комісія ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Відкликання", "transaction.status.revoke.success": "Відкликано", "transaction.status.revoke.successDapp": "Відкликано {{externalDappName}}", + "transaction.status.sale.canceled": "Скасовано продаж", + "transaction.status.sale.canceling": "Скасування продажу", + "transaction.status.sale.failedOn": "Помилка продажу через {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Продаж через {{serviceProvider}}", + "transaction.status.sale.successOn": "Продається через {{serviceProvider}}", "transaction.status.sell.canceled": "Скасовано продаж", "transaction.status.sell.canceling": "Скасування продажу", "transaction.status.sell.failed": "Не вдалося продати", diff --git a/packages/uniswap/src/i18n/locales/translations/ur-PK.json b/packages/uniswap/src/i18n/locales/translations/ur-PK.json index a6b782e9026..1521b620526 100644 --- a/packages/uniswap/src/i18n/locales/translations/ur-PK.json +++ b/packages/uniswap/src/i18n/locales/translations/ur-PK.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "لیکویڈیٹی ہٹا دی گئی۔", "common.loading": "لوڈ ہو رہا ہے۔", "common.loadingAllowance": "لوڈنگ الاؤنس", + "common.loadMore": "مزید لوڈ کریں۔", "common.longText.button.less": "کم پڑھیں", "common.longText.button.more": "مزید پڑھ", "common.lowPrice": "کم قیمت", @@ -540,8 +541,8 @@ "common.resetLimit": "{{symbol}} کی حد کو دوبارہ ترتیب دیں۔", "common.resetLimitWallet": "والیٹ میں {{symbol}} کی حد کو دوبارہ ترتیب دیں۔", "common.resettingLimit": "{{symbol}} کی حد کو دوبارہ ترتیب دیا جا رہا ہے...", - "common.resolveIssue": "مسئلہ حل کریں۔", - "common.resolveIssues": "{{issues}} مسائل کو حل کریں۔", + "common.resolveIssues_one": "مسئلہ حل کریں۔", + "common.resolveIssues_other": "{{count}} مسائل کو حل کریں۔", "common.restricted.region": "محدود علاقہ", "common.return.label": "واپسی", "common.returnToTop": "اوپر واپس جائیں۔", @@ -602,21 +603,25 @@ "common.thisWeek": "اس ہفتے", "common.thisYear": "اس سال", "common.time": "وقت", - "common.time.day": "دن", "common.time.days": "دن", - "common.time.hour": "گھنٹہ", + "common.time.days_one": "دن", + "common.time.days_other": "دن", "common.time.hours": "گھنٹے", + "common.time.hours_one": "گھنٹہ", + "common.time.hours_other": "گھنٹے", "common.time.minute.amt": "{{time}}m", "common.time.minutes": "منٹ", - "common.time.month": "مہینہ", "common.time.months": "مہینے", + "common.time.months_one": "مہینہ", + "common.time.months_other": "مہینے", "common.time.past.days": "{{days}}دن پہلے", "common.time.past.hours": "{{hours}}گھنٹہ پہلے", "common.time.past.minutes": "{{minutes}}منٹ پہلے", "common.time.past.months": "{{months}}ماہ پہلے", "common.time.past.seconds": "{{seconds}}سیکنڈ پہلے", - "common.time.week": "ہفتہ", "common.time.weeks": "ہفتے", + "common.time.weeks_one": "ہفتہ", + "common.time.weeks_other": "ہفتے", "common.tip.label": "ٹپ:", "common.to": "کو", "common.today": "آج", @@ -634,8 +639,8 @@ "common.transactions": "لین دین", "common.transactionSettings": "لین دین کی ترتیبات", "common.transactionSubmitted": "لین دین جمع کرایا", - "common.transfer": "منتقلی", - "common.transfers": "منتقلی", + "common.transfer_one": "منتقلی", + "common.transfer_other": "منتقلی", "common.tryAgain.error": "دوبارہ کوشش کریں", "common.twitter": "ٹویٹر", "common.type.label": "قسم", @@ -856,6 +861,7 @@ "fee.tier.new": "نیا درجہ", "fee.tier.percent.select": "{{percentage}} منتخب کریں۔", "fee.tier.recommended": "تجویز کردہ", + "fee.tier.recommended.description": "منتخب ٹوکن جوڑے کے لیے لیکویڈیٹی کا سب سے زیادہ حصہ رکھنے کی بنیاد پر تجویز کردہ۔", "fee.tier.search": "تلاش کریں یا فیس کے دوسرے درجے بنائیں", "fee.tier.search.short": "تلاش کے درجات", "fee.tier.select": "فیس کا درجہ منتخب کریں۔", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "کے ساتھ فروخت کریں۔", "fiatOffRamp.connection.quote": "{{currencySymbol}}کی قیمت {{amount}} فروخت کرنا", "fiatOffRamp.error.balance": "توازن سے زیادہ", + "fiatOffRamp.summary.total": "{{fiatAmount}}کے لیے {{cryptoAmount}}", "fiatOffRamp.unsupportedToken.back": "واپس جاو", "fiatOffRamp.unsupportedToken.divider": "غیر تعاون یافتہ ٹوکنز", "fiatOffRamp.unsupportedToken.message": "یہ ٹوکن فروخت کے لیے تعاون یافتہ نہیں ہے۔ اس اثاثے کو تعاون یافتہ ٹوکنز میں سے ایک میں تبدیل کریں۔", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Uniswap پر {{quoteSymbol}}/{{baseSymbol}} پول لیکویڈیٹی کا نظم کریں", "liquidityPool.positions.page.version.description": "اپنی فعال {{version}} لیکویڈیٹی پوزیشنز دیکھیں۔ نئی پوزیشنیں شامل کریں۔", "liquidityPool.positions.page.version.title": "یونی سویپ پر پول لیکویڈیٹی{{version}} کا نظم کریں۔", - "liquidityPool.positions.price": "{{amountWithSymbol}} فی {{outputToken}}", "liquidityPool.positions.price.formatted": " فی ", "migrate.allowed": "اجازت ہے۔", "migrate.allowLpMigration": "ایل پی ٹوکن کی منتقلی کی اجازت دیں۔", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "پرمٹ 2 ٹوکن منظوریوں کو مختلف ایپلی کیشنز میں شیئر کرنے اور ان کا نظم کرنے کی اجازت دیتا ہے۔", "pool.activePositions.appear": "آپ کی فعال V3 لیکویڈیٹی پوزیشنز یہاں ظاہر ہوں گی۔", "pool.activeRange": "فعال ٹک رینج", + "pool.addAs": "{{nativeWrappedSymbol}}کے بطور شامل کریں۔", "pool.addLiquidity.seoTitle": "Unswap پر {{tokenPair}} ({{chain}}) میں لیکویڈیٹی شامل کریں", "pool.addMoreLiquidity": "مزید لیکویڈیٹی شامل کریں۔", "pool.apr": "اپریل", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1D والیوم/TVL", "pool.volume.thirtyDay": "30 دن کا حجم", "pool.volume.thirtyDay.short": "30D والیوم", + "pool.withdrawAs": "{{nativeWrappedSymbol}}کے بطور واپس لیں۔", "pool.yourv2": "آپ کی V2 لیکویڈیٹی", "poolFinder.availablePools": "دستیاب تالاب", "poolFinder.availablePools.found.description": "آپ کے جوڑے کے انتخاب سے مماثل v2 پول۔", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "کھولنا", "swap.button.wrap": "لپیٹنا", "swap.buy.countryModal.placeholder": "ملک یا علاقے کے لحاظ سے تلاش کریں۔", - "swap.cancel.cannotExecute": "منسوخی پر کارروائی سے پہلے آپ کا تبادلہ عمل میں آ سکتا ہے۔ آپ کے نیٹ ورک کے اخراجات واپس نہیں کیے جا سکتے۔ کیا آپ آگے بڑھنا چاہتے ہیں؟", - "swap.cancel.cannotExecute.plural": "منسوخی پر کارروائی سے پہلے آپ کی تبدیلیاں عمل میں آ سکتی ہیں۔ آپ کے نیٹ ورک کے اخراجات واپس نہیں کیے جا سکتے۔ کیا آپ آگے بڑھنا چاہتے ہیں؟", + "swap.cancel.cannotExecute_one": "منسوخی پر کارروائی سے پہلے آپ کا تبادلہ عمل میں آ سکتا ہے۔ آپ کے نیٹ ورک کے اخراجات واپس نہیں کیے جا سکتے۔ کیا آپ آگے بڑھنا چاہتے ہیں؟", + "swap.cancel.cannotExecute_other": "منسوخی پر کارروائی سے پہلے آپ کی تبدیلیاں عمل میں آ سکتی ہیں۔ آپ کے نیٹ ورک کے اخراجات واپس نہیں کیے جا سکتے۔ کیا آپ آگے بڑھنا چاہتے ہیں؟", "swap.confirmLimit": "حد کی تصدیق کریں۔", "swap.confirmSwap": "تبادلہ کی تصدیق کریں۔", "swap.deadline.settings.title": "لین دین کی آخری تاریخ", + "swap.deadline.settings.title.short": "Tx. آخری تاریخ", "swap.details.feeOnTransfer": "{{tokenSymbol}} فیس", "swap.details.feeOnTransfer.default": "ٹوکن فیس", "swap.details.newQuote.input": "نیا ان پٹ", @@ -1841,7 +1850,9 @@ "swap.review": "تبادلہ کا جائزہ لیں۔", "swap.review.summary": "آپ تبادلہ کر رہے ہیں۔", "swap.reviewLimit": "جائزہ کی حد", - "swap.route.optimizedGasCost": "یہ راستہ تقسیم راستوں، متعدد ہاپس، اور ہر قدم کی گیس کی قیمت پر غور کر کے آپ کے کل آؤٹ پٹ کو بہتر بناتا ہے۔", + "swap.route.optimizedGasCost": "یہ راستہ تقسیم راستوں، متعدد ہاپس، اور ہر قدم کے نیٹ ورک کے اخراجات پر غور کر کے آپ کے کل آؤٹ پٹ کو بہتر بناتا ہے۔", + "swap.settings.deadline.tooltip": "اگر آپ کا لین دین اس مدت سے زیادہ زیر التوا ہے تو وہ واپس آجائے گا۔ (زیادہ سے زیادہ: 3 دن)۔", + "swap.settings.deadline.warning": "ہائی ڈیڈ لائن", "swap.settings.protection.description": "سویپ پروٹیکشن آن کے ساتھ، آپ کے ایتھریم ٹرانزیکشنز کو سینڈوچ حملوں سے محفوظ رکھا جائے گا، ناکامی کے کم امکانات کے ساتھ۔", "swap.settings.protection.subtitle.supported": "{{chainName}} نیٹ ورک", "swap.settings.protection.subtitle.unavailable": "{{chainName}}پر دستیاب نہیں ہے۔", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 تالاب", "swap.settings.routingPreference.option.v4.title": "v4 تالاب", "swap.settings.routingPreference.title": "تجارت کے اختیارات", + "swap.settings.slippage.alert": "اونچی پھسلن", "swap.settings.slippage.control.auto": "آٹو", "swap.settings.slippage.description": "اگر قیمت slippage فیصد سے زیادہ تبدیل ہوتی ہے تو آپ کا لین دین واپس آجائے گا۔", "swap.settings.slippage.input.message": "اگر قیمت مزید کم ہو جاتی ہے، تو آپ کا لین دین واپس ہو جائے گا۔ ذیل میں وہ کم از کم رقم ہے جو آپ کو وصول کرنے کی ضمانت ہے۔", "swap.settings.slippage.input.receive.title": "کم از کم وصول کریں۔", "swap.settings.slippage.output.message": "اگر قیمت مزید کم ہو جاتی ہے، تو آپ کا لین دین واپس ہو جائے گا۔ ذیل میں آپ کو زیادہ سے زیادہ رقم خرچ کرنے کی ضرورت ہوگی۔", "swap.settings.slippage.output.spend.title": "زیادہ سے زیادہ خرچ کریں۔", + "swap.settings.slippage.warning": "بہت زیادہ پھسلن", + "swap.settings.slippage.warning.description": "20% سے اوپر کی پھسلن کے نتیجے میں ایک ناموافق تجارت کا امکان ہے۔ فرنٹ رن ہونے کے خطرے کو کم کرنے کے لیے، اپنی سیٹنگز کو کم کریں۔", + "swap.settings.slippage.warning.hover": "اس کے نتیجے میں ناگوار تجارت ہو سکتی ہے۔ اپنی slippage ترتیب کو کم کرنے کی کوشش کریں۔", "swap.settings.slippage.warning.max": "{{maxSlippageTolerance}}سے کم قدر درج کریں۔", "swap.settings.slippage.warning.message": "پھسلنا ضرورت سے زیادہ ہو سکتا ہے۔", "swap.settings.slippage.warning.min": "0 سے بڑی قدر درج کریں۔", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "ایپ", "transaction.details.from": "سے", "transaction.details.networkFee": "نیٹ ورک کی قیمت", + "transaction.details.providerFee": "فراہم کنندہ کی فیس", "transaction.details.swapRate": "شرح", "transaction.details.transaction": "لین دین", "transaction.details.uniswapFee": "فیس ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "منسوخ کرنا", "transaction.status.revoke.success": "منسوخ کر دیا گیا۔", "transaction.status.revoke.successDapp": "{{externalDappName}}کو منسوخ کر دیا گیا۔", + "transaction.status.sale.canceled": "منسوخ شدہ فروخت", + "transaction.status.sale.canceling": "فروخت منسوخ کرنا", + "transaction.status.sale.failedOn": "{{serviceProvider}}کے ذریعے فروخت ناکام ہو گئی۔", + "transaction.status.sale.pendingOn": "{{serviceProvider}}کے ذریعے فروخت کرنا", + "transaction.status.sale.successOn": "{{serviceProvider}}کے ذریعے فروخت کیا گیا۔", "transaction.status.sell.canceled": "منسوخ شدہ فروخت", "transaction.status.sell.canceling": "فروخت منسوخ کرنا", "transaction.status.sell.failed": "فروخت کرنے میں ناکام", diff --git a/packages/uniswap/src/i18n/locales/translations/vi-VN.json b/packages/uniswap/src/i18n/locales/translations/vi-VN.json index 5941efdd5a7..60f4e0a16e4 100644 --- a/packages/uniswap/src/i18n/locales/translations/vi-VN.json +++ b/packages/uniswap/src/i18n/locales/translations/vi-VN.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "Đã rút thanh khoản", "common.loading": "Đang tải", "common.loadingAllowance": "Đang tải hạn mức", + "common.loadMore": "Load more", "common.longText.button.less": "Thu gọn", "common.longText.button.more": "Đọc thêm", "common.lowPrice": "Giá thấp", @@ -540,8 +541,8 @@ "common.resetLimit": "Đặt lại giới hạn {{symbol}}", "common.resetLimitWallet": "Đặt lại giới hạn {{symbol}} trong ví", "common.resettingLimit": "Đang đặt lại giới hạn {{symbol}}...", - "common.resolveIssue": "Giải quyết vấn đề", - "common.resolveIssues": "Giải quyết vấn đề {{issues}}", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "Khu vực bị hạn chế", "common.return.label": "Quay lại", "common.returnToTop": "Về đầu trang", @@ -602,21 +603,25 @@ "common.thisWeek": "Tuần này", "common.thisYear": "Năm nay", "common.time": "Thời gian", - "common.time.day": "ngày", "common.time.days": "ngày", - "common.time.hour": "giờ", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "giờ", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} phút", "common.time.minutes": "phút", - "common.time.month": "tháng", "common.time.months": "tháng", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} ngày trước", "common.time.past.hours": "{{hours}} giờ trước", "common.time.past.minutes": "{{minutes}} phút trước", "common.time.past.months": "{{months}} tháng trước", "common.time.past.seconds": "{{seconds}} giây trước", - "common.time.week": "tuần", "common.time.weeks": "tuần", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "Mẹo:", "common.to": "đến", "common.today": "Hôm nay", @@ -634,8 +639,8 @@ "common.transactions": "Giao dịch", "common.transactionSettings": "Cài đặt giao dịch", "common.transactionSubmitted": "Đã gửi giao dịch", - "common.transfer": "chuyển", - "common.transfers": "chuyển", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "Thử lại", "common.twitter": "Twitter", "common.type.label": "Loại", @@ -856,6 +861,7 @@ "fee.tier.new": "Bậc mới", "fee.tier.percent.select": "Chọn {{percentage}}", "fee.tier.recommended": "Được đề xuất", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "Tìm kiếm hoặc tạo các bậc phí khác", "fee.tier.search.short": "Tìm kiếm bậc", "fee.tier.select": "Chọn bậc phí", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "Bán với", "fiatOffRamp.connection.quote": "Đang bán số tiền {{currencySymbol}} trị giá {{amount}}", "fiatOffRamp.error.balance": "Vượt quá số dư", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "Quay lại", "fiatOffRamp.unsupportedToken.divider": "Token không được hỗ trợ", "fiatOffRamp.unsupportedToken.message": "Token này không được hỗ trợ để bán. Hãy hoán đổi tài sản này sang một trong các token được hỗ trợ.", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "Quản lý thanh khoản pool {{quoteSymbol}}/{{baseSymbol}} trên Uniswap", "liquidityPool.positions.page.version.description": "Xem vị thế thanh khoản {{version}} đang hoạt động của bạn. Thêm vị thế mới.", "liquidityPool.positions.page.version.title": "Quản lý thanh khoản pool {{version}} trên Uniswap", - "liquidityPool.positions.price": "{{amountWithSymbol}} cho mỗi {{outputToken}}", "liquidityPool.positions.price.formatted": " cho mỗi ", "migrate.allowed": "Được phép", "migrate.allowLpMigration": "Cho phép di chuyển token LP", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 cho phép phê duyệt token được chia sẻ và quản lý trên các ứng dụng khác nhau.", "pool.activePositions.appear": "Vị thế thanh khoản V3 đang hoạt động của bạn sẽ xuất hiện tại đây.", "pool.activeRange": "Khoảng tick đang hoạt động", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "Thêm thanh khoản cho {{tokenPair}} ({{chain}}) trên Uniswap", "pool.addMoreLiquidity": "Thêm thanh khoản", "pool.apr": "APR", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "Khối lượng trong 1 ngày/TVL", "pool.volume.thirtyDay": "Khối lượng 30 ngày", "pool.volume.thirtyDay.short": "KL 30N", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "Thanh khoản V2 của bạn", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "Hủy bao bọc", "swap.button.wrap": "Bao bọc", "swap.buy.countryModal.placeholder": "Tìm kiếm theo quốc gia hoặc khu vực", - "swap.cancel.cannotExecute": "Hoán đổi của bạn có thể thực thi trước khi quá trình hủy được xử lý. Phí mạng không thể hoàn lại. Bạn có muốn tiếp tục không?", - "swap.cancel.cannotExecute.plural": "Các hoán đổi của bạn có thể thực thi trước khi quá trình hủy được xử lý. Phí mạng không thể hoàn lại. Bạn có muốn tiếp tục không?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "Xác nhận giới hạn", "swap.confirmSwap": "Xác nhận hoán đổi", "swap.deadline.settings.title": "Thời hạn giao dịch", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "Phí {{tokenSymbol}}", "swap.details.feeOnTransfer.default": "Phí token", "swap.details.newQuote.input": "Đầu vào mới", @@ -1841,7 +1850,9 @@ "swap.review": "Xem lại hoán đổi", "swap.review.summary": "Bạn đang hoán đổi", "swap.reviewLimit": "Xem lại giới hạn", - "swap.route.optimizedGasCost": "Tuyến này tối ưu hóa tổng đầu ra bằng cách xem xét các tuyến tách, nhiều chặng và phí gas của từng bước.", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "Khi đang bật bảo vệ hoán đổi, giao dịch Ethereum của bạn sẽ được bảo vệ khỏi tấn công sandwich, giảm khả năng không thành công.", "swap.settings.protection.subtitle.supported": "Mạng {{chainName}}", "swap.settings.protection.subtitle.unavailable": "Không khả dụng trên {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "Pool v3", "swap.settings.routingPreference.option.v4.title": "Pool v4", "swap.settings.routingPreference.title": "Tùy chọn giao dịch", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "Tự động", "swap.settings.slippage.description": "Giao dịch của bạn sẽ hoàn tác nếu giá thay đổi nhiều hơn phần trăm trượt giá.", "swap.settings.slippage.input.message": "Nếu giá trượt thêm nữa, giao dịch của bạn sẽ hoàn tác. Dưới đây là số tiền tối thiểu bạn đảm bảo sẽ nhận được.", "swap.settings.slippage.input.receive.title": "Nhận ít nhất là", "swap.settings.slippage.output.message": "Nếu giá trượt thêm nữa, giao dịch của bạn sẽ hoàn tác. Dưới đây là số tiền tối đa bạn cần sử dụng.", "swap.settings.slippage.output.spend.title": "Sử dụng nhiều nhất là", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "Nhập giá trị nhỏ hơn {{maxSlippageTolerance}}", "swap.settings.slippage.warning.message": "Trượt giá có thể cao hơn mức cần thiết", "swap.settings.slippage.warning.min": "Nhập giá trị lớn hơn 0", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "Ứng dụng", "transaction.details.from": "Từ", "transaction.details.networkFee": "Phí mạng", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "Tỷ giá", "transaction.details.transaction": "Giao dịch", "transaction.details.uniswapFee": "Phí ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "Đang thu hồi", "transaction.status.revoke.success": "Đã thu hồi", "transaction.status.revoke.successDapp": "Đã thu hồi trên {{externalDappName}}", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "Đã hủy bán", "transaction.status.sell.canceling": "Đang hủy bán", "transaction.status.sell.failed": "Không thể bán", diff --git a/packages/uniswap/src/i18n/locales/translations/zh-CN.json b/packages/uniswap/src/i18n/locales/translations/zh-CN.json index 5764f32a93c..8efbfab5b4e 100644 --- a/packages/uniswap/src/i18n/locales/translations/zh-CN.json +++ b/packages/uniswap/src/i18n/locales/translations/zh-CN.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "流动性被移除", "common.loading": "正在加载", "common.loadingAllowance": "正在加载额度", + "common.loadMore": "Load more", "common.longText.button.less": "收起", "common.longText.button.more": "展开", "common.lowPrice": "低价", @@ -540,8 +541,8 @@ "common.resetLimit": "重置 {{symbol}} 限额", "common.resetLimitWallet": "重置 {{symbol}} 钱包限额", "common.resettingLimit": "正在重置 {{symbol}} 限额...", - "common.resolveIssue": "解决问题", - "common.resolveIssues": "解决 {{issues}} 问题", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "限制区域", "common.return.label": "返回", "common.returnToTop": "返回顶部", @@ -602,21 +603,25 @@ "common.thisWeek": "本周", "common.thisYear": "今年", "common.time": "时间", - "common.time.day": "天", "common.time.days": "天", - "common.time.hour": "小时", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "小时", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} 分钟", "common.time.minutes": "分钟", - "common.time.month": "月", "common.time.months": "月", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} 天前", "common.time.past.hours": "{{hours}} 小时前", "common.time.past.minutes": "{{minutes}} 分钟前", "common.time.past.months": "{{months}} 个月前", "common.time.past.seconds": "{{seconds}} 秒前", - "common.time.week": "周", "common.time.weeks": "周", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "提示:", "common.to": "至", "common.today": "今天", @@ -634,8 +639,8 @@ "common.transactions": "交易", "common.transactionSettings": "交易设置", "common.transactionSubmitted": "交易已提交", - "common.transfer": "转账", - "common.transfers": "转账", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "请重试", "common.twitter": "Twitter", "common.type.label": "类型", @@ -856,6 +861,7 @@ "fee.tier.new": "新等级", "fee.tier.percent.select": "{{percentage}} 选择", "fee.tier.recommended": "已推荐", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "搜索或创建其他费用等级", "fee.tier.search.short": "搜索等级", "fee.tier.select": "选择费用等级", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "出售方式", "fiatOffRamp.connection.quote": "正在出售价值 {{amount}} 的 {{currencySymbol}}", "fiatOffRamp.error.balance": "超出余额", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "返回", "fiatOffRamp.unsupportedToken.divider": "不受支持的代币", "fiatOffRamp.unsupportedToken.message": "不支持出售此代币。将此资产兑换为受支持的代币之一。", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "管理 Uniswap 上的 {{quoteSymbol}}/{{baseSymbol}} 资金池流动性", "liquidityPool.positions.page.version.description": "查看你的活跃 {{version}} 流动性头寸。添加新头寸。", "liquidityPool.positions.page.version.title": "在 Uniswap 上管理资金池流动性 {{version}}", - "liquidityPool.positions.price": "{{amountWithSymbol}} 每 {{outputToken}}", "liquidityPool.positions.price.formatted": "", "migrate.allowed": "已允许", "migrate.allowLpMigration": "允许 LP 代币迁移", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 允许在不同应用程序之间共享和管理代币批准。", "pool.activePositions.appear": "你的活跃 V3 流动性头寸将在此处显示。", "pool.activeRange": "活动价格变动区间", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "在 Uniswap 上为 {{tokenPair}} ({{chain}}) 添加流动性", "pool.addMoreLiquidity": "添加更多流动性", "pool.apr": "年化利率", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1 天交易量/TVL", "pool.volume.thirtyDay": "30 天交易量", "pool.volume.thirtyDay.short": "30 天交易量", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "你的 V2 流动性", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "拆封", "swap.button.wrap": "封装", "swap.buy.countryModal.placeholder": "按国家或地区搜索", - "swap.cancel.cannotExecute": "你的兑换可能会在处理取消之前执行。你的网络费用无法退还。你想要继续吗?", - "swap.cancel.cannotExecute.plural": "你的兑换可能会在处理取消之前执行。你的网络费用无法退还。你想要继续吗?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "确认限额", "swap.confirmSwap": "确认兑换", "swap.deadline.settings.title": "交易截止日期", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} 费用", "swap.details.feeOnTransfer.default": "代币费用", "swap.details.newQuote.input": "新输入", @@ -1841,7 +1850,9 @@ "swap.review": "审查兑换", "swap.review.summary": "你正在交换", "swap.reviewLimit": "审核限额", - "swap.route.optimizedGasCost": "该路线通过考虑分割路线、多跳和每一步的 Gas 成本来优化总输出。", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "开启兑换保护后,你的以太坊交易将免受三明治攻击,从而降低失败的可能性。", "swap.settings.protection.subtitle.supported": "{{chainName}} 网络", "swap.settings.protection.subtitle.unavailable": "在 {{chainName}} 上不可用", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 资金池", "swap.settings.routingPreference.option.v4.title": "v4 资金池", "swap.settings.routingPreference.title": "交易选项", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "自动", "swap.settings.slippage.description": "如果价格变动超过滑点百分比,则你的交易将撤回。", "swap.settings.slippage.input.message": "如果价格进一步下滑,则你的交易将撤回。以下是保证你可收到的最低金额。", "swap.settings.slippage.input.receive.title": "至少收到", "swap.settings.slippage.output.message": "如果价格进一步下滑,则你的交易将撤回。以下是你需要花费的最高金额。", "swap.settings.slippage.output.spend.title": "最多花费", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "输入小于 {{maxSlippageTolerance}} 的值", "swap.settings.slippage.warning.message": "滑点可能高于必要水平", "swap.settings.slippage.warning.min": "输入大于 0 的值", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "应用程序", "transaction.details.from": "从", "transaction.details.networkFee": "网络费用", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "费率", "transaction.details.transaction": "交易", "transaction.details.uniswapFee": "费用 ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "正在撤销", "transaction.status.revoke.success": "已撤销", "transaction.status.revoke.successDapp": "已在 {{externalDappName}} 上撤销", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "已取消出售", "transaction.status.sell.canceling": "正在取消出售", "transaction.status.sell.failed": "未能出售", diff --git a/packages/uniswap/src/i18n/locales/translations/zh-TW.json b/packages/uniswap/src/i18n/locales/translations/zh-TW.json index c9a9decee6c..cedc77b379e 100644 --- a/packages/uniswap/src/i18n/locales/translations/zh-TW.json +++ b/packages/uniswap/src/i18n/locales/translations/zh-TW.json @@ -434,6 +434,7 @@ "common.liquidity.removed": "已移除流動資產", "common.loading": "正在載入", "common.loadingAllowance": "正在載入限額", + "common.loadMore": "Load more", "common.longText.button.less": "顯示更少", "common.longText.button.more": "顯示更多", "common.lowPrice": "低價", @@ -540,8 +541,8 @@ "common.resetLimit": "重設 {{symbol}} 限制", "common.resetLimitWallet": "重設 {{symbol}} 錢包限額", "common.resettingLimit": "正在重設 {{symbol}} 限制...", - "common.resolveIssue": "解決問題", - "common.resolveIssues": "解決 {{issues}} 問題", + "common.resolveIssues_one": "Resolve issue", + "common.resolveIssues_other": "Resolve {{count}} issues", "common.restricted.region": "限制區域", "common.return.label": "返回", "common.returnToTop": "回到頂部", @@ -602,21 +603,25 @@ "common.thisWeek": "本週", "common.thisYear": "今年", "common.time": "時間", - "common.time.day": "天", "common.time.days": "天", - "common.time.hour": "小時", + "common.time.days_one": "day", + "common.time.days_other": "days", "common.time.hours": "小時", + "common.time.hours_one": "hour", + "common.time.hours_other": "hours", "common.time.minute.amt": "{{time}} 分鐘", "common.time.minutes": "分鐘", - "common.time.month": "月", "common.time.months": "月", + "common.time.months_one": "month", + "common.time.months_other": "months", "common.time.past.days": "{{days}} 天前", "common.time.past.hours": "{{hours}} 小時前", "common.time.past.minutes": "{{minutes}} 分鐘前", "common.time.past.months": "{{months}} 個月前", "common.time.past.seconds": "{{seconds}} 秒前", - "common.time.week": "星期", "common.time.weeks": "星期", + "common.time.weeks_one": "week", + "common.time.weeks_other": "weeks", "common.tip.label": "提示:", "common.to": "到", "common.today": "今天", @@ -634,8 +639,8 @@ "common.transactions": "交易", "common.transactionSettings": "交易設定", "common.transactionSubmitted": "交易已提交", - "common.transfer": "轉移", - "common.transfers": "轉移", + "common.transfer_one": "transfer", + "common.transfer_other": "transfers", "common.tryAgain.error": "再試一次", "common.twitter": "推特", "common.type.label": "類型", @@ -856,6 +861,7 @@ "fee.tier.new": "新等級", "fee.tier.percent.select": "{{percentage}} 選擇", "fee.tier.recommended": "建議的", + "fee.tier.recommended.description": "Recommended based on having the highest share of liquidity for the selected token pair.", "fee.tier.search": "搜尋或建立其他交易費用等級", "fee.tier.search.short": "搜尋等級", "fee.tier.select": "選擇交易費用等級", @@ -866,6 +872,7 @@ "fiatOffRamp.checkout.title": "出售方式", "fiatOffRamp.connection.quote": "出售價值 {{amount}} 的 {{currencySymbol}}", "fiatOffRamp.error.balance": "超過餘額", + "fiatOffRamp.summary.total": "{{cryptoAmount}} for {{fiatAmount}}", "fiatOffRamp.unsupportedToken.back": "返回", "fiatOffRamp.unsupportedToken.divider": "不支援的代幣", "fiatOffRamp.unsupportedToken.message": "該代幣不支援出售。將此資產交換為受支援的代幣之一。", @@ -1033,7 +1040,6 @@ "liquidityPool.positions.page.title": "管理 Uniswap 上的 {{quoteSymbol}}/{{baseSymbol}} 資產池的流動資產", "liquidityPool.positions.page.version.description": "檢視你的主動 {{version}} 流動資產部位。新增部位。", "liquidityPool.positions.page.version.title": "在 Uniswap 上管理資產池的流動資產{{version}}", - "liquidityPool.positions.price": "{{amountWithSymbol}} 每 {{outputToken}}", "liquidityPool.positions.price.formatted": "", "migrate.allowed": "已允許", "migrate.allowLpMigration": "允許 LP 代幣遷移", @@ -1338,6 +1344,7 @@ "permit.approval.fail.message": "Permit2 允許在不同應用程式之間共用和管理代幣核准。", "pool.activePositions.appear": "你的活躍 V3 流動資產部位將顯示在此。", "pool.activeRange": "活躍價格點範圍", + "pool.addAs": "Add as {{nativeWrappedSymbol}}", "pool.addLiquidity.seoTitle": "為 Uniswap 上的 {{tokenPair}} ({{chain}}) 新增流動資產", "pool.addMoreLiquidity": "新增更多流動資產", "pool.apr": "年利率", @@ -1451,6 +1458,7 @@ "pool.volOverTvl": "1 天成交量/TVL", "pool.volume.thirtyDay": "30 天交易量", "pool.volume.thirtyDay.short": "30 天交易量", + "pool.withdrawAs": "Withdraw as {{nativeWrappedSymbol}}", "pool.yourv2": "你的 V2 流動資產", "poolFinder.availablePools": "Available pools", "poolFinder.availablePools.found.description": "v2 pools matching your pair selection.", @@ -1773,11 +1781,12 @@ "swap.button.unwrap": "拆封", "swap.button.wrap": "包裝", "swap.buy.countryModal.placeholder": "依國家或地區搜尋", - "swap.cancel.cannotExecute": "你的交換可能在取消處理之前就已經執行。你的網路費無法退還。你是否要繼續?", - "swap.cancel.cannotExecute.plural": "你的交換可能在取消處理之前就已經執行。你的網路費無法退還。你是否要繼續?", + "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", + "swap.cancel.cannotExecute_other": "Your swaps could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?", "swap.confirmLimit": "確認限額", "swap.confirmSwap": "確認交換", "swap.deadline.settings.title": "交易截止日期", + "swap.deadline.settings.title.short": "Tx. deadline", "swap.details.feeOnTransfer": "{{tokenSymbol}} 交易費用", "swap.details.feeOnTransfer.default": "代幣交易費用", "swap.details.newQuote.input": "新輸入", @@ -1841,7 +1850,9 @@ "swap.review": "審核交換", "swap.review.summary": "你正在交換", "swap.reviewLimit": "審核限制", - "swap.route.optimizedGasCost": "該路徑透過考慮分割路線、多跳以及每個步驟的 Gas 費用來讓總轉出達到最佳化。", + "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.", + "swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).", + "swap.settings.deadline.warning": "High deadline", "swap.settings.protection.description": "啟用交換保護後,你的乙太幣交易將免受三明治攻擊,並減少失敗的可能性。", "swap.settings.protection.subtitle.supported": "{{chainName}} 網路", "swap.settings.protection.subtitle.unavailable": "不適用於 {{chainName}}", @@ -1852,12 +1863,16 @@ "swap.settings.routingPreference.option.v3.title": "v3 資產池", "swap.settings.routingPreference.option.v4.title": "v4 資產池", "swap.settings.routingPreference.title": "交易選項", + "swap.settings.slippage.alert": "High slippage", "swap.settings.slippage.control.auto": "自動", "swap.settings.slippage.description": "如果價格變化超過滑點百分比,你的交易將還原。", "swap.settings.slippage.input.message": "如果價格進一步下滑,你的交易將還原。以下是你保證可收到的最低金額。", "swap.settings.slippage.input.receive.title": "至少收到", "swap.settings.slippage.output.message": "如果價格進一步下滑,你的交易將還原。以下是你需要花費的最高金額。", "swap.settings.slippage.output.spend.title": "花費最多", + "swap.settings.slippage.warning": "Very high slippage", + "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.", + "swap.settings.slippage.warning.hover": "This may result in an unfavorable trade. Try lowering your slippage setting.", "swap.settings.slippage.warning.max": "輸入小於 {{maxSlippageTolerance}} 的值", "swap.settings.slippage.warning.message": "滑價可能高於必要值", "swap.settings.slippage.warning.min": "輸入大於 0 的值", @@ -2110,6 +2125,7 @@ "transaction.details.dappName": "應用程式", "transaction.details.from": "從", "transaction.details.networkFee": "網路費", + "transaction.details.providerFee": "Provider fee", "transaction.details.swapRate": "費率", "transaction.details.transaction": "交易", "transaction.details.uniswapFee": "交易費用 ({{ feePercent }}%)", @@ -2161,6 +2177,11 @@ "transaction.status.revoke.pending": "正在撤銷", "transaction.status.revoke.success": "已撤銷", "transaction.status.revoke.successDapp": "已於 {{externalDappName}} 撤銷", + "transaction.status.sale.canceled": "Canceled sale", + "transaction.status.sale.canceling": "Canceling sale", + "transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}", + "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}", + "transaction.status.sale.successOn": "Sold via {{serviceProvider}}", "transaction.status.sell.canceled": "已取消出售", "transaction.status.sell.canceling": "正在取消出售", "transaction.status.sell.failed": "出售失敗", diff --git a/packages/uniswap/src/i18n/shared.ts b/packages/uniswap/src/i18n/shared.ts index ae34a039265..dcdd11c3352 100644 --- a/packages/uniswap/src/i18n/shared.ts +++ b/packages/uniswap/src/i18n/shared.ts @@ -1,3 +1 @@ -export type PluralProps = { value: number; one: string; other: string } - export class MissingI18nInterpolationError extends Error {} diff --git a/packages/uniswap/src/i18n/useTranslation.ts b/packages/uniswap/src/i18n/useTranslation.ts deleted file mode 100644 index 05b99cdd67f..00000000000 --- a/packages/uniswap/src/i18n/useTranslation.ts +++ /dev/null @@ -1,15 +0,0 @@ -import i18n, { t } from 'i18next' -import { useTranslation as useTranslationOG } from 'react-i18next' -import { isTestEnv } from 'utilities/src/environment/env' - -// the types in react-i18next are odd because it returns an array and an object -// so simplifying it to just be an object -type UseTranslationReturn = { - t: typeof t - i18n: typeof i18n - ready: boolean -} - -export const useTranslation: () => UseTranslationReturn = isTestEnv() - ? (): UseTranslationReturn => ({ i18n, t, ready: true }) - : useTranslationOG diff --git a/packages/uniswap/src/react-native-dotenv.d.ts b/packages/uniswap/src/react-native-dotenv.d.ts index ae102892756..6710386f280 100644 --- a/packages/uniswap/src/react-native-dotenv.d.ts +++ b/packages/uniswap/src/react-native-dotenv.d.ts @@ -31,4 +31,14 @@ declare module 'react-native-dotenv' { export const QUICKNODE_SEPOLIA_RPC_URL: string export const TRADING_API_KEY: string export const FIREBASE_APP_CHECK_DEBUG_TOKEN: string + export const AMPLITUDE_PROXY_URL_OVERRIDE: string + export const API_BASE_URL_OVERRIDE: string + export const API_BASE_URL_V2_OVERRIDE: string + export const FIAT_ON_RAMP_API_URL_OVERRIDE: string + export const FOR_API_URL_OVERRIDE: string + export const GRAPHQL_URL_OVERRIDE: string + export const SCANTASTIC_API_URL_OVERRIDE: string + export const STATSIG_PROXY_URL_OVERRIDE: string + export const TRADING_API_URL_OVERRIDE: string + export const UNITAGS_API_URL_OVERRIDE: string } diff --git a/packages/uniswap/src/state/uniswapReducer.ts b/packages/uniswap/src/state/uniswapReducer.ts index ff9e69aa965..17775821431 100644 --- a/packages/uniswap/src/state/uniswapReducer.ts +++ b/packages/uniswap/src/state/uniswapReducer.ts @@ -3,6 +3,7 @@ import { uniswapBehaviorHistoryReducer } from 'uniswap/src/features/behaviorHist import { favoritesReducer } from 'uniswap/src/features/favorites/slice' import { getFiatOnRampAggregatorApi } from 'uniswap/src/features/fiatOnRamp/api' import { notificationReducer } from 'uniswap/src/features/notifications/slice' +import { portfolioReducer } from 'uniswap/src/features/portfolio/slice/slice' import { searchHistoryReducer } from 'uniswap/src/features/search/searchHistorySlice' import { userSettingsReducer } from 'uniswap/src/features/settings/slice' import { timingReducer } from 'uniswap/src/features/timing/slice' @@ -14,6 +15,7 @@ export const uniswapReducers = { [getFiatOnRampAggregatorApi().reducerPath]: getFiatOnRampAggregatorApi().reducer, favorites: favoritesReducer, notifications: notificationReducer, + portfolio: portfolioReducer, searchHistory: searchHistoryReducer, timing: timingReducer, tokens: tokensReducer, @@ -28,6 +30,7 @@ export const uniswapReducer = combineReducers(uniswapReducers) export const uniswapPersistedStateList: Array = [ 'favorites', + 'portfolio', 'searchHistory', 'tokens', 'transactions', diff --git a/packages/utilities/jest-package-mocks.js b/packages/utilities/jest-package-mocks.js new file mode 100644 index 00000000000..ef6b0b4b9c1 --- /dev/null +++ b/packages/utilities/jest-package-mocks.js @@ -0,0 +1,45 @@ +/** + * Common mocks for this package. This file is intended to be imported in the jest-setup.js file of the package. + * + * Notes: + * * Try not to add test specific mocks here. + * * Be wary of the import order. + * * mocks can be overridden + */ + +const util = require('util') + +global.TextEncoder = util.TextEncoder +global.TextDecoder = util.TextDecoder + +jest.mock('expo-localization', () => ({ + getLocales: () => [ + { + languageCode: 'en', + languageTag: 'en-US', + regionCode: null, + currencyCode: null, + currencySymbol: null, + decimalSeparator: null, + digitGroupingSeparator: null, + textDirection: null, + measurementSystem: null, + temperatureUnit: null, + }, + ], +})) + +jest.mock('utilities/src/environment/env', () => ({ + isTestEnv: jest.fn(() => true), + isDevEnv: jest.fn(() => false), + isBetaEnv: jest.fn(() => false), + isProdEnv: jest.fn(() => false), + isRNDev: jest.fn(() => true), +})) + +jest.mock('@datadog/browser-logs', () => ({ + datadogLogs: { + // leave it empty as we should avoid it in test mode + logger: {}, + }, +})) diff --git a/packages/utilities/jest-setup.js b/packages/utilities/jest-setup.js index cd67d3628b6..de4074feac3 100644 --- a/packages/utilities/jest-setup.js +++ b/packages/utilities/jest-setup.js @@ -1,3 +1,4 @@ /* eslint-env es6, es2017, es2018 */ +require('utilities/jest-package-mocks') Object.assign(global, require('jest-chrome')) diff --git a/packages/utilities/src/environment/constants.ts b/packages/utilities/src/environment/constants.ts index 6bdef89b9c9..11de47a93b4 100644 --- a/packages/utilities/src/environment/constants.ts +++ b/packages/utilities/src/environment/constants.ts @@ -1,10 +1,12 @@ +import { isRNDev } from 'utilities/src/environment/env' + export const isDetoxBuild = Boolean(process.env.DETOX_MODE) export const isJestRun = !!process.env.JEST_WORKER_ID -export const isNonJestDev = window.__DEV__ && !isJestRun +export const isNonJestDev = isRNDev() && !isJestRun /** * When enabled, all sessions and resources will be tracked in * DataDog RUM. Logs that are sent to productions will also be * sent from your local development. */ export const localDevDatadogEnabled = false -export const datadogEnabled = localDevDatadogEnabled || !window.__DEV__ +export const datadogEnabled = (localDevDatadogEnabled || !isRNDev()) && !isJestRun diff --git a/packages/utilities/src/environment/env.native.ts b/packages/utilities/src/environment/env.native.ts index 4c8117aa561..2d4ef7265a2 100644 --- a/packages/utilities/src/environment/env.native.ts +++ b/packages/utilities/src/environment/env.native.ts @@ -17,3 +17,7 @@ export function isBetaEnv(): boolean { export function isProdEnv(): boolean { return BUNDLE_ID === 'com.uniswap.mobile' } + +export function isRNDev(): boolean { + return __DEV__ +} diff --git a/packages/utilities/src/environment/env.ts b/packages/utilities/src/environment/env.ts index 711b135b944..6b5c5824d0b 100644 --- a/packages/utilities/src/environment/env.ts +++ b/packages/utilities/src/environment/env.ts @@ -15,3 +15,14 @@ export function isBetaEnv(): boolean { export function isProdEnv(): boolean { throw new PlatformSplitStubError('isProdEnv') } + +export function isRNDev(): boolean { + // Ugly hack to get around the fact that cypress accesses this function during setup + // and doesn't know it's actually a web function it just throws the PlatformSplitStubError + // so we need to early return false here + if (window.Cypress) { + return false + } + + throw new PlatformSplitStubError('isRNDev') +} diff --git a/packages/utilities/src/environment/env.web.ts b/packages/utilities/src/environment/env.web.ts index 2057809205d..02869c34843 100644 --- a/packages/utilities/src/environment/env.web.ts +++ b/packages/utilities/src/environment/env.web.ts @@ -57,3 +57,7 @@ function createAndLogError(funcName: string): Error { }) return e } + +export function isRNDev(): boolean { + return false +} diff --git a/packages/wallet/jest-package-mocks.js b/packages/wallet/jest-package-mocks.js new file mode 100644 index 00000000000..3f7755b78cf --- /dev/null +++ b/packages/wallet/jest-package-mocks.js @@ -0,0 +1,21 @@ +/** + * Common mocks for this package. This file is intended to be imported in the jest-setup.js file of the package. + * + * Notes: + * * Try not to add test specific mocks here. + * * Be wary of the import order. + * * mocks can be overridden + */ +import mockRNLocalize from 'react-native-localize/mock' +import { AppearanceSettingType } from 'wallet/src/features/appearance/slice' + +jest.mock('react-native-localize', () => mockRNLocalize) + +// Mock the appearance hook for all tests +const mockAppearanceSetting = AppearanceSettingType.System +jest.mock('wallet/src/features/appearance/hooks', () => { + return { + useSelectedColorScheme: () => 'light', + useCurrentAppearanceSetting: () => mockAppearanceSetting, + } +}) diff --git a/packages/wallet/jest-setup.js b/packages/wallet/jest-setup.js index 4c1306618b3..2a0015f7476 100644 --- a/packages/wallet/jest-setup.js +++ b/packages/wallet/jest-setup.js @@ -1,27 +1,10 @@ -import 'uniswap/src/i18n/i18n' // Uses real translations for tests -import 'utilities/src/logger/mocks' +import 'utilities/jest-package-mocks' +import 'ui/jest-package-mocks' +import 'uniswap/jest-package-mocks' +import 'wallet/jest-package-mocks' -import { localizeMock as mockRNLocalize } from 'react-native-localize/mock' -import { AppearanceSettingType } from 'wallet/src/features/appearance/slice' -import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale' -import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider' -import { mockUIAssets } from 'ui/src/test/mocks/mockUIAssets' +import 'uniswap/src/i18n' // Uses real translations for tests -jest.mock('react-native-localize', () => mockRNLocalize) -jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({})) - -// Mock the appearance hook for all tests -const mockAppearanceSetting = AppearanceSettingType.System -jest.mock('wallet/src/features/appearance/hooks', () => { - return { - useCurrentAppearanceSetting: () => mockAppearanceSetting, - } -}) -jest.mock('wallet/src/features/appearance/hooks', () => { - return { - useSelectedColorScheme: () => 'light', - } -}) jest.mock('uniswap/src/features/gas/hooks', () => ({ useActiveGasStrategy: jest.fn().mockReturnValue({ @@ -33,12 +16,6 @@ jest.mock('uniswap/src/features/gas/hooks', () => ({ useShadowGasStrategies: jest.fn().mockReturnValue([]), })) -jest.mock('utilities/src/environment/env', () => ({ - isTestEnv: jest.fn(() => true), - isDevEnv: jest.fn(() => false), - isBetaEnv: jest.fn(() => false), - isProdEnv: jest.fn(() => false), -})) jest.mock('react-native-safe-area-context', () => ({ useSafeAreaInsets: jest.fn().mockImplementation(() => ({})), @@ -69,10 +46,4 @@ Object.defineProperty(global, "crypto", { }, }); -import { TextEncoder, TextDecoder } from 'util'; -global.TextEncoder = TextEncoder; -global.TextDecoder = TextDecoder; - -jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider) -mockUIAssets() diff --git a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx index a3eb17fedaa..345a946abd5 100644 --- a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx +++ b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx @@ -98,6 +98,7 @@ describe(LogoWithTxStatus, () => { TransactionType.Send, TransactionType.OnRampPurchase, TransactionType.OnRampTransfer, + TransactionType.OffRampSale, TransactionType.Receive, TransactionType.NFTMint, TransactionType.Unknown, diff --git a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx index 3a8860112a4..cd5bbceb42f 100644 --- a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx +++ b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx @@ -11,7 +11,7 @@ import { ArrowUpInCircle, QuestionInCircle, } from 'ui/src/components/icons' -import { borderRadii } from 'ui/src/theme' +import { borderRadii, zIndices } from 'ui/src/theme' import { CurrencyLogo, STATUS_RATIO } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo' import { TransactionSummaryNetworkLogo } from 'uniswap/src/components/CurrencyLogo/NetworkLogo' import { AssetType } from 'uniswap/src/entities/assets' @@ -103,6 +103,7 @@ export function LogoWithTxStatus(props: LogoWithTxStatusProps): JSX.Element { Icon = Approve break case TransactionType.Send: + case TransactionType.OffRampSale: Icon = ArrowUpInCircle break case TransactionType.NFTTrade: @@ -144,7 +145,7 @@ export function LogoWithTxStatus(props: LogoWithTxStatusProps): JSX.Element { {logo ?? icon} {logo && icon && ( - + {icon} )} diff --git a/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap b/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap index c4dd6a44819..7869d7fc434 100644 --- a/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap +++ b/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap @@ -127,6 +127,7 @@ exports[`DappLogoWithWCBadge renders without error 1`] = ` "height": 21, "overflow": "hidden", "width": 21, + "zIndex": 10, } } testID="network-logo" @@ -176,6 +177,7 @@ exports[`LogoWithTxStatus renders without error 1`] = ` } > @@ -225,6 +227,7 @@ exports[`LogoWithTxStatus renders without error 1`] = ` "aspectRatio": undefined, "borderRadius": 20, "objectFit": "contain", + "zIndex": 1, } } width={40} @@ -238,6 +241,7 @@ exports[`LogoWithTxStatus renders without error 1`] = ` "flexDirection": "column", "position": "absolute", "right": -4, + "zIndex": 10, } } > diff --git a/packages/wallet/src/components/accounts/AddressDisplay.tsx b/packages/wallet/src/components/accounts/AddressDisplay.tsx index 864d3afacc3..b0395dc80fa 100644 --- a/packages/wallet/src/components/accounts/AddressDisplay.tsx +++ b/packages/wallet/src/components/accounts/AddressDisplay.tsx @@ -194,7 +194,7 @@ export function AddressDisplay({ {showViewOnlyLabel && ( - + {t('settings.section.wallet.label.viewOnly')} diff --git a/packages/wallet/src/components/introCards/IntroCard.tsx b/packages/wallet/src/components/introCards/IntroCard.tsx index 33346813339..a01bed8e36a 100644 --- a/packages/wallet/src/components/introCards/IntroCard.tsx +++ b/packages/wallet/src/components/introCards/IntroCard.tsx @@ -1,4 +1,5 @@ import { useCallback, useMemo } from 'react' +import { useTranslation } from 'react-i18next' import { ClickableWithinGesture, ElementAfterText, @@ -22,7 +23,6 @@ import { DappRequestCardLoggingName, OnboardingCardLoggingName, } from 'uniswap/src/features/telemetry/types' -import { useTranslation } from 'uniswap/src/i18n' import { isExtension } from 'utilities/src/platform' export enum CardType { diff --git a/packages/wallet/src/components/nfts/ShowNFTModal.tsx b/packages/wallet/src/components/nfts/ShowNFTModal.tsx index f4835aa1b37..1302cc4a649 100644 --- a/packages/wallet/src/components/nfts/ShowNFTModal.tsx +++ b/packages/wallet/src/components/nfts/ShowNFTModal.tsx @@ -1,5 +1,5 @@ -import { t } from 'i18next' import { useState } from 'react' +import { useTranslation } from 'react-i18next' import { Flex } from 'ui/src' import { ShieldCheck } from 'ui/src/components/icons' import { InfoLinkModal } from 'uniswap/src/components/modals/InfoLinkModal' @@ -10,6 +10,7 @@ import { isExtension } from 'utilities/src/platform' import { InformationBanner } from 'wallet/src/components/banners/InformationBanner' export function ShowNFTModal(): JSX.Element { + const { t } = useTranslation() const [isModalVisible, setModalVisible] = useState(false) const handlePressToken = (): void => { diff --git a/packages/wallet/src/data/apollo/usePersistedApolloClient.tsx b/packages/wallet/src/data/apollo/usePersistedApolloClient.tsx index dc976756722..35484ad35c7 100644 --- a/packages/wallet/src/data/apollo/usePersistedApolloClient.tsx +++ b/packages/wallet/src/data/apollo/usePersistedApolloClient.tsx @@ -1,4 +1,5 @@ import { ApolloClient, ApolloLink, from, NormalizedCacheObject } from '@apollo/client' +import { ToolkitStore } from '@reduxjs/toolkit/dist/configureStore' import { PersistentStorage } from 'apollo3-cache-persist/lib/types' import { useCallback, useState } from 'react' import { @@ -9,6 +10,7 @@ import { getPerformanceLink, getRestLink, } from 'uniswap/src/data/links' +import { getInstantTokenBalanceUpdateApolloLink } from 'uniswap/src/features/portfolio/portfolioUpdates/getInstantTokenBalanceUpdateApolloLink' import { WalletEventName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send' import { getDatadogApolloLink } from 'utilities/src/logger/datadogLink' @@ -64,10 +66,12 @@ export const usePersistedApolloClient = ({ storageWrapper, maxCacheSizeInBytes, customEndpoint, + reduxStore, }: { storageWrapper: PersistentStorage maxCacheSizeInBytes: number customEndpoint?: CustomEndpoint + reduxStore: ToolkitStore }): ApolloClient | undefined => { const [client, setClient] = useState>() const signerManager = useWalletSigners() @@ -94,6 +98,7 @@ export const usePersistedApolloClient = ({ // eslint-disable-next-line @typescript-eslint/no-explicit-any getPerformanceLink((args: any) => sendAnalyticsEvent(WalletEventName.PerformanceGraphql, args)), getOnRampAuthLink(accounts, signerManager), + getInstantTokenBalanceUpdateApolloLink({ reduxStore }), restLink, ] if (isMobileApp) { diff --git a/packages/wallet/src/features/fiatOnRamp/api.ts b/packages/wallet/src/features/fiatOnRamp/api.ts index 0eb90ebd98d..bf1f1a5c221 100644 --- a/packages/wallet/src/features/fiatOnRamp/api.ts +++ b/packages/wallet/src/features/fiatOnRamp/api.ts @@ -3,28 +3,30 @@ import { uniswapUrls } from 'uniswap/src/constants/urls' import { objectToQueryString } from 'uniswap/src/data/utils' import { FOR_API_HEADERS } from 'uniswap/src/features/fiatOnRamp/constants' import { + FORTransactionDetails, FORTransactionResponse, - FiatOnRampTransactionDetails, OffRampTransferDetailsResponse, } from 'uniswap/src/features/fiatOnRamp/types' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { getFeatureFlag } from 'uniswap/src/features/gating/hooks' -import { TransactionStatus } from 'uniswap/src/features/transactions/types/transactionDetails' +import { TransactionStatus, TransactionType } from 'uniswap/src/features/transactions/types/transactionDetails' import { logger } from 'utilities/src/logger/logger' import { ONE_MINUTE_MS } from 'utilities/src/time/time' -import { extractFiatOnRampTransactionDetails } from 'wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails' +import { extractFORTransactionDetails } from 'wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails' const FIAT_ONRAMP_STALE_TX_TIMEOUT = ONE_MINUTE_MS * 20 const FIAT_ONRAMP_FORCE_FETCH_TX_TIMEOUT = ONE_MINUTE_MS * 5 /** - * Utility to fetch fiat onramp transactions + * Utility to fetch FOR transactions */ -export async function fetchFiatOnRampTransaction( - previousTransactionDetails: FiatOnRampTransactionDetails, +export async function fetchFORTransaction( + previousTransactionDetails: FORTransactionDetails, forceFetch: boolean, -): Promise { + activeAccountAddress: Address | null, +): Promise { const isForMigrationEnabled = getFeatureFlag(FeatureFlags.ForMonorepoMigration) + const isOffRamp = previousTransactionDetails.typeInfo.type === TransactionType.LocalOffRamp const isRecent = dayjs(previousTransactionDetails.addedTime).isAfter( dayjs().subtract(FIAT_ONRAMP_FORCE_FETCH_TX_TIMEOUT, 'ms'), ) @@ -75,7 +77,7 @@ export async function fetchFiatOnRampTransaction( } } - return extractFiatOnRampTransactionDetails(transaction) + return extractFORTransactionDetails(transaction, isOffRamp, activeAccountAddress) } export async function fetchOffRampTransferDetails(sessionId: string): Promise { diff --git a/packages/wallet/src/features/notifications/components/ChangeAssetVisibilityNotification.tsx b/packages/wallet/src/features/notifications/components/ChangeAssetVisibilityNotification.tsx index 7c4d2e1963c..ba423d98225 100644 --- a/packages/wallet/src/features/notifications/components/ChangeAssetVisibilityNotification.tsx +++ b/packages/wallet/src/features/notifications/components/ChangeAssetVisibilityNotification.tsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' import { useSporeColors } from 'ui/src' -import EyeOffIcon from 'ui/src/assets/icons/eye-off.svg' -import EyeIcon from 'ui/src/assets/icons/eye.svg' +import { Eye } from 'ui/src/components/icons/Eye' +import { EyeOff } from 'ui/src/components/icons/EyeOff' import { iconSizes } from 'ui/src/theme' import { ChangeAssetVisibilityNotification as ChangeAssetVisibilityNotificationType } from 'uniswap/src/features/notifications/types' import { NotificationToast } from 'wallet/src/features/notifications/components/NotificationToast' @@ -20,9 +20,9 @@ export function ChangeAssetVisibilityNotification({ hideDelay={hideDelay} icon={ visible ? ( - + ) : ( - + ) } title={ diff --git a/packages/wallet/src/features/notifications/utils.ts b/packages/wallet/src/features/notifications/utils.ts index d4507d56448..bdc5f980ae1 100644 --- a/packages/wallet/src/features/notifications/utils.ts +++ b/packages/wallet/src/features/notifications/utils.ts @@ -4,7 +4,7 @@ import { LocalizationContextState } from 'uniswap/src/features/language/Localiza import { GQLNftAsset } from 'uniswap/src/features/nfts/types' import { WalletConnectNotification } from 'uniswap/src/features/notifications/types' import { TransactionStatus, TransactionType } from 'uniswap/src/features/transactions/types/transactionDetails' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { WalletConnectEvent } from 'uniswap/src/types/walletConnect' import { getValidAddress } from 'uniswap/src/utils/addresses' import { getCurrencyDisplayText, getFormattedCurrencyAmount, getSymbolDisplayText } from 'uniswap/src/utils/currency' diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/HeaderLogo.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/HeaderLogo.tsx index 77c7c99faae..97f82b42fc7 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/HeaderLogo.tsx +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/HeaderLogo.tsx @@ -15,6 +15,7 @@ import { NFTApproveTransactionInfo, NFTMintTransactionInfo, NFTTradeTransactionInfo, + OffRampSaleInfo, OnRampPurchaseInfo, OnRampTransferInfo, ReceiveTokenTransactionInfo, @@ -30,10 +31,12 @@ import { SwapTypeTransactionInfo, isApproveTransactionInfo, isBridgeTransactionInfo, + isLocalOffRampTransactionInfo, isLocalOnRampTransactionInfo, isNFTApproveTransactionInfo, isNFTMintTransactionInfo, isNFTTradeTransactionInfo, + isOffRampSaleTransactionInfo, isOnRampPurchaseTransactionInfo, isOnRampTransferTransactionInfo, isReceiveTokenTransactionInfo, @@ -103,8 +106,10 @@ export function HeaderLogo({ transactionDetails }: HeaderLogoProps): JSX.Element return } else if (isOnRampPurchaseTransactionInfo(typeInfo) || isOnRampTransferTransactionInfo(typeInfo)) { return - } else if (isLocalOnRampTransactionInfo(typeInfo)) { - return null // LocalOnRamp transactions are never visible + } else if (isOffRampSaleTransactionInfo(typeInfo)) { + return + } else if (isLocalOnRampTransactionInfo(typeInfo) || isLocalOffRampTransactionInfo(typeInfo)) { + return null // Local FOR transactions are never visible } else { return } @@ -193,6 +198,15 @@ function OnRampHeaderLogo({ }) } +function OffRampHeaderLogo({ transactionDetails, typeInfo }: SpecificHeaderLogoProps): JSX.Element { + const currencyInfo = useCurrencyInfo(buildCurrencyId(transactionDetails.chainId, typeInfo.destinationTokenAddress)) + return getLogoWithTxStatus({ + assetType: AssetType.Currency, + currencyInfo, + transactionDetails, + }) +} + function NFTHeaderLogo({ transactionDetails, typeInfo, diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx new file mode 100644 index 00000000000..b6e6afb7310 --- /dev/null +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx @@ -0,0 +1,46 @@ +import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext' +import { ValueType } from 'uniswap/src/features/tokens/getCurrencyAmount' +import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' +import { + OffRampSaleInfo, + TransactionDetails, + TransactionType, +} from 'uniswap/src/features/transactions/types/transactionDetails' +import { getSymbolDisplayText } from 'uniswap/src/utils/currency' +import { CurrencyTransferContent } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/TransferTransactionDetails' +import { useFormattedCurrencyAmountAndUSDValue } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/utils' +import { buildCurrencyId } from 'wallet/src/utils/currencyId' + +export function OffRampTransactionDetails({ + transactionDetails, + typeInfo, + onClose, +}: { + transactionDetails: TransactionDetails + typeInfo: OffRampSaleInfo + onClose: () => void +}): JSX.Element { + const formatter = useLocalizationContext() + const currencyInfo = useCurrencyInfo(buildCurrencyId(transactionDetails.chainId, typeInfo.destinationTokenAddress)) + + const { amount, value } = useFormattedCurrencyAmountAndUSDValue({ + currency: currencyInfo?.currency, + currencyAmountRaw: typeInfo.destinationTokenAmount?.toString(), + formatter, + isApproximateAmount: false, + valueType: ValueType.Exact, + }) + const symbol = getSymbolDisplayText(currencyInfo?.currency.symbol) + + const tokenAmountWithSymbol = symbol ? amount + ' ' + symbol : amount // Prevents 'undefined' from being displayed + + return ( + + ) +} diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx index 6c23a1a1fcd..466fa479e92 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx @@ -19,6 +19,9 @@ import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' import { isUniswapX } from 'uniswap/src/features/transactions/swap/utils/routing' import { BridgeTransactionInfo, + OffRampSaleInfo, + OnRampPurchaseInfo, + OnRampTransferInfo, TransactionDetails, TransactionType, } from 'uniswap/src/features/transactions/types/transactionDetails' @@ -108,24 +111,17 @@ export function useTransactionDetailsInfoRows( break case TransactionType.OnRampPurchase: case TransactionType.OnRampTransfer: + specificRows.push() + break + case TransactionType.OffRampSale: specificRows.push( - - - {typeInfo.serviceProvider.name} + + + {typeInfo.transactionFee} {typeInfo.destinationTokenSymbol} + , ) + specificRows.push() break case TransactionType.Bridge: if (isShowingMore) { @@ -323,3 +319,32 @@ function UniswapFeeRow({ typeInfo }: { typeInfo: SwapTypeTransactionInfo }): JSX ) } + +function FORProviderRow({ + isDarkMode, + typeInfo, +}: { + isDarkMode: boolean + typeInfo: OnRampPurchaseInfo | OnRampTransferInfo | OffRampSaleInfo +}): JSX.Element { + const { t } = useTranslation() + + return ( + + + {typeInfo.serviceProvider.name} + + ) +} diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsModal.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsModal.tsx index ca2f386b32b..34074c0c4f0 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsModal.tsx +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsModal.tsx @@ -20,6 +20,7 @@ import { ApproveTransactionDetails } from 'wallet/src/features/transactions/Summ import { BridgeTransactionDetails } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/BridgeTransactionDetails' import { HeaderLogo } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/HeaderLogo' import { NftTransactionDetails } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/NftTransactionDetails' +import { OffRampTransactionDetails } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails' import { OnRampTransactionDetails } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/OnRampTransactionDetails' import { SwapTransactionDetails } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/SwapTransactionDetails' import { TransactionDetailsInfoRows } from 'wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows' @@ -31,6 +32,7 @@ import { isNFTApproveTransactionInfo, isNFTMintTransactionInfo, isNFTTradeTransactionInfo, + isOffRampSaleTransactionInfo, isOnRampPurchaseTransactionInfo, isOnRampTransferTransactionInfo, isReceiveTokenTransactionInfo, @@ -129,6 +131,8 @@ export function TransactionDetailsContent({ return } else if (isOnRampPurchaseTransactionInfo(typeInfo) || isOnRampTransferTransactionInfo(typeInfo)) { return + } else if (isOffRampSaleTransactionInfo(typeInfo)) { + return } else { return null } diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionParticipantDisplay.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionParticipantDisplay.tsx index ba51d7682ec..8c802714ee5 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionParticipantDisplay.tsx +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionParticipantDisplay.tsx @@ -11,6 +11,7 @@ export function TransactionParticipantDisplay({ address }: { address: string }): size={iconSizes.icon16} horizontalGap="$spacing6" variant="body3" + disableForcedWidth={true} /> ) diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/__snapshots__/TransactionDetailsModal.test.tsx.snap b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/__snapshots__/TransactionDetailsModal.test.tsx.snap index 51e5b3a61ef..48e2e83e69a 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/__snapshots__/TransactionDetailsModal.test.tsx.snap +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/__snapshots__/TransactionDetailsModal.test.tsx.snap @@ -136,6 +136,7 @@ exports[`TransactionDetails Components renders TransactionDetailsHeader without "flexDirection": "column", "position": "absolute", "right": -4, + "zIndex": 10, } } > @@ -150,6 +151,7 @@ exports[`TransactionDetails Components renders TransactionDetailsHeader without "height": 21, "overflow": "hidden", "width": 21, + "zIndex": 10, } } testID="network-logo" @@ -443,6 +445,7 @@ exports[`TransactionDetails Components renders TransactionDetailsInfoRows withou "height": 16, "overflow": "hidden", "width": 16, + "zIndex": 10, } } testID="network-logo" @@ -678,6 +681,7 @@ exports[`TransactionDetails Components renders TransactionDetailsInfoRows withou "height": 16, "overflow": "hidden", "width": 16, + "zIndex": 10, } } testID="network-logo" diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/types.ts b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/types.ts index bc2f6a53708..819ada2b8f2 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/types.ts +++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/types.ts @@ -3,7 +3,9 @@ import { ConfirmedSwapTransactionInfo, ExactInputSwapTransactionInfo, ExactOutputSwapTransactionInfo, + LocalOffRampTransactionInfo, LocalOnRampTransactionInfo, + OffRampSaleInfo, OnRampPurchaseInfo, OnRampTransferInfo, UnknownTransactionInfo, @@ -39,10 +41,18 @@ export function isOnRampTransferTransactionInfo(typeInfo: TransactionTypeInfo): return typeInfo.type === TransactionType.OnRampTransfer } +export function isOffRampSaleTransactionInfo(typeInfo: TransactionTypeInfo): typeInfo is OffRampSaleInfo { + return typeInfo.type === TransactionType.OffRampSale +} + export function isLocalOnRampTransactionInfo(typeInfo: TransactionTypeInfo): typeInfo is LocalOnRampTransactionInfo { return typeInfo.type === TransactionType.LocalOnRamp } +export function isLocalOffRampTransactionInfo(typeInfo: TransactionTypeInfo): typeInfo is LocalOffRampTransactionInfo { + return typeInfo.type === TransactionType.LocalOffRamp +} + export function isNFTApproveTransactionInfo(typeInfo: TransactionTypeInfo): typeInfo is NFTApproveTransactionInfo { return typeInfo.type === TransactionType.NFTApprove } diff --git a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/OffRampTransferSummaryItem.tsx b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/OffRampTransferSummaryItem.tsx new file mode 100644 index 00000000000..ac613d0fa33 --- /dev/null +++ b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/OffRampTransferSummaryItem.tsx @@ -0,0 +1,47 @@ +import { useTranslation } from 'react-i18next' +import { AssetType } from 'uniswap/src/entities/assets' +import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext' +import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' +import { OffRampSaleInfo, TransactionDetails } from 'uniswap/src/features/transactions/types/transactionDetails' +import { getSymbolDisplayText } from 'uniswap/src/utils/currency' +import { buildCurrencyId } from 'uniswap/src/utils/currencyId' +import { LogoWithTxStatus } from 'wallet/src/components/CurrencyLogo/LogoWithTxStatus' +import { TransactionSummaryLayout } from 'wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionSummaryLayout' +import { SummaryItemProps } from 'wallet/src/features/transactions/SummaryCards/types' +import { TXN_HISTORY_ICON_SIZE } from 'wallet/src/features/transactions/SummaryCards/utils' + +export function OffRampTransferSummaryItem({ + transaction, +}: SummaryItemProps & { + transaction: TransactionDetails & { typeInfo: OffRampSaleInfo } +}): JSX.Element { + const { t } = useTranslation() + const { formatNumberOrString } = useLocalizationContext() + + const { chainId, typeInfo } = transaction + const { destinationTokenSymbol, destinationTokenAddress, destinationTokenAmount } = typeInfo + + const outputCurrencyInfo = useCurrencyInfo(buildCurrencyId(chainId, destinationTokenAddress)) + const cryptoAmount = `${typeInfo?.sourceAmount ?? ''} ${getSymbolDisplayText(typeInfo?.sourceCurrency)}` + const cryptoSaleAmount = formatNumberOrString({ value: destinationTokenAmount }) + ' ' + destinationTokenSymbol + + return ( + + } + transaction={transaction} + /> + ) +} diff --git a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx index 1581488d90f..c1a6221f9e2 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx +++ b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx @@ -14,7 +14,7 @@ import { TransactionDetails, TransactionType } from 'uniswap/src/features/transa import { setClipboard } from 'uniswap/src/utils/clipboard' import { openUri } from 'uniswap/src/utils/linking' import { logger } from 'utilities/src/logger/logger' -import { openOnRampSupportLink } from 'wallet/src/utils/linking' +import { openFORSupportLink } from 'wallet/src/utils/linking' function renderOptionItem(label: string, textColorOverride?: ColorTokens): () => JSX.Element { return function OptionItem(): JSX.Element { @@ -59,7 +59,8 @@ export default function TransactionActionsModal({ const onRampProviderName = transactionDetails.typeInfo.type === TransactionType.OnRampPurchase || - transactionDetails.typeInfo.type === TransactionType.OnRampTransfer + transactionDetails.typeInfo.type === TransactionType.OnRampTransfer || + transactionDetails.typeInfo.type === TransactionType.OffRampSale ? transactionDetails.typeInfo.serviceProvider?.name : undefined @@ -137,7 +138,8 @@ export async function openSupportLink(transactionDetails: TransactionDetails): P switch (transactionDetails.typeInfo.type) { case TransactionType.OnRampPurchase: case TransactionType.OnRampTransfer: - return openOnRampSupportLink(transactionDetails.typeInfo.serviceProvider) + case TransactionType.OffRampSale: + return openFORSupportLink(transactionDetails.typeInfo.serviceProvider) default: params.append('tf_11041337007757', transactionDetails.ownerAddress ?? '') // Wallet Address params.append('tf_7005922218125', isWeb ? 'uniswap_extension_issue' : 'uw_ios_app') // Report Type Dropdown @@ -153,6 +155,7 @@ export function getTransactionId(transactionDetails: TransactionDetails): string switch (transactionDetails.typeInfo.type) { case TransactionType.OnRampPurchase: case TransactionType.OnRampTransfer: + case TransactionType.OffRampSale: return transactionDetails.typeInfo.id default: return transactionDetails.hash diff --git a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionSummaryTitle.tsx b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionSummaryTitle.tsx index 14bbd892d7b..f25bd2028cd 100644 --- a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionSummaryTitle.tsx +++ b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionSummaryTitle.tsx @@ -12,6 +12,7 @@ const ICON_SIZE = 14 export const TransactionSummaryTitle: React.FC = ({ transaction, title }) => { const isDarkMode = useIsDarkMode() const onRampLogo = + transaction.typeInfo.type === TransactionType.OffRampSale || transaction.typeInfo.type === TransactionType.OnRampPurchase || transaction.typeInfo.type === TransactionType.OnRampTransfer ? ( { it('OnRampTransfer : handle empty asset changes', () => { expect(parseOnRampTransaction(RESPONSE_BASE)).toBeUndefined() @@ -675,6 +676,7 @@ const RESPONSE_PENDING_ONRAMP_PURCHASE = { }, } +// TODO: WALL-5532 - Add equivalent tests for offramp transactions describe(extractOnRampTransactionDetails, () => { it('Empty transaction', () => { expect(extractOnRampTransactionDetails(undefined)).toEqual(null) diff --git a/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts b/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts index 8f95b3a65b2..88bb1151765 100644 --- a/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts +++ b/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts @@ -2,8 +2,9 @@ import { TransactionType as RemoteTransactionType } from 'uniswap/src/data/graph import { Routing } from 'uniswap/src/data/tradingApi/__generated__/index' import { UniverseChainId } from 'uniswap/src/features/chains/types' import { fromGraphQLChain, toSupportedChainId } from 'uniswap/src/features/chains/utils' -import { FORTransaction, FiatOnRampTransactionDetails } from 'uniswap/src/features/fiatOnRamp/types' +import { FORTransaction, FORTransactionDetails } from 'uniswap/src/features/fiatOnRamp/types' import { + OffRampSaleInfo, OnRampPurchaseInfo, OnRampTransactionInfo, OnRampTransferInfo, @@ -18,9 +19,12 @@ import { logger } from 'utilities/src/logger/logger' import parseGraphQLOnRampTransaction from 'wallet/src/features/transactions/history/conversion/parseOnRampTransaction' import { remoteTxStatusToLocalTxStatus } from 'wallet/src/features/transactions/history/utils' -function parseOnRampTransaction(transaction: FORTransaction): OnRampPurchaseInfo | OnRampTransferInfo { +function parseFORTransaction( + transaction: FORTransaction, + isOffRamp: boolean, +): OnRampPurchaseInfo | OnRampTransferInfo | OffRampSaleInfo { const transactionInfo: OnRampTransactionInfo = { - type: TransactionType.OnRampPurchase, + type: isOffRamp ? TransactionType.OffRampSale : TransactionType.OnRampPurchase, id: transaction.externalSessionId, destinationTokenSymbol: transaction.destinationCurrencyCode, destinationTokenAddress: transaction.destinationContractAddress, @@ -38,7 +42,7 @@ function parseOnRampTransaction(transaction: FORTransaction): OnRampPurchaseInfo totalFee: transaction.cryptoDetails.totalFee, } - const typeInfo: OnRampPurchaseInfo | OnRampTransferInfo = + const typeInfo: OnRampPurchaseInfo | OnRampTransferInfo | OffRampSaleInfo = transaction.sourceCurrencyCode === transaction.destinationCurrencyCode ? { ...transactionInfo, @@ -46,7 +50,7 @@ function parseOnRampTransaction(transaction: FORTransaction): OnRampPurchaseInfo } : { ...transactionInfo, - type: TransactionType.OnRampPurchase, + type: isOffRamp ? TransactionType.OffRampSale : TransactionType.OnRampPurchase, sourceCurrency: transaction.sourceCurrencyCode, sourceAmount: transaction.sourceAmount, } @@ -66,16 +70,18 @@ function statusToTransactionInfoStatus(status: FORTransaction['status']): Transa } } -export function extractFiatOnRampTransactionDetails( +export function extractFORTransactionDetails( transaction: FORTransaction, -): FiatOnRampTransactionDetails | undefined { + isOffRamp: boolean, + activeAccountAddress: Address | null, +): FORTransactionDetails | undefined { try { const chainId = toSupportedChainId(transaction.cryptoDetails.chainId) if (!chainId) { throw new Error('Unable to parse chain id ' + transaction.cryptoDetails.chainId) } - const typeInfo = parseOnRampTransaction(transaction) + const typeInfo = parseFORTransaction(transaction, isOffRamp) return { routing: Routing.CLASSIC, @@ -84,11 +90,11 @@ export function extractFiatOnRampTransactionDetails( hash: transaction.cryptoDetails.blockchainTransactionId || '', addedTime: new Date(transaction.createdAt).getTime(), status: statusToTransactionInfoStatus(transaction.status), - from: transaction.cryptoDetails.walletAddress, + from: isOffRamp ? activeAccountAddress : transaction.cryptoDetails.walletAddress, typeInfo, options: { request: {} }, transactionOriginType: TransactionOriginType.Internal, - } + } as FORTransactionDetails } catch (error) { logger.error(error, { tags: { @@ -100,6 +106,7 @@ export function extractFiatOnRampTransactionDetails( } } +// TODO: WALL-5532 - Add support for offramp transactions on the graphql service export function extractOnRampTransactionDetails(transaction: TransactionListQueryResponse): TransactionDetails | null { if (transaction?.details.__typename !== TransactionDetailsType.OnRamp) { return null diff --git a/packages/wallet/src/features/transactions/history/conversion/parseOnRampTransaction.ts b/packages/wallet/src/features/transactions/history/conversion/parseOnRampTransaction.ts index 269303530e3..b095b66696e 100644 --- a/packages/wallet/src/features/transactions/history/conversion/parseOnRampTransaction.ts +++ b/packages/wallet/src/features/transactions/history/conversion/parseOnRampTransaction.ts @@ -9,6 +9,7 @@ import { } from 'uniswap/src/features/transactions/types/transactionDetails' import { getAddressFromAsset } from 'wallet/src/features/transactions/history/utils' +// TODO: WALL-5532 - Add support for offramp transactions on the graphql service export default function parseOnRampTransaction( transaction: NonNullable, ): OnRampPurchaseInfo | OnRampTransferInfo | undefined { diff --git a/packages/wallet/src/features/transactions/hooks.ts b/packages/wallet/src/features/transactions/hooks.ts index 5585b203d49..19c3585e7f3 100644 --- a/packages/wallet/src/features/transactions/hooks.ts +++ b/packages/wallet/src/features/transactions/hooks.ts @@ -203,7 +203,7 @@ export function useMergeLocalAndRemoteTransactions( } const hashes = new Set() - const offChainFiatOnRampTxs = new Map() + const offChainFORTxs = new Map() const unsubmittedTxs: TransactionDetails[] = [] function addToMap(map: HashToTxMap, tx: TransactionDetails): HashToTxMap { @@ -217,10 +217,11 @@ export function useMergeLocalAndRemoteTransactions( map.set(hash, tx) hashes.add(hash) } else if ( + tx.typeInfo.type === TransactionType.OffRampSale || tx.typeInfo.type === TransactionType.OnRampPurchase || tx.typeInfo.type === TransactionType.OnRampTransfer ) { - offChainFiatOnRampTxs.set(tx.id, tx) + offChainFORTxs.set(tx.id, tx) } else if (isBridge(tx) || isClassic(tx)) { unsubmittedTxs.push(tx) } @@ -231,7 +232,7 @@ export function useMergeLocalAndRemoteTransactions( const remoteTxMap = remoteTransactions.reduce(addToMap, new Map()) const localTxMap = localTransactions.reduce(addToMap, new Map()) - const deDupedTxs: TransactionDetails[] = [...offChainFiatOnRampTxs.values(), ...unsubmittedTxs] + const deDupedTxs: TransactionDetails[] = [...offChainFORTxs.values(), ...unsubmittedTxs] for (const hash of [...hashes]) { const remoteTx = remoteTxMap.get(hash) diff --git a/packages/wallet/src/features/transactions/replaceTransactionSaga.ts b/packages/wallet/src/features/transactions/replaceTransactionSaga.ts index 89a8cc05e63..c7fd7eb1468 100644 --- a/packages/wallet/src/features/transactions/replaceTransactionSaga.ts +++ b/packages/wallet/src/features/transactions/replaceTransactionSaga.ts @@ -9,7 +9,7 @@ import { TransactionDetails, TransactionStatus, } from 'uniswap/src/features/transactions/types/transactionDetails' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { getValidAddress } from 'uniswap/src/utils/addresses' import { createTransactionId } from 'uniswap/src/utils/createTransactionId' import { logger } from 'utilities/src/logger/logger' diff --git a/packages/wallet/src/features/transactions/send/GasFeeRow.tsx b/packages/wallet/src/features/transactions/send/GasFeeRow.tsx index b43900c76fb..5522b483455 100644 --- a/packages/wallet/src/features/transactions/send/GasFeeRow.tsx +++ b/packages/wallet/src/features/transactions/send/GasFeeRow.tsx @@ -1,4 +1,4 @@ -import { t } from 'i18next' +import { useTranslation } from 'react-i18next' import { FadeIn } from 'react-native-reanimated' import { Flex, isWeb, SpinningLoader, Text } from 'ui/src' import { Gas } from 'ui/src/components/icons' @@ -15,6 +15,7 @@ type GasFeeRowProps = { } export function GasFeeRow({ gasFee, chainId }: GasFeeRowProps): JSX.Element | null { + const { t } = useTranslation() const { gasFeeFormatted } = useGasFeeFormattedDisplayAmounts({ gasFee, chainId, diff --git a/packages/wallet/src/features/transactions/send/hooks/useSendWarnings.test.ts b/packages/wallet/src/features/transactions/send/hooks/useSendWarnings.test.ts index 7a5b620c006..9bcc7eb7d7a 100644 --- a/packages/wallet/src/features/transactions/send/hooks/useSendWarnings.test.ts +++ b/packages/wallet/src/features/transactions/send/hooks/useSendWarnings.test.ts @@ -5,7 +5,7 @@ import { UniverseChainId } from 'uniswap/src/features/chains/types' import { GQLNftAsset } from 'uniswap/src/features/nfts/types' import { NativeCurrency } from 'uniswap/src/features/tokens/NativeCurrency' import { DerivedSendInfo } from 'uniswap/src/features/transactions/send/types' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { uniCurrencyInfo } from 'uniswap/src/test/fixtures' import { CurrencyField } from 'uniswap/src/types/currency' import { getSendWarnings } from 'wallet/src/features/transactions/send/hooks/useSendWarnings' diff --git a/packages/wallet/src/features/transactions/sendTransactionSaga.test.ts b/packages/wallet/src/features/transactions/sendTransactionSaga.test.ts index 1664a233617..91043e93666 100644 --- a/packages/wallet/src/features/transactions/sendTransactionSaga.test.ts +++ b/packages/wallet/src/features/transactions/sendTransactionSaga.test.ts @@ -176,12 +176,12 @@ describe(sendTransaction, () => { [call(getSignerManager), signerManager], [ call(signAndSendTransaction, txRequest, account, provider as providers.Provider, signerManager), - throwError(new Error('Failed to send transaction')), + throwError(new Error('Something went wrong with nonce')), ], ]) .put(addTransaction(transaction)) .put(finalizeTransaction({ ...transaction, status: TransactionStatus.Failed })) - .throws(new Error('Failed to send transaction')) + .throws(new Error('Failed to send transaction: nonce_error')) .run() }) @@ -216,7 +216,7 @@ describe(sendTransaction, () => { return expectSaga(sendTransaction, sendParamsWithoutNonce) .provide([ - [call(tryGetNonce, account, sendParams.chainId), mockNonce], + [call(tryGetNonce, account, sendParams.chainId), { nonce: mockNonce }], [call(getProvider, sendParams.chainId), provider], [call(getSignerManager), signerManager], [ @@ -259,7 +259,7 @@ describe(sendTransaction, () => { ]) .call(getPrivateProvider, UniverseChainId.Mainnet, account) .call([privateProvider, privateProvider.getTransactionCount], account.address, 'pending') - .returns(mockNonce) + .returns({ nonce: mockNonce }) .silentRun() }) @@ -277,7 +277,7 @@ describe(sendTransaction, () => { ]) .call(getProvider, UniverseChainId.Optimism) .call([publicProvider, publicProvider.getTransactionCount], account.address, 'pending') - .returns(mockNonce) + .returns({ nonce: mockNonce }) .silentRun() }) @@ -302,7 +302,7 @@ describe(sendTransaction, () => { ]) .call(getProvider, UniverseChainId.Mainnet) .call([publicProvider, publicProvider.getTransactionCount], account.address, 'pending') - .returns(mockNonce + 3) + .returns({ nonce: mockNonce + 3, pendingPrivateTxCount: 3 }) .silentRun() }) @@ -327,7 +327,7 @@ describe(sendTransaction, () => { ]) .call(getProvider, UniverseChainId.Mainnet) .call([publicProvider, publicProvider.getTransactionCount], account.address, 'pending') - .returns(mockNonce + 3) + .returns({ nonce: mockNonce + 3, pendingPrivateTxCount: 3 }) .silentRun() }) @@ -346,7 +346,7 @@ describe(sendTransaction, () => { ]) .call(getPrivateProvider, UniverseChainId.Mainnet, account) .call([privateProvider, privateProvider.getTransactionCount], account.address, 'pending') - .returns(mockNonce) + .returns({ nonce: mockNonce }) .silentRun() }) diff --git a/packages/wallet/src/features/transactions/sendTransactionSaga.ts b/packages/wallet/src/features/transactions/sendTransactionSaga.ts index 1c6811988c9..9ca3a05d0a9 100644 --- a/packages/wallet/src/features/transactions/sendTransactionSaga.ts +++ b/packages/wallet/src/features/transactions/sendTransactionSaga.ts @@ -68,14 +68,15 @@ export function* sendTransaction(params: SendTransactionParams) { // Register the tx in the store before it's submitted let unsubmittedTransaction = yield* call(addUnsubmittedTransaction, params) + let calculatedNonce: CalculatedNonce | undefined try { // Only fetch nonce if it's not already set, or we could be overwriting some custom logic // On swapSaga we manually set them for approve+swap to prevent errors in some L2s if (!request.nonce) { - const nonce = yield* call(tryGetNonce, account, chainId) - if (nonce) { - request = { ...request, nonce } + calculatedNonce = yield* call(tryGetNonce, account, chainId) + if (calculatedNonce) { + request = { ...request, nonce: calculatedNonce.nonce } } } @@ -115,10 +116,38 @@ export function* sendTransaction(params: SendTransactionParams) { ) return { transactionResponse } } catch (error) { - // TODO(WALL-5027): Improve error segmentation - yield* put(transactionActions.finalizeTransaction({ ...unsubmittedTransaction, status: TransactionStatus.Failed })) + if (error instanceof Error) { + let errorCategory = 'unknown' + if (error.message.includes('nonce') || error.message.includes('future transaction tries to replace pending')) { + errorCategory = 'nonce_error' + } else if (error.message.includes('Failed in pending block with: Reverted')) { + errorCategory = 'reverted' + } else if ( + error.message.includes('intrinsic gas too low') || + error.message.includes('max fee per gas less than block base fee') || + error.message.includes('transaction underpriced') + ) { + errorCategory = 'gas_too_low' + } else if (error.message.includes('Too Many Requests')) { + errorCategory = 'rate_limited' + } + + logger.error(error, { + tags: { file: 'sendTransactionSaga', function: 'sendTransaction' }, + extra: { + category: errorCategory, + calculatedNonce, + ...options, + }, + }) + + throw new Error(`Failed to send transaction: ${errorCategory}`, { + cause: error, + }) + } + throw error } } @@ -218,6 +247,11 @@ function* updateSubmittedTransaction( }) } +export interface CalculatedNonce { + nonce: number + pendingPrivateTxCount?: number +} + /** * Attempts to fetch the next nonce to be used for a transaction. * If the chain supports private RPC, it will use the private RPC provider, in order to account for pending private transactions. @@ -254,9 +288,14 @@ export function* tryGetNonce(account: SignerMnemonicAccountMeta, chainId: Univer // If we're using Flashbots with authentication header as private RPC, it will already account for pending private transactions. Otherwise, add the local pending private transactions. if (!shouldUseFlashbots && isPrivateRpcSupportedOnChain(chainId)) { const pendingPrivateTransactionCount = yield* call(getPendingPrivateTxCount, account.address, chainId) - return nonce + pendingPrivateTransactionCount + return { + nonce: nonce + pendingPrivateTransactionCount, + pendingPrivateTxCount: pendingPrivateTransactionCount, + } + } + return { + nonce, } - return nonce } catch (error) { logger.error(error, { tags: { file: 'sendTransaction', function: 'tryGetNonce' }, diff --git a/packages/wallet/src/features/transactions/swap/modals/QueuedOrderModal.tsx b/packages/wallet/src/features/transactions/swap/modals/QueuedOrderModal.tsx index 2d95247e1d4..3985de5f544 100644 --- a/packages/wallet/src/features/transactions/swap/modals/QueuedOrderModal.tsx +++ b/packages/wallet/src/features/transactions/swap/modals/QueuedOrderModal.tsx @@ -1,6 +1,6 @@ import { CurrencyAmount, TradeType } from '@uniswap/sdk-core' -import { t } from 'i18next' import { useCallback, useMemo } from 'react' +import { useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' import { Button, Flex, Separator, Text, isWeb, useIsShortMobileDevice } from 'ui/src' import { AlertTriangleFilled } from 'ui/src/components/icons' @@ -31,15 +31,8 @@ import { isSwapTransactionInfo } from 'wallet/src/features/transactions/SummaryC import { ErroredQueuedOrderStatus, useErroredQueuedOrders } from 'wallet/src/features/transactions/hooks' import { useActiveSignerAccount } from 'wallet/src/features/wallet/hooks' -const QUEUE_STATUS_TO_MESSAGE = { - [QueuedOrderStatus.AppClosed]: t('swap.warning.queuedOrder.appClosed'), - [QueuedOrderStatus.ApprovalFailed]: t('swap.warning.queuedOrder.approvalFailed'), - [QueuedOrderStatus.WrapFailed]: t('swap.warning.queuedOrder.wrapFailed'), - [QueuedOrderStatus.SubmissionFailed]: t('swap.warning.queuedOrder.submissionFailed'), - [QueuedOrderStatus.Stale]: t('swap.warning.queuedOrder.stale'), -} as const satisfies Record - export function QueuedOrderModal(): JSX.Element | null { + const { t } = useTranslation() const uniswapXEnabled = useFeatureFlag(FeatureFlags.UniswapX) const isShortMobileDevice = useIsShortMobileDevice() @@ -80,6 +73,14 @@ export function QueuedOrderModal(): JSX.Element | null { if (!uniswapXEnabled || !currentFailedOrder || !isSwapTransactionInfo(currentFailedOrder.typeInfo)) { return null } + + const QUEUE_STATUS_TO_MESSAGE = { + [QueuedOrderStatus.AppClosed]: t('swap.warning.queuedOrder.appClosed'), + [QueuedOrderStatus.ApprovalFailed]: t('swap.warning.queuedOrder.approvalFailed'), + [QueuedOrderStatus.WrapFailed]: t('swap.warning.queuedOrder.wrapFailed'), + [QueuedOrderStatus.SubmissionFailed]: t('swap.warning.queuedOrder.submissionFailed'), + [QueuedOrderStatus.Stale]: t('swap.warning.queuedOrder.stale'), + } as const satisfies Record const reason = QUEUE_STATUS_TO_MESSAGE[currentFailedOrder.queueStatus] const buttonSize = isShortMobileDevice ? 'small' : 'medium' diff --git a/packages/wallet/src/features/transactions/swap/swapSaga.test.ts b/packages/wallet/src/features/transactions/swap/swapSaga.test.ts index b21814de785..9faf73314f7 100644 --- a/packages/wallet/src/features/transactions/swap/swapSaga.test.ts +++ b/packages/wallet/src/features/transactions/swap/swapSaga.test.ts @@ -178,7 +178,7 @@ describe(approveAndSwap, () => { const sharedProviders: (EffectProviders | StaticProvider)[] = [ [select(selectWalletSwapProtectionSetting), SwapProtectionSetting.Off], [call(getProvider, mockSwapTxRequest.chainId), mockProvider], - [call(tryGetNonce, classicSwapParams.account, mockSwapTxRequest.chainId), nonce], + [call(tryGetNonce, classicSwapParams.account, mockSwapTxRequest.chainId), { nonce }], ] it('sends a swap tx', async () => { @@ -223,7 +223,7 @@ describe(approveAndSwap, () => { .call(shouldSubmitViaPrivateRpc, classicSwapParams.swapTxContext.txRequest.chainId) .next(false) .call(tryGetNonce, classicSwapParams.account, mockSwapTxRequest.chainId) - .next(nonce) + .next({ nonce }) .call(sendTransaction, expectedSendSwapParams) .next({ transactionResponse: { hash: '0xMockSwapTxHash' }, populatedRequest: {} }) .put(pushNotification({ type: AppNotificationType.SwapPending, wrapType: WrapType.NotApplicable })) @@ -262,7 +262,7 @@ describe(approveAndSwap, () => { .call(shouldSubmitViaPrivateRpc, classicSwapParams.swapTxContext.txRequest.chainId) .next(false) .call(tryGetNonce, classicSwapParams.account, mockSwapTxRequest.chainId) - .next(nonce) + .next({ nonce }) .call(sendTransaction, expectedSendApprovalParams) .next({ transactionResponse: { hash: '0xMockApprovalTxHash' }, populatedRequest: {} }) .call(sendTransaction, expectedSendSwapParams) @@ -303,7 +303,7 @@ describe(approveAndSwap, () => { testSaga(approveAndSwap, uniswapXSwapParams) .next() .call(tryGetNonce, classicSwapParams.account, mockSwapTxRequest.chainId) - .next(nonce) + .next({ nonce }) .call(sendTransaction, expectedSendApprovalParams) .next({ transactionResponse: { hash: '0xMockApprovalTxHash' }, populatedRequest: {} }) .call(submitUniswapXOrder, expectedSubmitOrderParams) @@ -371,7 +371,7 @@ describe(approveAndSwap, () => { testSaga(approveAndSwap, uniswapXSwapEthInputParams) .next() .call(tryGetNonce, classicSwapParams.account, mockSwapTxRequest.chainId) - .next(nonce) + .next({ nonce }) .call(sendTransaction, expectedSendApprovalParams) .next({ transactionResponse: { hash: '0xMockApprovalTxHash' }, populatedRequest: {} }) .call(sendTransaction, expectedSendWrapParams) diff --git a/packages/wallet/src/features/transactions/swap/swapSaga.ts b/packages/wallet/src/features/transactions/swap/swapSaga.ts index c410055338d..721432b2a48 100644 --- a/packages/wallet/src/features/transactions/swap/swapSaga.ts +++ b/packages/wallet/src/features/transactions/swap/swapSaga.ts @@ -17,7 +17,7 @@ import { import { WrapType } from 'uniswap/src/features/transactions/types/wrap' import { logger } from 'utilities/src/logger/logger' import { isPrivateRpcSupportedOnChain } from 'wallet/src/features/providers/utils' -import { sendTransaction, tryGetNonce } from 'wallet/src/features/transactions/sendTransactionSaga' +import { CalculatedNonce, sendTransaction, tryGetNonce } from 'wallet/src/features/transactions/sendTransactionSaga' import { SubmitUniswapXOrderParams, submitUniswapXOrder } from 'wallet/src/features/transactions/swap/submitOrderSaga' import { wrap } from 'wallet/src/features/transactions/swap/wrapSaga' import { selectWalletSwapProtectionSetting } from 'wallet/src/features/wallet/selectors' @@ -34,6 +34,7 @@ export type SwapParams = { } export function* approveAndSwap(params: SwapParams) { + let calculatedNonce: CalculatedNonce | undefined try { const { swapTxContext, account, txId, analytics, onSuccess, onFailure } = params const { routing, approveTxRequest } = swapTxContext @@ -52,7 +53,8 @@ export function* approveAndSwap(params: SwapParams) { const submitViaPrivateRpc = !isUniswapX && !isBridge && (yield* call(shouldSubmitViaPrivateRpc, chainId)) // We must manually set the nonce when submitting multiple transactions in a row, // otherwise for some L2s the Provider might fetch the same nonce for both transactions. - let nonce = yield* call(tryGetNonce, account, chainId) + calculatedNonce = yield* call(tryGetNonce, account, chainId) + let nonce = calculatedNonce?.nonce const gasFeeEstimation = swapTxContext.gasFeeEstimation @@ -152,7 +154,7 @@ export function* approveAndSwap(params: SwapParams) { } catch (error) { logger.error(error, { tags: { file: 'swapSaga', function: 'approveAndSwap' }, - extra: { analytics: params.analytics }, + extra: { analytics: params.analytics, calculatedNonce }, }) } } diff --git a/packages/wallet/src/features/transactions/transactionWatcherSaga.test.ts b/packages/wallet/src/features/transactions/transactionWatcherSaga.test.ts index a2a49250e44..42ddd21edb4 100644 --- a/packages/wallet/src/features/transactions/transactionWatcherSaga.test.ts +++ b/packages/wallet/src/features/transactions/transactionWatcherSaga.test.ts @@ -22,7 +22,7 @@ import { } from 'uniswap/src/test/fixtures' import { mockApolloClient } from 'uniswap/src/test/mocks' import { sleep } from 'utilities/src/time/timing' -import { fetchFiatOnRampTransaction } from 'wallet/src/features/fiatOnRamp/api' +import { fetchFORTransaction } from 'wallet/src/features/fiatOnRamp/api' import { attemptCancelTransaction } from 'wallet/src/features/transactions/cancelTransactionSaga' import { deleteTransaction, @@ -33,6 +33,7 @@ import { watchTransaction, } from 'wallet/src/features/transactions/transactionWatcherSaga' import { getProvider, getProviderManager } from 'wallet/src/features/wallet/context' +import { selectActiveAccountAddress } from 'wallet/src/features/wallet/selectors' import { getTxProvidersMocks } from 'wallet/src/test/mocks' const { @@ -199,8 +200,9 @@ describe(watchFiatOnRampTransaction, () => { return ( expectSaga(watchFiatOnRampTransaction, txDetailsPending) .provide([ - [call(fetchFiatOnRampTransaction, txDetailsPending, false), staleTx], + [call(fetchFORTransaction, txDetailsPending, false, null), staleTx], [matchers.call.fn(sendAnalyticsEvent), undefined], + [matchers.select(selectActiveAccountAddress), null], ]) .put( transactionActions.deleteTransaction({ @@ -226,7 +228,7 @@ describe(watchFiatOnRampTransaction, () => { .provide([ { call(effect): TransactionDetails | undefined { - if (effect.fn === fetchFiatOnRampTransaction) { + if (effect.fn === fetchFORTransaction) { switch (fetchCalledCount++) { case 0: case 1: @@ -240,6 +242,7 @@ describe(watchFiatOnRampTransaction, () => { }, }, [delay(PollingInterval.Fast), Promise.resolve(() => undefined)], + [matchers.select(selectActiveAccountAddress), null], ]) .delay(PollingInterval.Fast) // only called once @@ -259,7 +262,7 @@ describe(watchFiatOnRampTransaction, () => { .provide([ { call(effect): TransactionDetails | undefined { - if (effect.fn === fetchFiatOnRampTransaction) { + if (effect.fn === fetchFORTransaction) { switch (fetchCalledCount++) { case 0: case 1: @@ -272,6 +275,7 @@ describe(watchFiatOnRampTransaction, () => { return undefined }, }, + [matchers.select(selectActiveAccountAddress), null], ]) .dispatch(forceFetchFiatOnRampTransactions()) .dispatch(forceFetchFiatOnRampTransactions()) @@ -286,8 +290,9 @@ describe(watchFiatOnRampTransaction, () => { const confirmedTx = { ...txDetailsPending, status: TransactionStatus.Success } return expectSaga(watchFiatOnRampTransaction, txDetailsPending) .provide([ - [call(fetchFiatOnRampTransaction, txDetailsPending, false), confirmedTx], + [call(fetchFORTransaction, txDetailsPending, false, null), confirmedTx], [matchers.call.fn(sendAnalyticsEvent), undefined], + [matchers.select(selectActiveAccountAddress), null], ]) .put(transactionActions.upsertFiatOnRampTransaction(confirmedTx)) .not.call.fn(sleep) diff --git a/packages/wallet/src/features/transactions/transactionWatcherSaga.ts b/packages/wallet/src/features/transactions/transactionWatcherSaga.ts index 26f017fea6b..abe13e1227b 100644 --- a/packages/wallet/src/features/transactions/transactionWatcherSaga.ts +++ b/packages/wallet/src/features/transactions/transactionWatcherSaga.ts @@ -9,17 +9,21 @@ import { PollingInterval } from 'uniswap/src/constants/misc' import { fetchSwaps } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient' import { SwapStatus } from 'uniswap/src/data/tradingApi/__generated__' import { UniverseChainId } from 'uniswap/src/features/chains/types' -import { FiatOnRampTransactionDetails } from 'uniswap/src/features/fiatOnRamp/types' +import { FORTransactionDetails } from 'uniswap/src/features/fiatOnRamp/types' import { getGasPrice } from 'uniswap/src/features/gas/types' import { findLocalGasStrategy } from 'uniswap/src/features/gas/utils' import { DynamicConfigs, MainnetPrivateRpcConfigKey } from 'uniswap/src/features/gating/configs' import { getDynamicConfigValue } from 'uniswap/src/features/gating/hooks' import { pushNotification, setNotificationStatus } from 'uniswap/src/features/notifications/slice' import { AppNotificationType } from 'uniswap/src/features/notifications/types' +import { refetchGQLQueries } from 'uniswap/src/features/portfolio/portfolioUpdates/refetchGQLQueriesSaga' +import { + FLASHBOTS_DEFAULT_BLOCK_RANGE, + waitForFlashbotsProtectReceipt, +} from 'uniswap/src/features/providers/FlashbotsRpcProvider' import { MobileAppsFlyerEvents, WalletEventName } from 'uniswap/src/features/telemetry/constants' import { sendAnalyticsEvent, sendAppsFlyerEvent } from 'uniswap/src/features/telemetry/send' import { NativeCurrency } from 'uniswap/src/features/tokens/NativeCurrency' -import { refetchGQLQueries } from 'uniswap/src/features/transactions/refetchGQLQueriesSaga' import { makeSelectTransaction, selectIncompleteTransactions, @@ -42,16 +46,17 @@ import { BridgeTransactionDetails, FinalizedTransactionDetails, QueuedOrderStatus, + TEMPORARY_TRANSACTION_STATUSES, TransactionDetails, TransactionStatus, TransactionType, isFinalizedTx, } from 'uniswap/src/features/transactions/types/transactionDetails' -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { currencyIdToChain } from 'uniswap/src/utils/currencyId' import { logger } from 'utilities/src/logger/logger' import { ONE_SECOND_MS } from 'utilities/src/time/time' -import { fetchFiatOnRampTransaction } from 'wallet/src/features/fiatOnRamp/api' +import { fetchFORTransaction } from 'wallet/src/features/fiatOnRamp/api' import { attemptCancelTransaction } from 'wallet/src/features/transactions/cancelTransactionSaga' import { OrderWatcher } from 'wallet/src/features/transactions/orderWatcherSaga' import { attemptReplaceTransaction } from 'wallet/src/features/transactions/replaceTransactionSaga' @@ -59,7 +64,7 @@ import { getDiff, getFinalizedTransactionStatus, getPercentageError, - isOnRampTransaction, + isFORTransaction, receiptFromEthersReceipt, } from 'wallet/src/features/transactions/utils' import { getProvider } from 'wallet/src/features/wallet/context' @@ -86,8 +91,8 @@ export function* transactionWatcher({ apolloClient }: { apolloClient: ApolloClie // This allows us to detect completions if a user closed the app before a tx finished const incompleteTransactions = yield* select(selectIncompleteTransactions) for (const transaction of incompleteTransactions) { - if (isOnRampTransaction(transaction)) { - yield* fork(watchFiatOnRampTransaction, transaction as FiatOnRampTransactionDetails) + if (isFORTransaction(transaction)) { + yield* fork(watchFiatOnRampTransaction, transaction as FORTransactionDetails) } else { // If the transaction was a queued UniswapX order that never became submitted, update UI to show failure if (isUniswapX(transaction) && transaction.queueStatus === QueuedOrderStatus.Waiting) { @@ -107,8 +112,8 @@ export function* transactionWatcher({ apolloClient }: { apolloClient: ApolloClie updateTransaction.type, ]) try { - if (isOnRampTransaction(transaction)) { - yield* fork(watchFiatOnRampTransaction, transaction as FiatOnRampTransactionDetails) + if (isFORTransaction(transaction)) { + yield* fork(watchFiatOnRampTransaction, transaction as FORTransactionDetails) } else { yield* fork(watchTransaction, { transaction, apolloClient }) } @@ -132,11 +137,15 @@ export function* transactionWatcher({ apolloClient }: { apolloClient: ApolloClie } } -export function* fetchUpdatedFiatOnRampTransaction(transaction: FiatOnRampTransactionDetails, forceFetch: boolean) { - return yield* call(fetchFiatOnRampTransaction, transaction, forceFetch) +export function* fetchUpdatedFORTransaction( + transaction: FORTransactionDetails, + forceFetch: boolean, + activeAccountAddress: Address | null, +) { + return yield* call(fetchFORTransaction, transaction, forceFetch, activeAccountAddress) } -export function* watchFiatOnRampTransaction(transaction: FiatOnRampTransactionDetails) { +export function* watchFiatOnRampTransaction(transaction: FORTransactionDetails) { const { id } = transaction let forceFetch = false @@ -144,7 +153,8 @@ export function* watchFiatOnRampTransaction(transaction: FiatOnRampTransactionDe try { while (true) { - const updatedTransaction = yield* fetchUpdatedFiatOnRampTransaction(transaction, forceFetch) + const activeAddress = yield* select(selectActiveAccountAddress) + const updatedTransaction = yield* fetchUpdatedFORTransaction(transaction, forceFetch, activeAddress) forceFetch = false // We've got an invalid response from backend @@ -159,7 +169,10 @@ export function* watchFiatOnRampTransaction(transaction: FiatOnRampTransactionDe } // Transaction has been found - if (updatedTransaction.typeInfo.type !== TransactionType.LocalOnRamp) { + if ( + updatedTransaction.typeInfo.type !== TransactionType.LocalOnRamp && + updatedTransaction.typeInfo.type !== TransactionType.LocalOffRamp + ) { logger.debug( 'transactionWatcherSaga', 'watchFiatOnRampTransaction', @@ -212,12 +225,14 @@ export function* watchTransaction({ const provider = yield* call(getProvider, chainId) const options = isUniswapX(transaction) ? undefined : transaction.options + const timeoutTimestampMs = + options?.timeoutTimestampMs && !options.timeoutLogged ? options.timeoutTimestampMs : undefined const { updatedTransaction, cancel, replace, invalidated, timeout } = yield* race({ updatedTransaction: call(waitForRemoteUpdate, transaction, provider), cancel: call(waitForCancellation, chainId, id), replace: call(waitForReplacement, chainId, id), invalidated: call(waitForTxnInvalidated, chainId, id, options?.request.nonce), - ...(options?.timeoutTimestampMs ? { timeout: call(waitForTimeout, options.timeoutTimestampMs) } : {}), + ...(timeoutTimestampMs ? { timeout: call(waitForTimeout, timeoutTimestampMs) } : {}), }) // `cancel` and `updatedTransaction` conditions apply to both Classic and UniswapX transactions @@ -268,14 +283,17 @@ export function* watchTransaction({ return } - if (timeout && transaction.status === TransactionStatus.Pending) { - logger.warn('transactionWatcherSaga', 'watchTransaction', 'Timeout for pending tx', { - hash, - chainId, - id, - }) + if (timeout && TEMPORARY_TRANSACTION_STATUSES.includes(transaction.status)) { yield* call(logTransactionTimeout, transaction) yield* call(maybeLogGasEstimateAccuracy, transaction) + // Since we don't update the transaction status, mark that the timeout was logged so it's not logged again + yield* put( + transactionActions.updateTransactionWithoutWatch({ + ...transaction, + options: { ...transaction.options, timeoutLogged: true }, + }), + ) + // TODO: Consider marking the transaction as expired so it doesn't stay stuck in the pending state. return } } @@ -335,6 +353,44 @@ function* waitForRemoteUpdate(transaction: TransactionDetails, provider: provide return undefined } + if (isClassic(transaction) && transaction.options?.submitViaPrivateRpc) { + try { + // Flashbots transactions won't return a receipt until they're included, and will fail silently. + // We need to use Flashbots Protect API to get a status update until the tx is included or fails. + // @see {@link https://protect.flashbots.net/tx/docs} + const flashbotsReceipt = yield* call(waitForFlashbotsProtectReceipt, hash, transaction.options.timeoutTimestampMs) + + switch (flashbotsReceipt.status) { + case 'FAILED': + logger.error( + new Error(`Flashbots Protect transaction failed with simulation error: ${flashbotsReceipt.simError}`), + { + tags: { + file: 'transactionWatcherSaga', + function: 'waitForRemoteUpdate', + }, + extra: { transaction, flashbotsReceipt }, + }, + ) + return { ...transaction, status: TransactionStatus.Failed } + case 'CANCELLED': + return { ...transaction, status: TransactionStatus.Canceled } + case 'UNKNOWN': // Transaction not found by Flashbots Protect, might have been submitted by another provider + case 'INCLUDED': // Transaction successfully included in a block + default: + // Continue with the regular logic, which will try to fetch the ethers receipt + } + } catch (error) { + logger.error('Error fetching Flashbots Protect transaction status', { + tags: { + file: 'transactionWatcherSaga', + function: 'waitForRemoteUpdate', + }, + extra: { transaction, error }, + }) + } + } + const ethersReceipt = yield* call(waitForReceipt, hash, provider) const receipt = receiptFromEthersReceipt(ethersReceipt) const nativeCurrency = NativeCurrency.onChain(transaction.chainId) @@ -624,6 +680,12 @@ function logTransactionTimeout(transaction: TransactionDetails) { false, ) + const flashbotsBlockRange = getDynamicConfigValue< + DynamicConfigs.MainnetPrivateRpc, + MainnetPrivateRpcConfigKey, + number + >(DynamicConfigs.MainnetPrivateRpc, MainnetPrivateRpcConfigKey.FlashbotsBlockRange, FLASHBOTS_DEFAULT_BLOCK_RANGE) + const sendAuthenticationHeader = getDynamicConfigValue< DynamicConfigs.MainnetPrivateRpc, MainnetPrivateRpcConfigKey, @@ -632,11 +694,20 @@ function logTransactionTimeout(transaction: TransactionDetails) { sendAnalyticsEvent(WalletEventName.PendingTransactionTimeout, { use_flashbots: useFlashbots, + flashbots_block_range: flashbotsBlockRange, send_authentication_header: sendAuthenticationHeader, chain_id: transaction.chainId, tx_hash: transaction.hash, private_rpc: (isClassic(transaction) && transaction.options.submitViaPrivateRpc) ?? false, }) + + logger.warn('transactionWatcherSaga', 'logTransactionTimeout', 'Transaction timed out', { + chain_id: transaction.chainId, + use_flashbots: useFlashbots, + flashbots_block_range: flashbotsBlockRange, + send_authentication_header: sendAuthenticationHeader, + transaction, + }) } function maybeLogGasEstimateAccuracy(transaction: TransactionDetails) { diff --git a/packages/wallet/src/features/transactions/utils.ts b/packages/wallet/src/features/transactions/utils.ts index 26baebf7745..49313c5ae0e 100644 --- a/packages/wallet/src/features/transactions/utils.ts +++ b/packages/wallet/src/features/transactions/utils.ts @@ -87,6 +87,14 @@ export function isOnRampTransaction(tx: TransactionDetails): boolean { ) } +export function isOffRampTransaction(tx: TransactionDetails): boolean { + return tx.typeInfo.type === TransactionType.LocalOffRamp || tx.typeInfo.type === TransactionType.OffRampSale +} + +export function isFORTransaction(tx: TransactionDetails): boolean { + return isOnRampTransaction(tx) || isOffRampTransaction(tx) +} + export function getDiff(value1: number | string | undefined, value2: number | undefined): number | undefined { if (typeof value1 === 'string') { value1 = Number(value1) diff --git a/packages/wallet/src/utils/duration.ts b/packages/wallet/src/utils/duration.ts index c7509615adb..688e9f46d36 100644 --- a/packages/wallet/src/utils/duration.ts +++ b/packages/wallet/src/utils/duration.ts @@ -1,4 +1,4 @@ -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { getDurationRemaining } from 'utilities/src/time/duration' export function getOtpDurationString(expirationTime: number): string { diff --git a/packages/wallet/src/utils/linking.ts b/packages/wallet/src/utils/linking.ts index 8984f0cff83..1317b32a978 100644 --- a/packages/wallet/src/utils/linking.ts +++ b/packages/wallet/src/utils/linking.ts @@ -25,7 +25,7 @@ export async function openUniswapHelpLink(): Promise { return openUri(uniswapUrls.helpRequestUrl) } -export async function openOnRampSupportLink(serviceProvider: ServiceProviderInfo): Promise { +export async function openFORSupportLink(serviceProvider: ServiceProviderInfo): Promise { return openUri(serviceProvider.supportUrl ?? uniswapUrls.helpRequestUrl) } diff --git a/packages/wallet/src/utils/mnemonics.test.ts b/packages/wallet/src/utils/mnemonics.test.ts index 3b3496bbb7d..f4f1b7836b5 100644 --- a/packages/wallet/src/utils/mnemonics.test.ts +++ b/packages/wallet/src/utils/mnemonics.test.ts @@ -1,4 +1,4 @@ -import i18n from 'uniswap/src/i18n/i18n' +import i18n from 'uniswap/src/i18n' import { MnemonicValidationError, translateMnemonicErrorMessage } from 'wallet/src/utils/mnemonics' describe(translateMnemonicErrorMessage, () => { diff --git a/packages/wallet/src/utils/password.test.ts b/packages/wallet/src/utils/password.test.ts index ed4078cbe5f..6649a79949c 100644 --- a/packages/wallet/src/utils/password.test.ts +++ b/packages/wallet/src/utils/password.test.ts @@ -1,3 +1,4 @@ +import i18n from 'uniswap/src/i18n' import { PasswordStrength, getPasswordStrength, @@ -73,22 +74,22 @@ describe(getPasswordStrength, () => { describe(getPasswordStrengthTextAndColor, () => { it('returns text and color for strength', () => { - expect(getPasswordStrengthTextAndColor(PasswordStrength.WEAK)).toEqual({ + expect(getPasswordStrengthTextAndColor(i18n.t, PasswordStrength.WEAK)).toEqual({ text: 'Weak', color: '$statusCritical', }) - expect(getPasswordStrengthTextAndColor(PasswordStrength.MEDIUM)).toEqual({ + expect(getPasswordStrengthTextAndColor(i18n.t, PasswordStrength.MEDIUM)).toEqual({ text: 'Medium', color: '$DEP_accentWarning', }) - expect(getPasswordStrengthTextAndColor(PasswordStrength.STRONG)).toEqual({ + expect(getPasswordStrengthTextAndColor(i18n.t, PasswordStrength.STRONG)).toEqual({ text: 'Strong', color: '$statusSuccess', }) }) it('returns empty text and neutral color for other strengths', () => { - expect(getPasswordStrengthTextAndColor(PasswordStrength.NONE)).toEqual({ + expect(getPasswordStrengthTextAndColor(i18n.t, PasswordStrength.NONE)).toEqual({ text: '', color: '$neutral1', }) diff --git a/packages/wallet/src/utils/password.ts b/packages/wallet/src/utils/password.ts index bc14e78231d..05611f1ce41 100644 --- a/packages/wallet/src/utils/password.ts +++ b/packages/wallet/src/utils/password.ts @@ -1,5 +1,6 @@ -import { t } from 'i18next' +import { TFunction } from 'i18next' import { useEffect, useMemo, useState } from 'react' +import { useTranslation } from 'react-i18next' import { ColorTokens } from 'ui/src' import { useDebounce } from 'utilities/src/time/timing' import zxcvbn from 'zxcvbn' @@ -44,7 +45,10 @@ export function getPasswordStrength(password: string): PasswordStrength { } } -export function getPasswordStrengthTextAndColor(strength: PasswordStrength): { +export function getPasswordStrengthTextAndColor( + t: TFunction, + strength: PasswordStrength, +): { text: string color: ColorTokens } { @@ -80,6 +84,7 @@ export function usePasswordForm(): { checkSubmit: () => boolean onPasswordBlur: () => void } { + const { t } = useTranslation() const [lostPasswordFocus, setLostPasswordFocused] = useState(false) const onPasswordBlur = (): void => setLostPasswordFocused(true) @@ -144,7 +149,7 @@ export function usePasswordForm(): { return t('common.input.password.error.mismatch') } return '' - }, [error]) + }, [t, error]) const checkSubmit = (): boolean => { const isValid = !isWeakPassword && !doPasswordsDiffer(password, confirmPassword) diff --git a/yarn.lock b/yarn.lock index e27a2bb5752..b845131053c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17292,6 +17292,7 @@ __metadata: graphql: 16.6.0 hardhat: 2.22.16 husky: 8.0.3 + i18next: 23.10.0 immer: 9.0.6 jest: 29.7.0 jest-extended: 4.0.1 @@ -17325,6 +17326,7 @@ __metadata: react-dom: 18.2.0 react-feather: 2.0.10 react-helmet-async: 2.0.4 + react-i18next: 14.1.0 react-infinite-scroll-component: 6.1.0 react-is: 18.2.0 react-markdown: 4.3.1 @@ -47702,6 +47704,7 @@ __metadata: uuid: 9.0.0 wagmi: 2.9.3 wcag-contrast: 3.0.0 + zod: 3.22.4 languageName: unknown linkType: soft