ci(release): publish latest release

parent 0f4c50a5
* @uniswap/web-admins
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
mobile/1.26
\ No newline at end of file
web/5.25.7
\ No newline at end of file
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: <BuyIcon color="$accent1" size="$icon.28" />,
backgroundImage: isDarkMode
? CRYPTO_PURCHASE_BACKGROUND_DARK
: CRYPTO_PURCHASE_BACKGROUND_LIGHT,
icon: (
<IconContainer
backgroundColor={rawColors.green200}
icon={
<IconContainer
backgroundColor={rawColors.green200}
icon={<Icons.Buy color={rawColors.green200} size="$icon.20" />}
/>
}
/>
),
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 ? (
<OverlappingLogos
logos={cexTransferProviders.map((provider) => provider.logos.lightLogo)}
/>
) : (
<ArrowDownCircle color="$accent1" size="$icon.28" />
),
icon: (
<IconContainer
backgroundColor={rawColors.gold300}
icon={
<IconContainer
backgroundColor={rawColors.gold300}
icon={<Icons.ArrowDownCircleFilled color={rawColors.gold300} size="$icon.20" />}
/>
}
/>
),
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: <PaperStack color="$accent1" size="$icon.28" />,
icon: (
<IconContainer
backgroundColor={rawColors.violet400}
icon={
<PaperStackIcon
color={rawColors.violet400}
height={iconSizes.icon20}
width={iconSizes.icon20}
/>
}
/>
),
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 => (
<Trace logPress element={elementName}>
<TouchableArea
backgroundColor={backgroundImage ? undefined : '$surface1'}
borderColor="$surface3"
borderRadius="$rounded24"
borderWidth={1}
onPress={onPress}>
<BackgroundWrapper backgroundImage={backgroundImage}>
<Flex centered shrink alignContent="center" gap="$spacing4" px="$spacing20" py="$spacing12">
{icon}
<Flex centered shrink alignContent="center">
<Text textAlign="center" variant="buttonLabel3">
{title}
</Text>
<Text color="$neutral2" textAlign="center" variant="body3">
{blurb}
</Text>
<TouchableArea backgroundColor="$surface2" borderRadius="$rounded20" onPress={onPress}>
<Flex centered row gap="$spacing16" p="$spacing16">
{icon}
<Flex shrink gap="$spacing4" width="100%">
<Flex row alignItems="center" gap="$spacing8">
<Text variant="subheading2">{title}</Text>
</Flex>
<Text color="$neutral2" variant="body2">
{blurb}
</Text>
</Flex>
</BackgroundWrapper>
</Flex>
</TouchableArea>
</Trace>
)
const BackgroundWrapper = ({
children,
backgroundImage,
}: {
children: React.ReactNode
backgroundImage?: ImageSourcePropType
}): JSX.Element => {
return backgroundImage !== undefined ? (
<ImageBackground borderRadius={borderRadii.rounded24} source={backgroundImage}>
{children}
</ImageBackground>
) : (
<Flex>{children}</Flex>
)
}
function ReceiveCryptoIcon(): JSX.Element {
return (
<Flex
key="ReceiveCryptoIcon"
centered
shrink
backgroundColor="$surface1"
style={{
...styles.iconContainer,
borderRadius: borderRadii.roundedFull,
}}>
<ArrowDownCircle
color="$accent1"
style={{
borderRadius: borderRadii.roundedFull,
height: ICON_SIZE - 2,
width: ICON_SIZE - 2,
}}
/>
</Flex>
)
}
function ServiceProviderLogo({ uri }: { uri: string }): JSX.Element {
return (
<Flex
key={uri}
centered
shrink
animation="quick"
backgroundColor="$surface1"
borderColor="$surface1"
borderWidth={2}
enterStyle={{ opacity: 0 }}
exitStyle={{ opacity: 0 }}
style={styles.iconContainer}>
<ImageUri
imageStyle={{
borderRadius: borderRadii.rounded8,
height: ICON_SIZE - 3,
overflow: 'hidden',
width: ICON_SIZE - 3,
}}
resizeMode="cover"
uri={uri}
/>
</Flex>
)
}
function renderItem({ item }: { item: string }): JSX.Element {
return item === 'icon' ? <ReceiveCryptoIcon /> : <ServiceProviderLogo uri={item} />
}
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<ViewStyle>
}): JSX.Element => {
const cellStyle = [style, { zIndex: -index }]
return (
<Flex style={cellStyle} {...props}>
{children}
</Flex>
)
}
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 (
<Flex height={ICON_SIZE}>
<VirtualizedList<string>
horizontal
CellRendererComponent={LogoRendererComponent}
contentContainerStyle={{
paddingRight: -ICON_SHIFT,
}}
getItem={getItem}
getItemCount={getItemCount}
keyExtractor={keyExtractor}
renderItem={renderItem}
/>
</Flex>
)
}
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 => (
<Flex
centered
borderRadius="$roundedFull"
height={iconSizes.icon36}
style={{ backgroundColor: opacify(10, backgroundColor) }}
width={iconSizes.icon36}>
{icon}
</Flex>
)
......@@ -353,13 +353,15 @@ export function HomeScreen(props?: AppStackScreenProp<Screens.Home>): 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 })),
......
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 (
<StyledSVG viewBox="0 0 24 24" fill={theme.critical} xmlns="http://www.w3.org/2000/svg" size={size} {...rest}>
<path
d="M21.512 7.067l-4.579-4.58A1.668 1.668 0 0 0 15.754 2H8.246a1.67 1.67 0 0 0-1.179.488l-4.58 4.579A1.668 1.668 0 0 0 2 8.246v7.508c0 .442.176.866.488 1.179l4.579 4.58c.312.311.737.487 1.179.487h7.508a1.67 1.67 0 0 0 1.179-.488l4.58-4.579c.311-.312.487-.737.487-1.179V8.246c0-.442-.175-.867-.488-1.179zm-6.146 7.121a.834.834 0 0 1-1.178 1.18L12 13.177l-2.189 2.19a.831.831 0 0 1-1.177 0 .834.834 0 0 1 0-1.18L10.822 12 8.632 9.81a.834.834 0 1 1 1.18-1.179L12 10.821l2.189-2.19a.834.834 0 0 1 1.178 1.18l-2.188 2.188 2.186 2.19z"
fill="#9B9B9B"
/>
</StyledSVG>
)
}
......@@ -93,7 +93,7 @@ function UniswapXPreferenceLabel() {
}
const ROUTE_PREFERENCE_TO_LABEL: Record<RoutePreferenceOption, ReactNode> = {
[RoutePreferenceOption.Optimal]: t`Optimal price`,
[RoutePreferenceOption.Optimal]: t`Default trade options`,
[RoutePreferenceOption.UniswapX]: <UniswapXPreferenceLabel />,
[RoutePreferenceOption.v3]: t`v3 pools`,
[RoutePreferenceOption.v2]: t`v2 pools`,
......@@ -196,7 +196,7 @@ export default function MultipleRoutingOptions() {
<RoutePreferenceToggle
preference={RoutePreferenceOption.Optimal}
isActive={routePreferenceOptions[RoutePreferenceOption.Optimal]}
text={<Trans>The Uniswap client selects the best route factoring price and network costs.</Trans>}
text={<Trans>The Uniswap client selects the cheapest trade option factoring price and network costs.</Trans>}
subheading={
routePreferenceOptions[RoutePreferenceOption.Optimal] &&
uniswapXSupportedChain && (
......
......@@ -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,
......
......@@ -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])
}
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 (
<motion.div
animate={{
y: ['-4px', '4px', '-4px'],
opacity: [0.5, 1, 0.5],
}}
transition={{
duration: 2,
repeat: Infinity, // repeat animation forever
ease: 'easeInOut',
}}
style={{ display: 'inline-block', position: 'relative' }}
>
{props.children}
</motion.div>
)
}
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 = {
......
......@@ -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}
>
<Text fontSize={20}>
......@@ -690,8 +694,39 @@ export function SwapForm({ disableTokenInputs = false, onCurrencyChange }: SwapF
allowedSlippage={allowedSlippage}
/>
)}
{isUsingBlockedExtension && <SwapNotice />}
</div>
</AutoColumn>
</>
)
}
function SwapNotice() {
const theme = useTheme()
return (
<Row
align="flex-start"
gap="md"
backgroundColor={theme.surface2}
marginTop="12px"
borderRadius="12px"
padding="16px"
>
<Row width="auto" borderRadius="16px" backgroundColor={theme.critical2} padding="8px">
<Error />
</Row>
<Column flex="10" gap="sm">
<ThemedText.SubHeader>Blocked Extension</ThemedText.SubHeader>
<ThemedText.BodySecondary lineHeight="22px">
<Trans>
The Pocket Universe extension violates our{' '}
<ExternalLink href="https://uniswap.org/terms-of-service">Terms&nbsp;of&nbsp;Service</ExternalLink> by
modifying our product in a way that is misleading and could harm users. Please disable the extension and
reload&nbsp;the&nbsp;page.
</Trans>
</ThemedText.BodySecondary>
</Column>
</Row>
)
}
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.",
},
],
},
],
},
}
......@@ -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`),
......
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',
......
// eslint-disable-next-line no-restricted-imports
import {
APPSFLYER_API_KEY,
APPSFLYER_APP_ID,
......
......@@ -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`
}
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'
// eslint-disable-next-line no-restricted-imports
import DeviceInfo from 'react-native-device-info'
export const getVersionHeader = (): string => {
return DeviceInfo.getVersion()
}
import { isExtension } from 'uniswap/src/utils/platform'
export const getVersionHeader = (): string => {
if (isExtension) {
return process.env.VERSION ?? ''
} else {
// unimplemented for interface
return ''
}
}
// 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,
......
......@@ -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": {
......
......@@ -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á <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Conectado a </highlight>{{dappNameOrUrl}}",
......
......@@ -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 <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Connecté à </highlight>{{dappNameOrUrl}}",
......
......@@ -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": "आपका सार्वजनिक पता होगा <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>से जुड़ा </highlight>{{dappNameOrUrl}}",
......
......@@ -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 <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Terhubung ke </highlight>{{dappNameOrUrl}}",
......
......@@ -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": "あなたの公開アドレスは<highlight>{{walletAddress}}</highlight>になります"
},
"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": "<highlight> </highlight>{{dappNameOrUrl}}に接続しました",
......
......@@ -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 <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Disambungkan ke </highlight>{{dappNameOrUrl}}",
......
......@@ -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 <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Verbonden met </highlight>{{dappNameOrUrl}}",
......
......@@ -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á <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Conectado a </highlight>{{dappNameOrUrl}}",
......
......@@ -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": "Ваш публичный адрес будет <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Подключен к </highlight>{{dappNameOrUrl}}",
......
......@@ -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": "ที่อยู่สาธารณะของคุณคือ <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>เชื่อมต่อกับ </highlight>{{dappNameOrUrl}}",
......
......@@ -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 <highlight>{{walletAddress}}</highlight>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": "<highlight> </highlight>{{dappNameOrUrl}}'e bağlanıldı",
......
......@@ -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": "Ваша публічна адреса буде <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Підключено до </highlight>{{dappNameOrUrl}}",
......
......@@ -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": "آپ کا عوامی پتہ ہوگا <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight> </highlight>{{dappNameOrUrl}}سے منسلک",
......
......@@ -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à <highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>Đã kết nối với </highlight>{{dappNameOrUrl}}",
......
......@@ -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": "您的公共地址将是<highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>连接到 </highlight>{{dappNameOrUrl}}",
......@@ -2117,7 +2124,7 @@
},
"details": {
"label": {
"function": "函数: ",
"function": "功能: ",
"recipient": "到: ",
"sending": "发送: "
}
......
......@@ -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": "您的公共地址將是<highlight>{{walletAddress}}</highlight>"
},
"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": "<highlight>連接到 </highlight>{{dappNameOrUrl}}",
......
// eslint-disable-next-line no-restricted-imports
import { Platform } from 'react-native'
export function getCloudProviderName(): string {
......
// eslint-disable-next-line no-restricted-imports
import DeviceInfo from 'react-native-device-info'
const BUNDLE_ID = DeviceInfo.getBundleId()
......
// eslint-disable-next-line no-restricted-imports
import { Platform } from 'react-native'
// Platform
......
......@@ -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
}
......@@ -262,7 +262,6 @@ export const fiatOnRampAggregatorApi = createApi({
}),
fiatOnRampAggregatorTransferServiceProviders: builder.query<FORServiceProvidersResponse, void>({
query: () => '/transfer-service-providers',
keepUnusedDataFor: 60 * 60, // 1 hour
}),
fiatOnRampAggregatorSupportedTokens: builder.query<
FORSupportedTokensResponse,
......
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<providers.TransactionRequest>,
skip?: boolean,
pollingInterval?: PollingInterval
skip?: boolean
): ReturnType<typeof useRestQuery<GasFeeResponse>> {
return useRestQuery<GasFeeResponse, providers.TransactionRequest>(
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),
}
)
}
......@@ -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<providers.TransactionRequest>,
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) {
......
......@@ -35,8 +35,6 @@ function* appLanguageSaga(action: ReturnType<typeof updateLanguage>) {
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) {
......
......@@ -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
}
......@@ -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
......
......@@ -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
......
......@@ -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',
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment