From fc68138e0cea9543126167ca56d8aa407f8098a6 Mon Sep 17 00:00:00 2001 From: Uniswap Labs Service Account Date: Thu, 9 May 2024 17:59:19 +0000 Subject: [PATCH] ci(release): publish latest release --- CODEOWNERS | 1 + RELEASE | 27 +- VERSION | 2 +- .../src/components/home/WalletEmptyState.tsx | 271 +++++------------- apps/mobile/src/screens/HomeScreen.tsx | 14 +- apps/web/src/components/Icons/Error.tsx | 15 + .../Settings/MultipleRoutingOptions.tsx | 4 +- .../TokenDetails/tables/TransactionsTable.tsx | 2 +- apps/web/src/hooks/useIsSwapUnsupported.ts | 6 +- .../pages/Landing/components/animations.tsx | 37 +-- apps/web/src/pages/Swap/SwapForm.tsx | 43 ++- packages/eslint-config/crossPlatform.js | 19 ++ .../backgrounds/coins-background-dark.png | Bin 25558 -> 0 bytes .../backgrounds/coins-background-light.png | Bin 29853 -> 0 bytes packages/ui/src/assets/index.ts | 3 - packages/uniswap/.eslintrc.js | 2 +- packages/uniswap/src/config.ts | 1 + packages/uniswap/src/constants/urls.ts | 42 +-- packages/uniswap/src/data/constants.ts | 14 +- .../src/data/getVersionHeader.native.ts | 6 + packages/uniswap/src/data/getVersionHeader.ts | 10 + .../src/features/gating/sdk/statsig.native.ts | 2 + .../src/i18n/locales/source/en-US.json | 12 +- .../src/i18n/locales/translations/es-ES.json | 43 +-- .../src/i18n/locales/translations/fr-FR.json | 43 +-- .../src/i18n/locales/translations/hi-IN.json | 43 +-- .../src/i18n/locales/translations/id-ID.json | 43 +-- .../src/i18n/locales/translations/ja-JP.json | 43 +-- .../src/i18n/locales/translations/ms-MY.json | 43 +-- .../src/i18n/locales/translations/nl-NL.json | 43 +-- .../src/i18n/locales/translations/pt-PT.json | 43 +-- .../src/i18n/locales/translations/ru-RU.json | 43 +-- .../src/i18n/locales/translations/th-TH.json | 43 +-- .../src/i18n/locales/translations/tr-TR.json | 43 +-- .../src/i18n/locales/translations/uk-UA.json | 43 +-- .../src/i18n/locales/translations/ur-PK.json | 43 +-- .../src/i18n/locales/translations/vi-VN.json | 43 +-- .../src/i18n/locales/translations/zh-CN.json | 51 ++-- .../src/i18n/locales/translations/zh-TW.json | 47 +-- .../getCloudProviderName.native.ts | 1 + .../uniswap/src/utils/env/index.native.ts | 1 + .../src/utils/platform/index.native.ts | 1 + packages/wallet/src/constants/misc.ts | 1 - .../wallet/src/features/fiatOnRamp/api.ts | 1 - packages/wallet/src/features/gas/api.ts | 8 +- packages/wallet/src/features/gas/hooks.ts | 6 +- packages/wallet/src/features/language/saga.ts | 2 - packages/wallet/src/features/nfts/utils.ts | 2 +- .../transactions/swap/trade/legacy/hooks.ts | 9 +- .../hooks/useSwapTxAndGasInfoTradingApi.ts | 1 - .../hooks/useTransactionRequestInfo.ts | 27 +- .../transfer/getSendPrefilledState.ts | 1 - 52 files changed, 651 insertions(+), 643 deletions(-) create mode 100644 CODEOWNERS create mode 100644 apps/web/src/components/Icons/Error.tsx create mode 100644 packages/eslint-config/crossPlatform.js delete mode 100644 packages/ui/src/assets/backgrounds/coins-background-dark.png delete mode 100644 packages/ui/src/assets/backgrounds/coins-background-light.png create mode 100644 packages/uniswap/src/data/getVersionHeader.native.ts create mode 100644 packages/uniswap/src/data/getVersionHeader.ts diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000000..f70773659eb --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @uniswap/web-admins diff --git a/RELEASE b/RELEASE index c45fb2d4b50..8610b2d35a5 100644 --- a/RELEASE +++ b/RELEASE @@ -1,9 +1,24 @@ -Excited to share some new updates! Here’s what’s new: +IPFS hash of the deployment: +- CIDv0: `QmQcU3yDYBfnzcB31iYwTcW41JwYaQabvdaaM28WCXf8Ws` +- CIDv1: `bafybeibbyso4k2bvdabn3u3s3ubzaxmszuwtjlhppj5zjjfeex2g4rhoga` -Expanded Fiat On-ramp Providers — We’ve added more provider options to on-ramp to crypto from your wallet, dependent on your geography. +The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). + +You can also access the Uniswap Interface from an IPFS gateway. +**BEWARE**: The Uniswap interface uses [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to remember your settings, such as which tokens you have imported. +**You should always use an IPFS gateway that enforces origin separation**, or our hosted deployment of the latest release at [app.uniswap.org](https://app.uniswap.org). +Your Uniswap settings are never remembered across different URLs. + +IPFS gateways: +- https://bafybeibbyso4k2bvdabn3u3s3ubzaxmszuwtjlhppj5zjjfeex2g4rhoga.ipfs.dweb.link/ +- https://bafybeibbyso4k2bvdabn3u3s3ubzaxmszuwtjlhppj5zjjfeex2g4rhoga.ipfs.cf-ipfs.com/ +- [ipfs://QmQcU3yDYBfnzcB31iYwTcW41JwYaQabvdaaM28WCXf8Ws/](ipfs://QmQcU3yDYBfnzcB31iYwTcW41JwYaQabvdaaM28WCXf8Ws/) + +### 5.25.7 (2024-05-09) + + +### Bug Fixes + +* **web:** hotfix warning modified extensions (#8042) ac4781d -Other changes: -- Polish around QR codes -- Improved error reporting -- Various bug fixes and performance improvements diff --git a/VERSION b/VERSION index 97eb6715fd3..b29879a9026 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -mobile/1.26 \ No newline at end of file +web/5.25.7 \ No newline at end of file diff --git a/apps/mobile/src/components/home/WalletEmptyState.tsx b/apps/mobile/src/components/home/WalletEmptyState.tsx index cd94b4c5453..c37cd6b8966 100644 --- a/apps/mobile/src/components/home/WalletEmptyState.tsx +++ b/apps/mobile/src/components/home/WalletEmptyState.tsx @@ -1,34 +1,23 @@ import React, { useMemo } from 'react' import { useTranslation } from 'react-i18next' -import { - ImageBackground, - ImageSourcePropType, - StyleProp, - StyleSheet, - ViewStyle, - VirtualizedList, -} from 'react-native' import { useAppDispatch } from 'src/app/hooks' import Trace from 'src/components/Trace/Trace' import { openModal } from 'src/features/modals/modalSlice' -import { Flex, Text, TouchableArea, useIsDarkMode } from 'ui/src' -import { CRYPTO_PURCHASE_BACKGROUND_DARK, CRYPTO_PURCHASE_BACKGROUND_LIGHT } from 'ui/src/assets' -import { ArrowDownCircle, Buy as BuyIcon, PaperStack } from 'ui/src/components/icons' -import { borderRadii } from 'ui/src/theme' +import { Flex, Icons, Text, TouchableArea } from 'ui/src' +import PaperStackIcon from 'ui/src/assets/icons/paper-stack.svg' +import { iconSizes, colors as rawColors } from 'ui/src/theme' import { FeatureFlags } from 'uniswap/src/features/gating/flags' import { useFeatureFlag } from 'uniswap/src/features/gating/hooks' import { ScannerModalState } from 'wallet/src/components/QRCodeScanner/constants' -import { useCexTransferProviders } from 'wallet/src/features/fiatOnRamp/api' -import { ImageUri } from 'wallet/src/features/images/ImageUri' import { AccountType } from 'wallet/src/features/wallet/accounts/types' import { useActiveAccount } from 'wallet/src/features/wallet/hooks' import { ElementName, ElementNameType, ModalName } from 'wallet/src/telemetry/constants' +import { opacify } from 'wallet/src/utils/colors' interface ActionCardItem { title: string blurb: string icon: JSX.Element - backgroundImage?: ImageSourcePropType onPress: () => void elementName: ElementNameType badgeText?: string @@ -40,19 +29,13 @@ enum ActionOption { Receive = 'Receive', } -const ICON_SIZE = 28 -const ICON_SHIFT = -10 - export function WalletEmptyState(): JSX.Element { const { t } = useTranslation() const dispatch = useAppDispatch() - const isDarkMode = useIsDarkMode() const activeAccount = useActiveAccount() const isViewOnly = activeAccount?.type === AccountType.Readonly const forAggregatorEnabled = useFeatureFlag(FeatureFlags.ForAggregator) - const cexTransferEnabled = useFeatureFlag(FeatureFlags.CexTransfers) - const cexTransferProviders = useCexTransferProviders(cexTransferEnabled) const options: { [key in ActionOption]: ActionCardItem } = useMemo( () => ({ @@ -60,10 +43,17 @@ export function WalletEmptyState(): JSX.Element { title: t('home.tokens.empty.action.buy.title'), blurb: t('home.tokens.empty.action.buy.description'), elementName: ElementName.EmptyStateBuy, - icon: , - backgroundImage: isDarkMode - ? CRYPTO_PURCHASE_BACKGROUND_DARK - : CRYPTO_PURCHASE_BACKGROUND_LIGHT, + icon: ( + } + /> + } + /> + ), onPress: () => dispatch( openModal({ @@ -75,38 +65,45 @@ export function WalletEmptyState(): JSX.Element { title: t('home.tokens.empty.action.receive.title'), blurb: t('home.tokens.empty.action.receive.description'), elementName: ElementName.EmptyStateReceive, - icon: - cexTransferProviders.length > 0 ? ( - provider.logos.lightLogo)} - /> - ) : ( - - ), + icon: ( + } + /> + } + /> + ), onPress: () => dispatch( - openModal( - cexTransferProviders.length > 0 - ? { - name: ModalName.ReceiveCryptoModal, - initialState: cexTransferProviders, - } - : { - name: ModalName.WalletConnectScan, - initialState: ScannerModalState.WalletQr, - } - ) + openModal({ + name: ModalName.WalletConnectScan, + initialState: ScannerModalState.WalletQr, + }) ), }, [ActionOption.Import]: { title: t('home.tokens.empty.action.import.title'), blurb: t('home.tokens.empty.action.import.description'), elementName: ElementName.EmptyStateImport, - icon: , + icon: ( + + } + /> + ), onPress: () => dispatch(openModal({ name: ModalName.AccountSwitcher })), }, }), - [t, isDarkMode, cexTransferProviders, dispatch, forAggregatorEnabled] + [dispatch, forAggregatorEnabled, t] ) // Order options based on view only status @@ -121,167 +118,37 @@ export function WalletEmptyState(): JSX.Element { ) } -const ActionCard = ({ - title, - blurb, - onPress, - icon, - elementName, - backgroundImage, -}: ActionCardItem): JSX.Element => ( +const ActionCard = ({ title, blurb, onPress, icon, elementName }: ActionCardItem): JSX.Element => ( - - - - {icon} - - - {title} - - - {blurb} - + + + {icon} + + + {title} + + {blurb} + - + ) -const BackgroundWrapper = ({ - children, - backgroundImage, -}: { - children: React.ReactNode - backgroundImage?: ImageSourcePropType -}): JSX.Element => { - return backgroundImage !== undefined ? ( - - {children} - - ) : ( - {children} - ) -} - -function ReceiveCryptoIcon(): JSX.Element { - return ( - - - - ) -} - -function ServiceProviderLogo({ uri }: { uri: string }): JSX.Element { - return ( - - - - ) -} - -function renderItem({ item }: { item: string }): JSX.Element { - return item === 'icon' ? : -} - -function keyExtractor(item: string): string { - return item -} - -/* - * Set the zIndex to -index to reverse the order of the elements. - */ -const LogoRendererComponent = ({ - children, - index, - style, - ...props +const IconContainer = ({ + backgroundColor, + icon, }: { - children: React.ReactNode - index: number - style: StyleProp -}): JSX.Element => { - const cellStyle = [style, { zIndex: -index }] - - return ( - - {children} - - ) -} - -function OverlappingLogos({ logos }: { logos: string[] }): JSX.Element { - const getItem = (_data: unknown, index: number): string => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return index === 0 ? 'icon' : logos[index - 1]! - } - - const getItemCount = (): number => { - return logos.length + 1 - } - - return ( - - - horizontal - CellRendererComponent={LogoRendererComponent} - contentContainerStyle={{ - paddingRight: -ICON_SHIFT, - }} - getItem={getItem} - getItemCount={getItemCount} - keyExtractor={keyExtractor} - renderItem={renderItem} - /> - - ) -} - -const styles = StyleSheet.create({ - iconContainer: { - borderRadius: borderRadii.rounded8, - height: ICON_SIZE, - marginRight: ICON_SHIFT, - overflow: 'hidden', - width: ICON_SIZE, - }, -}) + backgroundColor: string + icon: JSX.Element +}): JSX.Element => ( + + {icon} + +) diff --git a/apps/mobile/src/screens/HomeScreen.tsx b/apps/mobile/src/screens/HomeScreen.tsx index 47d1ef0e9af..9f17afd04d9 100644 --- a/apps/mobile/src/screens/HomeScreen.tsx +++ b/apps/mobile/src/screens/HomeScreen.tsx @@ -353,13 +353,15 @@ export function HomeScreen(props?: AppStackScreenProp): JSX.Elemen }, [dispatch]) const onPressSend = useCallback(() => dispatch(openModal({ name: ModalName.Send })), [dispatch]) const onPressReceive = useCallback(() => { - dispatch( - openModal( - cexTransferProviders.length > 0 - ? { name: ModalName.ReceiveCryptoModal, initialState: cexTransferProviders } - : { name: ModalName.WalletConnectScan, initialState: ScannerModalState.WalletQr } + if (cexTransferProviders.length > 0) { + dispatch( + openModal({ name: ModalName.ReceiveCryptoModal, initialState: cexTransferProviders }) ) - ) + } else { + dispatch( + openModal({ name: ModalName.WalletConnectScan, initialState: ScannerModalState.WalletQr }) + ) + } }, [dispatch, cexTransferProviders]) const onPressViewOnlyLabel = useCallback( () => dispatch(openModal({ name: ModalName.ViewOnlyExplainer })), diff --git a/apps/web/src/components/Icons/Error.tsx b/apps/web/src/components/Icons/Error.tsx new file mode 100644 index 00000000000..6649c272f24 --- /dev/null +++ b/apps/web/src/components/Icons/Error.tsx @@ -0,0 +1,15 @@ +import { useTheme } from 'styled-components' + +import { StyledSVG } from './shared' + +export default function Error({ size = '24px', ...rest }: { size?: string; [k: string]: any }) { + const theme = useTheme() + return ( + + + + ) +} diff --git a/apps/web/src/components/Settings/MultipleRoutingOptions.tsx b/apps/web/src/components/Settings/MultipleRoutingOptions.tsx index 99ece301c70..ee45c86e06a 100644 --- a/apps/web/src/components/Settings/MultipleRoutingOptions.tsx +++ b/apps/web/src/components/Settings/MultipleRoutingOptions.tsx @@ -93,7 +93,7 @@ function UniswapXPreferenceLabel() { } const ROUTE_PREFERENCE_TO_LABEL: Record = { - [RoutePreferenceOption.Optimal]: t`Optimal price`, + [RoutePreferenceOption.Optimal]: t`Default trade options`, [RoutePreferenceOption.UniswapX]: , [RoutePreferenceOption.v3]: t`v3 pools`, [RoutePreferenceOption.v2]: t`v2 pools`, @@ -196,7 +196,7 @@ export default function MultipleRoutingOptions() { The Uniswap client selects the best route factoring price and network costs.} + text={The Uniswap client selects the cheapest trade option factoring price and network costs.} subheading={ routePreferenceOptions[RoutePreferenceOption.Optimal] && uniswapXSupportedChain && ( diff --git a/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx b/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx index d0eabb86699..54321aa3b5b 100644 --- a/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx +++ b/apps/web/src/components/Tokens/TokenDetails/tables/TransactionsTable.tsx @@ -96,7 +96,7 @@ export function TransactionsTable({ chainId, referenceToken }: { chainId: ChainI amount: parseFloat(transaction.token1Quantity), token: transaction.token1, } - const token0IsBeingSold = parseFloat(transaction.token0Quantity) < 0 + const token0IsBeingSold = parseFloat(transaction.token0Quantity) > 0 return { hash: transaction.hash, timestamp: transaction.timestamp, diff --git a/apps/web/src/hooks/useIsSwapUnsupported.ts b/apps/web/src/hooks/useIsSwapUnsupported.ts index b23bbda5aab..d7f0d534161 100644 --- a/apps/web/src/hooks/useIsSwapUnsupported.ts +++ b/apps/web/src/hooks/useIsSwapUnsupported.ts @@ -12,8 +12,6 @@ export function useIsSwapUnsupported(currencyIn?: Currency, currencyOut?: Curren const currencyInInfo = useCurrencyInfo(currencyIn) const currencyOutInfo = useCurrencyInfo(currencyOut) return useMemo(() => { - const currencyInUnsupported = currencyInInfo?.isSpam || currencyInInfo?.safetyLevel === SafetyLevel.Blocked - const currencyOutUnsupported = currencyOutInfo?.isSpam || currencyOutInfo?.safetyLevel === SafetyLevel.Blocked - return currencyInUnsupported || currencyOutUnsupported - }, [currencyInInfo?.isSpam, currencyInInfo?.safetyLevel, currencyOutInfo?.isSpam, currencyOutInfo?.safetyLevel]) + return currencyInInfo?.safetyLevel === SafetyLevel.Blocked || currencyOutInfo?.safetyLevel === SafetyLevel.Blocked + }, [currencyInInfo?.safetyLevel, currencyOutInfo?.safetyLevel]) } diff --git a/apps/web/src/pages/Landing/components/animations.tsx b/apps/web/src/pages/Landing/components/animations.tsx index cf10c72f4db..6eb8f7a7265 100644 --- a/apps/web/src/pages/Landing/components/animations.tsx +++ b/apps/web/src/pages/Landing/components/animations.tsx @@ -1,11 +1,6 @@ import { motion } from 'framer-motion' import styled, { css, keyframes } from 'styled-components' -type RiseInProps = { - delay?: number - children?: React.ReactNode -} - const riseInAnimation = keyframes` 0% { opacity: 0; @@ -41,24 +36,20 @@ export const RiseIn = styled.span<{ delay?: number }>` ${RiseInStyles} ` -export const Hover = (props: RiseInProps) => { - return ( - - {props.children} - - ) -} +const hoverAnimation = keyframes` + 0% { transform: translateY(-4px); opacity: 0.5; } + 50% { transform: translateY(4px); opacity: 1; } + 100% { transform: translateY(-4px); opacity: 0.5; } +` + +export const Hover = styled.div` + position: relative; + display: inline-block; + animation-name: ${hoverAnimation}; + animation-duration: 2s; + animation-iteration-count: infinite; + animation-timing-function: ease-in-out; +` export function Wiggle({ ...props }) { const variants = { diff --git a/apps/web/src/pages/Swap/SwapForm.tsx b/apps/web/src/pages/Swap/SwapForm.tsx index 3dac402ec3e..31bc9447f8a 100644 --- a/apps/web/src/pages/Swap/SwapForm.tsx +++ b/apps/web/src/pages/Swap/SwapForm.tsx @@ -13,7 +13,7 @@ import { Trace, TraceEvent, sendAnalyticsEvent, useTrace } from 'analytics' import { useToggleAccountDrawer } from 'components/AccountDrawer/MiniPortfolio/hooks' import { ButtonError, ButtonLight, ButtonPrimary } from 'components/Button' import { GrayCard } from 'components/Card' -import { AutoColumn } from 'components/Column' +import Column, { AutoColumn } from 'components/Column' import { ConfirmSwapModal } from 'components/ConfirmSwapModal' import SwapCurrencyInputPanel from 'components/CurrencyInputPanel/SwapCurrencyInputPanel' import TokenSafetyModal from 'components/TokenSafety/TokenSafetyModal' @@ -53,7 +53,7 @@ import { useSwapContext, } from 'state/swap/hooks' import { useTheme } from 'styled-components' -import { ThemedText } from 'theme/components' +import { ExternalLink, ThemedText } from 'theme/components' import { maybeLogFirstSwapAction } from 'tracing/swapFlowLoggers' import { computeFiatValuePriceImpact } from 'utils/computeFiatValuePriceImpact' import { NumberType, useFormatter } from 'utils/formatNumbers' @@ -62,6 +62,8 @@ import { largerPercentValue } from 'utils/percent' import { computeRealizedPriceImpact, warningSeverity } from 'utils/prices' import { didUserReject } from 'utils/swapErrorToUserReadableMessage' +import Error from 'components/Icons/Error' +import Row from 'components/Row' import { useCurrencyInfo } from 'hooks/Tokens' import { CurrencyState } from 'state/swap/types' import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' @@ -109,7 +111,7 @@ export function SwapForm({ disableTokenInputs = false, onCurrencyChange }: SwapF prefilledInputCurrencyInfo && prefilledOutputCurrencyInfo ? [prefilledInputCurrencyInfo, prefilledOutputCurrencyInfo] .filter((token: CurrencyInfo) => { - return token.currency.isToken && (token.isSpam || token.safetyLevel !== SafetyLevel.Verified) + return token.currency.isToken && token.safetyLevel !== SafetyLevel.Verified }) .map((token: CurrencyInfo) => token.currency as Token) .filter((token: Token) => { @@ -472,6 +474,8 @@ export function SwapForm({ disableTokenInputs = false, onCurrencyChange }: SwapF const inputCurrency = currencies[Field.INPUT] ?? undefined const switchChain = useSwitchChain() const switchingChain = useAppSelector((state) => state.wallets.switchingChain) + // @ts-ignore + const isUsingBlockedExtension = window.ethereum?.['isPocketUniverseZ'] return ( <> @@ -665,7 +669,7 @@ export function SwapForm({ disableTokenInputs = false, onCurrencyChange }: SwapF }} id="swap-button" data-testid="swap-button" - disabled={!getIsReviewableQuote(trade, tradeState, swapInputError)} + disabled={isUsingBlockedExtension || !getIsReviewableQuote(trade, tradeState, swapInputError)} error={!swapInputError && priceImpactSeverity > 2 && allowance.state === AllowanceState.ALLOWED} > @@ -690,8 +694,39 @@ export function SwapForm({ disableTokenInputs = false, onCurrencyChange }: SwapF allowedSlippage={allowedSlippage} /> )} + {isUsingBlockedExtension && } ) } + +function SwapNotice() { + const theme = useTheme() + return ( + + + + + + + Blocked Extension + + + The Pocket Universe extension violates our{' '} + Terms of Service by + modifying our product in a way that is misleading and could harm users. Please disable the extension and + reload the page. + + + + + ) +} diff --git a/packages/eslint-config/crossPlatform.js b/packages/eslint-config/crossPlatform.js new file mode 100644 index 00000000000..580a946ca10 --- /dev/null +++ b/packages/eslint-config/crossPlatform.js @@ -0,0 +1,19 @@ +module.exports = { + rules: { + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: [ + '*react-native*', + '!react-native-image-colors', // Allow importing react-native-image-colors, since it is cross platform. + ], + message: + "React Native modules should not be imported outside of .native.ts files. If this is a .native.ts file, add an ignore comment to the top of the file. If you're trying to import a cross-platform module, add it to the whitelist in crossPlatform.js.", + }, + ], + }, + ], + }, +} diff --git a/packages/ui/src/assets/backgrounds/coins-background-dark.png b/packages/ui/src/assets/backgrounds/coins-background-dark.png deleted file mode 100644 index 5adbeb0209d91bb132a2f5d19eec6b9db0a227a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25558 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 D#VqeX diff --git a/packages/ui/src/assets/backgrounds/coins-background-light.png b/packages/ui/src/assets/backgrounds/coins-background-light.png deleted file mode 100644 index dbdbcc41b6e17533c8595808d97b6bfa2bd6de81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29853 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%0A#X( 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 F{{WaZ$p!!b diff --git a/packages/ui/src/assets/index.ts b/packages/ui/src/assets/index.ts index a80e0bc5382..cae99e6a255 100644 --- a/packages/ui/src/assets/index.ts +++ b/packages/ui/src/assets/index.ts @@ -56,9 +56,6 @@ export const ONBOARDING_NOTIFICATIONS_LIGHT = { export const FOR_CONNECTING_BACKGROUND_DARK = require('./backgrounds/for-connecting-dark.png') export const FOR_CONNECTING_BACKGROUND_LIGHT = require('./backgrounds/for-connecting-light.png') -export const CRYPTO_PURCHASE_BACKGROUND_LIGHT = require('./backgrounds/coins-background-light.png') -export const CRYPTO_PURCHASE_BACKGROUND_DARK = require('./backgrounds/coins-background-dark.png') - export const SECURITY_SCREEN_BACKGROUND_DARK = { ios: require(`./backgrounds/ios/security-background-dark.png`), android: require(`./backgrounds/android/security-background-dark.png`), diff --git a/packages/uniswap/.eslintrc.js b/packages/uniswap/.eslintrc.js index b859d3c44d4..e9c5771980e 100644 --- a/packages/uniswap/.eslintrc.js +++ b/packages/uniswap/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { root: true, - extends: ['@uniswap/eslint-config/native'], + extends: ['@uniswap/eslint-config/native', '@uniswap/eslint-config/crossPlatform'], ignorePatterns: ['node_modules', '.turbo', '.eslintrc.js', 'codegen.ts'], parserOptions: { project: 'tsconfig.json', diff --git a/packages/uniswap/src/config.ts b/packages/uniswap/src/config.ts index d915dc82608..16156a2aac0 100644 --- a/packages/uniswap/src/config.ts +++ b/packages/uniswap/src/config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line no-restricted-imports import { APPSFLYER_API_KEY, APPSFLYER_APP_ID, diff --git a/packages/uniswap/src/constants/urls.ts b/packages/uniswap/src/constants/urls.ts index 2fe7db2c835..1086fcbb1b6 100644 --- a/packages/uniswap/src/constants/urls.ts +++ b/packages/uniswap/src/constants/urls.ts @@ -2,18 +2,6 @@ import { isDevEnv } from 'uniswap/src/utils/env' import { isAndroid, isExtension, isInterface, isMobileApp } from 'uniswap/src/utils/platform' import { isJestRun } from 'utilities/src/environment' -enum TrafficFlows { - GraphQL = 'graphql', - Metrics = 'metrics', - Gating = 'gating', - TradingApi = 'trading-api-labs', - Unitags = 'unitags', - FOR = 'for', - Scantastic = 'scantastic', -} - -const FLOWS_USING_BETA = [TrafficFlows.FOR] - export const UNISWAP_WEB_HOSTNAME = 'app.uniswap.org' export const UNISWAP_WEB_URL = `https://${UNISWAP_WEB_HOSTNAME}` @@ -48,17 +36,17 @@ export const uniswapUrls = { // Core API Urls apiOrigin: 'https://api.uniswap.org', apiBaseUrl: getCloudflareApiBaseUrl(), - graphQLUrl: `${getCloudflareApiBaseUrl(TrafficFlows.GraphQL)}/v1/graphql`, + graphQLUrl: `${getCloudflareApiBaseUrl()}/v1/graphql`, // Proxies - amplitudeProxyUrl: `${getCloudflareApiBaseUrl(TrafficFlows.Metrics)}/v1/amplitude-proxy`, - statsigProxyUrl: `${getCloudflareApiBaseUrl(TrafficFlows.Gating)}/v1/statsig-proxy`, + amplitudeProxyUrl: `${getCloudflareApiBaseUrl()}/v1/amplitude-proxy`, + statsigProxyUrl: `${getCloudflareApiBaseUrl()}/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`, - tradingApiUrl: getCloudflareApiBaseUrl(TrafficFlows.TradingApi), + unitagsApiUrl: `${getCloudflareApiBaseUrl()}/v2/unitags`, + scantasticApiUrl: `${getCloudflareApiBaseUrl()}/v2/scantastic`, + fiatOnRampApiUrl: `${getCloudflareApiBaseUrl(true)}/v2/fiat-on-ramp`, + tradingApiUrl: `https://trade-api-public.gateway.uniswap.org`, // API Paths trmPath: '/v1/screen', @@ -82,8 +70,8 @@ export const uniswapUrls = { webInterfaceNftCollectionUrl: `${UNISWAP_WEB_URL}/nfts/collection`, } -function getCloudflarePrefix(flow?: TrafficFlows): string { - if (flow && isDevEnv() && FLOWS_USING_BETA.includes(flow)) { +function getCloudflarePrefix(useBeta?: boolean): string { + if (isDevEnv() && useBeta) { return `beta` } @@ -106,14 +94,6 @@ function getCloudflarePrefix(flow?: TrafficFlows): string { throw new Error('Could not determine app to generate Cloudflare prefix') } -function getServicePrefix(flow?: TrafficFlows): string { - if (flow && !(isDevEnv() && FLOWS_USING_BETA.includes(flow))) { - return flow + '.' - } else { - return '' - } -} - -function getCloudflareApiBaseUrl(flow?: TrafficFlows): string { - return `https://${getServicePrefix(flow)}${getCloudflarePrefix(flow)}.gateway.uniswap.org` +function getCloudflareApiBaseUrl(useBeta?: boolean): string { + return `https://${getCloudflarePrefix(useBeta)}.gateway.uniswap.org` } diff --git a/packages/uniswap/src/data/constants.ts b/packages/uniswap/src/data/constants.ts index 310308945e7..50900f546a4 100644 --- a/packages/uniswap/src/data/constants.ts +++ b/packages/uniswap/src/data/constants.ts @@ -1,17 +1,7 @@ -import DeviceInfo from 'react-native-device-info' -import { isAndroid, isExtension, isIOS, isMobile } from 'uniswap/src/utils/platform' +import { isAndroid, isIOS } from 'uniswap/src/utils/platform' export const ROUTING_API_PATH = '/v2/quote' export const REQUEST_SOURCE = isIOS ? 'uniswap-ios' : isAndroid ? 'uniswap-android' : 'uniswap-web' -export const getVersionHeader = (): string => { - if (isMobile) { - return DeviceInfo.getVersion() - } else if (isExtension) { - return process.env.VERSION ?? '' - } else { - // unimplemented for web - return '' - } -} +export { getVersionHeader } from './getVersionHeader' diff --git a/packages/uniswap/src/data/getVersionHeader.native.ts b/packages/uniswap/src/data/getVersionHeader.native.ts new file mode 100644 index 00000000000..b06e8ca198a --- /dev/null +++ b/packages/uniswap/src/data/getVersionHeader.native.ts @@ -0,0 +1,6 @@ +// eslint-disable-next-line no-restricted-imports +import DeviceInfo from 'react-native-device-info' + +export const getVersionHeader = (): string => { + return DeviceInfo.getVersion() +} diff --git a/packages/uniswap/src/data/getVersionHeader.ts b/packages/uniswap/src/data/getVersionHeader.ts new file mode 100644 index 00000000000..4565f97044f --- /dev/null +++ b/packages/uniswap/src/data/getVersionHeader.ts @@ -0,0 +1,10 @@ +import { isExtension } from 'uniswap/src/utils/platform' + +export const getVersionHeader = (): string => { + if (isExtension) { + return process.env.VERSION ?? '' + } else { + // unimplemented for interface + return '' + } +} diff --git a/packages/uniswap/src/features/gating/sdk/statsig.native.ts b/packages/uniswap/src/features/gating/sdk/statsig.native.ts index aa63790995f..dedc3f4193e 100644 --- a/packages/uniswap/src/features/gating/sdk/statsig.native.ts +++ b/packages/uniswap/src/features/gating/sdk/statsig.native.ts @@ -1,7 +1,9 @@ +// eslint-disable-next-line no-restricted-imports import { Statsig, StatsigContext } from 'statsig-react-native' const statsig = Statsig const statsigContext = StatsigContext +// eslint-disable-next-line no-restricted-imports export { DynamicConfig, useConfig, diff --git a/packages/uniswap/src/i18n/locales/source/en-US.json b/packages/uniswap/src/i18n/locales/source/en-US.json index 9574bc711b6..65aaa6ccd1a 100644 --- a/packages/uniswap/src/i18n/locales/source/en-US.json +++ b/packages/uniswap/src/i18n/locales/source/en-US.json @@ -594,16 +594,16 @@ "empty": { "action": { "buy": { - "description": "Purchase crypto with a debit card or a bank account.", - "title": "Buy crypto with card" + "description": "You’ll need ETH to get started. Buy with a card or bank.", + "title": "Buy crypto" }, "import": { "description": "Enter this wallet’s recovery phrase to begin swapping and sending.", "title": "Import wallet" }, "receive": { - "description": "Fund your wallet by transferring crypto from another wallet or account.", - "title": "Receive crypto" + "description": "Transfer tokens from another wallet or crypto exchange.", + "title": "Receive funds" } }, "description": "When this wallet buys or receives tokens, they’ll appear here.", @@ -1443,7 +1443,9 @@ }, "editLabel": { "description": "Labels are not public. They are stored locally and only visible to you.", - "save": "Save changes" + "disclaimer": "This nickname is only visible to you.", + "save": "Save changes", + "title": "Edit nickname" }, "label": "Nickname", "notifications": { diff --git a/packages/uniswap/src/i18n/locales/translations/es-ES.json b/packages/uniswap/src/i18n/locales/translations/es-ES.json index 3fd72f51515..e5530d19a54 100644 --- a/packages/uniswap/src/i18n/locales/translations/es-ES.json +++ b/packages/uniswap/src/i18n/locales/translations/es-ES.json @@ -209,7 +209,6 @@ "notNow": "Ahora no", "ok": "Aceptar", "paste": "Pegar", - "pay": "Pagar", "receive": "Recibir", "remove": "Eliminar", "restore": "Restaurar", @@ -267,9 +266,8 @@ "systemSettings": "Ajustes" }, "text": { - "connected": "Conectado", - "disconnected": "Desconectado", "error": "Error", + "loading": "Cargando", "notAvailable": "N/D", "unknown": "Desconocido" } @@ -507,7 +505,6 @@ "load": "No se pudieron cargar tokens para comprar", "max": "Máximo {{amount}}", "min": "Mínimo {{amount}}", - "unavailable": "Este servicio no está disponible en su región", "unsupported": "No compatible en la región", "usd": "Sólo disponible para comprar en USD" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Compre criptomonedas con una tarjeta de débito o una cuenta bancaria.", - "title": "Comprar criptomonedas con tarjeta" + "description": "Necesitarás ETH para comenzar. Compra con tarjeta o cuenta bancaria.", + "title": "Comprar cripto" }, "import": { "description": "Ingresa la frase de recuperación de esta wallet para comenzar a intercambiar y enviar.", "title": "Importar wallet" }, "receive": { - "description": "Financia tu cartera transfiriendo criptomonedas desde otra cartera o cuenta.", - "title": "Recibir criptografía" + "description": "Transfiere tokens desde otra wallet o exchange de criptomonedas.", + "title": "Recibir fondos" } }, "description": "Cuando esta wallet compre o reciba tokens, aparecerán aquí.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "De una cuenta", + "cta": "Vincular una cuenta", "description": "Financia tu cartera transfiriendo criptomonedas desde otra cartera o cuenta", "title": "Recibir criptografía" } @@ -790,6 +787,15 @@ }, "title": "Estás todo listo" }, + "editName": { + "button": { + "create": "Crear wallet" + }, + "label": "Apodo", + "subtitle": "Ponle un nombre a tu wallet", + "title": "Este nombre sólo es visible para ti", + "walletAddress": "Su dirección pública será {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Importa desde tu teléfono", @@ -1260,6 +1266,11 @@ "security": "Seguridad", "support": "Ayuda", "wallet": { + "action": { + "hide": "Ocultar wallets", + "showAll_one": "Mostrar una wallet", + "showAll_other": "Ver todas las {{count}} wallets" + }, "button": { "viewAll": "Ver todo", "viewLess": "Ver menos" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Las etiquetas no son públicas. Se almacenan localmente y sólo usted puede verlos.", - "save": "Guardar cambios" + "disclaimer": "Este apodo sólo es visible para ti.", + "save": "Guardar cambios", + "title": "Editar nombre" }, "label": "Apodo", "notifications": { @@ -1571,7 +1584,6 @@ "title": "No hay suficiente liquidez" }, "networkFee": { - "highRelativeToValue": "El costo de la red excede el 10% del valor total de su transacción.", "message": "Éste es el costo de procesar tu transacción en el blockchain. Uniswap no recibe ninguna parte de estas tarifas." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Se aplican tarifas para garantizar la mejor experiencia con Uniswap. No hay ninguna tarifa asociada con este intercambio.", - "included": "Se aplican tarifas para garantizar la mejor experiencia con Uniswap y ya se han incluido en esta cotización." + "default": "Se aplican tarifas a algunos tokens seleccionados para garantizar la mejor experiencia con Uniswap. No hay ninguna tarifa asociada con este intercambio.", + "included": "Se aplican tarifas a algunos tokens seleccionados para garantizar la mejor experiencia con Uniswap y ya se han incluido en esta cotización." }, "title": "Tarifa de intercambio" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "No es suficiente {{tokenSymbol}} en {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Conectado a {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/fr-FR.json b/packages/uniswap/src/i18n/locales/translations/fr-FR.json index cec24dc7682..772ff9b1441 100644 --- a/packages/uniswap/src/i18n/locales/translations/fr-FR.json +++ b/packages/uniswap/src/i18n/locales/translations/fr-FR.json @@ -209,7 +209,6 @@ "notNow": "Pas maintenant", "ok": "D'ACCORD", "paste": "Coller", - "pay": "Payer", "receive": "Recevoir", "remove": "Supprimer", "restore": "Restaurer", @@ -267,9 +266,8 @@ "systemSettings": "Paramètres" }, "text": { - "connected": "Connecté", - "disconnected": "Déconnectée", "error": "Erreur", + "loading": "Chargement", "notAvailable": "N / A", "unknown": "Inconnu" } @@ -507,7 +505,6 @@ "load": "Impossible de charger les tokens à acheter", "max": "Maximum {{amount}}", "min": "Minimum {{amount}}", - "unavailable": "Ce service n'est pas disponible dans votre région", "unsupported": "Non disponible dans votre région", "usd": "Uniquement disponible à l'achat en USD" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Achetez des cryptos avec une carte de débit ou un compte bancaire.", - "title": "Acheter des cryptos avec une carte" + "description": "Vous aurez besoin d'ETH pour commencer. Achetez avec une carte bancaire ou un virement bancaire.", + "title": "Acheter des cryptos" }, "import": { "description": "Entrez la phrase de récupération de ce wallet pour commencer à échanger et envoyer.", "title": "Importer un wallet" }, "receive": { - "description": "Créditer votre portefeuille en transférant des cryptomonnaies depuis un autre portefeuille ou un autre compte.", - "title": "Recevoir des cryptos" + "description": "Transférez des tokens depuis un autre wallet ou un autre échange de crypto.", + "title": "Recevoir des fonds" } }, "description": "Lorsque ce wallet achète ou reçoit des tokens, ils apparaîtront ici.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Depuis un compte", + "cta": "Lier un compte", "description": "Créditer votre portefeuille en transférant des cryptomonnaies depuis un autre portefeuille ou un autre compte", "title": "Recevoir des cryptos" } @@ -790,6 +787,15 @@ }, "title": "Vous êtes prêt" }, + "editName": { + "button": { + "create": "Créer un wallet" + }, + "label": "Pseudo", + "subtitle": "Donnez un pseudo à votre wallet", + "title": "Ce pseudo est uniquement visible par vous", + "walletAddress": "Votre adresse publique sera {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Importer depuis votre téléphone", @@ -1260,6 +1266,11 @@ "security": "Sécurité", "support": "Soutien", "wallet": { + "action": { + "hide": "Masquer les wallets", + "showAll_one": "Afficher un portefeuille", + "showAll_other": "Afficher tous les {{count}} wallets" + }, "button": { "viewAll": "Tout voir", "viewLess": "Voir moins" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Les étiquettes ne sont pas publiques. Ils sont stockés localement et visibles uniquement par vous.", - "save": "Sauvegarder les modifications" + "disclaimer": "Ce pseudo est uniquement visible par vous.", + "save": "Sauvegarder les modifications", + "title": "Modifier le pseudo" }, "label": "Pseudo", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Pas assez de liquidité" }, "networkFee": { - "highRelativeToValue": "Le coût du réseau dépasse 10 % de la valeur totale de votre transaction.", "message": "Ceci est le coût pour traiter votre transaction sur la blockchain. Uniswap ne reçoit aucune part de ces frais." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Des frais sont appliqués pour garantir la meilleure expérience avec Uniswap. Il n'y a aucun frais associé à cet échange.", - "included": "Des frais sont appliqués pour garantir la meilleure expérience avec Uniswap et ont déjà été pris en compte dans ce devis." + "default": "Des frais sont appliqués sur quelques tokens pour garantir la meilleure expérience avec Uniswap. Il n'y a aucun frais associé à cet échange.", + "included": "Des frais sont appliqués sur quelques tokens pour garantir la meilleure expérience avec Uniswap et ont déjà été pris en compte dans ce devis." }, "title": "Frais d'échange" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Pas assez de {{tokenSymbol}} sur {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Connecté à {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/hi-IN.json b/packages/uniswap/src/i18n/locales/translations/hi-IN.json index bb2bec1ca54..88fabeaa285 100644 --- a/packages/uniswap/src/i18n/locales/translations/hi-IN.json +++ b/packages/uniswap/src/i18n/locales/translations/hi-IN.json @@ -209,7 +209,6 @@ "notNow": "अभी नहीं", "ok": "ठीक है", "paste": "पेस्ट करें", - "pay": "वेतन", "receive": "प्राप्त करें", "remove": "निकालना", "restore": "पुनर्स्थापित करना", @@ -267,9 +266,8 @@ "systemSettings": "समायोजन" }, "text": { - "connected": "जुड़े हुए", - "disconnected": "डिस्कनेक्ट किया गया", "error": "गलती", + "loading": "लोड हो रहा है", "notAvailable": "एन/ए", "unknown": "अज्ञात" } @@ -507,7 +505,6 @@ "load": "खरीदने के लिए टोकन लोड नहीं किए जा सके", "max": "अधिकतम {{amount}}", "min": "न्यूनतम {{amount}}", - "unavailable": "यह सेवा आपके क्षेत्र में उपलब्ध नहीं है", "unsupported": "क्षेत्र में समर्थित नहीं है", "usd": "केवल USD में खरीदने के लिए उपलब्ध है" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "डेबिट कार्ड या बैंक खाते से क्रिप्टो खरीदें।", - "title": "कार्ड से क्रिप्टो खरीदें" + "description": "आरंभ करने के लिए आपको ETH की आवश्यकता होगी। कार्ड या बैंक से खरीदें.", + "title": "क्रिप्टो खरीदें" }, "import": { "description": "स्वैपिंग और भेजना शुरू करने के लिए इस वॉलेट का पुनर्प्राप्ति वाक्यांश दर्ज करें।", "title": "बटुआ आयात करें" }, "receive": { - "description": "किसी अन्य वॉलेट या खाते से क्रिप्टो ट्रांसफर करके अपने वॉलेट में धनराशि जमा करें।", - "title": "क्रिप्टो प्राप्त करें" + "description": "किसी अन्य वॉलेट या क्रिप्टो एक्सचेंज से टोकन ट्रांसफर करें।", + "title": "धन प्राप्त करें" } }, "description": "जब यह वॉलेट टोकन खरीदता है या प्राप्त करता है, तो वे यहां दिखाई देंगे।", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "किसी खाते से", + "cta": "एक खाता लिंक करें", "description": "किसी अन्य वॉलेट या खाते से क्रिप्टो ट्रांसफर करके अपने वॉलेट को फंड करें", "title": "क्रिप्टो प्राप्त करें" } @@ -790,6 +787,15 @@ }, "title": "तुम सब सेट हो" }, + "editName": { + "button": { + "create": "बटुआ बनाएं" + }, + "label": "उपनाम", + "subtitle": "अपने बटुए को एक उपनाम दें", + "title": "यह उपनाम केवल आपको दिखाई देता है", + "walletAddress": "आपका सार्वजनिक पता होगा {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "अपने फ़ोन से आयात करें", @@ -1260,6 +1266,11 @@ "security": "सुरक्षा", "support": "सहायता", "wallet": { + "action": { + "hide": "बटुए छिपाएँ", + "showAll_one": "एक बटुआ दिखाओ", + "showAll_other": "सभी {{count}} वॉलेट दिखाएँ" + }, "button": { "viewAll": "सभी को देखें", "viewLess": "कम देखें" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "लेबल सार्वजनिक नहीं हैं. वे स्थानीय रूप से संग्रहीत हैं और केवल आपको दिखाई देते हैं।", - "save": "परिवर्तनों को सुरक्षित करें" + "disclaimer": "यह उपनाम केवल आपको दिखाई देता है.", + "save": "परिवर्तनों को सुरक्षित करें", + "title": "उपनाम संपादित करें" }, "label": "उपनाम", "notifications": { @@ -1571,7 +1584,6 @@ "title": "पर्याप्त तरलता नहीं" }, "networkFee": { - "highRelativeToValue": "नेटवर्क लागत आपके कुल लेनदेन मूल्य के 10% से अधिक है।", "message": "यह ब्लॉकचेन पर आपके लेनदेन को संसाधित करने की लागत है। Uniswap को इन शुल्कों का कोई हिस्सा नहीं मिलता है।" }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Uniswap के साथ सबसे अच्छा अनुभव सुनिश्चित करने के लिए शुल्क लागू किया जाता है। इस स्वैप से जुड़ा कोई शुल्क नहीं है।", - "included": "यूनिस्वैप के साथ सर्वोत्तम अनुभव सुनिश्चित करने के लिए शुल्क लागू किए जाते हैं, और उन्हें पहले ही इस उद्धरण में शामिल कर लिया गया है।" + "default": "Uniswap के साथ सर्वोत्तम अनुभव सुनिश्चित करने के लिए कुछ चुनिंदा टोकन पर शुल्क लागू किया जाता है। इस स्वैप से जुड़ा कोई शुल्क नहीं है।", + "included": "Uniswap के साथ सर्वोत्तम अनुभव सुनिश्चित करने के लिए कुछ चुनिंदा टोकन पर शुल्क लागू किया जाता है, और इसे पहले ही इस उद्धरण में शामिल कर लिया गया है।" }, "title": "स्वैप शुल्क" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "{{chain}}पर पर्याप्त {{tokenSymbol}} नहीं" - } - }, "walletConnect": { "dapps": { "connection": "से जुड़ा {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/id-ID.json b/packages/uniswap/src/i18n/locales/translations/id-ID.json index fe9e9a72b28..54f48b20d7a 100644 --- a/packages/uniswap/src/i18n/locales/translations/id-ID.json +++ b/packages/uniswap/src/i18n/locales/translations/id-ID.json @@ -209,7 +209,6 @@ "notNow": "Tidak sekarang", "ok": "OKE", "paste": "Tempel", - "pay": "Membayar", "receive": "Menerima", "remove": "Menghapus", "restore": "Memulihkan", @@ -267,9 +266,8 @@ "systemSettings": "Pengaturan" }, "text": { - "connected": "Terhubung", - "disconnected": "Terputus", "error": "Kesalahan", + "loading": "Memuat", "notAvailable": "T/A", "unknown": "Tidak dikenal" } @@ -507,7 +505,6 @@ "load": "Tidak dapat memuat token untuk dibeli", "max": "Maksimum {{amount}}", "min": "Minimal {{amount}}", - "unavailable": "Layanan ini tidak tersedia di wilayah Anda", "unsupported": "Tidak didukung di wilayah", "usd": "Hanya tersedia untuk dibeli dalam USD" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Beli kripto dengan kartu debit atau rekening bank.", - "title": "Beli kripto dengan kartu" + "description": "Anda memerlukan ETH untuk memulai. Beli dengan kartu atau bank.", + "title": "Beli kripto" }, "import": { "description": "Masukkan frasa pemulihan dompet ini untuk mulai menukar dan mengirim.", "title": "Impor dompet" }, "receive": { - "description": "Danai dompet Anda dengan mentransfer kripto dari dompet atau akun lain.", - "title": "Terima kripto" + "description": "Transfer token dari dompet lain atau pertukaran kripto.", + "title": "Menerima dana" } }, "description": "Saat dompet ini membeli atau menerima token, token tersebut akan muncul di sini.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Dari sebuah akun", + "cta": "Tautkan akun", "description": "Danai dompet Anda dengan mentransfer kripto dari dompet atau akun lain", "title": "Terima kripto" } @@ -790,6 +787,15 @@ }, "title": "Anda sudah siap" }, + "editName": { + "button": { + "create": "Buat dompet" + }, + "label": "Nama panggilan", + "subtitle": "Beri nama panggilan pada dompet Anda", + "title": "Nama panggilan ini hanya dapat dilihat oleh Anda", + "walletAddress": "Alamat publik Anda adalah {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Impor dari ponsel Anda", @@ -1260,6 +1266,11 @@ "security": "Keamanan", "support": "Mendukung", "wallet": { + "action": { + "hide": "Sembunyikan dompet", + "showAll_one": "Tunjukkan satu dompet", + "showAll_other": "Tampilkan semua {{count}} dompet" + }, "button": { "viewAll": "Lihat semua", "viewLess": "Lihat lebih sedikit" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Label tidak bersifat publik. Mereka disimpan secara lokal dan hanya dapat dilihat oleh Anda.", - "save": "Simpan perubahan" + "disclaimer": "Nama panggilan ini hanya dapat dilihat oleh Anda.", + "save": "Simpan perubahan", + "title": "Edit nama panggilan" }, "label": "Nama panggilan", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Likuiditas tidak cukup" }, "networkFee": { - "highRelativeToValue": "Biaya jaringan melebihi 10% dari total nilai transaksi Anda.", "message": "Ini adalah biaya untuk memproses transaksi Anda di blockchain. Uniswap tidak menerima bagian apa pun dari biaya ini." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Biaya dikenakan untuk memastikan pengalaman terbaik dengan Uniswap. Tidak ada biaya yang terkait dengan pertukaran ini.", - "included": "Biaya diterapkan untuk memastikan pengalaman terbaik dengan Uniswap, dan telah diperhitungkan dalam penawaran ini." + "default": "Biaya diterapkan pada beberapa token pilihan untuk memastikan pengalaman terbaik dengan Uniswap. Tidak ada biaya yang terkait dengan pertukaran ini.", + "included": "Biaya diterapkan pada beberapa token pilihan untuk memastikan pengalaman terbaik dengan Uniswap, dan telah diperhitungkan dalam penawaran ini." }, "title": "Biaya pertukaran" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Tidak cukup {{tokenSymbol}} pada {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Terhubung ke {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/ja-JP.json b/packages/uniswap/src/i18n/locales/translations/ja-JP.json index f251b6aa680..2964941ab94 100644 --- a/packages/uniswap/src/i18n/locales/translations/ja-JP.json +++ b/packages/uniswap/src/i18n/locales/translations/ja-JP.json @@ -209,7 +209,6 @@ "notNow": "後で", "ok": "了解", "paste": "ペースト", - "pay": "支払う", "receive": "受取", "remove": "削除", "restore": "復元", @@ -267,9 +266,8 @@ "systemSettings": "設定" }, "text": { - "connected": "接続されました", - "disconnected": "切断済", "error": "エラー", + "loading": "読み込み中", "notAvailable": "該当なし", "unknown": "不明" } @@ -507,7 +505,6 @@ "load": "トークンを読み込めませんでした", "max": "最大 {{amount}}", "min": "最小値 {{amount}}", - "unavailable": "このサービスはあなたの地域ではご利用いただけません", "unsupported": "地域非対応", "usd": "米ドルのみで購入" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "デビットカードまたは銀行口座で暗号通貨を購入します。", - "title": "カードで暗号通貨を購入する" + "description": "カードまたは銀行口座で暗号資産を購入", + "title": "暗号通貨を購入" }, "import": { "description": "スワップと送金する前にこのウォレットのリカバリフレーズを入力して下さい", "title": "ウォレットをインポート" }, "receive": { - "description": "別のウォレットまたはアカウントから暗号化を転送してウォレットに入金する.", - "title": "暗号を受信する" + "description": "別のウォレットまたは暗号通貨取引所からトークンを転送", + "title": "資金を受取" } }, "description": "このウォレットがトークンを購入または受信すると、ここに表示されます。", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "アカウントから", + "cta": "アカウントにリンクする", "description": "別のウォレットまたはアカウントから暗号化を転送してウォレットに入金する", "title": "暗号を受信する" } @@ -790,6 +787,15 @@ }, "title": "準備完了です" }, + "editName": { + "button": { + "create": "ウォレットを作成" + }, + "label": "ニックネーム", + "subtitle": "ウォレットにニックネームを作成しよう", + "title": "このニックネームはあなただけに表示されます", + "walletAddress": "あなたの公開アドレスは{{walletAddress}}になります" + }, "extension": { "connectMobile": { "button": "携帯電話からインポートする", @@ -1260,6 +1266,11 @@ "security": "セキュリティ", "support": "サポート", "wallet": { + "action": { + "hide": "ウォレットを非表示", + "showAll_one": "財布を1つ見せる", + "showAll_other": "{{count}} 個のウォレットをすべて表示" + }, "button": { "viewAll": "すべて表示", "viewLess": "表示を減らす" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "ラベルは非公開です。これらはローカルに保存され、あなただけが見ることができます。", - "save": "変更内容を保存" + "disclaimer": "このニックネームはあなただけに表示されます。", + "save": "変更内容を保存", + "title": "ニックネームを編集" }, "label": "ニックネーム", "notifications": { @@ -1571,7 +1584,6 @@ "title": "流動性が足りません" }, "networkFee": { - "highRelativeToValue": "ネットワーク コストが合計取引額の 10% を超えています。", "message": "これはブロックチェーン上で取引を処理するためのコストです。Uniswapはこの料金の一切受け取りません" }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Uniswap で最高の体験を提供するために手数料が適用されます。このスワップには手数料はかかりません。", - "included": "手数料は Uniswap で最高の体験を保証するために適用され、この見積もりにすでに組み込まれています。" + "default": "Uniswapで最高の体験を提供するため、セレクトトークンに手数料が含まれています。このスワップには手数料はかかりません。", + "included": "Uniswapで最高の体験を提供するため、セレクトトークンに手数料が含まれています。" }, "title": "スワップ手数料" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "{{chain}}に {{tokenSymbol}} が足りません" - } - }, "walletConnect": { "dapps": { "connection": " {{dappNameOrUrl}}に接続しました", diff --git a/packages/uniswap/src/i18n/locales/translations/ms-MY.json b/packages/uniswap/src/i18n/locales/translations/ms-MY.json index 28e3633dde0..8d98b86a2e1 100644 --- a/packages/uniswap/src/i18n/locales/translations/ms-MY.json +++ b/packages/uniswap/src/i18n/locales/translations/ms-MY.json @@ -209,7 +209,6 @@ "notNow": "Bukan sekarang", "ok": "okey", "paste": "tampal", - "pay": "bayar", "receive": "terima", "remove": "Alih keluar", "restore": "Pulihkan", @@ -267,9 +266,8 @@ "systemSettings": "tetapan" }, "text": { - "connected": "Bersambung", - "disconnected": "Terputus sambungan", "error": "ralat", + "loading": "Memuatkan", "notAvailable": "T/A", "unknown": "Tidak diketahui" } @@ -507,7 +505,6 @@ "load": "Tidak dapat memuatkan token untuk dibeli", "max": "Maksimum {{amount}}", "min": "Minimum {{amount}}", - "unavailable": "Perkhidmatan ini tidak tersedia di rantau anda", "unsupported": "Tidak disokong di wilayah", "usd": "Hanya tersedia untuk pembelian dalam USD" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Beli crypto dengan kad debit atau akaun bank.", - "title": "Beli crypto dengan kad" + "description": "Anda memerlukan ETH untuk bermula. Beli dengan kad atau bank.", + "title": "Beli kripto" }, "import": { "description": "Masukkan frasa pemulihan dompet ini untuk mula bertukar dan menghantar.", "title": "Import dompet" }, "receive": { - "description": "Membiayai dompet anda dengan memindahkan kripto daripada dompet atau akaun lain.", - "title": "Terima crypto" + "description": "Pindahkan token dari dompet atau pertukaran crypto lain.", + "title": "Terima dana" } }, "description": "Apabila dompet ini membeli atau menerima token, ia akan dipaparkan di sini.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Daripada akaun", + "cta": "Pautkan akaun", "description": "Membiayai dompet anda dengan memindahkan kripto daripada dompet atau akaun lain", "title": "Terima crypto" } @@ -790,6 +787,15 @@ }, "title": "Anda telah siap sedia" }, + "editName": { + "button": { + "create": "Buat dompet" + }, + "label": "nama samaran", + "subtitle": "Beri nama panggilan pada dompet anda", + "title": "Nama panggilan ini hanya kelihatan kepada anda", + "walletAddress": "Alamat awam anda ialah {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Import dari telefon anda", @@ -1260,6 +1266,11 @@ "security": "Keselamatan", "support": "Sokongan", "wallet": { + "action": { + "hide": "Sembunyikan dompet", + "showAll_one": "Tunjukkan satu dompet", + "showAll_other": "Tunjukkan semua {{count}} dompet" + }, "button": { "viewAll": "Lihat semua", "viewLess": "Lihat kurang" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Label bukan umum. Ia disimpan secara tempatan dan hanya kelihatan kepada anda.", - "save": "Simpan perubahan" + "disclaimer": "Nama panggilan ini hanya kelihatan kepada anda.", + "save": "Simpan perubahan", + "title": "Edit nama panggilan" }, "label": "nama samaran", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Kecairan tidak mencukupi" }, "networkFee": { - "highRelativeToValue": "Kos rangkaian melebihi 10% daripada jumlah nilai transaksi anda.", "message": "Ini ialah kos untuk memproses transaksi anda pada blockchain. Uniswap tidak menerima sebarang bahagian daripada yuran ini." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Yuran dikenakan untuk memastikan pengalaman terbaik dengan Uniswap. Tiada bayaran yang berkaitan dengan pertukaran ini.", - "included": "Yuran dikenakan untuk memastikan pengalaman terbaik dengan Uniswap, dan telah pun diambil kira dalam sebut harga ini." + "default": "Yuran dikenakan pada beberapa token terpilih untuk memastikan pengalaman terbaik dengan Uniswap. Tiada bayaran yang berkaitan dengan pertukaran ini.", + "included": "Yuran dikenakan pada beberapa token terpilih untuk memastikan pengalaman terbaik dengan Uniswap, dan telah diambil kira dalam sebut harga ini." }, "title": "Yuran pertukaran" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Tidak cukup {{tokenSymbol}} pada {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Disambungkan ke {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/nl-NL.json b/packages/uniswap/src/i18n/locales/translations/nl-NL.json index 58837f82669..6b76977922d 100644 --- a/packages/uniswap/src/i18n/locales/translations/nl-NL.json +++ b/packages/uniswap/src/i18n/locales/translations/nl-NL.json @@ -209,7 +209,6 @@ "notNow": "Niet nu", "ok": "OK", "paste": "Plakken", - "pay": "Betalen", "receive": "Ontvangen", "remove": "Verwijderen", "restore": "Herstellen", @@ -267,9 +266,8 @@ "systemSettings": "Instellingen" }, "text": { - "connected": "Gekoppeld", - "disconnected": "Ontkoppeld", "error": "Fout", + "loading": "Bezig met laden", "notAvailable": "N.v.t", "unknown": "Onbekend" } @@ -507,7 +505,6 @@ "load": "Kan tokens niet laden om te kopen", "max": "Maximaal {{amount}}", "min": "Minimaal {{amount}}", - "unavailable": "Deze service is niet beschikbaar in uw regio", "unsupported": "Niet ondersteund in de regio", "usd": "Alleen verkrijgbaar in USD" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Koop crypto met een bankpas of bankrekening.", - "title": "Koop crypto met kaart" + "description": "Je hebt ETH nodig om aan de slag te gaan. Koop met een kaart of bank.", + "title": "Koop crypto" }, "import": { "description": "Voer de herstelzin van deze portemonnee in om te beginnen met ruilen en verzenden.", "title": "Portemonnee importeren" }, "receive": { - "description": "Stort op uw portemonnee door de overdracht van crypto van een andere portemonnee of account.", - "title": "Crypto ontvangen" + "description": "Breng tokens over van een andere portemonnee of crypto-uitwisseling.", + "title": "Ontvang geld" } }, "description": "Wanneer deze portemonnee tokens koopt of ontvangt, verschijnen ze hier.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Van een rekening", + "cta": "Account koppelen", "description": "Stort op uw portemonnee door de overdracht van crypto van een andere portemonnee of account", "title": "Crypto ontvangen" } @@ -790,6 +787,15 @@ }, "title": "Je bent klaar" }, + "editName": { + "button": { + "create": "Portemonnee maken" + }, + "label": "Bijnaam", + "subtitle": "Geef je portemonnee een bijnaam", + "title": "Deze bijnaam is alleen voor jou zichtbaar", + "walletAddress": "Je openbare adres is {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Importeren vanaf uw telefoon", @@ -1260,6 +1266,11 @@ "security": "Beveiliging", "support": "Steun", "wallet": { + "action": { + "hide": "Portefeuilles verbergen", + "showAll_one": "Laat één portemonnee zien", + "showAll_other": "Toon alle {{count}} portemonnees" + }, "button": { "viewAll": "Bekijk alles", "viewLess": "Bekijk minder" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Etiketten zijn niet openbaar. Ze worden lokaal opgeslagen en zijn alleen voor jou zichtbaar.", - "save": "Wijzigingen opslaan" + "disclaimer": "Deze bijnaam is alleen voor jou zichtbaar.", + "save": "Wijzigingen opslaan", + "title": "Wijzig bijnaam" }, "label": "Bijnaam", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Niet genoeg liquiditeit" }, "networkFee": { - "highRelativeToValue": "De netwerkkosten bedragen meer dan 10% van uw totale transactiewaarde.", "message": "Dit zijn de kosten om uw transactie op de blockchain te verwerken. Uniswap ontvangt geen enkel deel van deze vergoedingen." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Er worden kosten in rekening gebracht om de beste ervaring met Uniswap te garanderen. Aan deze ruil zijn geen kosten verbonden.", - "included": "Er worden kosten in rekening gebracht om de beste ervaring met Uniswap te garanderen, en deze zijn al in deze offerte verwerkt." + "default": "Er worden kosten in rekening gebracht op een aantal geselecteerde tokens om de beste ervaring met Uniswap te garanderen. Aan deze ruil zijn geen kosten verbonden.", + "included": "Er worden kosten in rekening gebracht op een aantal geselecteerde tokens om de beste ervaring met Uniswap te garanderen, en deze zijn al in deze prijsopgave verwerkt." }, "title": "Wisselkosten" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Niet genoeg {{tokenSymbol}} op {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Verbonden met {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/pt-PT.json b/packages/uniswap/src/i18n/locales/translations/pt-PT.json index 729371da82b..2b905593959 100644 --- a/packages/uniswap/src/i18n/locales/translations/pt-PT.json +++ b/packages/uniswap/src/i18n/locales/translations/pt-PT.json @@ -209,7 +209,6 @@ "notNow": "Agora não", "ok": "OK", "paste": "Colar", - "pay": "Pagar", "receive": "Receber", "remove": "Remover", "restore": "Restaurar", @@ -267,9 +266,8 @@ "systemSettings": "Configurações" }, "text": { - "connected": "Conectado", - "disconnected": "Desconectado", "error": "Erro", + "loading": "Carregando", "notAvailable": "N / D", "unknown": "Desconhecido" } @@ -507,7 +505,6 @@ "load": "Não foi possível carregar tokens para comprar", "max": "Máximo {{amount}}", "min": "Mínimo {{amount}}", - "unavailable": "Este serviço não está disponível na sua região", "unsupported": "Não suportado na região", "usd": "Disponível apenas para compra em dólares americanos" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Compre criptografia com cartão de débito ou conta bancária.", - "title": "Compre criptografia com cartão" + "description": "Você precisará de ETH para começar. Compre com cartão ou banco.", + "title": "Comprar cripto" }, "import": { "description": "Digite a frase de recuperação desta carteira para começar a trocar e enviar.", "title": "Importar carteira" }, "receive": { - "description": "Financie sua carteira transferindo cripto de outra carteira ou conta.", - "title": "Receba criptografia" + "description": "Transfira tokens de outra carteira ou exchange de cripto.", + "title": "Receber fundos" } }, "description": "Quando esta carteira comprar ou receber tokens, eles aparecerão aqui.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "De uma conta", + "cta": "Vincular uma conta", "description": "Financie sua carteira transferindo cripto de outra carteira ou conta", "title": "Receba criptografia" } @@ -790,6 +787,15 @@ }, "title": "Você está pronto" }, + "editName": { + "button": { + "create": "Criar carteira" + }, + "label": "Apelido", + "subtitle": "Dê um apelido à sua carteira", + "title": "Este apelido só é visível para você", + "walletAddress": "Seu endereço público será {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Importe do seu telefone", @@ -1260,6 +1266,11 @@ "security": "Segurança", "support": "Suporte", "wallet": { + "action": { + "hide": "Ocultar carteiras", + "showAll_one": "Mostrar uma carteira", + "showAll_other": "Mostrar todas as {{count}} carteiras" + }, "button": { "viewAll": "Ver tudo", "viewLess": "Ver menos" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Os rótulos não são públicos. Eles são armazenados localmente e visíveis apenas para você.", - "save": "Salvar alterações" + "disclaimer": "Este apelido só é visível para você.", + "save": "Salvar alterações", + "title": "Editar apelido" }, "label": "Apelido", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Liquidez insuficiente" }, "networkFee": { - "highRelativeToValue": "O custo da rede excede 10% do valor total da transação.", "message": "Este é o custo para processar sua transação na blockchain. A Uniswap não recebe nenhuma parcela dessas taxas." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "As taxas são aplicadas para garantir a melhor experiência com o Uniswap. Não há taxa associada a esta troca.", - "included": "As taxas são aplicadas para garantir a melhor experiência com o Uniswap e já foram consideradas nesta cotação." + "default": "As tarifas são aplicadas a alguns tokens selecionados para garantir a melhor experiência com a Uniswap. Não há tarifa associada a esta troca.", + "included": "As tarifas são aplicadas a alguns tokens selecionados para garantir a melhor experiência com a Uniswap e já foram consideradas nesta cotação." }, "title": "Taxa de troca" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Não é suficiente {{tokenSymbol}} em {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Conectado a {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/ru-RU.json b/packages/uniswap/src/i18n/locales/translations/ru-RU.json index c5460f8b1a2..e3548d82c96 100644 --- a/packages/uniswap/src/i18n/locales/translations/ru-RU.json +++ b/packages/uniswap/src/i18n/locales/translations/ru-RU.json @@ -209,7 +209,6 @@ "notNow": "Не сейчас", "ok": "ХОРОШО", "paste": "Вставить", - "pay": "Платить", "receive": "Получать", "remove": "Удалять", "restore": "Восстановить", @@ -267,9 +266,8 @@ "systemSettings": "Настройки" }, "text": { - "connected": "Связанный", - "disconnected": "Отключено", "error": "Ошибка", + "loading": "Загрузка", "notAvailable": "Н/Д", "unknown": "Неизвестный" } @@ -507,7 +505,6 @@ "load": "Не удалось загрузить токены для покупки", "max": "Максимум {{amount}}", "min": "Минимум {{amount}}", - "unavailable": "Данная услуга недоступна в вашем регионе", "unsupported": "Не поддерживается в регионе", "usd": "Доступно для покупки только в долларах США." }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Покупайте криптовалюту с помощью дебетовой карты или банковского счета.", - "title": "Купить криптовалюту с помощью карты" + "description": "Для начала вам понадобится ETH. Покупайте картой или банком.", + "title": "Купить криптовалюту" }, "import": { "description": "Введите фразу восстановления этого кошелька, чтобы начать обмен и отправку.", "title": "Импортировать кошелек" }, "receive": { - "description": "Пополните ваш кошелек, передав криптовалюту из другого кошелька или аккаунта.", - "title": "Получить криптовалюту" + "description": "Перевести токены с другого кошелька или криптобиржи.", + "title": "Получить средства" } }, "description": "Когда этот кошелек покупает или получает токены, они появляются здесь.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Из аккаунта", + "cta": "Привязать аккаунт", "description": "Пополните ваш кошелек, передав криптовалюту из другого кошелька или аккаунта", "title": "Получить криптовалюту" } @@ -790,6 +787,15 @@ }, "title": "Все готово" }, + "editName": { + "button": { + "create": "Создать кошелек" + }, + "label": "Псевдоним", + "subtitle": "Дайте своему кошельку прозвище", + "title": "Этот никнейм виден только вам", + "walletAddress": "Ваш публичный адрес будет {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Импортируйте с телефона", @@ -1260,6 +1266,11 @@ "security": "Безопасность", "support": "Поддерживать", "wallet": { + "action": { + "hide": "Скрыть кошельки", + "showAll_one": "Показать один кошелек", + "showAll_other": "Показать все {{count}} кошельков" + }, "button": { "viewAll": "Посмотреть все", "viewLess": "Посмотреть меньше" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Ярлыки не являются общедоступными. Они хранятся локально и видны только вам.", - "save": "Сохранить изменения" + "disclaimer": "Этот никнейм виден только вам.", + "save": "Сохранить изменения", + "title": "Изменить никнейм" }, "label": "Псевдоним", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Недостаточно ликвидности" }, "networkFee": { - "highRelativeToValue": "Стоимость сети превышает 10 % от общей стоимости транзакции.", "message": "Это стоимость обработки вашей транзакции в блокчейне. Uniswap не получает никакой доли этих комиссий." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Для обеспечения наилучшего взаимодействия с Uniswap взимаются комиссии. Комиссия за этот обмен не взимается.", - "included": "Комиссия взимается для обеспечения наилучшего качества работы с Uniswap и уже учтена в этой цитате." + "default": "Комиссия взимается с некоторых избранных токенов, чтобы обеспечить максимальное удобство работы с Uniswap. Комиссия за этот обмен не взимается.", + "included": "Комиссии взимаются с некоторых избранных токенов, чтобы обеспечить наилучшее взаимодействие с Uniswap, и они уже учтены в этой цитате." }, "title": "Комиссия за своп" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Недостаточно {{tokenSymbol}} на {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Подключен к {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/th-TH.json b/packages/uniswap/src/i18n/locales/translations/th-TH.json index f82d2a23d70..3531c1f3848 100644 --- a/packages/uniswap/src/i18n/locales/translations/th-TH.json +++ b/packages/uniswap/src/i18n/locales/translations/th-TH.json @@ -209,7 +209,6 @@ "notNow": "ไม่ใช่ตอนนี้", "ok": "ตกลง", "paste": "แปะ", - "pay": "จ่าย", "receive": "รับ", "remove": "ลบ", "restore": "คืนค่า", @@ -267,9 +266,8 @@ "systemSettings": "การตั้งค่า" }, "text": { - "connected": "เชื่อมต่อแล้ว", - "disconnected": "ตัดการเชื่อมต่อแล้ว", "error": "ข้อผิดพลาด", + "loading": "กำลังโหลด", "notAvailable": "ไม่มี", "unknown": "ไม่ทราบ" } @@ -507,7 +505,6 @@ "load": "ไม่สามารถโหลดโทเค็นที่จะซื้อได้", "max": "สูงสุด {{amount}}", "min": "ขั้นต่ำ {{amount}}", - "unavailable": "บริการนี้ไม่สามารถใช้ได้ในภูมิภาคของคุณ", "unsupported": "ไม่รองรับในภูมิภาค", "usd": "สามารถซื้อได้ในสกุลเงิน USD เท่านั้น" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "ซื้อ crypto ด้วยบัตรเดบิตหรือบัญชีธนาคาร", - "title": "ซื้อ crypto ด้วยบัตร" + "description": "คุณจะต้องมี ETH เพื่อเริ่มต้น ซื้อด้วยบัตรหรือธนาคาร", + "title": "ซื้อสกุลเงินดิจิทัล" }, "import": { "description": "ป้อนวลีกู้คืนของกระเป๋าเงินนี้เพื่อเริ่มการแลกเปลี่ยนและส่ง", "title": "กระเป๋าสตางค์นำเข้า" }, "receive": { - "description": "เติมเงินในกระเป๋าของคุณโดยการโอน crypto จากกระเป๋าเงินหรือบัญชีอื่น.", - "title": "รับการเข้ารหัสลับ" + "description": "โอนโทเค็นจากกระเป๋าเงินอื่นหรือการแลกเปลี่ยน crypto", + "title": "รับเงินทุน" } }, "description": "เมื่อกระเป๋าเงินนี้ซื้อหรือรับโทเค็น โทเค็นจะปรากฏที่นี่", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "จากบัญชี", + "cta": "เชื่อมโยงบัญชี", "description": "เติมเงินในกระเป๋าของคุณโดยการโอน crypto จากกระเป๋าเงินหรือบัญชีอื่น", "title": "รับการเข้ารหัสลับ" } @@ -790,6 +787,15 @@ }, "title": "คุณทุกชุด" }, + "editName": { + "button": { + "create": "สร้างกระเป๋าเงิน" + }, + "label": "ชื่อเล่น", + "subtitle": "ตั้งชื่อเล่นให้กับกระเป๋าเงินของคุณ", + "title": "ชื่อเล่นนี้จะปรากฏให้คุณเห็นเท่านั้น", + "walletAddress": "ที่อยู่สาธารณะของคุณคือ {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "นำเข้าจากโทรศัพท์ของคุณ", @@ -1260,6 +1266,11 @@ "security": "ความปลอดภัย", "support": "สนับสนุน", "wallet": { + "action": { + "hide": "ซ่อนกระเป๋าสตางค์", + "showAll_one": "โชว์กระเป๋าสตางค์ใบหนึ่ง", + "showAll_other": "แสดงกระเป๋าสตางค์ทั้งหมด {{count}} ใบ" + }, "button": { "viewAll": "ดูทั้งหมด", "viewLess": "ดูน้อยลง" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "ป้ายกำกับไม่เปิดเผยต่อสาธารณะ ข้อมูลเหล่านี้จะถูกจัดเก็บไว้ในเครื่องและมีเพียงคุณเท่านั้นที่มองเห็นได้", - "save": "บันทึกการเปลี่ยนแปลง" + "disclaimer": "ชื่อเล่นนี้จะปรากฏให้คุณเห็นเท่านั้น", + "save": "บันทึกการเปลี่ยนแปลง", + "title": "แก้ไขชื่อเล่น" }, "label": "ชื่อเล่น", "notifications": { @@ -1571,7 +1584,6 @@ "title": "สภาพคล่องไม่เพียงพอ" }, "networkFee": { - "highRelativeToValue": "ต้นทุนเครือข่ายเกิน 10% ของมูลค่าธุรกรรมทั้งหมดของคุณ", "message": "นี่คือต้นทุนในการประมวลผลธุรกรรมของคุณบนบล็อคเชน Uniswap ไม่ได้รับส่วนแบ่งค่าธรรมเนียมเหล่านี้" }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "มีการคิดค่าธรรมเนียมเพื่อให้แน่ใจว่าได้รับประสบการณ์ที่ดีที่สุดกับ Uniswap ไม่มีค่าธรรมเนียมที่เกี่ยวข้องกับการแลกเปลี่ยนนี้", - "included": "จะมีการคิดค่าธรรมเนียมเพื่อให้แน่ใจว่าได้รับประสบการณ์ที่ดีที่สุดกับ Uniswap และได้รวมอยู่ในราคาเสนอนี้แล้ว" + "default": "จะมีการคิดค่าธรรมเนียมกับโทเค็นที่เลือกบางส่วนเพื่อให้แน่ใจว่าได้รับประสบการณ์ที่ดีที่สุดกับ Uniswap ไม่มีค่าธรรมเนียมที่เกี่ยวข้องกับการแลกเปลี่ยนนี้", + "included": "จะมีการคิดค่าธรรมเนียมกับโทเค็นที่เลือกบางส่วนเพื่อให้แน่ใจว่าได้รับประสบการณ์ที่ดีที่สุดกับ Uniswap และได้รวมอยู่ในราคาเสนอนี้แล้ว" }, "title": "ค่าธรรมเนียมการแลกเปลี่ยน" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "ยังไม่พอ {{tokenSymbol}} บน {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "เชื่อมต่อกับ {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/tr-TR.json b/packages/uniswap/src/i18n/locales/translations/tr-TR.json index 02bae271194..22f3e682b46 100644 --- a/packages/uniswap/src/i18n/locales/translations/tr-TR.json +++ b/packages/uniswap/src/i18n/locales/translations/tr-TR.json @@ -209,7 +209,6 @@ "notNow": "Şimdi değil", "ok": "TAMAM", "paste": "Yapıştırmak", - "pay": "Ödemek", "receive": "Almak", "remove": "Kaldırmak", "restore": "Eski haline getirmek", @@ -267,9 +266,8 @@ "systemSettings": "Ayarlar" }, "text": { - "connected": "Bağlı", - "disconnected": "Bağlantı kesildi", "error": "Hata", + "loading": "Yükleniyor", "notAvailable": "Yok", "unknown": "Bilinmeyen" } @@ -507,7 +505,6 @@ "load": "Satın alınacak jetonlar yüklenemedi", "max": "Maksimum {{amount}}", "min": "Minimum {{amount}}", - "unavailable": "Bu hizmet bölgenizde kullanılamıyor", "unsupported": "Bölgede desteklenmiyor", "usd": "Yalnızca USD cinsinden satın alınabilir" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Banka kartı veya banka hesabıyla kripto satın alın.", - "title": "Kartla kripto satın alın" + "description": "Başlamak için ETH'ye ihtiyacınız olacak. Kart veya banka ile satın alın.", + "title": "Kripto satın al" }, "import": { "description": "Değiştirmeye ve göndermeye başlamak için bu cüzdanın kurtarma ifadesini girin.", "title": "Cüzdanı içe aktar" }, "receive": { - "description": "Başka bir cüzdan veya hesaptan kripto aktararak cüzdanınıza para yatırın.", - "title": "Kripto al" + "description": "Tokenları başka bir cüzdandan veya kripto borsasından aktarın.", + "title": "Gelen kaynaklar" } }, "description": "Bu cüzdan token satın aldığında veya aldığında burada görünecekler.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Bir hesaptan", + "cta": "Hesap bağlama", "description": "Başka bir cüzdan veya hesaptan kripto aktararak cüzdanınıza para yatırın", "title": "Kripto al" } @@ -790,6 +787,15 @@ }, "title": "Hazırsınız" }, + "editName": { + "button": { + "create": "Cüzdan oluştur" + }, + "label": "Takma ad", + "subtitle": "Cüzdanınıza bir takma ad verin", + "title": "Bu takma adı yalnızca siz görebilirsiniz", + "walletAddress": "Genel adresiniz {{walletAddress}}olacaktır" + }, "extension": { "connectMobile": { "button": "Telefonunuzdan içe aktarın", @@ -1260,6 +1266,11 @@ "security": "Güvenlik", "support": "Destek", "wallet": { + "action": { + "hide": "Cüzdanları gizle", + "showAll_one": "Bir cüzdan göster", + "showAll_other": "{{count}} cüzdanın tümünü göster" + }, "button": { "viewAll": "Hepsini gör", "viewLess": "Daha az görüntüle" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Etiketler herkese açık değildir. Yerel olarak depolanırlar ve yalnızca sizin tarafınızdan görülebilirler.", - "save": "Değişiklikleri Kaydet" + "disclaimer": "Bu takma adı yalnızca siz görebilirsiniz.", + "save": "Değişiklikleri Kaydet", + "title": "Takma adı düzenle" }, "label": "Takma ad", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Yeterli likidite yok" }, "networkFee": { - "highRelativeToValue": "Ağ maliyeti toplam işlem değerinizin %10'unu aşıyor.", "message": "Bu, işleminizin blockchain üzerinde işlenmesinin maliyetidir. Uniswap bu ücretlerden herhangi bir pay almamaktadır." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Uniswap ile en iyi deneyimi sağlamak için ücretler uygulanır. Bu takasla ilgili herhangi bir ücret yoktur.", - "included": "Uniswap ile en iyi deneyimi sağlamak için ücretler uygulanır ve bu fiyat teklifine zaten dahil edilmiştir." + "default": "Uniswap ile en iyi deneyimi sağlamak için seçilen birkaç tokena ücretler uygulanır. Bu takasla ilgili herhangi bir ücret yoktur.", + "included": "Uniswap ile en iyi deneyimi sağlamak için seçilen birkaç tokena ücretler uygulanıyor ve bu fiyat teklifine zaten dahil edilmiş durumda." }, "title": "Takas ücreti" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "{{chain}}üzerinde {{tokenSymbol}} yeterli değil" - } - }, "walletConnect": { "dapps": { "connection": " {{dappNameOrUrl}}'e bağlanıldı", diff --git a/packages/uniswap/src/i18n/locales/translations/uk-UA.json b/packages/uniswap/src/i18n/locales/translations/uk-UA.json index da984348bf5..446a2b7d7a4 100644 --- a/packages/uniswap/src/i18n/locales/translations/uk-UA.json +++ b/packages/uniswap/src/i18n/locales/translations/uk-UA.json @@ -209,7 +209,6 @@ "notNow": "Не зараз", "ok": "в порядку", "paste": "Вставити", - "pay": "платити", "receive": "Отримати", "remove": "видалити", "restore": "Відновлення", @@ -267,9 +266,8 @@ "systemSettings": "Налаштування" }, "text": { - "connected": "Підключено", - "disconnected": "Відключено", "error": "Помилка", + "loading": "Завантаження", "notAvailable": "N/A", "unknown": "Невідомий" } @@ -507,7 +505,6 @@ "load": "Не вдалося завантажити токени для покупки", "max": "Максимум {{amount}}", "min": "Мінімум {{amount}}", - "unavailable": "Ця послуга недоступна у вашому регіоні", "unsupported": "Не підтримується в регіоні", "usd": "Доступно лише для покупки в доларах США" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Купуйте криптовалюту за допомогою дебетової картки або банківського рахунку.", - "title": "Купуйте криптовалюту за допомогою картки" + "description": "Щоб почати, вам знадобиться ETH. Купуйте на картку або банк.", + "title": "Купуйте криптовалюту" }, "import": { "description": "Введіть фразу відновлення цього гаманця, щоб почати обмін і надсилання.", "title": "Імпортний гаманець" }, "receive": { - "description": "Поповніть свій гаманець за переказом крипто з іншого гаманця або рахунку.", - "title": "Отримайте криптовалюту" + "description": "Передайте токени з іншого гаманця або криптобіржі.", + "title": "Отримати кошти" } }, "description": "Коли цей гаманець купує або отримує токени, вони з’являтимуться тут.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "З облікового запису", + "cta": "Прив'язати обліковий запис", "description": "Поповніть свій гаманець за переказом крипто з іншого гаманця або рахунку", "title": "Отримайте криптовалюту" } @@ -790,6 +787,15 @@ }, "title": "Ви готові" }, + "editName": { + "button": { + "create": "Створити гаманець" + }, + "label": "псевдонім", + "subtitle": "Дайте своєму гаманцю псевдонім", + "title": "Цей псевдонім бачите лише ви", + "walletAddress": "Ваша публічна адреса буде {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Імпортуйте з телефону", @@ -1260,6 +1266,11 @@ "security": "Безпека", "support": "Підтримка", "wallet": { + "action": { + "hide": "Сховати гаманці", + "showAll_one": "Показати один гаманець", + "showAll_other": "Показати всі {{count}} гаманців" + }, "button": { "viewAll": "Подивитись все", "viewLess": "Переглянути менше" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Мітки не є публічними. Вони зберігаються локально й видимі лише вам.", - "save": "Зберегти зміни" + "disclaimer": "Цей псевдонім бачите лише ви.", + "save": "Зберегти зміни", + "title": "Редагувати псевдонім" }, "label": "псевдонім", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Не вистачає ліквідності" }, "networkFee": { - "highRelativeToValue": "Вартість мережі перевищує 10% від загальної вартості транзакції.", "message": "Це вартість обробки вашої транзакції в блокчейні. Uniswap не отримує жодної частки цих зборів." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Комісія стягується, щоб забезпечити найкращий досвід використання Uniswap. За цей обмін не стягується комісія.", - "included": "Комісії застосовуються для забезпечення найкращого досвіду використання Uniswap і вже враховані в цій пропозиції." + "default": "Комісії застосовуються до кількох обраних токенів, щоб забезпечити найкращий досвід роботи з Uniswap. За цей обмін не стягується комісія.", + "included": "Комісії застосовуються до кількох обраних токенів, щоб забезпечити найкращий досвід роботи з Uniswap, і вже були враховані в цій цитаті." }, "title": "Комісія за обмін" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Недостатньо {{tokenSymbol}} на {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Підключено до {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/ur-PK.json b/packages/uniswap/src/i18n/locales/translations/ur-PK.json index fa97c53606f..0492516ecd2 100644 --- a/packages/uniswap/src/i18n/locales/translations/ur-PK.json +++ b/packages/uniswap/src/i18n/locales/translations/ur-PK.json @@ -209,7 +209,6 @@ "notNow": "ابھی نہیں", "ok": "ٹھیک ہے", "paste": "چسپاں کریں۔", - "pay": "ادا کریں۔", "receive": "وصول کریں۔", "remove": "دور", "restore": "بحال کریں۔", @@ -267,9 +266,8 @@ "systemSettings": "ترتیبات" }, "text": { - "connected": "جڑا ہوا", - "disconnected": "منقطع", "error": "خرابی", + "loading": "لوڈ ہو رہا ہے۔", "notAvailable": "N / A", "unknown": "نامعلوم" } @@ -507,7 +505,6 @@ "load": "خریدنے کے لیے ٹوکن لوڈ نہیں ہو سکے۔", "max": "زیادہ سے زیادہ {{amount}}", "min": "کم از کم {{amount}}", - "unavailable": "یہ سروس آپ کے علاقے میں دستیاب نہیں ہے۔", "unsupported": "خطے میں تعاون یافتہ نہیں ہے۔", "usd": "صرف USD میں خریدنے کے لیے دستیاب ہے۔" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "ڈیبٹ کارڈ یا بینک اکاؤنٹ سے کرپٹو خریدیں۔", - "title": "کارڈ کے ساتھ کریپٹو خریدیں۔" + "description": "شروع کرنے کے لیے آپ کو ETH کی ضرورت ہوگی۔ کارڈ یا بینک سے خریدیں۔", + "title": "کریپٹو لیں" }, "import": { "description": "تبادلہ اور بھیجنا شروع کرنے کے لیے اس بٹوے کی بازیابی کا جملہ درج کریں۔", "title": "پرس درآمد کریں۔" }, "receive": { - "description": "دوسرے بٹوے یا اکاؤنٹ سے کریپٹو منتقل کر کے اپنے بٹوے کو فنڈ دیں۔", - "title": "کرپٹو وصول کریں۔" + "description": "دوسرے والیٹ یا کرپٹو ایکسچینج سے ٹوکنز منتقل کریں۔", + "title": "فنڈز وصول کریں۔" } }, "description": "جب یہ پرس ٹوکن خریدتا یا وصول کرتا ہے، تو وہ یہاں ظاہر ہوں گے۔", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "اکاؤنٹ سے", + "cta": "ایک اکاؤنٹ لنک کریں۔", "description": "دوسرے بٹوے یا اکاؤنٹ سے کریپٹو منتقل کر کے اپنے بٹوے کو فنڈ دیں۔", "title": "کرپٹو وصول کریں۔" } @@ -790,6 +787,15 @@ }, "title": "آپ بالکل تیار ہیں۔" }, + "editName": { + "button": { + "create": "پرس بنائیں" + }, + "label": "عرفی نام", + "subtitle": "اپنے بٹوے کو ایک عرفی نام دیں۔", + "title": "یہ عرفی نام صرف آپ کو نظر آتا ہے۔", + "walletAddress": "آپ کا عوامی پتہ ہوگا {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "اپنے فون سے درآمد کریں۔", @@ -1260,6 +1266,11 @@ "security": "سیکورٹی", "support": "حمایت", "wallet": { + "action": { + "hide": "بٹوے چھپائیں۔", + "showAll_one": "ایک پرس دکھائیں۔", + "showAll_other": "تمام {{count}} بٹوے دکھائیں۔" + }, "button": { "viewAll": "سب دیکھیں", "viewLess": "کم دیکھیں" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "لیبل عوامی نہیں ہیں۔ وہ مقامی طور پر ذخیرہ کیے جاتے ہیں اور صرف آپ کو دکھائی دیتے ہیں۔", - "save": "تبدیلیاں محفوظ کرو" + "disclaimer": "یہ عرفی نام صرف آپ کو نظر آتا ہے۔", + "save": "تبدیلیاں محفوظ کرو", + "title": "عرفی نام میں ترمیم کریں۔" }, "label": "عرفی نام", "notifications": { @@ -1571,7 +1584,6 @@ "title": "کافی لیکویڈیٹی نہیں ہے۔" }, "networkFee": { - "highRelativeToValue": "نیٹ ورک کی لاگت آپ کے لین دین کی کل قیمت کے 10% سے زیادہ ہے۔", "message": "یہ بلاکچین پر آپ کے لین دین پر کارروائی کرنے کی لاگت ہے۔ Uniswap ان فیسوں کا کوئی حصہ وصول نہیں کرتا ہے۔" }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Uniswap کے ساتھ بہترین تجربہ کو یقینی بنانے کے لیے فیس کا اطلاق ہوتا ہے۔ اس تبادلہ کے ساتھ کوئی فیس وابستہ نہیں ہے۔", - "included": "Uniswap کے ساتھ بہترین تجربہ کو یقینی بنانے کے لیے فیس کا اطلاق کیا جاتا ہے، اور اس اقتباس میں پہلے ہی شامل کیا جا چکا ہے۔" + "default": "Uniswap کے ساتھ بہترین تجربہ کو یقینی بنانے کے لیے چند منتخب ٹوکنز پر فیس لاگو کی جاتی ہے۔ اس تبادلہ سے وابستہ کوئی فیس نہیں ہے۔", + "included": "Uniswap کے ساتھ بہترین تجربہ کو یقینی بنانے کے لیے چند منتخب ٹوکنز پر فیس لاگو کی جاتی ہے، اور اس کوٹ میں پہلے ہی شامل کر دیا گیا ہے۔" }, "title": "تبادلہ فیس" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "{{chain}}پر {{tokenSymbol}} کافی نہیں ہے۔" - } - }, "walletConnect": { "dapps": { "connection": " {{dappNameOrUrl}}سے منسلک", diff --git a/packages/uniswap/src/i18n/locales/translations/vi-VN.json b/packages/uniswap/src/i18n/locales/translations/vi-VN.json index 05b34d3c332..0339ecb7b58 100644 --- a/packages/uniswap/src/i18n/locales/translations/vi-VN.json +++ b/packages/uniswap/src/i18n/locales/translations/vi-VN.json @@ -209,7 +209,6 @@ "notNow": "Không phải bây giờ", "ok": "ĐƯỢC RỒI", "paste": "Dán", - "pay": "Chi trả", "receive": "Nhận được", "remove": "Di dời", "restore": "Khôi phục", @@ -267,9 +266,8 @@ "systemSettings": "Cài đặt" }, "text": { - "connected": "Đã kết nối", - "disconnected": "Đã ngắt kết nối", "error": "Lỗi", + "loading": "Đang tải", "notAvailable": "không áp dụng", "unknown": "không xác định" } @@ -507,7 +505,6 @@ "load": "Không thể tải token để mua", "max": "Tối đa {{amount}}", "min": "Tối thiểu {{amount}}", - "unavailable": "Dịch vụ này không khả dụng ở khu vực của bạn", "unsupported": "Không được hỗ trợ trong khu vực", "usd": "Chỉ có thể mua bằng USD" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "Mua tiền điện tử bằng thẻ ghi nợ hoặc tài khoản ngân hàng.", - "title": "Mua tiền điện tử bằng thẻ" + "description": "Bạn sẽ cần ETH để bắt đầu. Mua bằng thẻ hoặc ngân hàng.", + "title": "Mua tiền điện tử" }, "import": { "description": "Nhập cụm từ khôi phục của ví này để bắt đầu trao đổi và gửi.", "title": "Nhập ví" }, "receive": { - "description": "Nạp tiền vào ví của bạn bằng cách chuyển tiền điện tử từ ví hoặc tài khoản khác.", - "title": "Nhận tiền điện tử" + "description": "Chuyển mã thông báo từ ví khác hoặc sàn giao dịch tiền điện tử.", + "title": "Nhận tiền" } }, "description": "Khi ví này mua hoặc nhận token, chúng sẽ xuất hiện ở đây.", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "Từ một tài khoản", + "cta": "Liên kết một tài khoản", "description": "Nạp tiền vào ví của bạn bằng cách chuyển tiền điện tử từ ví hoặc tài khoản khác", "title": "Nhận tiền điện tử" } @@ -790,6 +787,15 @@ }, "title": "Bạn đã sẵn sàng" }, + "editName": { + "button": { + "create": "Tạo ví" + }, + "label": "Tên nick", + "subtitle": "Đặt biệt danh cho ví của bạn", + "title": "Biệt hiệu này chỉ hiển thị với bạn", + "walletAddress": "Địa chỉ công khai của bạn sẽ là {{walletAddress}}" + }, "extension": { "connectMobile": { "button": "Nhập từ điện thoại của bạn", @@ -1260,6 +1266,11 @@ "security": "Bảo vệ", "support": "Ủng hộ", "wallet": { + "action": { + "hide": "Ẩn ví", + "showAll_one": "Hiển thị một ví", + "showAll_other": "Hiển thị tất cả {{count}} ví" + }, "button": { "viewAll": "Xem tất cả", "viewLess": "Xem ít hơn" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "Nhãn không được công khai. Chúng được lưu trữ cục bộ và chỉ hiển thị với bạn.", - "save": "Lưu thay đổi" + "disclaimer": "Biệt hiệu này chỉ hiển thị với bạn.", + "save": "Lưu thay đổi", + "title": "Chỉnh sửa biệt hiệu" }, "label": "Tên nick", "notifications": { @@ -1571,7 +1584,6 @@ "title": "Thanh khoản không đủ" }, "networkFee": { - "highRelativeToValue": "Chi phí mạng vượt quá 10% tổng giá trị giao dịch của bạn.", "message": "Đây là chi phí để xử lý giao dịch của bạn trên blockchain. Uniswap không nhận được bất kỳ phần chia sẻ nào trong số phí này." }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "Phí được áp dụng để đảm bảo trải nghiệm tốt nhất với Uniswap. Không có phí liên quan đến việc trao đổi này.", - "included": "Phí được áp dụng để đảm bảo trải nghiệm tốt nhất với Uniswap và đã được tính vào báo giá này." + "default": "Phí được áp dụng trên một số token chọn lọc để đảm bảo trải nghiệm tốt nhất với Uniswap. Không có phí liên quan đến việc trao đổi này.", + "included": "Phí được áp dụng trên một số token chọn lọc để đảm bảo trải nghiệm tốt nhất với Uniswap và đã được tính vào báo giá này." }, "title": "Phí hoán đổi" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "Không đủ {{tokenSymbol}} trên {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "Đã kết nối với {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/i18n/locales/translations/zh-CN.json b/packages/uniswap/src/i18n/locales/translations/zh-CN.json index 06e19b4a621..51d6d22104a 100644 --- a/packages/uniswap/src/i18n/locales/translations/zh-CN.json +++ b/packages/uniswap/src/i18n/locales/translations/zh-CN.json @@ -209,7 +209,6 @@ "notNow": "稍后再说", "ok": "好的", "paste": "粘贴", - "pay": "支付", "receive": "接收", "remove": "删除", "restore": "恢复", @@ -267,9 +266,8 @@ "systemSettings": "设置" }, "text": { - "connected": "已连接", - "disconnected": "已断开连接", "error": "错误", + "loading": "加载中", "notAvailable": "不适用", "unknown": "未知" } @@ -322,7 +320,7 @@ "label": "数据" }, "function": { - "label": "函数" + "label": "功能" }, "recipient": { "label": "接受者" @@ -405,7 +403,7 @@ }, "metadata": { "marketCap": "{{number}} MCap", - "totalValueLocked": "{{number}} 总锁仓量", + "totalValueLocked": "{{number}} TVL", "volume": "{{number}} 卷" }, "sort": { @@ -413,7 +411,7 @@ "marketCap": "市值", "priceDecrease": "价格下降", "priceIncrease": "价格上涨", - "totalValueLocked": "总锁仓量", + "totalValueLocked": "总锁定价值", "volume": "交易量" }, "option": { @@ -507,7 +505,6 @@ "load": "无法加载要买入的代币", "max": "最大 {{amount}}", "min": "最低 {{amount}}", - "unavailable": "您所在的地区无法使用此项服务", "unsupported": "不支持你的地区", "usd": "只能以美元买入" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "使用借记卡或银行账户购买加密货币。", - "title": "使用卡购买加密货币" + "description": "你需要 ETH 才能开始。用卡或银行买入。", + "title": "买入加密货币" }, "import": { "description": "开始兑换和发送之前请输入这个钱包的恢复短语", "title": "导入钱包" }, "receive": { - "description": "通过从另一个钱包或帐户转移加密来为你的钱包添加资金.", - "title": "接收加密货币" + "description": "从另一个钱包或加密货币交易所转移代币。", + "title": "接收资金" } }, "description": "当此钱包买入或接收代币时,它们会出现在此处。", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "来自帐户", + "cta": "链接一个帐户", "description": "通过从另一个钱包或帐户转移加密来为你的钱包添加资金", "title": "接收加密货币" } @@ -790,6 +787,15 @@ }, "title": "一切就绪" }, + "editName": { + "button": { + "create": "创建钱包" + }, + "label": "昵称", + "subtitle": "给你的钱包起个昵称", + "title": "此昵称只有你自己可见", + "walletAddress": "您的公共地址将是{{walletAddress}}" + }, "extension": { "connectMobile": { "button": "从您的手机导入", @@ -1260,6 +1266,11 @@ "security": "安全", "support": "客服", "wallet": { + "action": { + "hide": "隐藏钱包", + "showAll_one": "显示一个钱包", + "showAll_other": "显示全部 {{count}} 钱包" + }, "button": { "viewAll": "显示全部", "viewLess": "显示更少" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "标签不公开。它们存储在本地并且只有您可见。", - "save": "保存更改" + "disclaimer": "此昵称只有你自己可见", + "save": "保存更改", + "title": "编辑昵称" }, "label": "昵称", "notifications": { @@ -1571,7 +1584,6 @@ "title": "流动性不足" }, "networkFee": { - "highRelativeToValue": "网络费用超过您交易总价值的10%。", "message": "这是在区块链上处理交易的成本。 Uniswap 不会收取这些费用。" }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "收取费用是为了确保获得最佳的 Uniswap 体验。此交换不收取任何费用。", - "included": "收取费用是为了确保获得 Uniswap 的最佳体验,并且已计入此报价中。" + "default": "为了确保 Uniswap 的最佳体验,我们对个别代币收取费用。此兑换不收取任何费用。", + "included": "为了确保 Uniswap 的最佳体验,我们对个别代币收取费用,并且已包含在此报价中。" }, "title": "兑换费用" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "{{chain}}上的 {{tokenSymbol}} 不够" - } - }, "walletConnect": { "dapps": { "connection": "连接到 {{dappNameOrUrl}}", @@ -2117,7 +2124,7 @@ }, "details": { "label": { - "function": "函数: ", + "function": "功能: ", "recipient": "到: ", "sending": "发送: " } diff --git a/packages/uniswap/src/i18n/locales/translations/zh-TW.json b/packages/uniswap/src/i18n/locales/translations/zh-TW.json index 6370f314a2e..e2cbbed7310 100644 --- a/packages/uniswap/src/i18n/locales/translations/zh-TW.json +++ b/packages/uniswap/src/i18n/locales/translations/zh-TW.json @@ -209,7 +209,6 @@ "notNow": "稍後再說", "ok": "好的", "paste": "粘貼", - "pay": "支付", "receive": "接收", "remove": "刪除", "restore": "恢復", @@ -267,9 +266,8 @@ "systemSettings": "設定" }, "text": { - "connected": "已連接", - "disconnected": "已斷開連接", "error": "錯誤", + "loading": "載入中", "notAvailable": "不適用", "unknown": "未知" } @@ -405,7 +403,7 @@ }, "metadata": { "marketCap": "{{number}} MCap", - "totalValueLocked": "{{number}} 總鎖倉量", + "totalValueLocked": "{{number}} TVL", "volume": "{{number}} 卷" }, "sort": { @@ -413,7 +411,7 @@ "marketCap": "市值", "priceDecrease": "價格下降", "priceIncrease": "價格上漲", - "totalValueLocked": "總鎖倉量", + "totalValueLocked": "TVL", "volume": "交易量" }, "option": { @@ -507,7 +505,6 @@ "load": "無法加載要買入的代幣", "max": "最大 {{amount}}", "min": "最低 {{amount}}", - "unavailable": "您所在的地區無法使用此服務", "unsupported": "不支持你的地區", "usd": "只能以美元買入" }, @@ -594,16 +591,16 @@ "empty": { "action": { "buy": { - "description": "使用金融卡或銀行帳戶購買加密貨幣。", - "title": "用卡片購買加密貨幣" + "description": "你需要 ETH 才能開始。用卡片或銀行買入。", + "title": "買入加密貨幣" }, "import": { "description": "開始兌換和發送之前請輸入這個錢包的恢復短語", "title": "導入錢包" }, "receive": { - "description": "透過從另一個錢包或帳戶轉移加密貨幣來為您的錢包充值.", - "title": "接收加密貨幣" + "description": "從另一個錢包或加密貨幣交易所轉移代幣。", + "title": "接收資金" } }, "description": "當此錢包買入或接收代幣時,它們會出現在此。", @@ -617,7 +614,7 @@ }, "upsell": { "receive": { - "cta": "來自帳戶", + "cta": "關聯帳戶", "description": "透過從另一個錢包或帳戶轉移加密貨幣來為您的錢包充值", "title": "接收加密貨幣" } @@ -790,6 +787,15 @@ }, "title": "你已經準備好了" }, + "editName": { + "button": { + "create": "創建錢包" + }, + "label": "暱稱", + "subtitle": "給你的錢包個暱稱", + "title": "此暱稱只有你自己可見", + "walletAddress": "您的公共地址將是{{walletAddress}}" + }, "extension": { "connectMobile": { "button": "從您的手機匯入", @@ -1260,6 +1266,11 @@ "security": "安全", "support": "客服", "wallet": { + "action": { + "hide": "隱藏錢包", + "showAll_one": "顯示一個錢包", + "showAll_other": "顯示全部 {{count}} 錢包" + }, "button": { "viewAll": "顯示全部", "viewLess": "顯示更少" @@ -1443,7 +1454,9 @@ }, "editLabel": { "description": "標籤不公開。它們儲存在本地並且只有您可見。", - "save": "儲存變更" + "disclaimer": "此暱稱只有你自己可見", + "save": "儲存變更", + "title": "編輯暱稱" }, "label": "暱稱", "notifications": { @@ -1571,7 +1584,6 @@ "title": "流動性不足" }, "networkFee": { - "highRelativeToValue": "網路成本超過您總交易價值的10%。", "message": "這是在區塊鏈上處理交易的成本。 Uniswap 不會收取這些費用。" }, "offline": { @@ -1592,8 +1604,8 @@ }, "uniswapFee": { "message": { - "default": "收費是為了確保 Uniswap 的最佳體驗。此交換不收取任何費用。", - "included": "收取費用是為了確保 Uniswap 的最佳體驗,並且已計入此報價中。" + "default": "為了確保 Uniswap 的最佳體驗,我們對個別代幣收取費用。此兌換不收取任何費用。", + "included": "為了確保 Uniswap 的最佳體驗,我們對個別代幣收取費用,並且已包含在此報價中。" }, "title": "兌換費用" }, @@ -2047,11 +2059,6 @@ } } }, - "uwulink": { - "error": { - "insufficientTokens": "還不夠 {{tokenSymbol}} 就 {{chain}}" - } - }, "walletConnect": { "dapps": { "connection": "連接到 {{dappNameOrUrl}}", diff --git a/packages/uniswap/src/utils/cloud-backup/getCloudProviderName.native.ts b/packages/uniswap/src/utils/cloud-backup/getCloudProviderName.native.ts index 37c0199b89b..7a19eef443a 100644 --- a/packages/uniswap/src/utils/cloud-backup/getCloudProviderName.native.ts +++ b/packages/uniswap/src/utils/cloud-backup/getCloudProviderName.native.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line no-restricted-imports import { Platform } from 'react-native' export function getCloudProviderName(): string { diff --git a/packages/uniswap/src/utils/env/index.native.ts b/packages/uniswap/src/utils/env/index.native.ts index 6965974cf5e..9072a6aed16 100644 --- a/packages/uniswap/src/utils/env/index.native.ts +++ b/packages/uniswap/src/utils/env/index.native.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line no-restricted-imports import DeviceInfo from 'react-native-device-info' const BUNDLE_ID = DeviceInfo.getBundleId() diff --git a/packages/uniswap/src/utils/platform/index.native.ts b/packages/uniswap/src/utils/platform/index.native.ts index 0b820449b5e..b17aee6bddb 100644 --- a/packages/uniswap/src/utils/platform/index.native.ts +++ b/packages/uniswap/src/utils/platform/index.native.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line no-restricted-imports import { Platform } from 'react-native' // Platform diff --git a/packages/wallet/src/constants/misc.ts b/packages/wallet/src/constants/misc.ts index 19e55a39182..31cf15a1c83 100644 --- a/packages/wallet/src/constants/misc.ts +++ b/packages/wallet/src/constants/misc.ts @@ -7,5 +7,4 @@ export enum PollingInterval { KindaFast = 30 * ONE_SECOND_MS, Fast = 15 * ONE_SECOND_MS, // slightly higher than block times for mainnet LightningMcQueen = 6 * ONE_SECOND_MS, // slightly higher than block times for polygon - UltraFast = 3 * ONE_SECOND_MS, // used for swap related polling that must be live } diff --git a/packages/wallet/src/features/fiatOnRamp/api.ts b/packages/wallet/src/features/fiatOnRamp/api.ts index 716de28bc34..6ed0fe8e288 100644 --- a/packages/wallet/src/features/fiatOnRamp/api.ts +++ b/packages/wallet/src/features/fiatOnRamp/api.ts @@ -262,7 +262,6 @@ export const fiatOnRampAggregatorApi = createApi({ }), fiatOnRampAggregatorTransferServiceProviders: builder.query({ query: () => '/transfer-service-providers', - keepUnusedDataFor: 60 * 60, // 1 hour }), fiatOnRampAggregatorSupportedTokens: builder.query< FORSupportedTokensResponse, diff --git a/packages/wallet/src/features/gas/api.ts b/packages/wallet/src/features/gas/api.ts index 7e7821b391c..270e9ef3a89 100644 --- a/packages/wallet/src/features/gas/api.ts +++ b/packages/wallet/src/features/gas/api.ts @@ -1,14 +1,12 @@ import { providers } from 'ethers' import { uniswapUrls } from 'uniswap/src/constants/urls' import { useRestQuery } from 'uniswap/src/data/rest' -import { PollingInterval } from 'wallet/src/constants/misc' import { getPollingIntervalByBlocktime } from 'wallet/src/features/chains/utils' import { GasFeeResponse } from 'wallet/src/features/gas/types' export function useGasFeeQuery( tx: Maybe, - skip?: boolean, - pollingInterval?: PollingInterval + skip?: boolean ): ReturnType> { return useRestQuery( uniswapUrls.gasServicePath, @@ -17,9 +15,9 @@ export function useGasFeeQuery( tx as providers.TransactionRequest, ['type', 'gasLimit', 'gasLimit', 'gasFee', 'gasPrice', 'maxFeePerGas', 'maxPriorityFeePerGas'], { - pollInterval: pollingInterval ?? getPollingIntervalByBlocktime(tx?.chainId), + pollInterval: getPollingIntervalByBlocktime(tx?.chainId), skip: skip || !tx, - ttlMs: pollingInterval ?? getPollingIntervalByBlocktime(tx?.chainId), + ttlMs: getPollingIntervalByBlocktime(tx?.chainId), } ) } diff --git a/packages/wallet/src/features/gas/hooks.ts b/packages/wallet/src/features/gas/hooks.ts index f908237d59d..d8a401cab16 100644 --- a/packages/wallet/src/features/gas/hooks.ts +++ b/packages/wallet/src/features/gas/hooks.ts @@ -2,7 +2,6 @@ import { BigNumber, providers } from 'ethers' import { useMemo } from 'react' import { logger } from 'utilities/src/logger/logger' import { ChainId } from 'wallet/src/constants/chains' -import { PollingInterval } from 'wallet/src/constants/misc' import { TRANSACTION_CANCELLATION_GAS_FACTOR } from 'wallet/src/constants/transactions' import { FeeDetails, getAdjustedGasFeeDetails } from 'wallet/src/features/gas/adjustGasFee' import { useGasFeeQuery } from 'wallet/src/features/gas/api' @@ -20,10 +19,9 @@ type CancelationGasFeeDetails = { export function useTransactionGasFee( tx: Maybe, speed: GasSpeed = GasSpeed.Urgent, - skip?: boolean, - pollingInterval?: PollingInterval + skip?: boolean ): GasFeeResult { - const { data, error, loading } = useGasFeeQuery(tx, skip, pollingInterval) + const { data, error, loading } = useGasFeeQuery(tx, skip) return useMemo(() => { if (!data) { diff --git a/packages/wallet/src/features/language/saga.ts b/packages/wallet/src/features/language/saga.ts index f0f360fac4b..8a99055a95e 100644 --- a/packages/wallet/src/features/language/saga.ts +++ b/packages/wallet/src/features/language/saga.ts @@ -35,8 +35,6 @@ function* appLanguageSaga(action: ReturnType) { const languageToSet = !preferredLanguage ? yield* call(getDeviceLanguage) : preferredLanguage const localeToSet = getLocale(languageToSet) - - // Syncs language with Firestore every app start to make sure language is up to date yield* put(setCurrentLanguage(languageToSet)) if (currentAppLanguage === languageToSet && localeToSet === i18n.language) { diff --git a/packages/wallet/src/features/nfts/utils.ts b/packages/wallet/src/features/nfts/utils.ts index d7592d63968..fbc007a1827 100644 --- a/packages/wallet/src/features/nfts/utils.ts +++ b/packages/wallet/src/features/nfts/utils.ts @@ -54,6 +54,6 @@ export const getIsNftHidden = ({ return true } const nftKey = getNFTAssetKey(contractAddress, tokenId) - const nftIsVisible = nftVisibility[nftKey]?.isVisible ?? isSpam === false + const nftIsVisible = !!nftVisibility[nftKey]?.isVisible return isSpam || !nftIsVisible } diff --git a/packages/wallet/src/features/transactions/swap/trade/legacy/hooks.ts b/packages/wallet/src/features/transactions/swap/trade/legacy/hooks.ts index 1563790a9b3..00f878a6483 100644 --- a/packages/wallet/src/features/transactions/swap/trade/legacy/hooks.ts +++ b/packages/wallet/src/features/transactions/swap/trade/legacy/hooks.ts @@ -13,7 +13,6 @@ import { logger } from 'utilities/src/logger/logger' import { flattenObjectOfObjects } from 'utilities/src/primitives/objects' import { useAsyncData, usePrevious } from 'utilities/src/react/hooks' import { ChainId } from 'wallet/src/constants/chains' -import { PollingInterval } from 'wallet/src/constants/misc' import { ContractManager } from 'wallet/src/features/contracts/ContractManager' import { useTransactionGasFee } from 'wallet/src/features/gas/hooks' import { GasFeeResult, GasSpeed, SimulatedGasEstimationInfo } from 'wallet/src/features/gas/types' @@ -367,13 +366,7 @@ export function useSwapTxAndGasInfoLegacy({ skipGasFeeQuery ) - const swapGasFee = useTransactionGasFee( - transactionRequest, - GasSpeed.Urgent, - skipGasFeeQuery, - // Poll often to ensure swap txn request is never expected to fail - PollingInterval.UltraFast - ) + const swapGasFee = useTransactionGasFee(transactionRequest, GasSpeed.Urgent, skipGasFeeQuery) const quote = trade.trade?.quoteData?.quoteType === QuoteType.RoutingApi diff --git a/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useSwapTxAndGasInfoTradingApi.ts b/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useSwapTxAndGasInfoTradingApi.ts index 46952471b36..9e0ecf7d195 100644 --- a/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useSwapTxAndGasInfoTradingApi.ts +++ b/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useSwapTxAndGasInfoTradingApi.ts @@ -39,7 +39,6 @@ export function useSwapTxAndGasInfoTradingApi({ derivedSwapInfo, // Dont send transaction request if invalid or missing approval data skip: !tokenApprovalInfo?.action || tokenApprovalInfo.action === ApprovalAction.Unknown, - tokenApprovalInfo, }) const approvalError = tokenApprovalInfo?.action === ApprovalAction.Unknown diff --git a/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useTransactionRequestInfo.ts b/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useTransactionRequestInfo.ts index 107cfdc68ca..1890b2a5723 100644 --- a/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useTransactionRequestInfo.ts +++ b/packages/wallet/src/features/transactions/swap/trade/tradingApi/hooks/useTransactionRequestInfo.ts @@ -4,7 +4,7 @@ import { useEffect, useMemo, useRef } from 'react' import { uniswapUrls } from 'uniswap/src/constants/urls' import { useRestQuery } from 'uniswap/src/data/rest' import { logger } from 'utilities/src/logger/logger' -import { PollingInterval } from 'wallet/src/constants/misc' +import { ONE_MINUTE_MS } from 'utilities/src/time/time' import { CreateSwapRequest, CreateSwapResponse, @@ -20,10 +20,6 @@ import { getClassicQuoteFromResponse, isClassicQuote, } from 'wallet/src/features/transactions/swap/trade/tradingApi/utils' -import { - ApprovalAction, - TokenApprovalInfo, -} from 'wallet/src/features/transactions/swap/trade/types' import { DerivedSwapInfo } from 'wallet/src/features/transactions/swap/types' import { usePermit2SignatureWithData } from 'wallet/src/features/transactions/swap/usePermit2Signature' import { CurrencyField } from 'wallet/src/features/transactions/transactionState/types' @@ -40,11 +36,9 @@ interface TransactionRequestInfo { export function useTransactionRequestInfo({ derivedSwapInfo, - tokenApprovalInfo, skip, }: { derivedSwapInfo: DerivedSwapInfo - tokenApprovalInfo: TokenApprovalInfo | undefined skip: boolean }): TransactionRequestInfo { const formatter = useLocalizationContext() @@ -64,11 +58,6 @@ export function useTransactionRequestInfo({ /**skip=*/ !requiresPermit2Sig || skip ) - /** - * Simulate transactions to ensure they will not fail on-chain. Do not simulate for txs that need an approval as those require Tenderly to simulate and it is not currently integrated into the gas servic - */ - const shouldSimulateTxn = tokenApprovalInfo?.action === ApprovalAction.None - // Format request args const swapRequestArgs: CreateSwapRequest | undefined = useMemo(() => { if (!quote) { @@ -94,16 +83,8 @@ export function useTransactionRequestInfo({ quote: quote.quote, permitData: quote.permitData ?? undefined, signature: signatureInfo.signature, - simulateTransaction: shouldSimulateTxn, - refreshGasPrice: true, } - }, [ - quote, - requiresPermit2Sig, - shouldSimulateTxn, - signatureInfo.signature, - tradeWithStatus.trade?.slippageTolerance, - ]) + }, [quote, requiresPermit2Sig, signatureInfo.signature, tradeWithStatus.trade?.slippageTolerance]) // Wrap transaction request const isWrapApplicable = derivedSwapInfo.wrapType !== WrapType.NotApplicable @@ -120,9 +101,7 @@ export function useTransactionRequestInfo({ swapRequestArgs ?? {}, ['swap', 'gasFee', 'requestId', 'txFailureReasons'], { - // Poll often to ensure swap quote is never expected to fail - pollInterval: PollingInterval.UltraFast, - ttlMs: PollingInterval.UltraFast, + ttlMs: ONE_MINUTE_MS, skip: skipTransactionRequest, }, 'POST', diff --git a/packages/wallet/src/features/transactions/transfer/getSendPrefilledState.ts b/packages/wallet/src/features/transactions/transfer/getSendPrefilledState.ts index 50f3ed7aae6..608e193d911 100644 --- a/packages/wallet/src/features/transactions/transfer/getSendPrefilledState.ts +++ b/packages/wallet/src/features/transactions/transfer/getSendPrefilledState.ts @@ -35,7 +35,6 @@ export function getSendPrefilledState({ // If specified currency address populate the currency, otherwise default to native token on chain [CurrencyField.INPUT]: chosenToken ?? nativeToken, [CurrencyField.OUTPUT]: null, - showRecipientSelector: true, } return transactionState