- Most efficient route is estimated to cost ~$1.00 in network costs. This route considers split routes, multiple hops, and network costs of each step.
+ Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
- This route considers split routes, multiple hops, and network costs of each step.
+ This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
- Most efficient route is estimated to cost ~$1.00 in network costs. This route considers split routes, multiple hops, and network costs of each step.
+ Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
- Most efficient route is estimated to cost ~$1.00 in network costs. This route considers split routes, multiple hops, and network costs of each step.
+ Best price route costs ~$1.00 in gas. This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.
diff --git a/apps/web/src/connection/EmbeddedWalletConnector.ts b/apps/web/src/connection/EmbeddedWalletConnector.ts
deleted file mode 100644
index fb49dd5432f..00000000000
--- a/apps/web/src/connection/EmbeddedWalletConnector.ts
+++ /dev/null
@@ -1,195 +0,0 @@
-import { EmbeddedWalletProvider, Listener, embeddedWalletProvider } from 'connection/EmbeddedWalletProvider'
-import {
- ProviderConnectInfo,
- ResourceUnavailableRpcError,
- RpcError,
- SwitchChainError,
- UserRejectedRequestError,
- getAddress,
-} from 'viem'
-import { ChainNotConfiguredError, createConnector } from 'wagmi'
-
-interface EmbeddedWalletParameters {
- onConnect?(): void
-}
-
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-export function embeddedWallet(parameters: EmbeddedWalletParameters = {}) {
- type Provider = EmbeddedWalletProvider
- type Properties = {
- onConnect(connectInfo: ProviderConnectInfo): void
- }
- type StorageItem = { 'embeddedUniswapWallet.disconnected': true }
-
- return createConnector((config) => ({
- id: 'embeddedUniswapWalletConnector',
- name: 'Embedded Wallet',
- type: 'embeddedUniswapWallet',
- async setup() {
- const provider = await this.getProvider()
- if (provider) {
- provider.on('connect', this.onConnect.bind(this) as Listener)
- }
- },
- async getProvider() {
- return embeddedWalletProvider
- },
- async connect({ chainId } = {}) {
- // TODO[EW]: move from localstorage to context layer
- if (!localStorage.getItem('embeddedUniswapWallet.address')) {
- throw new ResourceUnavailableRpcError(new Error('No accounts available'))
- }
-
- const provider = await this.getProvider()
-
- let accounts: readonly `0x${string}`[] = []
-
- accounts = await this.getAccounts().catch(() => [])
-
- try {
- provider.removeListener('connect', this.onConnect.bind(this) as Listener)
- provider.on('accountsChanged', this.onAccountsChanged.bind(this) as Listener)
- provider.on('chainChanged', this.onChainChanged as Listener)
- provider.on('disconnect', this.onDisconnect.bind(this) as Listener)
-
- // Switch to chain if provided
- let currentChainId = (await this.getChainId()) as number
- if (chainId && currentChainId !== chainId) {
- const chain = await this.switchChain!({ chainId }).catch((error) => {
- if (error.code === UserRejectedRequestError.code) {
- throw error
- }
- return { id: currentChainId }
- })
- currentChainId = chain?.id ?? currentChainId
- }
-
- await config.storage?.removeItem('embeddedUniswapWallet.disconnected')
-
- if (!accounts || accounts.length === 0) {
- throw new ResourceUnavailableRpcError(new Error('No accounts available'))
- }
-
- return { accounts, chainId: currentChainId }
- } catch (err) {
- const error = err as RpcError
- if (error.code === UserRejectedRequestError.code) {
- throw new UserRejectedRequestError(error)
- }
- if (error.code === ResourceUnavailableRpcError.code) {
- throw new ResourceUnavailableRpcError(error)
- }
- throw error
- }
- },
- async disconnect() {
- const provider = await this.getProvider()
-
- provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this))
- provider.removeListener('chainChanged', this.onChainChanged)
- provider.removeListener('disconnect', this.onDisconnect.bind(this))
- provider.on('connect', this.onConnect.bind(this) as Listener)
-
- // TODO[EW]: move from localstorage to context layer
- localStorage.removeItem('embeddedUniswapWallet.address')
- config.storage?.setItem('embeddedUniswapWallet.disconnected', true)
- },
- async getAccounts() {
- const provider = await this.getProvider()
- const accounts = (await provider.request({
- method: 'eth_accounts',
- })) as string[]
- return accounts.map((x) => getAddress(x))
- },
- async getChainId() {
- const provider = await this.getProvider()
- const chainId = provider.getChainId() || (await provider?.request({ method: 'eth_chainId' }))
- return Number(chainId)
- },
- async isAuthorized() {
- try {
- const accounts = await this.getAccounts()
- return !!accounts.length
- } catch {
- return false
- }
- },
- async switchChain({ chainId }) {
- const provider = await this.getProvider()
-
- const chain = config.chains.find((x) => x.id === chainId)
- if (!chain) {
- throw new SwitchChainError(new ChainNotConfiguredError())
- }
-
- try {
- await Promise.all([
- provider.request({
- method: 'wallet_switchEthereumChain',
- params: [{ chainId }],
- }),
- ])
- return chain
- } catch (err) {
- const error = err as RpcError
- if (error.code === UserRejectedRequestError.code) {
- throw new UserRejectedRequestError(error)
- }
- throw new SwitchChainError(error)
- }
- },
- async onAccountsChanged(accounts) {
- // Disconnect if there are no accounts
- if (accounts.length === 0) {
- this.onDisconnect()
- }
- // Connect if emitter is listening for connect event (e.g. is disconnected and connects through wallet interface)
- else if (config.emitter.listenerCount('connect')) {
- const chainId = (await this.getChainId()).toString()
- this.onConnect({ chainId })
- await config.storage?.removeItem('embeddedUniswapWallet.disconnected')
- }
- // Regular change event
- else {
- config.emitter.emit('change', {
- accounts: accounts.map((x) => getAddress(x)),
- })
- }
- },
- onChainChanged(chain) {
- const chainId = Number(chain)
- config.emitter.emit('change', { chainId })
- },
- async onConnect(connectInfo) {
- const accounts = await this.getAccounts()
- if (accounts.length === 0) {
- return
- }
-
- const chainId = Number(connectInfo.chainId)
- config.emitter.emit('connect', { accounts, chainId })
-
- const provider = await this.getProvider()
- if (provider) {
- provider.removeListener('connect', this.onConnect.bind(this))
- provider.on('accountsChanged', this.onAccountsChanged.bind(this) as any)
- provider.on('chainChanged', this.onChainChanged as any)
- provider.on('disconnect', this.onDisconnect.bind(this) as any)
- }
- },
- // this can accept an `error` argument if needed.
- async onDisconnect() {
- const provider = await this.getProvider()
-
- // No need to remove 'metaMaskSDK.disconnected' from storage because `onDisconnect` is typically
- // only called when the wallet is disconnected through the wallet's interface, meaning the wallet
- // actually disconnected and we don't need to simulate it.
- config.emitter.emit('disconnect')
-
- provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this))
- provider.removeListener('chainChanged', this.onChainChanged)
- provider.removeListener('disconnect', this.onDisconnect.bind(this))
- provider.on('connect', this.onConnect.bind(this) as any)
- },
- }))
-}
diff --git a/apps/web/src/connection/EmbeddedWalletProvider.ts b/apps/web/src/connection/EmbeddedWalletProvider.ts
deleted file mode 100644
index dc24e4edbbb..00000000000
--- a/apps/web/src/connection/EmbeddedWalletProvider.ts
+++ /dev/null
@@ -1,367 +0,0 @@
-import {
- signMessagesWithPasskey,
- signTransactionWithPasskey,
- signTypedDataWithPasskey,
-} from 'uniswap/src/data/rest/embeddedWallet'
-// eslint-disable-next-line no-restricted-imports
-import { UNIVERSE_CHAIN_INFO } from 'uniswap/src/features/chains/chainInfo'
-import { UniverseChainId } from 'uniswap/src/features/chains/types'
-import { logger } from 'utilities/src/logger/logger'
-import { Account, Hash, SignableMessage, createPublicClient, fallback, http } from 'viem'
-
-export type Listener = (payload: any) => void
-
-type RequestArgs = {
- method: string
- params?: any[]
-}
-
-// JSON.stringify does not handle BigInts, so we need to convert them to strings
-const safeJSONStringify = (param: any): any => {
- return JSON.stringify(
- param,
- (_, value) => (typeof value === 'bigint' ? value.toString() : value), // return everything else unchanged
- )
-}
-
-const NoWalletFoundError = new Error('Attempted embedded wallet function with no embedded wallet connected')
-
-export class EmbeddedWalletProvider {
- listeners: Map>
- chainId: UniverseChainId
- publicClient?: ReturnType
- static _instance: EmbeddedWalletProvider
-
- private constructor() {
- this.listeners = new Map()
- // TODO[EW]: move from localstorage to context layer
- const chainId = localStorage.getItem('embeddedUniswapWallet.chainId')
- this.chainId = chainId ? parseInt(chainId) : 1
- this.publicClient = undefined
- }
-
- public static getInstance(): EmbeddedWalletProvider {
- if (!this._instance) {
- this._instance = new EmbeddedWalletProvider()
- }
- return this._instance
- }
-
- private getPublicClient(chainId: UniverseChainId) {
- if (!this.publicClient || this.publicClient.chain !== UNIVERSE_CHAIN_INFO[chainId]) {
- const fallbackTransports = UNIVERSE_CHAIN_INFO[this.chainId].rpcUrls.fallback?.http.map((url) => http(url)) ?? []
- this.publicClient = createPublicClient({
- chain: UNIVERSE_CHAIN_INFO[chainId],
- transport: fallback([
- http(UNIVERSE_CHAIN_INFO[this.chainId].rpcUrls.public?.http?.[0]), // generally quicknode
- http(UNIVERSE_CHAIN_INFO[this.chainId].rpcUrls.default.http?.[0]), // options here and below are usually public endpoints
- ...fallbackTransports,
- ]),
- })
- }
- return this.publicClient
- }
-
- async request(args: RequestArgs) {
- switch (args.method) {
- case 'eth_call':
- return this.call(args.params)
- case 'eth_estimateGas':
- return this.estimateGas(args.params)
- case 'eth_accounts':
- return this.getAccounts()
- case 'eth_sendTransaction':
- return this.sendTransaction(args.params)
- case 'eth_chainId':
- return this.getChainId()
- case 'eth_getTransactionByHash':
- return this.getTransactionByHash(args.params?.[0])
- case 'eth_getTransactionReceipt':
- return this.getTransactionReceipt(args.params?.[0])
- case 'wallet_switchEthereumChain':
- return this.updateChainId(args.params?.[0].chainId)
- case 'eth_blockNumber':
- return this.getBlockNumber()
- case 'personal_sign':
- return this.signMessage(args)
- case 'eth_sign':
- return this.sign(args)
- case 'eth_signTypedData_v4':
- return this.signTypedData(args)
- case 'eth_getBlockByNumber':
- return this.getBlockNumber()
- case 'eth_getCode':
- return this.getCode(args)
- default: {
- logger.error(NoWalletFoundError, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'request' },
- })
- throw NoWalletFoundError
- }
- }
- }
-
- on(event: string, listener: Listener) {
- if (!this.listeners.has(event)) {
- this.listeners.set(event, new Set())
- }
- this.listeners.get(event)!.add(listener)
- }
-
- removeListener(event: string, listener: Listener) {
- if (this.listeners.has(event)) {
- this.listeners.get(event)!.delete(listener)
- }
- }
-
- off(event: string, listener: Listener) {
- if (this.listeners.has(event)) {
- this.listeners.get(event)!.delete(listener)
- }
- }
-
- emit(event: string, payload: any) {
- if (this.listeners.has(event)) {
- this.listeners.get(event)!.forEach((listener) => listener(payload))
- }
- }
-
- connect(chainId?: number) {
- this.chainId = chainId ?? 1 // TODO[EW]: handle base case and dynamic switching
- // TODO[EW]: move from localstorage to context layer
- localStorage.setItem('embeddedUniswapWallet.chainId', `${chainId}`)
- this.emit('connect', { chainId: this.chainId })
- }
-
- disconnect(error: any) {
- this.emit('disconnect', error)
- }
-
- getAccount() {
- const address: `0x${string}` | undefined =
- // TODO[EW]: move from localstorage to context layer
- (localStorage.getItem('embeddedUniswapWallet.address') as `0x${string}`) ?? undefined
-
- if (!address) {
- logger.debug('EmbeddedWalletProvider.ts', 'getAccount', 'No embedded wallet connected')
- return undefined
- }
-
- const signMessage = async ({ message }: { message: SignableMessage }): Promise<`0x${string}`> => {
- try {
- const signedMessages = await signMessagesWithPasskey([message.toString()])
- return signedMessages?.[0] as `0x${string}`
- } catch (e: any) {
- logger.error(e, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'signMessage' },
- })
- throw e
- }
- }
- const signTransaction = async (transaction: any): Promise<`0x${string}`> => {
- try {
- const signedTransaction = await signTransactionWithPasskey([safeJSONStringify(transaction)])
- return signedTransaction?.[0] as `0x${string}`
- } catch (e: any) {
- logger.error(e, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'signTransaction' },
- })
- throw e
- }
- }
- const signTypedData = async (transaction: any): Promise<`0x${string}`> => {
- try {
- const signedTypedData = await signTypedDataWithPasskey([safeJSONStringify(transaction)])
- return signedTypedData?.[0] as `0x${string}`
- } catch (e: any) {
- logger.error(e, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'signTypedData' },
- })
- throw e
- }
- }
- const account: Account = {
- address,
- signMessage,
- signTransaction,
- signTypedData,
- publicKey: address,
- source: 'custom',
- type: 'local',
- }
- return account
- }
-
- async estimateGas(params: any) {
- const account = this.getAccount()
- if (!account) {
- const error = new Error('Attempted embedded wallet function with no embedded wallet connected')
- logger.error(error, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'estimateGas' },
- })
- throw error
- }
- const client = this.getPublicClient(this.chainId)
- const data = await client.estimateGas({
- ...params[0],
- account: account.address,
- value: BigInt(params[0].value ?? 0),
- })
- return data
- }
- async call(params: any) {
- const client = this.getPublicClient(this.chainId)
- let blockNumber = params[1]
- if (blockNumber === 'latest') {
- blockNumber = await this.getBlockNumber()
- }
- const { data } = await client.call({ ...params[0], blockNumber })
- return data
- }
-
- async getAccounts() {
- // TODO[EW]: handle multiple accounts
- const account = this.getAccount()
-
- return [account?.address]
- }
-
- async sendTransaction(transactions: any) {
- try {
- const account = this.getAccount()
- if (!account) {
- logger.error(NoWalletFoundError, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'sendTransaction' },
- })
- throw NoWalletFoundError
- }
- const publicClient = this.getPublicClient(this.chainId)
- const [currentGasData, nonce] = await Promise.all([
- publicClient?.estimateFeesPerGas({ chain: UNIVERSE_CHAIN_INFO[this.chainId] }),
- publicClient?.getTransactionCount({ address: account.address }),
- ])
- const tx = {
- ...transactions[0],
- gas: (BigInt(Number(transactions[0].gas ?? 0)) * BigInt(12)) / BigInt(10), // add 20% buffer, TODO[EW]: play around with this
- value: BigInt(transactions[0].value ?? 0),
- chainId: this.chainId,
- maxFeePerGas: BigInt(transactions[0].maxFeePerGas ?? currentGasData?.maxFeePerGas),
- maxPriorityFeePerGas: BigInt(transactions[0].maxPriorityFeePerGas ?? currentGasData?.maxPriorityFeePerGas),
- nonce: transactions[0].nonce ?? nonce,
- }
- const signedTx = await account.signTransaction(tx)
- const txHash = await publicClient.sendRawTransaction({ serializedTransaction: signedTx })
- return txHash
- } catch (e: any) {
- logger.debug('EmbeddedWalletProvider.ts', 'sendTransaction', e, transactions)
- return undefined
- }
- }
- updateChainId(chainId: UniverseChainId) {
- this.chainId = chainId
- localStorage.setItem('embeddedUniswapWallet.chainId', `${chainId}`)
- this.emit('chainChanged', chainId)
- }
-
- getChainId() {
- return this.chainId
- }
-
- async getCode(args: RequestArgs) {
- const client = this.getPublicClient(this.chainId)
-
- const data = await client.getBytecode({
- address: args?.params?.[0],
- })
- return data
- }
-
- async getBlockNumber() {
- const client = this.getPublicClient(this.chainId)
-
- return await client.getBlockNumber()
- }
-
- async getTransactionByHash(hash: Hash) {
- const client = this.getPublicClient(this.chainId)
-
- try {
- const rest = await client.getTransaction({
- hash,
- })
- // fixes a type mismatch where type was expected to be a BigNumber
- return { ...rest, type: rest.typeHex }
- } catch (e) {
- if (e.name === 'TransactionNotFoundError') {
- return null
- }
- logger.error(e, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'getTransactionByHash' },
- })
- throw e
- }
- }
-
- async getTransactionReceipt(hash: Hash) {
- const client = this.getPublicClient(this.chainId)
-
- try {
- const { ...rest } = await client.getTransactionReceipt({
- hash,
- })
-
- return rest
- } catch (e) {
- if (e.name === 'TransactionNotFoundError') {
- return null
- }
- logger.error(e, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'getTransactionReceipt' },
- })
- throw e
- }
- }
-
- async signMessage(args: RequestArgs) {
- const account = this.getAccount()
- if (!account) {
- logger.error(NoWalletFoundError, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'signMessage' },
- })
- throw NoWalletFoundError
- }
- return await account.signMessage({ message: args.params?.[0] })
- }
-
- async sign(args: RequestArgs) {
- const account = this.getAccount()
- if (!account) {
- logger.error(NoWalletFoundError, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'sign' },
- })
- throw NoWalletFoundError
- }
- return await account.signMessage(args.params?.[0])
- }
-
- async signTypedData(args: RequestArgs) {
- const account = this.getAccount()
- if (!account) {
- logger.error(NoWalletFoundError, {
- tags: { file: 'EmbeddedWalletProvider.ts', function: 'signTypedData' },
- })
- throw NoWalletFoundError
- }
- if (!args.params) {
- throw new Error('Missing params')
- }
-
- if (!args.params[0]) {
- throw new Error('Missing domain')
- }
-
- return await account.signTypedData(JSON.parse(args.params[1]))
- }
-}
-
-export const embeddedWalletProvider = EmbeddedWalletProvider.getInstance()
diff --git a/apps/web/src/constants/deprecatedTokenSafety.test.ts b/apps/web/src/constants/deprecatedTokenSafety.test.ts
new file mode 100644
index 00000000000..0d33e466a5c
--- /dev/null
+++ b/apps/web/src/constants/deprecatedTokenSafety.test.ts
@@ -0,0 +1,40 @@
+/**
+ * @deprecated
+ *
+ * TODO(WEB-4896): remove this file
+ */
+import { BlockedWarning, getPriorityWarning, MediumWarning, StrongWarning } from 'constants/deprecatedTokenSafety'
+
+describe('getPriorityWarning', () => {
+ it('returns token1Warning when both warnings exist and token1Warning is BLOCKED', () => {
+ const token0Warning = StrongWarning
+ const token1Warning = BlockedWarning
+ expect(getPriorityWarning(token0Warning, token1Warning)).toBe(token1Warning)
+ })
+
+ it('returns token1Warning when both warnings exist, token1Warning is UNKNOWN, and token0Warning is not BLOCKED', () => {
+ const token0Warning = StrongWarning
+ const token1Warning = StrongWarning
+ expect(getPriorityWarning(token0Warning, token1Warning)).toBe(token1Warning)
+ })
+
+ it('returns token0Warning when both warnings exist and token1Warning is not BLOCKED or UNKNOWN', () => {
+ const token0Warning = StrongWarning
+ const token1Warning = MediumWarning
+ expect(getPriorityWarning(token0Warning, token1Warning)).toBe(token0Warning)
+ })
+
+ it('returns token0Warning when only token0Warning exists', () => {
+ const token0Warning = StrongWarning
+ expect(getPriorityWarning(token0Warning, undefined)).toBe(token0Warning)
+ })
+
+ it('returns token1Warning when only token1Warning exists', () => {
+ const token1Warning = BlockedWarning
+ expect(getPriorityWarning(undefined, token1Warning)).toBe(token1Warning)
+ })
+
+ it('returns undefined when both warnings are undefined', () => {
+ expect(getPriorityWarning(undefined, undefined)).toBeUndefined()
+ })
+})
diff --git a/apps/web/src/constants/deprecatedTokenSafety.tsx b/apps/web/src/constants/deprecatedTokenSafety.tsx
new file mode 100644
index 00000000000..b86b7f09a83
--- /dev/null
+++ b/apps/web/src/constants/deprecatedTokenSafety.tsx
@@ -0,0 +1,108 @@
+/**
+ * @deprecated
+ *
+ * TODO(WEB-4896): remove this file
+ */
+import { useCurrencyInfo } from 'hooks/Tokens'
+import { Trans } from 'react-i18next'
+import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
+import i18n from 'uniswap/src/i18n'
+
+export const TOKEN_SAFETY_ARTICLE = 'https://support.uniswap.org/hc/en-us/articles/8723118437133'
+
+const SafetyLevelWeight = {
+ [SafetyLevel.Blocked]: 4,
+ [SafetyLevel.StrongWarning]: 3,
+ [SafetyLevel.MediumWarning]: 2,
+ [SafetyLevel.Verified]: 1,
+}
+
+/**
+ * Determine which warning to display based on the priority of the warnings. Prioritize blocked, then unknown, followed by the rest. Accepts two warnings passed in.
+ */
+export function getPriorityWarning(token0Warning: Warning | undefined, token1Warning: Warning | undefined) {
+ if (token0Warning && token1Warning) {
+ if (SafetyLevelWeight[token1Warning.level] > SafetyLevelWeight[token0Warning.level]) {
+ return token1Warning
+ }
+ return token0Warning
+ }
+ return token0Warning ?? token1Warning
+}
+
+export function getWarningCopy(warning: Warning | undefined, plural = false, tokenSymbol?: string) {
+ let heading = null,
+ description = null
+ if (warning) {
+ switch (warning.level) {
+ case SafetyLevel.MediumWarning:
+ heading = tokenSymbol
+ ? i18n.t('token.safety.warning.medium.heading.named', {
+ tokenSymbol,
+ })
+ : i18n.t('token.safety.warning.medium.heading.default', { count: plural ? 2 : 1 })
+ description = i18n.t('token.safety.warning.doYourOwnResearch')
+ break
+ case SafetyLevel.StrongWarning:
+ heading = tokenSymbol
+ ? i18n.t('token.safety.warning.strong.heading.named', {
+ tokenSymbol,
+ })
+ : i18n.t('token.safety.warning.strong.heading.default', { count: plural ? 2 : 1 })
+ description = i18n.t('token.safety.warning.doYourOwnResearch')
+ break
+ case SafetyLevel.Blocked:
+ description = tokenSymbol
+ ? i18n.t(`token.safety.warning.blocked.description.named`, {
+ tokenSymbol,
+ })
+ : i18n.t('token.safety.warning.blocked.description.default', { count: plural ? 2 : 1 })
+ break
+ }
+ }
+ return { heading, description }
+}
+
+export type Warning = {
+ level: SafetyLevel
+ message: JSX.Element
+ /** Determines whether triangle/slash alert icon is used, and whether this token is supported/able to be traded. */
+ canProceed: boolean
+}
+
+export const MediumWarning: Warning = {
+ level: SafetyLevel.MediumWarning,
+ message: ,
+ canProceed: true,
+}
+
+export const StrongWarning: Warning = {
+ level: SafetyLevel.StrongWarning,
+ message: ,
+ canProceed: true,
+}
+
+export const BlockedWarning: Warning = {
+ level: SafetyLevel.Blocked,
+ message: ,
+ canProceed: false,
+}
+
+export function useTokenWarning(tokenAddress?: string, chainId?: UniverseChainId | number): Warning | undefined {
+ const currencyInfo = useCurrencyInfo(tokenAddress, chainId)
+ switch (currencyInfo?.safetyLevel) {
+ case SafetyLevel.MediumWarning:
+ return MediumWarning
+ case SafetyLevel.StrongWarning:
+ return StrongWarning
+ case SafetyLevel.Blocked:
+ return BlockedWarning
+ default:
+ return undefined
+ }
+}
+
+export function displayWarningLabel(warning: Warning | undefined) {
+ return warning && warning.level !== SafetyLevel.MediumWarning
+}
diff --git a/apps/web/src/dev/DevFlagsBox.tsx b/apps/web/src/dev/DevFlagsBox.tsx
index 28d1fcb471a..3a4c23d6386 100644
--- a/apps/web/src/dev/DevFlagsBox.tsx
+++ b/apps/web/src/dev/DevFlagsBox.tsx
@@ -1,16 +1,13 @@
-import { MouseoverTooltip, TooltipSize } from 'components/Tooltip'
import { ColumnCenter } from 'components/deprecated/Column'
import { RowBetween } from 'components/deprecated/Row'
+import { MouseoverTooltip, TooltipSize } from 'components/Tooltip'
import styled from 'lib/styled-components'
import { useState } from 'react'
import { Flag, Settings } from 'react-feather'
-import { useDispatch } from 'react-redux'
import { useCloseModal, useToggleModal } from 'state/application/hooks'
import { ApplicationModal } from 'state/application/reducer'
import { ThemedText } from 'theme/components'
import { Z_INDEX } from 'theme/zIndex'
-import { Button } from 'ui/src'
-import { resetUniswapBehaviorHistory } from 'uniswap/src/features/behaviorHistory/slice'
import { Statsig } from 'uniswap/src/features/gating/sdk/statsig'
import { isBetaEnv, isDevEnv } from 'utilities/src/environment/env'
@@ -65,12 +62,6 @@ export default function DevFlagsBox() {
const toggleFeatureFlagsModal = useToggleModal(ApplicationModal.FEATURE_FLAGS)
const closeFeatureFlagsModal = useCloseModal()
- const dispatch = useDispatch()
-
- const onPressReset = (): void => {
- dispatch(resetUniswapBehaviorHistory())
- }
-
return (
{
@@ -103,11 +94,6 @@ export default function DevFlagsBox() {
)}
{isOpen && (hasOverrides ? overrides : No overrides)}
- {isOpen && (
-
- Reset behavior history
-
- )}
)
}
diff --git a/apps/web/src/graphql/data/types.ts b/apps/web/src/graphql/data/types.ts
index e7138c74d47..e8daca792c5 100644
--- a/apps/web/src/graphql/data/types.ts
+++ b/apps/web/src/graphql/data/types.ts
@@ -5,6 +5,7 @@ import {
Token as GqlToken,
ProtectionResult,
SafetyLevel,
+ TopTokens100Query,
} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
import { UniverseChainId, isUniverseChainId } from 'uniswap/src/features/chains/types'
import { CurrencyInfo, TokenList } from 'uniswap/src/features/dataApi/types'
@@ -83,3 +84,4 @@ export function meldSupportedCurrencyToCurrencyInfo(forCurrency: FORSupportedTok
}
export type SparklineMap = { [key: string]: PricePoint[] | undefined }
+export type TopToken = NonNullable['topTokens']>[number]
diff --git a/apps/web/src/graphql/data/useAllTransactions.ts b/apps/web/src/graphql/data/useAllTransactions.ts
index 09426e0a961..2c8e67ec61a 100644
--- a/apps/web/src/graphql/data/useAllTransactions.ts
+++ b/apps/web/src/graphql/data/useAllTransactions.ts
@@ -113,8 +113,7 @@ export function useAllTransactions(
return {
transactions,
- // useIsWindowVisible briefly initializes as false, which skips the GQL transaction query, so the "no data found" state initially flashes
- loading: loadingV2 || loadingV3 || !isWindowVisible,
+ loading: loadingV2 || loadingV3,
errorV2,
errorV3,
loadMore,
diff --git a/apps/web/src/hooks/useContract.ts b/apps/web/src/hooks/useContract.ts
index 2a4cd8d1813..c3f1f3e740a 100644
--- a/apps/web/src/hooks/useContract.ts
+++ b/apps/web/src/hooks/useContract.ts
@@ -3,6 +3,7 @@ import { InterfaceEventName } from '@uniswap/analytics-events'
import {
ARGENT_WALLET_DETECTOR_ADDRESS,
CHAIN_TO_ADDRESSES_MAP,
+ ENS_REGISTRAR_ADDRESSES,
MULTICALL_ADDRESSES,
NONFUNGIBLE_POSITION_MANAGER_ADDRESSES,
V2_ROUTER_ADDRESSES,
@@ -13,13 +14,26 @@ import IUniswapV2Router02Json from '@uniswap/v2-periphery/build/IUniswapV2Router
import NonfungiblePositionManagerJson from '@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json'
import V3MigratorJson from '@uniswap/v3-periphery/artifacts/contracts/V3Migrator.sol/V3Migrator.json'
import UniswapInterfaceMulticallJson from '@uniswap/v3-periphery/artifacts/contracts/lens/UniswapInterfaceMulticall.sol/UniswapInterfaceMulticall.json'
+import { RPC_PROVIDERS } from 'constants/providers'
import { useAccount } from 'hooks/useAccount'
import { useEthersProvider } from 'hooks/useEthersProvider'
import { useEffect, useMemo } from 'react'
import ARGENT_WALLET_DETECTOR_ABI from 'uniswap/src/abis/argent-wallet-detector.json'
import EIP_2612 from 'uniswap/src/abis/eip_2612.json'
+import ENS_PUBLIC_RESOLVER_ABI from 'uniswap/src/abis/ens-public-resolver.json'
+import ENS_ABI from 'uniswap/src/abis/ens-registrar.json'
+import ERC1155_ABI from 'uniswap/src/abis/erc1155.json'
import ERC20_ABI from 'uniswap/src/abis/erc20.json'
-import { ArgentWalletDetector, Erc20, Erc721, Weth } from 'uniswap/src/abis/types'
+import ERC721_ABI from 'uniswap/src/abis/erc721.json'
+import {
+ ArgentWalletDetector,
+ EnsPublicResolver,
+ EnsRegistrar,
+ Erc1155,
+ Erc20,
+ Erc721,
+ Weth,
+} from 'uniswap/src/abis/types'
import { NonfungiblePositionManager, UniswapInterfaceMulticall } from 'uniswap/src/abis/types/v3'
import { V3Migrator } from 'uniswap/src/abis/types/v3/V3Migrator'
import WETH_ABI from 'uniswap/src/abis/weth.json'
@@ -63,6 +77,29 @@ export function useContract(
}, [address, ABI, provider, withSignerIfPossible, account.address]) as T
}
+function useMainnetContract(address: string | undefined, ABI: any): T | null {
+ const { chainId } = useAccount()
+ const isMainnet = chainId === UniverseChainId.Mainnet
+ const contract = useContract(isMainnet ? address : undefined, ABI, false)
+
+ return useMemo(() => {
+ if (isMainnet) {
+ return contract
+ }
+ if (!address) {
+ return null
+ }
+ const provider = RPC_PROVIDERS[UniverseChainId.Mainnet]
+ try {
+ return getContract(address, ABI, provider)
+ } catch (error) {
+ const wrappedError = new Error('failed to get mainnet contract', { cause: error })
+ logger.warn('useContract', 'useMainnetContract', wrappedError.message, wrappedError)
+ return null
+ }
+ }, [isMainnet, contract, address, ABI]) as T
+}
+
export function useV2MigratorContract() {
const account = useAccount()
return useContract(
@@ -85,6 +122,14 @@ export function useWETHContract(withSignerIfPossible?: boolean, chainId?: Univer
)
}
+export function useERC721Contract(nftAddress?: string) {
+ return useContract(nftAddress, ERC721_ABI, false)
+}
+
+export function useERC1155Contract(nftAddress?: string) {
+ return useContract(nftAddress, ERC1155_ABI, false)
+}
+
export function useArgentWalletDetectorContract() {
const account = useAccount()
return useContract(
@@ -94,6 +139,14 @@ export function useArgentWalletDetectorContract() {
)
}
+export function useENSRegistrarContract() {
+ return useMainnetContract(ENS_REGISTRAR_ADDRESSES[UniverseChainId.Mainnet], ENS_ABI)
+}
+
+export function useENSResolverContract(address: string | undefined) {
+ return useMainnetContract(address, ENS_PUBLIC_RESOLVER_ABI)
+}
+
export function useEIP2612Contract(tokenAddress?: string): Contract | null {
return useContract(tokenAddress, EIP_2612, false)
}
@@ -118,6 +171,13 @@ export function useInterfaceMulticall(chainId?: UniverseChainId) {
) as UniswapInterfaceMulticall
}
+export function useMainnetInterfaceMulticall() {
+ return useMainnetContract(
+ MULTICALL_ADDRESSES[UniverseChainId.Mainnet],
+ MulticallABI,
+ ) as UniswapInterfaceMulticall
+}
+
export function useV3NFTPositionManagerContract(
withSignerIfPossible?: boolean,
chainId?: UniverseChainId,
diff --git a/apps/web/src/hooks/useENS.ts b/apps/web/src/hooks/useENS.ts
new file mode 100644
index 00000000000..7514349b613
--- /dev/null
+++ b/apps/web/src/hooks/useENS.ts
@@ -0,0 +1,27 @@
+import useENSAddress from 'hooks/useENSAddress'
+import useENSName from 'hooks/useENSName'
+import { useMemo } from 'react'
+import { isAddress } from 'utilities/src/addresses'
+
+/**
+ * Given a name or address, does a lookup to resolve to an address and name
+ * @param nameOrAddress ENS name or address
+ */
+export default function useENS(nameOrAddress?: string | null): {
+ loading: boolean
+ address: string | null
+ name: string | null
+} {
+ const validated = isAddress(nameOrAddress)
+ const reverseLookup = useENSName(validated ? validated : undefined)
+ const lookup = useENSAddress(nameOrAddress)
+
+ return useMemo(
+ () => ({
+ loading: reverseLookup.loading || lookup.loading,
+ address: validated ? validated : lookup.address,
+ name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null,
+ }),
+ [lookup.address, lookup.loading, nameOrAddress, reverseLookup.ENSName, reverseLookup.loading, validated],
+ )
+}
diff --git a/apps/web/src/hooks/useENSAddress.ts b/apps/web/src/hooks/useENSAddress.ts
new file mode 100644
index 00000000000..45ae042828a
--- /dev/null
+++ b/apps/web/src/hooks/useENSAddress.ts
@@ -0,0 +1,31 @@
+import { useENSRegistrarContract, useENSResolverContract } from 'hooks/useContract'
+import useDebounce from 'hooks/useDebounce'
+import { NEVER_RELOAD, useMainnetSingleCallResult } from 'lib/hooks/multicall'
+import { useMemo } from 'react'
+import isZero from 'utils/isZero'
+import { safeNamehash } from 'utils/safeNamehash'
+
+/**
+ * Does a lookup for an ENS name to find its address.
+ */
+export default function useENSAddress(ensName?: string | null): { loading: boolean; address: string | null } {
+ const debouncedName = useDebounce(ensName, 200)
+ const ensNodeArgument = useMemo(() => [debouncedName ? safeNamehash(debouncedName) : undefined], [debouncedName])
+ const registrarContract = useENSRegistrarContract()
+ const resolverAddressCall = useMainnetSingleCallResult(registrarContract, 'resolver', ensNodeArgument, NEVER_RELOAD)
+ const resolverAddress = resolverAddressCall.result?.[0]
+ const resolverContract = useENSResolverContract(
+ resolverAddress && !isZero(resolverAddress) ? resolverAddress : undefined,
+ )
+ const addressCall = useMainnetSingleCallResult(resolverContract, 'addr', ensNodeArgument, NEVER_RELOAD)
+ const address = addressCall.result?.[0]
+
+ const changed = debouncedName !== ensName
+ return useMemo(
+ () => ({
+ address: changed ? null : address ?? null,
+ loading: changed || resolverAddressCall.loading || addressCall.loading,
+ }),
+ [addressCall.loading, address, changed, resolverAddressCall.loading],
+ )
+}
diff --git a/apps/web/src/hooks/useENSAvatar.ts b/apps/web/src/hooks/useENSAvatar.ts
new file mode 100644
index 00000000000..6dc4076ce62
--- /dev/null
+++ b/apps/web/src/hooks/useENSAvatar.ts
@@ -0,0 +1,167 @@
+import { BigNumber } from '@ethersproject/bignumber'
+import { hexZeroPad } from '@ethersproject/bytes'
+import { useAccount } from 'hooks/useAccount'
+import {
+ useENSRegistrarContract,
+ useENSResolverContract,
+ useERC1155Contract,
+ useERC721Contract,
+} from 'hooks/useContract'
+import useDebounce from 'hooks/useDebounce'
+import useENSName from 'hooks/useENSName'
+import { NEVER_RELOAD, useMainnetSingleCallResult } from 'lib/hooks/multicall'
+import { useEffect, useMemo, useState } from 'react'
+import { isAddress } from 'utilities/src/addresses'
+import { uriToHttpUrls } from 'utilities/src/format/urls'
+import { logger } from 'utilities/src/logger/logger'
+import isZero from 'utils/isZero'
+import { safeNamehash } from 'utils/safeNamehash'
+
+/**
+ * Returns the ENS avatar URI, if available.
+ * Spec: https://gist.github.com/Arachnid/9db60bd75277969ee1689c8742b75182.
+ */
+export default function useENSAvatar(
+ address?: string,
+ enforceOwnership = true,
+): { avatar: string | null; loading: boolean } {
+ const debouncedAddress = useDebounce(address, 200)
+ const node = useMemo(() => {
+ if (!debouncedAddress || !isAddress(debouncedAddress)) {
+ return undefined
+ }
+ return safeNamehash(`${debouncedAddress.toLowerCase().substr(2)}.addr.reverse`)
+ }, [debouncedAddress])
+
+ const addressAvatar = useAvatarFromNode(node)
+ const ENSName = useENSName(address).ENSName
+ const nameAvatar = useAvatarFromNode(ENSName === null ? undefined : safeNamehash(ENSName))
+ let avatar = addressAvatar.avatar || nameAvatar.avatar
+
+ const nftAvatar = useAvatarFromNFT(avatar, enforceOwnership, address)
+ avatar = nftAvatar.avatar || avatar
+
+ const http = avatar && uriToHttpUrls(avatar)[0]
+
+ const changed = debouncedAddress !== address
+ return useMemo(
+ () => ({
+ avatar: changed ? null : http ?? null,
+ loading: changed || addressAvatar.loading || nameAvatar.loading || nftAvatar.loading,
+ }),
+ [addressAvatar.loading, changed, http, nameAvatar.loading, nftAvatar.loading],
+ )
+}
+
+function useAvatarFromNode(node?: string): { avatar?: string; loading: boolean } {
+ const nodeArgument = useMemo(() => [node], [node])
+ const textArgument = useMemo(() => [node, 'avatar'], [node])
+ const registrarContract = useENSRegistrarContract()
+ const resolverAddress = useMainnetSingleCallResult(registrarContract, 'resolver', nodeArgument, NEVER_RELOAD)
+ const resolverAddressResult = resolverAddress.result?.[0]
+ const resolverContract = useENSResolverContract(
+ resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined,
+ )
+ const avatar = useMainnetSingleCallResult(resolverContract, 'text', textArgument, NEVER_RELOAD)
+
+ return useMemo(
+ () => ({
+ avatar: avatar.result?.[0],
+ loading: avatar.loading,
+ }),
+ [avatar.loading, avatar.result],
+ )
+}
+
+function useAvatarFromNFT(
+ nftUri = '',
+ enforceOwnership: boolean,
+ address?: string,
+): { avatar?: string; loading: boolean } {
+ const parts = nftUri.toLowerCase().split(':')
+ const protocol = parts[0]
+ // ignore the chain from eip155
+ // TODO: when we are able, pull only from the specified chain
+ const [, erc] = parts[1]?.split('/') ?? []
+ const [contractAddress, id] = parts[2]?.split('/') ?? []
+ const isERC721 = protocol === 'eip155' && erc === 'erc721'
+ const isERC1155 = protocol === 'eip155' && erc === 'erc1155'
+ const erc721 = useERC721Uri(isERC721 ? contractAddress : undefined, isERC721 ? id : undefined, enforceOwnership)
+ const erc1155 = useERC1155Uri(
+ isERC1155 ? contractAddress : undefined,
+ address,
+ isERC1155 ? id : undefined,
+ enforceOwnership,
+ )
+ const uri = erc721.uri || erc1155.uri
+ const http = uri && uriToHttpUrls(uri)[0]
+
+ const [loading, setLoading] = useState(false)
+ const [avatar, setAvatar] = useState(undefined)
+ useEffect(() => {
+ setAvatar(undefined)
+ if (http) {
+ setLoading(true)
+ fetch(http)
+ .then((res) => res.json())
+ .then(({ image }) => {
+ setAvatar(image)
+ })
+ .catch((e) => logger.warn('useENSAvatar', 'useAvatarFromNFT', e.message))
+ .finally(() => {
+ setLoading(false)
+ })
+ }
+ }, [http])
+
+ return useMemo(
+ () => ({ avatar, loading: erc721.loading || erc1155.loading || loading }),
+ [avatar, erc1155.loading, erc721.loading, loading],
+ )
+}
+
+function useERC721Uri(
+ contractAddress: string | undefined,
+ id: string | undefined,
+ enforceOwnership: boolean,
+): { uri?: string; loading: boolean } {
+ const idArgument = useMemo(() => [id], [id])
+ const account = useAccount()
+ const contract = useERC721Contract(contractAddress)
+ const owner = useMainnetSingleCallResult(contract, 'ownerOf', idArgument, NEVER_RELOAD)
+ const uri = useMainnetSingleCallResult(contract, 'tokenURI', idArgument, NEVER_RELOAD)
+ return useMemo(
+ () => ({
+ uri: !enforceOwnership || account.address === owner.result?.[0] ? uri.result?.[0] : undefined,
+ loading: owner.loading || uri.loading,
+ }),
+ [account.address, enforceOwnership, owner.loading, owner.result, uri.loading, uri.result],
+ )
+}
+
+function useERC1155Uri(
+ contractAddress: string | undefined,
+ ownerAddress: string | undefined,
+ id: string | undefined,
+ enforceOwnership: boolean,
+): { uri?: string; loading: boolean } {
+ const idArgument = useMemo(() => [id], [id])
+ const accountArgument = useMemo(() => [ownerAddress, id], [ownerAddress, id])
+ const contract = useERC1155Contract(contractAddress)
+ const balance = useMainnetSingleCallResult(contract, 'balanceOf', accountArgument, NEVER_RELOAD)
+ const uri = useMainnetSingleCallResult(contract, 'uri', idArgument, NEVER_RELOAD)
+ return useMemo(() => {
+ try {
+ // ERC-1155 allows a generic {id} in the URL, so prepare to replace if relevant,
+ // in lowercase hexadecimal (with no 0x prefix) and leading zero padded to 64 hex characters.
+ const idHex = id ? hexZeroPad(BigNumber.from(id).toHexString(), 32).substring(2) : id
+ return {
+ uri: !enforceOwnership || balance.result?.[0] > 0 ? uri.result?.[0]?.replaceAll('{id}', idHex) : undefined,
+ loading: balance.loading || uri.loading,
+ }
+ } catch (error) {
+ logger.warn('useENSAvatar', 'useERC1155Uri', 'invalid token id', { id })
+ return { loading: false }
+ }
+ }, [balance.loading, balance.result, enforceOwnership, uri.loading, uri.result, id])
+}
diff --git a/apps/web/src/hooks/useENSName.ts b/apps/web/src/hooks/useENSName.ts
new file mode 100644
index 00000000000..d8433713936
--- /dev/null
+++ b/apps/web/src/hooks/useENSName.ts
@@ -0,0 +1,46 @@
+import { useENSRegistrarContract, useENSResolverContract } from 'hooks/useContract'
+import useDebounce from 'hooks/useDebounce'
+import useENSAddress from 'hooks/useENSAddress'
+import { NEVER_RELOAD, useMainnetSingleCallResult } from 'lib/hooks/multicall'
+import { useMemo } from 'react'
+import { isAddress } from 'utilities/src/addresses'
+import isZero from 'utils/isZero'
+import { safeNamehash } from 'utils/safeNamehash'
+
+/**
+ * Does a reverse lookup for an address to find its ENS name.
+ * Note this is not the same as looking up an ENS name to find an address.
+ */
+export default function useENSName(address?: string): { ENSName: string | null; loading: boolean } {
+ const debouncedAddress = useDebounce(address, 200)
+ const ensNodeArgument = useMemo(() => {
+ if (!debouncedAddress || !isAddress(debouncedAddress)) {
+ return [undefined]
+ }
+ return [safeNamehash(`${debouncedAddress.toLowerCase().substr(2)}.addr.reverse`)]
+ }, [debouncedAddress])
+ const registrarContract = useENSRegistrarContract()
+ const resolverAddress = useMainnetSingleCallResult(registrarContract, 'resolver', ensNodeArgument, NEVER_RELOAD)
+ const resolverAddressResult = resolverAddress.result?.[0]
+ const resolverContract = useENSResolverContract(
+ resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined,
+ )
+ const nameCallRes = useMainnetSingleCallResult(resolverContract, 'name', ensNodeArgument, NEVER_RELOAD)
+ const name = nameCallRes.result?.[0]
+
+ // ENS does not enforce that an address owns a .eth domain before setting it as a reverse proxy
+ // and recommends that you perform a match on the forward resolution
+ // see: https://docs.ens.domains/dapp-developer-guide/resolving-names#reverse-resolution
+ const fwdAddr = useENSAddress(name)
+ const checkedName = address === fwdAddr?.address ? name : null
+
+ const changed = debouncedAddress !== address
+ const loading = changed || resolverAddress.loading || nameCallRes.loading || fwdAddr.loading
+ return useMemo(
+ () => ({
+ ENSName: changed ? null : checkedName,
+ loading,
+ }),
+ [changed, checkedName, loading],
+ )
+}
diff --git a/apps/web/src/hooks/useGasPrice.ts b/apps/web/src/hooks/useGasPrice.ts
index 78fc7bd131a..7688ca0394d 100644
--- a/apps/web/src/hooks/useGasPrice.ts
+++ b/apps/web/src/hooks/useGasPrice.ts
@@ -1,8 +1,8 @@
import { useContract } from 'hooks/useContract'
+import useENSAddress from 'hooks/useENSAddress'
import JSBI from 'jsbi'
import { useSingleCallResult } from 'lib/hooks/multicall'
import { useMemo } from 'react'
-import { useAddressFromEns } from 'uniswap/src/features/ens/api'
const CHAIN_DATA_ABI = [
{
@@ -18,7 +18,7 @@ const CHAIN_DATA_ABI = [
* Returns the price of 1 gas in WEI for the currently selected network using the chainlink fast gas price oracle
*/
export default function useGasPrice(skip = false): JSBI | undefined {
- const { data: address } = useAddressFromEns('fast-gas-gwei.data.eth')
+ const { address } = useENSAddress('fast-gas-gwei.data.eth')
const contract = useContract(address ?? undefined, CHAIN_DATA_ABI, false)
const resultStr = useSingleCallResult(skip ? undefined : contract, 'latestAnswer').result?.[0]?.toString()
diff --git a/apps/web/src/hooks/useIsUniswapXSupportedChain.ts b/apps/web/src/hooks/useIsUniswapXSupportedChain.ts
index 1406143eb66..b856d785eea 100644
--- a/apps/web/src/hooks/useIsUniswapXSupportedChain.ts
+++ b/apps/web/src/hooks/useIsUniswapXSupportedChain.ts
@@ -1,20 +1,17 @@
/* eslint-disable rulesdir/no-undefined-or */
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { ArbitrumXV2ExperimentGroup, Experiments } from 'uniswap/src/features/gating/experiments'
-import { useExperimentGroupName } from 'uniswap/src/features/gating/hooks'
-import { useUniswapXPriorityOrderFlag } from 'uniswap/src/features/transactions/swap/utils/protocols'
+import { FeatureFlags } from 'uniswap/src/features/gating/flags'
+import { useExperimentGroupName, useFeatureFlag } from 'uniswap/src/features/gating/hooks'
-/**
- * Returns true if the chain is supported by UniswapX. Does not differentiate between UniswapX v1 and v2.
- */
export function useIsUniswapXSupportedChain(chainId?: number) {
const xv2ArbitrumEnabled =
useExperimentGroupName(Experiments.ArbitrumXV2OpenOrders) === ArbitrumXV2ExperimentGroup.Test
- const isPriorityOrdersEnabled = useUniswapXPriorityOrderFlag(chainId)
+ const isPriorityOrdersEnabled = useFeatureFlag(FeatureFlags.UniswapXPriorityOrders)
return (
chainId === UniverseChainId.Mainnet ||
(xv2ArbitrumEnabled && chainId === UniverseChainId.ArbitrumOne) ||
- isPriorityOrdersEnabled
+ (isPriorityOrdersEnabled && chainId === UniverseChainId.Base) // UniswapX priority orders are only available on Base for now
)
}
diff --git a/apps/web/src/hooks/useLast.ts b/apps/web/src/hooks/useLast.ts
new file mode 100644
index 00000000000..89464d09b6c
--- /dev/null
+++ b/apps/web/src/hooks/useLast.ts
@@ -0,0 +1,20 @@
+import { useEffect, useState } from 'react'
+
+/**
+ * Returns the last value of type T that passes a filter function
+ * @param value changing value
+ * @param filterFn function that determines whether a given value should be considered for the last value
+ */
+export default function useLast(value: T, filterFn?: (value: T) => boolean): T {
+ const [last, setLast] = useState(value)
+ useEffect(() => {
+ setLast((last) => {
+ const shouldUse: boolean = filterFn ? filterFn(value) : true
+ if (shouldUse) {
+ return value
+ }
+ return last
+ })
+ }, [filterFn, value])
+ return last
+}
diff --git a/apps/web/src/lib/hooks/multicall.ts b/apps/web/src/lib/hooks/multicall.ts
index 22461706213..ea6c16185d4 100644
--- a/apps/web/src/lib/hooks/multicall.ts
+++ b/apps/web/src/lib/hooks/multicall.ts
@@ -1,6 +1,8 @@
+import { useMainnetBlockNumber } from 'lib/hooks/useBlockNumber'
import { useCallContext } from 'lib/hooks/useCallContext'
import multicall from 'lib/state/multicall'
import { SkipFirst } from 'types/tuple'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
export { NEVER_RELOAD } from '@uniswap/redux-multicall' // re-export for convenience
export type { CallStateResult } from '@uniswap/redux-multicall' // re-export for convenience
@@ -21,6 +23,11 @@ export function useSingleCallResult(...args: SkipFirstTwoParams) {
+ const latestMainnetBlock = useMainnetBlockNumber()
+ return multicall.hooks.useSingleCallResult(UniverseChainId.Mainnet, latestMainnetBlock, ...args)
+}
+
export function useSingleContractMultipleData(
...args: SkipFirstTwoParams
) {
diff --git a/apps/web/src/lib/hooks/routing/useRoutingAPIArguments.ts b/apps/web/src/lib/hooks/routing/useRoutingAPIArguments.ts
index 0368fa6639d..32d540f5d0e 100644
--- a/apps/web/src/lib/hooks/routing/useRoutingAPIArguments.ts
+++ b/apps/web/src/lib/hooks/routing/useRoutingAPIArguments.ts
@@ -13,7 +13,6 @@ import {
} from 'uniswap/src/features/gating/experiments'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useExperimentGroupName, useExperimentValue, useFeatureFlag } from 'uniswap/src/features/gating/hooks'
-import { useUniswapXPriorityOrderFlag } from 'uniswap/src/features/transactions/swap/utils/protocols'
/**
* Returns query arguments for the Routing API query or undefined if the
@@ -38,7 +37,7 @@ export function useRoutingAPIArguments({
protocolPreferences?: Protocol[]
}): GetQuoteArgs | SkipToken {
const uniswapXForceSyntheticQuotes = useFeatureFlag(FeatureFlags.UniswapXSyntheticQuote)
- const isPriorityOrdersEnabled = useUniswapXPriorityOrderFlag(tokenIn?.chainId)
+ const isPriorityOrdersEnabled = useFeatureFlag(FeatureFlags.UniswapXPriorityOrders)
const isXv2 = useFeatureFlag(FeatureFlags.UniswapXv2)
const xv2ArbitrumEnabled =
useExperimentGroupName(Experiments.ArbitrumXV2OpenOrders) === ArbitrumXV2ExperimentGroup.Test
@@ -68,7 +67,8 @@ export function useRoutingAPIArguments({
const chainId = tokenIn?.chainId
const isUniswapXSupportedChain = useIsUniswapXSupportedChain(chainId)
- const isPriorityOrder = routerPreference === RouterPreference.X && isPriorityOrdersEnabled
+ const isPriorityOrder =
+ routerPreference === RouterPreference.X && isPriorityOrdersEnabled && chainId === UniverseChainId.Base // UniswapX priority orders are only available on Base for now
return useMemo(
() =>
diff --git a/apps/web/src/lib/state/multicall.tsx b/apps/web/src/lib/state/multicall.tsx
index e884fdcb8ef..d9612be4a80 100644
--- a/apps/web/src/lib/state/multicall.tsx
+++ b/apps/web/src/lib/state/multicall.tsx
@@ -1,15 +1,18 @@
import { createMulticall, ListenerOptions } from '@uniswap/redux-multicall'
import { useAccount } from 'hooks/useAccount'
-import { useInterfaceMulticall } from 'hooks/useContract'
+import { useInterfaceMulticall, useMainnetInterfaceMulticall } from 'hooks/useContract'
import { useAtomValue } from 'jotai/utils'
-import useBlockNumber, { multicallUpdaterSwapChainIdAtom } from 'lib/hooks/useBlockNumber'
+import useBlockNumber, { multicallUpdaterSwapChainIdAtom, useMainnetBlockNumber } from 'lib/hooks/useBlockNumber'
import { useMemo } from 'react'
import { getChainInfo } from 'uniswap/src/features/chains/chainInfo'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
const multicall = createMulticall()
export default multicall
+const MAINNET_LISTENER_OPTIONS = { blocksPerFetch: 1 }
+
export function MulticallUpdater() {
const account = useAccount()
const multicallUpdaterSwapChainId = useAtomValue(multicallUpdaterSwapChainIdAtom)
@@ -21,12 +24,25 @@ export function MulticallUpdater() {
[chainId],
)
+ const latestMainnetBlockNumber = useMainnetBlockNumber()
+ const mainnetContract = useMainnetInterfaceMulticall()
+
return (
-
+ <>
+
+ {chainId !== UniverseChainId.Mainnet && (
+
+ )}
+ >
)
}
diff --git a/apps/web/src/nft/pages/profile/index.tsx b/apps/web/src/nft/pages/profile/index.tsx
index ef5c7b6b555..97f7b7ac993 100644
--- a/apps/web/src/nft/pages/profile/index.tsx
+++ b/apps/web/src/nft/pages/profile/index.tsx
@@ -3,6 +3,7 @@ import { useAccountDrawer } from 'components/AccountDrawer/MiniPortfolio/hooks'
import { ButtonPrimary } from 'components/Button/buttons'
import { ConnectWalletButtonText } from 'components/NavBar/accountCTAsExperimentUtils'
import { useAccount } from 'hooks/useAccount'
+import useENSName from 'hooks/useENSName'
import { TFunction } from 'i18next'
import styled from 'lib/styled-components'
import { XXXL_BAG_WIDTH } from 'nft/components/bag/Bag'
@@ -16,7 +17,6 @@ import { Helmet } from 'react-helmet-async/lib/index'
import { Trans, useTranslation } from 'react-i18next'
import { BREAKPOINTS } from 'theme'
import { ThemedText } from 'theme/components'
-import { useENSName } from 'uniswap/src/features/ens/api'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { shortenAddress } from 'utilities/src/addresses'
@@ -87,7 +87,7 @@ export default function Profile() {
const clearCollectionFilters = useWalletCollections((state) => state.clearCollectionFilters)
const account = useAccount()
- const { data: ENSName } = useENSName(account.address)
+ const { ENSName } = useENSName(account.address)
const accountRef = useRef(account.address)
const accountDrawer = useAccountDrawer()
diff --git a/apps/web/src/pages/AddLiquidityV2/index.tsx b/apps/web/src/pages/AddLiquidityV2/index.tsx
index 5a16df8482c..f3fa1f580be 100644
--- a/apps/web/src/pages/AddLiquidityV2/index.tsx
+++ b/apps/web/src/pages/AddLiquidityV2/index.tsx
@@ -123,8 +123,8 @@ export default function AddLiquidity() {
[independentField]: typedValue,
[dependentField]: noLiquidity ? otherTypedValue : parsedAmounts[dependentField]?.toSignificant(6) ?? '',
}
- const addedCurrency0AmountUsd = useUSDCValue(parsedAmounts[Field.CURRENCY_A])
- const addedCurrency1AmountUsd = useUSDCValue(parsedAmounts[Field.CURRENCY_B])
+ const currency0AmountUsd = useUSDCValue(parsedAmounts[Field.CURRENCY_A])
+ const currency1AmountUsd = useUSDCValue(parsedAmounts[Field.CURRENCY_B])
// get the max amounts user can add
const maxAmounts: { [field in Field]?: CurrencyAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(
@@ -240,8 +240,8 @@ export default function AddLiquidity() {
}),
currency0: currencyA,
currency1: currencyB,
- currency0AmountUsd: addedCurrency0AmountUsd,
- currency1AmountUsd: addedCurrency1AmountUsd,
+ currency0AmountUsd,
+ currency1AmountUsd,
chainId: account.chainId,
}),
createPosition: false,
diff --git a/apps/web/src/pages/AddLiquidityV3/index.tsx b/apps/web/src/pages/AddLiquidityV3/index.tsx
index 5ee1981cc57..e1f7281df27 100644
--- a/apps/web/src/pages/AddLiquidityV3/index.tsx
+++ b/apps/web/src/pages/AddLiquidityV3/index.tsx
@@ -390,8 +390,8 @@ function AddLiquidity() {
: undefined,
currency0: baseCurrency,
currency1: quoteCurrency,
- currency0AmountUsd: usdcValueCurrencyA,
- currency1AmountUsd: usdcValueCurrencyB,
+ currency0AmountUsd: currencyAFiat.data,
+ currency1AmountUsd: currencyBFiat.data,
chainId: account.chainId,
}),
createPosition: false,
diff --git a/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx b/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx
index 3a70bad16c7..a78d0ee15dc 100644
--- a/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx
+++ b/apps/web/src/pages/IncreaseLiquidity/IncreaseLiquidityForm.tsx
@@ -1,5 +1,3 @@
-// eslint-disable-next-line no-restricted-imports
-import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb'
import { CurrencyAmount } from '@uniswap/sdk-core'
import { LoaderButton } from 'components/Button/LoaderButton'
import {
@@ -10,7 +8,6 @@ import { useIncreaseLiquidityTxContext } from 'components/IncreaseLiquidity/Incr
import { DepositInputForm } from 'components/Liquidity/DepositInputForm'
import { LiquidityModalDetailRows } from 'components/Liquidity/LiquidityModalDetailRows'
import { LiquidityPositionInfo } from 'components/Liquidity/LiquidityPositionInfo'
-import { getDisplayedAmountsFromDependentAmount } from 'components/Liquidity/utils'
import { TradingAPIError } from 'pages/Pool/Positions/create/TradingAPIError'
import { useCanUnwrapCurrency, useCurrencyInfoWithUnwrapForTradingApi } from 'pages/Pool/Positions/create/utils'
import { useMemo } from 'react'
@@ -39,10 +36,9 @@ export function IncreaseLiquidityForm() {
deposit1Disabled,
error,
} = derivedIncreaseLiquidityInfo
- const { position, exactField } = increaseLiquidityState
+ const { position } = increaseLiquidityState
const { gasFeeEstimateUSD, txInfo, error: dataFetchingError, refetch } = useIncreaseLiquidityTxContext()
- const { dependentAmount } = txInfo || {}
if (!position) {
throw new Error('AddLiquidityModal must have an initial state when opening')
@@ -51,17 +47,17 @@ export function IncreaseLiquidityForm() {
const { currency0Amount: initialCurrency0Amount, currency1Amount: initialCurrency1Amount } = position
const currency0Info = useCurrencyInfoWithUnwrapForTradingApi({
currency: initialCurrency0Amount.currency,
- shouldUnwrap: unwrapNativeCurrency && position.version !== ProtocolVersion.V4,
+ shouldUnwrap: unwrapNativeCurrency,
})
const currency1Info = useCurrencyInfoWithUnwrapForTradingApi({
currency: initialCurrency1Amount.currency,
- shouldUnwrap: unwrapNativeCurrency && position.version !== ProtocolVersion.V4,
+ shouldUnwrap: unwrapNativeCurrency,
})
const token0 = currency0Info?.currency
const token1 = currency1Info?.currency
- const canUnwrap0 = useCanUnwrapCurrency(initialCurrency0Amount.currency) && position.version !== ProtocolVersion.V4
- const canUnwrap1 = useCanUnwrapCurrency(initialCurrency1Amount.currency) && position.version !== ProtocolVersion.V4
+ const canUnwrap0 = useCanUnwrapCurrency(initialCurrency0Amount.currency)
+ const canUnwrap1 = useCanUnwrapCurrency(initialCurrency1Amount.currency)
const nativeCurrencyInfo = useNativeCurrencyInfo(position.chainId)
const currency0Amount = useMemo(() => {
@@ -78,20 +74,6 @@ export function IncreaseLiquidityForm() {
return initialCurrency1Amount
}, [unwrapNativeCurrency, canUnwrap1, currency1Info, initialCurrency1Amount])
- const { displayFormattedAmounts, displayUSDAmounts } = useMemo(
- () =>
- getDisplayedAmountsFromDependentAmount({
- token0,
- token1,
- dependentAmount,
- exactField,
- currencyAmounts,
- currencyAmountsUSDValue,
- formattedAmounts,
- }),
- [dependentAmount, exactField, currencyAmounts, formattedAmounts, currencyAmountsUSDValue, token0, token1],
- )
-
const handleUserInput = (field: PositionField, newValue: string) => {
setIncreaseLiquidityState((prev) => ({
...prev,
@@ -134,10 +116,6 @@ export function IncreaseLiquidityForm() {
)
}, [nativeCurrencyInfo, t, unwrapNativeCurrency, setUnwrapNativeCurrency])
- const requestLoading = Boolean(
- !dataFetchingError && !error && currencyAmounts?.TOKEN0 && currencyAmounts.TOKEN1 && !txInfo?.txRequest,
- )
-
return (
@@ -145,16 +123,14 @@ export function IncreaseLiquidityForm() {
@@ -168,7 +144,9 @@ export function IncreaseLiquidityForm() {
diff --git a/apps/web/src/pages/Landing/components/Icons.tsx b/apps/web/src/pages/Landing/components/Icons.tsx
index ac032a0bfe9..142a66d4808 100644
--- a/apps/web/src/pages/Landing/components/Icons.tsx
+++ b/apps/web/src/pages/Landing/components/Icons.tsx
@@ -97,7 +97,7 @@ export function Twitter(props: IconProps) {
return (
diff --git a/apps/web/src/pages/Landing/sections/Hero.tsx b/apps/web/src/pages/Landing/sections/Hero.tsx
index b7bb847529f..d24e4083919 100644
--- a/apps/web/src/pages/Landing/sections/Hero.tsx
+++ b/apps/web/src/pages/Landing/sections/Hero.tsx
@@ -48,23 +48,6 @@ export function Hero({ scrollToRef, transition }: HeroProps) {
[navigate],
)
- const renderRiseInText = useMemo(() => {
- return t('hero.swap.title')
- .split(/( )|\s+/)
- .filter(Boolean) // splits the string by spaces but also captures " " as a separate element in the array
- .map((word, index) => {
- if (word === ' ') {
- return
- } else {
- return (
-
- {word}{' '}
-
- )
- }
- })
- }, [t])
-
return (
- {renderRiseInText}
+ {t('hero.swap.title')
+ .split(/( )|\s+/)
+ .filter(Boolean) // splits the string by spaces but also captures " " as a separate element in the array
+ .map((word, index) => {
+ if (word === ' ') {
+ return
+ } else {
+ return (
+
+ {word}{' '}
+
+ )
+ }
+ })}
diff --git a/apps/web/src/pages/LegacyPool/PositionPage.tsx b/apps/web/src/pages/LegacyPool/PositionPage.tsx
index 2402dba411b..6c9499781cb 100644
--- a/apps/web/src/pages/LegacyPool/PositionPage.tsx
+++ b/apps/web/src/pages/LegacyPool/PositionPage.tsx
@@ -427,25 +427,23 @@ function PositionPageContent() {
const { price: price0 } = useUSDCPrice(token0 ?? undefined)
const { price: price1 } = useUSDCPrice(token1 ?? undefined)
- const feeValue0Usd = useMemo(() => {
- if (!price0 || !feeValue0) {
+ const fiatValueOfFees: CurrencyAmount | null = useMemo(() => {
+ if (!price0 || !price1 || !feeValue0 || !feeValue1) {
return null
}
+
// we wrap because it doesn't matter, the quote returns a USDC amount
- const feeValue0Wrapped = feeValue0.wrapped
- return price0.quote(feeValue0Wrapped)
- }, [price0, feeValue0])
+ const feeValue0Wrapped = feeValue0?.wrapped
+ const feeValue1Wrapped = feeValue1?.wrapped
- const feeValue1Usd = useMemo(() => {
- if (!price1 || !feeValue1) {
+ if (!feeValue0Wrapped || !feeValue1Wrapped) {
return null
}
- // we wrap because it doesn't matter, the quote returns a USDC amount
- const feeValue1Wrapped = feeValue1.wrapped
- return price1.quote(feeValue1Wrapped)
- }, [price1, feeValue1])
- const fiatValueOfTotalFees = feeValue0Usd && feeValue1Usd ? feeValue0Usd.add(feeValue1Usd) : null
+ const amount0 = price0.quote(feeValue0Wrapped)
+ const amount1 = price1.quote(feeValue1Wrapped)
+ return amount0.add(amount1)
+ }, [price0, price1, feeValue0, feeValue1])
const fiatValueOfLiquidity: CurrencyAmount | null = useMemo(() => {
if (!price0 || !price1 || !position) {
@@ -514,8 +512,8 @@ function PositionPageContent() {
version: ProtocolVersion.V3,
poolId: poolAddress,
chainId: account.chainId,
- currency0AmountUsd: feeValue0Usd,
- currency1AmountUsd: feeValue1Usd,
+ currency0AmountUsd: feeValue0 ?? CurrencyAmount.fromRawAmount(currency0ForFeeCollectionPurposes, 0),
+ currency1AmountUsd: feeValue1 ?? CurrencyAmount.fromRawAmount(currency1ForFeeCollectionPurposes, 0),
}),
})
@@ -555,8 +553,6 @@ function PositionPageContent() {
trace,
feeAmount,
poolAddress,
- feeValue0Usd,
- feeValue1Usd,
addTransaction,
])
@@ -825,9 +821,9 @@ function PositionPageContent() {
- {fiatValueOfTotalFees?.greaterThan(new Fraction(1, 100)) ? (
+ {fiatValueOfFees?.greaterThan(new Fraction(1, 100)) ? (
- {formatCurrencyAmount({ amount: fiatValueOfTotalFees, type: NumberType.FiatTokenPrice })}
+ {formatCurrencyAmount({ amount: fiatValueOfFees, type: NumberType.FiatTokenPrice })}
) : (
diff --git a/apps/web/src/pages/MigrateV2/index.tsx b/apps/web/src/pages/MigrateV2/index.tsx
index 85709bfca5c..0b9d9544509 100644
--- a/apps/web/src/pages/MigrateV2/index.tsx
+++ b/apps/web/src/pages/MigrateV2/index.tsx
@@ -5,6 +5,7 @@ import { Pair } from '@uniswap/v2-sdk'
import { LightCard } from 'components/Card/cards'
import MigrateSushiPositionCard from 'components/PositionCard/Sushi'
import MigrateV2PositionCard from 'components/PositionCard/V2'
+import QuestionHelper from 'components/QuestionHelper'
import { SwitchLocaleLink } from 'components/SwitchLocaleLink'
import { V2Unsupported } from 'components/V2Unsupported'
import { AutoColumn } from 'components/deprecated/Column'
@@ -133,7 +134,7 @@ export default function MigrateV2() {
-
+ {
@@ -145,13 +146,15 @@ export default function MigrateV2() {
}}
backgroundColor="$transparent"
size="small"
- style={{ position: 'absolute', left: 0 }}
>
+
Cancel
Continue
diff --git a/apps/web/src/pages/Swap/SwapForm.tsx b/apps/web/src/pages/Swap/SwapForm.tsx
index 577041f1e33..a13b5db778e 100644
--- a/apps/web/src/pages/Swap/SwapForm.tsx
+++ b/apps/web/src/pages/Swap/SwapForm.tsx
@@ -14,6 +14,7 @@ import { ConfirmSwapModal } from 'components/ConfirmSwapModal'
import SwapCurrencyInputPanel from 'components/CurrencyInputPanel/SwapCurrencyInputPanel'
import ErrorIcon from 'components/Icons/Error'
import { ConnectWalletButtonText } from 'components/NavBar/accountCTAsExperimentUtils'
+import TokenSafetyModal from 'components/TokenSafety/TokenSafetyModal'
import Column, { AutoColumn } from 'components/deprecated/Column'
import Row from 'components/deprecated/Row'
import PriceImpactModal from 'components/swap/PriceImpactModal'
@@ -51,10 +52,8 @@ import { Text } from 'ui/src'
import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
import { useSupportedChainId } from 'uniswap/src/features/chains/hooks/useSupportedChainId'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
-import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
-import TokenWarningModal from 'uniswap/src/features/tokens/TokenWarningModal'
import { maybeLogFirstSwapAction } from 'uniswap/src/features/transactions/swap/utils/maybeLogFirstSwapAction'
import { WrapType } from 'uniswap/src/features/transactions/types/wrap'
import { CurrencyField } from 'uniswap/src/types/currency'
@@ -99,19 +98,19 @@ export function SwapForm({
}, [])
// dismiss warning if prefilled tokens don't have warnings
- const prefilledCurrencyInfosWithWarnings: { field: CurrencyField; currencyInfo: CurrencyInfo }[] = useMemo(() => {
+ const prefilledTokensWithWarnings: { field: CurrencyField; token: Token }[] = useMemo(() => {
const tokens = []
if (
prefilledInputCurrencyInfo?.currency.isToken &&
prefilledInputCurrencyInfo.safetyLevel !== SafetyLevel.Verified
) {
- tokens.push({ field: CurrencyField.INPUT, currencyInfo: prefilledInputCurrencyInfo })
+ tokens.push({ field: CurrencyField.INPUT, token: prefilledInputCurrencyInfo.currency as Token })
}
if (
prefilledOutputCurrencyInfo?.currency.isToken &&
prefilledOutputCurrencyInfo.safetyLevel !== SafetyLevel.Verified
) {
- tokens.push({ field: CurrencyField.OUTPUT, currencyInfo: prefilledOutputCurrencyInfo })
+ tokens.push({ field: CurrencyField.OUTPUT, token: prefilledOutputCurrencyInfo.currency as Token })
}
return tokens
}, [prefilledInputCurrencyInfo, prefilledOutputCurrencyInfo])
@@ -477,11 +476,11 @@ export function SwapForm({
return (
<>
- {prefilledCurrencyInfosWithWarnings.length >= 1 && (
- = 1 && !dismissTokenWarning}
- currencyInfo0={prefilledCurrencyInfosWithWarnings[0].currencyInfo}
- currencyInfo1={prefilledCurrencyInfosWithWarnings[1]?.currencyInfo ?? undefined}
+ {prefilledTokensWithWarnings.length >= 1 && (
+ = 1 && !dismissTokenWarning}
+ token0={prefilledTokensWithWarnings[0].token}
+ token1={prefilledTokensWithWarnings[1]?.token}
onAcknowledge={handleConfirmTokenWarning}
onReject={() => {
setDismissTokenWarning(true)
@@ -491,8 +490,9 @@ export function SwapForm({
closeModalOnly={() => {
setDismissTokenWarning(true)
}}
- onToken0BlockAcknowledged={() => onCurrencySelection(prefilledCurrencyInfosWithWarnings[0].field, undefined)}
- onToken1BlockAcknowledged={() => onCurrencySelection(prefilledCurrencyInfosWithWarnings[1].field, undefined)}
+ onToken0BlockAcknowledged={() => onCurrencySelection(prefilledTokensWithWarnings[0].field, undefined)}
+ onToken1BlockAcknowledged={() => onCurrencySelection(prefilledTokensWithWarnings[1].field, undefined)}
+ showCancel={true}
/>
)}
{trade && showConfirm && (
diff --git a/apps/web/src/pages/Swap/index.tsx b/apps/web/src/pages/Swap/index.tsx
index 88fde50a031..37700106f94 100644
--- a/apps/web/src/pages/Swap/index.tsx
+++ b/apps/web/src/pages/Swap/index.tsx
@@ -163,7 +163,7 @@ export function Swap({
const input = currencyToAsset(initialInputCurrency)
const output = currencyToAsset(initialOutputCurrency)
- const { isSwapTokenSelectorOpen, swapOutputChainId } = useUniswapContext()
+ const { isSwapTokenSelectorOpen } = useUniswapContext()
const prefilledState = useSwapPrefilledState({
input,
@@ -171,7 +171,6 @@ export function Swap({
exactAmountToken: initialTypedValue ?? '',
exactCurrencyField: initialIndependentField ?? CurrencyField.INPUT,
selectingCurrencyField: isSwapTokenSelectorOpen ? CurrencyField.OUTPUT : undefined,
- selectingCurrencyChainId: swapOutputChainId,
})
// TODO(WEB-5078): Remove this once we upgrade swap e2e tests to use the new swap flow
diff --git a/apps/web/src/pages/TokenDetails/TDPContext.tsx b/apps/web/src/pages/TokenDetails/TDPContext.tsx
index f155cf392f0..35270288107 100644
--- a/apps/web/src/pages/TokenDetails/TDPContext.tsx
+++ b/apps/web/src/pages/TokenDetails/TDPContext.tsx
@@ -1,6 +1,7 @@
import { QueryResult } from '@apollo/client'
import { Currency } from '@uniswap/sdk-core'
import { TDPChartState } from 'components/Tokens/TokenDetails/ChartSection'
+import { Warning } from 'constants/deprecatedTokenSafety'
import { PortfolioBalance } from 'graphql/data/portfolios'
import { PropsWithChildren, createContext, useContext } from 'react'
import { Chain, Exact, TokenWebQuery } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
@@ -27,6 +28,7 @@ type BaseTDPContext = {
multiChainMap: MultiChainMap
tokenColor?: string
+ warning?: Warning
}
/** Token details context with an unresolved currency field */
export type PendingTDPContext = BaseTDPContext & { currency: undefined }
diff --git a/apps/web/src/pages/TokenDetails/index.tsx b/apps/web/src/pages/TokenDetails/index.tsx
index c548200796d..fa6f979053c 100644
--- a/apps/web/src/pages/TokenDetails/index.tsx
+++ b/apps/web/src/pages/TokenDetails/index.tsx
@@ -2,6 +2,7 @@ import TokenDetails from 'components/Tokens/TokenDetails'
import { useCreateTDPChartState } from 'components/Tokens/TokenDetails/ChartSection'
import InvalidTokenDetails from 'components/Tokens/TokenDetails/InvalidTokenDetails'
import { TokenDetailsPageSkeleton } from 'components/Tokens/TokenDetails/Skeleton'
+import { useTokenWarning } from 'constants/deprecatedTokenSafety'
import { NATIVE_CHAIN_ID, UNKNOWN_TOKEN_SYMBOL } from 'constants/tokens'
import { useTokenBalancesQuery } from 'graphql/data/apollo/AdaptiveTokenBalancesProvider'
import { gqlToCurrency } from 'graphql/data/util'
@@ -116,6 +117,8 @@ function useCreateTDPContext(): PendingTDPContext | LoadedTDPContext {
isNative,
)
+ const warning = useTokenWarning(tokenAddress, currencyChainInfo.id)
+
// Extract color for page usage
const theme = useTheme()
const { preloadedLogoSrc } = (useLocation().state as { preloadedLogoSrc?: string }) ?? {}
@@ -137,6 +140,7 @@ function useCreateTDPContext(): PendingTDPContext | LoadedTDPContext {
currencyWasFetchedOnChain,
tokenQuery,
chartState,
+ warning,
multiChainMap,
tokenColor,
}
@@ -148,6 +152,7 @@ function useCreateTDPContext(): PendingTDPContext | LoadedTDPContext {
currencyWasFetchedOnChain,
tokenQuery,
chartState,
+ warning,
multiChainMap,
tokenColor,
])
diff --git a/apps/web/src/state/application/reducer.ts b/apps/web/src/state/application/reducer.ts
index b21c1e345e0..58c55c31b1b 100644
--- a/apps/web/src/state/application/reducer.ts
+++ b/apps/web/src/state/application/reducer.ts
@@ -49,7 +49,6 @@ export enum ApplicationModal {
FIAT_ONRAMP,
RECEIVE_CRYPTO,
RECEIVE_CRYPTO_QR,
- RECOVERY_PHRASE,
PRIVACY_POLICY,
QUEUE,
SELF_CLAIM,
diff --git a/apps/web/src/state/explore/topTokens.ts b/apps/web/src/state/explore/topTokens.ts
index 2cc50a42407..b5b029fdf6b 100644
--- a/apps/web/src/state/explore/topTokens.ts
+++ b/apps/web/src/state/explore/topTokens.ts
@@ -14,9 +14,6 @@ import { useAtomValue } from 'jotai/utils'
import { useContext, useMemo } from 'react'
import { ExploreContext, giveExploreStatDefaultValue } from 'state/explore'
import { TokenStat } from 'state/explore/types'
-import { UniverseChainId } from 'uniswap/src/features/chains/types'
-import { fromGraphQLChain } from 'uniswap/src/features/chains/utils'
-import { buildCurrencyId } from 'uniswap/src/utils/currencyId'
import { getChainIdFromChainUrlParam } from 'utils/chainParams'
const TokenSortMethods = {
@@ -138,10 +135,9 @@ export function useTopTokens() {
if (!cur?.address) {
return acc
}
- const currCurrencyId = buildCurrencyId(fromGraphQLChain(cur.chain) ?? UniverseChainId.Mainnet, cur.address)
return {
...acc,
- [currCurrencyId]: i + 1,
+ [cur.address]: i + 1,
}
}, {}) ?? {},
[sortedTokenStats],
diff --git a/apps/web/src/state/send/hooks.tsx b/apps/web/src/state/send/hooks.tsx
index d01dfe6003b..9d1f0cc3caf 100644
--- a/apps/web/src/state/send/hooks.tsx
+++ b/apps/web/src/state/send/hooks.tsx
@@ -4,6 +4,8 @@ import { useWeb3React } from '@web3-react/core'
import { NATIVE_CHAIN_ID } from 'constants/tokens'
import { useCurrency } from 'hooks/Tokens'
import { useAccount } from 'hooks/useAccount'
+import useENSAddress from 'hooks/useENSAddress'
+import useENSName from 'hooks/useENSName'
import { GasFeeResult, GasSpeed, useTransactionGasFee } from 'hooks/useTransactionGasFee'
import { useUSDTokenUpdater } from 'hooks/useUSDTokenUpdater'
import { useCurrencyBalances } from 'lib/hooks/useCurrencyBalance'
@@ -12,7 +14,6 @@ import { useMemo } from 'react'
import { useMultichainContext } from 'state/multichain/useMultichainContext'
import { SendState } from 'state/send/SendContext'
import { nativeOnChain } from 'uniswap/src/constants/tokens'
-import { useAddressFromEns, useENSName } from 'uniswap/src/features/ens/api'
import { useUnitagByAddress, useUnitagByName } from 'uniswap/src/features/unitags/hooks'
import { isAddress } from 'utilities/src/addresses'
import { useCreateTransferTransaction } from 'utils/transfer'
@@ -48,7 +49,7 @@ export function useDerivedSendInfo(state: SendState): SendInfo {
const { unitag: recipientInputUnitag } = useUnitagByName(validatedRecipientData ? undefined : recipient)
const recipientInputUnitagUsername = validatedRecipientData?.unitag ?? recipientInputUnitag?.username
const recipientInputUnitagAddress = recipientInputUnitag?.address?.address
- const { data: recipientInputEnsAddress } = useAddressFromEns(validatedRecipientData ? null : recipient)
+ const { address: recipientInputEnsAddress } = useENSAddress(validatedRecipientData ? undefined : recipient)
const validatedRecipientAddress = useMemo(() => {
if (validatedRecipientData) {
return validatedRecipientData.address
@@ -59,7 +60,7 @@ export function useDerivedSendInfo(state: SendState): SendInfo {
}, [recipient, recipientInputEnsAddress, recipientInputUnitagAddress, validatedRecipientData])
const { unitag } = useUnitagByAddress(recipientInputUnitagUsername ? undefined : validatedRecipientAddress)
- const { data: ENSName } = useENSName(validatedRecipientData?.ensName ? undefined : validatedRecipientAddress)
+ const { ENSName } = useENSName(validatedRecipientData?.ensName ? undefined : validatedRecipientAddress)
const recipientData = useMemo(() => {
if (validatedRecipientAddress) {
return {
diff --git a/apps/web/src/state/swap/hooks.test.tsx b/apps/web/src/state/swap/hooks.test.tsx
index 0e813233b66..8154c7eb9a2 100644
--- a/apps/web/src/state/swap/hooks.test.tsx
+++ b/apps/web/src/state/swap/hooks.test.tsx
@@ -3,10 +3,8 @@ import { parse } from 'qs'
import { ReactNode } from 'react'
import { queryParametersToCurrencyState, useInitialCurrencyState } from 'state/swap/hooks'
import { ETH_MAINNET } from 'test-utils/constants'
-import { mocked } from 'test-utils/mocked'
import { renderHook, waitFor } from 'test-utils/render'
import { UNI, nativeOnChain } from 'uniswap/src/constants/tokens'
-import { useUniswapContext } from 'uniswap/src/contexts/UniswapContext'
import { UrlContext } from 'uniswap/src/contexts/UrlContext'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
@@ -16,8 +14,6 @@ jest.mock('uniswap/src/features/gating/hooks', () => {
}
})
-jest.mock('uniswap/src/contexts/UniswapContext')
-
function mockQueryStringInUrlProvider(
qs: Record,
): ({ children }: { children?: ReactNode }) => JSX.Element {
@@ -99,20 +95,6 @@ describe('hooks', () => {
})
describe('#useInitialCurrencyState', () => {
- beforeEach(() => {
- return mocked(useUniswapContext).mockReturnValue({
- swapInputChainId: undefined,
- navigateToFiatOnRamp: () => {},
- onSwapChainsChanged: () => {},
- signer: undefined,
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- useProviderHook: (_chainId: number) => undefined,
- isSwapTokenSelectorOpen: false,
- setIsSwapTokenSelectorOpen: () => {},
- setSwapOutputChainId: () => {},
- })
- })
-
describe('Disconnected wallet', () => {
test('optimism output UNI', () => {
jest.mock('uniswap/src/contexts/UrlContext', () => ({
diff --git a/apps/web/src/state/swap/hooks.tsx b/apps/web/src/state/swap/hooks.tsx
index 3a7a0dda56a..73c681dd2f6 100644
--- a/apps/web/src/state/swap/hooks.tsx
+++ b/apps/web/src/state/swap/hooks.tsx
@@ -450,8 +450,8 @@ export function useInitialCurrencyState(): {
hasCurrencyQueryParams,
parsedCurrencyState.inputCurrencyId,
parsedCurrencyState.outputCurrencyId,
- supportedChainId,
defaultChainId,
+ supportedChainId,
])
const initialOutputCurrencyAddress = useMemo(
diff --git a/apps/web/src/state/user/userAddedTokens.ts b/apps/web/src/state/user/userAddedTokens.ts
new file mode 100644
index 00000000000..10bd31e3667
--- /dev/null
+++ b/apps/web/src/state/user/userAddedTokens.ts
@@ -0,0 +1,20 @@
+import { Token } from '@uniswap/sdk-core'
+import { useAccount } from 'hooks/useAccount'
+import { useMemo } from 'react'
+import { useAppSelector } from 'state/hooks'
+import { dismissedWarningTokensSelector } from 'uniswap/src/features/tokens/slice/selectors'
+import { isSerializedToken } from 'uniswap/src/features/tokens/slice/types'
+import { deserializeToken } from 'uniswap/src/utils/currency'
+
+export function useUserAddedTokens(): Token[] {
+ const chainId = useAccount().chainId
+ const serializedTokensMap = useAppSelector(dismissedWarningTokensSelector)
+
+ return useMemo(() => {
+ if (!chainId || !Object.keys(serializedTokensMap).includes(chainId.toString())) {
+ return []
+ }
+ const basicTokens = Object.values(serializedTokensMap[chainId])
+ return basicTokens.filter(isSerializedToken).map(deserializeToken)
+ }, [serializedTokensMap, chainId])
+}
diff --git a/apps/web/src/test-utils/bundle-size-test.ts b/apps/web/src/test-utils/bundle-size-test.ts
index d36ef520438..ed89362cccf 100644
--- a/apps/web/src/test-utils/bundle-size-test.ts
+++ b/apps/web/src/test-utils/bundle-size-test.ts
@@ -32,8 +32,8 @@ const entryGzipSize = report.reduce(
0,
)
-// somewhat arbitrary, based on current size (1/16/2024)
-const limit = 2_250_000
+// somewhat arbitrary, based on current size (1/3/2024)
+const limit = 2_300_000
if (entryGzipSize > limit) {
console.error(`Bundle size has grown too big! Entry JS size is ${entryGzipSize}, over the limit of ${limit}.`)
process.exit(1)
diff --git a/apps/web/src/theme/components/index.tsx b/apps/web/src/theme/components/index.tsx
index e537d7de557..1ed9a9f175d 100644
--- a/apps/web/src/theme/components/index.tsx
+++ b/apps/web/src/theme/components/index.tsx
@@ -1,13 +1,13 @@
-import { isTouchable, TextStyle } from '@tamagui/core'
+import { TextStyle } from '@tamagui/core'
import { InterfaceEventName } from '@uniswap/analytics-events'
import { ReactComponent as TooltipTriangle } from 'assets/svg/tooltip_triangle.svg'
import useCopyClipboard from 'hooks/useCopyClipboard'
import styled, { css, keyframes } from 'lib/styled-components'
import React, {
- forwardRef,
HTMLProps,
PropsWithChildren,
ReactNode,
+ forwardRef,
useCallback,
useImperativeHandle,
useRef,
@@ -324,7 +324,7 @@ export const CopyHelper = forwardRef(
// Copy-helpers w/ left icon always show icon & display "Copied!" in copied state
// Copy-helpers w/ right icon show icon on hover & do not change text
- const showIcon = Boolean(iconPosition === 'left' || isHover || isTouchable || isCopied)
+ const showIcon = Boolean(iconPosition === 'left' || isHover || isCopied)
const Icon = isCopied ? CopiedIcon : showIcon ? InitialIcon : null
const offset = showIcon ? gap + iconSize : 0
return (
diff --git a/config/jest-presets/jest/globals.js b/config/jest-presets/jest/globals.js
index 908abf2d260..f05051180c8 100644
--- a/config/jest-presets/jest/globals.js
+++ b/config/jest-presets/jest/globals.js
@@ -19,7 +19,6 @@ module.exports = {
OPENAI_API_KEY: 'key',
QUICKNODE_ENDPOINT_NAME: 'name',
QUICKNODE_ENDPOINT_TOKEN: 'token',
- QUICKNODE_MONAD_TESTNET_RPC_URL: 'https://rpc.testnet.monad.xyz',
SCANTASTIC_API_URL_OVERRIDE: '',
SENTRY_DSN: 'http://sentry.com',
SHAKE_CLIENT_ID: 123,
diff --git a/package.json b/package.json
index 2901eea4545..f0cc67cc0db 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,6 @@
"immer": "this fixes yarn typecheck in mobile app, see https://github.com/reduxjs/redux-toolkit/issues/1806",
"react-native-wagmi-charts@2.5.1": "this fixes really bad performance issue when the pulse dot is enabled",
"@tanstack/react-query@5.51.16": "Fixes an issue with importing this package from packages/uniswap via apps/web. We can remove this once we move away from craco.",
- "@typescript-eslint/eslint-plugin": "Fixes a conflict between our eslint configs and the configs of external packages, like '@react-native-community/eslint-config'.",
"@gorhom/bottom-sheet@4.5.1": "Fixes bottom sheet dynamic snap point backdrop flickering."
},
"resolutions": {
@@ -55,10 +54,9 @@
"@sideway/formula": "3.0.1",
"@tamagui/animations-moti@1.92.0": "patch:@tamagui/animations-moti@npm%3A1.92.0#./.yarn/patches/@tamagui-animations-moti-npm-1.92.0-a8dde990ec.patch",
"@tanstack/react-query@5.51.16": "patch:@tanstack/react-query@npm%3A5.51.16#./.yarn/patches/@tanstack-react-query-npm-5.51.16-8fa6414eca.patch",
- "@typescript-eslint/eslint-plugin": "6.20.0",
- "@uniswap/router-sdk": "1.18.0",
- "@uniswap/sdk-core": "7.1.0",
- "@uniswap/v2-sdk": "4.9.0",
+ "@uniswap/router-sdk": "1.14.3",
+ "@uniswap/sdk-core": "6.1.0",
+ "@uniswap/v2-sdk": "4.6.1",
"@vercel/og@0.5.8": "patch:@vercel/og@npm%3A0.5.8#./.yarn/patches/@vercel-og-npm-0.5.8-83a79f2744.patch",
"@walletconnect/ethereum-provider": "2.17.1",
"@xmldom/xmldom": "0.7.7",
@@ -89,7 +87,6 @@
"resolve": "1.22.4",
"semver": "7.5.2",
"typescript": "5.3.3",
- "viem": "2.21.51",
"xml2js": "0.5.0",
"yaml": "2.2.2"
},
diff --git a/packages/eslint-config/native.js b/packages/eslint-config/native.js
index 39721f12550..b5bc7248d7f 100644
--- a/packages/eslint-config/native.js
+++ b/packages/eslint-config/native.js
@@ -111,6 +111,7 @@ module.exports = {
'plugin:@typescript-eslint/recommended',
],
plugins: [
+ 'detox',
'jest',
'no-relative-import-paths',
'no-unsanitized',
@@ -288,6 +289,7 @@ module.exports = {
{
files: ['*.e2e.js'],
env: {
+ 'detox/detox': true,
jest: true,
'jest/globals': true,
},
diff --git a/packages/ui/src/assets/backgrounds/android/notifications-dark.png b/packages/ui/src/assets/backgrounds/android/notifications-dark.png
index 17213a99638..5ce57622275 100644
Binary files a/packages/ui/src/assets/backgrounds/android/notifications-dark.png and b/packages/ui/src/assets/backgrounds/android/notifications-dark.png differ
diff --git a/packages/ui/src/assets/backgrounds/android/notifications-light.png b/packages/ui/src/assets/backgrounds/android/notifications-light.png
index 85f4f1acb75..19b4c1c1553 100644
Binary files a/packages/ui/src/assets/backgrounds/android/notifications-light.png and b/packages/ui/src/assets/backgrounds/android/notifications-light.png differ
diff --git a/packages/ui/src/assets/backgrounds/ios/notifications-dark.png b/packages/ui/src/assets/backgrounds/ios/notifications-dark.png
index 4e11f215c94..3aa12b550a2 100644
Binary files a/packages/ui/src/assets/backgrounds/ios/notifications-dark.png and b/packages/ui/src/assets/backgrounds/ios/notifications-dark.png differ
diff --git a/packages/ui/src/assets/backgrounds/ios/notifications-light.png b/packages/ui/src/assets/backgrounds/ios/notifications-light.png
index fd3b8176134..bc751e18d02 100644
Binary files a/packages/ui/src/assets/backgrounds/ios/notifications-light.png and b/packages/ui/src/assets/backgrounds/ios/notifications-light.png differ
diff --git a/packages/ui/src/assets/graphics/unichain-banner-cold.png b/packages/ui/src/assets/graphics/unichain-banner-cold.png
deleted file mode 100644
index 42e26adb0fc..00000000000
Binary files a/packages/ui/src/assets/graphics/unichain-banner-cold.png and /dev/null differ
diff --git a/packages/ui/src/assets/graphics/unichain-banner-warm.png b/packages/ui/src/assets/graphics/unichain-banner-warm.png
deleted file mode 100644
index ec9036326a0..00000000000
Binary files a/packages/ui/src/assets/graphics/unichain-banner-warm.png and /dev/null differ
diff --git a/packages/ui/src/assets/graphics/unichain-modal.gif b/packages/ui/src/assets/graphics/unichain-modal.gif
deleted file mode 100644
index d7b567f38fb..00000000000
Binary files a/packages/ui/src/assets/graphics/unichain-modal.gif and /dev/null differ
diff --git a/packages/ui/src/assets/icons/badge-dollar.svg b/packages/ui/src/assets/icons/badge-dollar.svg
deleted file mode 100644
index e32bb50705b..00000000000
--- a/packages/ui/src/assets/icons/badge-dollar.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/packages/ui/src/assets/icons/chart-bar-axis.svg b/packages/ui/src/assets/icons/chart-bar-axis.svg
deleted file mode 100644
index d84d6da1d13..00000000000
--- a/packages/ui/src/assets/icons/chart-bar-axis.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/packages/ui/src/assets/icons/locked-document.svg b/packages/ui/src/assets/icons/locked-document.svg
deleted file mode 100644
index fb4782a6e9b..00000000000
--- a/packages/ui/src/assets/icons/locked-document.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/packages/ui/src/assets/icons/multi-device.svg b/packages/ui/src/assets/icons/multi-device.svg
deleted file mode 100644
index 67be1a253b2..00000000000
--- a/packages/ui/src/assets/icons/multi-device.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/packages/ui/src/assets/icons/passkey-fingerprint.svg b/packages/ui/src/assets/icons/passkey-fingerprint.svg
deleted file mode 100644
index 12359166b7f..00000000000
--- a/packages/ui/src/assets/icons/passkey-fingerprint.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/packages/ui/src/assets/icons/passkey.svg b/packages/ui/src/assets/icons/passkey.svg
deleted file mode 100644
index 0f91bb3d8e5..00000000000
--- a/packages/ui/src/assets/icons/passkey.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/packages/ui/src/assets/icons/uniswap-x-uncolored.svg b/packages/ui/src/assets/icons/uniswap-x-uncolored.svg
deleted file mode 100644
index 89f7c67a361..00000000000
--- a/packages/ui/src/assets/icons/uniswap-x-uncolored.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/packages/ui/src/assets/index.ts b/packages/ui/src/assets/index.ts
index ee1eaf65455..b0454cb254a 100644
--- a/packages/ui/src/assets/index.ts
+++ b/packages/ui/src/assets/index.ts
@@ -12,13 +12,11 @@ export const CELO_LOGO = require('./logos/png/celo-logo.png')
export const WORLD_CHAIN_LOGO = require('./logos/png/world-chain-logo.png')
export const ZORA_LOGO = require('./logos/png/zora-logo.png')
export const ZKSYNC_LOGO = require('./logos/png/zksync-logo.png')
-export const UNICHAIN_LOGO = require('./logos/png/unichain-logo.png')
export const UNICHAIN_SEPOLIA_LOGO = require('./logos/png/unichain-sepolia-logo.png')
export const UNISWAP_LOGO = require('./logos/png/uniswap-logo.png')
export const UNISWAP_LOGO_LARGE = require('./logos/png/uniswap-logo-large.png')
export const UNISWAP_MONO_LOGO_LARGE = require('./logos/png/uniswap-mono-logo-large.png')
export const UNISWAP_APP_ICON = require('./logos/png/uniswap-app-icon.png')
-
export const ONBOARDING_QR_ETCHING_VIDEO_LIGHT = require('./videos/light-etching.mp4')
export const ONBOARDING_QR_ETCHING_VIDEO_DARK = require('./videos/dark-etching.mp4')
export const AVATARS_LIGHT = require('./misc/avatars-light.png')
@@ -34,10 +32,6 @@ export const UNITAGS_INTRO_BANNER_LIGHT = require('./graphics/unitags-intro-bann
export const UNITAGS_INTRO_BANNER_DARK = require('./graphics/unitags-intro-banner-dark.png')
export const BRIDGING_BANNER = require('./graphics/bridging-banner.png')
-export const UNICHAIN_BANNER_COLD = require('./graphics/unichain-banner-cold.png')
-export const UNICHAIN_BANNER_WARM = require('./graphics/unichain-banner-warm.png')
-
-export const UNICHAIN_PROMO_MODAL_GIF = require('./graphics/unichain-modal.gif')
export const DAI_LOGO = require('./logos/png/dai-logo.png')
export const USDC_LOGO = require('./logos/png/usdc-logo.png')
@@ -45,6 +39,7 @@ export const ETH_LOGO = require('./logos/png/eth-logo.png')
export const OPENSEA_LOGO = require('./logos/png/opensea-logo.png')
export const ENS_LOGO = require('./logos/png/ens-logo.png')
export const FROGGY = require('./graphics/froggy.png')
+export const UNICHAIN_LOGO = require('./logos/png/unichain-logo.png')
export const CEX_TRANSFER_MODAL_BG_LIGHT = require('./graphics/cex-transfer-modal-bg-light.png')
export const CEX_TRANSFER_MODAL_BG_DARK = require('./graphics/cex-transfer-modal-bg-dark.png')
diff --git a/packages/ui/src/assets/logos/png/monad-logo.png b/packages/ui/src/assets/logos/png/monad-logo.png
index f7235c34660..051f75add07 100644
Binary files a/packages/ui/src/assets/logos/png/monad-logo.png and b/packages/ui/src/assets/logos/png/monad-logo.png differ
diff --git a/packages/ui/src/components/icons/BadgeDollar.tsx b/packages/ui/src/components/icons/BadgeDollar.tsx
deleted file mode 100644
index 2a2f3c3caad..00000000000
--- a/packages/ui/src/components/icons/BadgeDollar.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { G, Path, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [BadgeDollar, AnimatedBadgeDollar] = createIcon({
- name: 'BadgeDollar',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/ChartBarAxis.tsx b/packages/ui/src/components/icons/ChartBarAxis.tsx
deleted file mode 100644
index c24276afe86..00000000000
--- a/packages/ui/src/components/icons/ChartBarAxis.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { G, Path, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [ChartBarAxis, AnimatedChartBarAxis] = createIcon({
- name: 'ChartBarAxis',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/LockedDocument.tsx b/packages/ui/src/components/icons/LockedDocument.tsx
deleted file mode 100644
index 0dc9057db2f..00000000000
--- a/packages/ui/src/components/icons/LockedDocument.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Path, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [LockedDocument, AnimatedLockedDocument] = createIcon({
- name: 'LockedDocument',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/MultiDevice.tsx b/packages/ui/src/components/icons/MultiDevice.tsx
deleted file mode 100644
index a3c956c11e3..00000000000
--- a/packages/ui/src/components/icons/MultiDevice.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Path, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [MultiDevice, AnimatedMultiDevice] = createIcon({
- name: 'MultiDevice',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/Passkey.tsx b/packages/ui/src/components/icons/Passkey.tsx
deleted file mode 100644
index c3b3f9daf10..00000000000
--- a/packages/ui/src/components/icons/Passkey.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Path, Rect, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [Passkey, AnimatedPasskey] = createIcon({
- name: 'Passkey',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/PasskeyFingerprint.tsx b/packages/ui/src/components/icons/PasskeyFingerprint.tsx
deleted file mode 100644
index 6f2e21fd102..00000000000
--- a/packages/ui/src/components/icons/PasskeyFingerprint.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { G, Path, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [PasskeyFingerprint, AnimatedPasskeyFingerprint] = createIcon({
- name: 'PasskeyFingerprint',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/UniswapXUncolored.tsx b/packages/ui/src/components/icons/UniswapXUncolored.tsx
deleted file mode 100644
index 6219b8097bf..00000000000
--- a/packages/ui/src/components/icons/UniswapXUncolored.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { G, Path, Svg } from 'react-native-svg'
-
-// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths
-import { createIcon } from '../factories/createIcon'
-
-export const [UniswapXUncolored, AnimatedUniswapXUncolored] = createIcon({
- name: 'UniswapXUncolored',
- getIcon: (props) => (
-
- ),
-})
diff --git a/packages/ui/src/components/icons/exported.ts b/packages/ui/src/components/icons/exported.ts
index 9246d48e210..550c71b7f9c 100644
--- a/packages/ui/src/components/icons/exported.ts
+++ b/packages/ui/src/components/icons/exported.ts
@@ -24,7 +24,6 @@ export * from './ArrowUpCircle'
export * from './ArrowUpDown'
export * from './ArrowUpInCircle'
export * from './ArrowsLeftRight'
-export * from './BadgeDollar'
export * from './Bank'
export * from './Bell'
export * from './BellOn'
@@ -39,7 +38,6 @@ export * from './CameraScan'
export * from './CameraScanAlt'
export * from './Chart'
export * from './ChartBar'
-export * from './ChartBarAxis'
export * from './ChartPie'
export * from './ChartPyramid'
export * from './Check'
@@ -124,7 +122,6 @@ export * from './LoadingPriceCurve'
export * from './LoadingSpinnerInner'
export * from './LoadingSpinnerOuter'
export * from './Lock'
-export * from './LockedDocument'
export * from './MagicWand'
export * from './Map'
export * from './Masonry'
@@ -137,7 +134,6 @@ export * from './MoneyBillSend'
export * from './Moon'
export * from './More'
export * from './MoreHorizontal'
-export * from './MultiDevice'
export * from './NoNfts'
export * from './NoPools'
export * from './NoTokens'
@@ -147,8 +143,6 @@ export * from './OrderRouting'
export * from './Page'
export * from './PaperStack'
export * from './PapersText'
-export * from './Passkey'
-export * from './PasskeyFingerprint'
export * from './Paste'
export * from './Pen'
export * from './PenLine'
@@ -229,7 +223,6 @@ export * from './TrendDown'
export * from './TrendUp'
export * from './UniswapLogo'
export * from './UniswapX'
-export * from './UniswapXUncolored'
export * from './UserSquare'
export * from './Verified'
export * from './Wallet'
diff --git a/packages/ui/src/components/swipeablecards/BaseSwipeableCardStack.tsx b/packages/ui/src/components/swipeablecards/BaseSwipeableCardStack.tsx
index 9a6cb62c79e..6bce2585f64 100644
--- a/packages/ui/src/components/swipeablecards/BaseSwipeableCardStack.tsx
+++ b/packages/ui/src/components/swipeablecards/BaseSwipeableCardStack.tsx
@@ -37,10 +37,13 @@ export function BaseSwipeableCardStack({
[activeIndex, cards, keyExtractor, onSwiped],
)
- const handleLayout = useCallback(({ height, yOffset }: { height: number; yOffset: number }) => {
- setContainerHeight((prev) => Math.max(prev, height + yOffset))
- setCardHeight((prev) => Math.max(prev, height))
- }, [])
+ const handleLayout = useCallback(
+ ({ height, yOffset }: { height: number; yOffset: number }) => {
+ setContainerHeight(Math.max(containerHeight, height + yOffset))
+ setCardHeight(Math.max(cardHeight, height))
+ },
+ [cardHeight, containerHeight],
+ )
return (
diff --git a/packages/ui/src/loading/Shine.native.mock.tsx b/packages/ui/src/loading/Shine.native.mock.tsx
new file mode 100644
index 00000000000..2270d53e50e
--- /dev/null
+++ b/packages/ui/src/loading/Shine.native.mock.tsx
@@ -0,0 +1,9 @@
+import { ShineProps } from 'ui/src/loading/ShineProps'
+
+/**
+ * Replaces Shine component during e2e testing because expo LinearGradient
+ * is currently not supported by detox.
+ */
+export function Shine({ children }: ShineProps): JSX.Element {
+ return children
+}
diff --git a/packages/ui/src/theme/color/colors.ts b/packages/ui/src/theme/color/colors.ts
index 3512159ffed..94a2d79656c 100644
--- a/packages/ui/src/theme/color/colors.ts
+++ b/packages/ui/src/theme/color/colors.ts
@@ -314,7 +314,6 @@ export const colorsLight = {
DEP_fiatBanner: colors.fiatOnRampBanner,
chain_1: sporeLight.neutral1,
- chain_130: networkColors.unichain.light,
chain_10: networkColors.optimism.light,
chain_137: networkColors.polygon.light,
chain_42161: networkColors.arbitrum.light,
@@ -331,7 +330,7 @@ export const colorsLight = {
// Testnets
chain_11155111: networkColors.ethereum.light,
chain_1301: networkColors.unichain.light,
- chain_10143: networkColors.monad.light,
+ chain_41454: networkColors.monad.light,
pinkThemed: colors.pinkLight,
}
@@ -401,7 +400,6 @@ export const colorsDark = {
DEP_fiatBanner: colors.fiatOnRampBanner,
chain_1: sporeDark.neutral1,
- chain_130: networkColors.unichain.dark,
chain_10: networkColors.optimism.dark,
chain_137: networkColors.polygon.dark,
chain_42161: networkColors.arbitrum.dark,
@@ -418,7 +416,7 @@ export const colorsDark = {
// Testnets
chain_11155111: networkColors.ethereum.dark,
chain_1301: networkColors.unichain.dark,
- chain_10143: networkColors.monad.dark,
+ chain_41454: networkColors.monad.dark,
pinkThemed: colors.pinkDark,
}
diff --git a/packages/uniswap/package.json b/packages/uniswap/package.json
index c3d3dfb7191..226355e0401 100644
--- a/packages/uniswap/package.json
+++ b/packages/uniswap/package.json
@@ -36,26 +36,22 @@
"@gorhom/bottom-sheet": "4.5.1",
"@react-native-async-storage/async-storage": "1.17.10",
"@reduxjs/toolkit": "1.9.3",
- "@simplewebauthn/browser": "11.0.0",
- "@simplewebauthn/types": "11.0.0",
"@tanstack/query-async-storage-persister": "5.51.21",
"@tanstack/react-query": "5.51.16",
"@tanstack/react-query-persist-client": "5.51.23",
"@typechain/ethers-v5": "7.2.0",
"@uniswap/analytics-events": "2.40.0",
- "@uniswap/client-embeddedwallet": "0.0.13",
- "@uniswap/client-explore": "0.0.14",
+ "@uniswap/client-explore": "0.0.12",
"@uniswap/client-pools": "0.0.12",
"@uniswap/permit2-sdk": "1.3.0",
- "@uniswap/router-sdk": "1.18.0",
- "@uniswap/sdk-core": "7.1.0",
+ "@uniswap/router-sdk": "1.15.0",
+ "@uniswap/sdk-core": "6.1.0",
"@uniswap/uniswapx-sdk": "3.0.0-beta.1",
- "@uniswap/v2-sdk": "4.9.0",
- "@uniswap/v3-sdk": "3.21.0",
- "@uniswap/v4-sdk": "1.15.0",
+ "@uniswap/v2-sdk": "4.7.0",
+ "@uniswap/v3-sdk": "3.19.0",
+ "@uniswap/v4-sdk": "1.12.0",
"apollo-link-rest": "0.9.0",
"axios": "1.6.5",
- "date-fns": "2.30.0",
"dayjs": "1.11.7",
"es-toolkit": "1.10.0",
"ethers": "5.7.2",
diff --git a/packages/uniswap/src/assets/chainLogos.tsx b/packages/uniswap/src/assets/chainLogos.tsx
new file mode 100644
index 00000000000..a19dfd2c885
--- /dev/null
+++ b/packages/uniswap/src/assets/chainLogos.tsx
@@ -0,0 +1,104 @@
+import { BlockExplorer } from 'ui/src/components/icons/BlockExplorer'
+import { ArbiscanLogoDark } from 'ui/src/components/logos/ArbiscanLogoDark'
+import { ArbiscanLogoLight } from 'ui/src/components/logos/ArbiscanLogoLight'
+import { EtherscanLogoDark } from 'ui/src/components/logos/EtherscanLogoDark'
+import { EtherscanLogoLight } from 'ui/src/components/logos/EtherscanLogoLight'
+import { OpEtherscanLogoDark } from 'ui/src/components/logos/OpEtherscanLogoDark'
+import { OpEtherscanLogoLight } from 'ui/src/components/logos/OpEtherscanLogoLight'
+import { PolygonscanLogoDark } from 'ui/src/components/logos/PolygonscanLogoDark'
+import { PolygonscanLogoLight } from 'ui/src/components/logos/PolygonscanLogoLight'
+import { UniverseChainId, UniverseChainLogoInfo } from 'uniswap/src/features/chains/types'
+
+// Keeping this separate from UNIVERSE_CHAIN_INFO to avoid import issues on extension content script
+export const UNIVERSE_CHAIN_LOGO = {
+ [UniverseChainId.Mainnet]: {
+ explorer: {
+ logoLight: EtherscanLogoLight,
+ logoDark: EtherscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.ArbitrumOne]: {
+ explorer: {
+ logoLight: ArbiscanLogoLight,
+ logoDark: ArbiscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Avalanche]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Base]: {
+ explorer: {
+ logoLight: EtherscanLogoLight,
+ logoDark: EtherscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Blast]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Bnb]: {
+ explorer: {
+ logoLight: EtherscanLogoLight,
+ logoDark: EtherscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Celo]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.MonadTestnet]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Optimism]: {
+ explorer: {
+ logoLight: OpEtherscanLogoLight,
+ logoDark: OpEtherscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Polygon]: {
+ explorer: {
+ logoLight: PolygonscanLogoLight,
+ logoDark: PolygonscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Sepolia]: {
+ explorer: {
+ logoLight: EtherscanLogoLight,
+ logoDark: EtherscanLogoDark,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.UnichainSepolia]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.WorldChain]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Zksync]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+ [UniverseChainId.Zora]: {
+ explorer: {
+ logoLight: BlockExplorer,
+ logoDark: BlockExplorer,
+ },
+ } as const satisfies UniverseChainLogoInfo,
+}
diff --git a/packages/uniswap/src/components/CurrencyInputPanel/AmountInput.tsx b/packages/uniswap/src/components/CurrencyInputPanel/AmountInput.tsx
index 8c3bcd37df3..a1f68eeb951 100644
--- a/packages/uniswap/src/components/CurrencyInputPanel/AmountInput.tsx
+++ b/packages/uniswap/src/components/CurrencyInputPanel/AmountInput.tsx
@@ -7,7 +7,6 @@ import { FiatCurrencyInfo } from 'uniswap/src/features/fiatOnRamp/types'
import { useOnMobileAppState } from 'utilities/src/device/appState'
import { dismissNativeKeyboard } from 'utilities/src/device/keyboard'
import { truncateToMaxDecimals } from 'utilities/src/format/truncateToMaxDecimals'
-import { isMobileWeb } from 'utilities/src/platform'
import noop from 'utilities/src/react/noop'
export const numericInputRegex = RegExp('^\\d*(\\.\\d*)?$') // Matches only numeric values without commas
@@ -60,13 +59,6 @@ export function parseValue({
}): string {
let parsedValue = value?.trim() ?? ''
- // TODO(WEB-6085): remove this temporary fix
- // Temp fix is necessary for mweb because the native decimal separator is determined by the device's language settings (e.g., "." for English),
- // while the native keyboard uses the region settings (e.g., "," in Europe). This mismatch causes inconsistencies in input handling.
- if (isMobileWeb) {
- parsedValue = parsedValue.replace(/,/g, '.')
- }
-
// Replace all non-numeric characters, leaving the decimal and thousand separators.
parsedValue = parsedValue.replace(/[^0-9.,]/g, '')
diff --git a/packages/uniswap/src/components/CurrencyInputPanel/CurrencyInputPanel.tsx b/packages/uniswap/src/components/CurrencyInputPanel/CurrencyInputPanel.tsx
index bf656fe2d01..2379feb99e3 100644
--- a/packages/uniswap/src/components/CurrencyInputPanel/CurrencyInputPanel.tsx
+++ b/packages/uniswap/src/components/CurrencyInputPanel/CurrencyInputPanel.tsx
@@ -25,7 +25,7 @@ import { TransactionType } from 'uniswap/src/features/transactions/types/transac
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
import { CurrencyField } from 'uniswap/src/types/currency'
import { getSymbolDisplayText } from 'uniswap/src/utils/currency'
-import { isE2EMode } from 'utilities/src/environment/constants'
+import { isDetoxBuild } from 'utilities/src/environment/constants'
import { NumberType } from 'utilities/src/format/types'
import { usePrevious } from 'utilities/src/react/hooks'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
@@ -453,8 +453,8 @@ function useRefetchAnimationStyle({
const loadingFlexProgress = useSharedValue(1)
- // disables looping animation during e2e tests which was preventing js thread from idle
- if (!isE2EMode) {
+ // disables looping animation during detox e2e tests which was preventing js thread from idle
+ if (!isDetoxBuild) {
loadingFlexProgress.value = withRepeat(
withSequence(
withTiming(0.4, { duration: 400, easing: Easing.ease }),
diff --git a/packages/uniswap/src/components/InlineWarningCard/InlineWarningCard.tsx b/packages/uniswap/src/components/InlineWarningCard/InlineWarningCard.tsx
index 12ff525265f..0488ca4fab6 100644
--- a/packages/uniswap/src/components/InlineWarningCard/InlineWarningCard.tsx
+++ b/packages/uniswap/src/components/InlineWarningCard/InlineWarningCard.tsx
@@ -4,6 +4,8 @@ import { Flex, InlineCard, LabeledCheckbox, Text } from 'ui/src'
import { InfoCircleFilled } from 'ui/src/components/icons/InfoCircleFilled'
import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types'
import { getWarningIcon, getWarningIconColors } from 'uniswap/src/components/warnings/utils'
+import { FeatureFlags } from 'uniswap/src/features/gating/flags'
+import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import { ElementName } from 'uniswap/src/features/telemetry/constants/trace'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { useTrace } from 'utilities/src/telemetry/trace/TraceContext'
@@ -37,9 +39,10 @@ export function InlineWarningCard({
descriptionTestId,
analyticsProperties,
}: InlineWarningCardProps): JSX.Element | null {
+ const tokenProtectionEnabled = useFeatureFlag(FeatureFlags.TokenProtection)
const [checkedFallback, setCheckedFallback] = useState(false)
const { color, textColor, backgroundColor } = getWarningIconColors(severity)
- const WarningIcon = getWarningIcon(severity)
+ const WarningIcon = getWarningIcon(severity, tokenProtectionEnabled)
const shouldShowCtaIcon = !hideCtaIcon && severity !== WarningSeverity.Low && severity !== WarningSeverity.None
const trace = useTrace()
diff --git a/packages/uniswap/src/components/TokenSelector/TokenSelectorList.tsx b/packages/uniswap/src/components/TokenSelector/TokenSelectorList.tsx
index ae51fed689d..fb5c4418032 100644
--- a/packages/uniswap/src/components/TokenSelector/TokenSelectorList.tsx
+++ b/packages/uniswap/src/components/TokenSelector/TokenSelectorList.tsx
@@ -19,8 +19,6 @@ import { useLocalizationContext } from 'uniswap/src/features/language/Localizati
import { useDismissedTokenWarnings } from 'uniswap/src/features/tokens/slice/hooks'
import { CurrencyId } from 'uniswap/src/types/currency'
import { NumberType } from 'utilities/src/format/types'
-import { DDRumManualTiming } from 'utilities/src/logger/datadogEvents'
-import { usePerformanceLogger } from 'utilities/src/logger/usePerformanceLogger'
function isHorizontalListTokenItem(data: TokenOption | TokenOption[]): data is TokenOption[] {
return Array.isArray(data)
@@ -119,9 +117,6 @@ function _TokenSelectorList({
const { t } = useTranslation()
const sectionListRef = useRef()
const [expandedItems, setExpandedItems] = useState([])
-
- usePerformanceLogger(DDRumManualTiming.TokenSelectorListRender, [chainFilter])
-
useEffect(() => {
if (sections?.length) {
sectionListRef.current?.scrollToLocation({
diff --git a/packages/uniswap/src/components/TokenSelector/hooks.test.ts b/packages/uniswap/src/components/TokenSelector/hooks.test.ts
index 5f696616cd4..972dd7fcb3b 100644
--- a/packages/uniswap/src/components/TokenSelector/hooks.test.ts
+++ b/packages/uniswap/src/components/TokenSelector/hooks.test.ts
@@ -562,16 +562,6 @@ describe(usePortfolioTokenOptions, () => {
})
})
-// for usePopularTokensOptions, dummy placeholder implementation of useTokenRankingsQuery REST hook, which is used only if token_selector_trending_tokens feature flag is enabled
-// Test fails to compile if this is not mocked
-jest.mock('uniswap/src/data/rest/tokenRankings', () => ({
- useTokenRankingsQuery: (): { data: undefined; isLoading: boolean; isError: boolean } => ({
- data: undefined,
- isLoading: true,
- isError: false,
- }),
-}))
-
describe(usePopularTokensOptions, () => {
const topTokens = createArray(3, token)
const tokenBalances = topTokens.map((t) => tokenBalance({ token: t }))
@@ -591,7 +581,7 @@ describe(usePopularTokensOptions, () => {
output: { data: expect.anything(), error: new ApolloError({ errorMessage: 'Test' }) },
},
{
- test: 'returns error if topTokens query fails',
+ test: 'retruns error if topTokens query fails',
input: { topTokens: new Error('Test'), portfolios },
output: { error: new ApolloError({ errorMessage: 'Test' }) },
},
diff --git a/packages/uniswap/src/components/TokenSelector/hooks/usePopularTokensOptions.ts b/packages/uniswap/src/components/TokenSelector/hooks/usePopularTokensOptions.ts
index cb51ad26559..7833ef9f724 100644
--- a/packages/uniswap/src/components/TokenSelector/hooks/usePopularTokensOptions.ts
+++ b/packages/uniswap/src/components/TokenSelector/hooks/usePopularTokensOptions.ts
@@ -1,23 +1,15 @@
import { useCallback } from 'react'
import { useCurrencyInfosToTokenOptions } from 'uniswap/src/components/TokenSelector/hooks/useCurrencyInfosToTokenOptions'
import { usePortfolioBalancesForAddressById } from 'uniswap/src/components/TokenSelector/hooks/usePortfolioBalancesForAddressById'
-import { useTrendingTokensCurrencyInfos } from 'uniswap/src/components/TokenSelector/hooks/useTrendingTokensCurrencyInfos'
import { TokenOption } from 'uniswap/src/components/TokenSelector/types'
import { GqlResult } from 'uniswap/src/data/types'
-import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { usePopularTokens as usePopularTokensGql } from 'uniswap/src/features/dataApi/topTokens'
-import { FeatureFlags } from 'uniswap/src/features/gating/flags'
-import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
-// TODO(WEB-5917): Rename to useTrendingTokensOptions once feature flag is fully on
export function usePopularTokensOptions(
address: Address | undefined,
- chainFilter: Maybe,
+ chainFilter: UniverseChainId,
): GqlResult {
- const isTokenSelectorTrendingTokensEnabled = useFeatureFlag(FeatureFlags.TokenSelectorTrendingTokens)
- const { defaultChainId } = useEnabledChains()
-
const {
data: portfolioBalancesById,
error: portfolioBalancesByIdError,
@@ -26,42 +18,29 @@ export function usePopularTokensOptions(
} = usePortfolioBalancesForAddressById(address)
const {
- data: trendingTokensRest,
- error: trendingTokensRestError,
- refetch: refetchTrendingTokensRest,
- loading: loadingTrendingTokensRest,
- } = useTrendingTokensCurrencyInfos(chainFilter)
-
- const {
- data: popularTokensGql,
- error: popularTokensGqlError,
- refetch: refetchPopularTokensGql,
- loading: loadingPopularTokensGql,
- // if there is no chain filter then we show default chain tokens
- } = usePopularTokensGql(chainFilter ?? defaultChainId, isTokenSelectorTrendingTokensEnabled)
-
- const tokens = isTokenSelectorTrendingTokensEnabled ? trendingTokensRest : popularTokensGql
- const tokensError = isTokenSelectorTrendingTokensEnabled ? trendingTokensRestError : popularTokensGqlError
- const refetchTokens = isTokenSelectorTrendingTokensEnabled ? refetchTrendingTokensRest : refetchPopularTokensGql
- const loadingTokens = isTokenSelectorTrendingTokensEnabled ? loadingTrendingTokensRest : loadingPopularTokensGql
-
- const tokenOptions = useCurrencyInfosToTokenOptions({
- currencyInfos: tokens,
+ data: popularTokens,
+ error: popularTokensError,
+ refetch: refetchPopularTokens,
+ loading: loadingPopularTokens,
+ } = usePopularTokensGql(chainFilter)
+
+ const popularTokenOptions = useCurrencyInfosToTokenOptions({
+ currencyInfos: popularTokens,
portfolioBalancesById,
- sortAlphabetically: !isTokenSelectorTrendingTokensEnabled,
+ sortAlphabetically: true,
})
const refetch = useCallback(() => {
portfolioBalancesByIdRefetch?.()
- refetchTokens?.()
- }, [portfolioBalancesByIdRefetch, refetchTokens])
+ refetchPopularTokens?.()
+ }, [portfolioBalancesByIdRefetch, refetchPopularTokens])
- const error = (!portfolioBalancesById && portfolioBalancesByIdError) || (!tokenOptions && tokensError)
+ const error = (!portfolioBalancesById && portfolioBalancesByIdError) || (!popularTokenOptions && popularTokensError)
return {
- data: tokenOptions,
+ data: popularTokenOptions,
refetch,
error: error || undefined,
- loading: loadingPorfolioBalancesById || loadingTokens,
+ loading: loadingPorfolioBalancesById || loadingPopularTokens,
}
}
diff --git a/packages/uniswap/src/components/TokenSelector/hooks/useTrendingTokensCurrencyInfos.ts b/packages/uniswap/src/components/TokenSelector/hooks/useTrendingTokensCurrencyInfos.ts
deleted file mode 100644
index 9d37bd7932a..00000000000
--- a/packages/uniswap/src/components/TokenSelector/hooks/useTrendingTokensCurrencyInfos.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useMemo } from 'react'
-import { ALL_NETWORKS_ARG } from 'uniswap/src/data/rest/base'
-import { tokenRankingsStatToCurrencyInfo, useTokenRankingsQuery } from 'uniswap/src/data/rest/tokenRankings'
-import { CustomRankingType } from 'uniswap/src/data/types'
-import { UniverseChainId } from 'uniswap/src/features/chains/types'
-import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
-import { FeatureFlags } from 'uniswap/src/features/gating/flags'
-import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
-
-export function useTrendingTokensCurrencyInfos(chainFilter: Maybe): {
- data: CurrencyInfo[]
- error: Error
- refetch: () => void
- loading: boolean
-} {
- const isTokenSelectorTrendingTokensEnabled = useFeatureFlag(FeatureFlags.TokenSelectorTrendingTokens)
-
- const { data, isLoading, error, refetch, isFetching } = useTokenRankingsQuery(
- {
- chainId: chainFilter?.toString() ?? ALL_NETWORKS_ARG,
- },
- isTokenSelectorTrendingTokensEnabled,
- )
-
- const trendingTokens = data?.tokenRankings?.[CustomRankingType.Trending]?.tokens
- const formattedTokens = useMemo(
- () => trendingTokens?.map(tokenRankingsStatToCurrencyInfo).filter((t): t is CurrencyInfo => Boolean(t)) ?? [],
- [trendingTokens],
- )
-
- return { data: formattedTokens, loading: isLoading || isFetching, error: new Error(error?.message), refetch }
-}
diff --git a/packages/uniswap/src/components/TokenSelector/items/TokenOptionItem.tsx b/packages/uniswap/src/components/TokenSelector/items/TokenOptionItem.tsx
index c22b1b2e2f1..4c6a75dcc68 100644
--- a/packages/uniswap/src/components/TokenSelector/items/TokenOptionItem.tsx
+++ b/packages/uniswap/src/components/TokenSelector/items/TokenOptionItem.tsx
@@ -1,6 +1,6 @@
import React, { useCallback, useState } from 'react'
-import { Flex, Text, TouchableArea, useSporeColors } from 'ui/src'
-import Check from 'ui/src/assets/icons/check.svg'
+import { Flex, Text, TouchableArea } from 'ui/src'
+import { Check } from 'ui/src/components/icons/Check'
import { iconSizes } from 'ui/src/theme'
import { TokenLogo } from 'uniswap/src/components/CurrencyLogo/TokenLogo'
import { TokenOption } from 'uniswap/src/components/TokenSelector/types'
@@ -8,6 +8,9 @@ import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/type
import WarningIcon from 'uniswap/src/components/warnings/WarningIcon'
import { getWarningIconColors } from 'uniswap/src/components/warnings/utils'
import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
+import { CurrencyInfo, TokenList } from 'uniswap/src/features/dataApi/types'
+import { FeatureFlags } from 'uniswap/src/features/gating/flags'
+import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import TokenWarningModal from 'uniswap/src/features/tokens/TokenWarningModal'
import { getTokenWarningSeverity } from 'uniswap/src/features/tokens/safetyUtils'
import { getSymbolDisplayText } from 'uniswap/src/utils/currency'
@@ -31,6 +34,25 @@ interface OptionProps {
isSelected?: boolean
}
+function getTokenWarningDetails(currencyInfo: CurrencyInfo): {
+ severity: WarningSeverity
+ isNonDefaultList: boolean
+ isBlocked: boolean
+} {
+ const { safetyLevel, safetyInfo } = currencyInfo
+ const severity = getTokenWarningSeverity(currencyInfo)
+ const isNonDefaultList =
+ safetyLevel === SafetyLevel.MediumWarning ||
+ safetyLevel === SafetyLevel.StrongWarning ||
+ safetyInfo?.tokenList === TokenList.NonDefault
+ const isBlocked = severity === WarningSeverity.Blocked || safetyLevel === SafetyLevel.Blocked
+ return {
+ severity,
+ isNonDefaultList,
+ isBlocked,
+ }
+}
+
function _TokenOptionItem({
option,
showWarnings,
@@ -44,15 +66,16 @@ function _TokenOptionItem({
isSelected,
}: OptionProps): JSX.Element {
const { currencyInfo, isUnsupported } = option
- const { currency, safetyLevel } = currencyInfo
+ const { currency } = currencyInfo
const [showWarningModal, setShowWarningModal] = useState(false)
- const colors = useSporeColors()
+ const tokenProtectionEnabled = useFeatureFlag(FeatureFlags.TokenProtection)
- const severity = getTokenWarningSeverity(currencyInfo)
- const isBlocked = severity === WarningSeverity.Blocked || safetyLevel === SafetyLevel.Blocked
+ const { severity, isBlocked, isNonDefaultList } = getTokenWarningDetails(currencyInfo)
// in token selector, we only show the warning icon if token is >=Medium severity
const { colorSecondary: warningIconColor } = getWarningIconColors(severity)
- const shouldShowWarningModalOnPress = isBlocked || (severity !== WarningSeverity.None && !tokenWarningDismissed)
+ const shouldShowWarningModalOnPress = !tokenProtectionEnabled
+ ? isBlocked || (isNonDefaultList && !tokenWarningDismissed)
+ : isBlocked || (severity !== WarningSeverity.None && !tokenWarningDismissed)
const handleShowWarningModal = useCallback((): void => {
dismissNativeKeyboard()
@@ -137,7 +160,7 @@ function _TokenOptionItem({
{isSelected && (
-
+
)}
diff --git a/packages/uniswap/src/components/TokenSelector/items/TokenSectionHeader.tsx b/packages/uniswap/src/components/TokenSelector/items/TokenSectionHeader.tsx
index a1030f59b82..49387adc44a 100644
--- a/packages/uniswap/src/components/TokenSelector/items/TokenSectionHeader.tsx
+++ b/packages/uniswap/src/components/TokenSelector/items/TokenSectionHeader.tsx
@@ -8,8 +8,6 @@ import { Search } from 'ui/src/components/icons/Search'
import { Shuffle } from 'ui/src/components/icons/Shuffle'
import { Star } from 'ui/src/components/icons/Star'
import { TokenOptionSection } from 'uniswap/src/components/TokenSelector/types'
-import { FeatureFlags } from 'uniswap/src/features/gating/flags'
-import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
export type TokenSectionHeaderProps = {
sectionKey: TokenOptionSection
@@ -49,15 +47,13 @@ export const SectionHeader = memo(function _SectionHeader({
export function useTokenOptionsSectionTitle(section: TokenOptionSection): string {
const { t } = useTranslation()
- const isTokenSelectorTrendingTokensEnabled = useFeatureFlag(FeatureFlags.TokenSelectorTrendingTokens)
-
switch (section) {
case TokenOptionSection.BridgingTokens:
return t('tokens.selector.section.bridging')
case TokenOptionSection.YourTokens:
return t('tokens.selector.section.yours')
- case TokenOptionSection.PopularTokens: // TODO(WEB-5917): Rename section to TrendingTokens once feature flag is fully on
- return isTokenSelectorTrendingTokensEnabled ? t('tokens.selector.section.trending') : t('common.tokens')
+ case TokenOptionSection.PopularTokens:
+ return t('common.tokens')
case TokenOptionSection.RecentTokens:
return t('tokens.selector.section.recent')
case TokenOptionSection.FavoriteTokens:
diff --git a/packages/uniswap/src/components/TokenSelector/lists/TokenSelectorSendList.tsx b/packages/uniswap/src/components/TokenSelector/lists/TokenSelectorSendList.tsx
index 036863bc69c..5f8cb6fbf40 100644
--- a/packages/uniswap/src/components/TokenSelector/lists/TokenSelectorSendList.tsx
+++ b/packages/uniswap/src/components/TokenSelector/lists/TokenSelectorSendList.tsx
@@ -87,7 +87,6 @@ function _TokenSelectorSendList({
return (
{
- const isTokenSelectorTrendingTokensEnabled = useFeatureFlag(FeatureFlags.TokenSelectorTrendingTokens)
const { defaultChainId, isTestnetModeEnabled } = useEnabledChains()
const {
data: portfolioTokenOptions,
@@ -41,7 +38,8 @@ function useTokenSectionsForSwapInput({
error: popularTokenOptionsError,
refetch: refetchPopularTokenOptions,
loading: popularTokenOptionsLoading,
- } = usePopularTokensOptions(activeAccountAddress, chainFilter)
+ // if there is no chain filter then we show default chain tokens
+ } = usePopularTokensOptions(activeAccountAddress, chainFilter ?? defaultChainId)
const {
data: favoriteTokenOptions,
@@ -91,9 +89,8 @@ function useTokenSectionsForSwapInput({
})
const popularMinusPortfolioTokens = tokenOptionDifference(popularTokenOptions, portfolioTokenOptions)
const popularSection = useTokenOptionsSection({
- // TODO(WEB-5917): Rename to trendingTokens once feature flag is fully on
sectionKey: TokenOptionSection.PopularTokens,
- tokenOptions: isTokenSelectorTrendingTokensEnabled ? popularTokenOptions : popularMinusPortfolioTokens,
+ tokenOptions: popularMinusPortfolioTokens,
})
const sections = useMemo(() => {
@@ -155,7 +152,6 @@ function _TokenSelectorSwapInputList({
return (
{
- const isTokenSelectorTrendingTokensEnabled = useFeatureFlag(FeatureFlags.TokenSelectorTrendingTokens)
const { defaultChainId, isTestnetModeEnabled } = useEnabledChains()
const {
@@ -45,7 +44,8 @@ function useTokenSectionsForSwapOutput({
error: popularTokenOptionsError,
refetch: refetchPopularTokenOptions,
loading: popularTokenOptionsLoading,
- } = usePopularTokensOptions(activeAccountAddress, chainFilter)
+ // if there is no chain filter then we show mainnet tokens
+ } = usePopularTokensOptions(activeAccountAddress, chainFilter ?? defaultChainId)
const {
data: favoriteTokenOptions,
@@ -100,6 +100,19 @@ function useTokenSectionsForSwapOutput({
refetchAllRef.current()
}, [])
+ const newTag = useMemo(
+ () =>
+ isMobileApp ? (
+ // Hack for vertically centering the new tag with text
+
+
+
+ ) : (
+
+ ),
+ [],
+ )
+
// we draw the Suggested pills as a single item of a section list, so `data` is TokenOption[][]
const suggestedSectionOptions = useMemo(() => [commonTokenOptions ?? []], [commonTokenOptions])
@@ -126,9 +139,8 @@ function useTokenSectionsForSwapOutput({
[popularTokenOptions, portfolioTokenOptions],
)
const popularSection = useTokenOptionsSection({
- // TODO(WEB-5917): Rename to trendingTokens once feature flag is fully on
sectionKey: TokenOptionSection.PopularTokens,
- tokenOptions: isTokenSelectorTrendingTokensEnabled ? popularTokenOptions : popularMinusPortfolioTokens,
+ tokenOptions: popularMinusPortfolioTokens,
})
const bridgingSectionTokenOptions = useMemo(
@@ -138,6 +150,7 @@ function useTokenSectionsForSwapOutput({
const bridgingSection = useTokenOptionsSection({
sectionKey: TokenOptionSection.BridgingTokens,
tokenOptions: bridgingSectionTokenOptions,
+ rightElement: newTag,
})
const sections = useMemo(() => {
@@ -203,7 +216,6 @@ function _TokenSelectorSwapOutputList({
})
return (
setIsSheetReady(true), IS_SHEET_READY_DELAY)
}
diff --git a/packages/uniswap/src/components/tooltip/InfoTooltip.web.tsx b/packages/uniswap/src/components/tooltip/InfoTooltip.web.tsx
index ff45ffc61bd..df90032b32f 100644
--- a/packages/uniswap/src/components/tooltip/InfoTooltip.web.tsx
+++ b/packages/uniswap/src/components/tooltip/InfoTooltip.web.tsx
@@ -27,29 +27,27 @@ export function InfoTooltip({
restMs={TOOLTIP_REST_MS}
>
{trigger}
- {text && (
-
-
- {icon}
-
- {title && (
-
- {title}
-
- )}
-
- {text}
+
+
+ {icon}
+
+ {title && (
+
+ {title}
- {button && (
-
- {button}
-
- )}
-
+ )}
+
+ {text}
+
+ {button && (
+
+ {button}
+
+ )}
-
-
- )}
+
+
+
{triggerPlacement === 'start' && children}
diff --git a/packages/uniswap/src/components/unichain/UnichainIntroModal.tsx b/packages/uniswap/src/components/unichain/UnichainIntroModal.tsx
deleted file mode 100644
index 90263bcab4d..00000000000
--- a/packages/uniswap/src/components/unichain/UnichainIntroModal.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useDispatch } from 'react-redux'
-import { DeprecatedButton, Flex, GeneratedIcon, Image, Text, TouchableArea } from 'ui/src'
-import { UNICHAIN_PROMO_MODAL_GIF } from 'ui/src/assets'
-import { BadgeDollar } from 'ui/src/components/icons/BadgeDollar'
-import { ChartBarAxis } from 'ui/src/components/icons/ChartBarAxis'
-import { UniswapXUncolored } from 'ui/src/components/icons/UniswapXUncolored'
-import { X } from 'ui/src/components/icons/X'
-import { Modal } from 'uniswap/src/components/modals/Modal'
-import { setHasDismissedUnichainColdBanner } from 'uniswap/src/features/behaviorHistory/slice'
-import { ModalName } from 'uniswap/src/features/telemetry/constants'
-import { isExtension, isInterface, isMobileApp, isMobileWeb } from 'utilities/src/platform'
-
-export function UnichainIntroModal({
- onClose,
- openSwapFlow,
-}: {
- onClose: () => void
- openSwapFlow: () => void
-}): JSX.Element {
- const { t } = useTranslation()
- const dispatch = useDispatch()
-
- const onPressGetStarted = useMemo(() => {
- return () => {
- openSwapFlow()
- onClose()
- dispatch(setHasDismissedUnichainColdBanner(true))
- }
- }, [openSwapFlow, onClose, dispatch])
-
- const assetSize = isInterface && !isMobileWeb ? 300 : 200
- const isWebNonMobile = isExtension || (isInterface && !isMobileWeb)
-
- return (
-
- {isWebNonMobile && (
-
-
-
- )}
-
-
-
-
- {t('unichain.promotion.cold.title')}
-
-
- {t('unichain.promotion.modal.description')}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {t('common.getStarted')}
-
-
-
- )
-}
-
-function DetailRow({ Icon, text }: { Icon: GeneratedIcon; text: string }): JSX.Element {
- return (
-
-
-
- {text}
-
-
- )
-}
diff --git a/packages/uniswap/src/components/warnings/WarningIcon.tsx b/packages/uniswap/src/components/warnings/WarningIcon.tsx
index 2a380539e46..5a0483243ee 100644
--- a/packages/uniswap/src/components/warnings/WarningIcon.tsx
+++ b/packages/uniswap/src/components/warnings/WarningIcon.tsx
@@ -6,6 +6,8 @@ import {
safetyLevelToWarningSeverity,
} from 'uniswap/src/components/warnings/utils'
import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
+import { FeatureFlags } from 'uniswap/src/features/gating/flags'
+import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
interface Props {
// TODO (WALL-4626): remove SafetyLevel entirely
@@ -24,10 +26,11 @@ export default function WarningIcon({
heroIcon,
...rest
}: Props & IconProps): JSX.Element | null {
+ const tokenProtectionEnabled = useFeatureFlag(FeatureFlags.TokenProtection)
const severityToUse = severity ?? safetyLevelToWarningSeverity(safetyLevel)
const { color: defaultIconColor, backgroundColor } = getWarningIconColors(severityToUse)
const color = strokeColorOverride ?? defaultIconColor
- const Icon = getWarningIcon(severityToUse)
+ const Icon = getWarningIcon(severityToUse, tokenProtectionEnabled)
const icon = Icon ? : null
return heroIcon ? (
diff --git a/packages/uniswap/src/components/warnings/utils.ts b/packages/uniswap/src/components/warnings/utils.ts
index 19ec56f1773..da977f2ae04 100644
--- a/packages/uniswap/src/components/warnings/utils.ts
+++ b/packages/uniswap/src/components/warnings/utils.ts
@@ -21,10 +21,14 @@ export function safetyLevelToWarningSeverity(safetyLevel: Maybe): W
}
}
-export function getWarningIcon(severity: WarningSeverity): GeneratedIcon | null {
+// eslint-disable-next-line consistent-return
+export function getWarningIcon(
+ severity: WarningSeverity,
+ tokenProtectionEnabled: boolean = false,
+): GeneratedIcon | null {
switch (severity) {
case WarningSeverity.High:
- return OctagonExclamation
+ return tokenProtectionEnabled ? OctagonExclamation : AlertTriangleFilled
case WarningSeverity.Medium:
return AlertTriangleFilled
case WarningSeverity.Blocked:
@@ -32,7 +36,6 @@ export function getWarningIcon(severity: WarningSeverity): GeneratedIcon | null
case WarningSeverity.Low:
return InfoCircleFilled
case WarningSeverity.None:
- default:
return null
}
}
diff --git a/packages/uniswap/src/config.ts b/packages/uniswap/src/config.ts
index 09a0b39086d..680dd280f41 100644
--- a/packages/uniswap/src/config.ts
+++ b/packages/uniswap/src/config.ts
@@ -15,7 +15,6 @@ import {
OPENAI_API_KEY,
QUICKNODE_ENDPOINT_NAME,
QUICKNODE_ENDPOINT_TOKEN,
- QUICKNODE_MONAD_TESTNET_RPC_URL,
SCANTASTIC_API_URL_OVERRIDE,
SENTRY_DSN,
SIMPLEHASH_API_KEY,
@@ -55,7 +54,6 @@ export interface Config {
openaiApiKey: string
quicknodeEndpointName: string
quicknodeEndpointToken: string
- quicknodeMonadTestnetRpcUrl: string
scantasticApiUrlOverride: string
sentryDsn: string
simpleHashApiKey: string
@@ -96,10 +94,6 @@ const _config: Config = {
process.env.REACT_APP_QUICKNODE_ENDPOINT_NAME || process.env.QUICKNODE_ENDPOINT_NAME || QUICKNODE_ENDPOINT_NAME,
quicknodeEndpointToken:
process.env.REACT_APP_QUICKNODE_ENDPOINT_TOKEN || process.env.QUICKNODE_ENDPOINT_TOKEN || QUICKNODE_ENDPOINT_TOKEN,
- quicknodeMonadTestnetRpcUrl:
- process.env.REACT_APP_QUICKNODE_MONAD_TESTNET_RPC_URL ||
- process.env.QUICKNODE_MONAD_TESTNET_RPC_URL ||
- QUICKNODE_MONAD_TESTNET_RPC_URL,
scantasticApiUrlOverride: process.env.SCANTASTIC_API_URL_OVERRIDE || SCANTASTIC_API_URL_OVERRIDE,
sentryDsn: process.env.REACT_APP_SENTRY_DSN || process.env.SENTRY_DSN || SENTRY_DSN,
simpleHashApiKey: process.env.SIMPLEHASH_API_KEY || SIMPLEHASH_API_KEY,
diff --git a/packages/uniswap/src/constants/routing.ts b/packages/uniswap/src/constants/routing.ts
index 6541fc7177d..824805e5790 100644
--- a/packages/uniswap/src/constants/routing.ts
+++ b/packages/uniswap/src/constants/routing.ts
@@ -24,7 +24,6 @@ import {
USDC_OPTIMISM,
USDC_POLYGON,
USDC_SEPOLIA,
- USDC_UNICHAIN,
USDC_WORLD_CHAIN,
USDC_ZKSYNC,
USDC_ZORA,
@@ -138,17 +137,11 @@ export const COMMON_BASES: ChainCurrencyList = {
UNI[UniverseChainId.Sepolia],
].map(buildPartialCurrencyInfo),
- [UniverseChainId.Unichain]: [
- nativeOnChain(UniverseChainId.Unichain),
- WRAPPED_NATIVE_CURRENCY[UniverseChainId.Unichain] as Token,
- USDC_UNICHAIN,
- ].map(buildPartialCurrencyInfo),
-
[UniverseChainId.UnichainSepolia]: [
nativeOnChain(UniverseChainId.UnichainSepolia),
WRAPPED_NATIVE_CURRENCY[UniverseChainId.UnichainSepolia] as Token,
// TODO(WEB-5160): re-add usdc sepolia
- // USDC_UNICHAIN_SEPOLIA,
+ // USDC_ASTROCHAIN_SEPOLIA,
].map(buildPartialCurrencyInfo),
[UniverseChainId.WorldChain]: [
diff --git a/packages/uniswap/src/constants/tokens.ts b/packages/uniswap/src/constants/tokens.ts
index 40d731b9925..20352706110 100644
--- a/packages/uniswap/src/constants/tokens.ts
+++ b/packages/uniswap/src/constants/tokens.ts
@@ -19,14 +19,6 @@ export const USDC_SEPOLIA = new Token(
'USD//C',
)
-export const USDC_UNICHAIN = new Token(
- UniverseChainId.Unichain,
- '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
- 6,
- 'USDC',
- 'USD//C',
-)
-
export const USDC_UNICHAIN_SEPOLIA = new Token(
UniverseChainId.UnichainSepolia,
'0x31d0220469e10c4E71834a79b1f276d740d3768F',
@@ -425,10 +417,10 @@ export const WRAPPED_NATIVE_CURRENCY: { [chainId: number]: Token } = {
),
[UniverseChainId.MonadTestnet]: new Token(
UniverseChainId.MonadTestnet,
- '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701',
+ '0x93EACdB111FF98dE9a8Ac5823d357BBc4842aE63',
18,
'WMON',
- 'Wrapped Monad',
+ 'Wrapped MON',
),
[UniverseChainId.Optimism]: new Token(
UniverseChainId.Optimism,
@@ -451,13 +443,6 @@ export const WRAPPED_NATIVE_CURRENCY: { [chainId: number]: Token } = {
'WETH',
'Wrapped Ether',
),
- [UniverseChainId.Unichain]: new Token(
- UniverseChainId.Unichain,
- '0x4200000000000000000000000000000000000006',
- 18,
- 'WETH',
- 'Wrapped Ether',
- ),
[UniverseChainId.UnichainSepolia]: new Token(
UniverseChainId.UnichainSepolia,
'0x4200000000000000000000000000000000000006',
diff --git a/packages/uniswap/src/constants/urls.ts b/packages/uniswap/src/constants/urls.ts
index a9fc335cf4b..983ea85af5d 100644
--- a/packages/uniswap/src/constants/urls.ts
+++ b/packages/uniswap/src/constants/urls.ts
@@ -63,8 +63,8 @@ export const uniswapUrls = {
unitagClaimPeriod: `${helpUrl}/articles/24009960408589`,
unsupportedTokenPolicy: `${helpUrl}/articles/18783694078989-Unsupported-Token-Policy`,
addingV4Hooks: `${helpUrl}/articles/32402040565133`,
- routingSettings: `${helpUrl}/articles/27362707722637`,
v4HooksInfo: `${helpUrl}/articles/30998263256717`,
+ v4RoutingInfo: `${helpUrl}/articles/32214043316109`,
walletHelp: `${helpUrl}/categories/11301970439565-Uniswap-Wallet`,
walletSecurityMeasures: `${helpUrl}/articles/28278904584077-Uniswap-Wallet-Security-Measures`,
wethExplainer: `${helpUrl}/articles/16015852009997-Why-do-ETH-swaps-involve-converting-to-WETH`,
@@ -91,12 +91,6 @@ export const uniswapUrls = {
forApiUrl: config.forApiUrlOverride || `${getCloudflareApiBaseUrl(TrafficFlows.FOR)}/v2/FOR.v1.FORService`,
tradingApiUrl: config.tradingApiUrlOverride || getCloudflareApiBaseUrl(TrafficFlows.TradingApi),
- // Embedded Wallet URL's
- // Totally fine that these are public
- evervaultDevUrl: 'https://embedded-wallet-dev.app-907329d19a06.enclave.evervault.com',
- evervaultStagingUrl: 'https://embedded-wallet-staging.app-907329d19a06.enclave.evervault.com',
- evervaultProductionUrl: 'https://embedded-wallet.app-907329d19a06.enclave.evervault.com',
-
// API Paths
trmPath: '/v1/screen',
gasServicePath: '/v1/gas-fee',
diff --git a/packages/uniswap/src/constants/web3.ts b/packages/uniswap/src/constants/web3.ts
index 8b79200e922..f8d882e4b44 100644
--- a/packages/uniswap/src/constants/web3.ts
+++ b/packages/uniswap/src/constants/web3.ts
@@ -8,5 +8,4 @@ export const CONNECTION_PROVIDER_IDS = {
METAMASK_RDNS: 'io.metamask',
UNISWAP_EXTENSION_RDNS: 'org.uniswap.app',
SAFE_CONNECTOR_ID: 'safe',
- EMBEDDED_WALLET_CONNECTOR_ID: 'embeddedUniswapWalletConnector',
} as const
diff --git a/packages/uniswap/src/contexts/UniswapContext.tsx b/packages/uniswap/src/contexts/UniswapContext.tsx
index 2cc3723740c..6780480d904 100644
--- a/packages/uniswap/src/contexts/UniswapContext.tsx
+++ b/packages/uniswap/src/contexts/UniswapContext.tsx
@@ -18,8 +18,6 @@ interface UniswapContext {
outputChainId?: UniverseChainId
}) => void
swapInputChainId?: UniverseChainId
- setSwapOutputChainId: (chainId: UniverseChainId) => void
- swapOutputChainId?: UniverseChainId
signer: Signer | undefined
useProviderHook: (chainId: number) => JsonRpcProvider | undefined
// Used for triggering wallet connection on web
@@ -41,11 +39,8 @@ export function UniswapProvider({
signer,
useProviderHook,
onConnectWallet,
-}: PropsWithChildren<
- Omit
->): JSX.Element {
+}: PropsWithChildren>): JSX.Element {
const [swapInputChainId, setSwapInputChainId] = useState()
- const [swapOutputChainId, setSwapOutputChainId] = useState()
const [isSwapTokenSelectorOpen, setIsSwapTokenSelectorOpen] = useState(false)
const value: UniswapContext = useMemo(
@@ -64,15 +59,12 @@ export function UniswapProvider({
}): void => {
onSwapChainsChanged({ chainId, prevChainId, outputChainId })
setSwapInputChainId(chainId)
- setSwapOutputChainId(outputChainId)
},
signer,
useProviderHook,
navigateToFiatOnRamp,
onConnectWallet,
swapInputChainId,
- swapOutputChainId,
- setSwapOutputChainId,
isSwapTokenSelectorOpen,
setIsSwapTokenSelectorOpen: (open: boolean) => setIsSwapTokenSelectorOpen(open),
}),
@@ -85,7 +77,6 @@ export function UniswapProvider({
navigateToFiatOnRamp,
onConnectWallet,
swapInputChainId,
- swapOutputChainId,
onSwapChainsChanged,
isSwapTokenSelectorOpen,
setIsSwapTokenSelectorOpen,
diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts
index 6eab5e81736..d3e695be6a6 100644
--- a/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts
+++ b/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts
@@ -1,4 +1,4 @@
-import { UseQueryResult, useQuery } from '@tanstack/react-query'
+import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { TRADING_API_CACHE_KEY, checkLpApproval } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { UseQueryApiHelperHookArgs } from 'uniswap/src/data/apiClients/types'
@@ -15,12 +15,9 @@ export function useCheckLpApprovalQuery({
return useQuery({
queryKey,
- queryFn: async () => {
- if (!params) {
- throw { name: 'Params are required' }
- }
- return await checkLpApproval(params, headers)
- },
+ queryFn: params
+ ? async (): ReturnType => await checkLpApproval(params, headers)
+ : skipToken,
...rest,
})
}
diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts
index bc5db98e928..692ecb1c437 100644
--- a/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts
+++ b/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts
@@ -1,4 +1,4 @@
-import { UseQueryResult, useQuery } from '@tanstack/react-query'
+import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { TRADING_API_CACHE_KEY, claimLpFees } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { UseQueryApiHelperHookArgs } from 'uniswap/src/data/apiClients/types'
@@ -12,12 +12,7 @@ export function useClaimLpFeesCalldataQuery({
return useQuery({
queryKey,
- queryFn: async () => {
- if (!params) {
- throw { name: 'Params are required' }
- }
- return await claimLpFees(params)
- },
+ queryFn: params ? async (): ReturnType => await claimLpFees(params) : skipToken,
...rest,
})
}
diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts
index 131f08fe587..aba4bea44f3 100644
--- a/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts
+++ b/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts
@@ -1,4 +1,4 @@
-import { UseQueryResult, useQuery } from '@tanstack/react-query'
+import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { TRADING_API_CACHE_KEY, createLpPosition } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { getTradeSettingsDeadline } from 'uniswap/src/data/apiClients/tradingApi/utils/getTradeSettingsDeadline'
@@ -13,17 +13,15 @@ export function useCreateLpPositionCalldataQuery({
deadlineInMinutes: number | undefined
}): UseQueryResult {
const queryKey = [TRADING_API_CACHE_KEY, uniswapUrls.tradingApiPaths.createLp, params]
+
const deadline = getTradeSettingsDeadline(deadlineInMinutes)
- const paramsWithDeadline = { ...params, deadline }
+ const paramsWithDeadline = { ...params, deadline }
return useQuery({
queryKey,
- queryFn: async () => {
- if (!params) {
- throw { name: 'Params are required' }
- }
- return await createLpPosition(paramsWithDeadline)
- },
+ queryFn: params
+ ? async (): ReturnType => await createLpPosition(paramsWithDeadline)
+ : skipToken,
...rest,
})
}
diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts
index 2989846b8a9..440e230631f 100644
--- a/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts
+++ b/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts
@@ -1,4 +1,4 @@
-import { UseQueryResult, useQuery } from '@tanstack/react-query'
+import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { TRADING_API_CACHE_KEY, decreaseLpPosition } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { getTradeSettingsDeadline } from 'uniswap/src/data/apiClients/tradingApi/utils/getTradeSettingsDeadline'
@@ -19,12 +19,9 @@ export function useDecreaseLpPositionCalldataQuery({
return useQuery({
queryKey,
- queryFn: async () => {
- if (!params) {
- throw { name: 'Params are required' }
- }
- return await decreaseLpPosition(paramsWithDeadline)
- },
+ queryFn: params
+ ? async (): ReturnType => await decreaseLpPosition(paramsWithDeadline)
+ : skipToken,
...rest,
})
}
diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts
index bcc7c29449f..2ee3cb3253b 100644
--- a/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts
+++ b/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts
@@ -1,4 +1,4 @@
-import { UseQueryResult, useQuery } from '@tanstack/react-query'
+import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { TRADING_API_CACHE_KEY, increaseLpPosition } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { getTradeSettingsDeadline } from 'uniswap/src/data/apiClients/tradingApi/utils/getTradeSettingsDeadline'
@@ -19,12 +19,9 @@ export function useIncreaseLpPositionCalldataQuery({
const paramsWithDeadline = { ...params, deadline }
return useQuery({
queryKey,
- queryFn: async () => {
- if (!params) {
- throw { name: 'Params are required' }
- }
- return await increaseLpPosition(paramsWithDeadline)
- },
+ queryFn: params
+ ? async (): ReturnType => await increaseLpPosition(paramsWithDeadline)
+ : skipToken,
...rest,
})
}
diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts
index 4e5f857c50f..095ecf6bea7 100644
--- a/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts
+++ b/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts
@@ -1,4 +1,4 @@
-import { UseQueryResult, useQuery } from '@tanstack/react-query'
+import { UseQueryResult, skipToken, useQuery } from '@tanstack/react-query'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { TRADING_API_CACHE_KEY, migrateLpPosition } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { UseQueryApiHelperHookArgs } from 'uniswap/src/data/apiClients/types'
@@ -15,12 +15,7 @@ export function useMigrateV3LpPositionCalldataQuery({
return useQuery({
queryKey,
- queryFn: async () => {
- if (!params) {
- throw { name: 'Params are required' }
- }
- return await migrateLpPosition(params)
- },
+ queryFn: params ? async (): ReturnType => await migrateLpPosition(params) : skipToken,
...rest,
})
}
diff --git a/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql b/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql
index cc874ed9e12..16070d11c0a 100644
--- a/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql
+++ b/packages/uniswap/src/data/graphql/uniswap-data-api/queries.graphql
@@ -483,7 +483,6 @@ query TokenProjectDescription(
$includeFrench: Boolean = false
$includeJapanese: Boolean = false
$includePortuguese: Boolean = false
- $includeVietnamese: Boolean = false
$includeChineseSimplified: Boolean = false
$includeChineseTraditional: Boolean = false
) {
@@ -498,7 +497,6 @@ query TokenProjectDescription(
descriptionFrFr @include(if: $includeFrench)
descriptionJaJp @include(if: $includeJapanese)
descriptionPtPt @include(if: $includePortuguese)
- descriptionViVn @include(if: $includeVietnamese)
descriptionZhHans @include(if: $includeChineseSimplified)
descriptionZhHant @include(if: $includeChineseTraditional)
}
@@ -941,9 +939,6 @@ fragment TokenProjectMarketsParts on Token {
priceLow52W: priceHighLow(duration: YEAR, highLow: LOW) {
value
}
- pricePercentChange24h {
- value
- }
}
}
}
@@ -1099,7 +1094,6 @@ query FavoriteTokenCard($chain: Chain!, $address: String) {
token(chain: $chain, address: $address) {
...TokenBasicInfoParts
...TokenBasicProjectParts
- ...TokenProjectMarketsParts
market(currency: USD) {
id
price {
diff --git a/packages/uniswap/src/data/graphql/uniswap-data-api/schema.graphql b/packages/uniswap/src/data/graphql/uniswap-data-api/schema.graphql
index ec028772cc8..64a95cc99f4 100644
--- a/packages/uniswap/src/data/graphql/uniswap-data-api/schema.graphql
+++ b/packages/uniswap/src/data/graphql/uniswap-data-api/schema.graphql
@@ -1,25 +1,11 @@
"""This directive allows results to be deferred during execution"""
directive @defer on FIELD
-"""Tells the service which mutation triggers this subscription."""
-directive @aws_subscribe(
- """
- List of mutations which will trigger this subscription when they are called.
- """
- mutations: [String]
-) on FIELD_DEFINITION
-
"""
Tells the service this field/object has access authorized by a Lambda Authorizer.
"""
directive @aws_lambda on OBJECT | FIELD_DEFINITION
-"""Directs the schema to enforce authorization on a field"""
-directive @aws_auth(
- """List of cognito user pool groups which have access on this field"""
- cognito_groups: [String]
-) on FIELD_DEFINITION
-
"""
Tells the service which subscriptions will be published to when this mutation is
called. This directive is deprecated use @aws_susbscribe directive instead.
@@ -31,6 +17,11 @@ directive @aws_publish(
subscriptions: [String]
) on FIELD_DEFINITION
+"""
+Tells the service this field/object has access authorized by an API key.
+"""
+directive @aws_api_key on OBJECT | FIELD_DEFINITION
+
"""
Tells the service this field/object has access authorized by a Cognito User Pools token.
"""
@@ -40,19 +31,28 @@ directive @aws_cognito_user_pools(
) on OBJECT | FIELD_DEFINITION
"""
-Tells the service this field/object has access authorized by an OIDC token.
+Tells the service this field/object has access authorized by sigv4 signing.
"""
-directive @aws_oidc on OBJECT | FIELD_DEFINITION
+directive @aws_iam on OBJECT | FIELD_DEFINITION
-"""
-Tells the service this field/object has access authorized by an API key.
-"""
-directive @aws_api_key on OBJECT | FIELD_DEFINITION
+"""Directs the schema to enforce authorization on a field"""
+directive @aws_auth(
+ """List of cognito user pool groups which have access on this field"""
+ cognito_groups: [String]
+) on FIELD_DEFINITION
"""
-Tells the service this field/object has access authorized by sigv4 signing.
+Tells the service this field/object has access authorized by an OIDC token.
"""
-directive @aws_iam on OBJECT | FIELD_DEFINITION
+directive @aws_oidc on OBJECT | FIELD_DEFINITION
+
+"""Tells the service which mutation triggers this subscription."""
+directive @aws_subscribe(
+ """
+ List of mutations which will trigger this subscription when they are called.
+ """
+ mutations: [String]
+) on FIELD_DEFINITION
"""
Types, unions, and inputs (alphabetized):
@@ -193,7 +193,6 @@ enum Chain {
BLAST
ZORA
ZKSYNC
- UNICHAIN
ASTROCHAIN_SEPOLIA
WORLDCHAIN
MONAD_TESTNET
@@ -1210,7 +1209,7 @@ type TokenMarket {
fullyDilutedValuation: Amount
historicalVolume(duration: HistoryDuration!): [TimestampedAmount]
historicalTvl(duration: HistoryDuration!): [TimestampedAmount]
- priceHistory(duration: HistoryDuration!, maxLength: Int): [TimestampedAmount]
+ priceHistory(duration: HistoryDuration!): [TimestampedAmount]
ohlc(duration: HistoryDuration!): [TimestampedOhlc]
""" this volume is cumulative volume over the specified duration"""
@@ -1246,7 +1245,7 @@ type TokenProjectMarket {
pricePercentChange24h: Amount
priceHigh52w: Amount
priceLow52w: Amount
- priceHistory(duration: HistoryDuration!, maxLength: Int): [TimestampedAmount]
+ priceHistory(duration: HistoryDuration!): [TimestampedAmount]
pricePercentChange(duration: HistoryDuration!): Amount
priceHighLow(duration: HistoryDuration!, highLow: HighLow!): Amount
}
diff --git a/packages/uniswap/src/data/graphql/uniswap-data-api/web/search.graphql b/packages/uniswap/src/data/graphql/uniswap-data-api/web/search.graphql
index cd99e553dd0..77cc42f3635 100644
--- a/packages/uniswap/src/data/graphql/uniswap-data-api/web/search.graphql
+++ b/packages/uniswap/src/data/graphql/uniswap-data-api/web/search.graphql
@@ -73,3 +73,76 @@ query SearchTokensWeb($searchQuery: String!, $chains: [Chain!]) {
}
}
}
+
+query TopTokens100($duration: HistoryDuration!, $chain: Chain!) {
+ topTokens(pageSize: 100, page: 1, chain: $chain, orderBy: VOLUME) {
+ ...SimpleTokenDetails
+ project {
+ id
+ name
+ logo {
+ id
+ url
+ }
+ safetyLevel
+ logoUrl
+ isSpam
+ markets(currencies: [USD]) {
+ id
+ fullyDilutedValuation {
+ id
+ value
+ currency
+ }
+ }
+ }
+ market(currency: USD) {
+ id
+ totalValueLocked {
+ id
+ value
+ currency
+ }
+ price {
+ id
+ value
+ currency
+ }
+ pricePercentChange(duration: $duration) {
+ id
+ currency
+ value
+ }
+ pricePercentChange1Hour: pricePercentChange(duration: HOUR) {
+ id
+ currency
+ value
+ }
+ pricePercentChange1Day: pricePercentChange(duration: DAY) {
+ id
+ currency
+ value
+ }
+ volume(duration: $duration) {
+ id
+ value
+ currency
+ }
+ }
+ }
+}
+
+# We separately query sparkline data so that the large download time does not block Token Explore rendering
+query TopTokensSparkline($duration: HistoryDuration!, $chain: Chain!) {
+ topTokens(pageSize: 100, page: 1, chain: $chain, orderBy: VOLUME) {
+ ...SimpleTokenDetails
+ market(currency: USD) {
+ id
+ priceHistory(duration: $duration) {
+ id
+ timestamp
+ value
+ }
+ }
+ }
+}
diff --git a/packages/uniswap/src/data/rest/conversionTracking/constants.ts b/packages/uniswap/src/data/rest/conversionTracking/constants.ts
index 443e92ca937..faef8ad0fd3 100644
--- a/packages/uniswap/src/data/rest/conversionTracking/constants.ts
+++ b/packages/uniswap/src/data/rest/conversionTracking/constants.ts
@@ -50,7 +50,6 @@ export const REDDIT_CONVERSION_URL = `https://ads-api.reddit.com/api/v2.0/conver
const GOOGLE_CUSTOMER_ID = '9871826344'
export const GOOGLE_CONVERSION_URL = `https://googleads.googleapis.com/v18/customers/${GOOGLE_CUSTOMER_ID}:uploadClickConversions`
-export const GOOGLE_CONVERSION_DATETIME_FORMAT = 'yyyy-MM-dd HH:mm:ssXXX'
export const GOOGLE_CONVERSION_EVENTS = {
Web: {
diff --git a/packages/uniswap/src/data/rest/conversionTracking/tracking.ts b/packages/uniswap/src/data/rest/conversionTracking/tracking.ts
index 12d669cda47..8318158f0d4 100644
--- a/packages/uniswap/src/data/rest/conversionTracking/tracking.ts
+++ b/packages/uniswap/src/data/rest/conversionTracking/tracking.ts
@@ -1,10 +1,8 @@
import type { PartialMessage } from '@bufbuild/protobuf'
-import { format } from 'date-fns'
import ms from 'ms'
import { ProxyRequest } from 'uniswap/src/data/rest/conversionTracking/api/api_pb'
import {
DEFAULT_HEADERS,
- GOOGLE_CONVERSION_DATETIME_FORMAT,
GOOGLE_CONVERSION_URL,
PERSONAL3_CONVERSION_URL,
REDDIT_CONVERSION_URL,
@@ -87,11 +85,10 @@ const buildGoogleProxyRequest = ({
method: RequestType.POST,
headers: DEFAULT_HEADERS,
body: JSON.stringify({
- partial_failure: true,
conversions: [
{
gclid: lead.id,
- conversionDateTime: format(new Date(), GOOGLE_CONVERSION_DATETIME_FORMAT),
+ conversionDateTime: addJitter(new Date()),
conversionAction: eventId,
},
],
diff --git a/packages/uniswap/src/data/rest/embeddedWallet.ts b/packages/uniswap/src/data/rest/embeddedWallet.ts
deleted file mode 100644
index 3b20b8725cf..00000000000
--- a/packages/uniswap/src/data/rest/embeddedWallet.ts
+++ /dev/null
@@ -1,333 +0,0 @@
-/* eslint-disable no-restricted-imports */
-import { createPromiseClient } from '@connectrpc/connect'
-import { createConnectTransport } from '@connectrpc/connect-web'
-import { startAuthentication, startRegistration } from '@simplewebauthn/browser'
-import {
- AuthenticationResponseJSON,
- PublicKeyCredentialCreationOptionsJSON,
- RegistrationResponseJSON,
-} from '@simplewebauthn/types'
-import { EmbeddedWalletService } from '@uniswap/client-embeddedwallet/dist/uniswap/embeddedwallet/v1/service_connect'
-import {
- Action,
- AuthenticationTypes,
- ChallengeResponse,
- CreateWalletResponse,
- ExportSeedPhraseResponse,
- SignMessagesResponse,
- SignTransactionsResponse,
- SignTypedDataBatchResponse,
- WalletSigninResponse,
-} from '@uniswap/client-embeddedwallet/dist/uniswap/embeddedwallet/v1/service_pb'
-import { uniswapUrls } from 'uniswap/src/constants/urls'
-import { SharedQueryClient } from 'uniswap/src/data/apiClients/SharedQueryClient'
-import { isAddress } from 'utilities/src/addresses'
-import { logger } from 'utilities/src/logger/logger'
-
-const enclaveTransport = createConnectTransport({
- baseUrl: uniswapUrls.evervaultDevUrl,
- credentials: 'include',
-})
-export const EMBEDDED_WALLET_CLIENT = createPromiseClient(EmbeddedWalletService, enclaveTransport)
-
-/* DATA FETCHING FUNCTIONS */
-export async function fetchChallengeRequest({
- type,
- action,
-}: {
- type: AuthenticationTypes
- action: Action
-}): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['challenge', type, action],
- queryFn: () => EMBEDDED_WALLET_CLIENT.challenge({ type, action }),
- })
-}
-async function fetchCreateWalletRequest({ credential }: { credential: string }): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['createWallet', credential],
- queryFn: () => EMBEDDED_WALLET_CLIENT.createWallet({ credential }),
- })
-}
-async function fetchWalletSigninRequest({ credential }: { credential: string }): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['walletSignin', credential],
- queryFn: () => EMBEDDED_WALLET_CLIENT.walletSignin({ credential }),
- })
-}
-
-async function fetchSignMessagesRequest({
- messages,
- credential,
-}: {
- messages: string[]
- credential: string
-}): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['signMessages', messages, credential],
- queryFn: () => EMBEDDED_WALLET_CLIENT.signMessages({ messages, credential }),
- })
-}
-
-async function fetchSignTransactionRequest({
- transactions,
- credential,
-}: {
- transactions: string[]
- credential: string
-}): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['signTransaction', transactions, credential],
- queryFn: () => EMBEDDED_WALLET_CLIENT.signTransactions({ transactions, credential }),
- })
-}
-
-async function fetchSignTypedDataRequest({
- typedDataBatch,
- credential,
-}: {
- typedDataBatch: string[]
- credential: string
-}): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['signTypedData', typedDataBatch, credential],
- queryFn: () => EMBEDDED_WALLET_CLIENT.signTypedDataBatch({ typedDataBatch, credential }),
- })
-}
-
-async function fetchExportSeedPhraseRequest({
- encryptionKey,
- credential,
-}: {
- encryptionKey: string
- credential: string
-}): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['exportSeedPhrase', credential, encryptionKey],
- queryFn: () => EMBEDDED_WALLET_CLIENT.exportSeedPhrase({ credential, b64EncryptionPublicKey: encryptionKey }),
- })
-}
-
-async function fetchDisconnectRequest(): Promise {
- return await SharedQueryClient.fetchQuery({
- queryKey: ['disconnect'],
- queryFn: () => EMBEDDED_WALLET_CLIENT.disconnectWallet({}),
- })
-}
-
-/* UTILITY FUNCTIONS */
-async function registerNewPasskey(): Promise {
- try {
- const challenge = await fetchChallengeRequest({
- type: AuthenticationTypes.PASSKEY_REGISTRATION,
- action: Action.CREATE_WALLET,
- })
- if (challenge?.challengeOptions) {
- const challengeJson = JSON.parse(challenge.challengeOptions) as PublicKeyCredentialCreationOptionsJSON
- const authResp = await startRegistration({ optionsJSON: challengeJson })
- return authResp
- }
- } catch (registrationError: unknown) {
- if (registrationError instanceof Error && registrationError.name === 'AbortError') {
- logger.debug('embeddedWallet.ts', 'registerNewPasskey', 'User aborted registration')
- } else {
- // TODO[EW]: Add more in depth error handling
- logger.debug('embeddedWallet.ts', 'registerNewPasskey', `Error during registration: ${registrationError}`)
- }
- return undefined
- }
- logger.debug('embeddedWallet.ts', 'registerNewPasskey', 'Error parsing challenge response')
- return undefined
-}
-
-export async function createNewEmbeddedWallet(): Promise<`0x${string}` | undefined> {
- try {
- const passkeyCredential = await registerNewPasskey()
- if (passkeyCredential) {
- const createWalletResp = await fetchCreateWalletRequest({ credential: JSON.stringify(passkeyCredential) })
- if (createWalletResp?.walletAddress) {
- logger.debug(
- 'embeddedWallet.ts',
- 'createNewEmbeddedWallet',
- `New wallet created: ${createWalletResp.walletAddress}`,
- )
- if (!isAddress(createWalletResp.walletAddress)) {
- logger.error(new Error('Invalid address returned from create wallet response'), {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'createNewEmbeddedWallet',
- },
- })
- return undefined
- }
- return createWalletResp.walletAddress as `0x${string}`
- }
- }
- return undefined
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'createNewEmbeddedWallet',
- },
- })
- return undefined
- }
-}
-
-export async function authenticateWithPasskey(action: Action): Promise {
- try {
- const challenge = await fetchChallengeRequest({
- type: AuthenticationTypes.PASSKEY_AUTHENTICATION,
- action,
- })
- if (challenge?.challengeOptions) {
- const challengeJson = JSON.parse(challenge.challengeOptions) as PublicKeyCredentialCreationOptionsJSON
- const authResp = await startAuthentication({ optionsJSON: challengeJson })
- return authResp
- }
- } catch (registrationError: unknown) {
- if (registrationError instanceof Error && registrationError.name === 'AbortError') {
- logger.debug('embeddedWallet.ts', 'authenticateWithPasskey', 'User aborted the registration process')
- } else {
- logger.error(new Error('Error during registration'), {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'authenticateWithPasskey',
- },
- })
- }
- return undefined
- }
- return undefined
-}
-
-export async function signInWithPasskey(): Promise<`0x${string}` | undefined> {
- try {
- const authResponse = await authenticateWithPasskey(Action.WALLET_SIGNIN)
- if (authResponse) {
- const signInResp = await fetchWalletSigninRequest({ credential: JSON.stringify(authResponse) })
- if (signInResp?.walletAddress) {
- return signInResp.walletAddress as `0x${string}`
- }
- }
- return undefined
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'signInWithPasskey',
- },
- })
- return undefined
- }
-}
-
-export async function signMessagesWithPasskey(messages: string[]): Promise {
- try {
- const credential = await authenticateWithPasskey(Action.SIGN_MESSAGES)
- const signedMessagesResp = await fetchSignMessagesRequest({ messages, credential: JSON.stringify(credential) })
- return signedMessagesResp.signedMessages
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'signMessagesWithPasskey',
- },
- })
- return undefined
- }
-}
-
-export async function signTransactionWithPasskey(transactions: string[]): Promise {
- try {
- const credential = await authenticateWithPasskey(Action.SIGN_TRANSACTIONS)
- const signedTransactionResp = await fetchSignTransactionRequest({
- transactions,
- credential: JSON.stringify(credential),
- })
- return signedTransactionResp.signedTransactions
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'signTransactionWithPasskey',
- },
- })
- return undefined
- }
-}
-
-export async function signTypedDataWithPasskey(typedDataBatch: string[]): Promise {
- try {
- const credential = await authenticateWithPasskey(Action.SIGN_TYPED_DATA_BATCH)
- const signedTypedDataResp = await fetchSignTypedDataRequest({
- typedDataBatch,
- credential: JSON.stringify(credential),
- })
- return signedTypedDataResp.signature
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'signTypedDataWithPasskey',
- },
- })
- return undefined
- }
-}
-
-export async function exportSeedPhraseWithPasskey(): Promise {
- try {
- const keyPair = await window.crypto.subtle.generateKey(
- {
- name: 'RSA-OAEP',
- modulusLength: 2048,
- publicExponent: new Uint8Array([1, 0, 1]), // 65537
- hash: 'SHA-256',
- },
- true, // extractable
- ['encrypt', 'decrypt'],
- )
- // Export the public key in 'spki' format to match BE expectations
- const publicKeySpki = await window.crypto.subtle.exportKey('spki', keyPair.publicKey)
- const publicKeyBase64 = Buffer.from(publicKeySpki).toString('base64')
- const credential = await authenticateWithPasskey(Action.EXPORT_SEED_PHRASE)
- const seedPhraseResp = await fetchExportSeedPhraseRequest({
- encryptionKey: publicKeyBase64,
- credential: JSON.stringify(credential),
- })
- // decrypt the seed phrase
- const seedPhrase = await window.crypto.subtle.decrypt(
- {
- name: 'RSA-OAEP',
- },
- keyPair.privateKey,
- Buffer.from(seedPhraseResp.encryptedSeedPhrase, 'base64'),
- )
- return new TextDecoder().decode(seedPhrase).split(' ')
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'exportSeedPhraseWithPasskey',
- },
- })
- return undefined
- }
-}
-
-export async function disconnectWallet(): Promise {
- logger.debug('embeddedWallet.ts', 'disconnectWallet', 'Attempting to disconnect wallet')
- try {
- await fetchDisconnectRequest()
- logger.debug('embeddedWallet.ts', 'disconnectWallet', 'Wallet disconnected')
- } catch (error) {
- logger.error(error, {
- tags: {
- file: 'embeddedWallet.ts',
- function: 'disconnectWallet',
- },
- })
- }
-}
diff --git a/packages/uniswap/src/data/rest/tokenRankings.ts b/packages/uniswap/src/data/rest/tokenRankings.ts
index 7dfdf561ea7..be856c03e60 100644
--- a/packages/uniswap/src/data/rest/tokenRankings.ts
+++ b/packages/uniswap/src/data/rest/tokenRankings.ts
@@ -4,24 +4,8 @@ import { ConnectError } from '@connectrpc/connect'
import { useQuery } from '@connectrpc/connect-query'
import { UseQueryResult } from '@tanstack/react-query'
import { tokenRankings } from '@uniswap/client-explore/dist/uniswap/explore/v1/service-ExploreStatsService_connectquery'
-import {
- ProtectionInfo as ProtectionInfoProtobuf,
- TokenRankingsRequest,
- TokenRankingsResponse,
- TokenRankingsStat,
-} from '@uniswap/client-explore/dist/uniswap/explore/v1/service_pb'
-import {
- ProtectionAttackType,
- ProtectionInfo,
- ProtectionResult,
- SafetyLevel,
-} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
+import { TokenRankingsRequest, TokenRankingsResponse } from '@uniswap/client-explore/dist/uniswap/explore/v1/service_pb'
import { uniswapGetTransport } from 'uniswap/src/data/rest/base'
-import { fromGraphQLChain } from 'uniswap/src/features/chains/utils'
-import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
-import { buildCurrency, buildCurrencyInfo, getCurrencySafetyInfo } from 'uniswap/src/features/dataApi/utils'
-import { currencyId } from 'uniswap/src/utils/currencyId'
-import { logger } from 'utilities/src/logger/logger'
/**
* Wrapper around Tanstack useQuery for the Uniswap REST BE service TokenRankings
@@ -31,101 +15,6 @@ import { logger } from 'utilities/src/logger/logger'
*/
export function useTokenRankingsQuery(
input?: PartialMessage,
- enabled = true,
): UseQueryResult {
- return useQuery(tokenRankings, input, { transport: uniswapGetTransport, enabled })
-}
-
-/**
- * Helper functions to parse string enum fields from REST API responses.
- *
- * Note: The Protobuf types use string enums instead of strictly typed enums because
- * Protobuf does not allow defining two of the same enum name in the same proto file. (i.e. both ProtectionAttackType and
- * ProtectionResult contain 'UNKNOWN')
- *
- * Since the Explore service just calls GraphQL, we have confidence the string values will match the GraphQL enums.
- * Just validating here!
- */
-function parseSafetyLevel(safetyLevel?: string): SafetyLevel | undefined {
- if (!safetyLevel) {
- return undefined
- }
- const validSafetyLevels: SafetyLevel[] = Object.values(SafetyLevel)
- if (validSafetyLevels.includes(safetyLevel as SafetyLevel)) {
- return safetyLevel as SafetyLevel
- } else {
- logger.warn(
- 'uniswap/data/rest/tokenRankings.ts',
- 'parseSafetyLevel',
- `Invalid safetyLevel from REST TokenRankings query: ${safetyLevel}`,
- )
- return undefined
- }
-}
-
-function parseProtectionInfo(protectionInfo?: ProtectionInfoProtobuf): ProtectionInfo | undefined {
- if (!protectionInfo) {
- return undefined
- }
-
- let protectionResult: ProtectionResult | undefined
- const validProtectionResults: ProtectionResult[] = Object.values(ProtectionResult)
- if (validProtectionResults.includes(protectionInfo.result as ProtectionResult)) {
- protectionResult = protectionInfo.result as ProtectionResult
- } else {
- logger.warn(
- 'uniswap/data/rest/tokenRankings.ts',
- 'parseProtectionInfo',
- `Invalid protectionResult from REST TokenRankings query: ${protectionInfo.result}`,
- )
- return undefined
- }
-
- const validAttackTypes: ProtectionAttackType[] = Object.values(ProtectionAttackType)
- const attackTypes = protectionInfo.attackTypes
- .filter((at) => validAttackTypes.includes(at as ProtectionAttackType))
- .map((at) => at as ProtectionAttackType)
- if (attackTypes.length !== protectionInfo.attackTypes.length) {
- logger.warn(
- 'uniswap/data/rest/tokenRankings.ts',
- 'parseProtectionInfo',
- `Invalid attackTypes in REST TokenRankings query: ${protectionInfo.attackTypes}`,
- )
- }
-
- return { attackTypes, result: protectionResult }
-}
-
-export function tokenRankingsStatToCurrencyInfo(tokenRankingsStat: TokenRankingsStat): CurrencyInfo | null {
- const { chain, address, symbol, name, logo, decimals, feeData } = tokenRankingsStat
- const chainId = fromGraphQLChain(chain)
- const protectionInfo = parseProtectionInfo(tokenRankingsStat.protectionInfo)
- const safetyLevel = parseSafetyLevel(tokenRankingsStat.safetyLevel)
-
- if (!chainId || !symbol || !name) {
- return null
- }
-
- const currency = buildCurrency({
- chainId,
- address,
- decimals,
- symbol,
- name,
- buyFeeBps: feeData?.buyFeeBps,
- sellFeeBps: feeData?.sellFeeBps,
- })
-
- if (!currency) {
- return null
- }
-
- return buildCurrencyInfo({
- currency,
- currencyId: currencyId(currency),
- logoUrl: logo,
- safetyInfo: getCurrencySafetyInfo(safetyLevel, protectionInfo),
- // TODO (WALL-4626): remove safetyLevel in lieu of safetyInfo.tokenList
- safetyLevel,
- })
+ return useQuery(tokenRankings, input, { transport: uniswapGetTransport })
}
diff --git a/packages/uniswap/src/data/tradingApi/api.json b/packages/uniswap/src/data/tradingApi/api.json
index 9177884fc12..b257f03ee84 100644
--- a/packages/uniswap/src/data/tradingApi/api.json
+++ b/packages/uniswap/src/data/tradingApi/api.json
@@ -1 +1 @@
-{"openapi":"3.0.0","servers":[{"description":"Uniswap trading APIs Beta","url":"https://beta.trade-api.gateway.uniswap.org/v1"},{"description":"Uniswap trading APIs","url":"https://trade-api.gateway.uniswap.org/v1"}],"info":{"version":"1.0.0","title":"Token Trading","description":"Uniswap trading APIs for fungible tokens."},"paths":{"/check_approval":{"post":{"tags":["Approval"],"summary":"Check if token approval is required","description":"Checks if the swapper has the required approval. If the swapper does not have the required approval, then the response will include the transaction to approve the token. If the swapper has the required approval, then the response will be empty. If the parameter `includeGasInfo` is set to `true`, then the response will include the gas fee for the approval transaction.","operationId":"check_approval","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/ApprovalSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/ApprovalNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/quote":{"post":{"tags":["Quote"],"summary":"Get a quote","description":"Get a quote according to the provided configuration. Optionally adds a fee to the quote according to the API key being used. The fee is **ALWAYS** taken from the output token. If there is a fee and the trade is `EXACT_INPUT`, then the output amount will **NOT** include the fee subtraction. For `EXACT_INPUT` swaps, use `portionBips` to calculate the fee from the quoted amount. If there is a fee and the trade is `EXACT_OUTPUT`, then the input amount will **NOT** include the fee addition to account for the fee. For `EXACT_OUTPUT` swaps, use `portionAmount` to get the fee. \n \n We also support Wrapping and Unwrapping of native tokens on their respective chains. Wrapping and Unwrapping only works for when `routingPreference` is `CLASSIC`, `BEST_PRICE`, or `BEST_PRICE_V2`. We do not support `UNISWAPX` or `UNISWAPX_V2` for these actions.","operationId":"aggregator_quote","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/universalRouterVersionHeader"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/QuoteSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/order":{"post":{"tags":["Order"],"summary":"Create a gasless order","description":"Submits a new gasless encoded order. The order will be validated and if valid, will be submitted to the filler network. The network will try to fill the order at the quoted `startAmount`, and if not, the amount will start decaying until the `endAmount` is reached. While the order is within `decayEndTime`, the `orderStatus` is `open`. If the order does not get filled after the `decayEndTime` has passed, that is reflected in the `expired` `orderStatus`. then The order will be filled at the best price possible. Once the order is filled, `orderStatus` becomes `filled`.","operationId":"post_order","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderRequest"}}}},"responses":{"201":{"$ref":"#/components/responses/OrderSuccess201"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/orders":{"get":{"tags":["Order"],"summary":"Get gasless orders","description":"Retrieve gasless orders filtered by query param(s). Some fields on the order can be used as query param.","operationId":"get_order","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/orderTypeParam"},{"$ref":"#/components/parameters/orderIdParam"},{"$ref":"#/components/parameters/orderIdsParam"},{"$ref":"#/components/parameters/limitParam"},{"$ref":"#/components/parameters/orderStatusParam"},{"$ref":"#/components/parameters/swapperParam"},{"$ref":"#/components/parameters/sortKeyParam"},{"$ref":"#/components/parameters/sortParam"},{"$ref":"#/components/parameters/fillerParam"},{"$ref":"#/components/parameters/cursorParam"}],"responses":{"200":{"$ref":"#/components/responses/OrdersSuccess200"},"400":{"$ref":"#/components/responses/OrdersBadRequest400"},"404":{"$ref":"#/components/responses/OrdersNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/swap":{"post":{"tags":["Swap"],"summary":"Create swap calldata","description":"Create the calldata for a swap transaction (including wrap/unwrap) against the Uniswap Protocols. If the `quote` parameter includes the fee parameters, then the calldata will include the fee disbursement. The gas estimates will be **more precise** when the the response calldata would be valid if submitted on-chain.","operationId":"create_swap_transaction","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSwapRequest"}}}},"parameters":[{"$ref":"#/components/parameters/universalRouterVersionHeader"}],"responses":{"200":{"$ref":"#/components/responses/CreateSwapSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/SwapUnauthorized401"},"404":{"$ref":"#/components/responses/SwapNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/swaps":{"get":{"tags":["Swap"],"summary":"Get swaps status","description":"Get the status of a swap or bridge transactions.","operationId":"get_swaps","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/transactionHashesParam"},{"$ref":"#/components/parameters/chainIdParam"}],"responses":{"200":{"$ref":"#/components/responses/GetSwapsSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"404":{"$ref":"#/components/responses/SwapNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/indicative_quote":{"post":{"tags":["IndicativeQuote"],"summary":"Get an indicative quote","description":"Get an indicative quote according to the provided configuration. The quote will not include a fee.","operationId":"indicative_quote","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicativeQuoteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/IndicativeQuoteSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/send":{"post":{"tags":["Send"],"summary":"Create send calldata","description":"Create the calldata for a send transaction.","operationId":"create_send","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSendRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CreateSendSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/SendNotFound404"},"429":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/swappable_tokens":{"get":{"tags":["SwappableTokens"],"summary":"Get swappable tokens","description":"Get the swappable tokens for the given configuration. Either tokenIn (with tokenInChainId or (tokenInChainId and tokenOutChainId)) or tokenOut (with tokenOutChainId or (tokenOutChainId and tokenInChainId)) must be provided but not both.","operationId":"get_swappable_tokens","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/tokenInParam"},{"$ref":"#/components/parameters/tokenOutParam"},{"$ref":"#/components/parameters/bridgeTokenInChainIdParam"},{"$ref":"#/components/parameters/bridgeTokenOutChainIdParam"}],"responses":{"200":{"$ref":"#/components/responses/GetSwappableTokensSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"429":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/limit_order_quote":{"post":{"tags":["LimitOrderQuote"],"summary":"Get a limit order quote","description":"Get a quote for a limit order according to the provided configuration.","operationId":"get_limit_order_quote","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOrderQuoteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/LimitOrderQuoteSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/approve":{"post":{"tags":["Liquidity"],"summary":"Check if tokens and permits need to be approved to add liquidity","description":"Checks if the wallet address has the required approvals. If the wallet address does not have the required approval, then the response will include the transactions to approve the tokens. If the wallet address has the required approval, then the response will be empty for the corresponding tokens. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the approval transactions.","operationId":"check_approval_lp","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckApprovalLPRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CheckApprovalLPSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/ApprovalNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/create":{"post":{"tags":["Liquidity"],"summary":"Create pool and position calldata","description":"Create pool and position calldata. If the pool is not yet created, then the response will include the transaction to create the new pool with the initial price. If the pool is already created, then the response will not have the transaction to create the pool. The response will also have the transaction to create the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the creation transactions.","operationId":"create_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CreateLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/increase":{"post":{"tags":["Liquidity"],"summary":"Increase LP position calldata","description":"The response will also have the transaction to increase the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the increase transaction.","operationId":"increase_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncreaseLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/IncreaseLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/decrease":{"post":{"tags":["Liquidity"],"summary":"Decrease LP position calldata","description":"The response will also have the transaction to decrease the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the decrease transaction.","operationId":"decrease_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecreaseLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/DecreaseLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/claim":{"post":{"tags":["Liquidity"],"summary":"Claim LP fees calldata","description":"The response will also have the transaction to claim the fees for an LP position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the claim transaction.","operationId":"claim_lp_fees","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimLPFeesRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/ClaimLPFeesSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/migrate":{"post":{"tags":["Liquidity"],"summary":"Migrate LP position calldata","description":"The response will also have the transaction to migrate the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the migrate transaction.","operationId":"migrate_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrateLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/MigrateLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}}},"components":{"responses":{"OrdersSuccess200":{"description":"The request orders matching the query parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOrdersResponse"}}}},"OrderSuccess201":{"description":"Encoded order submitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderResponse"}}}},"QuoteSuccess200":{"description":"Quote request successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"LimitOrderQuoteSuccess200":{"description":"Limit Order Quote request successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOrderQuoteResponse"}}}},"CheckApprovalLPSuccess200":{"description":"Approve LP successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckApprovalLPResponse"}}}},"ApprovalSuccess200":{"description":"Check approval successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalResponse"}}}},"CreateSendSuccess200":{"description":"Create send successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSendResponse"}}}},"CreateSwapSuccess200":{"description":"Create swap successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSwapResponse"}}}},"GetSwapsSuccess200":{"description":"Get swap successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSwapsResponse"}}}},"GetSwappableTokensSuccess200":{"description":"Get swappable tokens successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSwappableTokensResponse"}}}},"CreateLPPositionSuccess200":{"description":"Create LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLPPositionResponse"}}}},"IncreaseLPPositionSuccess200":{"description":"Create LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncreaseLPPositionResponse"}}}},"DecreaseLPPositionSuccess200":{"description":"Decrease LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecreaseLPPositionResponse"}}}},"ClaimLPFeesSuccess200":{"description":"Claim LP Fees successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimLPFeesResponse"}}}},"MigrateLPPositionSuccess200":{"description":"Migrate LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrateLPPositionResponse"}}}},"BadRequest400":{"description":"RequestValidationError, Bad Input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err400"}}}},"ApprovalUnauthorized401":{"description":"UnauthorizedError eg. Account is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err401"}}}},"ApprovalNotFound404":{"description":"ResourceNotFound eg. Token allowance not found or Gas info not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"Unauthorized401":{"description":"UnauthorizedError eg. Account is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err401"}}}},"QuoteNotFound404":{"description":"ResourceNotFound eg. No quotes available or Gas fee/price not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"SendNotFound404":{"description":"ResourceNotFound eg. Gas fee not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"SwapBadRequest400":{"description":"RequestValidationError, Bad Input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err400"}}}},"SwapUnauthorized401":{"description":"UnauthorizedError eg. Account is blocked or Fee is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err401"}}}},"SwapNotFound404":{"description":"ResourceNotFound eg. No quotes available or Gas fee/price not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"OrdersNotFound404":{"description":"Orders not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"LPNotFound404":{"description":"ResourceNotFound eg. Cant Find LP Position.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"OrdersBadRequest400":{"description":"RequestValidationError eg. Token allowance not valid or Insufficient Funds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err400"}}}},"RateLimitedErr429":{"description":"Ratelimited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err429"}}}},"InternalErr500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err500"}}}},"Timeout504":{"description":"Request duration limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err504"}}}},"IndicativeQuoteSuccess200":{"description":"Indicative quote request successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicativeQuoteResponse"}}}}},"schemas":{"NullablePermit":{"allOf":[{"$ref":"#/components/schemas/Permit"},{"type":"object","nullable":true}]},"TokenAmount":{"type":"string"},"SwapStatus":{"type":"string","enum":["PENDING","SUCCESS","NOT_FOUND","FAILED","EXPIRED"]},"GetSwapsResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"swaps":{"type":"array","items":{"type":"object","properties":{"swapType":{"$ref":"#/components/schemas/Routing"},"status":{"$ref":"#/components/schemas/SwapStatus"},"txHash":{"type":"string"},"swapId":{"type":"number"}}}}},"required":["requestId","status"]},"GetSwappableTokensResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"name":{"type":"string"},"symbol":{"type":"string"},"project":{"$ref":"#/components/schemas/TokenProject"},"isSpam":{"type":"boolean"},"decimals":{"type":"number"}},"required":["address","chainId","name","symbol","project","decimals"]}}},"required":["requestId","tokens"]},"CreateSwapRequest":{"type":"object","description":"The parameters **signature** and **permitData** should only be included if *permitData* was returned from **/quote**.","properties":{"quote":{"oneOf":[{"$ref":"#/components/schemas/ClassicQuote"},{"$ref":"#/components/schemas/WrapUnwrapQuote"},{"$ref":"#/components/schemas/BridgeQuote"}]},"signature":{"type":"string","description":"The signed permit."},"includeGasInfo":{"type":"boolean","default":false,"deprecated":true,"description":"Use `refreshGasPrice` instead."},"refreshGasPrice":{"type":"boolean","default":false,"description":"If true, the gas price will be re-fetched from the network."},"simulateTransaction":{"type":"boolean","default":false,"description":"If true, the transaction will be simulated. If the simulation results on an onchain error, endpoint will return an error."},"permitData":{"allOf":[{"$ref":"#/components/schemas/Permit"}]},"safetyMode":{"$ref":"#/components/schemas/SwapSafetyMode"},"deadline":{"type":"integer","description":"The deadline for the swap in unix timestamp format. If the deadline is not defined OR in the past then the default deadline is 30 minutes."},"urgency":{"$ref":"#/components/schemas/Urgency"}},"required":["quote"]},"CreateSendRequest":{"type":"object","properties":{"sender":{"$ref":"#/components/schemas/Address"},"recipient":{"$ref":"#/components/schemas/Address"},"token":{"$ref":"#/components/schemas/Address"},"amount":{"$ref":"#/components/schemas/TokenAmount"},"chainId":{"$ref":"#/components/schemas/ChainId"},"urgency":{"$ref":"#/components/schemas/Urgency"}},"required":["sender","recipient","token","amount"]},"UniversalRouterVersion":{"type":"string","enum":["1.2","2.0"],"default":"1.2"},"Address":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{40}$"},"Position":{"type":"object","properties":{"pool":{"$ref":"#/components/schemas/Pool"},"tickLower":{"type":"number"},"tickUpper":{"type":"number"}},"required":["pool"]},"Pool":{"type":"object","properties":{"token0":{"$ref":"#/components/schemas/Address"},"token1":{"$ref":"#/components/schemas/Address"},"fee":{"type":"number"},"tickSpacing":{"type":"number"},"hooks":{"$ref":"#/components/schemas/Address"}},"required":["token0","token1"]},"ClassicGasUseEstimateUSD":{"description":"The gas fee you would pay if you opted for a CLASSIC swap over a Uniswap X order in terms of USD.","type":"string"},"CreateSwapResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"swap":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}},"required":["requestId","swap"]},"CreateSendResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"send":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"gasFeeUSD":{"type":"number"}},"required":["requestId","send"]},"QuoteResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"quote":{"$ref":"#/components/schemas/Quote"},"routing":{"$ref":"#/components/schemas/Routing"},"permitData":{"$ref":"#/components/schemas/NullablePermit"}},"required":["routing","quote","permitData","requestId"]},"LimitOrderQuoteResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"quote":{"$ref":"#/components/schemas/DutchQuote"},"routing":{"type":"string","enum":["LIMIT_ORDER"]},"permitData":{"$ref":"#/components/schemas/NullablePermit"}},"required":["routing","quote","permitData","requestId"]},"QuoteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TradeType"},"amount":{"type":"string"},"tokenInChainId":{"$ref":"#/components/schemas/ChainId"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"},"swapper":{"$ref":"#/components/schemas/Address"},"slippageTolerance":{"description":"For **Classic** swaps, the slippage tolerance is the maximum amount the price can change between the time the transaction is submitted and the time it is executed. The slippage tolerance is represented as a percentage of the total value of the swap. \n\n Slippage tolerance works differently in **DutchLimit** swaps, it does not set a limit on the Spread in an order. See [here](https://uniswap-docs.readme.io/reference/faqs#why-do-the-uniswapx-quotes-have-more-slippage-than-the-tolerance-i-set) for more information. \n\n **NOTE**: slippage is in terms of trade type. If the trade type is `EXACT_INPUT`, then the slippage is in terms of the output token. If the trade type is `EXACT_OUTPUT`, then the slippage is in terms of the input token.","type":"number"},"autoSlippage":{"$ref":"#/components/schemas/AutoSlippage"},"routingPreference":{"$ref":"#/components/schemas/RoutingPreference"},"protocols":{"$ref":"#/components/schemas/Protocols"},"spreadOptimization":{"$ref":"#/components/schemas/SpreadOptimization"},"urgency":{"$ref":"#/components/schemas/Urgency"},"permitAmount":{"$ref":"#/components/schemas/PermitAmount"}},"required":["type","amount","tokenInChainId","tokenOutChainId","tokenIn","tokenOut","swapper"]},"LimitOrderQuoteRequest":{"type":"object","properties":{"swapper":{"$ref":"#/components/schemas/Address"},"limitPrice":{"type":"string"},"amount":{"type":"string"},"orderDeadline":{"type":"number"},"type":{"$ref":"#/components/schemas/TradeType"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"},"tokenInChainId":{"$ref":"#/components/schemas/ChainId"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"}},"required":["swapper","type","amount","tokenIn","tokenOut","tokenInChainId","tokenOutChainId"]},"GetOrdersResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"orders":{"type":"array","items":{"$ref":"#/components/schemas/UniswapXOrder"}},"cursor":{"type":"string"}},"required":["orders","requestId"]},"OrderResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"orderId":{"type":"string"},"orderStatus":{"$ref":"#/components/schemas/OrderStatus"}},"required":["requestId","orderId","orderStatus"]},"OrderRequest":{"type":"object","properties":{"signature":{"type":"string","description":"The signed permit."},"quote":{"oneOf":[{"$ref":"#/components/schemas/DutchQuote"},{"$ref":"#/components/schemas/DutchQuoteV2"},{"$ref":"#/components/schemas/DutchQuoteV3"},{"$ref":"#/components/schemas/PriorityQuote"}]},"routing":{"$ref":"#/components/schemas/Routing"}},"required":["signature","quote"]},"Urgency":{"type":"string","enum":["normal","fast","urgent"],"description":"The urgency determines the urgency of the transaction. The default value is `urgent`.","default":"urgent"},"Protocols":{"type":"array","items":{"$ref":"#/components/schemas/ProtocolItems"},"description":"The protocols to use for the swap/order. If the `protocols` field is defined, then you can only set the `routingPreference` to `BEST_PRICE`"},"Err400":{"type":"object","properties":{"errorCode":{"default":"RequestValidationError","type":"string"},"detail":{"type":"string"}}},"Err401":{"type":"object","properties":{"errorCode":{"default":"UnauthorizedError","type":"string"},"detail":{"type":"string"}}},"Err404":{"type":"object","properties":{"errorCode":{"enum":["ResourceNotFound","QuoteAmountTooLowError"],"type":"string"},"detail":{"type":"string"}}},"Err429":{"type":"object","properties":{"errorCode":{"default":"Ratelimited","type":"string"},"detail":{"type":"string"}}},"Err500":{"type":"object","properties":{"errorCode":{"default":"InternalServerError","type":"string"},"detail":{"type":"string"}}},"Err504":{"type":"object","properties":{"errorCode":{"default":"Timeout","type":"string"},"detail":{"type":"string"}}},"ChainId":{"type":"number","enum":[1,10,56,137,8453,42161,81457,43114,42220,7777777,324,11155111,1301,480,10143,84532]},"OrderInput":{"type":"object","properties":{"token":{"type":"string"},"startAmount":{"type":"string"},"endAmount":{"type":"string"}},"required":["token"]},"OrderOutput":{"type":"object","properties":{"token":{"type":"string"},"startAmount":{"type":"string"},"endAmount":{"type":"string"},"isFeeOutput":{"type":"boolean"},"recipient":{"type":"string"}},"required":["token"]},"CosignerData":{"type":"object","properties":{"decayStartTime":{"type":"number"},"decayEndTime":{"type":"number"},"exclusiveFiller":{"type":"string"},"inputOverride":{"type":"string"},"outputOverrides":{"type":"array","items":{"type":"string"}}}},"SettledAmount":{"type":"object","properties":{"tokenOut":{"$ref":"#/components/schemas/Address"},"amountOut":{"type":"string"},"tokenIn":{"$ref":"#/components/schemas/Address"},"amountIn":{"type":"string"}}},"OrderType":{"type":"string","enum":["DutchLimit","Dutch","Dutch_V2","Dutch_V3"]},"OrderTypeQuery":{"type":"string","enum":["Dutch","Dutch_V2","Dutch_V1_V2","Dutch_V3","Limit","Priority"]},"UniswapXOrder":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/OrderType"},"encodedOrder":{"type":"string"},"signature":{"type":"string"},"nonce":{"type":"string"},"orderStatus":{"$ref":"#/components/schemas/OrderStatus"},"orderId":{"type":"string"},"chainId":{"$ref":"#/components/schemas/ChainId"},"quoteId":{"type":"string"},"swapper":{"type":"string"},"txHash":{"type":"string"},"input":{"$ref":"#/components/schemas/OrderInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/OrderOutput"}},"settledAmounts":{"type":"array","items":{"$ref":"#/components/schemas/SettledAmount"}},"cosignature":{"type":"string"},"cosignerData":{"$ref":"#/components/schemas/CosignerData"}},"required":["encodedOrder","signature","nonce","orderId","orderStatus","chainId","type"]},"SortKey":{"type":"string","enum":["createdAt"]},"OrderId":{"type":"string"},"OrderIds":{"type":"string"},"OrderStatus":{"type":"string","enum":["open","expired","error","cancelled","filled","unverified","insufficient-funds"]},"Permit":{"type":"object","properties":{"domain":{"type":"object"},"values":{"type":"object"},"types":{"type":"object"}}},"TokenProject":{"type":"object","properties":{"logo":{"$ref":"#/components/schemas/TokenProjectLogo","nullable":true},"safetyLevel":{"$ref":"#/components/schemas/SafetyLevel"},"isSpam":{"type":"boolean"}},"required":["logo","safetyLevel","isSpam"]},"TokenProjectLogo":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"DutchInput":{"type":"object","properties":{"startAmount":{"type":"string"},"endAmount":{"type":"string"},"token":{"type":"string"}},"required":["startAmount","endAmount","type"]},"DutchOutput":{"type":"object","properties":{"startAmount":{"type":"string"},"endAmount":{"type":"string"},"token":{"type":"string"},"recipient":{"type":"string"}},"required":["startAmount","endAmount","token","recipient"]},"Curve":{"type":"object","properties":{"relativeBlocks":{"type":"array","items":{"type":"number"}},"relativeAmounts":{"type":"array","items":{"type":"string"}}},"required":["type"]},"DutchInputV3":{"type":"object","properties":{"startAmount":{"type":"string"},"maxAmount":{"type":"string"},"adjustmentPerGweiBaseFee":{"type":"string"},"curve":{"$ref":"#/components/schemas/Curve"},"token":{"type":"string"}},"required":["startAmount","maxAmount","adjustmentPerGweiBaseFee","curve","token"]},"DutchOutputV3":{"type":"object","properties":{"startAmount":{"type":"string"},"minAmount":{"type":"string"},"recipient":{"type":"string"},"adjustmentPerGweiBaseFee":{"type":"string"},"curve":{"$ref":"#/components/schemas/Curve"},"token":{"type":"string"}},"required":["startAmount","maxAmount","adjustmentPerGweiBaseFee","curve","token","recipient"]},"DutchOrderInfo":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"decayStartTime":{"type":"number"},"decayEndTime":{"type":"number"},"exclusiveFiller":{"type":"string"},"exclusivityOverrideBps":{"type":"string"},"input":{"$ref":"#/components/schemas/DutchInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/DutchOutput"}}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","startTime","endTime","exclusiveFiller","exclusivityOverrideBps","input","outputs"]},"DutchOrderInfoV2":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"input":{"$ref":"#/components/schemas/DutchInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/DutchOutput"}},"cosigner":{"$ref":"#/components/schemas/Address"}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","startTime","endTime","exclusiveFiller","exclusivityOverrideBps","input","outputs"]},"DutchOrderInfoV3":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"input":{"$ref":"#/components/schemas/DutchInputV3"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/DutchOutputV3"}},"cosigner":{"$ref":"#/components/schemas/Address"},"startingBaseFee":{"type":"string"}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","startTime","endTime","exclusiveFiller","exclusivityOverrideBps","input","outputs"]},"DutchQuote":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/DutchOrderInfo"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"}},"required":["encodedOrder","orderInfo","orderId"]},"DutchQuoteV2":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/DutchOrderInfoV2"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"deadlineBufferSecs":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"}},"required":["encodedOrder","orderInfo","orderId"]},"DutchQuoteV3":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/DutchOrderInfoV3"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"deadlineBufferSecs":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"}},"required":["encodedOrder","orderInfo","orderId"]},"PriorityInput":{"type":"object","properties":{"amount":{"type":"string"},"token":{"type":"string"},"mpsPerPriorityFeeWei":{"type":"string"}},"required":["amount","token","mpsPerPriorityFeeWei"]},"PriorityOutput":{"type":"object","properties":{"amount":{"type":"string"},"token":{"type":"string"},"recipient":{"type":"string"},"mpsPerPriorityFeeWei":{"type":"string"}},"required":["amount","token","recipient","mpsPerPriorityFeeWei"]},"PriorityOrderInfo":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"auctionStartBlock":{"type":"string"},"baselinePriorityFeeWei":{"type":"string"},"input":{"$ref":"#/components/schemas/PriorityInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/PriorityOutput"}},"cosigner":{"$ref":"#/components/schemas/Address"}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","auctionStartBlock","baselinePriorityFeeWei","input","outputs","cosigner"]},"PriorityQuote":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/PriorityOrderInfo"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"deadlineBufferSecs":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"},"expectedAmountIn":{"type":"string"},"expectedAmountOut":{"type":"string"}},"required":["encodedOrder","orderInfo","orderId"]},"BridgeQuote":{"type":"object","properties":{"quoteId":{"type":"string"},"chainId":{"$ref":"#/components/schemas/ChainId"},"destinationChainId":{"$ref":"#/components/schemas/ChainId"},"swapper":{"$ref":"#/components/schemas/Address"},"input":{"$ref":"#/components/schemas/ClassicInput"},"output":{"$ref":"#/components/schemas/ClassicOutput"},"tradeType":{"$ref":"#/components/schemas/TradeType"},"quoteTimestamp":{"type":"number"},"gasPrice":{"type":"string"},"maxFeePerGas":{"type":"string"},"maxPriorityFeePerGas":{"type":"string"},"gasFee":{"type":"string"},"gasUseEstimate":{"type":"string"},"gasFeeUSD":{"type":"string"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"estimatedFillTimeMs":{"type":"number"}}},"SafetyLevel":{"type":"string","enum":["BLOCKED","MEDIUM_WARNING","STRONG_WARNING","VERIFIED"]},"TradeType":{"type":"string","enum":["EXACT_INPUT","EXACT_OUTPUT"]},"IndependentToken":{"type":"string","enum":["TOKEN_0","TOKEN_1"]},"Routing":{"type":"string","enum":["DUTCH_LIMIT","CLASSIC","DUTCH_V2","DUTCH_V3","BRIDGE","LIMIT_ORDER","PRIORITY"]},"AggregatedOutput":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Address"},"amount":{"type":"string"},"recipient":{"$ref":"#/components/schemas/Address"},"bps":{"type":"number"}}},"Quote":{"oneOf":[{"$ref":"#/components/schemas/DutchQuote"},{"$ref":"#/components/schemas/ClassicQuote"},{"$ref":"#/components/schemas/WrapUnwrapQuote"},{"$ref":"#/components/schemas/DutchQuoteV2"},{"$ref":"#/components/schemas/DutchQuoteV3"},{"$ref":"#/components/schemas/BridgeQuote"},{"$ref":"#/components/schemas/PriorityQuote"}]},"CheckApprovalLPRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"token0":{"$ref":"#/components/schemas/Address"},"token1":{"$ref":"#/components/schemas/Address"},"positionToken":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"walletAddress":{"$ref":"#/components/schemas/Address"},"amount0":{"type":"string"},"amount1":{"type":"string"},"positionAmount":{"type":"string"},"simulateTransaction":{"type":"boolean"}}},"CheckApprovalLPResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"token0Approval":{"$ref":"#/components/schemas/TransactionRequest"},"token1Approval":{"$ref":"#/components/schemas/TransactionRequest"},"positionTokenApproval":{"$ref":"#/components/schemas/TransactionRequest"},"permitData":{"$ref":"#/components/schemas/NullablePermit"},"gasFeeToken0Approval":{"type":"string"},"gasFeeToken1Approval":{"type":"string"},"gasFeePositionTokenApproval":{"type":"string"}}},"ApprovalRequest":{"type":"object","properties":{"walletAddress":{"$ref":"#/components/schemas/Address"},"token":{"$ref":"#/components/schemas/Address"},"amount":{"$ref":"#/components/schemas/TokenAmount"},"chainId":{"$ref":"#/components/schemas/ChainId"},"urgency":{"$ref":"#/components/schemas/Urgency"},"includeGasInfo":{"type":"boolean","default":false},"tokenOut":{"$ref":"#/components/schemas/Address"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"}},"required":["walletAddress","token","amount"]},"ApprovalResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"approval":{"$ref":"#/components/schemas/TransactionRequest"},"cancel":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"cancelGasFee":{"type":"string"}},"required":["requestId","approval","cancel"]},"ClassicQuote":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/ClassicInput"},"output":{"$ref":"#/components/schemas/ClassicOutput"},"swapper":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"slippage":{"type":"number"},"tradeType":{"$ref":"#/components/schemas/TradeType"},"gasFee":{"type":"string","description":"The gas fee in terms of wei. It does NOT include the additional gas for token approvals."},"gasFeeUSD":{"type":"string","description":"The gas fee in terms of USD. It does NOT include the additional gas for token approvals."},"gasFeeQuote":{"type":"string","description":"The gas fee in terms of the quoted currency. It does NOT include the additional gas for token approvals."},"route":{"type":"array","items":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/V3PoolInRoute"},{"$ref":"#/components/schemas/V2PoolInRoute"},{"$ref":"#/components/schemas/V4PoolInRoute"}]}}},"portionBips":{"type":"number","description":"The portion of the swap that will be taken as a fee. The fee will be taken from the output token."},"portionAmount":{"type":"string","description":"The amount of the swap that will be taken as a fee. The fee will be taken from the output token."},"portionRecipient":{"$ref":"#/components/schemas/Address"},"routeString":{"type":"string","description":"The route in string format."},"quoteId":{"type":"string","description":"The quote id. Used for analytics purposes."},"gasUseEstimate":{"type":"string","description":"The estimated gas use. It does NOT include the additional gas for token approvals."},"blockNumber":{"type":"string","description":"The current block number."},"gasPrice":{"type":"string","description":"The gas price in terms of wei for pre EIP1559 transactions."},"maxFeePerGas":{"type":"string","description":"The maximum fee per gas in terms of wei for EIP1559 transactions."},"maxPriorityFeePerGas":{"type":"string","description":"The maximum priority fee per gas in terms of wei for EIP1559 transactions."},"txFailureReasons":{"type":"array","items":{"$ref":"#/components/schemas/TransactionFailureReason"}},"priceImpact":{"type":"number","description":"The impact the trade has on the market price of the pool, between 0-100 percent"},"aggregatedOutputs":{"type":"array","items":{"$ref":"#/components/schemas/AggregatedOutput"}}}},"WrapUnwrapQuote":{"type":"object","properties":{"swapper":{"$ref":"#/components/schemas/Address"},"input":{"$ref":"#/components/schemas/ClassicInput"},"output":{"$ref":"#/components/schemas/ClassicOutput"},"chainId":{"$ref":"#/components/schemas/ChainId"},"tradeType":{"$ref":"#/components/schemas/TradeType"},"gasFee":{"type":"string","description":"The gas fee in terms of wei."},"gasFeeUSD":{"type":"string","description":"The gas fee in terms of USD."},"gasFeeQuote":{"type":"string","description":"The gas fee in terms of the quoted currency."},"gasUseEstimate":{"type":"string","description":"The estimated gas use."},"gasPrice":{"type":"string","description":"The gas price in terms of wei for pre EIP1559 transactions."},"maxFeePerGas":{"type":"string","description":"The maximum fee per gas in terms of wei for EIP1559 transactions."},"maxPriorityFeePerGas":{"type":"string","description":"The maximum priority fee per gas in terms of wei for EIP1559 transactions."}}},"TokenInRoute":{"type":"object","properties":{"address":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"symbol":{"type":"string"},"decimals":{"type":"string"},"buyFeeBps":{"type":"string"},"sellFeeBps":{"type":"string"}}},"V2Reserve":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/TokenInRoute"},"quotient":{"type":"string"}}},"V2PoolInRoute":{"type":"object","properties":{"type":{"type":"string","default":"v2-pool"},"address":{"$ref":"#/components/schemas/Address"},"tokenIn":{"$ref":"#/components/schemas/TokenInRoute"},"tokenOut":{"$ref":"#/components/schemas/TokenInRoute"},"reserve0":{"$ref":"#/components/schemas/V2Reserve"},"reserve1":{"$ref":"#/components/schemas/V2Reserve"},"amountIn":{"type":"string"},"amountOut":{"type":"string"}}},"V3PoolInRoute":{"type":"object","properties":{"type":{"type":"string","default":"v3-pool"},"address":{"$ref":"#/components/schemas/Address"},"tokenIn":{"$ref":"#/components/schemas/TokenInRoute"},"tokenOut":{"$ref":"#/components/schemas/TokenInRoute"},"sqrtRatioX96":{"type":"string"},"liquidity":{"type":"string"},"tickCurrent":{"type":"string"},"fee":{"type":"string"},"amountIn":{"type":"string"},"amountOut":{"type":"string"}}},"V4PoolInRoute":{"type":"object","properties":{"type":{"type":"string","default":"v4-pool"},"address":{"$ref":"#/components/schemas/Address"},"tokenIn":{"$ref":"#/components/schemas/TokenInRoute"},"tokenOut":{"$ref":"#/components/schemas/TokenInRoute"},"sqrtRatioX96":{"type":"string"},"liquidity":{"type":"string"},"tickCurrent":{"type":"string"},"fee":{"type":"string"},"tickSpacing":{"type":"string"},"hooks":{"type":"string"},"amountIn":{"type":"string"},"amountOut":{"type":"string"}},"required":["type","address","tokenIn","tokenOut","sqrtRatioX96","liquidity","tickCurrent","fee","tickSpacing","hooks"]},"TransactionHash":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{64}$"},"ClassicInput":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Address"},"amount":{"type":"string"}}},"ClassicOutput":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Address"},"amount":{"type":"string"},"recipient":{"$ref":"#/components/schemas/Address"}}},"RequestId":{"type":"string"},"PermitAmount":{"type":"string","enum":["FULL","EXACT"],"description":"For **Classic** swaps, specify the amount to be used in the permit. `FULL` can be used to specify unlimited amount. `EXACT` can be used to specify exact swap amount. Defaults to `FULL`.","default":"FULL"},"SpreadOptimization":{"type":"string","enum":["EXECUTION","PRICE"],"description":"For **Dutch Limit** orders only. When set to `EXECUTION`, quotes optimize for looser spreads at higher fill rates. When set to `PRICE`, quotes optimize for tighter spreads at lower fill rates","default":"EXECUTION"},"AutoSlippage":{"type":"string","enum":["DEFAULT"],"description":"For **Classic** swaps only. The auto slippage strategy to employ. If auto slippage is not defined then we don't compute it. If the auto slippage strategy is `DEFAULT`, then the swap will use the default slippage tolerance computation. You cannot define auto slippage and slippage tolerance at the same time. \n\n **NOTE**: slippage is in terms of trade type. If the trade type is `EXACT_INPUT`, then the slippage is in terms of the output token. If the trade type is `EXACT_OUTPUT`, then the slippage is in terms of the input token.","default":"undefined"},"RoutingPreference":{"type":"string","description":"The routing preference determines which protocol to use for the swap. If the routing preference is `UNISWAPX`, then the swap will be routed through the UniswapX Dutch Auction Protocol. If the routing preference is `CLASSIC`, then the swap will be routed through the Classic Protocol. If the routing preference is `BEST_PRICE`, then the swap will be routed through the protocol that provides the best price. When `UNIXWAPX_V2` is passed, the swap will be routed through the UniswapX V2 Dutch Auction Protocol. When `V3_ONLY` is passed, the swap will be routed ONLY through the Uniswap V3 Protocol. When `V2_ONLY` is passed, the swap will be routed ONLY through the Uniswap V2 Protocol.","enum":["CLASSIC","UNISWAPX","BEST_PRICE","BEST_PRICE_V2","UNISWAPX_V2","V3_ONLY","V2_ONLY","FASTEST"],"default":"BEST_PRICE"},"ProtocolItems":{"type":"string","enum":["V2","V3","V4","UNISWAPX","UNISWAPX_V2","UNISWAPX_V3","PRIORITY"]},"TransactionRequest":{"type":"object","properties":{"to":{"$ref":"#/components/schemas/Address"},"from":{"$ref":"#/components/schemas/Address"},"data":{"type":"string","description":"The calldata for the transaction."},"value":{"type":"string","description":"The value of the transaction in terms of wei in hex format."},"gasLimit":{"type":"string"},"chainId":{"type":"integer"},"maxFeePerGas":{"type":"string"},"maxPriorityFeePerGas":{"type":"string"},"gasPrice":{"type":"string"}},"required":["to","from","data","value","chainId"]},"TransactionFailureReason":{"type":"string","enum":["SIMULATION_ERROR","UNSUPPORTED_SIMULATION","SIMULATION_UNAVAILABLE","SLIPPAGE_TOO_LOW"]},"SwapSafetyMode":{"type":"string","enum":["SAFE"],"description":"The safety mode determines the safety level of the swap. If the safety mode is `SAFE`, then the swap will include a SWEEP for the native token."},"IndicativeQuoteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TradeType"},"amount":{"type":"string"},"tokenInChainId":{"$ref":"#/components/schemas/ChainId"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"}},"required":["type","amount","tokenInChainId","tokenOutChainId","tokenIn","tokenOut"]},"IndicativeQuoteResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"input":{"$ref":"#/components/schemas/IndicativeQuoteToken"},"output":{"$ref":"#/components/schemas/IndicativeQuoteToken"},"type":{"$ref":"#/components/schemas/TradeType"}},"required":["requestId","input","output","type"]},"CreateLPPositionRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"position":{"$ref":"#/components/schemas/Position"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"initialPrice":{"type":"string"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"},"amount0":{"type":"string"},"amount1":{"type":"string"},"independentAmount":{"type":"string"},"independentToken":{"$ref":"#/components/schemas/IndependentToken"},"initialDependentAmount":{"type":"string"},"defaultDependentAmount":{"type":"string"},"slippageTolerance":{"type":"number"},"deadline":{"type":"number"},"signature":{"type":"string","description":"The signed permit."},"batchPermitData":{"allOf":[{"$ref":"#/components/schemas/Permit"}]},"simulateTransaction":{"type":"boolean"}}},"CreateLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"create":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"dependentAmount":{"type":"string"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"}}},"IncreaseLPPositionRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"tokenId":{"type":"number"},"position":{"$ref":"#/components/schemas/Position"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"amount0":{"type":"string"},"amount1":{"type":"string"},"independentAmount":{"type":"string"},"independentToken":{"$ref":"#/components/schemas/IndependentToken"},"defaultDependentAmount":{"type":"string"},"slippageTolerance":{"type":"number"},"deadline":{"type":"number"},"signature":{"type":"string","description":"The signed permit."},"batchPermitData":{"allOf":[{"$ref":"#/components/schemas/Permit"}]},"simulateTransaction":{"type":"boolean"}}},"IncreaseLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"increase":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"dependentAmount":{"type":"string"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"}}},"DecreaseLPPositionRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"tokenId":{"type":"number"},"position":{"$ref":"#/components/schemas/Position"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"liquidityPercentageToDecrease":{"type":"number"},"liquidity0":{"type":"string"},"liquidity1":{"type":"string"},"slippageTolerance":{"type":"number"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"},"positionLiquidity":{"type":"string"},"expectedTokenOwed0RawAmount":{"type":"string"},"expectedTokenOwed1RawAmount":{"type":"string"},"collectAsWETH":{"type":"boolean"},"deadline":{"type":"number"},"simulateTransaction":{"type":"boolean"}}},"DecreaseLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"decrease":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"}}},"ClaimLPFeesRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"tokenId":{"type":"number"},"position":{"$ref":"#/components/schemas/Position"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"expectedTokenOwed0RawAmount":{"type":"string"},"expectedTokenOwed1RawAmount":{"type":"string"},"collectAsWETH":{"type":"boolean"},"simulateTransaction":{"type":"boolean"}}},"ClaimLPFeesResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"claim":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"MigrateLPPositionRequest":{"type":"object","properties":{"tokenId":{"type":"number"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"inputProtocol":{"$ref":"#/components/schemas/ProtocolItems"},"inputPosition":{"$ref":"#/components/schemas/Position"},"inputPoolLiquidity":{"type":"string"},"inputCurrentTick":{"type":"number"},"inputSqrtRatioX96":{"type":"string"},"inputPositionLiquidity":{"type":"string"},"signature":{"type":"string"},"amount0":{"type":"string"},"amount1":{"type":"string"},"outputProtocol":{"$ref":"#/components/schemas/ProtocolItems"},"outputPosition":{"$ref":"#/components/schemas/Position"},"initialPrice":{"type":"string"},"outputPoolLiquidity":{"type":"string"},"outputCurrentTick":{"type":"number"},"outputSqrtRatioX96":{"type":"string"},"expectedTokenOwed0RawAmount":{"type":"string"},"expectedTokenOwed1RawAmount":{"type":"string"},"slippageTolerance":{"type":"number"},"deadline":{"type":"number"},"signatureDeadline":{"type":"number"},"simulateTransaction":{"type":"boolean","default":false}},"required":["tokenId","chainId","walletAddress","inputProtocol","inputPosition","inputPoolLiquidity","inputCurrentTick","inputSqrtRatioX96","inputPositionLiquidity","amount0","amount1","outputProtocol","outputPosition","expectedTokenOwed0RawAmount","expectedTokenOwed1RawAmount"]},"MigrateLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"migrate":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"IndicativeQuoteToken":{"type":"object","properties":{"amount":{"type":"string"},"chainId":{"$ref":"#/components/schemas/ChainId"},"token":{"$ref":"#/components/schemas/Address"}}}},"parameters":{"universalRouterVersionHeader":{"name":"x-universal-router-version","in":"header","description":"The version of the Universal Router to use for the swap journey. *MUST* be consistent throughout the API calls.","required":false,"schema":{"$ref":"#/components/schemas/UniversalRouterVersion"}},"addressParam":{"name":"address","in":"path","schema":{"$ref":"#/components/schemas/Address"},"required":true},"tokenIdParam":{"name":"tokenId","in":"path","schema":{"type":"string"},"required":true},"cursorParam":{"name":"cursor","in":"query","schema":{"type":"string"},"required":false},"limitParam":{"name":"limit","in":"query","schema":{"type":"number"},"required":false},"chainIdParam":{"name":"chainId","in":"query","schema":{"$ref":"#/components/schemas/ChainId"},"required":false},"bridgeTokenInChainIdParam":{"name":"tokenInChainId","in":"query","schema":{"$ref":"#/components/schemas/ChainId"},"required":false},"bridgeTokenOutChainIdParam":{"name":"tokenOutChainId","in":"query","schema":{"$ref":"#/components/schemas/ChainId"},"required":false},"tokenInParam":{"name":"tokenIn","in":"query","schema":{"$ref":"#/components/schemas/Address"},"required":false},"tokenOutParam":{"name":"tokenOut","in":"query","schema":{"$ref":"#/components/schemas/Address"},"required":false},"addressPathParam":{"name":"address","in":"query","schema":{"$ref":"#/components/schemas/Address"},"required":false},"orderStatusParam":{"name":"orderStatus","in":"query","description":"Filter by order status.","required":false,"schema":{"$ref":"#/components/schemas/OrderStatus"}},"orderTypeParam":{"name":"orderType","in":"query","description":"The default orderType is Dutch_V1_V2 and will grab both Dutch and Dutch_V2 orders.","required":false,"schema":{"$ref":"#/components/schemas/OrderTypeQuery"}},"orderIdParam":{"name":"orderId","in":"query","required":false,"schema":{"$ref":"#/components/schemas/OrderId"}},"orderIdsParam":{"name":"orderIds","in":"query","required":false,"description":"ids split by commas","schema":{"$ref":"#/components/schemas/OrderIds"}},"swapperParam":{"name":"swapper","in":"query","description":"Filter by swapper address.","required":false,"schema":{"$ref":"#/components/schemas/Address"}},"fillerParam":{"name":"filler","in":"query","description":"Filter by filler address.","required":false,"schema":{"$ref":"#/components/schemas/Address"}},"sortKeyParam":{"name":"sortKey","in":"query","description":"Order the query results by the sort key.","required":false,"schema":{"$ref":"#/components/schemas/SortKey"}},"sortParam":{"name":"sort","in":"query","description":"Sort query. For example: `sort=gt(UNIX_TIMESTAMP)`, `sort=between(1675872827, 1675872930)`, or `lt(1675872930)`.","required":false,"schema":{"type":"string"}},"descParam":{"description":"Sort query results by sortKey in descending order.","name":"desc","in":"query","required":false,"schema":{"type":"string"}},"transactionHashesParam":{"description":"The transaction hashes.","name":"txHashes","in":"query","required":true,"style":"form","explode":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionHash"}}}},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"}}},"security":[{"apiKey":[]}]}
\ No newline at end of file
+{"openapi":"3.0.0","servers":[{"description":"Uniswap trading APIs Beta","url":"https://beta.trade-api.gateway.uniswap.org/v1"},{"description":"Uniswap trading APIs","url":"https://trade-api.gateway.uniswap.org/v1"}],"info":{"version":"1.0.0","title":"Token Trading","description":"Uniswap trading APIs for fungible tokens."},"paths":{"/check_approval":{"post":{"tags":["Approval"],"summary":"Check if token approval is required","description":"Checks if the swapper has the required approval. If the swapper does not have the required approval, then the response will include the transaction to approve the token. If the swapper has the required approval, then the response will be empty. If the parameter `includeGasInfo` is set to `true`, then the response will include the gas fee for the approval transaction.","operationId":"check_approval","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/ApprovalSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/ApprovalNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/quote":{"post":{"tags":["Quote"],"summary":"Get a quote","description":"Get a quote according to the provided configuration. Optionally adds a fee to the quote according to the API key being used. The fee is **ALWAYS** taken from the output token. If there is a fee and the trade is `EXACT_INPUT`, then the output amount will **NOT** include the fee subtraction. For `EXACT_INPUT` swaps, use `portionBips` to calculate the fee from the quoted amount. If there is a fee and the trade is `EXACT_OUTPUT`, then the input amount will **NOT** include the fee addition to account for the fee. For `EXACT_OUTPUT` swaps, use `portionAmount` to get the fee. \n \n We also support Wrapping and Unwrapping of native tokens on their respective chains. Wrapping and Unwrapping only works for when `routingPreference` is `CLASSIC`, `BEST_PRICE`, or `BEST_PRICE_V2`. We do not support `UNISWAPX` or `UNISWAPX_V2` for these actions.","operationId":"aggregator_quote","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/universalRouterVersionHeader"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/QuoteSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/order":{"post":{"tags":["Order"],"summary":"Create a gasless order","description":"Submits a new gasless encoded order. The order will be validated and if valid, will be submitted to the filler network. The network will try to fill the order at the quoted `startAmount`, and if not, the amount will start decaying until the `endAmount` is reached. While the order is within `decayEndTime`, the `orderStatus` is `open`. If the order does not get filled after the `decayEndTime` has passed, that is reflected in the `expired` `orderStatus`. then The order will be filled at the best price possible. Once the order is filled, `orderStatus` becomes `filled`.","operationId":"post_order","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderRequest"}}}},"responses":{"201":{"$ref":"#/components/responses/OrderSuccess201"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/orders":{"get":{"tags":["Order"],"summary":"Get gasless orders","description":"Retrieve gasless orders filtered by query param(s). Some fields on the order can be used as query param.","operationId":"get_order","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/orderTypeParam"},{"$ref":"#/components/parameters/orderIdParam"},{"$ref":"#/components/parameters/orderIdsParam"},{"$ref":"#/components/parameters/limitParam"},{"$ref":"#/components/parameters/orderStatusParam"},{"$ref":"#/components/parameters/swapperParam"},{"$ref":"#/components/parameters/sortKeyParam"},{"$ref":"#/components/parameters/sortParam"},{"$ref":"#/components/parameters/fillerParam"},{"$ref":"#/components/parameters/cursorParam"}],"responses":{"200":{"$ref":"#/components/responses/OrdersSuccess200"},"400":{"$ref":"#/components/responses/OrdersBadRequest400"},"404":{"$ref":"#/components/responses/OrdersNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/swap":{"post":{"tags":["Swap"],"summary":"Create swap calldata","description":"Create the calldata for a swap transaction (including wrap/unwrap) against the Uniswap Protocols. If the `quote` parameter includes the fee parameters, then the calldata will include the fee disbursement. The gas estimates will be **more precise** when the the response calldata would be valid if submitted on-chain.","operationId":"create_swap_transaction","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSwapRequest"}}}},"parameters":[{"$ref":"#/components/parameters/universalRouterVersionHeader"}],"responses":{"200":{"$ref":"#/components/responses/CreateSwapSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/SwapUnauthorized401"},"404":{"$ref":"#/components/responses/SwapNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/swaps":{"get":{"tags":["Swap"],"summary":"Get swaps status","description":"Get the status of a swap or bridge transactions.","operationId":"get_swaps","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/transactionHashesParam"},{"$ref":"#/components/parameters/chainIdParam"}],"responses":{"200":{"$ref":"#/components/responses/GetSwapsSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"404":{"$ref":"#/components/responses/SwapNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/indicative_quote":{"post":{"tags":["IndicativeQuote"],"summary":"Get an indicative quote","description":"Get an indicative quote according to the provided configuration. The quote will not include a fee.","operationId":"indicative_quote","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicativeQuoteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/IndicativeQuoteSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/send":{"post":{"tags":["Send"],"summary":"Create send calldata","description":"Create the calldata for a send transaction.","operationId":"create_send","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSendRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CreateSendSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/SendNotFound404"},"429":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/swappable_tokens":{"get":{"tags":["SwappableTokens"],"summary":"Get swappable tokens","description":"Get the swappable tokens for the given configuration. Either tokenIn (with tokenInChainId or (tokenInChainId and tokenOutChainId)) or tokenOut (with tokenOutChainId or (tokenOutChainId and tokenInChainId)) must be provided but not both.","operationId":"get_swappable_tokens","security":[{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/tokenInParam"},{"$ref":"#/components/parameters/tokenOutParam"},{"$ref":"#/components/parameters/bridgeTokenInChainIdParam"},{"$ref":"#/components/parameters/bridgeTokenOutChainIdParam"}],"responses":{"200":{"$ref":"#/components/responses/GetSwappableTokensSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"429":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/limit_order_quote":{"post":{"tags":["LimitOrderQuote"],"summary":"Get a limit order quote","description":"Get a quote for a limit order according to the provided configuration.","operationId":"get_limit_order_quote","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOrderQuoteRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/LimitOrderQuoteSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/Unauthorized401"},"404":{"$ref":"#/components/responses/QuoteNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/approve":{"post":{"tags":["Liquidity"],"summary":"Check if tokens and permits need to be approved to add liquidity","description":"Checks if the wallet address has the required approvals. If the wallet address does not have the required approval, then the response will include the transactions to approve the tokens. If the wallet address has the required approval, then the response will be empty for the corresponding tokens. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the approval transactions.","operationId":"check_approval_lp","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckApprovalLPRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CheckApprovalLPSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/ApprovalNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/create":{"post":{"tags":["Liquidity"],"summary":"Create pool and position calldata","description":"Create pool and position calldata. If the pool is not yet created, then the response will include the transaction to create the new pool with the initial price. If the pool is already created, then the response will not have the transaction to create the pool. The response will also have the transaction to create the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the creation transactions.","operationId":"create_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CreateLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/increase":{"post":{"tags":["Liquidity"],"summary":"Increase LP position calldata","description":"The response will also have the transaction to increase the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the increase transaction.","operationId":"increase_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncreaseLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/IncreaseLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/decrease":{"post":{"tags":["Liquidity"],"summary":"Decrease LP position calldata","description":"The response will also have the transaction to decrease the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the decrease transaction.","operationId":"decrease_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecreaseLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/DecreaseLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/claim":{"post":{"tags":["Liquidity"],"summary":"Claim LP fees calldata","description":"The response will also have the transaction to claim the fees for an LP position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the claim transaction.","operationId":"claim_lp_fees","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimLPFeesRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/ClaimLPFeesSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}},"/lp/migrate":{"post":{"tags":["Liquidity"],"summary":"Migrate LP position calldata","description":"The response will also have the transaction to migrate the position for the corresponding pool. If the parameter `simulateTransaction` is set to `true`, then the response will include the gas fees for the migrate transaction.","operationId":"migrate_lp_position","security":[{"apiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrateLPPositionRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/MigrateLPPositionSuccess200"},"400":{"$ref":"#/components/responses/BadRequest400"},"401":{"$ref":"#/components/responses/ApprovalUnauthorized401"},"404":{"$ref":"#/components/responses/LPNotFound404"},"419":{"$ref":"#/components/responses/RateLimitedErr429"},"500":{"$ref":"#/components/responses/InternalErr500"},"504":{"$ref":"#/components/responses/Timeout504"}}}}},"components":{"responses":{"OrdersSuccess200":{"description":"The request orders matching the query parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOrdersResponse"}}}},"OrderSuccess201":{"description":"Encoded order submitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderResponse"}}}},"QuoteSuccess200":{"description":"Quote request successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"LimitOrderQuoteSuccess200":{"description":"Limit Order Quote request successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOrderQuoteResponse"}}}},"CheckApprovalLPSuccess200":{"description":"Approve LP successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckApprovalLPResponse"}}}},"ApprovalSuccess200":{"description":"Check approval successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalResponse"}}}},"CreateSendSuccess200":{"description":"Create send successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSendResponse"}}}},"CreateSwapSuccess200":{"description":"Create swap successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSwapResponse"}}}},"GetSwapsSuccess200":{"description":"Get swap successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSwapsResponse"}}}},"GetSwappableTokensSuccess200":{"description":"Get swappable tokens successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSwappableTokensResponse"}}}},"CreateLPPositionSuccess200":{"description":"Create LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLPPositionResponse"}}}},"IncreaseLPPositionSuccess200":{"description":"Create LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncreaseLPPositionResponse"}}}},"DecreaseLPPositionSuccess200":{"description":"Decrease LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecreaseLPPositionResponse"}}}},"ClaimLPFeesSuccess200":{"description":"Claim LP Fees successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimLPFeesResponse"}}}},"MigrateLPPositionSuccess200":{"description":"Migrate LP Position successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrateLPPositionResponse"}}}},"BadRequest400":{"description":"RequestValidationError, Bad Input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err400"}}}},"ApprovalUnauthorized401":{"description":"UnauthorizedError eg. Account is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err401"}}}},"ApprovalNotFound404":{"description":"ResourceNotFound eg. Token allowance not found or Gas info not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"Unauthorized401":{"description":"UnauthorizedError eg. Account is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err401"}}}},"QuoteNotFound404":{"description":"ResourceNotFound eg. No quotes available or Gas fee/price not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"SendNotFound404":{"description":"ResourceNotFound eg. Gas fee not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"SwapBadRequest400":{"description":"RequestValidationError, Bad Input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err400"}}}},"SwapUnauthorized401":{"description":"UnauthorizedError eg. Account is blocked or Fee is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err401"}}}},"SwapNotFound404":{"description":"ResourceNotFound eg. No quotes available or Gas fee/price not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"OrdersNotFound404":{"description":"Orders not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"LPNotFound404":{"description":"ResourceNotFound eg. Cant Find LP Position.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err404"}}}},"OrdersBadRequest400":{"description":"RequestValidationError eg. Token allowance not valid or Insufficient Funds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err400"}}}},"RateLimitedErr429":{"description":"Ratelimited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err429"}}}},"InternalErr500":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err500"}}}},"Timeout504":{"description":"Request duration limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Err504"}}}},"IndicativeQuoteSuccess200":{"description":"Indicative quote request successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicativeQuoteResponse"}}}}},"schemas":{"NullablePermit":{"allOf":[{"$ref":"#/components/schemas/Permit"},{"type":"object","nullable":true}]},"TokenAmount":{"type":"string"},"SwapStatus":{"type":"string","enum":["PENDING","SUCCESS","NOT_FOUND","FAILED","EXPIRED"]},"GetSwapsResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"swaps":{"type":"array","items":{"type":"object","properties":{"swapType":{"$ref":"#/components/schemas/Routing"},"status":{"$ref":"#/components/schemas/SwapStatus"},"txHash":{"type":"string"},"swapId":{"type":"number"}}}}},"required":["requestId","status"]},"GetSwappableTokensResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"name":{"type":"string"},"symbol":{"type":"string"},"project":{"$ref":"#/components/schemas/TokenProject"},"isSpam":{"type":"boolean"},"decimals":{"type":"number"}},"required":["address","chainId","name","symbol","project","decimals"]}}},"required":["requestId","tokens"]},"CreateSwapRequest":{"type":"object","description":"The parameters **signature** and **permitData** should only be included if *permitData* was returned from **/quote**.","properties":{"quote":{"oneOf":[{"$ref":"#/components/schemas/ClassicQuote"},{"$ref":"#/components/schemas/WrapUnwrapQuote"},{"$ref":"#/components/schemas/BridgeQuote"}]},"signature":{"type":"string","description":"The signed permit."},"includeGasInfo":{"type":"boolean","default":false,"deprecated":true,"description":"Use `refreshGasPrice` instead."},"refreshGasPrice":{"type":"boolean","default":false,"description":"If true, the gas price will be re-fetched from the network."},"simulateTransaction":{"type":"boolean","default":false,"description":"If true, the transaction will be simulated. If the simulation results on an onchain error, endpoint will return an error."},"permitData":{"allOf":[{"$ref":"#/components/schemas/Permit"}]},"safetyMode":{"$ref":"#/components/schemas/SwapSafetyMode"},"deadline":{"type":"integer","description":"The deadline for the swap in unix timestamp format. If the deadline is not defined OR in the past then the default deadline is 30 minutes."},"urgency":{"$ref":"#/components/schemas/Urgency"}},"required":["quote"]},"CreateSendRequest":{"type":"object","properties":{"sender":{"$ref":"#/components/schemas/Address"},"recipient":{"$ref":"#/components/schemas/Address"},"token":{"$ref":"#/components/schemas/Address"},"amount":{"$ref":"#/components/schemas/TokenAmount"},"chainId":{"$ref":"#/components/schemas/ChainId"},"urgency":{"$ref":"#/components/schemas/Urgency"}},"required":["sender","recipient","token","amount"]},"UniversalRouterVersion":{"type":"string","enum":["1.2","2.0"],"default":"1.2"},"Address":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{40}$"},"Position":{"type":"object","properties":{"pool":{"$ref":"#/components/schemas/Pool"},"tickLower":{"type":"number"},"tickUpper":{"type":"number"}},"required":["pool"]},"Pool":{"type":"object","properties":{"token0":{"$ref":"#/components/schemas/Address"},"token1":{"$ref":"#/components/schemas/Address"},"fee":{"type":"number"},"tickSpacing":{"type":"number"},"hooks":{"$ref":"#/components/schemas/Address"}},"required":["token0","token1"]},"ClassicGasUseEstimateUSD":{"description":"The gas fee you would pay if you opted for a CLASSIC swap over a Uniswap X order in terms of USD.","type":"string"},"CreateSwapResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"swap":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}},"required":["requestId","swap"]},"CreateSendResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"send":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"gasFeeUSD":{"type":"number"}},"required":["requestId","send"]},"QuoteResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"quote":{"$ref":"#/components/schemas/Quote"},"routing":{"$ref":"#/components/schemas/Routing"},"permitData":{"$ref":"#/components/schemas/NullablePermit"}},"required":["routing","quote","permitData","requestId"]},"LimitOrderQuoteResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"quote":{"$ref":"#/components/schemas/DutchQuote"},"routing":{"type":"string","enum":["LIMIT_ORDER"]},"permitData":{"$ref":"#/components/schemas/NullablePermit"}},"required":["routing","quote","permitData","requestId"]},"QuoteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TradeType"},"amount":{"type":"string"},"tokenInChainId":{"$ref":"#/components/schemas/ChainId"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"},"swapper":{"$ref":"#/components/schemas/Address"},"slippageTolerance":{"description":"For **Classic** swaps, the slippage tolerance is the maximum amount the price can change between the time the transaction is submitted and the time it is executed. The slippage tolerance is represented as a percentage of the total value of the swap. \n\n Slippage tolerance works differently in **DutchLimit** swaps, it does not set a limit on the Spread in an order. See [here](https://uniswap-docs.readme.io/reference/faqs#why-do-the-uniswapx-quotes-have-more-slippage-than-the-tolerance-i-set) for more information. \n\n **NOTE**: slippage is in terms of trade type. If the trade type is `EXACT_INPUT`, then the slippage is in terms of the output token. If the trade type is `EXACT_OUTPUT`, then the slippage is in terms of the input token.","type":"number"},"autoSlippage":{"$ref":"#/components/schemas/AutoSlippage"},"routingPreference":{"$ref":"#/components/schemas/RoutingPreference"},"protocols":{"$ref":"#/components/schemas/Protocols"},"spreadOptimization":{"$ref":"#/components/schemas/SpreadOptimization"},"urgency":{"$ref":"#/components/schemas/Urgency"}},"required":["type","amount","tokenInChainId","tokenOutChainId","tokenIn","tokenOut","swapper"]},"LimitOrderQuoteRequest":{"type":"object","properties":{"swapper":{"$ref":"#/components/schemas/Address"},"limitPrice":{"type":"string"},"amount":{"type":"string"},"orderDeadline":{"type":"number"},"type":{"$ref":"#/components/schemas/TradeType"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"},"tokenInChainId":{"$ref":"#/components/schemas/ChainId"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"}},"required":["swapper","type","amount","tokenIn","tokenOut","tokenInChainId","tokenOutChainId"]},"GetOrdersResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"orders":{"type":"array","items":{"$ref":"#/components/schemas/UniswapXOrder"}},"cursor":{"type":"string"}},"required":["orders","requestId"]},"OrderResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"orderId":{"type":"string"},"orderStatus":{"$ref":"#/components/schemas/OrderStatus"}},"required":["requestId","orderId","orderStatus"]},"OrderRequest":{"type":"object","properties":{"signature":{"type":"string","description":"The signed permit."},"quote":{"oneOf":[{"$ref":"#/components/schemas/DutchQuote"},{"$ref":"#/components/schemas/DutchQuoteV2"},{"$ref":"#/components/schemas/PriorityQuote"}]},"routing":{"$ref":"#/components/schemas/Routing"}},"required":["signature","quote"]},"Urgency":{"type":"string","enum":["normal","fast","urgent"],"description":"The urgency determines the urgency of the transaction. The default value is `urgent`.","default":"urgent"},"Protocols":{"type":"array","items":{"$ref":"#/components/schemas/ProtocolItems"},"description":"The protocols to use for the swap/order. If the `protocols` field is defined, then you can only set the `routingPreference` to `BEST_PRICE`"},"Err400":{"type":"object","properties":{"errorCode":{"default":"RequestValidationError","type":"string"},"detail":{"type":"string"}}},"Err401":{"type":"object","properties":{"errorCode":{"default":"UnauthorizedError","type":"string"},"detail":{"type":"string"}}},"Err404":{"type":"object","properties":{"errorCode":{"enum":["ResourceNotFound","QuoteAmountTooLowError"],"type":"string"},"detail":{"type":"string"}}},"Err429":{"type":"object","properties":{"errorCode":{"default":"Ratelimited","type":"string"},"detail":{"type":"string"}}},"Err500":{"type":"object","properties":{"errorCode":{"default":"InternalServerError","type":"string"},"detail":{"type":"string"}}},"Err504":{"type":"object","properties":{"errorCode":{"default":"Timeout","type":"string"},"detail":{"type":"string"}}},"ChainId":{"type":"number","enum":[1,10,56,137,8453,42161,81457,43114,42220,7777777,324,11155111,1301,480]},"OrderInput":{"type":"object","properties":{"token":{"type":"string"},"startAmount":{"type":"string"},"endAmount":{"type":"string"}},"required":["token"]},"OrderOutput":{"type":"object","properties":{"token":{"type":"string"},"startAmount":{"type":"string"},"endAmount":{"type":"string"},"isFeeOutput":{"type":"boolean"},"recipient":{"type":"string"}},"required":["token"]},"CosignerData":{"type":"object","properties":{"decayStartTime":{"type":"number"},"decayEndTime":{"type":"number"},"exclusiveFiller":{"type":"string"},"inputOverride":{"type":"string"},"outputOverrides":{"type":"array","items":{"type":"string"}}}},"SettledAmount":{"type":"object","properties":{"tokenOut":{"$ref":"#/components/schemas/Address"},"amountOut":{"type":"string"},"tokenIn":{"$ref":"#/components/schemas/Address"},"amountIn":{"type":"string"}}},"OrderType":{"type":"string","enum":["DutchLimit","Dutch","Dutch_V2"]},"OrderTypeQuery":{"type":"string","enum":["Dutch","Dutch_V2","Dutch_V1_V2","Limit","Priority"]},"UniswapXOrder":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/OrderType"},"encodedOrder":{"type":"string"},"signature":{"type":"string"},"nonce":{"type":"string"},"orderStatus":{"$ref":"#/components/schemas/OrderStatus"},"orderId":{"type":"string"},"chainId":{"$ref":"#/components/schemas/ChainId"},"quoteId":{"type":"string"},"swapper":{"type":"string"},"txHash":{"type":"string"},"input":{"$ref":"#/components/schemas/OrderInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/OrderOutput"}},"settledAmounts":{"type":"array","items":{"$ref":"#/components/schemas/SettledAmount"}},"cosignature":{"type":"string"},"cosignerData":{"$ref":"#/components/schemas/CosignerData"}},"required":["encodedOrder","signature","nonce","orderId","orderStatus","chainId","type"]},"SortKey":{"type":"string","enum":["createdAt"]},"OrderId":{"type":"string"},"OrderIds":{"type":"string"},"OrderStatus":{"type":"string","enum":["open","expired","error","cancelled","filled","unverified","insufficient-funds"]},"Permit":{"type":"object","properties":{"domain":{"type":"object"},"values":{"type":"object"},"types":{"type":"object"}}},"TokenProject":{"type":"object","properties":{"logo":{"$ref":"#/components/schemas/TokenProjectLogo","nullable":true},"safetyLevel":{"$ref":"#/components/schemas/SafetyLevel"},"isSpam":{"type":"boolean"}},"required":["logo","safetyLevel","isSpam"]},"TokenProjectLogo":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"DutchInput":{"type":"object","properties":{"startAmount":{"type":"string"},"endAmount":{"type":"string"},"token":{"type":"string"}},"required":["startAmount","endAmount","type"]},"DutchOutput":{"type":"object","properties":{"startAmount":{"type":"string"},"endAmount":{"type":"string"},"token":{"type":"string"},"recipient":{"type":"string"}},"required":["startAmount","endAmount","token","recipient"]},"DutchOrderInfo":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"decayStartTime":{"type":"number"},"decayEndTime":{"type":"number"},"exclusiveFiller":{"type":"string"},"exclusivityOverrideBps":{"type":"string"},"input":{"$ref":"#/components/schemas/DutchInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/DutchOutput"}}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","startTime","endTime","exclusiveFiller","exclusivityOverrideBps","input","outputs"]},"DutchOrderInfoV2":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"input":{"$ref":"#/components/schemas/DutchInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/DutchOutput"}},"cosigner":{"$ref":"#/components/schemas/Address"}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","startTime","endTime","exclusiveFiller","exclusivityOverrideBps","input","outputs"]},"DutchQuote":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/DutchOrderInfo"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"}},"required":["encodedOrder","orderInfo","orderId"]},"DutchQuoteV2":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/DutchOrderInfoV2"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"deadlineBufferSecs":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"}},"required":["encodedOrder","orderInfo","orderId"]},"PriorityInput":{"type":"object","properties":{"amount":{"type":"string"},"token":{"type":"string"},"mpsPerPriorityFeeWei":{"type":"string"}},"required":["amount","token","mpsPerPriorityFeeWei"]},"PriorityOutput":{"type":"object","properties":{"amount":{"type":"string"},"token":{"type":"string"},"recipient":{"type":"string"},"mpsPerPriorityFeeWei":{"type":"string"}},"required":["amount","token","recipient","mpsPerPriorityFeeWei"]},"PriorityOrderInfo":{"type":"object","properties":{"chainId":{"$ref":"#/components/schemas/ChainId"},"nonce":{"type":"string"},"reactor":{"type":"string"},"swapper":{"type":"string"},"deadline":{"type":"number"},"additionalValidationContract":{"type":"string"},"additionalValidationData":{"type":"string"},"auctionStartBlock":{"type":"string"},"baselinePriorityFeeWei":{"type":"string"},"input":{"$ref":"#/components/schemas/PriorityInput"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/PriorityOutput"}},"cosigner":{"$ref":"#/components/schemas/Address"}},"required":["chainId","nonce","reactor","swapper","deadline","validationContract","validationData","auctionStartBlock","baselinePriorityFeeWei","input","outputs","cosigner"]},"PriorityQuote":{"type":"object","properties":{"encodedOrder":{"type":"string"},"orderId":{"type":"string"},"orderInfo":{"$ref":"#/components/schemas/PriorityOrderInfo"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"quoteId":{"type":"string"},"slippageTolerance":{"type":"number"},"deadlineBufferSecs":{"type":"number"},"classicGasUseEstimateUSD":{"$ref":"#/components/schemas/ClassicGasUseEstimateUSD"},"expectedAmountIn":{"type":"string"},"expectedAmountOut":{"type":"string"}},"required":["encodedOrder","orderInfo","orderId"]},"BridgeQuote":{"type":"object","properties":{"quoteId":{"type":"string"},"chainId":{"$ref":"#/components/schemas/ChainId"},"destinationChainId":{"$ref":"#/components/schemas/ChainId"},"swapper":{"$ref":"#/components/schemas/Address"},"input":{"$ref":"#/components/schemas/ClassicInput"},"output":{"$ref":"#/components/schemas/ClassicOutput"},"tradeType":{"$ref":"#/components/schemas/TradeType"},"quoteTimestamp":{"type":"number"},"gasPrice":{"type":"string"},"maxFeePerGas":{"type":"string"},"maxPriorityFeePerGas":{"type":"string"},"gasFee":{"type":"string"},"gasUseEstimate":{"type":"string"},"gasFeeUSD":{"type":"string"},"portionBips":{"type":"number"},"portionAmount":{"type":"string"},"portionRecipient":{"$ref":"#/components/schemas/Address"},"estimatedFillTimeMs":{"type":"number"}}},"SafetyLevel":{"type":"string","enum":["BLOCKED","MEDIUM_WARNING","STRONG_WARNING","VERIFIED"]},"TradeType":{"type":"string","enum":["EXACT_INPUT","EXACT_OUTPUT"]},"Routing":{"type":"string","enum":["DUTCH_LIMIT","CLASSIC","DUTCH_V2","BRIDGE","LIMIT_ORDER","PRIORITY"]},"Quote":{"oneOf":[{"$ref":"#/components/schemas/DutchQuote"},{"$ref":"#/components/schemas/ClassicQuote"},{"$ref":"#/components/schemas/WrapUnwrapQuote"},{"$ref":"#/components/schemas/DutchQuoteV2"},{"$ref":"#/components/schemas/BridgeQuote"},{"$ref":"#/components/schemas/PriorityQuote"}]},"CheckApprovalLPRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"token0":{"$ref":"#/components/schemas/Address"},"token1":{"$ref":"#/components/schemas/Address"},"positionToken":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"walletAddress":{"$ref":"#/components/schemas/Address"},"amount0":{"type":"string"},"amount1":{"type":"string"},"positionAmount":{"type":"string"},"simulateTransaction":{"type":"boolean"}}},"CheckApprovalLPResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"token0Approval":{"$ref":"#/components/schemas/TransactionRequest"},"token1Approval":{"$ref":"#/components/schemas/TransactionRequest"},"positionTokenApproval":{"$ref":"#/components/schemas/TransactionRequest"},"permitData":{"$ref":"#/components/schemas/NullablePermit"},"gasFeeToken0Approval":{"type":"string"},"gasFeeToken1Approval":{"type":"string"},"gasFeePositionTokenApproval":{"type":"string"}}},"ApprovalRequest":{"type":"object","properties":{"walletAddress":{"$ref":"#/components/schemas/Address"},"token":{"$ref":"#/components/schemas/Address"},"amount":{"$ref":"#/components/schemas/TokenAmount"},"chainId":{"$ref":"#/components/schemas/ChainId"},"urgency":{"$ref":"#/components/schemas/Urgency"},"includeGasInfo":{"type":"boolean","default":false},"tokenOut":{"$ref":"#/components/schemas/Address"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"}},"required":["walletAddress","token","amount"]},"ApprovalResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"approval":{"$ref":"#/components/schemas/TransactionRequest"},"cancel":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"},"cancelGasFee":{"type":"string"}},"required":["requestId","approval","cancel"]},"ClassicQuote":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/ClassicInput"},"output":{"$ref":"#/components/schemas/ClassicOutput"},"swapper":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"slippage":{"type":"number"},"tradeType":{"$ref":"#/components/schemas/TradeType"},"gasFee":{"type":"string","description":"The gas fee in terms of wei. It does NOT include the additional gas for token approvals."},"gasFeeUSD":{"type":"string","description":"The gas fee in terms of USD. It does NOT include the additional gas for token approvals."},"gasFeeQuote":{"type":"string","description":"The gas fee in terms of the quoted currency. It does NOT include the additional gas for token approvals."},"route":{"type":"array","items":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/V3PoolInRoute"},{"$ref":"#/components/schemas/V2PoolInRoute"},{"$ref":"#/components/schemas/V4PoolInRoute"}]}}},"portionBips":{"type":"number","description":"The portion of the swap that will be taken as a fee. The fee will be taken from the output token."},"portionAmount":{"type":"string","description":"The amount of the swap that will be taken as a fee. The fee will be taken from the output token."},"portionRecipient":{"$ref":"#/components/schemas/Address"},"routeString":{"type":"string","description":"The route in string format."},"quoteId":{"type":"string","description":"The quote id. Used for analytics purposes."},"gasUseEstimate":{"type":"string","description":"The estimated gas use. It does NOT include the additional gas for token approvals."},"blockNumber":{"type":"string","description":"The current block number."},"gasPrice":{"type":"string","description":"The gas price in terms of wei for pre EIP1559 transactions."},"maxFeePerGas":{"type":"string","description":"The maximum fee per gas in terms of wei for EIP1559 transactions."},"maxPriorityFeePerGas":{"type":"string","description":"The maximum priority fee per gas in terms of wei for EIP1559 transactions."},"txFailureReasons":{"type":"array","items":{"$ref":"#/components/schemas/TransactionFailureReason"}},"priceImpact":{"type":"number","description":"The impact the trade has on the market price of the pool, between 0-100 percent"}}},"WrapUnwrapQuote":{"type":"object","properties":{"swapper":{"$ref":"#/components/schemas/Address"},"input":{"$ref":"#/components/schemas/ClassicInput"},"output":{"$ref":"#/components/schemas/ClassicOutput"},"chainId":{"$ref":"#/components/schemas/ChainId"},"tradeType":{"$ref":"#/components/schemas/TradeType"},"gasFee":{"type":"string","description":"The gas fee in terms of wei."},"gasFeeUSD":{"type":"string","description":"The gas fee in terms of USD."},"gasFeeQuote":{"type":"string","description":"The gas fee in terms of the quoted currency."},"gasUseEstimate":{"type":"string","description":"The estimated gas use."},"gasPrice":{"type":"string","description":"The gas price in terms of wei for pre EIP1559 transactions."},"maxFeePerGas":{"type":"string","description":"The maximum fee per gas in terms of wei for EIP1559 transactions."},"maxPriorityFeePerGas":{"type":"string","description":"The maximum priority fee per gas in terms of wei for EIP1559 transactions."}}},"TokenInRoute":{"type":"object","properties":{"address":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"symbol":{"type":"string"},"decimals":{"type":"string"},"buyFeeBps":{"type":"string"},"sellFeeBps":{"type":"string"}}},"V2Reserve":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/TokenInRoute"},"quotient":{"type":"string"}}},"V2PoolInRoute":{"type":"object","properties":{"type":{"type":"string","default":"v2-pool"},"address":{"$ref":"#/components/schemas/Address"},"tokenIn":{"$ref":"#/components/schemas/TokenInRoute"},"tokenOut":{"$ref":"#/components/schemas/TokenInRoute"},"reserve0":{"$ref":"#/components/schemas/V2Reserve"},"reserve1":{"$ref":"#/components/schemas/V2Reserve"},"amountIn":{"type":"string"},"amountOut":{"type":"string"}}},"V3PoolInRoute":{"type":"object","properties":{"type":{"type":"string","default":"v3-pool"},"address":{"$ref":"#/components/schemas/Address"},"tokenIn":{"$ref":"#/components/schemas/TokenInRoute"},"tokenOut":{"$ref":"#/components/schemas/TokenInRoute"},"sqrtRatioX96":{"type":"string"},"liquidity":{"type":"string"},"tickCurrent":{"type":"string"},"fee":{"type":"string"},"amountIn":{"type":"string"},"amountOut":{"type":"string"}}},"V4PoolInRoute":{"type":"object","properties":{"type":{"type":"string","default":"v4-pool"},"address":{"$ref":"#/components/schemas/Address"},"tokenIn":{"$ref":"#/components/schemas/TokenInRoute"},"tokenOut":{"$ref":"#/components/schemas/TokenInRoute"},"sqrtRatioX96":{"type":"string"},"liquidity":{"type":"string"},"tickCurrent":{"type":"string"},"fee":{"type":"string"},"tickSpacing":{"type":"string"},"hooks":{"type":"string"},"amountIn":{"type":"string"},"amountOut":{"type":"string"}},"required":["type","address","tokenIn","tokenOut","sqrtRatioX96","liquidity","tickCurrent","fee","tickSpacing","hooks"]},"TransactionHash":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{64}$"},"ClassicInput":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Address"},"amount":{"type":"string"}}},"ClassicOutput":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Address"},"amount":{"type":"string"},"recipient":{"$ref":"#/components/schemas/Address"}}},"RequestId":{"type":"string"},"SpreadOptimization":{"type":"string","enum":["EXECUTION","PRICE"],"description":"For **Dutch Limit** orders only. When set to `EXECUTION`, quotes optimize for looser spreads at higher fill rates. When set to `PRICE`, quotes optimize for tighter spreads at lower fill rates","default":"EXECUTION"},"AutoSlippage":{"type":"string","enum":["DEFAULT"],"description":"For **Classic** swaps only. The auto slippage strategy to employ. If auto slippage is not defined then we don't compute it. If the auto slippage strategy is `DEFAULT`, then the swap will use the default slippage tolerance computation. You cannot define auto slippage and slippage tolerance at the same time. \n\n **NOTE**: slippage is in terms of trade type. If the trade type is `EXACT_INPUT`, then the slippage is in terms of the output token. If the trade type is `EXACT_OUTPUT`, then the slippage is in terms of the input token.","default":"undefined"},"RoutingPreference":{"type":"string","description":"The routing preference determines which protocol to use for the swap. If the routing preference is `UNISWAPX`, then the swap will be routed through the UniswapX Dutch Auction Protocol. If the routing preference is `CLASSIC`, then the swap will be routed through the Classic Protocol. If the routing preference is `BEST_PRICE`, then the swap will be routed through the protocol that provides the best price. When `UNIXWAPX_V2` is passed, the swap will be routed through the UniswapX V2 Dutch Auction Protocol. When `V3_ONLY` is passed, the swap will be routed ONLY through the Uniswap V3 Protocol. When `V2_ONLY` is passed, the swap will be routed ONLY through the Uniswap V2 Protocol.","enum":["CLASSIC","UNISWAPX","BEST_PRICE","BEST_PRICE_V2","UNISWAPX_V2","V3_ONLY","V2_ONLY"],"default":"BEST_PRICE"},"ProtocolItems":{"type":"string","enum":["V2","V3","V4","UNISWAPX","UNISWAPX_V2","PRIORITY"]},"TransactionRequest":{"type":"object","properties":{"to":{"$ref":"#/components/schemas/Address"},"from":{"$ref":"#/components/schemas/Address"},"data":{"type":"string","description":"The calldata for the transaction."},"value":{"type":"string","description":"The value of the transaction in terms of wei in hex format."},"gasLimit":{"type":"string"},"chainId":{"type":"integer"},"maxFeePerGas":{"type":"string"},"maxPriorityFeePerGas":{"type":"string"},"gasPrice":{"type":"string"}},"required":["to","from","data","value","chainId"]},"TransactionFailureReason":{"type":"string","enum":["SIMULATION_ERROR","UNSUPPORTED_SIMULATION","SIMULATION_UNAVAILABLE","SLIPPAGE_TOO_LOW"]},"SwapSafetyMode":{"type":"string","enum":["SAFE"],"description":"The safety mode determines the safety level of the swap. If the safety mode is `SAFE`, then the swap will include a SWEEP for the native token."},"IndicativeQuoteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TradeType"},"amount":{"type":"string"},"tokenInChainId":{"$ref":"#/components/schemas/ChainId"},"tokenOutChainId":{"$ref":"#/components/schemas/ChainId"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"}},"required":["type","amount","tokenInChainId","tokenOutChainId","tokenIn","tokenOut"]},"IndicativeQuoteResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"input":{"$ref":"#/components/schemas/IndicativeQuoteToken"},"output":{"$ref":"#/components/schemas/IndicativeQuoteToken"},"type":{"$ref":"#/components/schemas/TradeType"}},"required":["requestId","input","output","type"]},"CreateLPPositionRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"position":{"$ref":"#/components/schemas/Position"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"initialPrice":{"type":"string"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"},"amount0":{"type":"string"},"amount1":{"type":"string"},"slippageTolerance":{"type":"number"},"deadline":{"type":"number"},"signature":{"type":"string","description":"The signed permit."},"batchPermitData":{"allOf":[{"$ref":"#/components/schemas/Permit"}]},"simulateTransaction":{"type":"boolean"}}},"CreateLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"create":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"IncreaseLPPositionRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"tokenId":{"type":"number"},"position":{"$ref":"#/components/schemas/Position"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"amount0":{"type":"string"},"amount1":{"type":"string"},"slippageTolerance":{"type":"number"},"deadline":{"type":"number"},"signature":{"type":"string","description":"The signed permit."},"batchPermitData":{"allOf":[{"$ref":"#/components/schemas/Permit"}]},"simulateTransaction":{"type":"boolean"}}},"IncreaseLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"increase":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"DecreaseLPPositionRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"tokenId":{"type":"number"},"position":{"$ref":"#/components/schemas/Position"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"liquidityPercentageToDecrease":{"type":"number"},"liquidity0":{"type":"string"},"liquidity1":{"type":"string"},"slippageTolerance":{"type":"number"},"poolLiquidity":{"type":"string"},"currentTick":{"type":"number"},"sqrtRatioX96":{"type":"string"},"positionLiquidity":{"type":"string"},"expectedTokenOwed0RawAmount":{"type":"string"},"expectedTokenOwed1RawAmount":{"type":"string"},"collectAsWETH":{"type":"boolean"},"deadline":{"type":"number"},"simulateTransaction":{"type":"boolean"}}},"DecreaseLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"decrease":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"ClaimLPFeesRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ProtocolItems"},"tokenId":{"type":"number"},"position":{"$ref":"#/components/schemas/Position"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"expectedTokenOwed0RawAmount":{"type":"string"},"expectedTokenOwed1RawAmount":{"type":"string"},"collectAsWETH":{"type":"boolean"},"simulateTransaction":{"type":"boolean"}}},"ClaimLPFeesResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"claim":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"MigrateLPPositionRequest":{"type":"object","properties":{"tokenId":{"type":"number"},"walletAddress":{"$ref":"#/components/schemas/Address"},"chainId":{"$ref":"#/components/schemas/ChainId"},"inputProtocol":{"$ref":"#/components/schemas/ProtocolItems"},"inputPosition":{"$ref":"#/components/schemas/Position"},"inputPoolLiquidity":{"type":"string"},"inputCurrentTick":{"type":"number"},"inputSqrtRatioX96":{"type":"string"},"inputPositionLiquidity":{"type":"string"},"signature":{"type":"string"},"amount0":{"type":"string"},"amount1":{"type":"string"},"outputProtocol":{"$ref":"#/components/schemas/ProtocolItems"},"outputPosition":{"$ref":"#/components/schemas/Position"},"initialPrice":{"type":"string"},"outputPoolLiquidity":{"type":"string"},"outputCurrentTick":{"type":"number"},"outputSqrtRatioX96":{"type":"string"},"expectedTokenOwed0RawAmount":{"type":"string"},"expectedTokenOwed1RawAmount":{"type":"string"},"slippageTolerance":{"type":"number"},"deadline":{"type":"number"},"signatureDeadline":{"type":"number"},"simulateTransaction":{"type":"boolean","default":false}},"required":["tokenId","chainId","walletAddress","inputProtocol","inputPosition","inputPoolLiquidity","inputCurrentTick","inputSqrtRatioX96","inputPositionLiquidity","amount0","amount1","outputProtocol","outputPosition","expectedTokenOwed0RawAmount","expectedTokenOwed1RawAmount"]},"MigrateLPPositionResponse":{"type":"object","properties":{"requestId":{"$ref":"#/components/schemas/RequestId"},"migrate":{"$ref":"#/components/schemas/TransactionRequest"},"gasFee":{"type":"string"}}},"IndicativeQuoteToken":{"type":"object","properties":{"amount":{"type":"string"},"chainId":{"$ref":"#/components/schemas/ChainId"},"token":{"$ref":"#/components/schemas/Address"}}}},"parameters":{"universalRouterVersionHeader":{"name":"x-universal-router-version","in":"header","description":"The version of the Universal Router to use for the swap journey. *MUST* be consistent throughout the API calls.","required":false,"schema":{"$ref":"#/components/schemas/UniversalRouterVersion"}},"addressParam":{"name":"address","in":"path","schema":{"$ref":"#/components/schemas/Address"},"required":true},"tokenIdParam":{"name":"tokenId","in":"path","schema":{"type":"string"},"required":true},"cursorParam":{"name":"cursor","in":"query","schema":{"type":"string"},"required":false},"limitParam":{"name":"limit","in":"query","schema":{"type":"number"},"required":false},"chainIdParam":{"name":"chainId","in":"query","schema":{"$ref":"#/components/schemas/ChainId"},"required":false},"bridgeTokenInChainIdParam":{"name":"tokenInChainId","in":"query","schema":{"$ref":"#/components/schemas/ChainId"},"required":false},"bridgeTokenOutChainIdParam":{"name":"tokenOutChainId","in":"query","schema":{"$ref":"#/components/schemas/ChainId"},"required":false},"tokenInParam":{"name":"tokenIn","in":"query","schema":{"$ref":"#/components/schemas/Address"},"required":false},"tokenOutParam":{"name":"tokenOut","in":"query","schema":{"$ref":"#/components/schemas/Address"},"required":false},"addressPathParam":{"name":"address","in":"query","schema":{"$ref":"#/components/schemas/Address"},"required":false},"orderStatusParam":{"name":"orderStatus","in":"query","description":"Filter by order status.","required":false,"schema":{"$ref":"#/components/schemas/OrderStatus"}},"orderTypeParam":{"name":"orderType","in":"query","description":"The default orderType is Dutch_V1_V2 and will grab both Dutch and Dutch_V2 orders.","required":false,"schema":{"$ref":"#/components/schemas/OrderTypeQuery"}},"orderIdParam":{"name":"orderId","in":"query","required":false,"schema":{"$ref":"#/components/schemas/OrderId"}},"orderIdsParam":{"name":"orderIds","in":"query","required":false,"description":"ids split by commas","schema":{"$ref":"#/components/schemas/OrderIds"}},"swapperParam":{"name":"swapper","in":"query","description":"Filter by swapper address.","required":false,"schema":{"$ref":"#/components/schemas/Address"}},"fillerParam":{"name":"filler","in":"query","description":"Filter by filler address.","required":false,"schema":{"$ref":"#/components/schemas/Address"}},"sortKeyParam":{"name":"sortKey","in":"query","description":"Order the query results by the sort key.","required":false,"schema":{"$ref":"#/components/schemas/SortKey"}},"sortParam":{"name":"sort","in":"query","description":"Sort query. For example: `sort=gt(UNIX_TIMESTAMP)`, `sort=between(1675872827, 1675872930)`, or `lt(1675872930)`.","required":false,"schema":{"type":"string"}},"descParam":{"description":"Sort query results by sortKey in descending order.","name":"desc","in":"query","required":false,"schema":{"type":"string"}},"transactionHashesParam":{"description":"The transaction hashes.","name":"txHashes","in":"query","required":true,"style":"form","explode":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionHash"}}}},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"}}},"security":[{"apiKey":[]}]}
\ No newline at end of file
diff --git a/packages/uniswap/src/data/types.ts b/packages/uniswap/src/data/types.ts
index d95ee6efa2b..4b9a7db47d2 100644
--- a/packages/uniswap/src/data/types.ts
+++ b/packages/uniswap/src/data/types.ts
@@ -12,21 +12,3 @@ export enum SpamCode {
MEDIUM = 1, // same as isSpam = true on TokenProject
HIGH = 2, // has a URL in token name
}
-
-/**
- * These Ranking Types are not currently included in the protbufs generated types. For now will specify here
- * and remove when added to protobuf.
- * https://github.com/Uniswap/backend/blob/397033c6c63703f2dddfd5ae4bb95c54ecd0c23b/packages/services/explore/src/model/types.ts#L19-L30
- */
-export enum RankingType {
- TotalValueLocked = 'TOTAL_VALUE_LOCKED',
- MarketCap = 'MARKET_CAP',
- Volume = 'VOLUME',
- Popularity = 'POPULARITY',
-}
-
-export enum CustomRankingType {
- PricePercentChange1DayAsc = 'PRICE_PERCENT_CHANGE_1_DAY_ASC',
- PricePercentChange1DayDesc = 'PRICE_PERCENT_CHANGE_1_DAY_DESC',
- Trending = 'TRENDING',
-}
diff --git a/packages/uniswap/src/features/behaviorHistory/selectors.ts b/packages/uniswap/src/features/behaviorHistory/selectors.ts
index 0afa5d7d650..37104a0b165 100644
--- a/packages/uniswap/src/features/behaviorHistory/selectors.ts
+++ b/packages/uniswap/src/features/behaviorHistory/selectors.ts
@@ -8,9 +8,3 @@ export const selectHasDismissedBridgingWarning = (state: UniswapState): boolean
export const selectHasDismissedLowNetworkTokenWarning = (state: UniswapState): boolean =>
state.uniswapBehaviorHistory.hasDismissedLowNetworkTokenWarning === true
-
-export const selectHasDismissedUnichainColdBanner = (state: UniswapState): boolean =>
- state.uniswapBehaviorHistory.unichainPromotion?.coldBannerDismissed === true
-
-export const selectHasDismissedUnichainWarmBanner = (state: UniswapState): boolean =>
- state.uniswapBehaviorHistory.unichainPromotion?.warmBannerDismissed === true
diff --git a/packages/uniswap/src/features/behaviorHistory/slice.ts b/packages/uniswap/src/features/behaviorHistory/slice.ts
index 6b4f17379a0..f6830556dd5 100644
--- a/packages/uniswap/src/features/behaviorHistory/slice.ts
+++ b/packages/uniswap/src/features/behaviorHistory/slice.ts
@@ -8,10 +8,6 @@ export interface UniswapBehaviorHistoryState {
hasViewedBridgingBanner?: boolean
hasDismissedBridgingWarning?: boolean
hasDismissedLowNetworkTokenWarning?: boolean
- unichainPromotion?: {
- coldBannerDismissed?: boolean
- warmBannerDismissed?: boolean
- }
}
export const initialUniswapBehaviorHistoryState: UniswapBehaviorHistoryState = {
@@ -33,14 +29,6 @@ const slice = createSlice({
setHasDismissedLowNetworkTokenWarning: (state, action: PayloadAction) => {
state.hasDismissedLowNetworkTokenWarning = action.payload
},
- setHasDismissedUnichainColdBanner: (state, action: PayloadAction) => {
- state.unichainPromotion ??= {}
- state.unichainPromotion.coldBannerDismissed = action.payload
- },
- setHasDismissedUnichainWarmBanner: (state, action: PayloadAction) => {
- state.unichainPromotion ??= {}
- state.unichainPromotion.warmBannerDismissed = action.payload
- },
// Should only be used for testing
resetUniswapBehaviorHistory: (_state, _action: PayloadAction) => {
@@ -53,8 +41,6 @@ export const {
setHasViewedBridgingBanner,
setHasDismissedBridgingWarning,
setHasDismissedLowNetworkTokenWarning,
- setHasDismissedUnichainColdBanner,
- setHasDismissedUnichainWarmBanner,
resetUniswapBehaviorHistory,
} = slice.actions
diff --git a/packages/uniswap/src/features/chains/chainInfo.test.ts b/packages/uniswap/src/features/chains/chainInfo.test.ts
index 0f14be15239..33f5b5d57f9 100644
--- a/packages/uniswap/src/features/chains/chainInfo.test.ts
+++ b/packages/uniswap/src/features/chains/chainInfo.test.ts
@@ -10,7 +10,6 @@ jest.mock('uniswap/src/config', () => ({
config: {
quicknodeEndpointName: 'test-endpoint',
quicknodeEndpointToken: 'test-token-123',
- quicknodeMonadTestnetRpcUrl: 'https://test-endpoint.monad-testnet.quiknode.pro',
},
}))
@@ -80,12 +79,6 @@ describe('getQuicknodeEndpointUrl', () => {
supportedChains.forEach((chainId) => {
const url = getQuicknodeEndpointUrl(chainId)
-
- if (chainId === UniverseChainId.MonadTestnet) {
- expect(url).toBe('https://test-endpoint.monad-testnet.quiknode.pro')
- return
- }
-
expect(url).toEqual(
`https://test-endpoint${chainId === UniverseChainId.Mainnet ? '' : `.${getQuicknodeChainId(chainId)}`}.quiknode.pro/test-token-123${getQuicknodeChainIdPathSuffix(chainId)}`,
)
diff --git a/packages/uniswap/src/features/chains/chainInfo.ts b/packages/uniswap/src/features/chains/chainInfo.ts
index 6969f956977..35b546e6177 100644
--- a/packages/uniswap/src/features/chains/chainInfo.ts
+++ b/packages/uniswap/src/features/chains/chainInfo.ts
@@ -8,11 +8,9 @@ import {
BNB_LOGO,
CELO_LOGO,
ETHEREUM_LOGO,
- ETH_LOGO,
MONAD_LOGO,
OPTIMISM_LOGO,
POLYGON_LOGO,
- UNICHAIN_LOGO,
UNICHAIN_SEPOLIA_LOGO,
WORLD_CHAIN_LOGO,
ZKSYNC_LOGO,
@@ -35,7 +33,6 @@ import {
USDC_OPTIMISM,
USDC_POLYGON,
USDC_SEPOLIA,
- USDC_UNICHAIN,
USDC_UNICHAIN_SEPOLIA,
USDC_WORLD_CHAIN,
USDC_ZKSYNC,
@@ -66,7 +63,6 @@ import {
optimism,
polygon,
sepolia,
- unichainSepolia,
zkSync,
zora,
} from 'wagmi/chains'
@@ -106,8 +102,6 @@ export function getQuicknodeChainId(chainId: UniverseChainId): string {
return 'matic'
case UniverseChainId.Sepolia:
return 'ethereum-sepolia'
- case UniverseChainId.Unichain:
- return 'unichain'
case UniverseChainId.UnichainSepolia:
return 'unichain-sepolia'
case UniverseChainId.WorldChain:
@@ -133,12 +127,6 @@ export function getQuicknodeChainIdPathSuffix(chainId: UniverseChainId): string
export function getQuicknodeEndpointUrl(chainId: UniverseChainId): string {
const quicknodeChainId = getQuicknodeChainId(chainId)
-
- // TODO(WALL-5630): remove once Monad Testnet is supported by QuickNode Prism (ie GA release)
- if (chainId === UniverseChainId.MonadTestnet) {
- return config.quicknodeMonadTestnetRpcUrl
- }
-
return `https://${config.quicknodeEndpointName}${quicknodeChainId ? `.${quicknodeChainId}` : ''}.quiknode.pro/${config.quicknodeEndpointToken}${getQuicknodeChainIdPathSuffix(chainId)}`
}
@@ -157,6 +145,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 1,
blockWaitMsBeforeWarning: isInterface ? DEFAULT_MS_BEFORE_WARNING : ONE_MINUTE_MS,
bridge: undefined,
+ chainPriority: 0,
docs: 'https://docs.uniswap.org/',
elementName: ElementName.ChainEthereum,
explorer: {
@@ -176,7 +165,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
explorerLink: 'https://etherscan.io/chart/etherprice',
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L1,
pendingTransactionsRetryOptions: undefined,
@@ -224,6 +213,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 46,
blockWaitMsBeforeWarning: DEFAULT_MS_BEFORE_WARNING,
bridge: 'https://bridge.arbitrum.io/',
+ chainPriority: 1,
docs: 'https://offchainlabs.com/',
elementName: ElementName.ChainArbitrum,
explorer: {
@@ -243,7 +233,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
explorerLink: 'https://arbiscan.io/chart/etherprice',
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L2,
pendingTransactionsRetryOptions: DEFAULT_RETRY_OPTIONS,
@@ -286,6 +276,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 6,
blockWaitMsBeforeWarning: 600000,
bridge: 'https://core.app/bridge/',
+ chainPriority: 6,
docs: 'https://docs.avax.network/',
elementName: ElementName.ChainAvalanche,
explorer: {
@@ -340,6 +331,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 6,
blockWaitMsBeforeWarning: isInterface ? 1500000 : 600000,
bridge: 'https://bridge.base.org/deposit',
+ chainPriority: 4,
docs: 'https://docs.base.org/docs/',
elementName: ElementName.ChainBase,
explorer: {
@@ -358,7 +350,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
explorerLink: 'https://basescan.org/chart/etherprice',
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L2,
pendingTransactionsRetryOptions: DEFAULT_RETRY_OPTIONS,
@@ -397,6 +389,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 1,
blockWaitMsBeforeWarning: undefined,
bridge: 'https://blast.io/bridge',
+ chainPriority: 8,
docs: 'https://docs.blast.io',
elementName: ElementName.ChainBlast,
explorer: {
@@ -423,7 +416,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
symbol: 'ETH',
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
rpcUrls: {
[RPCType.Public]: { http: [getQuicknodeEndpointUrl(UniverseChainId.Blast)] },
@@ -450,6 +443,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 4,
blockWaitMsBeforeWarning: 600000,
bridge: 'https://cbridge.celer.network/1/56',
+ chainPriority: 5,
docs: 'https://docs.bnbchain.org/',
elementName: ElementName.ChainBNB,
explorer: {
@@ -506,6 +500,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 2,
blockWaitMsBeforeWarning: 600000,
bridge: 'https://www.portalbridge.com/#/transfer',
+ chainPriority: 7,
docs: 'https://docs.celo.org/',
elementName: ElementName.ChainCelo,
explorer: {
@@ -559,6 +554,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
nativeTokenBackendAddress: undefined,
},
bridge: undefined,
+ chainPriority: 0,
docs: 'https://docs.monad.xyz/',
helpCenterUrl: undefined,
label: 'Monad Testnet',
@@ -592,7 +588,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
name: 'Wrapped Monad',
symbol: 'WMON',
decimals: 18,
- address: '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701',
+ address: '0x93EACdB111FF98dE9a8Ac5823d357BBc4842aE63',
},
blockPerMainnetEpochForChainId: 1,
blockWaitMsBeforeWarning: undefined,
@@ -621,6 +617,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 6,
blockWaitMsBeforeWarning: isInterface ? 1500000 : 1200000,
bridge: 'https://app.optimism.io/bridge',
+ chainPriority: 2,
docs: 'https://optimism.io/',
elementName: ElementName.ChainOptimism,
explorer: {
@@ -640,7 +637,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
explorerLink: 'https://optimistic.etherscan.io/chart/etherprice',
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L2,
pendingTransactionsRetryOptions: DEFAULT_RETRY_OPTIONS,
@@ -678,6 +675,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
},
blockWaitMsBeforeWarning: 600000,
bridge: 'https://portal.polygon.technology/bridge',
+ chainPriority: 3,
docs: 'https://polygon.io/',
elementName: ElementName.ChainPolygon,
explorer: {
@@ -734,6 +732,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 1,
blockWaitMsBeforeWarning: undefined,
bridge: undefined,
+ chainPriority: 0,
docs: 'https://docs.uniswap.org/',
elementName: ElementName.ChainSepolia,
explorer: {
@@ -753,7 +752,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
explorerLink: 'https://sepolia.etherscan.io/chart/etherprice',
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L1,
pendingTransactionsRetryOptions: undefined,
@@ -789,63 +788,8 @@ export const UNIVERSE_CHAIN_INFO: Record = {
address: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
},
} as const satisfies UniverseChainInfo,
- [UniverseChainId.Unichain]: {
- // ...unichain, // TODO update once available from viem
- name: 'Unichain',
- id: UniverseChainId.Unichain,
- sdkId: UniswapSDKChainId.UNICHAIN,
- assetRepoNetworkName: 'unichain',
- backendChain: {
- chain: BackendChainId.Unichain as GqlChainId,
- backendSupported: true,
- isSecondaryChain: false,
- nativeTokenBackendAddress: undefined,
- },
- blockPerMainnetEpochForChainId: 6, // TODO verify to complete WALL-5243
- blockWaitMsBeforeWarning: undefined,
- bridge: 'https://www.unichain.org/bridge',
- docs: 'https://docs.unichain.org',
- elementName: ElementName.ChainUnichain,
- explorer: {
- name: 'Uniscan',
- url: 'https://uniscan.xyz/',
- },
- helpCenterUrl: undefined,
- infoLink: 'https://app.uniswap.org/explore/tokens/unichain',
- infuraPrefix: 'unichain',
- interfaceName: 'unichain',
- label: 'Unichain',
- logo: UNICHAIN_LOGO,
- nativeCurrency: {
- name: 'Unichain ETH',
- symbol: 'ETH',
- decimals: 18,
- address: DEFAULT_NATIVE_ADDRESS,
- logo: ETHEREUM_LOGO,
- },
- networkLayer: NetworkLayer.L2,
- pendingTransactionsRetryOptions: undefined,
- // TODO verify any additional RPC's to complete WALL-5243
- rpcUrls: {
- [RPCType.Public]: { http: [getQuicknodeEndpointUrl(UniverseChainId.Unichain)] },
- [RPCType.Default]: { http: [getQuicknodeEndpointUrl(UniverseChainId.Unichain)] },
- [RPCType.Interface]: { http: [getQuicknodeEndpointUrl(UniverseChainId.Unichain)] },
- },
- spotPriceStablecoinAmount: CurrencyAmount.fromRawAmount(USDC_UNICHAIN, 10_000e6),
- stablecoins: [USDC_UNICHAIN],
- statusPage: undefined,
- supportsInterfaceClientSideRouting: true,
- supportsGasEstimates: true,
- urlParam: 'unichain',
- wrappedNativeCurrency: {
- name: 'Wrapped Ether',
- symbol: 'WETH',
- decimals: 18,
- address: '0x4200000000000000000000000000000000000006',
- },
- } as const satisfies UniverseChainInfo,
[UniverseChainId.UnichainSepolia]: {
- ...unichainSepolia,
+ // ...astrochainSepolia,
name: 'Unichain Sepolia',
testnet: true,
id: UniverseChainId.UnichainSepolia,
@@ -860,8 +804,9 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 1,
blockWaitMsBeforeWarning: undefined,
bridge: undefined,
- docs: 'https://docs.unichain.org/',
- elementName: ElementName.ChainUnichainSepolia,
+ chainPriority: 0,
+ docs: 'https://docs.uniswap.org/', // need docs
+ elementName: ElementName.ChainSepolia,
explorer: {
name: 'Unichain Sepolia Explorer',
url: 'https://unichain-sepolia.blockscout.com/',
@@ -877,7 +822,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
symbol: 'ETH',
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L2,
pendingTransactionsRetryOptions: undefined,
@@ -920,6 +865,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 1, // TODO: verify
blockWaitMsBeforeWarning: undefined,
bridge: 'https://world-chain.superbridge.app/app',
+ chainPriority: 11,
docs: 'https://docs.worldcoin.org/',
elementName: ElementName.ChainWorldChain,
explorer: {
@@ -937,7 +883,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
symbol: 'ETH',
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L2,
pendingTransactionsRetryOptions: undefined,
@@ -977,6 +923,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 12,
blockWaitMsBeforeWarning: 600000,
bridge: 'https://portal.zksync.io/bridge/',
+ chainPriority: 10,
docs: 'https://docs.zksync.io/',
elementName: ElementName.ChainZkSync,
explorer: {
@@ -995,7 +942,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
symbol: 'ETH',
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
networkLayer: NetworkLayer.L2,
pendingTransactionsRetryOptions: undefined,
@@ -1031,6 +978,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
blockPerMainnetEpochForChainId: 1, // TODO: verify
blockWaitMsBeforeWarning: 600000,
bridge: 'https://bridge.zora.energy/',
+ chainPriority: 9,
docs: 'https://docs.zora.co/',
elementName: ElementName.ChainZora,
explorer: {
@@ -1049,7 +997,7 @@ export const UNIVERSE_CHAIN_INFO: Record = {
symbol: 'ETH',
decimals: 18,
address: DEFAULT_NATIVE_ADDRESS,
- logo: ETH_LOGO,
+ logo: ETHEREUM_LOGO,
},
pendingTransactionsRetryOptions: undefined,
rpcUrls: {
diff --git a/packages/uniswap/src/features/chains/hooks/useFeatureFlaggedChainIds.ts b/packages/uniswap/src/features/chains/hooks/useFeatureFlaggedChainIds.ts
index 7ea4bcc06e2..f05d52a1ec4 100644
--- a/packages/uniswap/src/features/chains/hooks/useFeatureFlaggedChainIds.ts
+++ b/packages/uniswap/src/features/chains/hooks/useFeatureFlaggedChainIds.ts
@@ -9,15 +9,14 @@ export function useFeatureFlaggedChainIds(): UniverseChainId[] {
// You can use the useFeatureFlag hook here to enable/disable chains based on feature flags.
// Example: [ChainId.BLAST]: useFeatureFlag(FeatureFlags.BLAST)
// IMPORTANT: Don't forget to also update getEnabledChainIdsSaga
+
const monadTestnetEnabled = useFeatureFlag(FeatureFlags.MonadTestnet)
- const unichainEnabled = useFeatureFlag(FeatureFlags.Unichain)
return useMemo(
() =>
filterChainIdsByFeatureFlag({
[UniverseChainId.MonadTestnet]: monadTestnetEnabled,
- [UniverseChainId.Unichain]: unichainEnabled,
}),
- [monadTestnetEnabled, unichainEnabled],
+ [monadTestnetEnabled],
)
}
diff --git a/packages/uniswap/src/features/chains/logos.tsx b/packages/uniswap/src/features/chains/logos.tsx
deleted file mode 100644
index c103714fbbc..00000000000
--- a/packages/uniswap/src/features/chains/logos.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useIsDarkMode } from 'ui/src'
-import { GeneratedIcon } from 'ui/src/components/factories/createIcon'
-import { BlockExplorer } from 'ui/src/components/icons/BlockExplorer'
-import { ArbiscanLogoDark } from 'ui/src/components/logos/ArbiscanLogoDark'
-import { ArbiscanLogoLight } from 'ui/src/components/logos/ArbiscanLogoLight'
-import { EtherscanLogoDark } from 'ui/src/components/logos/EtherscanLogoDark'
-import { EtherscanLogoLight } from 'ui/src/components/logos/EtherscanLogoLight'
-import { OpEtherscanLogoDark } from 'ui/src/components/logos/OpEtherscanLogoDark'
-import { OpEtherscanLogoLight } from 'ui/src/components/logos/OpEtherscanLogoLight'
-import { PolygonscanLogoDark } from 'ui/src/components/logos/PolygonscanLogoDark'
-import { PolygonscanLogoLight } from 'ui/src/components/logos/PolygonscanLogoLight'
-import { UniverseChainId } from 'uniswap/src/features/chains/types'
-
-// Keeping this separate from UNIVERSE_CHAIN_INFO to avoid import issues on extension content script
-export function useBlockExplorerLogo(chainId?: UniverseChainId): GeneratedIcon {
- const isDarkMode = useIsDarkMode()
- if (!chainId) {
- return BlockExplorer
- }
- return isDarkMode ? BLOCK_EXPLORER_LOGOS_DARK[chainId] : BLOCK_EXPLORER_LOGOS_LIGHT[chainId]
-}
-
-const BLOCK_EXPLORER_LOGOS_LIGHT: Record = {
- [UniverseChainId.Mainnet]: EtherscanLogoLight,
- [UniverseChainId.ArbitrumOne]: ArbiscanLogoLight,
- [UniverseChainId.Avalanche]: BlockExplorer,
- [UniverseChainId.Base]: EtherscanLogoLight,
- [UniverseChainId.Blast]: BlockExplorer,
- [UniverseChainId.Bnb]: EtherscanLogoLight,
- [UniverseChainId.Celo]: BlockExplorer,
- [UniverseChainId.MonadTestnet]: BlockExplorer,
- [UniverseChainId.Optimism]: OpEtherscanLogoLight,
- [UniverseChainId.Polygon]: PolygonscanLogoLight,
- [UniverseChainId.Sepolia]: EtherscanLogoLight,
- [UniverseChainId.Unichain]: BlockExplorer,
- [UniverseChainId.UnichainSepolia]: BlockExplorer,
- [UniverseChainId.WorldChain]: BlockExplorer,
- [UniverseChainId.Zksync]: BlockExplorer,
- [UniverseChainId.Zora]: BlockExplorer,
-}
-
-const BLOCK_EXPLORER_LOGOS_DARK: Record = {
- ...BLOCK_EXPLORER_LOGOS_LIGHT,
- [UniverseChainId.Mainnet]: EtherscanLogoDark,
- [UniverseChainId.ArbitrumOne]: ArbiscanLogoDark,
- [UniverseChainId.Base]: EtherscanLogoDark,
- [UniverseChainId.Bnb]: EtherscanLogoDark,
- [UniverseChainId.Optimism]: OpEtherscanLogoDark,
- [UniverseChainId.Polygon]: PolygonscanLogoDark,
- [UniverseChainId.Sepolia]: EtherscanLogoDark,
-}
diff --git a/packages/uniswap/src/features/chains/types.ts b/packages/uniswap/src/features/chains/types.ts
index b06a93c2531..598881852a7 100644
--- a/packages/uniswap/src/features/chains/types.ts
+++ b/packages/uniswap/src/features/chains/types.ts
@@ -1,6 +1,7 @@
import { CurrencyAmount, Token, ChainId as UniswapSDKChainId } from '@uniswap/sdk-core'
// eslint-disable-next-line no-restricted-imports
import type { ImageSourcePropType } from 'react-native'
+import { GeneratedIcon } from 'ui/src'
import { Chain as BackendChainId } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
import { ElementNameType } from 'uniswap/src/features/telemetry/constants'
import { Chain as WagmiChain } from 'wagmi/chains'
@@ -21,7 +22,6 @@ export enum UniverseChainId {
Optimism = UniswapSDKChainId.OPTIMISM,
Polygon = UniswapSDKChainId.POLYGON,
Sepolia = UniswapSDKChainId.SEPOLIA,
- Unichain = UniswapSDKChainId.UNICHAIN,
UnichainSepolia = UniswapSDKChainId.UNICHAIN_SEPOLIA,
WorldChain = UniswapSDKChainId.WORLDCHAIN,
Zksync = UniswapSDKChainId.ZKSYNC,
@@ -30,7 +30,6 @@ export enum UniverseChainId {
export const SUPPORTED_CHAIN_IDS: UniverseChainId[] = [
UniverseChainId.Mainnet,
- UniverseChainId.Unichain,
UniverseChainId.Polygon,
UniverseChainId.ArbitrumOne,
UniverseChainId.Optimism,
@@ -107,6 +106,7 @@ export interface UniverseChainInfo extends WagmiChain {
readonly blockPerMainnetEpochForChainId: number
readonly blockWaitMsBeforeWarning: number | undefined
readonly bridge?: string
+ readonly chainPriority: number // Higher priority chains show up first in the chain selector
readonly docs: string
readonly elementName: ElementNameType
readonly explorer: {
@@ -127,7 +127,7 @@ export interface UniverseChainInfo extends WagmiChain {
readonly infuraPrefix: string | undefined
readonly interfaceName: string
readonly label: string
- readonly logo: ImageSourcePropType
+ readonly logo?: ImageSourcePropType
readonly nativeCurrency: {
name: string // 'Goerli ETH',
symbol: string // 'gorETH',
@@ -151,3 +151,10 @@ export interface UniverseChainInfo extends WagmiChain {
address: string // '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6'
}
}
+
+export interface UniverseChainLogoInfo {
+ explorer: {
+ logoLight: GeneratedIcon
+ logoDark: GeneratedIcon
+ }
+}
diff --git a/packages/uniswap/src/features/chains/utils.test.ts b/packages/uniswap/src/features/chains/utils.test.ts
index ee0e2449024..3300748115b 100644
--- a/packages/uniswap/src/features/chains/utils.test.ts
+++ b/packages/uniswap/src/features/chains/utils.test.ts
@@ -116,10 +116,11 @@ describe('hexadecimalStringToInt', () => {
describe('getEnabledChains', () => {
it('returns all mainnet chains', () => {
- expect(getEnabledChains({ isTestnetModeEnabled: false, featureFlaggedChainIds: SUPPORTED_CHAIN_IDS })).toEqual({
+ const featureFlaggedChainIds = SUPPORTED_CHAIN_IDS.filter((chainId) => chainId !== UniverseChainId.WorldChain)
+
+ expect(getEnabledChains({ isTestnetModeEnabled: false, featureFlaggedChainIds })).toEqual({
chains: [
UniverseChainId.Mainnet,
- UniverseChainId.Unichain,
UniverseChainId.Polygon,
UniverseChainId.ArbitrumOne,
UniverseChainId.Optimism,
@@ -128,7 +129,6 @@ describe('getEnabledChains', () => {
UniverseChainId.Blast,
UniverseChainId.Avalanche,
UniverseChainId.Celo,
- UniverseChainId.WorldChain,
UniverseChainId.Zora,
UniverseChainId.Zksync,
],
@@ -136,10 +136,8 @@ describe('getEnabledChains', () => {
Chain.Ethereum,
Chain.Optimism,
Chain.Bnb,
- Chain.Unichain,
Chain.Polygon,
Chain.Zksync,
- Chain.Worldchain,
Chain.Base,
Chain.Arbitrum,
Chain.Celo,
diff --git a/packages/uniswap/src/features/chains/utils.ts b/packages/uniswap/src/features/chains/utils.ts
index 0dfc16dcf52..a2a226b0606 100644
--- a/packages/uniswap/src/features/chains/utils.ts
+++ b/packages/uniswap/src/features/chains/utils.ts
@@ -101,8 +101,6 @@ export function fromGraphQLChain(chain: Chain | string | undefined): UniverseCha
return UniverseChainId.Polygon
case Chain.EthereumSepolia:
return UniverseChainId.Sepolia
- case Chain.Unichain:
- return UniverseChainId.Unichain
case Chain.AstrochainSepolia:
return UniverseChainId.UnichainSepolia
case Chain.Worldchain:
@@ -144,8 +142,6 @@ export function fromUniswapWebAppLink(network: string | null): UniverseChainId |
return UniverseChainId.Polygon
case Chain.EthereumSepolia.toLowerCase():
return UniverseChainId.Sepolia
- case Chain.Unichain.toLowerCase():
- return UniverseChainId.Unichain
case Chain.AstrochainSepolia.toLowerCase():
return UniverseChainId.UnichainSepolia
case Chain.Worldchain.toLowerCase():
@@ -183,8 +179,6 @@ export function toUniswapWebAppLink(chainId: UniverseChainId): string | null {
return Chain.Polygon.toLowerCase()
case UniverseChainId.Sepolia:
return Chain.EthereumSepolia.toLowerCase()
- case UniverseChainId.Unichain:
- return Chain.Unichain.toLowerCase()
case UniverseChainId.UnichainSepolia:
return Chain.AstrochainSepolia.toLowerCase()
case UniverseChainId.WorldChain:
diff --git a/packages/uniswap/src/features/dataApi/balances.ts b/packages/uniswap/src/features/dataApi/balances.ts
index 2f7752645e2..eaf2a70788c 100644
--- a/packages/uniswap/src/features/dataApi/balances.ts
+++ b/packages/uniswap/src/features/dataApi/balances.ts
@@ -1,5 +1,5 @@
/* eslint-disable max-lines */
-import { NetworkStatus, QueryHookOptions, Reference, useApolloClient, WatchQueryFetchPolicy } from '@apollo/client'
+import { NetworkStatus, Reference, useApolloClient, WatchQueryFetchPolicy } from '@apollo/client'
import isEqual from 'lodash/isEqual'
import { useCallback, useMemo } from 'react'
import { PollingInterval } from 'uniswap/src/constants/misc'
@@ -8,7 +8,6 @@ import {
IAmount,
PortfolioBalancesDocument,
PortfolioBalancesQuery,
- PortfolioBalancesQueryVariables,
PortfolioValueModifier,
usePortfolioBalancesQuery,
} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
@@ -47,26 +46,30 @@ export type PortfolioCacheUpdater = (hidden: boolean, portfolioBalance?: Portfol
/**
* Returns all balances indexed by checksummed currencyId for a given address
* @param address
- * @param queryOptions.pollInterval optional `PollingInterval` representing polling frequency.
+ * @param pollInterval optional `PollingInterval` representing polling frequency.
* If undefined, will query once and not poll.
* NOTE:
* on TokenDetails, useBalances relies rely on usePortfolioBalances but don't need polling versions of it.
* Including polling was causing multiple polling intervals to be kicked off with usePortfolioBalances.
* Same with on Token Selector's TokenSearchResultList, since the home screen has a usePortfolioBalances polling hook,
* we don't need to duplicate the polling interval when token selector is open
- * @param queryOptions - QueryHookOptions type for usePortfolioBalancesQuery to be set if not already set internally.
+ * @param onCompleted
+ * @param fetchPolicy
*/
export function usePortfolioBalances({
address,
- ...queryOptions
+ pollInterval,
+ onCompleted,
+ fetchPolicy,
}: {
address?: Address
-} & QueryHookOptions): GqlResult<
- Record
-> & { networkStatus: NetworkStatus } {
+ pollInterval?: PollingInterval
+ onCompleted?: () => void
+ fetchPolicy?: WatchQueryFetchPolicy
+}): GqlResult> & { networkStatus: NetworkStatus } {
const { fetchPolicy: internalFetchPolicy, pollInterval: internalPollInterval } = usePlatformBasedFetchPolicy({
- fetchPolicy: queryOptions?.fetchPolicy,
- pollInterval: queryOptions?.pollInterval,
+ fetchPolicy,
+ pollInterval,
})
const valueModifiers = usePortfolioValueModifiers(address)
@@ -79,12 +82,12 @@ export function usePortfolioBalances({
refetch,
error,
} = usePortfolioBalancesQuery({
- ...queryOptions,
fetchPolicy: internalFetchPolicy,
notifyOnNetworkStatusChange: true,
+ onCompleted,
pollInterval: internalPollInterval,
variables: address ? { ownerAddress: address, valueModifiers, chains: gqlChains } : undefined,
- skip: !address || queryOptions?.skip,
+ skip: !address,
})
const persistedError = usePersistedError(loading, error)
@@ -376,7 +379,7 @@ export function useSortedPortfolioBalances({
pollInterval,
onCompleted,
}: {
- address?: Address
+ address: Address
pollInterval?: PollingInterval
onCompleted?: () => void
}): GqlResult & { networkStatus: NetworkStatus } {
diff --git a/packages/uniswap/src/features/dataApi/topTokens.ts b/packages/uniswap/src/features/dataApi/topTokens.ts
index d183d9e3b6d..fe2f0b4fb7f 100644
--- a/packages/uniswap/src/features/dataApi/topTokens.ts
+++ b/packages/uniswap/src/features/dataApi/topTokens.ts
@@ -10,7 +10,7 @@ import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import { gqlTokenToCurrencyInfo, usePersistedError } from 'uniswap/src/features/dataApi/utils'
import { useMemoCompare } from 'utilities/src/react/hooks'
-export function usePopularTokens(chainFilter: UniverseChainId, disabled?: boolean): GqlResult {
+export function usePopularTokens(chainFilter: UniverseChainId): GqlResult {
const gqlChainFilter = toGraphQLChain(chainFilter)
const isTestnet = isTestnetChain(chainFilter)
@@ -21,7 +21,7 @@ export function usePopularTokens(chainFilter: UniverseChainId, disabled?: boolea
pageSize: 100,
orderBy: TokenSortableField.Popularity,
},
- skip: isTestnet || disabled,
+ skip: isTestnet,
})
const persistedError = usePersistedError(loading, error)
diff --git a/packages/uniswap/src/features/ens/api.ts b/packages/uniswap/src/features/ens/api.ts
index 44b4683dd8b..5ae517f9623 100644
--- a/packages/uniswap/src/features/ens/api.ts
+++ b/packages/uniswap/src/features/ens/api.ts
@@ -76,29 +76,32 @@ async function getOnChainEnsFetch(params: EnsLookupParams): Promise({
- queryKey: [ONCHAIN_ENS_CACHE_KEY, type, nameOrAddress],
+ queryKey: [ONCHAIN_ENS_CACHE_KEY, chainId, type, nameOrAddress],
queryFn: nameOrAddress
- ? async (): ReturnType =>
- await getOnChainEnsFetch({ type, nameOrAddress, chainId: UniverseChainId.Mainnet })
+ ? async (): ReturnType => await getOnChainEnsFetch({ type, nameOrAddress, chainId })
: skipToken,
staleTime: 5 * ONE_MINUTE_MS,
})
}
-export function useENSName(address?: Address) {
- return useEnsQuery(EnsLookupType.Name, address)
+export function useENSName(address?: Address, chainId: UniverseChainId = UniverseChainId.Mainnet) {
+ return useEnsQuery(EnsLookupType.Name, address, chainId)
}
-export function useAddressFromEns(maybeName: string | null) {
- return useEnsQuery(EnsLookupType.Address, maybeName)
+export function useAddressFromEns(maybeName: string | null, chainId: UniverseChainId = UniverseChainId.Mainnet) {
+ return useEnsQuery(EnsLookupType.Address, maybeName, chainId)
}
-export function useENSAvatar(address?: string | null) {
- return useEnsQuery(EnsLookupType.Avatar, address)
+export function useENSAvatar(address?: string | null, chainId: UniverseChainId = UniverseChainId.Mainnet) {
+ return useEnsQuery(EnsLookupType.Avatar, address, chainId)
}
-export function useENSDescription(name?: string | null) {
- return useEnsQuery(EnsLookupType.Description, name)
+export function useENSDescription(name?: string | null, chainId: UniverseChainId = UniverseChainId.Mainnet) {
+ return useEnsQuery(EnsLookupType.Description, name, chainId)
}
-export function useENSTwitterUsername(name?: string | null) {
- return useEnsQuery(EnsLookupType.TwitterUsername, name)
+export function useENSTwitterUsername(name?: string | null, chainId: UniverseChainId = UniverseChainId.Mainnet) {
+ return useEnsQuery(EnsLookupType.TwitterUsername, name, chainId)
}
diff --git a/packages/uniswap/src/features/ens/useENS.ts b/packages/uniswap/src/features/ens/useENS.ts
index 99d82566889..5cf31b33d7f 100644
--- a/packages/uniswap/src/features/ens/useENS.ts
+++ b/packages/uniswap/src/features/ens/useENS.ts
@@ -6,17 +6,15 @@ import { ENS_SUFFIX } from 'uniswap/src/features/ens/constants'
import { getValidAddress } from 'uniswap/src/utils/addresses'
import { useDebounce } from 'utilities/src/time/timing'
-type UseENSParams = {
- nameOrAddress?: string | null
- chainId?: UniverseChainId
- autocompleteDomain?: boolean
-}
-
/**
* Given a name or address, does a lookup to resolve to an address and name
* @param nameOrAddress ENS name or address
*/
-export function useENS({ nameOrAddress, autocompleteDomain = false }: UseENSParams): {
+export function useENS(
+ chainId: UniverseChainId,
+ nameOrAddress?: string | null,
+ autocompleteDomain?: boolean,
+): {
loading: boolean
address?: string | null
name: string | null
@@ -25,9 +23,10 @@ export function useENS({ nameOrAddress, autocompleteDomain = false }: UseENSPara
const validAddress = getValidAddress(debouncedNameOrAddress, false, false)
const maybeName = validAddress ? null : debouncedNameOrAddress // if it's a valid address then it's not a name
- const { data: name, isLoading: nameFetching } = useENSName(validAddress ?? undefined)
+ const { data: name, isLoading: nameFetching } = useENSName(validAddress ?? undefined, chainId)
const { data: address, isLoading: addressFetching } = useAddressFromEns(
autocompleteDomain ? getCompletedENSName(maybeName) : maybeName,
+ chainId,
)
return {
diff --git a/packages/uniswap/src/features/fiatOnRamp/FORQuoteItem.tsx b/packages/uniswap/src/features/fiatOnRamp/FORQuoteItem.tsx
index 5a224876984..97e3fb4a06a 100644
--- a/packages/uniswap/src/features/fiatOnRamp/FORQuoteItem.tsx
+++ b/packages/uniswap/src/features/fiatOnRamp/FORQuoteItem.tsx
@@ -45,6 +45,14 @@ export function FORQuoteItem({
onPress={isLoading ? undefined : onPress}
>
diff --git a/packages/uniswap/src/features/fiatOnRamp/TokenSelectorBalanceDisplay.tsx b/packages/uniswap/src/features/fiatOnRamp/TokenSelectorBalanceDisplay.tsx
index 80e264d773a..eb4d7e904e9 100644
--- a/packages/uniswap/src/features/fiatOnRamp/TokenSelectorBalanceDisplay.tsx
+++ b/packages/uniswap/src/features/fiatOnRamp/TokenSelectorBalanceDisplay.tsx
@@ -57,7 +57,7 @@ export function TokenSelectorBalanceDisplay({
+
-
+ {t('fiatOffRamp.unsupportedToken.title')}
diff --git a/packages/uniswap/src/features/fiatOnRamp/hooks.ts b/packages/uniswap/src/features/fiatOnRamp/hooks.ts
index 0e6e072278c..a533e55c3ad 100644
--- a/packages/uniswap/src/features/fiatOnRamp/hooks.ts
+++ b/packages/uniswap/src/features/fiatOnRamp/hooks.ts
@@ -277,7 +277,6 @@ export function useParseFiatOnRampError(
error: unknown,
currencyCode: string,
balanceError: boolean,
- noQuotesReturned: boolean,
): {
errorText: string | undefined
} {
@@ -294,7 +293,7 @@ export function useParseFiatOnRampError(
return { errorText }
}
- errorText = noQuotesReturned ? t('fiatOnRamp.error.noQuotes') : t('fiatOnRamp.error.default')
+ errorText = t('fiatOnRamp.error.default')
if (isFiatOnRampApiError(error)) {
if (isInvalidRequestAmountTooLow(error)) {
diff --git a/packages/uniswap/src/features/gas/useMaxAmountSpend.ts b/packages/uniswap/src/features/gas/useMaxAmountSpend.ts
index be5e0f9c00a..d16aac4067e 100644
--- a/packages/uniswap/src/features/gas/useMaxAmountSpend.ts
+++ b/packages/uniswap/src/features/gas/useMaxAmountSpend.ts
@@ -88,7 +88,6 @@ function useGetMinAmount(chainId?: UniverseChainId, txType?: TransactionType): J
case UniverseChainId.WorldChain:
case UniverseChainId.Zora:
case UniverseChainId.Zksync:
- case UniverseChainId.Unichain:
case UniverseChainId.UnichainSepolia:
return MIN_L2_FOR_GAS
default:
diff --git a/packages/uniswap/src/features/gating/configs.ts b/packages/uniswap/src/features/gating/configs.ts
index 4979164e7ea..4c414af9b56 100644
--- a/packages/uniswap/src/features/gating/configs.ts
+++ b/packages/uniswap/src/features/gating/configs.ts
@@ -17,7 +17,6 @@ export enum DynamicConfigs {
UwuLink = 'uwulink_config',
GasStrategies = 'gas_strategy',
MainnetPrivateRpc = 'mainnet_private_rpc',
- DatadogSessionSampleRate = 'datadog_session_sample_rate',
DatadogIgnoredErrors = 'datadog_ignored_errors',
// Web
@@ -84,18 +83,12 @@ export enum DatadogIgnoredErrorsConfigKey {
Errors = 'errors',
}
-export enum DatadogSessionSampleRateKey {
- Rate = 'rate',
-}
-
export enum BlockedNftCollectionsConfigKey {
BlocklistedCollections = 'blocklistedCollections',
}
export type DatadogIgnoredErrorsValType = Array<{ messageContains: string; sampleRate: number }>
-export type DatadogSessionSampleRateValType = number
-
export type GasStrategyType = 'general' | 'swap'
export type GasStrategyConditions = {
@@ -142,7 +135,6 @@ export type DynamicConfigKeys = {
[DynamicConfigs.UwuLink]: UwuLinkConfigKey
[DynamicConfigs.MainnetPrivateRpc]: MainnetPrivateRpcConfigKey
[DynamicConfigs.DatadogIgnoredErrors]: DatadogIgnoredErrorsConfigKey
- [DynamicConfigs.DatadogSessionSampleRate]: DatadogSessionSampleRateKey
// Web
[DynamicConfigs.QuickRouteChains]: QuickRouteChainsConfigKey
diff --git a/packages/uniswap/src/features/gating/flags.ts b/packages/uniswap/src/features/gating/flags.ts
index aaffd53dcf5..d84254d7a0d 100644
--- a/packages/uniswap/src/features/gating/flags.ts
+++ b/packages/uniswap/src/features/gating/flags.ts
@@ -6,22 +6,17 @@ import { isInterface } from 'utilities/src/platform'
export enum FeatureFlags {
// Shared
Datadog,
- EmbeddedWallet,
ForAggregator,
IndicativeSwapQuotes,
InstantTokenBalanceUpdate,
MonadTestnet,
PortionFields,
SharedSwapArbitrumUniswapXExperiment,
- TokenSelectorTrendingTokens,
- TwoSecondSwapQuotePollingInterval,
- Unichain,
+ TokenProtection,
UnichainPromo,
UniswapX,
+ UniswapXPriorityOrders,
V4Swap,
- UniswapXPriorityOrdersBase,
- UniswapXPriorityOrdersOptimism,
- UniswapXPriorityOrdersUnichain,
// Wallet
DisableFiatOnRampKorea,
@@ -71,20 +66,15 @@ export enum FeatureFlags {
// These names must match the gate name on statsig
export const SHARED_FEATURE_FLAG_NAMES = new Map([
[FeatureFlags.Datadog, 'datadog'],
- [FeatureFlags.EmbeddedWallet, 'embedded_wallet'],
[FeatureFlags.IndicativeSwapQuotes, 'indicative-quotes'],
[FeatureFlags.InstantTokenBalanceUpdate, 'instant-token-balance-update'],
[FeatureFlags.MonadTestnet, 'monad_testnet'],
[FeatureFlags.PortionFields, 'portion-fields'],
[FeatureFlags.SharedSwapArbitrumUniswapXExperiment, 'shared_swap_arbitrum_uniswapx_experiment'],
- [FeatureFlags.TokenSelectorTrendingTokens, 'token_selector_trending_tokens'],
- [FeatureFlags.TwoSecondSwapQuotePollingInterval, 'two_second_swap_quote_polling_interval'],
- [FeatureFlags.Unichain, 'unichain'],
+ [FeatureFlags.TokenProtection, 'token_protection'],
[FeatureFlags.UnichainPromo, 'unichain_promo'],
[FeatureFlags.UniswapX, 'uniswapx'],
- [FeatureFlags.UniswapXPriorityOrdersBase, 'uniswapx_priority_orders_base'],
- [FeatureFlags.UniswapXPriorityOrdersOptimism, 'uniswapx_priority_orders_optimism'],
- [FeatureFlags.UniswapXPriorityOrdersUnichain, 'uniswapx_priority_orders_unichain'],
+ [FeatureFlags.UniswapXPriorityOrders, 'uniswapx_priority_orders'],
[FeatureFlags.V4Swap, 'v4_swap'],
])
diff --git a/packages/uniswap/src/features/language/constants.ts b/packages/uniswap/src/features/language/constants.ts
index 93ec3b1fa44..2409679537e 100644
--- a/packages/uniswap/src/features/language/constants.ts
+++ b/packages/uniswap/src/features/language/constants.ts
@@ -53,7 +53,6 @@ export const WALLET_SUPPORTED_LANGUAGES: Language[] = [
Language.SpanishSpain,
Language.SpanishLatam,
Language.SpanishUnitedStates,
- Language.Vietnamese,
]
// Web's supported Languages
diff --git a/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts b/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts
index ad2ece47ba7..645ac0eb336 100644
--- a/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts
+++ b/packages/uniswap/src/features/portfolio/portfolioUpdates/fetchOnChainBalances.ts
@@ -166,14 +166,7 @@ async function getDenominatedValue({
return undefined
}
- const universeChainId = fromGraphQLChain(token.chain)
-
- // Skip any unsupported chains
- if (!universeChainId) {
- return undefined
- }
-
- const stablecoinCurrency = STABLECOIN_AMOUNT_OUT[universeChainId]?.currency
+ const stablecoinCurrency = STABLECOIN_AMOUNT_OUT[chainId]?.currency
if (!stablecoinCurrency) {
logger.error(new Error('[ITBU] No `stablecoinCurrency` found'), {
diff --git a/packages/uniswap/src/features/settings/saga.ts b/packages/uniswap/src/features/settings/saga.ts
index fefaa968737..7a0a79306f1 100644
--- a/packages/uniswap/src/features/settings/saga.ts
+++ b/packages/uniswap/src/features/settings/saga.ts
@@ -9,11 +9,9 @@ export function* getEnabledChainIdsSaga() {
const isTestnetModeEnabled = yield* select(selectIsTestnetModeEnabled)
const monadTestnetEnabled = getFeatureFlag(FeatureFlags.MonadTestnet)
- const unichainEnabled = getFeatureFlag(FeatureFlags.Unichain)
const featureFlaggedChainIds = filterChainIdsByFeatureFlag({
[UniverseChainId.MonadTestnet]: monadTestnetEnabled,
- [UniverseChainId.Unichain]: unichainEnabled,
})
return yield* call(getEnabledChains, {
diff --git a/packages/uniswap/src/features/telemetry/constants/features.ts b/packages/uniswap/src/features/telemetry/constants/features.ts
index 4911c9a7c46..d275ae7a673 100644
--- a/packages/uniswap/src/features/telemetry/constants/features.ts
+++ b/packages/uniswap/src/features/telemetry/constants/features.ts
@@ -12,12 +12,11 @@ export enum UnitagEventName {
export enum FiatOffRampEventName {
FORBuySellToggled = 'Fiat OnRamp Buy Sell Toggled',
FiatOffRampAmountEntered = 'Fiat OffRamp Amount Entered',
+ FiatOffRampTransactionUpdated = 'Fiat OffRamp Transaction Updated', // TODO: must implement
FiatOffRampTokenSelected = 'Fiat OffRamp Token Selected',
- FiatOffRampUnsupportedTokenBack = 'Fiat OffRamp Unsupported Token Modal Back Button Pressed',
- FiatOffRampUnsupportedTokenSwap = 'Fiat OffRamp Unsupported Token Modal Swap Button Pressed',
FiatOffRampWidgetOpened = 'Fiat OffRamp Widget Opened',
- FiatOffRampWidgetCompleted = 'Fiat OffRamp Widget Completed',
- FiatOffRampFundsSent = 'Fiat OffRamp Funds Sent',
+ FiatOffRampWidgetCompleted = 'Fiat OffRamp Widget Completed', // TODO: must implement
+ FiatOffRampFundsSent = 'Fiat OffRamp Funds Sent', // TODO: must implement
}
export enum FiatOnRampEventName {
diff --git a/packages/uniswap/src/features/telemetry/constants/trace.ts b/packages/uniswap/src/features/telemetry/constants/trace.ts
index b2d7fd67345..aa27cb56b82 100644
--- a/packages/uniswap/src/features/telemetry/constants/trace.ts
+++ b/packages/uniswap/src/features/telemetry/constants/trace.ts
@@ -48,7 +48,6 @@ export const ModalName = {
FiatOnRampAggregator: 'fiat-on-ramp-aggregator',
FiatOnRampCountryList: 'fiat-on-ramp-country-list',
FiatOnRampTokenSelector: 'fiat-on-ramp-token-selector',
- FiatOffRampUnsupportedTokenModal: 'fiat-off-ramp-unsupported-token-modal',
ForceUpgradeModal: 'force-upgrade-modal',
ForgotPassword: 'forgot-password',
FOTInfo: 'fee-on-transfer',
@@ -80,7 +79,6 @@ export const ModalName = {
RecipientSelectSelfSendWarning: 'recipient-select-self-send-warning',
RecipientSelectSmartContractWarning: 'recipient-select-smart-contract-warning',
RecipientSelectViewOnlyWarning: 'recipient-select-view-only-warning',
- RecoveryPhrase: 'recovery-phrase-modal',
RecoverySpeedBump: 'recovery-speed-bump',
RemoveLiquidity: 'remove-liquidity',
RemoveSeedPhraseWarningModal: 'remove-seed-phrase-warning-modal',
@@ -93,7 +91,6 @@ export const ModalName = {
Send: 'send-modal',
SendReview: 'send-review-modal',
SendWarning: 'send-warning-modal',
- SignIn: 'sign-in-modal',
SlippageInfo: 'slippage-info-modal',
SlippageWarningModal: 'slippage-warning-modal',
StorageWarning: 'storage-warning-modal',
@@ -102,7 +99,6 @@ export const ModalName = {
SwapProtection: 'swap-protection-modal',
SwapReview: 'swap-review-modal',
SwapSettings: 'swap-settings-modal',
- SwapSettingsDefaultRoutingInfo: 'swap-settings-default-routing-info-modal',
SwapWarning: 'swap-warning-modal',
TestnetMode: 'testnet-mode-modal',
TestnetSwitchModal: 'testnet-switch-modal',
@@ -117,7 +113,6 @@ export const ModalName = {
UkDisclaimer: 'uk-disclaimer-modal',
UniconsDevModal: 'unicons-dev-modal',
UniconsV2: 'unicons-v2-intro-modal',
- UnichainIntro: 'unichain-intro-modal',
UniswapXInfo: 'uniswapx-info-modal',
UnitagsChange: 'unitags-change-modal',
UnitagsChangeConfirm: 'unitags-change-confirm-modal',
@@ -155,8 +150,6 @@ export const ElementName = {
BridgeNativeTokenButton: 'bridge-native-token-button',
Cancel: 'cancel',
ChainEthereum: 'chain-ethereum',
- ChainUnichain: 'chain-unichain',
- ChainUnichainSepolia: 'chain-unichain-sepolia',
ChainSepolia: 'chain-sepolia',
ChainOptimism: 'chain-optimism',
ChainArbitrum: 'chain-arbitrum',
diff --git a/packages/uniswap/src/features/telemetry/types.ts b/packages/uniswap/src/features/telemetry/types.ts
index a8c7badef1d..85138063fbe 100644
--- a/packages/uniswap/src/features/telemetry/types.ts
+++ b/packages/uniswap/src/features/telemetry/types.ts
@@ -283,8 +283,6 @@ export enum OnboardingCardLoggingName {
RecoveryBackup = 'recovery_backup',
ClaimUnitag = 'claim_unitag',
BridgingBanner = 'bridging_banner',
- UnichainBannerCold = 'unichain_banner_cold',
- UnichainBannerWarm = 'unichain_banner_warm',
}
export enum DappRequestCardLoggingName {
@@ -298,26 +296,12 @@ export type FORAmountEnteredProperties = ITraceContext & {
export type FORTokenSelectedProperties = ITraceContext & { token: string; isUnsupported?: boolean }
-export type FORUnsupportedTokenSelectedProperties = ITraceContext & { token?: string }
-
export type FORTransactionUpdatedProperties = {
status: string
externalTransactionId: string
serviceProvider: string
}
-export type FORWidgetCompletedProperties = ITraceContext & {
- externalTransactionId: Maybe
-}
-
-export type FORFundsSentProperties = ITraceContext & {
- cryptoCurrency: string
- currencyAmount: number
- serviceProvider: string
- chainId: string
- externalTransactionId: Maybe
-}
-
export type FORWidgetOpenedProperties = ITraceContext & {
countryCode?: string
countryState?: string
@@ -345,8 +329,8 @@ export type LiquidityAnalyticsProperties = ITraceContext & {
chain_id?: UniverseChainId
baseCurrencyId: string
quoteCurrencyId: string
- token0AmountUSD?: number
- token1AmountUSD?: number
+ token0AmountUSD: number
+ token1AmountUSD: number
transaction_hash: string
}
@@ -380,11 +364,10 @@ export type UniverseEventProperties = {
}
[FiatOffRampEventName.FiatOffRampAmountEntered]: FORAmountEnteredProperties
[FiatOffRampEventName.FiatOffRampTokenSelected]: FORTokenSelectedProperties
- [FiatOffRampEventName.FiatOffRampUnsupportedTokenBack]: FORUnsupportedTokenSelectedProperties
- [FiatOffRampEventName.FiatOffRampUnsupportedTokenSwap]: FORUnsupportedTokenSelectedProperties
+ [FiatOffRampEventName.FiatOffRampTransactionUpdated]: FORTransactionUpdatedProperties
[FiatOffRampEventName.FiatOffRampWidgetOpened]: FORWidgetOpenedProperties
- [FiatOffRampEventName.FiatOffRampWidgetCompleted]: FORWidgetCompletedProperties
- [FiatOffRampEventName.FiatOffRampFundsSent]: FORFundsSentProperties
+ [FiatOffRampEventName.FiatOffRampWidgetCompleted]: undefined
+ [FiatOffRampEventName.FiatOffRampFundsSent]: undefined
[FiatOnRampEventName.FiatOnRampAmountEntered]: FORAmountEnteredProperties
[FiatOnRampEventName.FiatOnRampTokenSelected]: FORTokenSelectedProperties
[FiatOnRampEventName.FiatOnRampTransactionUpdated]: FORTransactionUpdatedProperties
diff --git a/packages/uniswap/src/features/tokens/DeprecatedTokenWarningModal.tsx b/packages/uniswap/src/features/tokens/DeprecatedTokenWarningModal.tsx
new file mode 100644
index 00000000000..d12db3b19bf
--- /dev/null
+++ b/packages/uniswap/src/features/tokens/DeprecatedTokenWarningModal.tsx
@@ -0,0 +1,118 @@
+/**
+ * @deprecated
+ *
+ * TODO(WALL-4677): remove this file
+ */
+import { useTranslation } from 'react-i18next'
+import { DeprecatedButton, Flex, Text, isWeb } from 'ui/src'
+import { AppTFunction } from 'ui/src/i18n/types'
+import { imageSizes } from 'ui/src/theme'
+import { TokenLogo } from 'uniswap/src/components/CurrencyLogo/TokenLogo'
+import { Modal } from 'uniswap/src/components/modals/Modal'
+import { LearnMoreLink } from 'uniswap/src/components/text/LearnMoreLink'
+import WarningIcon from 'uniswap/src/components/warnings/WarningIcon'
+import {
+ getWarningButtonProps,
+ getWarningIconColors,
+ safetyLevelToWarningSeverity,
+} from 'uniswap/src/components/warnings/utils'
+import { uniswapUrls } from 'uniswap/src/constants/urls'
+import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
+import { ModalName } from 'uniswap/src/features/telemetry/constants'
+import { getTokenSafetyHeaderText } from 'uniswap/src/features/tokens/deprecatedSafetyUtils'
+import { TestID } from 'uniswap/src/test/fixtures/testIDs'
+
+function getTokenSafetyBodyText(safetyLevel: Maybe, t: AppTFunction): string {
+ switch (safetyLevel) {
+ case SafetyLevel.MediumWarning:
+ return t('token.safetyLevel.medium.message')
+ case SafetyLevel.StrongWarning:
+ return t('token.safetyLevel.strong.message')
+ case SafetyLevel.Blocked:
+ return t('token.safetyLevel.blocked.message')
+ default:
+ return ''
+ }
+}
+
+interface Props {
+ isVisible: boolean
+ currencyId: string
+ safetyLevel: Maybe
+ disableAccept?: boolean // only show message and close button
+ tokenLogoUrl: Maybe
+ onClose: () => void
+ onAccept: () => void
+}
+
+/**
+ * @deprecated Use TokenWarningModal instead
+ */
+export default function DeprecatedTokenWarningModal({
+ isVisible,
+ safetyLevel,
+ disableAccept,
+ tokenLogoUrl,
+ onClose,
+ onAccept,
+}: Props): JSX.Element | null {
+ const { t } = useTranslation()
+ const severity = safetyLevelToWarningSeverity(safetyLevel)
+ const { backgroundColor: warningIconBackgroundColor, textColor } = getWarningIconColors(severity)
+ const { buttonTextColor, theme } = getWarningButtonProps(severity)
+
+ // always hide accept button if blocked token
+ const hideAcceptButton = disableAccept || safetyLevel === SafetyLevel.Blocked
+
+ const closeButtonText = hideAcceptButton ? t('common.button.close') : t('common.button.back')
+
+ const showWarningIcon = safetyLevel === SafetyLevel.StrongWarning || safetyLevel === SafetyLevel.Blocked
+
+ return (
+
+
+ {showWarningIcon ? (
+
+
+
+
+
+ {getTokenSafetyHeaderText(safetyLevel, t)}
+
+
+ ) : (
+
+ )}
+
+
+ {getTokenSafetyBodyText(safetyLevel, t)}{' '}
+
+
+
+
+
+ {closeButtonText}
+
+ {!hideAcceptButton && (
+
+ {showWarningIcon ? t('common.button.understand') : t('common.button.continue')}
+
+ )}
+
+
+
+ )
+}
diff --git a/packages/uniswap/src/features/tokens/TokenWarningCard.tsx b/packages/uniswap/src/features/tokens/TokenWarningCard.tsx
index d43945fe332..cf9ba351fdc 100644
--- a/packages/uniswap/src/features/tokens/TokenWarningCard.tsx
+++ b/packages/uniswap/src/features/tokens/TokenWarningCard.tsx
@@ -3,16 +3,17 @@ import { TouchableArea } from 'ui/src'
import { InlineWarningCard } from 'uniswap/src/components/InlineWarningCard/InlineWarningCard'
import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
+import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { ElementName } from 'uniswap/src/features/telemetry/constants'
import {
TokenProtectionWarning,
+ getCardHeaderText,
+ getCardSubtitleText,
getFeeOnTransfer,
getSeverityFromTokenProtectionWarning,
getTokenProtectionWarning,
getTokenWarningSeverity,
- useCardHeaderText,
- useCardSubtitleText,
useTokenWarningCardText,
} from 'uniswap/src/features/tokens/safetyUtils'
import { currencyIdToAddress } from 'uniswap/src/utils/currencyId'
@@ -40,6 +41,8 @@ function useTokenWarningOverrides(
sellFeePercent?: number
},
): { severity: WarningSeverity; heading: string | null; description: string | null } {
+ const { t } = useTranslation()
+ const { formatPercent } = useLocalizationContext()
const { heading: headingDefault, description: descriptionDefault } = useTokenWarningCardText(currencyInfo)
const { buyFeePercent, sellFeePercent } = getFeeOnTransfer(currencyInfo?.currency)
@@ -47,7 +50,8 @@ function useTokenWarningOverrides(
? getSeverityFromTokenProtectionWarning(tokenProtectionWarningOverride)
: getTokenWarningSeverity(currencyInfo)
- const headingOverride = useCardHeaderText({
+ const headingOverride = getCardHeaderText({
+ t,
tokenProtectionWarning: tokenProtectionWarningOverride ?? TokenProtectionWarning.None,
})
@@ -55,11 +59,13 @@ function useTokenWarningOverrides(
feeOnTransferOverride?.buyFeePercent ?? buyFeePercent ?? currencyInfo?.safetyInfo?.blockaidFees?.buyFeePercent
const displayedSellFeePercent =
feeOnTransferOverride?.sellFeePercent ?? sellFeePercent ?? currencyInfo?.safetyInfo?.blockaidFees?.sellFeePercent
- const descriptionOverride = useCardSubtitleText({
+ const descriptionOverride = getCardSubtitleText({
+ t,
tokenProtectionWarning: tokenProtectionWarningOverride ?? TokenProtectionWarning.None,
tokenSymbol: currencyInfo?.currency.symbol,
buyFeePercent: displayedBuyFeePercent,
sellFeePercent: displayedSellFeePercent,
+ formatPercent,
})
const heading = tokenProtectionWarningOverride ? headingOverride : headingDefault
diff --git a/packages/uniswap/src/features/tokens/TokenWarningModal.tsx b/packages/uniswap/src/features/tokens/TokenWarningModal.tsx
index de35b0ca658..c3a92f0e2f9 100644
--- a/packages/uniswap/src/features/tokens/TokenWarningModal.tsx
+++ b/packages/uniswap/src/features/tokens/TokenWarningModal.tsx
@@ -11,23 +11,27 @@ import { LearnMoreLink } from 'uniswap/src/components/text/LearnMoreLink'
import WarningIcon from 'uniswap/src/components/warnings/WarningIcon'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
+import { FeatureFlags } from 'uniswap/src/features/gating/flags'
+import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
+import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
+import DeprecatedTokenWarningModal from 'uniswap/src/features/tokens/DeprecatedTokenWarningModal'
import { TokenWarningFlagsTable } from 'uniswap/src/features/tokens/TokenWarningFlagsTable'
import {
TokenProtectionWarning,
getFeeOnTransfer,
getFeeWarning,
getIsFeeRelatedWarning,
+ getModalHeaderText,
+ getModalSubtitleText,
getSeverityFromTokenProtectionWarning,
getShouldHaveCombinedPluralTreatment,
getTokenProtectionWarning,
getTokenWarningSeverity,
- useModalHeaderText,
- useModalSubtitleText,
} from 'uniswap/src/features/tokens/safetyUtils'
import { useDismissedTokenWarnings } from 'uniswap/src/features/tokens/slice/hooks'
-import { currencyIdToAddress } from 'uniswap/src/utils/currencyId'
+import { currencyId, currencyIdToAddress } from 'uniswap/src/utils/currencyId'
export interface FoTPercent {
buyFeePercent?: number
@@ -72,6 +76,7 @@ function TokenWarningModalContent({
onDismissTokenWarning1,
}: TokenWarningModalContentProps): JSX.Element | null {
const { t } = useTranslation()
+ const { formatPercent } = useLocalizationContext()
const tokenProtectionWarning =
feeOnTransferOverride?.buyFeePercent || feeOnTransferOverride?.sellFeePercent
@@ -98,18 +103,21 @@ function TokenWarningModalContent({
(!isFeeRelatedWarning && severity !== WarningSeverity.Low && severity !== WarningSeverity.Blocked) ||
showBlockaidFeesData
- const titleText = useModalHeaderText({
+ const titleText = getModalHeaderText({
+ t,
tokenSymbol0: tokenSymbol,
tokenSymbol1: currencyInfo1?.currency.symbol,
tokenProtectionWarning,
shouldHavePluralTreatment: shouldBeCombinedPlural,
})
- const subtitleText = useModalSubtitleText({
+ const subtitleText = getModalSubtitleText({
+ t,
tokenProtectionWarning,
tokenSymbol,
buyFeePercent: displayedBuyFeePercent,
sellFeePercent: displayedSellFeePercent,
shouldHavePluralTreatment: shouldBeCombinedPlural,
+ formatPercent,
})
const { headerText: titleTextColor } = getAlertColor(severity)
@@ -275,6 +283,7 @@ export default function TokenWarningModal({
onAcknowledge,
closeModalOnly,
}: TokenWarningModalProps): JSX.Element | null {
+ const tokenProtectionEnabled = useFeatureFlag(FeatureFlags.TokenProtection)
const colors = useSporeColors()
const [warningIndex, setWarningIndex] = useState<0 | 1>(0)
@@ -292,7 +301,7 @@ export default function TokenWarningModal({
const hasSecondWarning = Boolean(!combinedPlural && getTokenWarningSeverity(currencyInfo1) !== WarningSeverity.None)
- return (
+ return tokenProtectionEnabled ? (
+ ) : (
+
)
}
diff --git a/packages/uniswap/src/features/tokens/deprecatedSafetyUtils.ts b/packages/uniswap/src/features/tokens/deprecatedSafetyUtils.ts
new file mode 100644
index 00000000000..0c884d2fb42
--- /dev/null
+++ b/packages/uniswap/src/features/tokens/deprecatedSafetyUtils.ts
@@ -0,0 +1,20 @@
+/**
+ * @deprecated
+ *
+ * TODO(WALL-4677): remove this file
+ */
+import { AppTFunction } from 'ui/src/i18n/types'
+import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
+
+export function getTokenSafetyHeaderText(safetyLevel: Maybe, t: AppTFunction): string | undefined {
+ switch (safetyLevel) {
+ case SafetyLevel.MediumWarning:
+ return t('token.safetyLevel.medium.header')
+ case SafetyLevel.StrongWarning:
+ return t('token.safetyLevel.strong.header')
+ case SafetyLevel.Blocked:
+ return t('token.safetyLevel.blocked.header')
+ default:
+ return undefined
+ }
+}
diff --git a/packages/uniswap/src/features/tokens/safetyUtils.test.ts b/packages/uniswap/src/features/tokens/safetyUtils.test.ts
index 6f4205a00b2..5f3840c5a00 100644
--- a/packages/uniswap/src/features/tokens/safetyUtils.test.ts
+++ b/packages/uniswap/src/features/tokens/safetyUtils.test.ts
@@ -1,4 +1,3 @@
-/* eslint-disable max-lines */
import { Currency, NativeCurrency, Token } from '@uniswap/sdk-core'
import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types'
import { ProtectionResult } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
@@ -10,11 +9,8 @@ import {
getShouldHaveCombinedPluralTreatment,
getTokenProtectionWarning,
getTokenWarningSeverity,
- useCardHeaderText,
- useCardSubtitleText,
useModalHeaderText,
useModalSubtitleText,
- useTokenWarningCardText,
} from 'uniswap/src/features/tokens/safetyUtils'
jest.mock('react-i18next', () => ({
@@ -25,481 +21,383 @@ jest.mock('react-i18next', () => ({
},
}))
-const mockCurrency = {
- symbol: 'UNI',
- sellFeeBps: { toNumber: () => 0 },
- buyFeeBps: { toNumber: () => 0 },
- isToken: true,
-} as Token
-const mockNativeCurrency = { isNative: true } as NativeCurrency
-const mockSafetyInfo: SafetyInfo = {
- tokenList: TokenList.Default,
- protectionResult: ProtectionResult.Benign,
- attackType: AttackType.Other,
-}
-const mockCurrencyInfo = {
- currency: mockCurrency,
- safetyInfo: mockSafetyInfo,
-} as CurrencyInfo
-const mockNativeCurrencyInfo = {
- currency: mockNativeCurrency,
- safetyInfo: mockSafetyInfo,
-} as CurrencyInfo
-
-describe('getTokenWarningSeverity', () => {
- it('should return None when currencyInfo is fully undefined', () => {
- expect(getTokenWarningSeverity(undefined)).toBe(WarningSeverity.None)
- })
-
- it('should return Low when currencyInfo is defined but safetyInfo is undefined', () => {
- expect(getTokenWarningSeverity({ ...mockCurrencyInfo, safetyInfo: undefined })).toBe(WarningSeverity.Low)
- })
-
- it('should return Low for non-default token', () => {
- const nonDefaultCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
- }
- expect(getTokenWarningSeverity(nonDefaultCurrencyInfo)).toBe(WarningSeverity.Low)
- })
-
- it('should return Medium for spam airdrop', () => {
- const airdropCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Spam,
- attackType: AttackType.Airdrop,
- },
- }
- expect(getTokenWarningSeverity(airdropCurrencyInfo)).toBe(WarningSeverity.Medium)
- })
-
- it('should return Medium for low fee on transfer', () => {
- const lowFeeCurrencyInfo = {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 100 }, // 1%
- buyFeeBps: { toNumber: () => 100 },
- } as Currency,
- }
- expect(getTokenWarningSeverity(lowFeeCurrencyInfo)).toBe(WarningSeverity.Medium)
- })
-
- it('should return High for malicious impersonator', () => {
- const impersonatorCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Malicious,
- attackType: AttackType.Impersonator,
- },
- }
- expect(getTokenWarningSeverity(impersonatorCurrencyInfo)).toBe(WarningSeverity.High)
- })
-
- it('should return High for very high fee on transfer', () => {
- const highFeeCurrencyInfo = {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 8100 }, // 81%
- buyFeeBps: { toNumber: () => 8100 },
- } as Currency,
- }
- expect(getTokenWarningSeverity(highFeeCurrencyInfo)).toBe(WarningSeverity.High)
- })
-
- it('should return None for default token with no warnings', () => {
- expect(getTokenWarningSeverity(mockCurrencyInfo)).toBe(WarningSeverity.None)
- })
-
- it('should return None for native currency', () => {
- expect(getTokenWarningSeverity(mockNativeCurrencyInfo)).toBe(WarningSeverity.None)
- })
-
- it('should return Blocked when tokenList is Blocked', () => {
- const blockedCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.Blocked },
- }
- expect(getTokenWarningSeverity(blockedCurrencyInfo)).toBe(WarningSeverity.Blocked)
- })
-})
-
-describe('getShouldHaveCombinedPluralTreatment', () => {
- it('should return false when only one currencyInfo is provided', () => {
- expect(getShouldHaveCombinedPluralTreatment(mockCurrencyInfo)).toBe(false)
- })
-
- it('should return true when both currencyInfos have Low warning', () => {
- const lowCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
- }
- expect(getShouldHaveCombinedPluralTreatment(lowCurrencyInfo, lowCurrencyInfo)).toBe(true)
- })
-
- it('should return false when one has low warning and the other has high warning', () => {
- const lowCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
- }
- const highCurrencyInfo = {
- ...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, protectionResult: ProtectionResult.Malicious },
- }
- expect(getShouldHaveCombinedPluralTreatment(lowCurrencyInfo, highCurrencyInfo)).toBe(false)
- })
-})
-
-describe('getFeeColor', () => {
- it.each([
- [0, '$neutral1', 'no fee'],
- [0.03, '$statusWarning', 'low fee'],
- [18, '$statusCritical', 'high fee'],
- [85, '$statusCritical', 'very high fee'],
- [100, '$statusCritical', 'honeypot fee'],
- ])('should return %s for %s', (fee, expectedColor, _) => {
- expect(getFeeColor(fee)).toBe(expectedColor)
- })
-})
+describe('safetyUtils', () => {
+ const mockCurrency = {
+ symbol: 'UNI',
+ sellFeeBps: { toNumber: () => 0 },
+ buyFeeBps: { toNumber: () => 0 },
+ isToken: true,
+ } as Token
+ const mockNativeCurrency = { isNative: true } as NativeCurrency
+ const mockSafetyInfo: SafetyInfo = {
+ tokenList: TokenList.Default,
+ protectionResult: ProtectionResult.Benign,
+ attackType: AttackType.Other,
+ }
+ const mockCurrencyInfo = {
+ currency: mockCurrency,
+ safetyInfo: mockSafetyInfo,
+ } as CurrencyInfo
+ const mockNativeCurrencyInfo = {
+ currency: mockNativeCurrency,
+ safetyInfo: mockSafetyInfo,
+ } as CurrencyInfo
+
+ describe('getTokenWarningSeverity', () => {
+ it('should return None when currencyInfo is fully undefined', () => {
+ expect(getTokenWarningSeverity(undefined)).toBe(WarningSeverity.None)
+ })
-describe('getTokenProtectionWarning', () => {
- it.each([
- // Basic cases
- [undefined, TokenProtectionWarning.NonDefault, 'undefined currencyInfo -> NonDefault'],
- [
- { ...mockCurrencyInfo, safetyInfo: undefined },
- TokenProtectionWarning.NonDefault,
- 'missing safetyInfo -> NonDefault',
- ],
- [mockNativeCurrencyInfo, TokenProtectionWarning.None, 'native currency -> None'],
- [mockCurrencyInfo, TokenProtectionWarning.None, 'default token -> None'],
+ it('should return Low when currencyInfo is defined but safetyInfo is undefined', () => {
+ expect(getTokenWarningSeverity({ ...mockCurrencyInfo, safetyInfo: undefined })).toBe(WarningSeverity.Low)
+ })
- // Token list cases
- [
- {
- ...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.Blocked },
- },
- TokenProtectionWarning.Blocked,
- 'blocked token -> Blocked',
- ],
- [
- {
+ it('should return Low for non-default token', () => {
+ const nonDefaultCurrencyInfo = {
...mockCurrencyInfo,
safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
- },
- TokenProtectionWarning.NonDefault,
- 'non-default token -> NonDefault',
- ],
-
- // Fee-based cases
- [
- {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 10000 },
- buyFeeBps: { toNumber: () => 10000 },
- } as Currency,
- },
- TokenProtectionWarning.MaliciousHoneypot,
- '100% fee -> MaliciousHoneypot',
- ],
- [
- {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 8500 },
- buyFeeBps: { toNumber: () => 8500 },
- } as Currency,
- },
- TokenProtectionWarning.FotVeryHigh,
- 'high fees (85%) -> FotVeryHigh',
- ],
- [
- {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 2000 },
- buyFeeBps: { toNumber: () => 2000 },
- } as Currency,
- },
- TokenProtectionWarning.FotHigh,
- 'medium-high fees (20%) -> FotHigh',
- ],
- [
- {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 300 },
- buyFeeBps: { toNumber: () => 300 },
- } as Currency,
- },
- TokenProtectionWarning.FotLow,
- 'low fees (3%) -> FotLow',
- ],
- [
- {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: { toNumber: () => 300 },
- buyFeeBps: { toNumber: () => 8500 },
- } as Currency,
- },
- TokenProtectionWarning.FotVeryHigh,
- 'mixed fees (3% sell, 85% buy) -> FotVeryHigh',
- ],
+ }
+ expect(getTokenWarningSeverity(nonDefaultCurrencyInfo)).toBe(WarningSeverity.Low)
+ })
- // Attack type cases
- [
- {
- ...mockCurrencyInfo,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Malicious,
- attackType: AttackType.Impersonator,
- },
- },
- TokenProtectionWarning.MaliciousImpersonator,
- 'malicious impersonator attack -> MaliciousImpersonator',
- ],
- [
- {
+ it('should return Medium for spam airdrop', () => {
+ const airdropCurrencyInfo = {
...mockCurrencyInfo,
safetyInfo: {
...mockSafetyInfo,
protectionResult: ProtectionResult.Spam,
attackType: AttackType.Airdrop,
},
- },
- TokenProtectionWarning.SpamAirdrop,
- 'spam airdrop attack -> SpamAirdrop',
- ],
- [
- {
- ...mockCurrencyInfo,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Malicious,
- attackType: AttackType.Other,
- },
- },
- TokenProtectionWarning.MaliciousGeneral,
- 'other malicious attack -> MaliciousGeneral',
- ],
+ }
+ expect(getTokenWarningSeverity(airdropCurrencyInfo)).toBe(WarningSeverity.Medium)
+ })
- // Edge cases
- [
- {
+ it('should return Medium for low fee on transfer', () => {
+ const lowFeeCurrencyInfo = {
...mockCurrencyInfo,
currency: {
...mockCurrency,
- sellFeeBps: undefined,
- buyFeeBps: undefined,
+ sellFeeBps: { toNumber: () => 100 }, // 1%
+ buyFeeBps: { toNumber: () => 100 },
} as Currency,
- },
- TokenProtectionWarning.None,
- 'currency without fee properties -> None',
- ],
- [
- {
- ...mockCurrencyInfo,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Unknown,
- attackType: undefined,
- },
- } satisfies CurrencyInfo,
- TokenProtectionWarning.None,
- 'unknown protection result -> None',
- ],
- [
- {
- ...mockCurrencyInfo,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Spam,
- attackType: AttackType.HighFees,
- },
- },
- TokenProtectionWarning.FotVeryHigh,
- 'spam high fees attack -> FotVeryHigh',
- ],
- [
- {
+ }
+ expect(getTokenWarningSeverity(lowFeeCurrencyInfo)).toBe(WarningSeverity.Medium)
+ })
+
+ it('should return High for malicious impersonator', () => {
+ const impersonatorCurrencyInfo = {
...mockCurrencyInfo,
safetyInfo: {
...mockSafetyInfo,
protectionResult: ProtectionResult.Malicious,
- attackType: AttackType.HighFees,
+ attackType: AttackType.Impersonator,
},
- },
- TokenProtectionWarning.FotVeryHigh,
- 'malicious high fees attack -> FotVeryHigh',
- ],
- ])('%s', (currencyInfo, expectedWarning, _) => {
- expect(getTokenProtectionWarning(currencyInfo)).toBe(expectedWarning)
- })
-})
-
-describe('getFeeWarning', () => {
- it.each([
- [0, TokenProtectionWarning.None, '0% -> None'],
- // Low fees (0-5%)
- [0.3, TokenProtectionWarning.FotLow, '0.3% -> FotLow'],
- [0.99, TokenProtectionWarning.FotLow, '0.99% -> FotLow'],
- [5, TokenProtectionWarning.FotLow, '5% -> FotLow'],
- // High fees (15-80%)
- [15, TokenProtectionWarning.FotHigh, '15% -> FotHigh'],
- [50, TokenProtectionWarning.FotHigh, '50% -> FotHigh'],
- [79.9, TokenProtectionWarning.FotHigh, '79.9% -> FotHigh'],
- [51.23, TokenProtectionWarning.FotHigh, '51.23% -> FotHigh'],
- [67.89, TokenProtectionWarning.FotHigh, '67.89% -> FotHigh'],
- // Very high fees (80-100%)
- [80, TokenProtectionWarning.FotVeryHigh, '80% -> FotVeryHigh'],
- [90, TokenProtectionWarning.FotVeryHigh, '90% -> FotVeryHigh'],
- [84.56, TokenProtectionWarning.FotVeryHigh, '84.56% -> FotVeryHigh'],
- [99.9, TokenProtectionWarning.FotVeryHigh, '99.9% -> FotVeryHigh'],
- // Honeypot (100%)
- [100, TokenProtectionWarning.MaliciousHoneypot, '100% -> MaliciousHoneypot'],
- [100, TokenProtectionWarning.MaliciousHoneypot, '100% -> MaliciousHoneypot'],
- ])('%s', (fee, expectedWarning, _) => {
- expect(getFeeWarning(fee)).toBe(expectedWarning)
- })
-})
+ }
+ expect(getTokenWarningSeverity(impersonatorCurrencyInfo)).toBe(WarningSeverity.High)
+ })
-describe('useModalHeaderText', () => {
- it('returns null when no warning', () => {
- expect(useModalHeaderText({ tokenProtectionWarning: undefined })).toBeNull()
- })
+ it('should return High for very high fee on transfer', () => {
+ const highFeeCurrencyInfo = {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: { toNumber: () => 8100 }, // 81%
+ buyFeeBps: { toNumber: () => 8100 },
+ } as Currency,
+ }
+ expect(getTokenWarningSeverity(highFeeCurrencyInfo)).toBe(WarningSeverity.High)
+ })
- it('throws error when tokenSymbol1 provided without plural treatment', () => {
- expect(() =>
- useModalHeaderText({
- tokenProtectionWarning: TokenProtectionWarning.FotLow,
- tokenSymbol0: 'ABC',
- tokenSymbol1: 'XYZ',
- shouldHavePluralTreatment: false,
- }),
- ).toThrow('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked')
- })
+ it('should return None for default token with no warnings', () => {
+ expect(getTokenWarningSeverity(mockCurrencyInfo)).toBe(WarningSeverity.None)
+ })
- it('returns correct text for blocked tokens with plural treatment', () => {
- expect(
- useModalHeaderText({
- tokenProtectionWarning: TokenProtectionWarning.Blocked,
- tokenSymbol0: 'ABC',
- tokenSymbol1: 'XYZ',
- shouldHavePluralTreatment: true,
- }),
- ).toBe('token.safety.blocked.title.tokensNotAvailable')
- })
+ it('should return None for native currency', () => {
+ expect(getTokenWarningSeverity(mockNativeCurrencyInfo)).toBe(WarningSeverity.None)
+ })
- it('returns correct text for single blocked token', () => {
- expect(
- useModalHeaderText({
- tokenProtectionWarning: TokenProtectionWarning.Blocked,
- tokenSymbol0: 'ABC',
- }),
- ).toBe('token.safety.blocked.title.tokenNotAvailable')
+ it('should return Blocked when tokenList is Blocked', () => {
+ const blockedCurrencyInfo = {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.Blocked },
+ }
+ expect(getTokenWarningSeverity(blockedCurrencyInfo)).toBe(WarningSeverity.Blocked)
+ })
})
-})
-describe('useModalSubtitleText', () => {
- it('returns null when no warning', () => {
- expect(useModalSubtitleText({ tokenProtectionWarning: undefined })).toBeNull()
- })
+ describe('getShouldHaveCombinedPluralTreatment', () => {
+ it('should return false when only one currencyInfo is provided', () => {
+ expect(getShouldHaveCombinedPluralTreatment(mockCurrencyInfo)).toBe(false)
+ })
- it('returns correct text for honeypot warning', () => {
- expect(
- useModalSubtitleText({
- tokenProtectionWarning: TokenProtectionWarning.MaliciousHoneypot,
- }),
- ).toBe('token.safety.warning.honeypot.message')
- })
+ it('should return true when both currencyInfos have Low warning', () => {
+ const lowCurrencyInfo = {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
+ }
+ expect(getShouldHaveCombinedPluralTreatment(lowCurrencyInfo, lowCurrencyInfo)).toBe(true)
+ })
- it('returns correct text for non-default warning', () => {
- expect(
- useModalSubtitleText({
- tokenProtectionWarning: TokenProtectionWarning.NonDefault,
- }),
- ).toBe('token.safety.warning.medium.heading.named')
+ it('should return false when one has low warning and the other has high warning', () => {
+ const lowCurrencyInfo = {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
+ }
+ const highCurrencyInfo = {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, protectionResult: ProtectionResult.Malicious },
+ }
+ expect(getShouldHaveCombinedPluralTreatment(lowCurrencyInfo, highCurrencyInfo)).toBe(false)
+ })
})
-})
-describe('useTokenWarningCardText', () => {
- it('returns null when no warning', () => {
- expect(useTokenWarningCardText({ ...mockCurrencyInfo, safetyInfo: undefined })).toEqual({
- description: null,
- heading: null,
+ describe('useModalHeaderText', () => {
+ it('should return null for default token with no warnings', () => {
+ expect(useModalHeaderText(mockCurrencyInfo)).toBeNull()
})
- })
- it('returns correct text for spam airdrop warning', () => {
- expect(
- useTokenWarningCardText({
+ it('should return appropriate text for blocked token', () => {
+ const blockedCurrencyInfo = {
...mockCurrencyInfo,
- safetyInfo: { ...mockSafetyInfo, protectionResult: ProtectionResult.Spam, attackType: AttackType.Airdrop },
- }),
- ).toEqual({ heading: 'token.safety.warning.spam.title', description: 'token.safety.warning.spam.message' })
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.Blocked },
+ }
+ expect(useModalHeaderText(blockedCurrencyInfo)).toBe('token.safety.blocked.title.tokenNotAvailable')
+ })
})
- it('returns correct text for fee warning with blockaid fees when no fee override or token fees', () => {
- const currencyInfoWithBlockaidFees = {
- ...mockCurrencyInfo,
- currency: {
- ...mockCurrency,
- sellFeeBps: undefined,
- buyFeeBps: undefined,
- } as Token,
- safetyInfo: {
- ...mockSafetyInfo,
- protectionResult: ProtectionResult.Malicious,
- attackType: AttackType.HighFees,
- blockaidFees: {
- sellFeePercent: 15,
- },
- },
- }
- expect(useTokenWarningCardText(currencyInfoWithBlockaidFees)).toEqual({
- heading: 'token.safety.warning.fotVeryHigh.title',
- description: 'token.safety.warning.tokenChargesFee.sell.message',
+ describe('useModalSubtitleText', () => {
+ it('should return null for default token with no warnings', () => {
+ expect(useModalSubtitleText(mockCurrencyInfo)).toBeNull()
})
- })
-})
-describe('useCardHeaderText', () => {
- it('returns null when no warning', () => {
- expect(useCardHeaderText({ tokenProtectionWarning: TokenProtectionWarning.None })).toBeNull()
+ it('should return appropriate text for non-default token', () => {
+ const nonDefaultCurrencyInfo = {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
+ }
+ expect(useModalSubtitleText(nonDefaultCurrencyInfo)).toBe('token.safety.warning.medium.heading.named')
+ })
})
- it('returns correct text for high fee warning', () => {
- expect(
- useCardHeaderText({
- tokenProtectionWarning: TokenProtectionWarning.FotHigh,
- }),
- ).toBe('token.safety.warning.fotHigh.title')
+ describe('getFeeColor', () => {
+ it.each([
+ [0, '$neutral1', 'no fee'],
+ [0.03, '$statusWarning', 'low fee'],
+ [10, '$statusCritical', 'high fee'],
+ [85, '$statusCritical', 'very high fee'],
+ [100, '$statusCritical', 'honeypot fee'],
+ ])('should return %s for %s', (fee, expectedColor, _) => {
+ expect(getFeeColor(fee)).toBe(expectedColor)
+ })
})
-})
-describe('useCardSubtitleText', () => {
- it('returns null when no warning', () => {
- expect(useCardSubtitleText({ tokenProtectionWarning: TokenProtectionWarning.None })).toBeNull()
+ describe('getTokenProtectionWarning', () => {
+ it.each([
+ // Basic cases
+ [undefined, TokenProtectionWarning.NonDefault, 'undefined currencyInfo -> NonDefault'],
+ [
+ { ...mockCurrencyInfo, safetyInfo: undefined },
+ TokenProtectionWarning.NonDefault,
+ 'missing safetyInfo -> NonDefault',
+ ],
+ [mockNativeCurrencyInfo, TokenProtectionWarning.None, 'native currency -> None'],
+ [mockCurrencyInfo, TokenProtectionWarning.None, 'default token -> None'],
+
+ // Token list cases
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.Blocked },
+ },
+ TokenProtectionWarning.Blocked,
+ 'blocked token -> Blocked',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: { ...mockSafetyInfo, tokenList: TokenList.NonDefault },
+ },
+ TokenProtectionWarning.NonDefault,
+ 'non-default token -> NonDefault',
+ ],
+
+ // Fee-based cases
+ [
+ {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: { toNumber: () => 10000 },
+ buyFeeBps: { toNumber: () => 10000 },
+ } as Currency,
+ },
+ TokenProtectionWarning.MaliciousHoneypot,
+ '100% fee -> MaliciousHoneypot',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: { toNumber: () => 8500 },
+ buyFeeBps: { toNumber: () => 8500 },
+ } as Currency,
+ },
+ TokenProtectionWarning.FotVeryHigh,
+ 'high fees (85%) -> FotVeryHigh',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: { toNumber: () => 2000 },
+ buyFeeBps: { toNumber: () => 2000 },
+ } as Currency,
+ },
+ TokenProtectionWarning.FotHigh,
+ 'medium-high fees (20%) -> FotHigh',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: { toNumber: () => 300 },
+ buyFeeBps: { toNumber: () => 300 },
+ } as Currency,
+ },
+ TokenProtectionWarning.FotLow,
+ 'low fees (3%) -> FotLow',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: { toNumber: () => 300 },
+ buyFeeBps: { toNumber: () => 8500 },
+ } as Currency,
+ },
+ TokenProtectionWarning.FotVeryHigh,
+ 'mixed fees (3% sell, 85% buy) -> FotVeryHigh',
+ ],
+
+ // Attack type cases
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: {
+ ...mockSafetyInfo,
+ protectionResult: ProtectionResult.Malicious,
+ attackType: AttackType.Impersonator,
+ },
+ },
+ TokenProtectionWarning.MaliciousImpersonator,
+ 'malicious impersonator attack -> MaliciousImpersonator',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: {
+ ...mockSafetyInfo,
+ protectionResult: ProtectionResult.Spam,
+ attackType: AttackType.Airdrop,
+ },
+ },
+ TokenProtectionWarning.SpamAirdrop,
+ 'spam airdrop attack -> SpamAirdrop',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: {
+ ...mockSafetyInfo,
+ protectionResult: ProtectionResult.Malicious,
+ attackType: AttackType.Other,
+ },
+ },
+ TokenProtectionWarning.MaliciousGeneral,
+ 'other malicious attack -> MaliciousGeneral',
+ ],
+
+ // Edge cases
+ [
+ {
+ ...mockCurrencyInfo,
+ currency: {
+ ...mockCurrency,
+ sellFeeBps: undefined,
+ buyFeeBps: undefined,
+ } as Currency,
+ },
+ TokenProtectionWarning.None,
+ 'currency without fee properties -> None',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: {
+ ...mockSafetyInfo,
+ protectionResult: ProtectionResult.Unknown,
+ attackType: undefined,
+ },
+ } satisfies CurrencyInfo,
+ TokenProtectionWarning.None,
+ 'unknown protection result -> None',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: {
+ ...mockSafetyInfo,
+ protectionResult: ProtectionResult.Spam,
+ attackType: AttackType.HighFees,
+ },
+ },
+ TokenProtectionWarning.FotVeryHigh,
+ 'spam high fees attack -> FotVeryHigh',
+ ],
+ [
+ {
+ ...mockCurrencyInfo,
+ safetyInfo: {
+ ...mockSafetyInfo,
+ protectionResult: ProtectionResult.Malicious,
+ attackType: AttackType.HighFees,
+ },
+ },
+ TokenProtectionWarning.FotVeryHigh,
+ 'malicious high fees attack -> FotVeryHigh',
+ ],
+ ])('%s', (currencyInfo, expectedWarning, _) => {
+ expect(getTokenProtectionWarning(currencyInfo)).toBe(expectedWarning)
+ })
})
- it('returns correct text for impersonator warning', () => {
- expect(
- useCardSubtitleText({
- tokenProtectionWarning: TokenProtectionWarning.MaliciousImpersonator,
- }),
- ).toBe('token.safety.warning.malicious.impersonator.message.short')
+ describe('getFeeWarning', () => {
+ it.each([
+ [0, TokenProtectionWarning.None, '0% -> None'],
+ // Low fees (0-5%)
+ [0.3, TokenProtectionWarning.FotLow, '0.3% -> FotLow'],
+ [4.2, TokenProtectionWarning.FotLow, '4.2% -> FotLow'],
+ [0.99, TokenProtectionWarning.FotLow, '0.99% -> FotLow'],
+ // High fees (5-80%)
+ [5, TokenProtectionWarning.FotHigh, '5% -> FotHigh'],
+ [50, TokenProtectionWarning.FotHigh, '50% -> FotHigh'],
+ [79.9, TokenProtectionWarning.FotHigh, '79.9% -> FotHigh'],
+ [51.23, TokenProtectionWarning.FotHigh, '51.23% -> FotHigh'],
+ [67.89, TokenProtectionWarning.FotHigh, '67.89% -> FotHigh'],
+ // Very high fees (80-100%)
+ [80, TokenProtectionWarning.FotVeryHigh, '80% -> FotVeryHigh'],
+ [90, TokenProtectionWarning.FotVeryHigh, '90% -> FotVeryHigh'],
+ [84.56, TokenProtectionWarning.FotVeryHigh, '84.56% -> FotVeryHigh'],
+ [99.9, TokenProtectionWarning.FotVeryHigh, '99.9% -> FotVeryHigh'],
+ // Honeypot (100%)
+ [100, TokenProtectionWarning.MaliciousHoneypot, '100% -> MaliciousHoneypot'],
+ [100, TokenProtectionWarning.MaliciousHoneypot, '100% -> MaliciousHoneypot'],
+ ])('%s', (fee, expectedWarning, _) => {
+ expect(getFeeWarning(fee)).toBe(expectedWarning)
+ })
})
})
diff --git a/packages/uniswap/src/features/tokens/safetyUtils.ts b/packages/uniswap/src/features/tokens/safetyUtils.ts
index 18f84979acd..222c196451a 100644
--- a/packages/uniswap/src/features/tokens/safetyUtils.ts
+++ b/packages/uniswap/src/features/tokens/safetyUtils.ts
@@ -1,5 +1,6 @@
/* eslint-disable consistent-return */
import { Currency, NativeCurrency } from '@uniswap/sdk-core'
+import { TFunction } from 'i18next'
import { useTranslation } from 'react-i18next'
import { ColorTokens } from 'ui/src'
import { getAlertColor } from 'uniswap/src/components/modals/WarningModal/getAlertColor'
@@ -25,7 +26,7 @@ export enum TokenProtectionWarning {
export const TOKEN_PROTECTION_FOT_HONEYPOT_BREAKPOINT = 100
export const TOKEN_PROTECTION_FOT_HIGH_FEE_BREAKPOINT = 80
-export const TOKEN_PROTECTION_FOT_FEE_BREAKPOINT = 15
+export const TOKEN_PROTECTION_FOT_FEE_BREAKPOINT = 5
// Gets the FoT percentages from Currency, populated by our internal fees DB
export function getFeeOnTransfer(currency?: Currency): {
@@ -172,25 +173,39 @@ export function getShouldHaveCombinedPluralTreatment(
return plural ?? false
}
-export function useModalHeaderText({
+export function useModalHeaderText(currencyInfo0: CurrencyInfo, currencyInfo1?: CurrencyInfo): string | null {
+ const shouldHavePluralTreatment = getShouldHaveCombinedPluralTreatment(currencyInfo0, currencyInfo1)
+ if (!shouldHavePluralTreatment && currencyInfo1) {
+ throw new Error('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked')
+ }
+
+ const { t } = useTranslation()
+ const tokenProtectionWarning = getTokenProtectionWarning(currencyInfo0)
+ if (!tokenProtectionWarning) {
+ return null
+ }
+
+ const tokenSymbol0 = currencyInfo0.currency?.symbol
+ const tokenSymbol1 = currencyInfo1?.currency?.symbol
+ return getModalHeaderText({ t, tokenSymbol0, tokenSymbol1, tokenProtectionWarning, shouldHavePluralTreatment })
+}
+
+export function getModalHeaderText({
+ t,
tokenProtectionWarning,
tokenSymbol0,
tokenSymbol1,
shouldHavePluralTreatment,
}: {
+ t: TFunction
tokenProtectionWarning?: TokenProtectionWarning
tokenSymbol0?: string
tokenSymbol1?: string
shouldHavePluralTreatment?: boolean
}): string | null {
- const { t } = useTranslation()
-
if (!tokenProtectionWarning) {
return null
}
- if (!shouldHavePluralTreatment && tokenSymbol1) {
- throw new Error('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked')
- }
switch (tokenProtectionWarning) {
case TokenProtectionWarning.Blocked:
return shouldHavePluralTreatment
@@ -220,37 +235,78 @@ export function useModalHeaderText({
}
}
-// eslint-disable-next-line complexity
-export function useModalSubtitleText({
+export function useModalSubtitleText(currencyInfo0: CurrencyInfo, currencyInfo1?: CurrencyInfo): string | null {
+ const shouldHavePluralTreatment = getShouldHaveCombinedPluralTreatment(currencyInfo0, currencyInfo1)
+ if (!shouldHavePluralTreatment && currencyInfo1) {
+ throw new Error('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked')
+ }
+ const { t } = useTranslation()
+ const { formatPercent } = useLocalizationContext()
+ const tokenProtectionWarning = getTokenProtectionWarning(currencyInfo0)
+ const { buyFeePercent, sellFeePercent } = getFeeOnTransfer(currencyInfo0.currency)
+ return getModalSubtitleText({
+ t,
+ tokenProtectionWarning,
+ tokenSymbol: currencyInfo0.currency.symbol,
+ buyFeePercent,
+ sellFeePercent,
+ shouldHavePluralTreatment,
+ formatPercent,
+ })
+}
+
+export function getModalSubtitleText({
+ t,
tokenProtectionWarning,
tokenSymbol,
buyFeePercent,
sellFeePercent,
shouldHavePluralTreatment,
+ formatPercent,
}: {
+ t: TFunction
tokenProtectionWarning: TokenProtectionWarning | undefined
tokenSymbol?: string
buyFeePercent?: number
sellFeePercent?: number
shouldHavePluralTreatment?: boolean
+ formatPercent: (value: Maybe) => string
}): string | null {
- const { formatPercent } = useLocalizationContext()
- const { t } = useTranslation()
-
if (!tokenProtectionWarning) {
return null
}
const formattedBuyFeePercent = buyFeePercent && buyFeePercent > 0 ? formatPercent(buyFeePercent) : undefined
const formattedSellFeePercent = sellFeePercent && sellFeePercent > 0 ? formatPercent(sellFeePercent) : undefined
+ const warningCopy = getModalSubtitleTokenWarningText({
+ t,
+ tokenProtectionWarning,
+ tokenSymbol,
+ formattedBuyFeePercent,
+ formattedSellFeePercent,
+ shouldHavePluralTreatment,
+ })
+ return warningCopy
+}
+export function getModalSubtitleTokenWarningText({
+ t,
+ tokenProtectionWarning,
+ tokenSymbol,
+ formattedBuyFeePercent,
+ formattedSellFeePercent,
+ shouldHavePluralTreatment,
+}: {
+ t: TFunction
+ tokenProtectionWarning: TokenProtectionWarning
+ tokenSymbol?: string
+ formattedBuyFeePercent?: string
+ formattedSellFeePercent?: string
+ shouldHavePluralTreatment?: boolean
+}): string | null {
switch (tokenProtectionWarning) {
case TokenProtectionWarning.Blocked:
- return isInterface
- ? shouldHavePluralTreatment
- ? t('token.safety.warning.blocked.description.default_other')
- : t('token.safety.warning.blocked.description.default_one')
- : t('token.safetyLevel.blocked.message')
+ return t('token.safetyLevel.blocked.message')
case TokenProtectionWarning.MaliciousHoneypot:
return t('token.safety.warning.honeypot.message', { tokenSymbol })
case TokenProtectionWarning.MaliciousGeneral:
@@ -295,9 +351,10 @@ export function useModalSubtitleText({
)
}
case TokenProtectionWarning.NonDefault:
- return shouldHavePluralTreatment
- ? t('token.safetyLevel.medium.message.plural')
- : t('token.safety.warning.medium.heading.named', { tokenSymbol })
+ if (shouldHavePluralTreatment) {
+ return t('token.safetyLevel.medium.message.plural')
+ }
+ return t('token.safety.warning.medium.heading.named', { tokenSymbol })
case TokenProtectionWarning.None:
return null
}
@@ -307,37 +364,40 @@ export function useTokenWarningCardText(currencyInfo: Maybe): {
heading: string | null
description: string | null
} {
- const tokenProtectionWarning = getTokenProtectionWarning(currencyInfo)
- const { buyFeePercent, sellFeePercent } = getFeeOnTransfer(currencyInfo?.currency)
-
- // If our token fees DB does not have fees data but Blockaid does, display Blockaid's fees data
- const displayedBuyFeePercent = buyFeePercent ?? currencyInfo?.safetyInfo?.blockaidFees?.buyFeePercent
- const displayedSellFeePercent = sellFeePercent ?? currencyInfo?.safetyInfo?.blockaidFees?.sellFeePercent
- const heading = useCardHeaderText({ tokenProtectionWarning })
- const description = useCardSubtitleText({
- tokenProtectionWarning,
- tokenSymbol: currencyInfo?.currency.symbol,
- buyFeePercent: displayedBuyFeePercent,
- sellFeePercent: displayedSellFeePercent,
- })
- if (!currencyInfo || !currencyInfo?.safetyInfo) {
+ const { t } = useTranslation()
+ const { formatPercent } = useLocalizationContext()
+ if (!currencyInfo) {
return {
heading: null,
description: null,
}
}
+ const tokenProtectionWarning = getTokenProtectionWarning(currencyInfo)
+ const { buyFeePercent, sellFeePercent } = getFeeOnTransfer(currencyInfo.currency)
+
+ // If our token fees DB does not have fees data but Blockaid does, display Blockaid's fees data
+ const displayedBuyFeePercent = buyFeePercent ?? currencyInfo?.safetyInfo?.blockaidFees?.buyFeePercent
+ const displayedSellFeePercent = sellFeePercent ?? currencyInfo?.safetyInfo?.blockaidFees?.sellFeePercent
return {
- heading,
- description,
+ heading: getCardHeaderText({ t, tokenProtectionWarning }),
+ description: getCardSubtitleText({
+ t,
+ tokenProtectionWarning,
+ tokenSymbol: currencyInfo.currency.symbol,
+ buyFeePercent: displayedBuyFeePercent,
+ sellFeePercent: displayedSellFeePercent,
+ formatPercent,
+ }),
}
}
-export function useCardHeaderText({
+export function getCardHeaderText({
+ t,
tokenProtectionWarning,
}: {
+ t: TFunction
tokenProtectionWarning: TokenProtectionWarning
}): string | null {
- const { t } = useTranslation()
switch (tokenProtectionWarning) {
case TokenProtectionWarning.MaliciousHoneypot:
return t('token.safety.warning.honeypot.title')
@@ -360,20 +420,21 @@ export function useCardHeaderText({
}
}
-export function useCardSubtitleText({
+export function getCardSubtitleText({
+ t,
tokenProtectionWarning,
tokenSymbol,
buyFeePercent,
sellFeePercent,
+ formatPercent,
}: {
+ t: TFunction
tokenProtectionWarning: TokenProtectionWarning
tokenSymbol?: string
buyFeePercent?: number
sellFeePercent?: number
+ formatPercent: (value: Maybe) => string
}): string | null {
- const { t } = useTranslation()
- const { formatPercent } = useLocalizationContext()
-
const formattedBuyFeePercent = buyFeePercent && buyFeePercent > 0 ? formatPercent(buyFeePercent) : undefined
const formattedSellFeePercent = sellFeePercent && sellFeePercent > 0 ? formatPercent(sellFeePercent) : undefined
switch (tokenProtectionWarning) {
diff --git a/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPad.native.tsx b/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPad.native.tsx
index c01a41c0091..e9a42e0fc82 100644
--- a/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPad.native.tsx
+++ b/packages/uniswap/src/features/transactions/DecimalPadInput/DecimalPad.native.tsx
@@ -8,7 +8,6 @@ import { AnimatedFlex } from 'ui/src/components/layout/AnimatedFlex'
import { fonts, iconSizes, spacing } from 'ui/src/theme'
import { useAppFiatCurrencyInfo } from 'uniswap/src/features/fiatCurrency/hooks'
import { DecimalPadProps, KeyAction, KeyLabel } from 'uniswap/src/features/transactions/DecimalPadInput/types'
-import { TestID } from 'uniswap/src/test/fixtures/testIDs'
const KEY_PRESS_ANIMATION_DURATION_MS = 150
@@ -16,7 +15,6 @@ type KeyProps = {
action: KeyAction
label: KeyLabel
hidden?: boolean
- testID?: string
}
type SizeMultiplier = {
@@ -53,70 +51,36 @@ export const DecimalPad = memo(function DecimalPad({
{
label: '1',
action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber1,
},
{
label: '2',
action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber2,
},
{
label: '3',
action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber3,
},
],
[
- {
- label: '4',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber4,
- },
- {
- label: '5',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber5,
- },
- {
- label: '6',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber6,
- },
+ { label: '4', action: KeyAction.Insert },
+ { label: '5', action: KeyAction.Insert },
+ { label: '6', action: KeyAction.Insert },
],
[
- {
- label: '7',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber7,
- },
- {
- label: '8',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber8,
- },
- {
- label: '9',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber9,
- },
+ { label: '7', action: KeyAction.Insert },
+ { label: '8', action: KeyAction.Insert },
+ { label: '9', action: KeyAction.Insert },
],
[
{
label: '.',
action: KeyAction.Insert,
hidden: hideDecimal,
- testID: TestID.DecimalPadDecimal,
- },
- {
- label: '0',
- action: KeyAction.Insert,
- testID: TestID.DecimalPadNumber0,
- align: 'center',
},
+ { label: '0', action: KeyAction.Insert, align: 'center' },
{
label: 'backspace',
action: KeyAction.Delete,
- testID: TestID.DecimalPadBackspace,
},
],
]
@@ -213,7 +177,6 @@ const KeyButton = memo(function KeyButton({
onPress,
onLongPressStart,
onLongPressEnd,
- testID,
}: KeyButtonProps): JSX.Element {
const { decimalSeparator } = useAppFiatCurrencyInfo()
@@ -265,7 +228,6 @@ const KeyButton = memo(function KeyButton({
height="100%"
px={spacing.spacing16 * sizeMultiplier.padding}
py={spacing.spacing12 * sizeMultiplier.padding}
- testID={testID || label}
>
{label === 'backspace' ? (
diff --git a/packages/uniswap/src/features/transactions/TransactionDetails/TransactionDetails.tsx b/packages/uniswap/src/features/transactions/TransactionDetails/TransactionDetails.tsx
index 7b71fd0e9e9..c6834b042a4 100644
--- a/packages/uniswap/src/features/transactions/TransactionDetails/TransactionDetails.tsx
+++ b/packages/uniswap/src/features/transactions/TransactionDetails/TransactionDetails.tsx
@@ -12,6 +12,8 @@ import { Warning } from 'uniswap/src/components/modals/WarningModal/types'
import { TransactionFailureReason } from 'uniswap/src/data/tradingApi/__generated__'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { GasFeeResult } from 'uniswap/src/features/gas/types'
+import { FeatureFlags } from 'uniswap/src/features/gating/flags'
+import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { FeeOnTransferFeeGroup } from 'uniswap/src/features/transactions/TransactionDetails/FeeOnTransferFee'
import { SwapFee } from 'uniswap/src/features/transactions/TransactionDetails/SwapFee'
@@ -88,6 +90,7 @@ export function TransactionDetails({
RateInfo,
}: PropsWithChildren): JSX.Element {
const { t } = useTranslation()
+ const tokenProtectionEnabled = useFeatureFlag(FeatureFlags.TokenProtection)
const [showChildren, setShowChildren] = useState(showExpandedChildren)
const onPressToggleShowChildren = (): void => {
@@ -147,7 +150,7 @@ export function TransactionDetails({
) : null}
- {setTokenWarningChecked && tokenWarningProps && (
+ {tokenProtectionEnabled && setTokenWarningChecked && tokenWarningProps && (
{
- if (!currency || !price || !isUniverseChainId(currency.chainId)) {
+ if (!currency || !price) {
return undefined
}
diff --git a/packages/uniswap/src/features/transactions/liquidity/types.ts b/packages/uniswap/src/features/transactions/liquidity/types.ts
index ebcfde0a52a..8a75b33f771 100644
--- a/packages/uniswap/src/features/transactions/liquidity/types.ts
+++ b/packages/uniswap/src/features/transactions/liquidity/types.ts
@@ -58,7 +58,6 @@ export interface IncreasePositionTxAndGasInfo extends BaseLiquidityTxAndGasInfo
type: LiquidityTransactionType.Increase
unsigned: boolean
increasePositionRequestArgs: IncreaseLPPositionRequest | undefined
- dependentAmount: string | undefined
}
export interface DecreasePositionTxAndGasInfo extends BaseLiquidityTxAndGasInfo {
@@ -69,7 +68,6 @@ export interface CreatePositionTxAndGasInfo extends BaseLiquidityTxAndGasInfo {
type: LiquidityTransactionType.Create
unsigned: boolean
createPositionRequestArgs: CreateLPPositionRequest | undefined
- dependentAmount: string | undefined
}
export interface MigrateV3PositionTxAndGasInfo extends BaseLiquidityTxAndGasInfo {
diff --git a/packages/uniswap/src/features/transactions/selectors.ts b/packages/uniswap/src/features/transactions/selectors.ts
index 2a302f91eea..96ee41ece57 100644
--- a/packages/uniswap/src/features/transactions/selectors.ts
+++ b/packages/uniswap/src/features/transactions/selectors.ts
@@ -55,7 +55,6 @@ export const makeSelectAddressTransactions = (): Selector<
return unique(flattenObjectOfObjects(addressTransactions), (tx, _, self) => {
// Remove dummy local FOR transactions from TransactionList, notification badge, etc.
- // this is what prevents the local transactions from actually appearing in the activity tab.
if (tx.typeInfo.type === TransactionType.LocalOnRamp || tx.typeInfo.type === TransactionType.LocalOffRamp) {
return false
}
diff --git a/packages/uniswap/src/features/transactions/swap/analytics.ts b/packages/uniswap/src/features/transactions/swap/analytics.ts
index 65edd276940..f30eec2f0b0 100644
--- a/packages/uniswap/src/features/transactions/swap/analytics.ts
+++ b/packages/uniswap/src/features/transactions/swap/analytics.ts
@@ -3,7 +3,6 @@ import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import { useEffect } from 'react'
import { useAccountMeta } from 'uniswap/src/contexts/UniswapContext'
import { Routing } from 'uniswap/src/data/tradingApi/__generated__'
-import { getChainLabel } from 'uniswap/src/features/chains/utils'
import { usePortfolioTotalValue } from 'uniswap/src/features/dataApi/balances'
import { LocalizationContextState, useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
@@ -225,13 +224,12 @@ export function logSwapQuoteFetch({
sendAnalyticsEvent(SwapEventName.SWAP_QUOTE_FETCH, { chainId, isQuickRoute, ...performanceMetrics })
logger.info('analytics', 'logSwapQuoteFetch', SwapEventName.SWAP_QUOTE_FETCH, {
chainId,
- // we explicitly log it here to show on Datadog dashboard
- chainLabel: getChainLabel(chainId),
isQuickRoute,
...performanceMetrics,
})
}
+// eslint-disable-next-line consistent-return
export function tradeRoutingToFillType({
routing,
indicative,
@@ -256,7 +254,5 @@ export function tradeRoutingToFillType({
return 'classic'
case Routing.BRIDGE:
return 'bridge'
- default:
- return 'none'
}
}
diff --git a/packages/uniswap/src/features/transactions/swap/contexts/SwapFormContext.tsx b/packages/uniswap/src/features/transactions/swap/contexts/SwapFormContext.tsx
index f2591aaa877..3f4d120f148 100644
--- a/packages/uniswap/src/features/transactions/swap/contexts/SwapFormContext.tsx
+++ b/packages/uniswap/src/features/transactions/swap/contexts/SwapFormContext.tsx
@@ -12,6 +12,8 @@ import { TransactionType } from 'uniswap/src/features/transactions/types/transac
import { CurrencyField } from 'uniswap/src/types/currency'
import { currencyId } from 'uniswap/src/utils/currencyId'
import { logContextUpdate } from 'utilities/src/logger/contextEnhancer'
+import { logger } from 'utilities/src/logger/logger'
+import { parseFloatWithThrow } from 'utilities/src/primitives/string'
import { usePrevious } from 'utilities/src/react/hooks'
import { useValueAsRef } from 'utilities/src/react/useValueAsRef'
import { useDebounceWithStatus } from 'utilities/src/time/timing'
@@ -113,11 +115,10 @@ export function SwapFormContextProvider({
return {
...oldVal,
selectingCurrencyField: prefilledState?.selectingCurrencyField,
- filteredChainIds: prefilledState.filteredChainIds,
}
})
}
- }, [prefilledState?.selectingCurrencyField, prefilledState?.filteredChainIds])
+ }, [prefilledState?.selectingCurrencyField])
const [debouncedExactAmountToken, isDebouncingExactAmountToken] = useDebounceWithStatus(
swapForm.exactAmountToken,
@@ -172,14 +173,27 @@ export function SwapFormContextProvider({
const updatedState = { ...prevState, ...newState }
if (isAmountUpdated) {
- const isMaxTokenAmount =
- maxInputAmountAsRef.current &&
- updatedState.exactAmountToken &&
- parseFloat(maxInputAmountAsRef.current) <= parseFloat(updatedState.exactAmountToken)
-
- // if max value is explicitly set, use that
- // otherwise, check the token amount again the maxInputAmount
- updatedState.isMax = newState.isMax ?? !!isMaxTokenAmount
+ try {
+ const isMaxTokenAmount =
+ maxInputAmountAsRef.current &&
+ updatedState.exactAmountToken &&
+ parseFloatWithThrow(maxInputAmountAsRef.current) <= parseFloatWithThrow(updatedState.exactAmountToken)
+
+ // if max value is explicitly set, use that
+ // otherwise, check the token amount again the maxInputAmount
+ updatedState.isMax = newState.isMax ?? !!isMaxTokenAmount
+ } catch (error) {
+ logger.error(error, {
+ tags: {
+ file: 'SwapFormContext.tsx',
+ function: 'updateSwapForm',
+ },
+ extra: {
+ maxInputAmount: maxInputAmountAsRef.current,
+ exactAmountToken: updatedState.exactAmountToken,
+ },
+ })
+ }
}
logContextUpdate('SwapFormContext', updatedState, datadogEnabled)
diff --git a/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx b/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx
index b0380c1e453..861461211f7 100644
--- a/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx
+++ b/packages/uniswap/src/features/transactions/swap/form/SwapFormButton.tsx
@@ -303,11 +303,7 @@ export function SwapFormButton({
return (
-
+ setShowMaxNativeTransferModal(false)}
diff --git a/packages/uniswap/src/features/transactions/swap/form/SwapTokenSelector.tsx b/packages/uniswap/src/features/transactions/swap/form/SwapTokenSelector.tsx
index e687bafa446..7f98237b027 100644
--- a/packages/uniswap/src/features/transactions/swap/form/SwapTokenSelector.tsx
+++ b/packages/uniswap/src/features/transactions/swap/form/SwapTokenSelector.tsx
@@ -39,7 +39,7 @@ export function SwapTokenSelector({ isModalOpen }: { isModalOpen: boolean }): JS
}
const onHideTokenSelector = useCallback(() => {
- updateSwapForm({ selectingCurrencyField: undefined, filteredChainIds: {} })
+ updateSwapForm({ selectingCurrencyField: undefined })
setIsSwapTokenSelectorOpen(false) // resets force flag for web on close as cleanup
}, [setIsSwapTokenSelectorOpen, updateSwapForm])
diff --git a/packages/uniswap/src/features/transactions/swap/hooks/usePollingIntervalByChain.ts b/packages/uniswap/src/features/transactions/swap/hooks/usePollingIntervalByChain.ts
index d80871c8714..35d134c20e8 100644
--- a/packages/uniswap/src/features/transactions/swap/hooks/usePollingIntervalByChain.ts
+++ b/packages/uniswap/src/features/transactions/swap/hooks/usePollingIntervalByChain.ts
@@ -1,8 +1,7 @@
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { isMainnetChainId } from 'uniswap/src/features/chains/utils'
import { DynamicConfigs, SwapConfigKey } from 'uniswap/src/features/gating/configs'
-import { FeatureFlags } from 'uniswap/src/features/gating/flags'
-import { useDynamicConfigValue, useFeatureFlag } from 'uniswap/src/features/gating/hooks'
+import { useDynamicConfigValue } from 'uniswap/src/features/gating/hooks'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
export const AVERAGE_L1_BLOCK_TIME_MS = 12 * ONE_SECOND_MS
@@ -21,8 +20,5 @@ export function usePollingIntervalByChain(chainId?: UniverseChainId): number {
AVERAGE_L2_BLOCK_TIME_MS,
)
- const enableTwoSecondInterval = useFeatureFlag(FeatureFlags.TwoSecondSwapQuotePollingInterval)
- const l2PollingInterval = enableTwoSecondInterval ? 2 * ONE_SECOND_MS : averageL2BlockTimeMs
-
- return isMainnetChainId(chainId) ? averageL1BlockTimeMs : l2PollingInterval
+ return isMainnetChainId(chainId) ? averageL1BlockTimeMs : averageL2BlockTimeMs
}
diff --git a/packages/uniswap/src/features/transactions/swap/hooks/useSwapPrefilledState.ts b/packages/uniswap/src/features/transactions/swap/hooks/useSwapPrefilledState.ts
index a6ba27e6163..19eb6c9e9e2 100644
--- a/packages/uniswap/src/features/transactions/swap/hooks/useSwapPrefilledState.ts
+++ b/packages/uniswap/src/features/transactions/swap/hooks/useSwapPrefilledState.ts
@@ -9,38 +9,29 @@ import { CurrencyField } from 'uniswap/src/types/currency'
import { areAddressesEqual } from 'uniswap/src/utils/addresses'
export function useSwapPrefilledState(initialState: TransactionState | undefined): SwapFormState | undefined {
- const swapPrefilledState = useMemo((): SwapFormState | undefined => {
- if (!initialState) {
- return undefined
- }
-
- const inputChainFilterOverride =
- initialState?.selectingCurrencyField === CurrencyField.INPUT && initialState?.selectingCurrencyChainId
- ? initialState?.selectingCurrencyChainId
- : undefined
- const outputChainFilterOverride =
- initialState?.selectingCurrencyField === CurrencyField.OUTPUT && initialState?.selectingCurrencyChainId
- ? initialState?.selectingCurrencyChainId
- : undefined
-
- return {
- exactAmountFiat: initialState.exactAmountFiat,
- exactAmountToken: initialState.exactAmountToken,
- exactCurrencyField: initialState.exactCurrencyField,
- filteredChainIds: {
- [CurrencyField.INPUT]: inputChainFilterOverride ?? initialState.output?.chainId,
- [CurrencyField.OUTPUT]: outputChainFilterOverride ?? initialState.input?.chainId,
- },
- focusOnCurrencyField: getFocusOnCurrencyFieldFromInitialState(initialState),
- input: initialState.input ?? undefined,
- output: initialState.output ?? undefined,
- selectingCurrencyField: initialState.selectingCurrencyField,
- txId: initialState.txId,
- isFiatMode: false,
- isSubmitting: false,
- isMax: false,
- }
- }, [initialState])
+ const swapPrefilledState = useMemo(
+ (): SwapFormState | undefined =>
+ initialState
+ ? {
+ exactAmountFiat: initialState.exactAmountFiat,
+ exactAmountToken: initialState.exactAmountToken,
+ exactCurrencyField: initialState.exactCurrencyField,
+ filteredChainIds: {
+ [CurrencyField.INPUT]: initialState.output?.chainId,
+ [CurrencyField.OUTPUT]: initialState.input?.chainId,
+ },
+ focusOnCurrencyField: getFocusOnCurrencyFieldFromInitialState(initialState),
+ input: initialState.input ?? undefined,
+ output: initialState.output ?? undefined,
+ selectingCurrencyField: initialState.selectingCurrencyField,
+ txId: initialState.txId,
+ isFiatMode: false,
+ isSubmitting: false,
+ isMax: false,
+ }
+ : undefined,
+ [initialState],
+ )
return swapPrefilledState
}
diff --git a/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.tsx b/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.tsx
index 543150e06f5..6c50cc1e984 100644
--- a/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.tsx
+++ b/packages/uniswap/src/features/transactions/swap/hooks/useSwapWarnings.tsx
@@ -286,7 +286,7 @@ function getSwapWarningFromError(error: Error, t: TFunction): Warning {
severity: WarningSeverity.Low,
action: WarningAction.DisableReview,
title: t('swap.warning.enterLargerAmount.title'),
- message: undefined,
+ message: '',
}
}
case Err404.errorCode.RESOURCE_NOT_FOUND: {
diff --git a/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts b/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts
index 0b9b32b5663..ed46e240ebb 100644
--- a/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts
+++ b/packages/uniswap/src/features/transactions/swap/hooks/useTransactionRequestInfo.ts
@@ -11,7 +11,6 @@ import {
TransactionFailureReason,
} from 'uniswap/src/data/tradingApi/__generated__/index'
import { AccountMeta } from 'uniswap/src/features/accounts/types'
-import { getChainLabel } from 'uniswap/src/features/chains/utils'
import {
convertGasFeeToDisplayValue,
useActiveGasStrategy,
@@ -40,9 +39,9 @@ import {
} from 'uniswap/src/features/transactions/swap/utils/tradingApi'
import { GasFeeEstimates } from 'uniswap/src/features/transactions/types/transactionDetails'
import { WrapType } from 'uniswap/src/features/transactions/types/wrap'
-import { isE2EMode } from 'utilities/src/environment/constants'
+import { isDetoxBuild } from 'utilities/src/environment/constants'
import { logger } from 'utilities/src/logger/logger'
-import { isExtension, isInterface, isMobileApp } from 'utilities/src/platform'
+import { isInterface, isMobileApp } from 'utilities/src/platform'
import { useTrace } from 'utilities/src/telemetry/trace/TraceContext'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
@@ -182,7 +181,7 @@ export function useTransactionRequestInfo({
} = useTradingApiSwapQuery({
params: skipTransactionRequest ? undefined : swapRequestArgs,
// Disable polling during e2e testing because it was preventing js thread from going idle
- refetchInterval: isE2EMode ? undefined : tradingApiSwapRequestMs,
+ refetchInterval: isDetoxBuild ? undefined : tradingApiSwapRequestMs,
staleTime: tradingApiSwapRequestMs,
// We add a small buffer in case connection is too slow
immediateGcTime: tradingApiSwapRequestMs + ONE_SECOND_MS * 5,
@@ -240,14 +239,12 @@ export function useTransactionRequestInfo({
if (gasEstimateError) {
logger.warn('useTransactionRequestInfo', 'useTransactionRequestInfo', UNKNOWN_SIM_ERROR, {
...getBaseTradeAnalyticsPropertiesFromSwapInfo({ derivedSwapInfo, transactionSettings, formatter, trace }),
- // we explicitly log it here to show on Datadog dashboard
- chainLabel: getChainLabel(derivedSwapInfo.chainId),
error: gasEstimateError,
simulationFailureReasons: isClassicQuote(swapQuote) ? swapQuote?.txFailureReasons : undefined,
txRequest: data?.swap,
})
- if (!(isMobileApp || isExtension)) {
+ if (!isMobileApp) {
sendAnalyticsEvent(SwapEventName.SWAP_ESTIMATE_GAS_CALL_FAILED, {
...getBaseTradeAnalyticsPropertiesFromSwapInfo({ derivedSwapInfo, transactionSettings, formatter, trace }),
error: gasEstimateError,
diff --git a/packages/uniswap/src/features/transactions/swap/hooks/useUSDCPrice.ts b/packages/uniswap/src/features/transactions/swap/hooks/useUSDCPrice.ts
index 1f12153c635..dc0a709326e 100644
--- a/packages/uniswap/src/features/transactions/swap/hooks/useUSDCPrice.ts
+++ b/packages/uniswap/src/features/transactions/swap/hooks/useUSDCPrice.ts
@@ -12,21 +12,20 @@ import {
USDC_OPTIMISM,
USDC_POLYGON,
USDC_SEPOLIA,
- USDC_UNICHAIN,
USDC_UNICHAIN_SEPOLIA,
USDC_WORLD_CHAIN,
USDC_ZKSYNC,
USDC_ZORA,
USDT_MONAD_TESTNET,
} from 'uniswap/src/constants/tokens'
-import { UniverseChainId, isUniverseChainId } from 'uniswap/src/features/chains/types'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useTrade } from 'uniswap/src/features/transactions/swap/hooks/useTrade'
import { isClassic } from 'uniswap/src/features/transactions/swap/utils/routing'
import { areCurrencyIdsEqual, currencyId } from 'uniswap/src/utils/currencyId'
// Stablecoin amounts used when calculating spot price for a given currency.
// The amount is large enough to filter low liquidity pairs.
-export const STABLECOIN_AMOUNT_OUT: Record> = {
+export const STABLECOIN_AMOUNT_OUT: { [chainId: number]: CurrencyAmount } = {
[UniverseChainId.Mainnet]: CurrencyAmount.fromRawAmount(USDC, 100_000e6),
[UniverseChainId.ArbitrumOne]: CurrencyAmount.fromRawAmount(USDC_ARBITRUM, 10_000e6),
[UniverseChainId.Avalanche]: CurrencyAmount.fromRawAmount(USDC_AVALANCHE, 10_000e6),
@@ -38,7 +37,6 @@ export const STABLECOIN_AMOUNT_OUT: Record): JSX.Element {
+ const { t } = useTranslation()
+ const { formatPercent } = useLocalizationContext()
const [showModal, setShowModal] = useState(false)
const { fee, tokenSymbol } = feeInfo
const feePercent = parseFloat(fee.toFixed())
+ const formattedFeePercent = formatPercent(feePercent)
const { tokenProtectionWarning } = getFeeSeverity(feeInfo.fee)
- const title = useModalHeaderText({ tokenProtectionWarning, tokenSymbol0: tokenSymbol }) ?? ''
+ const title = getModalHeaderText({ t, tokenProtectionWarning, tokenSymbol0: tokenSymbol }) ?? ''
const subtitle =
- useModalSubtitleText({
+ getModalSubtitleTokenWarningText({
+ t,
tokenProtectionWarning,
tokenSymbol,
- buyFeePercent: feeType === 'buy' ? feePercent : undefined,
- sellFeePercent: feeType === 'sell' ? feePercent : undefined,
+ formattedBuyFeePercent: feeType === 'buy' ? formattedFeePercent : undefined,
+ formattedSellFeePercent: feeType === 'sell' ? formattedFeePercent : undefined,
}) ?? ''
if (isInterface) {
diff --git a/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx b/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx
index 07006f74d31..69aa8b6f089 100644
--- a/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx
+++ b/packages/uniswap/src/features/transactions/swap/modals/RoutingInfo.tsx
@@ -66,6 +66,17 @@ export function RoutingInfo({
)
}
+ const bestRouteText = gasFeeFormatted
+ ? t('swap.bestRoute.cost', {
+ gasPrice: gasFeeFormatted,
+ })
+ : undefined
+ const bestRouteTextV4 = gasFeeFormatted
+ ? t('swap.bestRoute.cost.v4', {
+ gasPrice: gasFeeFormatted,
+ })
+ : undefined
+
if (isClassic(trade)) {
return (
@@ -77,14 +88,14 @@ export function RoutingInfo({
/>
)}
- {gasFeeFormatted && t('swap.bestRoute.cost', { gasPrice: gasFeeFormatted })}
+ {isMaybeV4 ? bestRouteTextV4 : bestRouteText}
{t('swap.route.optimizedGasCost')}
)
}
return null
- }, [t, trade, routes, gasFeeFormatted])
+ }, [t, trade, routes, gasFeeFormatted, isMaybeV4])
const InfoButton = useMemo(() => {
if (!trade) {
@@ -96,7 +107,7 @@ export function RoutingInfo({
const helpCenterUrl = isUniswapX(trade)
? uniswapUrls.helpArticleUrls.uniswapXInfo
- : uniswapUrls.helpArticleUrls.routingSettings
+ : uniswapUrls.helpArticleUrls.v4RoutingInfo
return (
}
elementName={ElementName.SwapRoutingPreferenceDefault}
- title={}
+ title={t('common.default')}
cantDisable={false}
disabled={isOnlyV2Allowed}
onSelect={toggleDefault}
@@ -238,12 +237,12 @@ function DefaultOptionDescription({ isDefault }: { isDefault: boolean }): JSX.El
const showIncludesUniswapX = uniswapXEnabled && isDefault
- const cheapestRouteText = t('swap.settings.routingPreference.option.default.description.preV4')
- const cheapestRouteTextV4 = t('swap.settings.routingPreference.option.default.description')
+ const cheapestRouteText = t('swap.settings.routingPreference.option.default.description')
+ const cheapestRouteTextV4 = t('swap.settings.routingPreference.option.default.description.v4')
return (
-
+
{v4Enabled ? cheapestRouteTextV4 : cheapestRouteText}
{showIncludesUniswapX && (
@@ -254,6 +253,13 @@ function DefaultOptionDescription({ isDefault }: { isDefault: boolean }): JSX.El
components={{
icon: ,
gradient: ,
+ info: (
+
+ ),
}}
i18nKey="uniswapx.included"
/>
@@ -264,35 +270,3 @@ function DefaultOptionDescription({ isDefault }: { isDefault: boolean }): JSX.El
)
}
-
-function DefaultOptionTitle(): JSX.Element {
- const v4Enabled = useFeatureFlag(FeatureFlags.V4Swap)
- const { t } = useTranslation()
-
- if (!v4Enabled) {
- return (
-
- {t('common.default')}
-
- )
- }
-
- return (
-
-
- {t('common.default')}
-
-
-
- )
-}
diff --git a/packages/uniswap/src/features/transactions/swap/utils/protocols.ts b/packages/uniswap/src/features/transactions/swap/utils/protocols.ts
index ec633fcd7b8..12a5525f869 100644
--- a/packages/uniswap/src/features/transactions/swap/utils/protocols.ts
+++ b/packages/uniswap/src/features/transactions/swap/utils/protocols.ts
@@ -2,7 +2,7 @@ import { useMemo } from 'react'
import { ProtocolItems } from 'uniswap/src/data/tradingApi/__generated__'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
-import { getFeatureFlag, useFeatureFlag } from 'uniswap/src/features/gating/hooks'
+import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
export const DEFAULT_PROTOCOL_OPTIONS = [
// `as const` allows us to derive a type narrower than ProtocolItems, and the `...` spread removes readonly, allowing DEFAULT_PROTOCOL_OPTIONS to be passed around as an argument without `readonly`
@@ -18,7 +18,7 @@ export function useProtocolsForChain(
chainId?: UniverseChainId,
): ProtocolItems[] {
const uniswapXEnabled = useFeatureFlag(FeatureFlags.UniswapX)
- const priorityOrdersAllowed = useUniswapXPriorityOrderFlag(chainId)
+ const priorityOrdersAllowed = useFeatureFlag(FeatureFlags.UniswapXPriorityOrders) && chainId === UniverseChainId.Base
const arbUniswapXAllowed =
useFeatureFlag(FeatureFlags.SharedSwapArbitrumUniswapXExperiment) && chainId === UniverseChainId.ArbitrumOne
@@ -41,23 +41,3 @@ export function useProtocolsForChain(
return protocols
}, [uniswapXAllowedForChain, uniswapXEnabled, userSelectedProtocols, v4SwapAllowed])
}
-
-export function useUniswapXPriorityOrderFlag(chainId?: UniverseChainId): boolean {
- if (!chainId) {
- return false
- }
-
- const flagName = UNISWAP_PRIORITY_ORDERS_CHAIN_FLAG_MAP[chainId]
- if (!flagName) {
- return false
- }
-
- return getFeatureFlag(flagName)
-}
-
-// These are primarily OP stack chains, since only Priority Orders can only operate on chains with Priority Gas Auctions (PGA)
-const UNISWAP_PRIORITY_ORDERS_CHAIN_FLAG_MAP: Partial> = {
- [UniverseChainId.Base]: FeatureFlags.UniswapXPriorityOrdersBase,
- [UniverseChainId.Optimism]: FeatureFlags.UniswapXPriorityOrdersOptimism,
- [UniverseChainId.Unichain]: FeatureFlags.UniswapXPriorityOrdersUnichain,
-}
diff --git a/packages/uniswap/src/features/transactions/types/transactionDetails.ts b/packages/uniswap/src/features/transactions/types/transactionDetails.ts
index 3fc0410a4c5..dd551ac17d5 100644
--- a/packages/uniswap/src/features/transactions/types/transactionDetails.ts
+++ b/packages/uniswap/src/features/transactions/types/transactionDetails.ts
@@ -13,7 +13,6 @@ export type ChainIdToTxIdToDetails = Partial b.currencyInfo.currency.chainId === UniverseChainId.Unichain) ?? []
- const hasUnichainEth = unichainVisibleBalances.some((b) => b.currencyInfo.currency.isNative)
- const hasUnichainTokens = unichainVisibleBalances.some((b) => b.currencyInfo.currency.isToken)
- const hasUnichainBalance = hasUnichainEth || hasUnichainTokens
-
- return {
- shouldShowUnichainBannerCold: unichainPromoEnabled && !hasDismissedUnichainColdBanner && !hasUnichainBalance,
- shouldShowUnichainBannerWarm: unichainPromoEnabled && hasUnichainEth && !hasUnichainTokens,
- }
-}
diff --git a/packages/uniswap/src/i18n/locales/source/en-US.json b/packages/uniswap/src/i18n/locales/source/en-US.json
index 594290711d8..bc70bcd16b4 100644
--- a/packages/uniswap/src/i18n/locales/source/en-US.json
+++ b/packages/uniswap/src/i18n/locales/source/en-US.json
@@ -176,6 +176,7 @@
"common.allTime": "All time",
"common.amount.label": "Amount",
"common.amountDeposited.label": "{{amount}} Deposited",
+ "common.amountInput.placeholder": "Input amount",
"common.and": "and",
"common.app": "App",
"common.approval.cancelled": "Approval cancelled",
@@ -304,7 +305,6 @@
"common.copied": "Copied",
"common.copy.address": "Copy address",
"common.copyLink.button": "Copy link",
- "common.create": "Create",
"common.create.pool.cancelled": "Create pool cancelled",
"common.create.pool.failed": "Create pool failed",
"common.created.pool": "Created pool",
@@ -312,7 +312,6 @@
"common.currency": "Currency",
"common.currentPrice": "Current price",
"common.currentPrice.label": "Current price:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Custom",
"common.customRange": "Custom range",
"common.dataOutdated": "Data may be outdated",
@@ -374,6 +373,7 @@
"common.feesEarned.label": "{{symbol}} Fees Earned:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Fetching route",
+ "common.flag": "Flag",
"common.floor": "Floor",
"common.floorPrice": "Floor price",
"common.for": "For",
@@ -454,9 +454,8 @@
"common.mint.failed": "Mint failed",
"common.minted": "Minted",
"common.minting": "Minting",
- "common.mobile": "Mobile",
+ "common.mobileWallet": "Mobile wallet",
"common.more": "More",
- "common.multiDevice": "Multi-device",
"common.navigation.settings": "Settings",
"common.navigation.systemSettings": "Settings",
"common.navigationButton": "Navigation button",
@@ -484,7 +483,6 @@
"common.orderPending": "Order pending",
"common.outOfRange": "Out of range",
"common.pageNotFound": "Page not found!",
- "common.passkey": "Passkey",
"common.pastDay": "Past day",
"common.pastFiveMinutes": "Past five minutes",
"common.pastHour": "Past hour",
@@ -558,7 +556,6 @@
"common.scanQRDownload": "Scan the QR code with your phone to download",
"common.selectRegion.label": "Select your region",
"common.selectToken.label": "Select a token",
- "common.selfCustodial": "Self-custodial",
"common.sell.label": "Sell",
"common.send.button": "Send",
"common.send.cancelled": "Send cancelled",
@@ -681,7 +678,6 @@
"common.wallet.approve": "Approve in wallet",
"common.wallet.label": "Wallet",
"common.walletForSwapping": "The wallet built for swapping. Available on iOS and Android.",
- "common.warning": "Warning",
"common.webApp": "Web app",
"common.website": "Website",
"common.whyApprove": "Why do I have to approve a token?",
@@ -761,7 +757,6 @@
"downloadApp.modal.getStarted.description": "Start by downloading the Uniswap Wallet, available on your phone or browser.",
"downloadApp.modal.getStarted.title": "Get started with Uniswap",
"downloadApp.modal.signUp.description": "Get started by downloading the Uniswap Wallet, available on your phone or browser.",
- "downloadApp.modal.signUp.description.embeddedWallet": "Get started in seconds by signing up below or download our wallet, available on your phone or browser.",
"downloadApp.modal.signUp.title": "Sign up with Uniswap",
"downloadApp.modal.uniswapProducts.subtitle": "Uniswap products work seamlessly together to create the best onchain experience.",
"error.access.expiry": "This provides the Uniswap protocol access to your token for trading. For security, it expires after 30 days.",
@@ -903,12 +898,10 @@
"fiatOnRamp.error.load": "Couldn’t load tokens to buy",
"fiatOnRamp.error.max": "Maximum {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "This service is unavailable in your region",
"fiatOnRamp.error.unsupported": "Not supported in region",
"fiatOnRamp.error.usd": "Only available to purchase in USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} for {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Purchased on {{serviceProvider}}",
"fiatOnRamp.quote.advice": "You’ll continue to the provider’s portal to see the fees associated with your transaction.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, and other options",
@@ -1063,7 +1056,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} LP NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP tokens",
"migrate.migrating": "Migrating",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
"migrate.noV2Liquidity": "No V2 liquidity found.",
"migrate.positionNoFees": "Your position will not earn fees or be used in trades until the market price moves into your range.",
"migrate.priceDifference": "Price difference: ",
@@ -1074,6 +1067,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Price:",
"migrate.v2Description": "This tool will safely migrate your {{source}} liquidity to V3. The process is completely trustless thanks to the <0>Uniswap migration contract0> ↗",
"migrate.v2Instruction": "For each pool shown below, click migrate to remove your liquidity from Uniswap V2 and deposit it into Uniswap V3.",
+ "migrate.v2Subtitle": "Migrate your liquidity tokens from Uniswap V2 to Uniswap V3.",
"migrate.v2Title": "Migrate V2 liquidity",
"migrate.v3Price": "V3 {{sym}} Price:",
"mint.v3.input.invalidPrice.error": "Invalid price input",
@@ -1303,12 +1297,8 @@
"onboarding.name.wallet.title": "Give your wallet a name",
"onboarding.notification.permission.message": "To receive notifications, turn on notifications for Uniswap Wallet in your device’s settings.",
"onboarding.notification.permission.title": "Notifications permission",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
- "onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
- "onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
- "onboarding.passkey.create": "Create your passkey",
- "onboarding.passkey.use.recovery.phrase": "Use a recovery phrase instead",
+ "onboarding.notification.subtitle": "Get notified when your transfers, swaps, and approvals complete.",
+ "onboarding.notification.title": "Turn on push notifications",
"onboarding.recoveryPhrase.confirm.subtitle.combined": "Let’s confirm you got it right. If you lose or write this down incorrectly, you won’t be able to recover your funds.",
"onboarding.recoveryPhrase.confirm.subtitle.default": "If you lose or write this down incorrectly, you won’t be able to recover your funds.",
"onboarding.recoveryPhrase.confirm.title": "Let’s confirm you got it right",
@@ -1405,8 +1395,8 @@
"pool.liquidity.connectToAdd": "Connect to a wallet to view your liquidity.",
"pool.liquidity.data.error.message": "There was an error fetching data required for your transaction.",
"pool.liquidity.earn.fee": "Liquidity providers earn a 0.3% fee on all trades proportional to their share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Pool prices out of sync",
+ "pool.liquidity.outOfSync.message": "Prices in this pool are out of sync with the current market. Adding liquidity may result in a loss of funds.",
"pool.liquidity.ownershipWarning.message": "You are not the owner of this LP position. You will not be able to withdraw the liquidity from this position unless you own the following address: {{ownerAddress}}",
"pool.liquidity.rewards": "Liquidity provider rewards",
"pool.liquidity.taxWarning": "Token taxes",
@@ -1445,7 +1435,6 @@
"pool.rangeBadge.tooltip.withinRange": "The price of this pool is within your selected range. Your position is currently earning fees.",
"pool.rates": "Rates",
"pool.ratioTokenToPrice": "The ratio of tokens you add will set the price of this pool.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Remove liquidity",
"pool.rewardsPool.label": "Pool tokens in rewards pool:",
"pool.selectedRange": "Selected range",
@@ -1484,7 +1473,6 @@
"position.addHook.tooltip": "Hooks are an advanced feature that enable pools to interact with smart contracts, unlocking various capabilities. Exercise caution when adding hooks, as some may be malicious or cause unintended consequences.",
"position.addingHook": "Adding hook",
"position.addingHook.disclaimer": "Adding hooks may have unintended consequences. Do your research and proceed at your own risk.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Enter a valid hook address",
"position.addingHook.viewProperties": "View properties",
"position.appearHere": "Your position will appear here.",
@@ -1496,7 +1484,7 @@
"position.depositedCurrency": "Deposited {{currencySymbol}}",
"position.hook.disclaimer": "I understand the risks.",
"position.hook.liquidityWarning": "This flag can cause the pool to block the addition of new liquidity. Your transaction may revert.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "This flag can cause your funds to be locked or block you from collecting fees.",
"position.hook.swapWarning": "This flag can allow sophisticated users to more easily leverage Just-In-Time liquidity resulting in lower fees earned.",
"position.hook.warningHeader": "High risk hook detected",
"position.hook.warningInfo": "We’ve identified potential risks with this hook. Please review the flags and verify that this is the hook you want to use before proceeding.",
@@ -1648,7 +1636,6 @@
"setting.recoveryPhrase.remove.password.error": "Wrong password. Try again",
"setting.recoveryPhrase.remove.subtitle": "Enter your password to confirm",
"setting.recoveryPhrase.remove.title": "You’re removing your recovery phrase",
- "setting.recoveryPhrase.title": "Your recovery phrase",
"setting.recoveryPhrase.view.warning.message1": "Anyone who knows your recovery phrase can access your wallet and funds",
"setting.recoveryPhrase.view.warning.message2": "View this in private",
"setting.recoveryPhrase.view.warning.message3": "Do not share with anyone",
@@ -1736,9 +1723,6 @@
"settings.setting.language.description.extension": "Uniswap defaults to your system language settings. To change your preferred language, go to your system settings.",
"settings.setting.language.description.mobile": "Uniswap defaults to your device‘s language settings. To change your preferred language, go to “Uniswap” in your device settings and tap on “Language”.",
"settings.setting.language.title": "Language",
- "settings.setting.notifications.row.activity.description": "Transfers, requests, and other activity",
- "settings.setting.notifications.row.activity.title": "Wallet Activity",
- "settings.setting.notifications.title": "Notifications",
"settings.setting.password.title": "Change password",
"settings.setting.privacy.analytics.description": "We use anonymous usage data to enhance your experience across Uniswap Labs products. When disabled, we only track errors and essential usage.",
"settings.setting.privacy.analytics.title": "Allow analytics",
@@ -1754,6 +1738,7 @@
"settings.setting.wallet.editLabel.description": "Labels are not public. They are stored locally and only visible to you.",
"settings.setting.wallet.editLabel.save": "Save changes",
"settings.setting.wallet.label": "Nickname",
+ "settings.setting.wallet.notifications.title": "Notifications",
"settings.setting.wallet.preferences.title": "Wallet preferences",
"settings.setting.wallet.testnetMode.description": "This turns on testnets for developers to try out features and transactions without using real assets. Tokens on testnets do not hold any real value.",
"settings.setting.wallet.testnetMode.title": "Testnet mode",
@@ -1786,7 +1771,8 @@
"swap.approveAndSwap": "Approve and swap",
"swap.approveInWallet": "Approve in your wallet",
"swap.balance.amount": "Balance: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Best price route costs ~{{gasPrice}} in gas. ",
+ "swap.bestRoute.cost.v4": "Optimal route costs ~{{gasPrice}} in gas. ",
"swap.bridging.estimatedTime": "Est. time",
"swap.bridging.title": "Swapping across networks",
"swap.bridging.warning.description": "You’re swapping from {{fromNetwork}} to {{toNetwork}}. This is also known as \"bridging\", which moves your tokens from one network to another.",
@@ -1868,16 +1854,15 @@
"swap.review": "Review swap",
"swap.review.summary": "You’re swapping",
"swap.reviewLimit": "Review limit",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.",
"swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).",
"swap.settings.deadline.warning": "High deadline",
"swap.settings.protection.description": "With swap protection on, your Ethereum transactions will be protected from sandwich attacks, with reduced chances of failure.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Network",
"swap.settings.protection.subtitle.unavailable": "Not available on {{chainName}}",
"swap.settings.protection.title": "Swap protection",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
+ "swap.settings.routingPreference.option.default.description.v4": "The Uniswap client selects the optimal trade option factoring in price and network costs.",
"swap.settings.routingPreference.option.v2.title": "v2 pools",
"swap.settings.routingPreference.option.v3.title": "v3 pools",
"swap.settings.routingPreference.option.v4.title": "v4 pools",
@@ -2030,6 +2015,7 @@
"token.safety.warning.alwaysDoYourResearch": "Always do your research",
"token.safety.warning.blocked.description.default_one": "You can’t trade this token using the Uniswap App.",
"token.safety.warning.blocked.description.default_other": "You can’t trade these tokens using the Uniswap App.",
+ "token.safety.warning.blocked.description.named": "You can’t trade {{tokenSymbol}} using the Uniswap App.",
"token.safety.warning.dontShowWarningAgain": "Don’t show me this warning again",
"token.safety.warning.doYourOwnResearch": "Always do your own research before proceeding.",
"token.safety.warning.feeDescription": "Charges a when {{action}}",
@@ -2046,6 +2032,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} may not be the token you are looking to swap.",
"token.safety.warning.malicious.title": "Malicious token detected",
"token.safety.warning.mayResultInLoss": "Swapping it may result in a loss of funds.",
+ "token.safety.warning.medium.heading.default_one": "This token isn’t traded on leading U.S. centralized exchanges.",
+ "token.safety.warning.medium.heading.default_other": "These tokens aren’t traded on leading U.S. centralized exchanges.",
+ "token.safety.warning.medium.heading.default_one_also": "This token also isn’t traded on leading U.S. centralized exchanges.",
+ "token.safety.warning.medium.heading.default_other_also": "These tokens also aren’t traded on leading U.S. centralized exchanges.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} isn’t traded on leading U.S. centralized exchanges.",
"token.safety.warning.notListedOnExchanges": "Not listed on leading U.S. exchanges",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} has been flagged as unsellable.",
@@ -2053,12 +2043,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} has been flagged as spam by Blockaid.",
"token.safety.warning.spam.title": "Spam token detected",
"token.safety.warning.spamsUsers": "Spams users",
+ "token.safety.warning.strong.heading.default_one": "This token isn’t traded on leading U.S. centralized exchanges or frequently swapped on Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "These tokens aren’t traded on leading U.S. centralized exchanges or frequently swapped on Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} isn’t traded on leading U.S. centralized exchanges or frequently swapped on Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} charges a {{buyFeePercent}} fee when bought and {{sellFeePercent}} when sold.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} charges a {{feePercent}} fee when bought.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} charges a {{feePercent}} fee when sold.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} charges a fee when bought or sold.",
+ "token.safetyLevel.blocked.header": "Not available",
"token.safetyLevel.blocked.message": "You can’t trade this token using the Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Caution",
+ "token.safetyLevel.medium.message": "This token isn’t traded on leading U.S. centralized exchanges. Always do your own research before proceeding.",
"token.safetyLevel.medium.message.plural": "These tokens aren’t traded on leading U.S. centralized exchanges. Always do your own research before proceeding.",
+ "token.safetyLevel.strong.header": "Warning",
+ "token.safetyLevel.strong.message": "This token isn’t traded on leading U.S. centralized exchanges or frequently swapped on Uniswap. Always do your own research before proceeding.",
"token.selector.search.error": "Couldn’t load search results",
"token.stats.fullyDilutedValuation": "Fully Diluted Valuation",
"token.stats.marketCap": "Market Cap",
@@ -2113,7 +2111,6 @@
"tokens.selector.section.otherSearchResults": "Other tokens on {{network}}",
"tokens.selector.section.recent": "Recent searches",
"tokens.selector.section.search": "Search results",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Your tokens",
"tokens.table.search.placeholder.pools": "Search pools",
"tokens.table.search.placeholder.tokens": "Search tokens",
@@ -2233,17 +2230,9 @@
"transaction.warning.maxNative.title": "Low network token balance",
"transaction.watcher.error.cancel": "Unable to cancel transaction",
"transaction.watcher.error.status": "Error while checking transaction status",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " aggregates liquidity sources for better prices and gas free swaps.",
"uniswapx.description": "UniswapX aggregates liquidity sources for better prices and gas free swaps.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Includes UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Learn more about swapping with UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/af-ZA.json b/packages/uniswap/src/i18n/locales/translations/af-ZA.json
index 826b825895b..23df8938b1b 100644
--- a/packages/uniswap/src/i18n/locales/translations/af-ZA.json
+++ b/packages/uniswap/src/i18n/locales/translations/af-ZA.json
@@ -176,6 +176,7 @@
"common.allTime": "Van alle tye",
"common.amount.label": "Bedrag",
"common.amountDeposited.label": "{{amount}} Gedeponeer",
+ "common.amountInput.placeholder": "Inset bedrag",
"common.and": "en",
"common.app": "Toep",
"common.approval.cancelled": "Goedkeuring gekanselleer",
@@ -312,7 +313,6 @@
"common.currency": "Geldeenheid",
"common.currentPrice": "Huidige prys",
"common.currentPrice.label": "Huidige prys:",
- "common.currentPrice.unavailable": "Huidige prys nie beskikbaar nie",
"common.custom": "Pasgemaak",
"common.customRange": "Pasgemaakte reeks",
"common.dataOutdated": "Data kan verouderd wees",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Fooie verdien:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Haal roete",
+ "common.flag": "Vlag",
"common.floor": "Vloer",
"common.floorPrice": "Vloerprys",
"common.for": "Vir",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Keur in beursie goed",
"common.wallet.label": "Beursie",
"common.walletForSwapping": "Die beursie gebou vir ruil. Beskikbaar op iOS en Android.",
- "common.warning": "Waarskuwing",
"common.webApp": "Web app",
"common.website": "Webwerf",
"common.whyApprove": "Hoekom moet ek 'n teken goedkeur?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Kon nie tokens laai om te koop nie",
"fiatOnRamp.error.max": "Maksimum {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "Geen aanhalings gevind nie.",
"fiatOnRamp.error.unavailable": "Hierdie diens is nie in jou streek beskikbaar nie",
"fiatOnRamp.error.unsupported": "Word nie in streek ondersteun nie",
"fiatOnRamp.error.usd": "Slegs beskikbaar om in USD te koop",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} vir {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Geen aanhalings gevind nie",
"fiatOnRamp.purchasedOn": "Gekoop op {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Jy sal voortgaan na die verskaffer se portaal om die fooie te sien wat met jou transaksie geassosieer word.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, en ander opsies",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Prys:",
"migrate.v2Description": "Hierdie instrument sal jou {{source}} likiditeit veilig na V3 migreer. Die proses is heeltemal vertroueloos danksy die <0>Uniswap-migrasiekontrak0> ↗",
"migrate.v2Instruction": "Vir elke poel wat hieronder gewys word, klik migreer om jou likiditeit uit Uniswap V2 te verwyder en dit in Uniswap V3 te deponeer.",
+ "migrate.v2Subtitle": "Migreer jou likiditeitsbewyse van Uniswap V2 na Uniswap V3.",
"migrate.v2Title": "Migreer V2-likiditeit",
"migrate.v3Price": "V3 {{sym}} Prys:",
"mint.v3.input.invalidPrice.error": "Ongeldige prysinvoer",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Gee jou beursie 'n naam",
"onboarding.notification.permission.message": "Om kennisgewings te ontvang, skakel kennisgewings vir Uniswap Wallet aan in jou toestel se instellings.",
"onboarding.notification.permission.title": "Kennisgewingstoestemming",
- "onboarding.notification.subtitle": "Bly op hoogte van transaksiestatusse en groot prysveranderings vir gunsteling tokens",
- "onboarding.notification.title": "Skakel kennisgewings aan",
+ "onboarding.notification.subtitle": "Word in kennis gestel wanneer jou oordragte, omruilings en goedkeurings voltooi is.",
+ "onboarding.notification.title": "Skakel stootkennisgewings aan",
"onboarding.passkey.account.protection": "Jou rekening word beskerm deur jou eie veilige wagwoordberging.",
"onboarding.passkey.biometric.scan": "Foon, tablet of blaaier – skandeer net jou biometrie en jy sal aangemeld word.",
"onboarding.passkey.create": "Skep jou wagwoordsleutel",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Koppel aan 'n beursie om jou likiditeit te sien.",
"pool.liquidity.data.error.message": "Kon nie data gaan haal wat vir jou transaksie vereis word nie.",
"pool.liquidity.earn.fee": "Likiditeitsverskaffers verdien 'n fooi van 0,3% op alle transaksies wat eweredig is aan hul deel van die poel. Fooie word by die poel gevoeg, loop intyds op en kan geëis word deur jou likiditeit te onttrek.",
- "pool.liquidity.outOfSync": "Pool en markprys wanverhouding",
- "pool.liquidity.outOfSync.message": "Die pryse in hierdie poel verskil met die markpryse van die geselekteerde tokens. Pas jou prysklas dienooreenkomstig aan of wag vir die swembad om te herbalanseer om verliese te vermy.",
+ "pool.liquidity.outOfSync": "Poelpryse nie gesinchroniseer nie",
+ "pool.liquidity.outOfSync.message": "Pryse in hierdie poel is nie sinchroniseer met die huidige mark nie. Die byvoeging van likiditeit kan lei tot 'n verlies aan fondse.",
"pool.liquidity.ownershipWarning.message": "Jy is nie die eienaar van hierdie LP-posisie nie. Jy sal nie die likiditeit uit hierdie posisie kan onttrek nie, tensy jy die volgende adres besit: {{ownerAddress}}",
"pool.liquidity.rewards": "Likiditeitsverskafferbelonings",
"pool.liquidity.taxWarning": "Tokenbelasting",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Die prys van hierdie swembad is binne jou geselekteerde reeks. Jou posisie verdien tans fooie.",
"pool.rates": "Tariewe",
"pool.ratioTokenToPrice": "Die verhouding van tokens wat jy byvoeg, sal die prys van hierdie swembad bepaal.",
- "pool.refresh.prices": "Herlaai pryse",
"pool.removeLiquidity": "Verwyder likiditeit",
"pool.rewardsPool.label": "Poeltekens in beloningspoel:",
"pool.selectedRange": "Geselekteerde reeks",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hakies is 'n gevorderde kenmerk wat poele in staat stel om met slim kontrakte te kommunikeer, wat verskeie vermoëns ontsluit. Wees versigtig wanneer jy hake byvoeg, aangesien sommige kwaadwillig kan wees of onbedoelde gevolge kan veroorsaak.",
"position.addingHook": "Haak byvoeg",
"position.addingHook.disclaimer": "Die byvoeging van hake kan onbedoelde gevolge hê. Doen jou navorsing en gaan voort op eie risiko.",
- "position.addingHook.hideProperties": "Versteek eiendomme",
"position.addingHook.invalidAddress": "Voer 'n geldige haakadres in",
"position.addingHook.viewProperties": "Bekyk eiendomme",
"position.appearHere": "Jou posisie sal hier verskyn.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Gedeponeer {{currencySymbol}}",
"position.hook.disclaimer": "Ek verstaan die risiko's.",
"position.hook.liquidityWarning": "Hierdie vlag kan veroorsaak dat die swembad die toevoeging van nuwe likiditeit blokkeer. Jou transaksie kan dalk terugdraai.",
- "position.hook.removeWarning": "Kan veroorsaak dat u fondse gesluit word of u verhoed om fooie in te vorder.",
+ "position.hook.removeWarning": "Hierdie vlag kan veroorsaak dat jou fondse gesluit word of jou verhoed om fooie in te vorder.",
"position.hook.swapWarning": "Hierdie vlag kan gesofistikeerde gebruikers in staat stel om net-in-tyd-likiditeit makliker te benut, wat lei tot laer fooie wat verdien word.",
"position.hook.warningHeader": "Hoërisiko-haak bespeur",
"position.hook.warningInfo": "Ons het potensiële risiko's met hierdie haak geïdentifiseer. Gaan asseblief die vlae na en verifieer dat dit die haak is wat jy wil gebruik voordat jy voortgaan.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Keur goed en ruil",
"swap.approveInWallet": "Keur in jou beursie goed",
"swap.balance.amount": "Balans: {{amount}}",
- "swap.bestRoute.cost": "Die doeltreffendste roete sal na raming ~{{gasPrice}} in netwerkkoste kos. ",
+ "swap.bestRoute.cost": "Beste prys roete kos ~{{gasPrice}} in gas. ",
+ "swap.bestRoute.cost.v4": "Optimale roetekoste ~{{gasPrice}} in gas. ",
"swap.bridging.estimatedTime": "Geskatte tyd",
"swap.bridging.title": "Ruil oor netwerke heen",
"swap.bridging.warning.description": "Jy ruil van {{fromNetwork}} na {{toNetwork}}. Dit staan ook bekend as \"oorbrugging\", wat jou tokens van een netwerk na 'n ander skuif.",
@@ -1868,16 +1866,15 @@
"swap.review": "Review ruil",
"swap.review.summary": "Jy ruil",
"swap.reviewLimit": "Hersien limiet",
- "swap.route.optimizedGasCost": "Hierdie roete neem gesplete roetes, veelvuldige hops en netwerkkoste van elke stap in ag.",
+ "swap.route.optimizedGasCost": "Hierdie roete optimaliseer jou totale uitset deur gesplete roetes, veelvuldige hops en die netwerkkoste van elke stap in ag te neem.",
"swap.settings.deadline.tooltip": "Jou transaksie sal terugdraai as dit vir langer as hierdie tydperk hangende is. (Maksimum: 3 dae).",
"swap.settings.deadline.warning": "Hoë sperdatum",
"swap.settings.protection.description": "Met ruilbeskerming aan, sal jou Ethereum-transaksies teen toebroodjie-aanvalle beskerm word, met verminderde kanse op mislukking.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Netwerk",
"swap.settings.protection.subtitle.unavailable": "Nie beskikbaar op {{chainName}}nie",
"swap.settings.protection.title": "Ruil beskerming",
- "swap.settings.routingPreference.option.default.description": "Deur hierdie opsie te kies, identifiseer die mees doeltreffende roete vir jou ruil.",
- "swap.settings.routingPreference.option.default.description.preV4": "Die Uniswap-kliënt kies die goedkoopste handelsopsie met inagneming van prys en netwerkkoste.",
- "swap.settings.routingPreference.option.default.tooltip": "'n Roete word geïdentifiseer met inagneming van v2, v3 en sekere v4-poele, met inagneming van beraamde prysimpak en netwerkkoste.",
+ "swap.settings.routingPreference.option.default.description": "Die Uniswap-kliënt kies die goedkoopste handelsopsie met inagneming van prys en netwerkkoste.",
+ "swap.settings.routingPreference.option.default.description.v4": "Die Uniswap-kliënt kies die optimale handelsopsie met inagneming van prys en netwerkkoste.",
"swap.settings.routingPreference.option.v2.title": "v2 swembaddens",
"swap.settings.routingPreference.option.v3.title": "v3 swembaddens",
"swap.settings.routingPreference.option.v4.title": "v4 swembaddens",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Doen altyd jou navorsing",
"token.safety.warning.blocked.description.default_one": "Jy kan nie hierdie teken verhandel met die Uniswap-toepassing nie.",
"token.safety.warning.blocked.description.default_other": "Jy kan nie hierdie tokens verhandel met die Uniswap-toepassing nie.",
+ "token.safety.warning.blocked.description.named": "Jy kan nie {{tokenSymbol}} verhandel met die Uniswap-toepassing nie.",
"token.safety.warning.dontShowWarningAgain": "Moenie weer vir my hierdie waarskuwing wys nie",
"token.safety.warning.doYourOwnResearch": "Doen altyd jou eie navorsing voordat jy voortgaan.",
"token.safety.warning.feeDescription": "Laai 'n wanneer {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} is dalk nie die teken wat jy wil ruil nie.",
"token.safety.warning.malicious.title": "Kwaadwillige teken bespeur",
"token.safety.warning.mayResultInLoss": "Om dit te ruil kan 'n verlies aan fondse tot gevolg hê.",
+ "token.safety.warning.medium.heading.default_one": "Hierdie token word nie op toonaangewende Amerikaanse gesentraliseerde uitruilings verhandel nie.",
+ "token.safety.warning.medium.heading.default_other": "Hierdie tokens word nie op toonaangewende Amerikaanse gesentraliseerde uitruilings verhandel nie.",
+ "token.safety.warning.medium.heading.default_one_also": "Hierdie teken word ook nie op toonaangewende gesentraliseerde beurse in die VSA verhandel nie.",
+ "token.safety.warning.medium.heading.default_other_also": "Hierdie tokens word ook nie op toonaangewende Amerikaanse gesentraliseerde uitruilings verhandel nie.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} word nie op toonaangewende Amerikaanse gesentraliseerde beurse verhandel nie.",
"token.safety.warning.notListedOnExchanges": "Nie gelys op toonaangewende Amerikaanse uitruilings nie",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} is as onverkoopbaar gemerk.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} is deur Blockaid as strooipos gevlag.",
"token.safety.warning.spam.title": "Strooipos-token bespeur",
"token.safety.warning.spamsUsers": "Spams gebruikers",
+ "token.safety.warning.strong.heading.default_one": "Hierdie token word nie op toonaangewende Amerikaanse gesentraliseerde beurse verhandel of gereeld op Uniswap geruil nie.",
+ "token.safety.warning.strong.heading.default_other": "Hierdie tokens word nie op toonaangewende Amerikaanse gesentraliseerde beurse verhandel of gereeld op Uniswap geruil nie.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} word nie op toonaangewende Amerikaanse gesentraliseerde beurse verhandel of gereeld op Uniswap geruil nie.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} hef 'n {{buyFeePercent}} fooi wanneer dit gekoop word en {{sellFeePercent}} wanneer dit verkoop word.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} hef 'n {{feePercent}} fooi wanneer dit gekoop word.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} hef 'n {{feePercent}} fooi wanneer dit verkoop word.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} hef 'n fooi wanneer dit gekoop of verkoop word.",
+ "token.safetyLevel.blocked.header": "Nie beskikbaar nie",
"token.safetyLevel.blocked.message": "Jy kan nie hierdie token verhandel met die Uniswap Wallet nie.",
+ "token.safetyLevel.medium.header": "Versigtig",
+ "token.safetyLevel.medium.message": "Hierdie token word nie op toonaangewende Amerikaanse gesentraliseerde uitruilings verhandel nie. Doen altyd jou eie navorsing voordat jy voortgaan.",
"token.safetyLevel.medium.message.plural": "Hierdie tokens word nie op toonaangewende Amerikaanse gesentraliseerde uitruilings verhandel nie. Doen altyd jou eie navorsing voordat jy voortgaan.",
+ "token.safetyLevel.strong.header": "Waarskuwing",
+ "token.safetyLevel.strong.message": "Hierdie token word nie op toonaangewende Amerikaanse gesentraliseerde beurse verhandel of gereeld op Uniswap geruil nie. Doen altyd jou eie navorsing voordat jy voortgaan.",
"token.selector.search.error": "Kon nie soekresultate laai nie",
"token.stats.fullyDilutedValuation": "Volledig verwaterde waardasie",
"token.stats.marketCap": "Markkapitalisasie",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Ander tekens op {{network}}",
"tokens.selector.section.recent": "Onlangse soektogte",
"tokens.selector.section.search": "Soek Resultate",
- "tokens.selector.section.trending": "Tokens met 24H-volume",
"tokens.selector.section.yours": "Jou tekens",
"tokens.table.search.placeholder.pools": "Soek swembaddens",
"tokens.table.search.placeholder.tokens": "Soek tekens",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Lae netwerktokenbalans",
"transaction.watcher.error.cancel": "Kan nie transaksie kanselleer nie",
"transaction.watcher.error.status": "Kon nie transaksiestatus nagaan nie",
- "unichain.promotion.cold.description": "Vinniger omruilings. Laer fooie. Unichain is die tuiste vir DeFi.",
- "unichain.promotion.cold.title": "Ons stel Unichain bekend",
- "unichain.promotion.modal.description": "Vinniger omruilings. Laer fooie. Unichain is die tuiste vir kruis-ketting likiditeit.",
- "unichain.promotion.modal.detail.costs": "Laer koste vir die skep van poele en bestuur van posisies.",
- "unichain.promotion.modal.detail.fees": "Bespaar 95% op fooie in vergelyking met Ethereum.",
- "unichain.promotion.modal.detail.instant": "Ruil onmiddellik",
- "unichain.promotion.warm.description": "Ruil jou gunsteling tokens vinniger en met laer gaskoste.",
- "unichain.promotion.warm.title": "Begin ruil op Unichain",
"uniswapX.aggregatesLiquidity": " versamel likiditeitsbronne vir beter pryse en gasvrye ruiltransaksies.",
"uniswapx.description": "UniswapX versamel likiditeitsbronne vir beter pryse en gasvrye ruiltransaksies.",
- "uniswapx.included": "Sluit UniswapXin",
+ "uniswapx.included": "Sluit UniswapXin",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Kom meer te wete oor ruil met UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/ar-SA.json b/packages/uniswap/src/i18n/locales/translations/ar-SA.json
index addbdd3b9ac..3ad38b7e763 100644
--- a/packages/uniswap/src/i18n/locales/translations/ar-SA.json
+++ b/packages/uniswap/src/i18n/locales/translations/ar-SA.json
@@ -176,6 +176,7 @@
"common.allTime": "كل الوقت",
"common.amount.label": "كمية",
"common.amountDeposited.label": "{{amount}} مودع",
+ "common.amountInput.placeholder": "كمية الإدخال",
"common.and": "و",
"common.app": "برنامج",
"common.approval.cancelled": "تم إلغاء الموافقة",
@@ -312,7 +313,6 @@
"common.currency": "عملة",
"common.currentPrice": "السعر الحالي",
"common.currentPrice.label": "السعر الحالي:",
- "common.currentPrice.unavailable": "السعر الحالي غير متاح",
"common.custom": "مخصص",
"common.customRange": "مجموعة مخصصة",
"common.dataOutdated": "قد تكون البيانات قديمة",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} الرسوم المكتسبة:",
"common.feesEarnedPerBase": "{{symbolA}} لكل {{symbolB}}",
"common.fetchingRoute": "جارٍ جلب المسار",
+ "common.flag": "علَم",
"common.floor": "أرضية",
"common.floorPrice": "أدنى سعر",
"common.for": "ل",
@@ -681,7 +682,6 @@
"common.wallet.approve": "الموافقة في المحفظة",
"common.wallet.label": "محفظة",
"common.walletForSwapping": "المحفظة المصممة للمبادلة. متوفر على نظامي iOS وAndroid.",
- "common.warning": "تحذير",
"common.webApp": "التطبيق على شبكة الإنترنت",
"common.website": "موقع إلكتروني",
"common.whyApprove": "لماذا يتعين علي الموافقة على الرمز المميز؟",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "تعذر تحميل الرموز المميزة للشراء",
"fiatOnRamp.error.max": "الحد الأقصى {{amount}}",
"fiatOnRamp.error.min": "الحد الأدنى {{amount}}",
- "fiatOnRamp.error.noQuotes": "لم يتم العثور على اقتباسات.",
"fiatOnRamp.error.unavailable": "هذه الخدمة غير متوفرة في منطقتك",
"fiatOnRamp.error.unsupported": "غير معتمد في المنطقة",
"fiatOnRamp.error.usd": "متاح فقط للشراء بالدولار الأمريكي",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} لـ {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "لم يتم العثور على اقتباسات",
"fiatOnRamp.purchasedOn": "تم الشراء على {{serviceProvider}}",
"fiatOnRamp.quote.advice": "ستستمر في الوصول إلى بوابة المزود لمعرفة الرسوم المرتبطة بمعاملتك.",
"fiatOnRamp.quote.type.list": "{{optionsList}}وخيارات أخرى",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} السعر:",
"migrate.v2Description": "ستقوم هذه الأداة بترحيل سيولة {{source}} الخاصة بك بأمان إلى V3. العملية غير موثوقة تمامًا بفضل <0>عقد الترحيل Uniswap0> ↗",
"migrate.v2Instruction": "بالنسبة لكل مجموعة موضحة أدناه، انقر فوق ترحيل لإزالة السيولة الخاصة بك من Uniswap V2 وإيداعها في Uniswap V3.",
+ "migrate.v2Subtitle": "قم بترحيل رموز السيولة الخاصة بك من Uniswap V2 إلى Uniswap V3.",
"migrate.v2Title": "ترحيل السيولة V2",
"migrate.v3Price": "V3 {{sym}} السعر:",
"mint.v3.input.invalidPrice.error": "إدخال السعر غير صالح",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "أعط محفظتك اسمًا",
"onboarding.notification.permission.message": "لتلقي الإشعارات، قم بتشغيل إشعارات Uniswap Wallet في إعدادات جهازك.",
"onboarding.notification.permission.title": "إذن الإخطارات",
- "onboarding.notification.subtitle": "ابق على اطلاع دائم بحالة المعاملات والتغييرات الرئيسية في أسعار الرموز المفضلة لديك",
- "onboarding.notification.title": "تشغيل الإشعارات",
+ "onboarding.notification.subtitle": "احصل على إشعار عند اكتمال عمليات النقل والمقايضة والموافقات.",
+ "onboarding.notification.title": "قم بتشغيل إشعارات الدفع",
"onboarding.passkey.account.protection": "سيتم حماية حسابك بواسطة تخزين كلمة المرور الخاصة بك بشكل آمن.",
"onboarding.passkey.biometric.scan": "الهاتف أو الجهاز اللوحي أو المتصفح - ما عليك سوى مسح بياناتك الحيوية وسيتم تسجيل دخولك.",
"onboarding.passkey.create": "إنشاء مفتاح المرور الخاص بك",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "اتصل بالمحفظة لعرض السيولة الخاصة بك.",
"pool.liquidity.data.error.message": "حدث خطأ أثناء جلب البيانات المطلوبة لمعاملتك.",
"pool.liquidity.earn.fee": "يحصل مزودو السيولة على رسوم بنسبة 0.3% على جميع الصفقات بما يتناسب مع حصتهم في المجمع. تتم إضافة الرسوم إلى المجمع، وتتراكم في الوقت الفعلي ويمكن المطالبة بها عن طريق سحب السيولة الخاصة بك.",
- "pool.liquidity.outOfSync": "عدم تطابق أسعار المجمع والسوق",
- "pool.liquidity.outOfSync.message": "تختلف الأسعار في هذا المجمع عن أسعار السوق للرموز المحددة. قم بتعديل نطاق السعر وفقًا لذلك أو انتظر حتى يستعيد المجمع توازنه لتجنب الخسائر.",
+ "pool.liquidity.outOfSync": "أسعار حمامات السباحة غير متزامنة",
+ "pool.liquidity.outOfSync.message": "الأسعار في هذا المجمع غير متزامنة مع السوق الحالية. قد يؤدي إضافة السيولة إلى خسارة الأموال.",
"pool.liquidity.ownershipWarning.message": "أنت لست مالك منصب LP هذا. لن تتمكن من سحب السيولة من هذا المركز إلا إذا كنت تمتلك العنوان التالي: {{ownerAddress}}",
"pool.liquidity.rewards": "مكافآت مزود السيولة",
"pool.liquidity.taxWarning": "الضرائب الرمزية",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "سعر هذا المسبح يقع ضمن النطاق الذي اخترته. موقعك يكسب حاليًا رسومًا.",
"pool.rates": "معدلات",
"pool.ratioTokenToPrice": "ستحدد نسبة الرموز المميزة التي تضيفها سعر هذا المجمع.",
- "pool.refresh.prices": "تحديث الأسعار",
"pool.removeLiquidity": "إزالة السيولة",
"pool.rewardsPool.label": "الرموز المميزة في مجموعة المكافآت:",
"pool.selectedRange": "النطاق المحدد",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "تعتبر الخطافات ميزة متقدمة تتيح للمجموعات التفاعل مع العقود الذكية، مما يفتح المجال أمام قدرات مختلفة. توخ الحذر عند إضافة الخطافات، حيث قد تكون بعضها ضارة أو تسبب عواقب غير مقصودة.",
"position.addingHook": "إضافة الخطاف",
"position.addingHook.disclaimer": "قد يؤدي إضافة الخطافات إلى عواقب غير مقصودة. قم بإجراء البحث واستمر على مسؤوليتك الخاصة.",
- "position.addingHook.hideProperties": "إخفاء الخصائص",
"position.addingHook.invalidAddress": "أدخل عنوان ربط صالحًا",
"position.addingHook.viewProperties": "عرض الخصائص",
"position.appearHere": "سوف يظهر موقفك هنا.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "تم الإيداع {{currencySymbol}}",
"position.hook.disclaimer": "أنا أفهم المخاطر.",
"position.hook.liquidityWarning": "قد يتسبب هذا العلم في منع المجمع من إضافة سيولة جديدة. قد يتم التراجع عن معاملتك.",
- "position.hook.removeWarning": "قد يؤدي ذلك إلى قفل أموالك أو منعك من تحصيل الرسوم.",
+ "position.hook.removeWarning": "يمكن أن يؤدي هذا العلم إلى قفل أموالك أو منعك من تحصيل الرسوم.",
"position.hook.swapWarning": "يمكن أن يسمح هذا العلم للمستخدمين المتمرسين بالاستفادة من السيولة في الوقت المناسب بسهولة أكبر مما يؤدي إلى انخفاض الرسوم المكتسبة.",
"position.hook.warningHeader": "تم اكتشاف خطاف عالي الخطورة",
"position.hook.warningInfo": "لقد حددنا المخاطر المحتملة المرتبطة بهذا الخطاف. يرجى مراجعة العلامات والتأكد من أن هذا هو الخطاف الذي تريد استخدامه قبل المتابعة.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "الموافقة والمبادلة",
"swap.approveInWallet": "الموافقة في محفظتك",
"swap.balance.amount": "الرصيد: {{amount}}",
- "swap.bestRoute.cost": "من المتوقع أن تبلغ تكلفة الطريق الأكثر كفاءة حوالي{{gasPrice}} في تكاليف الشبكة. ",
+ "swap.bestRoute.cost": "أفضل سعر لتكاليف الطريق ~{{gasPrice}} بالغاز. ",
+ "swap.bestRoute.cost.v4": "تبلغ تكاليف الطريق الأمثل ~{{gasPrice}} في الغاز. ",
"swap.bridging.estimatedTime": "الوقت المقدر",
"swap.bridging.title": "التبديل عبر الشبكات",
"swap.bridging.warning.description": "أنت تقوم بالتبديل من {{fromNetwork}} إلى {{toNetwork}}. يُعرف هذا أيضًا باسم \"الربط\"، والذي ينقل رموزك من شبكة إلى أخرى.",
@@ -1868,16 +1866,15 @@
"swap.review": "مراجعة المبادلة",
"swap.review.summary": "أنت تقوم بالتبديل",
"swap.reviewLimit": "حد المراجعة",
- "swap.route.optimizedGasCost": "يأخذ هذا المسار في الاعتبار المسارات المنقسمة والقفزات المتعددة وتكاليف الشبكة لكل خطوة.",
+ "swap.route.optimizedGasCost": "يعمل هذا المسار على تحسين إجمالي الناتج لديك من خلال مراعاة المسارات المنقسمة والقفزات المتعددة وتكاليف الشبكة لكل خطوة.",
"swap.settings.deadline.tooltip": "سيتم استرداد معاملتك إذا ظلت معلقة لأكثر من هذه الفترة الزمنية. (الحد الأقصى: 3 أيام).",
"swap.settings.deadline.warning": "الموعد النهائي مرتفع",
"swap.settings.protection.description": "مع تشغيل حماية المبادلة، ستتم حماية معاملاتك على الإيثيريوم من هجمات الساندويتش، مع تقليل فرص الفشل.",
"swap.settings.protection.subtitle.supported": "{{chainName}} الشبكة",
"swap.settings.protection.subtitle.unavailable": "غير متوفر على {{chainName}}",
"swap.settings.protection.title": "حماية المبادلة",
- "swap.settings.routingPreference.option.default.description": "يؤدي تحديد هذا الخيار إلى تحديد الطريق الأكثر كفاءة لعملية التبديل الخاصة بك.",
- "swap.settings.routingPreference.option.default.description.preV4": "يقوم عميل Uniswap باختيار خيار التداول الأرخص مع الأخذ في الاعتبار السعر وتكاليف الشبكة.",
- "swap.settings.routingPreference.option.default.tooltip": "يتم تحديد المسار مع الأخذ في الاعتبار مجموعات v2 وv3 وv4 معينة، مع الأخذ في الاعتبار تأثير السعر المقدر وتكاليف الشبكة.",
+ "swap.settings.routingPreference.option.default.description": "يقوم عميل Uniswap باختيار خيار التداول الأرخص مع الأخذ في الاعتبار السعر وتكاليف الشبكة.",
+ "swap.settings.routingPreference.option.default.description.v4": "يقوم عميل Uniswap باختيار خيار التداول الأمثل مع الأخذ في الاعتبار السعر وتكاليف الشبكة.",
"swap.settings.routingPreference.option.v2.title": "حمامات v2",
"swap.settings.routingPreference.option.v3.title": "حمامات v3",
"swap.settings.routingPreference.option.v4.title": "حمامات سباحة v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "قم دائمًا بإجراء بحثك",
"token.safety.warning.blocked.description.default_one": "لا يمكنك تداول هذا الرمز المميز باستخدام تطبيق Uniswap.",
"token.safety.warning.blocked.description.default_other": "لا يمكنك تداول هذه الرموز المميزة باستخدام تطبيق Uniswap.",
+ "token.safety.warning.blocked.description.named": "لا يمكنك التداول {{tokenSymbol}} باستخدام تطبيق Uniswap.",
"token.safety.warning.dontShowWarningAgain": "لا تظهر لي هذا التحذير مرة أخرى",
"token.safety.warning.doYourOwnResearch": "قم دائمًا بإجراء البحث بنفسك قبل المتابعة.",
"token.safety.warning.feeDescription": "يتم شحن عند {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "قد لا يكون {{tokenSymbol}} هو الرمز الذي تبحث عن مبادلته.",
"token.safety.warning.malicious.title": "تم الكشف عن رمز ضار",
"token.safety.warning.mayResultInLoss": "قد يؤدي تبديله إلى خسارة الأموال.",
+ "token.safety.warning.medium.heading.default_one": "لا يتم تداول هذا الرمز في البورصات المركزية الأمريكية الرائدة.",
+ "token.safety.warning.medium.heading.default_other": "لا يتم تداول هذه الرموز المميزة في البورصات المركزية الأمريكية الرائدة.",
+ "token.safety.warning.medium.heading.default_one_also": "كما أن هذه العملة الرمزية لا يتم تداولها في البورصات المركزية الرائدة في الولايات المتحدة.",
+ "token.safety.warning.medium.heading.default_other_also": "كما أن هذه الرموز لا يتم تداولها في البورصات المركزية الرائدة في الولايات المتحدة.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} لا يتم تداوله في البورصات المركزية الأمريكية الرائدة.",
"token.safety.warning.notListedOnExchanges": "غير مدرج في البورصات الأمريكية الرائدة",
"token.safety.warning.sellFee100.message": "تم وضع علامة على {{ tokenSymbol }} على أنها غير قابلة للبيع.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "تم تصنيف {{tokenSymbol}} على أنه بريد عشوائي بواسطة Blockaid.",
"token.safety.warning.spam.title": "تم اكتشاف رمز البريد العشوائي",
"token.safety.warning.spamsUsers": "البريد العشوائي للمستخدمين",
+ "token.safety.warning.strong.heading.default_one": "لا يتم تداول هذا الرمز المميز في البورصات المركزية الأمريكية الرائدة أو يتم مبادلته بشكل متكرر على Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "لا يتم تداول هذه الرموز المميزة في البورصات المركزية الأمريكية الرائدة أو يتم تبادلها بشكل متكرر على Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} لا يتم تداوله في البورصات المركزية الأمريكية الرائدة أو يتم مبادلته بشكل متكرر على Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "تتقاضى {{tokenSymbol}} رسومًا قدرها {{buyFeePercent}} عند الشراء و {{sellFeePercent}} عند البيع.",
"token.safety.warning.tokenChargesFee.buy.message": "تفرض {{tokenSymbol}} رسومًا قدرها {{feePercent}} عند الشراء.",
"token.safety.warning.tokenChargesFee.sell.message": "تفرض {{tokenSymbol}} رسومًا قدرها {{feePercent}} عند البيع.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} يتقاضى رسومًا عند الشراء أو البيع.",
+ "token.safetyLevel.blocked.header": "غير متاح",
"token.safetyLevel.blocked.message": "لا يمكنك تداول هذا الرمز المميز باستخدام Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "حذر",
+ "token.safetyLevel.medium.message": "لا يتم تداول هذه العملة في البورصات المركزية الرائدة في الولايات المتحدة. احرص دائمًا على إجراء بحثك الخاص قبل المتابعة.",
"token.safetyLevel.medium.message.plural": "لا يتم تداول هذه الرموز في البورصات المركزية الرائدة في الولايات المتحدة. لذا، احرص دائمًا على إجراء بحثك الخاص قبل المتابعة.",
+ "token.safetyLevel.strong.header": "تحذير",
+ "token.safetyLevel.strong.message": "لا يتم تداول هذه العملة في البورصات المركزية الرائدة في الولايات المتحدة ولا يتم تبادلها بشكل متكرر على Uniswap. قم دائمًا بإجراء بحثك الخاص قبل المتابعة.",
"token.selector.search.error": "تعذر تحميل نتائج البحث",
"token.stats.fullyDilutedValuation": "التقييم المخفف بالكامل",
"token.stats.marketCap": "القيمة السوقية",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "رموز أخرى على {{network}}",
"tokens.selector.section.recent": "عمليات البحث الأخيرة",
"tokens.selector.section.search": "نتائج البحث",
- "tokens.selector.section.trending": "الرموز حسب حجم 24 ساعة",
"tokens.selector.section.yours": "الرموز الخاصة بك",
"tokens.table.search.placeholder.pools": "بحث في حمامات السباحة",
"tokens.table.search.placeholder.tokens": "رموز البحث",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "رصيد رمز الشبكة منخفض",
"transaction.watcher.error.cancel": "غير قادر على إلغاء المعاملة",
"transaction.watcher.error.status": "حدث خطأ أثناء التحقق من حالة المعاملة",
- "unichain.promotion.cold.description": "مبادلات أسرع ورسوم أقل. Unichain هي موطن DeFi.",
- "unichain.promotion.cold.title": "تقديم Unichain",
- "unichain.promotion.modal.description": "مبادلات أسرع ورسوم أقل. Unichain هي موطن السيولة عبر السلسلة.",
- "unichain.promotion.modal.detail.costs": "انخفاض تكاليف إنشاء المجمعات وإدارة المواقف.",
- "unichain.promotion.modal.detail.fees": "وفر 95% من الرسوم مقارنةً بإيثريوم.",
- "unichain.promotion.modal.detail.instant": "تبادل على الفور",
- "unichain.promotion.warm.description": "قم بتبديل الرموز المفضلة لديك بشكل أسرع وبتكاليف غاز أقل.",
- "unichain.promotion.warm.title": "ابدأ بالتبديل على Unichain",
"uniswapX.aggregatesLiquidity": " تجميع مصادر السيولة للحصول على أسعار أفضل ومقايضات خالية من الغاز.",
"uniswapx.description": "يقوم UniswapX بتجميع مصادر السيولة للحصول على أسعار أفضل ومقايضات خالية من الغاز.",
- "uniswapx.included": "يشمل UniswapX",
+ "uniswapx.included": "يتضمن UniswapX",
"uniswapx.item": "يوني سواب إكس",
"uniswapx.label": "يونيسوابكس",
"uniswapX.learnMore": "تعرف على المزيد حول المبادلة باستخدام UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/ca-ES.json b/packages/uniswap/src/i18n/locales/translations/ca-ES.json
index b549ddeb9c1..dbc88fba72a 100644
--- a/packages/uniswap/src/i18n/locales/translations/ca-ES.json
+++ b/packages/uniswap/src/i18n/locales/translations/ca-ES.json
@@ -176,6 +176,7 @@
"common.allTime": "Tot el temps",
"common.amount.label": "Import",
"common.amountDeposited.label": "{{amount}} Dipositat",
+ "common.amountInput.placeholder": "Import d'entrada",
"common.and": "i",
"common.app": "App",
"common.approval.cancelled": "Aprovació cancel·lada",
@@ -312,7 +313,6 @@
"common.currency": "Moneda",
"common.currentPrice": "Preu actual",
"common.currentPrice.label": "Preu actual:",
- "common.currentPrice.unavailable": "Preu actual no disponible",
"common.custom": "Personalitzat",
"common.customRange": "Gamma personalitzada",
"common.dataOutdated": "Les dades poden estar obsoletes",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Comissions guanyades:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Recollida de ruta",
+ "common.flag": "Bandera",
"common.floor": "Pis",
"common.floorPrice": "Preu pis",
"common.for": "Per",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Aprovar a la cartera",
"common.wallet.label": "Cartera",
"common.walletForSwapping": "La cartera construïda per intercanviar. Disponible a iOS i Android.",
- "common.warning": "Avís",
"common.webApp": "Aplicació web",
"common.website": "Lloc web",
"common.whyApprove": "Per què he d'aprovar un testimoni?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "No s'han pogut carregar fitxes per comprar",
"fiatOnRamp.error.max": "Màxim {{amount}}",
"fiatOnRamp.error.min": "Mínim {{amount}}",
- "fiatOnRamp.error.noQuotes": "No s'han trobat cites.",
"fiatOnRamp.error.unavailable": "Aquest servei no està disponible a la vostra regió",
"fiatOnRamp.error.unsupported": "No s'admet a la regió",
"fiatOnRamp.error.usd": "Només disponible per comprar en USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} per a {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No s'han trobat cites",
"fiatOnRamp.purchasedOn": "Comprat el {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Continuareu al portal del proveïdor per veure les tarifes associades a la vostra transacció.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, i altres opcions",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Preu:",
"migrate.v2Description": "Aquesta eina migrarà de manera segura la vostra liquiditat {{source}} a V3. El procés és completament sense confiança gràcies al contracte de migració <0>Uniswap0> ↗",
"migrate.v2Instruction": "Per a cada grup que es mostra a continuació, feu clic a migra per eliminar la vostra liquiditat d'Uniswap V2 i dipositar-la a Uniswap V3.",
+ "migrate.v2Subtitle": "Migreu els vostres fitxes de liquiditat d'Uniswap V2 a Uniswap V3.",
"migrate.v2Title": "Migrar liquiditat V2",
"migrate.v3Price": "V3 {{sym}} Preu:",
"mint.v3.input.invalidPrice.error": "Entrada de preu no vàlida",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Doneu un nom a la vostra cartera",
"onboarding.notification.permission.message": "Per rebre notificacions, activeu les notificacions per a Uniswap Wallet a la configuració del vostre dispositiu.",
"onboarding.notification.permission.title": "Permís de notificacions",
- "onboarding.notification.subtitle": "Manteniu-vos actualitzat sobre l'estat de les transaccions i els canvis importants de preu dels fitxes preferits",
- "onboarding.notification.title": "Activa les notificacions",
+ "onboarding.notification.subtitle": "Rebeu una notificació quan finalitzin les vostres transferències, intercanvis i aprovacions.",
+ "onboarding.notification.title": "Activa les notificacions push",
"onboarding.passkey.account.protection": "El vostre compte està protegit pel vostre propi emmagatzematge segur de contrasenyes.",
"onboarding.passkey.biometric.scan": "Telèfon, tauleta o navegador: només cal escanejar la vostra biometria i iniciareu la sessió.",
"onboarding.passkey.create": "Crea la teva clau d'accés",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Connecteu-vos a una cartera per veure la vostra liquiditat.",
"pool.liquidity.data.error.message": "S'ha produït un error en obtenir les dades necessàries per a la vostra transacció.",
"pool.liquidity.earn.fee": "Els proveïdors de liquiditat guanyen una comissió del 0,3% en totes les operacions proporcional a la seva quota del grup. Les comissions s'afegeixen al grup, s'acumulen en temps real i es poden reclamar retirant la seva liquiditat.",
- "pool.liquidity.outOfSync": "Desconcordança de preus del grup i del mercat",
- "pool.liquidity.outOfSync.message": "Els preus d'aquest grup difereixen amb els preus de mercat de les fitxes seleccionades. Ajusteu el vostre rang de preus en conseqüència o espereu que el grup es reequilibri per evitar pèrdues.",
+ "pool.liquidity.outOfSync": "Preus de la piscina no sincronitzats",
+ "pool.liquidity.outOfSync.message": "Els preus d'aquest grup no estan sincronitzats amb el mercat actual. L'addició de liquiditat pot provocar una pèrdua de fons.",
"pool.liquidity.ownershipWarning.message": "No sou el propietari d'aquesta posició de LP. No podreu retirar la liquiditat d'aquesta posició tret que tingueu l'adreça següent: {{ownerAddress}}",
"pool.liquidity.rewards": "Recompenses del proveïdor de liquiditat",
"pool.liquidity.taxWarning": "Impostos de testimonis",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "El preu d'aquesta piscina es troba dins de l'interval seleccionat. Actualment, la teva posició està guanyant comissions.",
"pool.rates": "Tarifes",
"pool.ratioTokenToPrice": "La proporció de fitxes que afegiu establirà el preu d'aquest grup.",
- "pool.refresh.prices": "Actualitzar preus",
"pool.removeLiquidity": "Eliminar liquiditat",
"pool.rewardsPool.label": "Fitxes del grup de recompenses:",
"pool.selectedRange": "Interval seleccionat",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Els ganxos són una funció avançada que permet als grups interactuar amb contractes intel·ligents, desbloquejant diverses capacitats. Aneu amb compte quan afegiu ganxos, ja que alguns poden ser maliciosos o causar conseqüències no desitjades.",
"position.addingHook": "Afegir ganxo",
"position.addingHook.disclaimer": "Afegir ganxos pot tenir conseqüències no desitjades. Feu la vostra recerca i procediu sota el vostre propi risc.",
- "position.addingHook.hideProperties": "Amaga propietats",
"position.addingHook.invalidAddress": "Introduïu una adreça de ganxo vàlida",
"position.addingHook.viewProperties": "Veure propietats",
"position.appearHere": "La teva posició apareixerà aquí.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Dipositat {{currencySymbol}}",
"position.hook.disclaimer": "Entenc els riscos.",
"position.hook.liquidityWarning": "Aquesta bandera pot fer que el grup bloquegi l'addició de nova liquiditat. La vostra transacció es pot revertir.",
- "position.hook.removeWarning": "Pot fer que els vostres fons es bloquegin o que us impedeixin cobrar comissions.",
+ "position.hook.removeWarning": "Aquesta bandera pot provocar que els vostres fons es bloquegin o que us impedeixin cobrar comissions.",
"position.hook.swapWarning": "Aquesta bandera pot permetre que els usuaris sofisticats aprofitin més fàcilment la liquiditat just a temps, donant lloc a tarifes més baixes.",
"position.hook.warningHeader": "S'ha detectat un ganxo d'alt risc",
"position.hook.warningInfo": "Hem identificat riscos potencials amb aquest ganxo. Reviseu les banderes i comproveu que aquest és el ganxo que voleu utilitzar abans de continuar.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Aprovar i intercanviar",
"swap.approveInWallet": "Aprova a la teva cartera",
"swap.balance.amount": "Balanç: {{amount}}",
- "swap.bestRoute.cost": "Es calcula que la ruta més eficient costa ~{{gasPrice}} en costos de xarxa. ",
+ "swap.bestRoute.cost": "La ruta al millor preu costa ~{{gasPrice}} en gasolina. ",
+ "swap.bestRoute.cost.v4": "La ruta òptima costa ~{{gasPrice}} en gasolina. ",
"swap.bridging.estimatedTime": "Est. temps",
"swap.bridging.title": "Canvi entre xarxes",
"swap.bridging.warning.description": "Estàs canviant de {{fromNetwork}} a {{toNetwork}}. Això també es coneix com \"pont\", que mou els vostres fitxes d'una xarxa a una altra.",
@@ -1868,16 +1866,15 @@
"swap.review": "Intercanvi de ressenyes",
"swap.review.summary": "Estàs intercanviant",
"swap.reviewLimit": "Límit de revisió",
- "swap.route.optimizedGasCost": "Aquesta ruta té en compte les rutes dividides, els salts múltiples i els costos de xarxa de cada pas.",
+ "swap.route.optimizedGasCost": "Aquesta ruta optimitza la vostra sortida total tenint en compte les rutes dividides, els salts múltiples i els costos de xarxa de cada pas.",
"swap.settings.deadline.tooltip": "La transacció es revertirà si està pendent durant més d'aquest període de temps. (Màxim: 3 dies).",
"swap.settings.deadline.warning": "Termini elevat",
"swap.settings.protection.description": "Amb la protecció d'intercanvi activada, les vostres transaccions d'Ethereum estaran protegides dels atacs sandvitx, amb possibilitats de fracàs reduïdes.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Xarxa",
"swap.settings.protection.subtitle.unavailable": "No disponible el {{chainName}}",
"swap.settings.protection.title": "Protecció d'intercanvi",
- "swap.settings.routingPreference.option.default.description": "Si seleccioneu aquesta opció, s'identifica la ruta més eficient per al vostre intercanvi.",
- "swap.settings.routingPreference.option.default.description.preV4": "El client Uniswap selecciona l'opció comercial més barata tenint en compte el preu i els costos de xarxa.",
- "swap.settings.routingPreference.option.default.tooltip": "S'identifica una ruta tenint en compte els grups v2, v3 i determinats v4, tenint en compte l'impacte estimat del preu i els costos de xarxa.",
+ "swap.settings.routingPreference.option.default.description": "El client Uniswap selecciona l'opció comercial més barata tenint en compte el preu i els costos de xarxa.",
+ "swap.settings.routingPreference.option.default.description.v4": "El client Uniswap selecciona l'opció comercial òptima tenint en compte el preu i els costos de la xarxa.",
"swap.settings.routingPreference.option.v2.title": "piscines v2",
"swap.settings.routingPreference.option.v3.title": "piscines v3",
"swap.settings.routingPreference.option.v4.title": "piscines v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Feu sempre la vostra recerca",
"token.safety.warning.blocked.description.default_one": "No podeu intercanviar aquest testimoni mitjançant l'aplicació Uniswap.",
"token.safety.warning.blocked.description.default_other": "No podeu intercanviar aquests fitxes amb l'aplicació Uniswap.",
+ "token.safety.warning.blocked.description.named": "No pots comerciar {{tokenSymbol}} amb l'aplicació Uniswap.",
"token.safety.warning.dontShowWarningAgain": "No em tornis a mostrar aquest avís",
"token.safety.warning.doYourOwnResearch": "Feu sempre la vostra pròpia investigació abans de continuar.",
"token.safety.warning.feeDescription": "Cobra un quan {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "És possible que {{tokenSymbol}} no sigui el testimoni que voleu intercanviar.",
"token.safety.warning.malicious.title": "S'ha detectat un testimoni maliciós",
"token.safety.warning.mayResultInLoss": "Canviar-lo pot provocar una pèrdua de fons.",
+ "token.safety.warning.medium.heading.default_one": "Aquest testimoni no es negocia a les principals borses centralitzades dels EUA.",
+ "token.safety.warning.medium.heading.default_other": "Aquestes fitxes no es comercialitzen a les principals borses centralitzades dels EUA.",
+ "token.safety.warning.medium.heading.default_one_also": "Aquest testimoni tampoc no es negocia a les principals borses centralitzades dels EUA.",
+ "token.safety.warning.medium.heading.default_other_also": "Aquestes fitxes tampoc es cotitzen a les principals borses centralitzades dels EUA.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} no es negocia a les principals borses centralitzades dels EUA.",
"token.safety.warning.notListedOnExchanges": "No cotitza a les principals borses dels EUA",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} s'ha marcat com a no venedor.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} ha estat marcat com a correu brossa per Blockaid.",
"token.safety.warning.spam.title": "S'ha detectat un testimoni de correu brossa",
"token.safety.warning.spamsUsers": "Usuaris de correu brossa",
+ "token.safety.warning.strong.heading.default_one": "Aquest testimoni no es negocia a les principals borses centralitzades dels EUA ni s'intercanvia amb freqüència a Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Aquestes fitxes no es comercialitzen a les principals borses centralitzades dels EUA ni s'intercanvien amb freqüència a Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} no es negocia a les principals borses centralitzades dels EUA ni s'intercanvia amb freqüència a Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} cobra una tarifa de {{buyFeePercent}} quan es compra i {{sellFeePercent}} quan es ven.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} cobra una tarifa de {{feePercent}} quan es compra.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} cobra una tarifa de {{feePercent}} quan es ven.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} cobra una tarifa quan es compra o es ven.",
+ "token.safetyLevel.blocked.header": "No disponible",
"token.safetyLevel.blocked.message": "No podeu intercanviar aquest testimoni amb Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Precaució",
+ "token.safetyLevel.medium.message": "Aquest testimoni no es negocia a les principals borses centralitzades dels EUA. Feu sempre la vostra pròpia investigació abans de continuar.",
"token.safetyLevel.medium.message.plural": "Aquestes fitxes no es comercialitzen a les principals borses centralitzades dels EUA. Feu sempre la vostra pròpia investigació abans de continuar.",
+ "token.safetyLevel.strong.header": "Avís",
+ "token.safetyLevel.strong.message": "Aquest testimoni no es negocia a les principals borses centralitzades dels EUA ni s'intercanvia amb freqüència a Uniswap. Feu sempre la vostra pròpia investigació abans de continuar.",
"token.selector.search.error": "No s'han pogut carregar els resultats de la cerca",
"token.stats.fullyDilutedValuation": "Valoració totalment diluïda",
"token.stats.marketCap": "Cap de mercat",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Altres fitxes a {{network}}",
"tokens.selector.section.recent": "Recerques recents",
"tokens.selector.section.search": "Resultats de la cerca",
- "tokens.selector.section.trending": "Fitxes per volum de 24 hores",
"tokens.selector.section.yours": "Les teves fitxes",
"tokens.table.search.placeholder.pools": "Cerca piscines",
"tokens.table.search.placeholder.tokens": "Cerca fitxes",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Baix balanç de fitxes de xarxa",
"transaction.watcher.error.cancel": "No es pot cancel·lar la transacció",
"transaction.watcher.error.status": "S'ha produït un error en comprovar l'estat de la transacció",
- "unichain.promotion.cold.description": "Canvis més ràpids. Tarifes més baixes. Unichain és la llar de DeFi.",
- "unichain.promotion.cold.title": "Presentació d'Unichain",
- "unichain.promotion.modal.description": "Canvis més ràpids. Tarifes més baixes. Unichain és la llar de la liquiditat entre cadenas.",
- "unichain.promotion.modal.detail.costs": "Menors costos de creació de grups i gestió de posicions.",
- "unichain.promotion.modal.detail.fees": "Estalvieu un 95% en comissions en comparació amb Ethereum.",
- "unichain.promotion.modal.detail.instant": "Canvia a l'instant",
- "unichain.promotion.warm.description": "Canvia les teves fitxes preferides més ràpid i amb menys costos de gasolina.",
- "unichain.promotion.warm.title": "Comenceu a canviar a Unichain",
"uniswapX.aggregatesLiquidity": " agrega fonts de liquiditat per obtenir millors preus i permutes sense gas.",
"uniswapx.description": "UniswapX agrega fonts de liquiditat per obtenir millors preus i permutes sense gas.",
- "uniswapx.included": "Inclou UniswapX",
+ "uniswapx.included": "Inclou UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Més informació sobre l'intercanvi amb UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/cs-CZ.json b/packages/uniswap/src/i18n/locales/translations/cs-CZ.json
index 152230f7d76..156b7e143ff 100644
--- a/packages/uniswap/src/i18n/locales/translations/cs-CZ.json
+++ b/packages/uniswap/src/i18n/locales/translations/cs-CZ.json
@@ -176,6 +176,7 @@
"common.allTime": "Pořád",
"common.amount.label": "Množství",
"common.amountDeposited.label": "{{amount}} Vloženo",
+ "common.amountInput.placeholder": "Vstupní částka",
"common.and": "a",
"common.app": "Aplikace",
"common.approval.cancelled": "Schválení zrušeno",
@@ -312,7 +313,6 @@
"common.currency": "Měna",
"common.currentPrice": "Aktuální cena",
"common.currentPrice.label": "Aktuální cena:",
- "common.currentPrice.unavailable": "Aktuální cena není k dispozici",
"common.custom": "Zvyk",
"common.customRange": "Vlastní rozsah",
"common.dataOutdated": "Data mohou být zastaralá",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Získané poplatky:",
"common.feesEarnedPerBase": "{{symbolA}} za {{symbolB}}",
"common.fetchingRoute": "Načítání trasy",
+ "common.flag": "Vlajka",
"common.floor": "Podlaha",
"common.floorPrice": "Podlahová cena",
"common.for": "Pro",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Schválit v peněžence",
"common.wallet.label": "Peněženka",
"common.walletForSwapping": "Peněženka stvořená pro výměnu. K dispozici pro iOS a Android.",
- "common.warning": "Varování",
"common.webApp": "Webová aplikace",
"common.website": "webová stránka",
"common.whyApprove": "Proč musím schvalovat token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Nepodařilo se načíst tokeny k nákupu",
"fiatOnRamp.error.max": "Maximum {{amount}}",
"fiatOnRamp.error.min": "Minimálně {{amount}}",
- "fiatOnRamp.error.noQuotes": "Nebyly nalezeny žádné citace.",
"fiatOnRamp.error.unavailable": "Tato služba není ve vašem regionu dostupná",
"fiatOnRamp.error.unsupported": "Není podporováno v regionu",
"fiatOnRamp.error.usd": "Lze zakoupit pouze v USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} pro {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Nebyly nalezeny žádné citace",
"fiatOnRamp.purchasedOn": "Zakoupeno {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Budete pokračovat na portál poskytovatele, kde uvidíte poplatky spojené s vaší transakcí.",
"fiatOnRamp.quote.type.list": "{{optionsList}}a další možnosti",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Cena:",
"migrate.v2Description": "Tento nástroj bezpečně migruje vaši {{source}} likviditu do V3. Proces je zcela nedůvěryhodný díky smlouvě o migraci <0>Uniswap0> ↗",
"migrate.v2Instruction": "U každého níže zobrazeného fondu klikněte na migrovat, abyste odstranili svou likviditu z Uniswap V2 a vložili ji do Uniswap V3.",
+ "migrate.v2Subtitle": "Migrujte své tokeny likvidity z Uniswap V2 na Uniswap V3.",
"migrate.v2Title": "Migrujte likviditu V2",
"migrate.v3Price": "V3 {{sym}} Cena:",
"mint.v3.input.invalidPrice.error": "Neplatný údaj o ceně",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Dejte své peněžence jméno",
"onboarding.notification.permission.message": "Chcete-li dostávat upozornění, zapněte v nastavení zařízení upozornění pro Uniswap Wallet.",
"onboarding.notification.permission.title": "Oprávnění k oznámením",
- "onboarding.notification.subtitle": "Zůstaňte informováni o stavech transakcí a hlavních změnách cen oblíbených tokenů",
- "onboarding.notification.title": "Zapněte oznámení",
+ "onboarding.notification.subtitle": "Dostávejte upozornění, až budou vaše převody, výměny a schvalování dokončeny.",
+ "onboarding.notification.title": "Zapněte push oznámení",
"onboarding.passkey.account.protection": "Váš účet je chráněn vaším vlastním bezpečným úložištěm hesel.",
"onboarding.passkey.biometric.scan": "Telefon, tablet nebo prohlížeč – stačí naskenovat své biometrické údaje a budete přihlášeni.",
"onboarding.passkey.create": "Vytvořte si svůj přístupový klíč",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Připojte se k peněžence a zobrazte svou likviditu.",
"pool.liquidity.data.error.message": "Při načítání dat požadovaných pro vaši transakci došlo k chybě.",
"pool.liquidity.earn.fee": "Poskytovatelé likvidity vydělávají 0,3% poplatek za všechny obchody úměrný jejich podílu na poolu. Poplatky se přičítají do fondu, narůstají v reálném čase a lze je nárokovat stažením likvidity.",
- "pool.liquidity.outOfSync": "Nesoulad mezi poolem a tržní cenou",
- "pool.liquidity.outOfSync.message": "Ceny v tomto fondu se liší podle tržních cen vybraných tokenů. Upravte odpovídajícím způsobem své cenové rozpětí nebo počkejte, až se fond vyrovná, abyste předešli ztrátám.",
+ "pool.liquidity.outOfSync": "Ceny bazénu nejsou synchronizovány",
+ "pool.liquidity.outOfSync.message": "Ceny v tomto fondu nejsou synchronizovány se současným trhem. Přidání likvidity může vést ke ztrátě finančních prostředků.",
"pool.liquidity.ownershipWarning.message": "Nejste vlastníkem této pozice LP. Nebudete moci vybrat likviditu z této pozice, pokud nevlastníte následující adresu: {{ownerAddress}}",
"pool.liquidity.rewards": "Odměny poskytovatele likvidity",
"pool.liquidity.taxWarning": "Tokenové daně",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Cena tohoto bazénu je ve vámi zvoleném rozmezí. Vaše pozice aktuálně vydělává poplatky.",
"pool.rates": "Sazby",
"pool.ratioTokenToPrice": "Poměr žetonů, které přidáte, určí cenu tohoto fondu.",
- "pool.refresh.prices": "Obnovit ceny",
"pool.removeLiquidity": "Odstraňte likviditu",
"pool.rewardsPool.label": "Žetony fondu ve fondu odměn:",
"pool.selectedRange": "Vybraný rozsah",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Háky jsou pokročilou funkcí, která umožňuje fondům komunikovat s chytrými smlouvami a odemykat různé možnosti. Při přidávání háčků buďte opatrní, protože některé mohou být škodlivé nebo způsobit nezamýšlené následky.",
"position.addingHook": "Přidání háčku",
"position.addingHook.disclaimer": "Přidání háčků může mít nezamýšlené následky. Proveďte svůj výzkum a pokračujte na vlastní nebezpečí.",
- "position.addingHook.hideProperties": "Skrýt vlastnosti",
"position.addingHook.invalidAddress": "Zadejte platnou adresu zavěšení",
"position.addingHook.viewProperties": "Zobrazit vlastnosti",
"position.appearHere": "Zde se zobrazí vaše pozice.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Vloženo {{currencySymbol}}",
"position.hook.disclaimer": "Chápu rizika.",
"position.hook.liquidityWarning": "Tento příznak může způsobit, že fond zablokuje přidávání nové likvidity. Vaše transakce se může vrátit.",
- "position.hook.removeWarning": "Může způsobit uzamčení vašich prostředků nebo blokování vybírání poplatků.",
+ "position.hook.removeWarning": "Tento příznak může způsobit uzamčení vašich prostředků nebo blokování vybírání poplatků.",
"position.hook.swapWarning": "Tento příznak může umožnit sofistikovaným uživatelům snadněji využívat likviditu Just-In-Time, což vede k nižším poplatkům.",
"position.hook.warningHeader": "Zjištěn vysoce rizikový háček",
"position.hook.warningInfo": "Identifikovali jsme potenciální rizika s tímto hákem. Než budete pokračovat, zkontrolujte příznaky a ověřte, že se jedná o hák, který chcete použít.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Schválit a vyměnit",
"swap.approveInWallet": "Schválit v peněžence",
"swap.balance.amount": "Zůstatek: {{amount}}",
- "swap.bestRoute.cost": "Odhaduje se, že nejúčinnější trasa stojí ~{{gasPrice}} nákladů na síť. ",
+ "swap.bestRoute.cost": "Nejlepší cena trasy stojí ~{{gasPrice}} v plynu. ",
+ "swap.bestRoute.cost.v4": "Optimální trasa stojí ~{{gasPrice}} v plynu. ",
"swap.bridging.estimatedTime": "Odhad. čas",
"swap.bridging.title": "Výměna napříč sítěmi",
"swap.bridging.warning.description": "Přepínáte z {{fromNetwork}} na {{toNetwork}}. Toto je také známé jako \"přemostění\", které přesune vaše tokeny z jedné sítě do druhé.",
@@ -1868,16 +1866,15 @@
"swap.review": "Výměna recenze",
"swap.review.summary": "Vyměňujete se",
"swap.reviewLimit": "Limit kontroly",
- "swap.route.optimizedGasCost": "Tato trasa bere v úvahu rozdělené trasy, více skoků a síťové náklady každého kroku.",
+ "swap.route.optimizedGasCost": "Tato trasa optimalizuje váš celkový výstup zohledněním rozdělených tras, více skoků a síťových nákladů každého kroku.",
"swap.settings.deadline.tooltip": "Vaše transakce bude vrácena, pokud bude nevyřízena déle než toto časové období. (Maximálně: 3 dny).",
"swap.settings.deadline.warning": "Vysoký termín",
"swap.settings.protection.description": "Se zapnutou ochranou swapu budou vaše transakce Ethereum chráněny před sendvičovými útoky se sníženou pravděpodobností selhání.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Síť",
"swap.settings.protection.subtitle.unavailable": "Není k dispozici na {{chainName}}",
"swap.settings.protection.title": "Ochrana proti výměně",
- "swap.settings.routingPreference.option.default.description": "Výběrem této možnosti identifikujete nejúčinnější trasu pro váš swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "Klient Uniswap vybere nejlevnější obchodní variantu s ohledem na cenu a síťové náklady.",
- "swap.settings.routingPreference.option.default.tooltip": "Trasa je identifikována s ohledem na v2, v3 a určité fondy v4, přičemž se zohlední odhadovaný cenový dopad a síťové náklady.",
+ "swap.settings.routingPreference.option.default.description": "Klient Uniswap vybere nejlevnější obchodní variantu s ohledem na cenu a síťové náklady.",
+ "swap.settings.routingPreference.option.default.description.v4": "Klient Uniswap vybere optimální obchodní variantu s ohledem na cenu a síťové náklady.",
"swap.settings.routingPreference.option.v2.title": "v2 bazény",
"swap.settings.routingPreference.option.v3.title": "v3 bazény",
"swap.settings.routingPreference.option.v4.title": "v4 bazény",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Vždy si proveďte svůj výzkum",
"token.safety.warning.blocked.description.default_one": "S tímto tokenem nemůžete obchodovat pomocí aplikace Uniswap.",
"token.safety.warning.blocked.description.default_other": "S těmito tokeny nemůžete obchodovat pomocí aplikace Uniswap.",
+ "token.safety.warning.blocked.description.named": "Pomocí aplikace Uniswap nemůžete obchodovat {{tokenSymbol}} .",
"token.safety.warning.dontShowWarningAgain": "Už mi toto varování nezobrazovat",
"token.safety.warning.doYourOwnResearch": "Než budete pokračovat, vždy si proveďte svůj vlastní průzkum.",
"token.safety.warning.feeDescription": "Účtuje , když {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} nemusí být token, který chcete vyměnit.",
"token.safety.warning.malicious.title": "Byl zjištěn škodlivý token",
"token.safety.warning.mayResultInLoss": "Jeho výměna může mít za následek ztrátu finančních prostředků.",
+ "token.safety.warning.medium.heading.default_one": "Tento token není obchodován na předních amerických centralizovaných burzách.",
+ "token.safety.warning.medium.heading.default_other": "Tyto tokeny nejsou obchodovány na předních amerických centralizovaných burzách.",
+ "token.safety.warning.medium.heading.default_one_also": "Tento token také není obchodován na předních amerických centralizovaných burzách.",
+ "token.safety.warning.medium.heading.default_other_also": "Tyto tokeny také nejsou obchodovány na předních amerických centralizovaných burzách.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} se neobchoduje na předních amerických centralizovaných burzách.",
"token.safety.warning.notListedOnExchanges": "Není kotováno na předních amerických burzách",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} bylo označeno jako neprodejné.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} byl označen jako spam službou Blockaid.",
"token.safety.warning.spam.title": "Byl zjištěn token spamu",
"token.safety.warning.spamsUsers": "Spamuje uživatele",
+ "token.safety.warning.strong.heading.default_one": "Tento token není obchodován na předních amerických centralizovaných burzách ani se často nevyměňuje na Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Tyto tokeny nejsou obchodovány na předních amerických centralizovaných burzách ani se často nevyměňují na Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} se neobchoduje na předních centralizovaných burzách v USA ani se často nevyměňuje na Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} účtuje poplatek {{buyFeePercent}} při nákupu a {{sellFeePercent}} při prodeji.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} si při nákupu účtuje {{feePercent}} poplatek.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} si při prodeji účtuje poplatek {{feePercent}} .",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} účtuje poplatek při nákupu nebo prodeji.",
+ "token.safetyLevel.blocked.header": "Není dostupný",
"token.safetyLevel.blocked.message": "S tímto tokenem nemůžete obchodovat pomocí Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Pozor",
+ "token.safetyLevel.medium.message": "Tento token není obchodován na předních amerických centralizovaných burzách. Než budete pokračovat, vždy si proveďte svůj vlastní průzkum.",
"token.safetyLevel.medium.message.plural": "Tyto tokeny nejsou obchodovány na předních amerických centralizovaných burzách. Než budete pokračovat, vždy si proveďte svůj vlastní průzkum.",
+ "token.safetyLevel.strong.header": "Varování",
+ "token.safetyLevel.strong.message": "Tento token není obchodován na předních amerických centralizovaných burzách ani se často nevyměňuje na Uniswap. Než budete pokračovat, vždy si proveďte svůj vlastní průzkum.",
"token.selector.search.error": "Výsledky vyhledávání se nepodařilo načíst",
"token.stats.fullyDilutedValuation": "Zcela zředěné ocenění",
"token.stats.marketCap": "Tržní kapitalizace",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Další tokeny na {{network}}",
"tokens.selector.section.recent": "Nedávná vyhledávání",
"tokens.selector.section.search": "Výsledky vyhledávání",
- "tokens.selector.section.trending": "Tokeny podle objemu 24 hodin",
"tokens.selector.section.yours": "Vaše žetony",
"tokens.table.search.placeholder.pools": "Prohledejte bazény",
"tokens.table.search.placeholder.tokens": "Hledat tokeny",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Nízký zůstatek síťových tokenů",
"transaction.watcher.error.cancel": "Transakci nelze zrušit",
"transaction.watcher.error.status": "Chyba při kontrole stavu transakce",
- "unichain.promotion.cold.description": "Rychlejší výměny. Nižší poplatky. Unichain je domovem DeFi.",
- "unichain.promotion.cold.title": "Představujeme Unichain",
- "unichain.promotion.modal.description": "Rychlejší výměny. Nižší poplatky. Unichain je domovem cross-chain likvidity.",
- "unichain.promotion.modal.detail.costs": "Nižší náklady na vytváření poolů a správu pozic.",
- "unichain.promotion.modal.detail.fees": "Ušetřete 95 % na poplatcích ve srovnání s Ethereem.",
- "unichain.promotion.modal.detail.instant": "Okamžitě vyměňte",
- "unichain.promotion.warm.description": "Vyměňujte své oblíbené žetony rychleji a s nižšími náklady na plyn.",
- "unichain.promotion.warm.title": "Začněte swapovat na Unichainu",
"uniswapX.aggregatesLiquidity": " agreguje zdroje likvidity za lepší ceny a swapy bez plynu.",
"uniswapx.description": "UniswapX agreguje zdroje likvidity za lepší ceny a swapy bez plynu.",
- "uniswapx.included": "Zahrnuje UniswapX",
+ "uniswapx.included": "Zahrnuje UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Zjistěte více o swapování pomocí UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/da-DK.json b/packages/uniswap/src/i18n/locales/translations/da-DK.json
index 3eafdbd63e4..deaa65d09a5 100644
--- a/packages/uniswap/src/i18n/locales/translations/da-DK.json
+++ b/packages/uniswap/src/i18n/locales/translations/da-DK.json
@@ -176,6 +176,7 @@
"common.allTime": "Hele tiden",
"common.amount.label": "Beløb",
"common.amountDeposited.label": "{{amount}} Deponeret",
+ "common.amountInput.placeholder": "Input beløb",
"common.and": "og",
"common.app": "App",
"common.approval.cancelled": "Godkendelse annulleret",
@@ -312,7 +313,6 @@
"common.currency": "betalingsmiddel",
"common.currentPrice": "Nuværende pris",
"common.currentPrice.label": "Nuværende pris:",
- "common.currentPrice.unavailable": "Nuværende pris er ikke tilgængelig",
"common.custom": "Brugerdefinerede",
"common.customRange": "Brugerdefineret rækkevidde",
"common.dataOutdated": "Data kan være forældede",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Optjente gebyrer:",
"common.feesEarnedPerBase": "{{symbolA}} pr. {{symbolB}}",
"common.fetchingRoute": "Henter rute",
+ "common.flag": "Flag",
"common.floor": "Etage",
"common.floorPrice": "Gulvpris",
"common.for": "Til",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Godkend i tegnebogen",
"common.wallet.label": "Pung",
"common.walletForSwapping": "Pungen bygget til at bytte. Tilgængelig på iOS og Android.",
- "common.warning": "Advarsel",
"common.webApp": "Web app",
"common.website": "Internet side",
"common.whyApprove": "Hvorfor skal jeg godkende et token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Kunne ikke indlæse tokens for at købe",
"fiatOnRamp.error.max": "Maksimalt {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "Ingen tilbud fundet.",
"fiatOnRamp.error.unavailable": "Denne service er ikke tilgængelig i dit område",
"fiatOnRamp.error.unsupported": "Ikke understøttet i regionen",
"fiatOnRamp.error.usd": "Kun tilgængelig til køb i USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} for {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Ingen tilbud fundet",
"fiatOnRamp.purchasedOn": "Købt den {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Du fortsætter til udbyderens portal for at se de gebyrer, der er forbundet med din transaktion.",
"fiatOnRamp.quote.type.list": "{{optionsList}}og andre muligheder",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Pris:",
"migrate.v2Description": "Dette værktøj vil sikkert migrere din {{source}} likviditet til V3. Processen er fuldstændig tillidsløs takket være <0>Uniswap-migreringskontrakten0> ↗",
"migrate.v2Instruction": "For hver pulje vist nedenfor skal du klikke på migrer for at fjerne din likviditet fra Uniswap V2 og indsætte den i Uniswap V3.",
+ "migrate.v2Subtitle": "Migrer dine likviditetstokens fra Uniswap V2 til Uniswap V3.",
"migrate.v2Title": "Migrer V2-likviditet",
"migrate.v3Price": "V3 {{sym}} Pris:",
"mint.v3.input.invalidPrice.error": "Ugyldig prisinput",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Giv din tegnebog et navn",
"onboarding.notification.permission.message": "For at modtage notifikationer skal du aktivere notifikationer for Uniswap Wallet i din enheds indstillinger.",
"onboarding.notification.permission.title": "Tilladelse til notifikationer",
- "onboarding.notification.subtitle": "Hold dig opdateret om transaktionsstatusser og større prisændringer for foretrukne tokens",
- "onboarding.notification.title": "Slå notifikationer til",
+ "onboarding.notification.subtitle": "Få besked, når dine overførsler, swaps og godkendelser er gennemført.",
+ "onboarding.notification.title": "Slå push-beskeder til",
"onboarding.passkey.account.protection": "Din konto er beskyttet af din egen sikre adgangskodelagring.",
"onboarding.passkey.biometric.scan": "Telefon, tablet eller browser - bare scan din biometri, og du vil blive logget ind.",
"onboarding.passkey.create": "Opret din adgangsnøgle",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Tilslut til en pung for at se din likviditet.",
"pool.liquidity.data.error.message": "Der opstod en fejl under hentning af de nødvendige data til din transaktion.",
"pool.liquidity.earn.fee": "Likviditetsudbydere tjener et gebyr på 0,3 % på alle handler proportionalt med deres andel af puljen. Gebyrer føjes til puljen, påløber i realtid og kan kræves ved at hæve din likviditet.",
- "pool.liquidity.outOfSync": "Pool og markedspris uoverensstemmelse",
- "pool.liquidity.outOfSync.message": "Priserne i denne pulje afviger med markedspriserne på de valgte tokens. Juster dit prisinterval i overensstemmelse hermed, eller vent på, at poolen balancerer igen for at undgå tab.",
+ "pool.liquidity.outOfSync": "Poolpriser ude af synkronisering",
+ "pool.liquidity.outOfSync.message": "Priserne i denne pulje er ude af synkronisering med det nuværende marked. Tilføjelse af likviditet kan resultere i tab af midler.",
"pool.liquidity.ownershipWarning.message": "Du er ikke ejer af denne LP-position. Du vil ikke være i stand til at hæve likviditeten fra denne position, medmindre du ejer følgende adresse: {{ownerAddress}}",
"pool.liquidity.rewards": "Likviditetsudbyderens belønninger",
"pool.liquidity.taxWarning": "Symbolske skatter",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Prisen på denne pulje er inden for dit valgte interval. Din stilling tjener i øjeblikket gebyrer.",
"pool.rates": "Priser",
"pool.ratioTokenToPrice": "Forholdet mellem tokens, du tilføjer, bestemmer prisen på denne pulje.",
- "pool.refresh.prices": "Opdater priserne",
"pool.removeLiquidity": "Fjern likviditet",
"pool.rewardsPool.label": "Pool tokens i belønningspuljen:",
"pool.selectedRange": "Valgt område",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hooks er en avanceret funktion, der gør det muligt for pools at interagere med smarte kontrakter, der låser op for forskellige muligheder. Vær forsigtig, når du tilføjer kroge, da nogle kan være ondsindede eller forårsage utilsigtede konsekvenser.",
"position.addingHook": "Tilføjer krog",
"position.addingHook.disclaimer": "Tilføjelse af kroge kan have utilsigtede konsekvenser. Lav din research og fortsæt på eget ansvar.",
- "position.addingHook.hideProperties": "Skjul egenskaber",
"position.addingHook.invalidAddress": "Indtast en gyldig hook-adresse",
"position.addingHook.viewProperties": "Se ejendomme",
"position.appearHere": "Din position vises her.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Deponeret {{currencySymbol}}",
"position.hook.disclaimer": "Jeg forstår risiciene.",
"position.hook.liquidityWarning": "Dette flag kan få puljen til at blokere for tilføjelsen af ny likviditet. Din transaktion kan vende tilbage.",
- "position.hook.removeWarning": "Kan få dine penge til at blive låst eller blokere dig for at opkræve gebyrer.",
+ "position.hook.removeWarning": "Dette flag kan få dine penge til at blive låst eller blokere dig for at opkræve gebyrer.",
"position.hook.swapWarning": "Dette flag kan give sofistikerede brugere mulighed for lettere at udnytte Just-In-Time likviditet, hvilket resulterer i lavere optjente gebyrer.",
"position.hook.warningHeader": "Højrisiko krog opdaget",
"position.hook.warningInfo": "Vi har identificeret potentielle risici med denne krog. Gennemgå flagene og bekræft, at det er den krog, du vil bruge, før du fortsætter.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Godkend og skift",
"swap.approveInWallet": "Godkend i din tegnebog",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Den mest effektive rute anslås at koste ~{{gasPrice}} i netværksomkostninger. ",
+ "swap.bestRoute.cost": "Bedste pris rute koster ~{{gasPrice}} i gas. ",
+ "swap.bestRoute.cost.v4": "Optimale ruteomkostninger ~{{gasPrice}} i gas. ",
"swap.bridging.estimatedTime": "Est. tid",
"swap.bridging.title": "Udveksling på tværs af netværk",
"swap.bridging.warning.description": "Du skifter fra {{fromNetwork}} til {{toNetwork}}. Dette er også kendt som \"bridging\", som flytter dine tokens fra et netværk til et andet.",
@@ -1868,16 +1866,15 @@
"swap.review": "Anmeldelsesbytte",
"swap.review.summary": "Du bytter",
"swap.reviewLimit": "Gennemgå grænse",
- "swap.route.optimizedGasCost": "Denne rute tager hensyn til opdelte ruter, flere hop og netværksomkostninger for hvert trin.",
+ "swap.route.optimizedGasCost": "Denne rute optimerer dit samlede output ved at overveje opdelte ruter, flere hop og netværksomkostningerne for hvert trin.",
"swap.settings.deadline.tooltip": "Din transaktion vil vende tilbage, hvis den er afventende i mere end denne periode. (Maksimum: 3 dage).",
"swap.settings.deadline.warning": "Høj deadline",
"swap.settings.protection.description": "Med swap-beskyttelse aktiveret vil dine Ethereum-transaktioner være beskyttet mod sandwich-angreb med reducerede chancer for fiasko.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Netværk",
"swap.settings.protection.subtitle.unavailable": "Ikke tilgængelig på {{chainName}}",
"swap.settings.protection.title": "Swap beskyttelse",
- "swap.settings.routingPreference.option.default.description": "Valg af denne mulighed identificerer den mest effektive rute for dit bytte.",
- "swap.settings.routingPreference.option.default.description.preV4": "Uniswap-klienten vælger den billigste handelsoption med hensyn til pris og netværksomkostninger.",
- "swap.settings.routingPreference.option.default.tooltip": "En rute er identificeret under hensyntagen til v2, v3 og visse v4-puljer, idet der tages højde for estimeret prispåvirkning og netværksomkostninger.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap-klienten vælger den billigste handelsoption med hensyn til pris og netværksomkostninger.",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap-klienten vælger den optimale handelsmulighed med hensyn til pris og netværksomkostninger.",
"swap.settings.routingPreference.option.v2.title": "v2 puljer",
"swap.settings.routingPreference.option.v3.title": "v3 puljer",
"swap.settings.routingPreference.option.v4.title": "v4 puljer",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Lav altid din research",
"token.safety.warning.blocked.description.default_one": "Du kan ikke bytte dette token ved hjælp af Uniswap-appen.",
"token.safety.warning.blocked.description.default_other": "Du kan ikke bytte disse tokens ved hjælp af Uniswap-appen.",
+ "token.safety.warning.blocked.description.named": "Du kan ikke handle {{tokenSymbol}} ved hjælp af Uniswap-appen.",
"token.safety.warning.dontShowWarningAgain": "Vis mig ikke denne advarsel igen",
"token.safety.warning.doYourOwnResearch": "Lav altid din egen research, før du fortsætter.",
"token.safety.warning.feeDescription": "Oplader en når {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} er muligvis ikke det token, du ønsker at bytte.",
"token.safety.warning.malicious.title": "Ondsindet token fundet",
"token.safety.warning.mayResultInLoss": "At bytte det kan resultere i et tab af midler.",
+ "token.safety.warning.medium.heading.default_one": "Dette token handles ikke på førende amerikanske centraliserede børser.",
+ "token.safety.warning.medium.heading.default_other": "Disse tokens handles ikke på førende amerikanske centraliserede børser.",
+ "token.safety.warning.medium.heading.default_one_also": "Dette token handles heller ikke på førende amerikanske centraliserede børser.",
+ "token.safety.warning.medium.heading.default_other_also": "Disse tokens handles heller ikke på førende amerikanske centraliserede børser.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} handles ikke på førende amerikanske centraliserede børser.",
"token.safety.warning.notListedOnExchanges": "Ikke noteret på førende amerikanske børser",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} er blevet markeret som usælgelig.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} er blevet markeret som spam af Blockaid.",
"token.safety.warning.spam.title": "Spam-token fundet",
"token.safety.warning.spamsUsers": "Spams brugere",
+ "token.safety.warning.strong.heading.default_one": "Dette token handles ikke på førende amerikanske centraliserede børser eller byttes ofte på Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Disse tokens handles ikke på førende amerikanske centraliserede børser eller byttes ofte på Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} handles ikke på førende amerikanske centraliserede børser eller byttes ofte på Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} opkræver et {{buyFeePercent}} gebyr ved køb og {{sellFeePercent}} ved salg.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} opkræver et {{feePercent}} gebyr ved køb.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} opkræver et {{feePercent}} gebyr ved salg.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} opkræver et gebyr ved køb eller salg.",
+ "token.safetyLevel.blocked.header": "Ikke tilgængelig",
"token.safetyLevel.blocked.message": "Du kan ikke bytte dette token ved at bruge Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Advarsel",
+ "token.safetyLevel.medium.message": "Dette token handles ikke på førende amerikanske centraliserede børser. Lav altid din egen research, før du fortsætter.",
"token.safetyLevel.medium.message.plural": "Disse tokens handles ikke på førende amerikanske centraliserede børser. Lav altid din egen research, før du fortsætter.",
+ "token.safetyLevel.strong.header": "Advarsel",
+ "token.safetyLevel.strong.message": "Dette token handles ikke på førende amerikanske centraliserede børser eller byttes ofte på Uniswap. Lav altid din egen research, før du fortsætter.",
"token.selector.search.error": "Søgeresultaterne kunne ikke indlæses",
"token.stats.fullyDilutedValuation": "Fuldt udvandet værdiansættelse",
"token.stats.marketCap": "Markedsværdi",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Andre tokens på {{network}}",
"tokens.selector.section.recent": "Seneste søgninger",
"tokens.selector.section.search": "Søgeresultater",
- "tokens.selector.section.trending": "Tokens med 24H volumen",
"tokens.selector.section.yours": "Dine tokens",
"tokens.table.search.placeholder.pools": "Søg puljer",
"tokens.table.search.placeholder.tokens": "Søg tokens",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Lav netværkstokenbalance",
"transaction.watcher.error.cancel": "Transaktionen kunne ikke annulleres",
"transaction.watcher.error.status": "Fejl under kontrol af transaktionsstatus",
- "unichain.promotion.cold.description": "Hurtigere bytte. Lavere gebyrer. Unichain er hjemmet for DeFi.",
- "unichain.promotion.cold.title": "Introduktion til Unichain",
- "unichain.promotion.modal.description": "Hurtigere bytte. Lavere gebyrer. Unichain er hjemstedet for likviditet på tværs af kæder.",
- "unichain.promotion.modal.detail.costs": "Lavere omkostninger til oprettelse af puljer og ledelse af stillinger.",
- "unichain.promotion.modal.detail.fees": "Spar 95% på gebyrer sammenlignet med Ethereum.",
- "unichain.promotion.modal.detail.instant": "Skift med det samme",
- "unichain.promotion.warm.description": "Skift dine yndlingsmærker hurtigere og med lavere gasomkostninger.",
- "unichain.promotion.warm.title": "Begynd at bytte på Unichain",
"uniswapX.aggregatesLiquidity": " samler likviditetskilder til bedre priser og gasfrie swaps.",
"uniswapx.description": "UniswapX samler likviditetskilder for bedre priser og gasfri swaps.",
- "uniswapx.included": "Inkluderer UniswapX",
+ "uniswapx.included": "Inkluderer UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Lær mere om at bytte med UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/de-DE.json b/packages/uniswap/src/i18n/locales/translations/de-DE.json
index 6aa7913d577..b7d2a7706d7 100644
--- a/packages/uniswap/src/i18n/locales/translations/de-DE.json
+++ b/packages/uniswap/src/i18n/locales/translations/de-DE.json
@@ -176,6 +176,7 @@
"common.allTime": "Alle Zeit",
"common.amount.label": "Menge",
"common.amountDeposited.label": "{{amount}} Eingezahlt",
+ "common.amountInput.placeholder": "Eingabebetrag",
"common.and": "Und",
"common.app": "App",
"common.approval.cancelled": "Genehmigung abgebrochen",
@@ -312,7 +313,6 @@
"common.currency": "Währung",
"common.currentPrice": "Derzeitiger Preis",
"common.currentPrice.label": "Derzeitiger Preis:",
- "common.currentPrice.unavailable": "Aktueller Preis nicht verfügbar",
"common.custom": "Brauch",
"common.customRange": "Benutzerdefiniertes Sortiment",
"common.dataOutdated": "Daten können veraltet sein",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Verdiente Gebühren:",
"common.feesEarnedPerBase": "{{symbolA}} pro {{symbolB}}",
"common.fetchingRoute": "Route wird abgerufen",
+ "common.flag": "Flagge",
"common.floor": "Boden",
"common.floorPrice": "Mindestpreis",
"common.for": "Für",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Im Wallet genehmigen",
"common.wallet.label": "Geldbörse",
"common.walletForSwapping": "Die Wallet zum Tauschen. Verfügbar für iOS und Android.",
- "common.warning": "Warnung",
"common.webApp": "Web-App",
"common.website": "Webseite",
"common.whyApprove": "Warum muss ich ein Token genehmigen?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Token zum Kauf konnten nicht geladen werden",
"fiatOnRamp.error.max": "Maximal {{amount}}",
"fiatOnRamp.error.min": "Mindestens {{amount}}",
- "fiatOnRamp.error.noQuotes": "Keine Zitate gefunden.",
"fiatOnRamp.error.unavailable": "Dieser Dienst ist in Ihrer Region nicht verfügbar",
"fiatOnRamp.error.unsupported": "In dieser Region wird es nicht unterstützt",
"fiatOnRamp.error.usd": "Nur in USD erhältlich",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} für {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Keine Zitate gefunden",
"fiatOnRamp.purchasedOn": "Gekauft am {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Sie werden zum Portal des Anbieters weitergeleitet, um die mit Ihrer Transaktion verbundenen Gebühren anzuzeigen.",
"fiatOnRamp.quote.type.list": "{{optionsList}}und andere Optionen",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Preis:",
"migrate.v2Description": "Dieses Tool migriert Ihre {{source}} Liquidität sicher auf V3. Der Prozess ist dank des <0>Uniswap-Migrationsvertrags völlig vertrauenslos0> ↗",
"migrate.v2Instruction": "Klicken Sie für jeden unten angezeigten Pool auf „Migrieren“, um Ihre Liquidität aus Uniswap V2 zu entfernen und in Uniswap V3 einzuzahlen.",
+ "migrate.v2Subtitle": "Migrieren Sie Ihre Liquiditätstoken von Uniswap V2 zu Uniswap V3.",
"migrate.v2Title": "V2-Liquidität migrieren",
"migrate.v3Price": "V3 {{sym}} Preis:",
"mint.v3.input.invalidPrice.error": "Ungültige Preiseingabe",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Geben Sie Ihrer Brieftasche einen Namen",
"onboarding.notification.permission.message": "Um Benachrichtigungen zu erhalten, aktivieren Sie Benachrichtigungen für Uniswap Wallet in den Einstellungen Ihres Geräts.",
"onboarding.notification.permission.title": "Benachrichtigungsberechtigung",
- "onboarding.notification.subtitle": "Bleiben Sie über den Transaktionsstatus und wichtige Preisänderungen für beliebte Token auf dem Laufenden",
- "onboarding.notification.title": "Benachrichtigungen aktivieren",
+ "onboarding.notification.subtitle": "Lassen Sie sich benachrichtigen, wenn Ihre Überweisungen, Tauschvorgänge und Genehmigungen abgeschlossen sind.",
+ "onboarding.notification.title": "Push-Benachrichtigungen aktivieren",
"onboarding.passkey.account.protection": "Ihr Konto ist durch Ihren eigenen sicheren Passwortspeicher geschützt.",
"onboarding.passkey.biometric.scan": "Telefon, Tablet oder Browser – scannen Sie einfach Ihre biometrischen Daten und Sie werden angemeldet.",
"onboarding.passkey.create": "Erstellen Sie Ihren Passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Stellen Sie eine Verbindung zu einem Wallet her, um Ihre Liquidität anzuzeigen.",
"pool.liquidity.data.error.message": "Beim Abrufen der für Ihre Transaktion erforderlichen Daten ist ein Fehler aufgetreten.",
"pool.liquidity.earn.fee": "Liquiditätsanbieter verdienen eine Gebühr von 0,3 % auf alle Trades, proportional zu ihrem Anteil am Pool. Gebühren werden dem Pool hinzugefügt, fallen in Echtzeit an und können durch Abheben Ihrer Liquidität eingefordert werden.",
- "pool.liquidity.outOfSync": "Diskrepanz zwischen Pool- und Marktpreisen",
- "pool.liquidity.outOfSync.message": "Die Preise in diesem Pool unterscheiden sich von den Marktpreisen der ausgewählten Token. Passen Sie Ihre Preisspanne entsprechend an oder warten Sie, bis der Pool neu ausbalanciert ist, um Verluste zu vermeiden.",
+ "pool.liquidity.outOfSync": "Poolpreise nicht synchron",
+ "pool.liquidity.outOfSync.message": "Die Preise in diesem Pool stimmen nicht mit dem aktuellen Markt überein. Das Hinzufügen von Liquidität kann zu einem Verlust von Mitteln führen.",
"pool.liquidity.ownershipWarning.message": "Sie sind nicht der Eigentümer dieser LP-Position. Sie können die Liquidität aus dieser Position nicht abheben, es sei denn, Sie besitzen die folgende Adresse: {{ownerAddress}}",
"pool.liquidity.rewards": "Belohnungen für Liquiditätsanbieter",
"pool.liquidity.taxWarning": "Token-Steuern",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Der Preis dieses Pools liegt innerhalb Ihres ausgewählten Bereichs. Ihre Position bringt derzeit Gebühren ein.",
"pool.rates": "Preise",
"pool.ratioTokenToPrice": "Das Verhältnis der von Ihnen hinzugefügten Token legt den Preis dieses Pools fest.",
- "pool.refresh.prices": "Preise aktualisieren",
"pool.removeLiquidity": "Liquidität entfernen",
"pool.rewardsPool.label": "Pool-Token im Belohnungspool:",
"pool.selectedRange": "Ausgewähltes Sortiment",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hooks sind eine erweiterte Funktion, die es Pools ermöglicht, mit Smart Contracts zu interagieren und so verschiedene Funktionen freizuschalten. Gehen Sie beim Hinzufügen von Hooks vorsichtig vor, da einige davon bösartig sein oder unbeabsichtigte Folgen haben können.",
"position.addingHook": "Haken hinzufügen",
"position.addingHook.disclaimer": "Das Hinzufügen von Hooks kann unbeabsichtigte Folgen haben. Informieren Sie sich gründlich und gehen Sie auf eigenes Risiko vor.",
- "position.addingHook.hideProperties": "Eigenschaften ausblenden",
"position.addingHook.invalidAddress": "Geben Sie eine gültige Hook-Adresse ein",
"position.addingHook.viewProperties": "Eigenschaften anzeigen",
"position.appearHere": "Ihre Position wird hier angezeigt.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Eingezahlt {{currencySymbol}}",
"position.hook.disclaimer": "Ich verstehe die Risiken.",
"position.hook.liquidityWarning": "Dieses Flag kann dazu führen, dass der Pool die Hinzufügung neuer Liquidität blockiert. Ihre Transaktion kann rückgängig gemacht werden.",
- "position.hook.removeWarning": "Kann dazu führen, dass Ihr Guthaben gesperrt wird oder Sie daran gehindert werden, Gebühren einzuziehen.",
+ "position.hook.removeWarning": "Diese Markierung kann dazu führen, dass Ihre Gelder gesperrt werden oder Sie daran gehindert werden, Gebühren einzuziehen.",
"position.hook.swapWarning": "Mit diesem Flag können versierte Benutzer leichter Just-In-Time-Liquidität nutzen, was zu niedrigeren Gebühren führt.",
"position.hook.warningHeader": "Hochriskantes Hook erkannt",
"position.hook.warningInfo": "Wir haben bei diesem Hook potenzielle Risiken festgestellt. Bitte überprüfen Sie die Flags und vergewissern Sie sich, dass dies der Hook ist, den Sie verwenden möchten, bevor Sie fortfahren.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Genehmigen und austauschen",
"swap.approveInWallet": "Genehmigen Sie in Ihrer Brieftasche",
"swap.balance.amount": "Guthaben: {{amount}}",
- "swap.bestRoute.cost": "Die Netzwerkkosten für die effizienteste Route betragen schätzungsweise{{gasPrice}} . ",
+ "swap.bestRoute.cost": "Die Benzinkosten für die Route zum günstigsten Preis betragen{{gasPrice}} . ",
+ "swap.bestRoute.cost.v4": "Die optimale Route kostet{{gasPrice}} Benzin. ",
"swap.bridging.estimatedTime": "Geschätzte Zeit",
"swap.bridging.title": "Netzwerkübergreifendes Swapping",
"swap.bridging.warning.description": "Sie wechseln von {{fromNetwork}} zu {{toNetwork}}. Dies wird auch als „Bridging“ bezeichnet und verschiebt Ihre Token von einem Netzwerk in ein anderes.",
@@ -1868,16 +1866,15 @@
"swap.review": "Rezensionstausch",
"swap.review.summary": "Du tauschst",
"swap.reviewLimit": "Überprüfungslimit",
- "swap.route.optimizedGasCost": "Diese Route berücksichtigt geteilte Routen, mehrere Hops und die Netzwerkkosten jedes Schritts.",
+ "swap.route.optimizedGasCost": "Diese Route optimiert Ihre Gesamtausgabe, indem sie geteilte Routen, mehrere Hops und die Netzwerkkosten jedes Schritts berücksichtigt.",
"swap.settings.deadline.tooltip": "Ihre Transaktion wird rückgängig gemacht, wenn sie länger als diesen Zeitraum aussteht. (Maximal: 3 Tage).",
"swap.settings.deadline.warning": "Hohe Frist",
"swap.settings.protection.description": "Wenn der Swap-Schutz aktiviert ist, sind Ihre Ethereum-Transaktionen vor Sandwich-Angriffen geschützt und die Wahrscheinlichkeit eines Fehlers ist geringer.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Netzwerk",
"swap.settings.protection.subtitle.unavailable": "Nicht verfügbar am {{chainName}}",
"swap.settings.protection.title": "Swap-Schutz",
- "swap.settings.routingPreference.option.default.description": "Wenn Sie diese Option auswählen, wird die effizienteste Route für Ihren Tausch ermittelt.",
- "swap.settings.routingPreference.option.default.description.preV4": "Der Uniswap-Kunde wählt unter Berücksichtigung von Preis und Netzwerkkosten die günstigste Handelsoption aus.",
- "swap.settings.routingPreference.option.default.tooltip": "Eine Route wird unter Berücksichtigung von v2-, v3- und bestimmten v4-Pools identifiziert, wobei die geschätzten Auswirkungen auf den Preis und die Netzwerkkosten miteinbezogen werden.",
+ "swap.settings.routingPreference.option.default.description": "Der Uniswap-Kunde wählt unter Berücksichtigung von Preis und Netzwerkkosten die günstigste Handelsoption aus.",
+ "swap.settings.routingPreference.option.default.description.v4": "Der Uniswap-Client wählt die optimale Handelsoption unter Berücksichtigung von Preis und Netzwerkkosten.",
"swap.settings.routingPreference.option.v2.title": "V2-Pools",
"swap.settings.routingPreference.option.v3.title": "V3-Pools",
"swap.settings.routingPreference.option.v4.title": "v4-Pools",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Informieren Sie sich immer",
"token.safety.warning.blocked.description.default_one": "Sie können diesen Token nicht mit der Uniswap-App handeln.",
"token.safety.warning.blocked.description.default_other": "Sie können diese Token nicht mit der Uniswap-App handeln.",
+ "token.safety.warning.blocked.description.named": "Sie können mit der Uniswap-App nicht {{tokenSymbol}} handeln.",
"token.safety.warning.dontShowWarningAgain": "Diese Warnung nicht mehr anzeigen",
"token.safety.warning.doYourOwnResearch": "Führen Sie immer Ihre eigenen Recherchen durch, bevor Sie fortfahren.",
"token.safety.warning.feeDescription": "Lädt auf, wenn {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} ist möglicherweise nicht das Token, das Sie austauschen möchten.",
"token.safety.warning.malicious.title": "Bösartiges Token erkannt",
"token.safety.warning.mayResultInLoss": "Ein Umtausch kann zu einem Verlust von Geldmitteln führen.",
+ "token.safety.warning.medium.heading.default_one": "Dieses Token wird nicht an führenden zentralisierten US-Börsen gehandelt.",
+ "token.safety.warning.medium.heading.default_other": "Diese Token werden nicht an führenden zentralisierten Börsen in den USA gehandelt.",
+ "token.safety.warning.medium.heading.default_one_also": "Dieses Token wird auch nicht an führenden zentralisierten US-Börsen gehandelt.",
+ "token.safety.warning.medium.heading.default_other_also": "Diese Token werden auch nicht an führenden zentralisierten Börsen in den USA gehandelt.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} wird nicht an führenden zentralisierten US-Börsen gehandelt.",
"token.safety.warning.notListedOnExchanges": "Nicht an führenden US-Börsen notiert",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} wurde als unverkäuflich gekennzeichnet.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} wurde von Blockaid als Spam markiert.",
"token.safety.warning.spam.title": "Spam-Token erkannt",
"token.safety.warning.spamsUsers": "Spams an Benutzer",
+ "token.safety.warning.strong.heading.default_one": "Dieses Token wird nicht an führenden zentralisierten Börsen in den USA gehandelt oder häufig auf Uniswap getauscht.",
+ "token.safety.warning.strong.heading.default_other": "Diese Token werden nicht an führenden zentralisierten Börsen in den USA gehandelt oder häufig auf Uniswap getauscht.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} wird nicht an führenden zentralisierten US-Börsen gehandelt oder häufig auf Uniswap getauscht.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} erhebt eine Gebühr von {{buyFeePercent}} beim Kauf und {{sellFeePercent}} beim Verkauf.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} erhebt beim Kauf eine Gebühr von {{feePercent}} .",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} erhebt beim Verkauf eine Gebühr von {{feePercent}} .",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} erhebt beim Kauf oder Verkauf eine Gebühr.",
+ "token.safetyLevel.blocked.header": "Nicht verfügbar",
"token.safetyLevel.blocked.message": "Sie können diesen Token nicht mit dem Uniswap-Wallet handeln.",
+ "token.safetyLevel.medium.header": "Vorsicht",
+ "token.safetyLevel.medium.message": "Dieses Token wird nicht an führenden zentralisierten US-Börsen gehandelt. Informieren Sie sich immer selbst, bevor Sie fortfahren.",
"token.safetyLevel.medium.message.plural": "Diese Token werden nicht an führenden zentralisierten US-Börsen gehandelt. Informieren Sie sich immer selbst, bevor Sie fortfahren.",
+ "token.safetyLevel.strong.header": "Warnung",
+ "token.safetyLevel.strong.message": "Dieses Token wird nicht an führenden zentralisierten US-Börsen gehandelt oder häufig auf Uniswap getauscht. Informieren Sie sich immer selbst, bevor Sie fortfahren.",
"token.selector.search.error": "Suchergebnisse konnten nicht geladen werden",
"token.stats.fullyDilutedValuation": "Vollständig verwässerte Bewertung",
"token.stats.marketCap": "Marktkapitalisierung",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Andere Token auf {{network}}",
"tokens.selector.section.recent": "Letzte Suchanfragen",
"tokens.selector.section.search": "Suchergebnisse",
- "tokens.selector.section.trending": "Token nach 24-Stunden-Volumen",
"tokens.selector.section.yours": "Ihre Token",
"tokens.table.search.placeholder.pools": "Suchpools",
"tokens.table.search.placeholder.tokens": "Suchtoken",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Niedriges Netzwerk-Token-Guthaben",
"transaction.watcher.error.cancel": "Die Transaktion kann nicht abgebrochen werden",
"transaction.watcher.error.status": "Fehler beim Überprüfen des Transaktionsstatus",
- "unichain.promotion.cold.description": "Schnellere Swaps. Niedrigere Gebühren. Unichain ist die Heimat von DeFi.",
- "unichain.promotion.cold.title": "Einführung von Unichain",
- "unichain.promotion.modal.description": "Schnellere Swaps. Niedrigere Gebühren. Unichain ist die Heimat für kettenübergreifende Liquidität.",
- "unichain.promotion.modal.detail.costs": "Geringere Kosten für die Erstellung von Pools und die Verwaltung von Positionen.",
- "unichain.promotion.modal.detail.fees": "Sparen Sie 95 % an Gebühren im Vergleich zu Ethereum.",
- "unichain.promotion.modal.detail.instant": "Sofortiger Tausch",
- "unichain.promotion.warm.description": "Tauschen Sie Ihre Lieblings-Token schneller und mit geringeren Gaskosten.",
- "unichain.promotion.warm.title": "Beginnen Sie mit dem Tauschen auf Unichain",
"uniswapX.aggregatesLiquidity": " aggregiert Liquiditätsquellen für bessere Preise und gasfreie Swaps.",
"uniswapx.description": "UniswapX aggregiert Liquiditätsquellen für bessere Preise und gasfreie Swaps.",
- "uniswapx.included": "Enthält UniswapX",
+ "uniswapx.included": "Enthält UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Erfahren Sie mehr über das Tauschen mit UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/el-GR.json b/packages/uniswap/src/i18n/locales/translations/el-GR.json
index cb8526c5c3d..b9b43e96726 100644
--- a/packages/uniswap/src/i18n/locales/translations/el-GR.json
+++ b/packages/uniswap/src/i18n/locales/translations/el-GR.json
@@ -176,6 +176,7 @@
"common.allTime": "Συνεχώς",
"common.amount.label": "Ποσό",
"common.amountDeposited.label": "{{amount}} Κατατίθεται",
+ "common.amountInput.placeholder": "Ποσό εισόδου",
"common.and": "και",
"common.app": "App",
"common.approval.cancelled": "Η έγκριση ακυρώθηκε",
@@ -312,7 +313,6 @@
"common.currency": "Νόμισμα",
"common.currentPrice": "Τρέχουσα τιμή",
"common.currentPrice.label": "Τρέχουσα τιμή:",
- "common.currentPrice.unavailable": "Η τρέχουσα τιμή δεν είναι διαθέσιμη",
"common.custom": "Εθιμο",
"common.customRange": "Προσαρμοσμένο εύρος",
"common.dataOutdated": "Τα δεδομένα μπορεί να είναι παλιά",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Κερδισμένες αμοιβές:",
"common.feesEarnedPerBase": "{{symbolA}} ανά {{symbolB}}",
"common.fetchingRoute": "Λήψη διαδρομής",
+ "common.flag": "Σημαία",
"common.floor": "Πάτωμα",
"common.floorPrice": "Κατώτατη τιμή",
"common.for": "Για",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Έγκριση στο πορτοφόλι",
"common.wallet.label": "Πορτοφόλι",
"common.walletForSwapping": "Το πορτοφόλι κατασκευασμένο για ανταλλαγή. Διαθέσιμο σε iOS και Android.",
- "common.warning": "Προειδοποίηση",
"common.webApp": "Εφαρμογή Ιστού",
"common.website": "Δικτυακός τόπος",
"common.whyApprove": "Γιατί πρέπει να εγκρίνω ένα διακριτικό;",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Δεν ήταν δυνατή η φόρτωση κουπονιών για αγορά",
"fiatOnRamp.error.max": "Μέγιστο {{amount}}",
"fiatOnRamp.error.min": "Ελάχιστο {{amount}}",
- "fiatOnRamp.error.noQuotes": "Δεν βρέθηκαν εισαγωγικά.",
"fiatOnRamp.error.unavailable": "Αυτή η υπηρεσία δεν είναι διαθέσιμη στην περιοχή σας",
"fiatOnRamp.error.unsupported": "Δεν υποστηρίζεται στην περιοχή",
"fiatOnRamp.error.usd": "Διατίθεται μόνο για αγορά σε USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} για {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Δεν βρέθηκαν εισαγωγικά",
"fiatOnRamp.purchasedOn": "Αγορασμένο στις {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Θα συνεχίσετε στην πύλη του παρόχου για να δείτε τις χρεώσεις που σχετίζονται με τη συναλλαγή σας.",
"fiatOnRamp.quote.type.list": "{{optionsList}}και άλλες επιλογές",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Τιμή:",
"migrate.v2Description": "Αυτό το εργαλείο θα μεταφέρει με ασφάλεια τη ρευστότητά σας {{source}} στο V3. Η διαδικασία είναι εντελώς αναξιόπιστη χάρη στο συμβόλαιο μετεγκατάστασης <0>Uniswap0> ↗",
"migrate.v2Instruction": "Για κάθε ομάδα που εμφανίζεται παρακάτω, κάντε κλικ στην επιλογή μετεγκατάσταση για να αφαιρέσετε τη ρευστότητά σας από το Uniswap V2 και να την καταθέσετε στο Uniswap V3.",
+ "migrate.v2Subtitle": "Μεταφέρετε τα διακριτικά ρευστότητάς σας από το Uniswap V2 στο Uniswap V3.",
"migrate.v2Title": "Μεταφορά ρευστότητας V2",
"migrate.v3Price": "V3 {{sym}} Τιμή:",
"mint.v3.input.invalidPrice.error": "Μη έγκυρη εισαγωγή τιμής",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Δώστε ένα όνομα στο πορτοφόλι σας",
"onboarding.notification.permission.message": "Για να λαμβάνετε ειδοποιήσεις, ενεργοποιήστε τις ειδοποιήσεις για το Uniswap Wallet στις ρυθμίσεις της συσκευής σας.",
"onboarding.notification.permission.title": "Άδεια ειδοποιήσεων",
- "onboarding.notification.subtitle": "Μείνετε ενημερωμένοι για τις καταστάσεις συναλλαγών και τις σημαντικές αλλαγές τιμών για τα αγαπημένα μάρκες",
- "onboarding.notification.title": "Ενεργοποιήστε τις ειδοποιήσεις",
+ "onboarding.notification.subtitle": "Λάβετε ειδοποιήσεις όταν ολοκληρωθούν οι μεταφορές, οι ανταλλαγές και οι εγκρίσεις σας.",
+ "onboarding.notification.title": "Ενεργοποιήστε τις ειδοποιήσεις push",
"onboarding.passkey.account.protection": "Ο λογαριασμός σας προστατεύεται από τον δικό σας ασφαλή χώρο αποθήκευσης κωδικού πρόσβασης.",
"onboarding.passkey.biometric.scan": "Τηλέφωνο, tablet ή πρόγραμμα περιήγησης — απλώς σαρώστε τα βιομετρικά σας στοιχεία και θα συνδεθείτε.",
"onboarding.passkey.create": "Δημιουργήστε τον κωδικό πρόσβασής σας",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Συνδεθείτε σε ένα πορτοφόλι για να δείτε τη ρευστότητά σας.",
"pool.liquidity.data.error.message": "Παρουσιάστηκε σφάλμα κατά την ανάκτηση των δεδομένων που απαιτούνται για τη συναλλαγή σας.",
"pool.liquidity.earn.fee": "Οι πάροχοι ρευστότητας κερδίζουν μια προμήθεια 0,3% για όλες τις συναλλαγές ανάλογη με το μερίδιό τους στη συγκέντρωση. Οι χρεώσεις προστίθενται στο pool, συγκεντρώνονται σε πραγματικό χρόνο και μπορούν να διεκδικηθούν με ανάληψη της ρευστότητάς σας.",
- "pool.liquidity.outOfSync": "Αναντιστοιχία τιμής πισίνας και αγοράς",
- "pool.liquidity.outOfSync.message": "Οι τιμές σε αυτό το pool διαφέρουν ανάλογα με τις τιμές αγοράς των επιλεγμένων κουπονιών. Προσαρμόστε ανάλογα το εύρος τιμών σας ή περιμένετε να εξισορροπηθεί εκ νέου η πισίνα για να αποφύγετε απώλειες.",
+ "pool.liquidity.outOfSync": "Οι τιμές της πισίνας δεν συγχρονίζονται",
+ "pool.liquidity.outOfSync.message": "Οι τιμές σε αυτήν την πισίνα δεν συγχρονίζονται με την τρέχουσα αγορά. Η προσθήκη ρευστότητας μπορεί να οδηγήσει σε απώλεια κεφαλαίων.",
"pool.liquidity.ownershipWarning.message": "Δεν είστε ο κάτοχος αυτής της θέσης LP. Δεν θα μπορείτε να αποσύρετε τη ρευστότητα από αυτήν τη θέση εκτός και αν έχετε την ακόλουθη διεύθυνση: {{ownerAddress}}",
"pool.liquidity.rewards": "Επιβραβεύσεις παρόχων ρευστότητας",
"pool.liquidity.taxWarning": "Συμβολικοί φόροι",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Η τιμή αυτής της πισίνας είναι εντός του εύρους που έχετε επιλέξει. Η θέση σας αυτή τη στιγμή κερδίζει αμοιβές.",
"pool.rates": "Τιμές",
"pool.ratioTokenToPrice": "Η αναλογία των διακριτικών που προσθέτετε θα καθορίσει την τιμή αυτής της ομάδας.",
- "pool.refresh.prices": "Τιμές ανανέωσης",
"pool.removeLiquidity": "Κατάργηση ρευστότητας",
"pool.rewardsPool.label": "Πισίνα μάρκες σε ομάδα ανταμοιβών:",
"pool.selectedRange": "Επιλεγμένο εύρος",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Τα Hooks είναι μια προηγμένη λειτουργία που επιτρέπει στις πισίνες να αλληλεπιδρούν με έξυπνα συμβόλαια, ξεκλειδώνοντας διάφορες δυνατότητες. Να είστε προσεκτικοί όταν προσθέτετε άγκιστρα, καθώς ορισμένα μπορεί να είναι κακόβουλα ή να προκαλέσουν ανεπιθύμητες συνέπειες.",
"position.addingHook": "Προσθήκη γάντζου",
"position.addingHook.disclaimer": "Η προσθήκη αγκίστρων μπορεί να έχει ανεπιθύμητες συνέπειες. Κάντε την έρευνά σας και προχωρήστε με δική σας ευθύνη.",
- "position.addingHook.hideProperties": "Απόκρυψη ιδιοτήτων",
"position.addingHook.invalidAddress": "Εισαγάγετε μια έγκυρη διεύθυνση άγκιστρου",
"position.addingHook.viewProperties": "Προβολή ακινήτων",
"position.appearHere": "Η θέση σας θα εμφανιστεί εδώ.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Κατατέθηκε {{currencySymbol}}",
"position.hook.disclaimer": "Καταλαβαίνω τους κινδύνους.",
"position.hook.liquidityWarning": "Αυτή η σημαία μπορεί να αναγκάσει τη συγκέντρωση να εμποδίσει την προσθήκη νέας ρευστότητας. Η συναλλαγή σας ενδέχεται να επανέλθει.",
- "position.hook.removeWarning": "Μπορεί να προκαλέσει κλείδωμα των κεφαλαίων σας ή να σας εμποδίσει να εισπράξετε τέλη.",
+ "position.hook.removeWarning": "Αυτή η σημαία μπορεί να προκαλέσει το κλείδωμα των κεφαλαίων σας ή να σας εμποδίσει να εισπράξετε χρεώσεις.",
"position.hook.swapWarning": "Αυτή η σημαία μπορεί να επιτρέψει στους εξελιγμένους χρήστες να αξιοποιήσουν πιο εύκολα τη ρευστότητα Just-In-Time με αποτέλεσμα χαμηλότερες προμήθειες που κερδίζουν.",
"position.hook.warningHeader": "Εντοπίστηκε άγκιστρο υψηλού κινδύνου",
"position.hook.warningInfo": "Έχουμε εντοπίσει πιθανούς κινδύνους με αυτό το άγκιστρο. Ελέγξτε τις σημαίες και βεβαιωθείτε ότι αυτό είναι το άγκιστρο που θέλετε να χρησιμοποιήσετε πριν συνεχίσετε.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Έγκριση και ανταλλαγή",
"swap.approveInWallet": "Έγκριση στο πορτοφόλι σας",
"swap.balance.amount": "Υπόλοιπο: {{amount}}",
- "swap.bestRoute.cost": "Η πιο αποτελεσματική διαδρομή εκτιμάται ότι κοστίζει ~{{gasPrice}} σε κόστος δικτύου. ",
+ "swap.bestRoute.cost": "Η καλύτερη τιμή διαδρομής κοστίζει ~{{gasPrice}} σε φυσικό αέριο. ",
+ "swap.bestRoute.cost.v4": "Το βέλτιστο κόστος διαδρομής ~{{gasPrice}} σε αέριο. ",
"swap.bridging.estimatedTime": "Εκτιμ. φορά",
"swap.bridging.title": "Ανταλλαγή μεταξύ δικτύων",
"swap.bridging.warning.description": "Αλλάζετε από {{fromNetwork}} σε {{toNetwork}}. Αυτό είναι επίσης γνωστό ως \"γέφυρα\", το οποίο μετακινεί τα διακριτικά σας από το ένα δίκτυο στο άλλο.",
@@ -1868,16 +1866,15 @@
"swap.review": "Ανταλλαγή κριτικής",
"swap.review.summary": "Ανταλλάσσετε",
"swap.reviewLimit": "Όριο ελέγχου",
- "swap.route.optimizedGasCost": "Αυτή η διαδρομή λαμβάνει υπόψη τις διαιρούμενες διαδρομές, τα πολλαπλά άλματα και το κόστος δικτύου για κάθε βήμα.",
+ "swap.route.optimizedGasCost": "Αυτή η διαδρομή βελτιστοποιεί τη συνολική απόδοση λαμβάνοντας υπόψη τις διαχωρισμένες διαδρομές, τα πολλαπλά άλματα και το κόστος δικτύου κάθε βήματος.",
"swap.settings.deadline.tooltip": "Η συναλλαγή σας θα επανέλθει εάν είναι σε εκκρεμότητα για περισσότερο από αυτό το χρονικό διάστημα. (Μέγιστο: 3 ημέρες).",
"swap.settings.deadline.warning": "Υψηλή προθεσμία",
"swap.settings.protection.description": "Με ενεργοποιημένη την προστασία ανταλλαγής, οι συναλλαγές σας στο Ethereum θα προστατεύονται από επιθέσεις σάντουιτς, με μειωμένες πιθανότητες αποτυχίας.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Δίκτυο",
"swap.settings.protection.subtitle.unavailable": "Μη διαθέσιμο στις {{chainName}}",
"swap.settings.protection.title": "Swap Protection",
- "swap.settings.routingPreference.option.default.description": "Η ενεργοποίηση αυτής της επιλογής προσδιορίζει την πιο αποτελεσματική διαδρομή για την εναλλαγή σας.",
- "swap.settings.routingPreference.option.default.description.preV4": "Ο πελάτης Uniswap επιλέγει τη φθηνότερη επιλογή συναλλαγών λαμβάνοντας υπόψη την τιμή και το κόστος δικτύου.",
- "swap.settings.routingPreference.option.default.tooltip": "Εντοπίζεται μια διαδρομή λαμβάνοντας υπόψη τις ομάδες v2, v3 και v4, λαμβάνοντας υπόψη τον εκτιμώμενο αντίκτυπο στην τιμή και το κόστος δικτύου.",
+ "swap.settings.routingPreference.option.default.description": "Ο πελάτης Uniswap επιλέγει τη φθηνότερη επιλογή συναλλαγών λαμβάνοντας υπόψη την τιμή και το κόστος δικτύου.",
+ "swap.settings.routingPreference.option.default.description.v4": "Ο πελάτης Uniswap επιλέγει τη βέλτιστη επιλογή συναλλαγών λαμβάνοντας υπόψη την τιμή και το κόστος δικτύου.",
"swap.settings.routingPreference.option.v2.title": "v2 πισίνες",
"swap.settings.routingPreference.option.v3.title": "v3 πισίνες",
"swap.settings.routingPreference.option.v4.title": "v4 πισίνες",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Πάντα να κάνετε την έρευνά σας",
"token.safety.warning.blocked.description.default_one": "Δεν μπορείτε να ανταλλάξετε αυτό το διακριτικό χρησιμοποιώντας την εφαρμογή Uniswap.",
"token.safety.warning.blocked.description.default_other": "Δεν μπορείτε να ανταλλάξετε αυτά τα διακριτικά χρησιμοποιώντας την εφαρμογή Uniswap.",
+ "token.safety.warning.blocked.description.named": "Δεν μπορείτε να ανταλλάξετε {{tokenSymbol}} χρησιμοποιώντας την εφαρμογή Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Μην μου ξαναδείξετε αυτήν την προειδοποίηση",
"token.safety.warning.doYourOwnResearch": "Πάντα να κάνετε τη δική σας έρευνα πριν προχωρήσετε.",
"token.safety.warning.feeDescription": "Φορτίζει ένα όταν {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "Το {{tokenSymbol}} μπορεί να μην είναι το διακριτικό που θέλετε να ανταλλάξετε.",
"token.safety.warning.malicious.title": "Εντοπίστηκε κακόβουλο διακριτικό",
"token.safety.warning.mayResultInLoss": "Η αντικατάστασή του μπορεί να οδηγήσει σε απώλεια κεφαλαίων.",
+ "token.safety.warning.medium.heading.default_one": "Αυτό το διακριτικό δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ.",
+ "token.safety.warning.medium.heading.default_other": "Αυτά τα διακριτικά δεν διαπραγματεύονται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ.",
+ "token.safety.warning.medium.heading.default_one_also": "Αυτό το διακριτικό επίσης δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ.",
+ "token.safety.warning.medium.heading.default_other_also": "Αυτά τα διακριτικά επίσης δεν διαπραγματεύονται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ.",
"token.safety.warning.medium.heading.named": "Το {{tokenSymbol}} δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ.",
"token.safety.warning.notListedOnExchanges": "Δεν είναι εισηγμένη σε κορυφαία χρηματιστήρια των ΗΠΑ",
"token.safety.warning.sellFee100.message": "Το {{ tokenSymbol }} έχει επισημανθεί ως μη πωλήσιμο.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Το {{tokenSymbol}} έχει επισημανθεί ως ανεπιθύμητο από το Blockaid.",
"token.safety.warning.spam.title": "Εντοπίστηκε διακριτικό ανεπιθύμητης αλληλογραφίας",
"token.safety.warning.spamsUsers": "Χρήστες ανεπιθύμητων μηνυμάτων",
+ "token.safety.warning.strong.heading.default_one": "Αυτό το διακριτικό δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ ούτε ανταλλάσσεται συχνά στο Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Αυτά τα διακριτικά δεν διαπραγματεύονται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ ούτε ανταλλάσσονται συχνά στο Uniswap.",
+ "token.safety.warning.strong.heading.named": "Το {{tokenSymbol}} δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ ούτε ανταλλάσσεται συχνά στο Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "Το {{tokenSymbol}} χρεώνει μια χρέωση {{buyFeePercent}} κατά την αγορά και {{sellFeePercent}} κατά την πώληση.",
"token.safety.warning.tokenChargesFee.buy.message": "Το {{tokenSymbol}} χρεώνει μια χρέωση {{feePercent}} κατά την αγορά.",
"token.safety.warning.tokenChargesFee.sell.message": "Το {{tokenSymbol}} χρεώνει {{feePercent}} χρέωση όταν πωλείται.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} χρεώνει μια χρέωση όταν αγοράζεται ή πωλείται.",
+ "token.safetyLevel.blocked.header": "Μη διαθέσιμος",
"token.safetyLevel.blocked.message": "Δεν μπορείτε να ανταλλάξετε αυτό το διακριτικό χρησιμοποιώντας το Πορτοφόλι Uniswap.",
+ "token.safetyLevel.medium.header": "Προσοχή",
+ "token.safetyLevel.medium.message": "Αυτό το διακριτικό δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ. Πάντα να κάνετε τη δική σας έρευνα πριν προχωρήσετε.",
"token.safetyLevel.medium.message.plural": "Αυτά τα διακριτικά δεν διαπραγματεύονται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ. Πάντα να κάνετε τη δική σας έρευνα πριν προχωρήσετε.",
+ "token.safetyLevel.strong.header": "Προειδοποίηση",
+ "token.safetyLevel.strong.message": "Αυτό το διακριτικό δεν διαπραγματεύεται σε κορυφαία κεντρικά χρηματιστήρια των ΗΠΑ ούτε ανταλλάσσεται συχνά στο Uniswap. Πάντα να κάνετε τη δική σας έρευνα πριν προχωρήσετε.",
"token.selector.search.error": "Δεν ήταν δυνατή η φόρτωση των αποτελεσμάτων αναζήτησης",
"token.stats.fullyDilutedValuation": "Πλήρως αραιωμένη αποτίμηση",
"token.stats.marketCap": "Κεφάλαιο αγοράς",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Άλλα διακριτικά στο {{network}}",
"tokens.selector.section.recent": "Πρόσφατες αναζητήσεις",
"tokens.selector.section.search": "Αποτελέσματα αναζήτησης",
- "tokens.selector.section.trending": "Tokens κατά όγκο 24 ωρών",
"tokens.selector.section.yours": "Οι μάρκες σας",
"tokens.table.search.placeholder.pools": "Αναζήτηση πισινών",
"tokens.table.search.placeholder.tokens": "Αναζήτηση διακριτικών",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Χαμηλό υπόλοιπο διακριτικών δικτύου",
"transaction.watcher.error.cancel": "Δεν είναι δυνατή η ακύρωση της συναλλαγής",
"transaction.watcher.error.status": "Σφάλμα κατά τον έλεγχο της κατάστασης συναλλαγής",
- "unichain.promotion.cold.description": "Γρήγορες ανταλλαγές. Χαμηλότερα τέλη. Το Unichain είναι το σπίτι για το DeFi.",
- "unichain.promotion.cold.title": "Παρουσιάζοντας το Unichain",
- "unichain.promotion.modal.description": "Γρήγορες ανταλλαγές. Χαμηλότερα τέλη. Η Unichain είναι το σπίτι της διασταυρούμενης ρευστότητας.",
- "unichain.promotion.modal.detail.costs": "Χαμηλότερο κόστος για τη δημιουργία πισινών και τη διαχείριση θέσεων.",
- "unichain.promotion.modal.detail.fees": "Εξοικονομήστε 95% στις χρεώσεις σε σύγκριση με το Ethereum.",
- "unichain.promotion.modal.detail.instant": "Ανταλλάξτε αμέσως",
- "unichain.promotion.warm.description": "Ανταλλάξτε τα αγαπημένα σας μάρκες πιο γρήγορα και με χαμηλότερο κόστος αερίου.",
- "unichain.promotion.warm.title": "Ξεκινήστε να ανταλλάσσετε στο Unichain",
"uniswapX.aggregatesLiquidity": " συγκεντρώνει πηγές ρευστότητας για καλύτερες τιμές και ανταλλαγές χωρίς φυσικό αέριο.",
"uniswapx.description": "Το UniswapX συγκεντρώνει πηγές ρευστότητας για καλύτερες τιμές και ανταλλαγές χωρίς φυσικό αέριο.",
- "uniswapx.included": "Περιλαμβάνει UniswapX",
+ "uniswapx.included": "Περιλαμβάνει UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Μάθετε περισσότερα σχετικά με την ανταλλαγή με το UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/es-ES.json b/packages/uniswap/src/i18n/locales/translations/es-ES.json
index f425d42e5dd..614e1d00780 100644
--- a/packages/uniswap/src/i18n/locales/translations/es-ES.json
+++ b/packages/uniswap/src/i18n/locales/translations/es-ES.json
@@ -176,6 +176,7 @@
"common.allTime": "Histórico",
"common.amount.label": "Monto",
"common.amountDeposited.label": "{{amount}} depositado",
+ "common.amountInput.placeholder": "Monto de entrada",
"common.and": "y",
"common.app": "App",
"common.approval.cancelled": "Se canceló la aprobación",
@@ -312,7 +313,6 @@
"common.currency": "Moneda",
"common.currentPrice": "Precio actual",
"common.currentPrice.label": "Precio actual:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Personalizar",
"common.customRange": "Rango personalizado",
"common.dataOutdated": "Es posible que los datos estén desactualizados",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "Comisiones ganadas en {{symbol}}:",
"common.feesEarnedPerBase": "{{symbolA}} por {{symbolB}}",
"common.fetchingRoute": "Recuperando ruta",
+ "common.flag": "Marcar",
"common.floor": "Mínimo",
"common.floorPrice": "Precio mínimo",
"common.for": "Para",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Aprobar en la billetera",
"common.wallet.label": "Billetera",
"common.walletForSwapping": "La billetera diseñada para intercambios. Disponible en iOS y Android.",
- "common.warning": "Warning",
"common.webApp": "App web",
"common.website": "Sitio web",
"common.whyApprove": "¿Por qué debo aprobar un token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "No se pudieron cargar los tokens para comprar",
"fiatOnRamp.error.max": "{{amount}} máximo",
"fiatOnRamp.error.min": "{{amount}} mínimo",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Este servicio no está disponible en tu región",
"fiatOnRamp.error.unsupported": "No disponible en la región",
"fiatOnRamp.error.usd": "Solo disponible para comprar en USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} por {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Se compró en {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Se te redirigirá al portal del proveedor para conocer las comisiones asociadas a la transacción.",
"fiatOnRamp.quote.type.list": "{{optionsList}} y otras opciones",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "NFT del LP {{symA}}/{{symB}}",
"migrate.lpTokens": "Tokens del LP de {{symA}}/{{symB}}",
"migrate.migrating": "Migrando",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "¿No ves una de tus posiciones v2? Impórtala.",
"migrate.noV2Liquidity": "No se encontró ninguna liquidez V2.",
"migrate.positionNoFees": "Tu posición no generará comisiones ni se utilizará en operaciones de trading hasta que el precio de mercado entre en el rango.",
"migrate.priceDifference": "Diferencia de precio: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "Precio de {{protocolName}} {{tokenSymbol}}:",
"migrate.v2Description": "Esta herramienta migrará de manera segura tu liquidez de {{source}} a V3. El proceso es totalmente confiable gracias al <0>contrato de migración de Uniswap0> ↗",
"migrate.v2Instruction": "Para cada fondo que se muestra a continuación, haz clic en Migrar a fin de eliminar tu liquidez de Uniswap V2 y depositarla en Uniswap V3.",
+ "migrate.v2Subtitle": "Migra tus tokens de liquidez de Uniswap V2 a Uniswap V3.",
"migrate.v2Title": "Migra la liquidez V2",
"migrate.v3Price": "Precio de V3 en {{sym}}:",
"mint.v3.input.invalidPrice.error": "Entrada de precio no válida",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Nombra la billetera",
"onboarding.notification.permission.message": "Activa las notificaciones de Uniswap Wallet en la configuración de tu dispositivo para recibirlas.",
"onboarding.notification.permission.title": "Permiso de notificaciones",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Recibe notificaciones cuando se completen las transferencias, intercambios y aprobaciones.",
+ "onboarding.notification.title": "Activa las notificaciones de inserción",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Conéctate a una billetera para ver tu liquidez.",
"pool.liquidity.data.error.message": "No se pudieron recuperar los datos necesarios para la transacción.",
"pool.liquidity.earn.fee": "Los proveedores de liquidez ganan una comisión del 0.3 % sobre todas las operaciones de manera proporcional a su participación del fondo. Las comisiones se agregan al fondo, se acumulan en tiempo real y se pueden reclamar al retirar la liquidez.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Los precios del fondo no están sincronizados",
+ "pool.liquidity.outOfSync.message": "Los precios en este fondo no están sincronizados con el mercado actual. Si agregas liquidez, puede haber una pérdida de fondos.",
"pool.liquidity.ownershipWarning.message": "No eres el titular de esta posición del LP. No podrás retirar la liquidez de esta posición, a menos que poseas la siguiente dirección: {{ownerAddress}}",
"pool.liquidity.rewards": "Recompensas del proveedor de liquidez",
"pool.liquidity.taxWarning": "Impuestos del token",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "El precio de este fondo está dentro del rango seleccionado. Actualmente, tu posición genera comisiones.",
"pool.rates": "Tasas",
"pool.ratioTokenToPrice": "El ratio de tokens que agregues establecerá el precio de este fondo.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Eliminar liquidez",
"pool.rewardsPool.label": "Tokens del fondo en el fondo de recompensas:",
"pool.selectedRange": "Rango seleccionado",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Los hooks son una función avanzada que permite que los fondos interactúen con contratos inteligentes y desbloqueen diferentes capacidades. Ten cuidado al agregar hooks, ya que algunos pueden ser maliciosos o tener consecuencias no deseadas.",
"position.addingHook": "Agregando hook",
"position.addingHook.disclaimer": "Es posible que la adición de hooks tenga consecuencias no deseadas. Investiga y continúa bajo tu responsabilidad.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Ingresar una dirección de hook válida",
"position.addingHook.viewProperties": "Ver propiedades",
"position.appearHere": "Tu posición aparecerá aquí.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "{{currencySymbol}} depositado",
"position.hook.disclaimer": "Comprendo los riesgos.",
"position.hook.liquidityWarning": "Esta marca puede hacer que el fondo bloquee la adición de una nueva liquidez. Es posible que la transacción se revierta.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Esta marca puede hacer que se bloqueen los fondos o impedirte que cobres comisiones.",
"position.hook.swapWarning": "Esta marca puede permitir que los usuarios sofisticados aprovechen la liquidez Justo a tiempo con mayor facilidad, lo que da como resultado comisiones más bajas.",
"position.hook.warningHeader": "Se detectó un hook de alto riesgo",
"position.hook.warningInfo": "Identificamos posibles riesgos con este hook. Revisa las marcas y confirma que este es el hook que deseas usar antes de continuar.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Aprobar e intercambiar",
"swap.approveInWallet": "Aprobar en la billetera",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "La mejor ruta de precio cuesta ~{{gasPrice}} en gas. ",
+ "swap.bestRoute.cost.v4": "La mejor ruta de precio cuesta ~{{gasPrice}} en gas. ",
"swap.bridging.estimatedTime": "Tiempo estim.",
"swap.bridging.title": "Intercambia entre redes",
"swap.bridging.warning.description": "Estás intercambiando de {{fromNetwork}} a {{toNetwork}}. Esto también se conoce como “establecer un puente”, que consiste en mover los tokens de una red a otra.",
@@ -1868,16 +1866,15 @@
"swap.review": "Revisar intercambio",
"swap.review.summary": "Estás intercambiando",
"swap.reviewLimit": "Revisar límite",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "Esta ruta optimiza la salida total, ya que considera rutas divididas, varios saltos y el costo de la red de cada paso.",
"swap.settings.deadline.tooltip": "La transacción se revertirá si está pendiente por más tiempo que el indicado. (Máximo: 3 días).",
"swap.settings.deadline.warning": "Fecha límite alta",
"swap.settings.protection.description": "Con la protección de intercambio activada, tus transacciones de Ethereum estarán protegidas de ataques sándwich, con menores posibilidades de falla.",
"swap.settings.protection.subtitle.supported": "Red {{chainName}}",
"swap.settings.protection.subtitle.unavailable": "No está disponible en {{chainName}}",
"swap.settings.protection.title": "Protección de intercambio",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "El cliente de Uniswap selecciona la opción de comercio más barata teniendo en cuenta el precio y los costos de la red.",
+ "swap.settings.routingPreference.option.default.description.v4": "El cliente de Uniswap selecciona la mejor opción de comercio teniendo en cuenta el precio y los costos de la red.",
"swap.settings.routingPreference.option.v2.title": "Fondos v2",
"swap.settings.routingPreference.option.v3.title": "Fondos v3",
"swap.settings.routingPreference.option.v4.title": "Fondos v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Haz siempre tu investigación",
"token.safety.warning.blocked.description.default_one": "No puedes intercambiar este token con la app de Uniswap.",
"token.safety.warning.blocked.description.default_other": "No puedes intercambiar estos tokens con la app de Uniswap.",
+ "token.safety.warning.blocked.description.named": "No puedes intercambiar {{tokenSymbol}} con la app de Uniswap.",
"token.safety.warning.dontShowWarningAgain": "No volver a mostrar esta advertencia",
"token.safety.warning.doYourOwnResearch": "Realiza siempre tu propia investigación antes de continuar.",
"token.safety.warning.feeDescription": "Cobra una cuando {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "Es posible que {{tokenSymbol}} no sea el token que quieres intercambiar.",
"token.safety.warning.malicious.title": "Se detectó un token malicioso",
"token.safety.warning.mayResultInLoss": "Si lo intercambias, podría haber una pérdida de fondos.",
+ "token.safety.warning.medium.heading.default_one": "Este token no se intercambia en los principales exchange centralizados de EE. UU.",
+ "token.safety.warning.medium.heading.default_other": "Estos tokens no se intercambian en los principales exchange centralizados de EE. UU.",
+ "token.safety.warning.medium.heading.default_one_also": "Este token tampoco se intercambia en los principales exchange centralizados de EE. UU.",
+ "token.safety.warning.medium.heading.default_other_also": "Estos tokens tampoco se intercambian en los principales exchange centralizados de EE. UU.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} no se intercambia en los principales exchange centralizados de EE. UU.",
"token.safety.warning.notListedOnExchanges": "No se encuentra dentro de los principales exchange de EE. UU.",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} se marcó como invendible.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Blockaid marcó {{tokenSymbol}} como no deseado.",
"token.safety.warning.spam.title": "Se detectó un token de spam",
"token.safety.warning.spamsUsers": "Envía correo no deseado a los usuarios",
+ "token.safety.warning.strong.heading.default_one": "Este token no se intercambia en los principales exchange centralizados de EE. UU. ni se intercambia con frecuencia en Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Estos tokens no se intercambian en los principales exchange centralizados de EE. UU. ni se intercambian con frecuencia en Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} no se intercambia en los principales exchange centralizados de EE. UU. ni se intercambia con frecuencia en Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} cobra una comisión del {{buyFeePercent}} en la compra y del {{sellFeePercent}} en la venta.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} cobra una comisión del {{feePercent}} en la compra.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} cobra una comisión del {{feePercent}} en la venta.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} cobra una comisión cuando se compra o se vende",
+ "token.safetyLevel.blocked.header": "No está disponible",
"token.safetyLevel.blocked.message": "No puedes intercambiar este token con Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Precaución",
+ "token.safetyLevel.medium.message": "Este token no se intercambia en los principales exchange centralizados de EE. UU. Realiza siempre tu propia investigación antes de continuar.",
"token.safetyLevel.medium.message.plural": "Estos tokens no se intercambian en los principales exchange centralizados de EE. UU. Realiza siempre tu propia investigación antes de continuar.",
+ "token.safetyLevel.strong.header": "Advertencia",
+ "token.safetyLevel.strong.message": "Este token no se intercambia en los principales exchange centralizados de EE. UU. ni se intercambia con frecuencia en Uniswap. Realiza siempre tu propia investigación antes de continuar.",
"token.selector.search.error": "No se pudieron cargar los resultados de la búsqueda",
"token.stats.fullyDilutedValuation": "Valor totalmente diluido",
"token.stats.marketCap": "Capitalización de mercado",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Otros tokens en {{network}}",
"tokens.selector.section.recent": "Búsquedas recientes",
"tokens.selector.section.search": "Resultados de la búsqueda",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Tus tokens",
"tokens.table.search.placeholder.pools": "Buscar fondos",
"tokens.table.search.placeholder.tokens": "Buscar tokens",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Saldo de token de la red bajo",
"transaction.watcher.error.cancel": "No se pudo cancelar la transacción",
"transaction.watcher.error.status": "No se pudo verificar el estado de la transacción",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " combina fuentes de liquidez para obtener mejores precios e intercambios sin gas.",
"uniswapx.description": "UniswapX combina fuentes de liquidez para obtener mejores precios e intercambios sin gas.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Incluye UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Aprender más sobre el intercambio con UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/fi-FI.json b/packages/uniswap/src/i18n/locales/translations/fi-FI.json
index 55caa5575e6..7f82ea1151e 100644
--- a/packages/uniswap/src/i18n/locales/translations/fi-FI.json
+++ b/packages/uniswap/src/i18n/locales/translations/fi-FI.json
@@ -176,6 +176,7 @@
"common.allTime": "Koko ajan",
"common.amount.label": "Määrä",
"common.amountDeposited.label": "{{amount}} Talletettu",
+ "common.amountInput.placeholder": "Syötä määrä",
"common.and": "ja",
"common.app": "Sovellus",
"common.approval.cancelled": "Hyväksyntä peruutettu",
@@ -312,7 +313,6 @@
"common.currency": "Valuutta",
"common.currentPrice": "Nykyinen hinta",
"common.currentPrice.label": "Nykyinen hinta:",
- "common.currentPrice.unavailable": "Nykyinen hinta ei saatavilla",
"common.custom": "Mukautettu",
"common.customRange": "Mukautettu valikoima",
"common.dataOutdated": "Tiedot voivat olla vanhentuneita",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Ansaitut palkkiot:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Haetaan reittiä",
+ "common.flag": "Lippu",
"common.floor": "Lattia",
"common.floorPrice": "Lattian hinta",
"common.for": "varten",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Hyväksy lompakossa",
"common.wallet.label": "Lompakko",
"common.walletForSwapping": "Vaihtoa varten tehty lompakko. Saatavilla iOS:lle ja Androidille.",
- "common.warning": "Varoitus",
"common.webApp": "Verkkosovellus",
"common.website": "Verkkosivusto",
"common.whyApprove": "Miksi minun täytyy hyväksyä tunnus?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Ei voitu ladata tunnuksia ostettaviksi",
"fiatOnRamp.error.max": "Enintään {{amount}}",
"fiatOnRamp.error.min": "Minimi {{amount}}",
- "fiatOnRamp.error.noQuotes": "Lainauksia ei löytynyt.",
"fiatOnRamp.error.unavailable": "Tämä palvelu ei ole saatavilla alueellasi",
"fiatOnRamp.error.unsupported": "Ei tuettu alueella",
"fiatOnRamp.error.usd": "Saatavilla vain USD:ssä",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Lainauksia ei löytynyt",
"fiatOnRamp.purchasedOn": "Ostettu {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Siirryt palveluntarjoajan portaaliin nähdäksesi tapahtumaasi liittyvät maksut.",
"fiatOnRamp.quote.type.list": "{{optionsList}}ja muita vaihtoehtoja",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Hinta:",
"migrate.v2Description": "Tämä työkalu siirtää {{source}} likviditeettisi turvallisesti V3:een. Prosessi on täysin luotettava <0>Uniswap-siirtosopimuksen ansiosta0> ↗",
"migrate.v2Instruction": "Napsauta kunkin alla näytetyn poolin kohdalla Siirrä poistaaksesi likviditeettisi Uniswap V2:sta ja talleta se Uniswap V3:een.",
+ "migrate.v2Subtitle": "Siirrä likviditeettitunnuksesi Uniswap V2:sta Uniswap V3:een.",
"migrate.v2Title": "Siirrä V2-likviditeetti",
"migrate.v3Price": "V3 {{sym}} Hinta:",
"mint.v3.input.invalidPrice.error": "Virheellinen hintasyöttö",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Anna lompakolle nimi",
"onboarding.notification.permission.message": "Jos haluat saada ilmoituksia, ota Uniswap Walletin ilmoitukset käyttöön laitteesi asetuksista.",
"onboarding.notification.permission.title": "Ilmoitusten lupa",
- "onboarding.notification.subtitle": "Pysy ajan tasalla suosikkitokenien tapahtumatiloista ja merkittävistä hintamuutoksista",
- "onboarding.notification.title": "Ota ilmoitukset käyttöön",
+ "onboarding.notification.subtitle": "Saat ilmoituksen, kun siirrot, vaihtosopimukset ja hyväksynnät on suoritettu.",
+ "onboarding.notification.title": "Ota push-ilmoitukset käyttöön",
"onboarding.passkey.account.protection": "Tilisi on suojattu omalla suojatulla salasanavarastollasi.",
"onboarding.passkey.biometric.scan": "Puhelin, tabletti tai selain – skannaa vain biometriset tietosi ja kirjaudut sisään.",
"onboarding.passkey.create": "Luo salasanasi",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Yhdistä lompakkoon nähdäksesi likviditeettisi.",
"pool.liquidity.data.error.message": "Tapahtumaasi vaadittavien tietojen noutamisessa tapahtui virhe.",
"pool.liquidity.earn.fee": "Likviditeetin tarjoajat ansaitsevat kaikista kaupoista 0,3 %:n maksun, joka on suhteessa heidän osuuteensa poolista. Maksut lisätään pooliin, ne kertyvät reaaliajassa ja ne voidaan vaatia nostamalla likviditeettisi.",
- "pool.liquidity.outOfSync": "Uima-allas ja markkinahinta eivät vastaa toisiaan",
- "pool.liquidity.outOfSync.message": "Tämän poolin hinnat vaihtelevat valittujen rahakkeiden markkinahintojen mukaan. Säädä hintaluokkaasi vastaavasti tai odota, että pooli tasapainottuu tappioiden välttämiseksi.",
+ "pool.liquidity.outOfSync": "Allashinnat eivät ole synkronoituja",
+ "pool.liquidity.outOfSync.message": "Tämän poolin hinnat eivät ole synkronoituja nykyisten markkinoiden kanssa. Likviditeetin lisääminen voi johtaa varojen menetykseen.",
"pool.liquidity.ownershipWarning.message": "Et ole tämän LP-paikan omistaja. Et voi nostaa likviditeettiä tästä positiosta, ellet omista seuraavaa osoitetta: {{ownerAddress}}",
"pool.liquidity.rewards": "Likviditeetin tarjoajan palkkiot",
"pool.liquidity.taxWarning": "Token verot",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Tämän uima-altaan hinta on valitsemasi alueella. Tehtäväsi ansaitsee tällä hetkellä maksuja.",
"pool.rates": "Hinnat",
"pool.ratioTokenToPrice": "Lisäämiesi rahakkeiden suhde määrää tämän poolin hinnan.",
- "pool.refresh.prices": "Päivitä hinnat",
"pool.removeLiquidity": "Poista likviditeetti",
"pool.rewardsPool.label": "Pool-merkit palkintopoolissa:",
"pool.selectedRange": "Valittu alue",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Koukut ovat edistyksellinen ominaisuus, jonka avulla poolit voivat olla vuorovaikutuksessa älykkäiden sopimusten kanssa, mikä vapauttaa erilaisia ominaisuuksia. Ole varovainen lisääessäsi koukkuja, koska jotkut niistä voivat olla haitallisia tai aiheuttaa ei-toivottuja seurauksia.",
"position.addingHook": "Koukun lisääminen",
"position.addingHook.disclaimer": "Koukkujen lisäämisellä voi olla tahattomia seurauksia. Tee tutkimus ja jatka omalla vastuullasi.",
- "position.addingHook.hideProperties": "Piilota ominaisuudet",
"position.addingHook.invalidAddress": "Anna kelvollinen koukun osoite",
"position.addingHook.viewProperties": "Näytä ominaisuudet",
"position.appearHere": "Sijaintisi näkyy täällä.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Talletettu {{currencySymbol}}",
"position.hook.disclaimer": "Ymmärrän riskit.",
"position.hook.liquidityWarning": "Tämä lippu voi saada poolin estämään uuden likviditeetin lisäämisen. Tapahtumasi voi peruuttaa.",
- "position.hook.removeWarning": "Saattaa saada varojasi lukittumaan tai estää sinua keräämästä maksuja.",
+ "position.hook.removeWarning": "Tämä lippu voi aiheuttaa rahasi lukitsemisen tai estää sinua keräämästä maksuja.",
"position.hook.swapWarning": "Tämän lipun avulla edistyneet käyttäjät voivat helpommin hyödyntää Just-In-Time-likviditeettiä, mikä johtaa alhaisempiin palkkioihin.",
"position.hook.warningHeader": "Korkean riskin koukku havaittu",
"position.hook.warningInfo": "Olemme tunnistaneet tämän koukun mahdolliset riskit. Tarkista liput ja varmista, että tämä on koukku, jota haluat käyttää, ennen kuin jatkat.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Hyväksy ja vaihda",
"swap.approveInWallet": "Hyväksy lompakossasi",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Tehokkaimman reitin arvioidaan maksavan ~{{gasPrice}} verkkokustannuksissa. ",
+ "swap.bestRoute.cost": "Paras hinta reitti maksaa ~{{gasPrice}} kaasussa. ",
+ "swap.bestRoute.cost.v4": "Optimaalinen reitti maksaa ~{{gasPrice}} kaasussa. ",
"swap.bridging.estimatedTime": "Arvioitu aika",
"swap.bridging.title": "Vaihtaminen verkkojen välillä",
"swap.bridging.warning.description": "Olet vaihtamassa arvosta {{fromNetwork}} arvoon {{toNetwork}}. Tätä kutsutaan myös \"sillaksi\", joka siirtää tunnuksesi verkosta toiseen.",
@@ -1868,16 +1866,15 @@
"swap.review": "Arvostelun vaihto",
"swap.review.summary": "Olet vaihtamassa",
"swap.reviewLimit": "Tarkistamisraja",
- "swap.route.optimizedGasCost": "Tämä reitti ottaa huomioon jaetut reitit, useita hyppyjä ja kunkin vaiheen verkkokustannukset.",
+ "swap.route.optimizedGasCost": "Tämä reitti optimoi kokonaistuloksesi ottamalla huomioon jaetut reitit, useita hyppyjä ja kunkin vaiheen verkkokustannukset.",
"swap.settings.deadline.tooltip": "Tapahtumasi palautetaan, jos se on vireillä yli tämän ajanjakson. (Enintään: 3 päivää).",
"swap.settings.deadline.warning": "Korkea määräaika",
"swap.settings.protection.description": "Kun swap-suojaus on käytössä, Ethereum-tapahtumasi suojataan sandwich-hyökkäyksiltä, mikä vähentää epäonnistumisen mahdollisuuksia.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Verkko",
"swap.settings.protection.subtitle.unavailable": "Ei saatavilla {{chainName}}",
"swap.settings.protection.title": "Vaihda suojaus",
- "swap.settings.routingPreference.option.default.description": "Tämän vaihtoehdon valitseminen tunnistaa vaihdollesi tehokkaimman reitin.",
- "swap.settings.routingPreference.option.default.description.preV4": "Uniswap-asiakas valitsee halvimman kauppavaihtoehdon hinnan ja verkkokustannusten perusteella.",
- "swap.settings.routingPreference.option.default.tooltip": "Reitti tunnistetaan v2-, v3- ja tietyt v4-poolit huomioon ottaen arvioitu hintavaikutus ja verkkokustannukset.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap-asiakas valitsee halvimman kauppavaihtoehdon hinnan ja verkkokustannusten perusteella.",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap-asiakas valitsee optimaalisen kauppavaihtoehdon hinnan ja verkkokustannusten perusteella.",
"swap.settings.routingPreference.option.v2.title": "v2 poolit",
"swap.settings.routingPreference.option.v3.title": "v3 poolit",
"swap.settings.routingPreference.option.v4.title": "v4 poolit",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Tee aina tutkimustietosi",
"token.safety.warning.blocked.description.default_one": "Et voi vaihtaa tätä merkkiä Uniswap-sovelluksella.",
"token.safety.warning.blocked.description.default_other": "Et voi vaihtaa näitä tokeneita Uniswap-sovelluksella.",
+ "token.safety.warning.blocked.description.named": "Et voi käydä kauppaa {{tokenSymbol}} Uniswap-sovelluksella.",
"token.safety.warning.dontShowWarningAgain": "Älä näytä minulle tätä varoitusta uudelleen",
"token.safety.warning.doYourOwnResearch": "Tee aina oma tutkimus ennen kuin jatkat.",
"token.safety.warning.feeDescription": "Veloittaa kun {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} ei välttämättä ole se merkki, jota aiot vaihtaa.",
"token.safety.warning.malicious.title": "Haitallinen tunnus havaittu",
"token.safety.warning.mayResultInLoss": "Sen vaihtaminen voi johtaa varojen menetykseen.",
+ "token.safety.warning.medium.heading.default_one": "Tällä tunnuksella ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä.",
+ "token.safety.warning.medium.heading.default_other": "Näillä rahakkeilla ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä.",
+ "token.safety.warning.medium.heading.default_one_also": "Tällä tokenilla ei myöskään käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä.",
+ "token.safety.warning.medium.heading.default_other_also": "Näillä rahakkeilla ei myöskään käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä.",
"token.safety.warning.notListedOnExchanges": "Ei listattu johtavissa Yhdysvaltain pörsseissä",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} on merkitty myymättömäksi.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Blockaid on merkinnyt {{tokenSymbol}} roskapostiksi.",
"token.safety.warning.spam.title": "Roskapostitunnus havaittu",
"token.safety.warning.spamsUsers": "Roskapostin käyttäjät",
+ "token.safety.warning.strong.heading.default_one": "Tällä tunnuksella ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä eikä sitä vaihdeta usein Uniswapissa.",
+ "token.safety.warning.strong.heading.default_other": "Näillä rahakkeilla ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä tai niitä ei vaihdeta usein Uniswapissa.",
+ "token.safety.warning.strong.heading.named": "Arvolla {{tokenSymbol}} ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä eikä sitä vaihdeta usein Uniswapilla.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} veloittaa {{buyFeePercent}} maksun ostettaessa ja {{sellFeePercent}} myytäessä.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} veloittaa {{feePercent}} maksun ostettaessa.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} veloittaa {{feePercent}} maksun myydessään.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} veloittaa ostosta tai myymisestä maksun.",
+ "token.safetyLevel.blocked.header": "Ei saatavilla",
"token.safetyLevel.blocked.message": "Et voi vaihtaa tätä merkkiä Uniswap-lompakolla.",
+ "token.safetyLevel.medium.header": "Varoitus",
+ "token.safetyLevel.medium.message": "Tällä tunnuksella ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä. Tee aina oma tutkimus ennen kuin jatkat.",
"token.safetyLevel.medium.message.plural": "Näillä rahakkeilla ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä. Tee aina oma tutkimus ennen kuin jatkat.",
+ "token.safetyLevel.strong.header": "Varoitus",
+ "token.safetyLevel.strong.message": "Tällä tunnuksella ei käydä kauppaa Yhdysvaltojen johtavissa keskitetyissä pörsseissä eikä sitä vaihdeta usein Uniswapissa. Tee aina oma tutkimus ennen kuin jatkat.",
"token.selector.search.error": "Hakutuloksia ei voitu ladata",
"token.stats.fullyDilutedValuation": "Täysin laimennettu arvostus",
"token.stats.marketCap": "Markkina-arvo",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Muut merkit paikassa {{network}}",
"tokens.selector.section.recent": "Viimeaikaiset haut",
"tokens.selector.section.search": "Hakutulokset",
- "tokens.selector.section.trending": "Tokeneita 24 tunnin tilavuudella",
"tokens.selector.section.yours": "Sinun tokenisi",
"tokens.table.search.placeholder.pools": "Etsi poolit",
"tokens.table.search.placeholder.tokens": "Etsi tokeneja",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Alhainen verkkotunnuksen saldo",
"transaction.watcher.error.cancel": "Tapahtumaa ei voi peruuttaa",
"transaction.watcher.error.status": "Virhe tarkistettaessa tapahtuman tilaa",
- "unichain.promotion.cold.description": "Nopeammat vaihdot. Pienemmät maksut. Unichain on DeFin koti.",
- "unichain.promotion.cold.title": "Esittelyssä Unichain",
- "unichain.promotion.modal.description": "Nopeammat vaihdot. Pienemmät maksut. Unichain on ketjujen välisen likviditeetin koti.",
- "unichain.promotion.modal.detail.costs": "Pienemmät kustannukset poolien luomisesta ja tehtävien johtamisesta.",
- "unichain.promotion.modal.detail.fees": "Säästä 95 % maksuista Ethereumiin verrattuna.",
- "unichain.promotion.modal.detail.instant": "Vaihda heti",
- "unichain.promotion.warm.description": "Vaihda suosikkirahasi nopeammin ja alhaisemmilla polttoainekustannuksilla.",
- "unichain.promotion.warm.title": "Aloita vaihto Unichainilla",
"uniswapX.aggregatesLiquidity": " kokoaa likviditeettilähteitä parempia hintoja ja kaasuvapaita vaihtosopimuksia varten.",
"uniswapx.description": "UniswapX kokoaa likviditeettilähteitä parempiin hintoihin ja kaasuvapaisiin vaihtosopimuksiin.",
- "uniswapx.included": "Sisältää UniswapX",
+ "uniswapx.included": "Sisältää UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Lue lisää vaihtamisesta UniswapX:n kanssa",
diff --git a/packages/uniswap/src/i18n/locales/translations/fil-PH.json b/packages/uniswap/src/i18n/locales/translations/fil-PH.json
index 6775e5eda8e..d8cacef8375 100644
--- a/packages/uniswap/src/i18n/locales/translations/fil-PH.json
+++ b/packages/uniswap/src/i18n/locales/translations/fil-PH.json
@@ -176,6 +176,7 @@
"common.allTime": "Lahat ng oras",
"common.amount.label": "Halaga",
"common.amountDeposited.label": "Naideposito ang {{amount}}",
+ "common.amountInput.placeholder": "Halaga ng input",
"common.and": "at",
"common.app": "App",
"common.approval.cancelled": "Nakansela ang pag-apruba",
@@ -312,7 +313,6 @@
"common.currency": "Currency",
"common.currentPrice": "Kasalukuyang presyo",
"common.currentPrice.label": "Kasalukuyang presyo:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Custom",
"common.customRange": "Custom na range",
"common.dataOutdated": "Posibleng luma na ang data",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "Mga {{symbol}} Fee na Nakuha:",
"common.feesEarnedPerBase": "{{symbolA}} sa bawat {{symbolB}}",
"common.fetchingRoute": "Fine-fetch ang route",
+ "common.flag": "I-flag",
"common.floor": "Floor",
"common.floorPrice": "Floor price",
"common.for": "Para sa",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Aprubahan sa wallet",
"common.wallet.label": "Wallet",
"common.walletForSwapping": "Ang wallet na ginawa para sa pag-swap. Available sa iOS at Android.",
- "common.warning": "Warning",
"common.webApp": "Web app",
"common.website": "Website",
"common.whyApprove": "Bakit kailangan kong mag-apruba ng token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Hindi ma-load ang mga token na bibilhin",
"fiatOnRamp.error.max": "Maximum na {{amount}}",
"fiatOnRamp.error.min": "Minimum na {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Hindi available ang serbisyong ito sa iyong rehiyon",
"fiatOnRamp.error.unsupported": "Hindi sinusuportahan sa rehiyon",
"fiatOnRamp.error.usd": "Available lang na mabili sa USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} para sa {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Binili sa {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Magpapatuloy ka sa portal ng provider para makita ang mga fee na nauugnay sa transaksyon mo.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, at iba pang opsyon",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} na NFT ng LP",
"migrate.lpTokens": "{{symA}}/{{symB}} na mga token ng LP",
"migrate.migrating": "Nagma-migrate",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Hindi nakikita ang isa sa mga posisyon ng v2 mo? I-import ito.",
"migrate.noV2Liquidity": "Walang nakitang liquidity ng V2.",
"migrate.positionNoFees": "Ang iyong posisyon ay hindi magkakaroon ng mga fee o gagamitin sa mga trade hangga't hindi lumilipat ang presyo sa market papunta iyong range.",
"migrate.priceDifference": "Pagkakaiba sa presyo: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "Presyo ng {{protocolName}} {{tokenSymbol}}:",
"migrate.v2Description": "Ligtas na ima-migrate ng tool na ito ang iyong {{source}} liquidity sa V3. Ang prosesong ito ay ganap na trustless dahil sa <0>kontrata sa pag-migrate ng Uniswap0> ↗",
"migrate.v2Instruction": "Para sa bawat pool na ipinapakita sa ibaba, i-click ang i-migrate para alisin ang iyong liquidity mula sa Uniswap V2 at ideposito ito sa Uniswap V3.",
+ "migrate.v2Subtitle": "I-migrate ang mga token ng liquidity mo mula sa Uniswap V2 papunta sa Uniswap V3.",
"migrate.v2Title": "I-migrate ang V2 liquidity",
"migrate.v3Price": "Presyo ng V3 {{sym}}:",
"mint.v3.input.invalidPrice.error": "Invalid ang input ng presyo",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Bigyan ng pangalan ang wallet mo",
"onboarding.notification.permission.message": "Para makatanggap ng mga notification, i-on ang mga notification para sa Uniswap Wallet sa mga setting ng device mo.",
"onboarding.notification.permission.title": "Pahintulot sa mga notification",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Maabisuhan kapag nakumpleto na ang iyong mga pag-transfer, pag-swap, at pag-apruba.",
+ "onboarding.notification.title": "I-on ang mga push notification",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Kumonekta sa isang wallet para matingnan ang liquidity mo.",
"pool.liquidity.data.error.message": "Nagka-error sa pag-fetch ng data na kinakailangan para sa iyong transaksyon.",
"pool.liquidity.earn.fee": "Nakakakuha ang mga provider ng liquidity ng 0.3% fee sa lahat ng trade na proporsyonal sa share nila sa pool. Ang mga fee ay idinaragdag sa pool, naiipon nang real time at puwedeng i-claim sa pamamagitan ng pag-withdraw ng liquidity mo.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Hindi naka-sync ang mga presyo sa pool",
+ "pool.liquidity.outOfSync.message": "Hindi naka-sync ang mga presyo sa pool na ito sa kasalukuyang market. Ang pagdaragdag ng liquidity ay maaaring magresulta sa pagkawala ng mga pondo.",
"pool.liquidity.ownershipWarning.message": "Hindi ikaw ang may-ari ng posisyong ito sa LP. Hindi mo mawi-withdraw ang liquidity mula sa posisyong itong maliban na lang kung pagmamay-ari mo ang sumusunod na address: {{ownerAddress}}",
"pool.liquidity.rewards": "Mga reward sa provider ng liquidity",
"pool.liquidity.taxWarning": "Mga buwis sa token",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Ang presyo ng pool na ito ay sakop ng pinili mong range. Kumikita ng mga fee sa kasalukuyan ang posisyon mo.",
"pool.rates": "Mga Rate",
"pool.ratioTokenToPrice": "Ang ratio ng mga token na idaragdag mo ang magtatakda sa presyo ng pool na ito.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Alisin ang liquidity",
"pool.rewardsPool.label": "Mga token ng pool sa pool ng mga reward:",
"pool.selectedRange": "Piniling range",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Ang Hooks ay isang advanced na feature na nagbibigay-daan sa mga pool na makipag-interact sa mga smart contract, na nag-a-unlock ng iba't ibang kakayahan. Mag-ingat kapag nagdaragdag ng mga hook, dahil posibleng mapaminsala o magdulot ng mga hindi sinasadyang kahihinatnan ang ilan sa mga ito.",
"position.addingHook": "Pagdaragdag ng hook",
"position.addingHook.disclaimer": "Posibleng may mga hindi sinasadyang kahihinatnan sa pagdaragdag ng mga hook, Magsaliksik at magpatuloy sa sarili mong pagpapasya.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Maglagay ng valid na address ng hook",
"position.addingHook.viewProperties": "Tingnan ang mga property",
"position.appearHere": "Lalabas dito ang posisyon mo.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Nagdeposito ng {{currencySymbol}}",
"position.hook.disclaimer": "Nauunawaan ko ang mga risk.",
"position.hook.liquidityWarning": "Puwedeng magdulot ang flag na ito ng pag-block ng pool sa pagdaragdag ng bagong liquidity. Puwedeng i-revert ang transaksyon mo.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Puwedeng magdulot ang flag na ito ng pagka-lock ng mga pondo mo o pag-block sa iyo sa pagkolekta ng mga fee.",
"position.hook.swapWarning": "Puwedeng magbigay-daan ang flag na ito sa mas madaling paggamit ng mga sopistikadong user sa Just-In-Time liquidity na magreresulta sa mas mabababang fee na kikitain.",
"position.hook.warningHeader": "May na-detect na hook na may mataas na risk",
"position.hook.warningInfo": "May mga natukoy kaming potensyal na risk sa hook na ito. Pakisuri ang mga flag at i-verify kung ito ang hook na gusto mong gamitin bago magpatuloy.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Aprubahan at mag-swap",
"swap.approveInWallet": "Aprubahan sa wallet mo",
"swap.balance.amount": "Balanse: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Ang pinakamagandang presyo ng route ay nagkakahalaga ng ~{{gasPrice}} sa gas. ",
+ "swap.bestRoute.cost.v4": "Ang pinakamagandang presyo ng route ay nagkakahalaga ng ~{{gasPrice}} sa gas. ",
"swap.bridging.estimatedTime": "Tinatantyang oras",
"swap.bridging.title": "Pag-swap sa mga network",
"swap.bridging.warning.description": "Mag-swap ka sa {{toNetwork}} mula sa {{fromNetwork}}. Tinatawag din itong \"bridging\", na naglilipat ng mga token mo mula sa isang network papunta sa isa pa.",
@@ -1868,16 +1866,15 @@
"swap.review": "Suriin ang pag-swap",
"swap.review.summary": "Magsa-swap ka",
"swap.reviewLimit": "Suriin ang limit",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "Ino-optimize ng route na ito ang iyong kabuuang output sa pamamagitan ng pagsasaalang-alang sa mga split route, maraming hop, at bayad sa network sa bawat hakbang.",
"swap.settings.deadline.tooltip": "Mare-revert ang iyong transaksyon kung nakabinbin ito nang mas mahaba sa panahong ito. (Maximum: 3 araw).",
"swap.settings.deadline.warning": "Mataas na deadline",
"swap.settings.protection.description": "Kapag naka-on ang proteksyon sa pag-swap, mapoprotektahan ang iyong mga transaksyon sa Ethereum mula sa mga sandwich attack, na may mas mabababang tsansang pumalya.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Network",
"swap.settings.protection.subtitle.unavailable": "Hindi available sa {{chainName}}",
"swap.settings.protection.title": "Proteksyon sa pag-swap",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Pinipili ng Uniswap client ang pinakamurang opsyon sa trade kung saan fina-factor ang presyo at mga bayad sa network.",
+ "swap.settings.routingPreference.option.default.description.v4": "Pinipili ng Uniswap client ang pinakamagandang opsyon sa trade kung saan fina-factor ang presyo at mga bayad sa network.",
"swap.settings.routingPreference.option.v2.title": "Mga v2 pool",
"swap.settings.routingPreference.option.v3.title": "Mga v3 pool",
"swap.settings.routingPreference.option.v4.title": "Mga v4 pool",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Magsaliksik palagi",
"token.safety.warning.blocked.description.default_one": "Hindi mo mate-trade ang token na ito gamit ang Uniswap App.",
"token.safety.warning.blocked.description.default_other": "Hindi mo mate-trade ang mga token na ito gamit ang Uniswap App.",
+ "token.safety.warning.blocked.description.named": "Hindi mo mate-trade ang {{tokenSymbol}} gamit ang Uniswap App.",
"token.safety.warning.dontShowWarningAgain": "Huwag nang ipakita ulit sa akin ang babalang ito",
"token.safety.warning.doYourOwnResearch": "Magsagawa palagi ng sarili mong pananaliksik bago magpatuloy.",
"token.safety.warning.feeDescription": "May fee na kapag {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "Posibleng hindi ang {{tokenSymbol}} ang token na gusto mong i-swap.",
"token.safety.warning.malicious.title": "May na-detect na mapaminsalang token",
"token.safety.warning.mayResultInLoss": "Posibleng magresulta ang pag-swap nito sa pagkawala ng mga pondo.",
+ "token.safety.warning.medium.heading.default_one": "Hindi tine-trade ang token na ito sa mga nangungunang naka-centralize na palitan sa U.S.",
+ "token.safety.warning.medium.heading.default_other": "Hindi tine-trade ang mga token na ito sa mga nangungunang naka-centralize na palitan sa U.S.",
+ "token.safety.warning.medium.heading.default_one_also": "Hindi rin tine-trade ang token na ito sa mga nangungunang naka-centralize na palitan sa U.S.",
+ "token.safety.warning.medium.heading.default_other_also": "Hindi rin tine-trade ang mga token na ito sa mga nangungunang naka-centralize na palitan sa U.S.",
"token.safety.warning.medium.heading.named": "Hindi tine-trade ang {{tokenSymbol}} sa mga nangungunang naka-centralize na palitan sa U.S.",
"token.safety.warning.notListedOnExchanges": "Hindi nakalista sa mga nangungunang palitan sa U.S.",
"token.safety.warning.sellFee100.message": "Na-flag ang {{ tokenSymbol }} na hindi naibebenta.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Na-flag ng Blockaid ang {{tokenSymbol}} na spam.",
"token.safety.warning.spam.title": "May na-detect na token ng spam",
"token.safety.warning.spamsUsers": "Nagsa-spam ng mga user",
+ "token.safety.warning.strong.heading.default_one": "Ang token na ito ay hindi tine-trade sa mga nangungunang naka-centralize na palitan sa U.S. o madalas na sina-swap sa Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Ang mga token na ito ay hindi tine-trade sa mga nangungunang naka-centralize na palitan sa U.S. o madalas na sina-swap sa Uniswap.",
+ "token.safety.warning.strong.heading.named": "Ang {{tokenSymbol}} ay hindi tine-trade sa mga nangungunang naka-centralize na palitan sa U.S. o madalas na sina-swap sa Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "Ang {{tokenSymbol}} ay may {{buyFeePercent}} fee kapag binili at {{sellFeePercent}} kapag ibinenta.",
"token.safety.warning.tokenChargesFee.buy.message": "Ang {{tokenSymbol}} ay may {{feePercent}} fee kapag binili.",
"token.safety.warning.tokenChargesFee.sell.message": "Ang {{tokenSymbol}} ay may {{feePercent}} fee kapag ibinenta.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "Ang {{tokenSymbol}} ay may fee kapag binili o ibinenta.",
+ "token.safetyLevel.blocked.header": "Hindi available",
"token.safetyLevel.blocked.message": "Hindi mo mate-trade ang token na ito gamit ang Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Pag-iingat",
+ "token.safetyLevel.medium.message": "Ang token na ito ay hindi tine-trade sa mga nangungunang naka-centralize na palitan sa U.S. Magsagawa palagi ng sarili mong pananaliksik bago magpatuloy.",
"token.safetyLevel.medium.message.plural": "Ang mga token na ito ay hindi tine-trade sa mga nangungunang naka-centralize na palitan sa U.S. Magsagawa palagi ng sarili mong pananaliksik bago magpatuloy.",
+ "token.safetyLevel.strong.header": "Babala",
+ "token.safetyLevel.strong.message": "Ang token na ito ay hindi tine-trade sa mga nangungunang naka-centralize na palitan sa U.S o madalas na sina-swap sa Uniswap. Magsagawa palagi ng sarili mong pananaliksik bago magpatuloy.",
"token.selector.search.error": "Hindi ma-load ang mga resulta ng paghahanap",
"token.stats.fullyDilutedValuation": "Fully Diluted Valuation",
"token.stats.marketCap": "Market Cap",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Iba pang token sa {{network}}",
"tokens.selector.section.recent": "Mga kamakailang paghahanap",
"tokens.selector.section.search": "Mga resulta ng paghahanap",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Ang iyong mga token",
"tokens.table.search.placeholder.pools": "Maghanap ng mga pool",
"tokens.table.search.placeholder.tokens": "Maghanap ng mga token",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Mababang balanse ng token sa network",
"transaction.watcher.error.cancel": "Hindi makansela ang transaksyon",
"transaction.watcher.error.status": "Nagka-error habang sinusuri ang status ng transaksyon",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": "Pinagsasama-sama ng ang mga source ng liquidity para sa mas magagandang presyo at libreng pag-swap ng gas.",
"uniswapx.description": "Pinagsasama-sama ng UniswapX ang mga source ng liquidity para sa mas magagandang presyo at libreng pag-swap ng gas.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "May kasamang UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Matuto pa tungkol sa pag-swap sa UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/fr-FR.json b/packages/uniswap/src/i18n/locales/translations/fr-FR.json
index ee492b133ab..1b78424cbdb 100644
--- a/packages/uniswap/src/i18n/locales/translations/fr-FR.json
+++ b/packages/uniswap/src/i18n/locales/translations/fr-FR.json
@@ -176,6 +176,7 @@
"common.allTime": "Toujours",
"common.amount.label": "Montant",
"common.amountDeposited.label": "{{amount}} déposé(s)",
+ "common.amountInput.placeholder": "Saisir un montant",
"common.and": "et",
"common.app": "App",
"common.approval.cancelled": "Approbation annulée",
@@ -312,7 +313,6 @@
"common.currency": "Devise",
"common.currentPrice": "Prix actuel",
"common.currentPrice.label": "Prix actuel :",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Personnalisé",
"common.customRange": "Plage personnalisée",
"common.dataOutdated": "Les données sont peut-être obsolètes.",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "Frais en {{symbol}} perçus :",
"common.feesEarnedPerBase": "{{symbolA}} par {{symbolB}}",
"common.fetchingRoute": "Récupération du parcours",
+ "common.flag": "Drapeau",
"common.floor": "Plancher",
"common.floorPrice": "Prix plancher",
"common.for": "Pour",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Approuver dans le wallet",
"common.wallet.label": "Wallet",
"common.walletForSwapping": "Un wallet conçu pour l'échange. Disponible sur iOS et Android.",
- "common.warning": "Warning",
"common.webApp": "App Web",
"common.website": "Site Web",
"common.whyApprove": "Pourquoi dois-je approuver un token ?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Impossible de charger les tokens à acheter",
"fiatOnRamp.error.max": "{{amount}} max.",
"fiatOnRamp.error.min": "{{amount}} min.",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Ce service n'est pas disponible dans votre région",
"fiatOnRamp.error.unsupported": "Non pris en charge dans la région",
"fiatOnRamp.error.usd": "Seul l'achat en USD est disponible",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} pour {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Acheté auprès de {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Vous serez redirigé vers le portail du fournisseur pour voir les frais associés à votre transaction.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, et d'autres options",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} NFT LP",
"migrate.lpTokens": "{{symA}}/{{symB}} tokens LP",
"migrate.migrating": "Migration en cours",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Vous ne voyez pas l'une de vos positions sur v2 ? Importez-la.",
"migrate.noV2Liquidity": "Aucune liquidité trouvée sur V2.",
"migrate.positionNoFees": "Votre position ne générera pas de frais et ne sera pas utilisée dans des transactions tant que le prix du marché se situe hors de votre plage.",
"migrate.priceDifference": "Écart de prix : ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "Prix du {{tokenSymbol}} du {{protocolName}} :",
"migrate.v2Description": "Cet outil migrera en toute sécurité votre liquidité {{source}} vers V3. Ce processus est totalement trustless grâce au <0>contrat de migration Uniswap0> ↗",
"migrate.v2Instruction": "Pour chaque pool affiché ci-dessous, cliquez sur Migrer pour supprimer votre liquidité d'Uniswap V2 et les déposer dans Uniswap V3.",
+ "migrate.v2Subtitle": "Migrez vos tokens de liquidité d'Uniswap V2 vers Uniswap V3.",
"migrate.v2Title": "Migrer la liquidité V2",
"migrate.v3Price": "Prix du {{sym}} V3 :",
"mint.v3.input.invalidPrice.error": "Le prix saisi n'est pas valide",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Nommer votre wallet",
"onboarding.notification.permission.message": "Pour recevoir des notifications, activez les notifications pour Uniswap Wallet dans les paramètres de votre appareil.",
"onboarding.notification.permission.title": "Autorisation de notification",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Soyez averti lorsque vos transferts, échanges et approbations sont terminés.",
+ "onboarding.notification.title": "Activer les notifications push",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Connectez un wallet pour voir votre liquidité.",
"pool.liquidity.data.error.message": "There was an error fetching data required for your transaction.",
"pool.liquidity.earn.fee": "Les fournisseurs de liquidités perçoivent des frais de 0,3 % sur toutes les transactions, proportionnels à leur part du pool. Les frais sont ajoutés au pool, s'accumulent en temps réel et peuvent être obtenus en retirant votre liquidité.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Pool prices out of sync",
+ "pool.liquidity.outOfSync.message": "Prices in this pool are out of sync with the current market. Adding liquidity may result in a loss of funds.",
"pool.liquidity.ownershipWarning.message": "Vous n'êtes pas le propriétaire de cette position LP. Vous ne pourrez pas retirer la liquidité de cette position, sauf si vous possédiez l'adresse suivante : {{ownerAddress}}",
"pool.liquidity.rewards": "Récompenses pour les fournisseurs de liquidité",
"pool.liquidity.taxWarning": "Taxes sur les tokens",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Le prix de ce pool se situe dans la plage que vous avez sélectionnée. Votre position gagne actuellement des frais.",
"pool.rates": "Taux",
"pool.ratioTokenToPrice": "Le ratio de tokens que vous ajoutez définira le prix de ce pool.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Supprimer la liquidité",
"pool.rewardsPool.label": "Tokens du pool dans le pool de récompenses :",
"pool.selectedRange": "Plage sélectionnée",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Les hooks sont une fonctionnalité avancée qui permet aux pools d'interagir avec des contrats intelligents, débloquant ainsi diverses capacités. Soyez prudent lorsque vous ajoutez des hooks, car certains peuvent être malveillants ou avoir des effets imprévus.",
"position.addingHook": "Ajout d'un hook",
"position.addingHook.disclaimer": "Ajouter des hooks peut avoir des conséquences imprévues. Faites vos recherches et procédez à vos risques et périls.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Saisir une adresse de hook valide",
"position.addingHook.viewProperties": "Voir les propriétés",
"position.appearHere": "Votre position apparaîtra ici.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "{{currencySymbol}} déposé",
"position.hook.disclaimer": "Je comprends les risques.",
"position.hook.liquidityWarning": "Ce drapeau peut empêcher le pool de bloquer l'ajout de nouvelle liquidité. Votre transaction peut échouer.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Ce drapeau peut entraîner le blocage de vos fonds ou vous empêcher de collecter des frais.",
"position.hook.swapWarning": "Ce drapeau peut permettre aux utilisateurs sophistiqués de tirer parti plus facilement de la liquidité Just-In-Time, ce qui entraîne des frais inférieurs gagnés.",
"position.hook.warningHeader": "Hook à risque élevé détecté",
"position.hook.warningInfo": "Nous avons identifié des risques potentiels avec ce hook. Veuillez examiner les drapeaux et vérifier qu'il s'agit du hook que vous souhaitez utiliser avant de continuer.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Approuver et échanger",
"swap.approveInWallet": "Approuver dans votre wallet",
"swap.balance.amount": "Solde : {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Le parcours au meilleur prix coûte environ {{gasPrice}} en gaz. ",
+ "swap.bestRoute.cost.v4": "Le parcours optimal coûte environ {{gasPrice}} en gaz. ",
"swap.bridging.estimatedTime": "Durée estimée",
"swap.bridging.title": "Échange entre réseaux en cours",
"swap.bridging.warning.description": "Vous effectuez un échange depuis {{fromNetwork}} vers {{toNetwork}}. Cette opération déplacera vos tokens d'un réseau à un autre.",
@@ -1868,16 +1866,15 @@
"swap.review": "Vérifier l'échange",
"swap.review.summary": "Vous échangez",
"swap.reviewLimit": "Vérifier la limite",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.",
"swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).",
"swap.settings.deadline.warning": "High deadline",
"swap.settings.protection.description": "En activant la protection des échanges, vous contribuez à protéger vos transactions Ethereum contre les attaques sandwich, et les risques d'échec seront réduits.",
"swap.settings.protection.subtitle.supported": "Réseau {{chainName}}",
"swap.settings.protection.subtitle.unavailable": "Indisponible sur {{chainName}}",
"swap.settings.protection.title": "Protection des échanges",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Le client Uniswap sélectionne la transaction la moins chère en fonction du prix et des frais de réseau.",
+ "swap.settings.routingPreference.option.default.description.v4": "Le client Uniswap sélectionne la meilleure transaction en fonction du prix et des frais de réseau.",
"swap.settings.routingPreference.option.v2.title": "Pools v2",
"swap.settings.routingPreference.option.v3.title": "Pools v3",
"swap.settings.routingPreference.option.v4.title": "Pools v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Menez toujours vos propres recherches",
"token.safety.warning.blocked.description.default_one": "Vous ne pouvez pas négocier ce token en utilisant l'app Uniswap.",
"token.safety.warning.blocked.description.default_other": "Vous ne pouvez pas négocier ces tokens en utilisant l'app Uniswap.",
+ "token.safety.warning.blocked.description.named": "Vous ne pouvez pas négocier le token {{tokenSymbol}} en utilisant l'app Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Ne plus afficher cet avertissement",
"token.safety.warning.doYourOwnResearch": "Menez toujours vos propres recherches avant de procéder.",
"token.safety.warning.feeDescription": "Facture des frais de lorsque {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} n’est peut-être pas le token que vous souhaitez échanger.",
"token.safety.warning.malicious.title": "Token malveillant détecté",
"token.safety.warning.mayResultInLoss": "L’échange de ce token peut entraîner la perte de vos fonds.",
+ "token.safety.warning.medium.heading.default_one": "Ce token n'est pas négocié sur les principaux échanges centralisés américains.",
+ "token.safety.warning.medium.heading.default_other": "Ces tokens ne sont pas négociés sur les principaux échanges centralisés américains.",
+ "token.safety.warning.medium.heading.default_one_also": "Ce token n'est pas non plus négocié sur les principaux échanges centralisés américains.",
+ "token.safety.warning.medium.heading.default_other_also": "Ces tokens ne sont pas non plus négociés sur les principaux échanges centralisés américains.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} n'est pas négocié sur les principaux échanges centralisés américains.",
"token.safety.warning.notListedOnExchanges": "Non inscrit sur les principaux échanges des États-Unis",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} a été signalé comme invendable.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} a été signalé comme un spam par Blockaid.",
"token.safety.warning.spam.title": "Token potentiellement indésirable détecté",
"token.safety.warning.spamsUsers": "Spamme les utilisateurs",
+ "token.safety.warning.strong.heading.default_one": "Ce token n'est pas négocié sur les principaux échanges centralisés américains ni fréquemment échangé sur Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Ces tokens ne sont pas négociés sur les principaux échanges centralisés américains ni fréquemment échangés sur Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} n'est pas négocié sur les principaux échanges centralisés américains ni fréquemment échangé sur Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} facture des frais de {{buyFeePercent}} à l’achat et de {{sellFeePercent}} à la vente.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} facture des frais de {{feePercent}} à l’achat.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} facture des frais de {{feePercent}} à la vente.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} charges a fee when bought or sold.",
+ "token.safetyLevel.blocked.header": "Indisponible",
"token.safetyLevel.blocked.message": "Vous ne pouvez pas négocier ce token à l'aide d'Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Attention",
+ "token.safetyLevel.medium.message": "Ce token n'est pas négocié sur les principaux échanges centralisés américains. Menez toujours vos propres recherches avant de procéder.",
"token.safetyLevel.medium.message.plural": "Ces tokens ne sont pas négociés sur les principaux échanges centralisés américains. Menez toujours vos propres recherches avant de procéder.",
+ "token.safetyLevel.strong.header": "Avertissement",
+ "token.safetyLevel.strong.message": "Ce token n'est pas négocié sur les principaux échanges centralisés américains ni fréquemment échangé sur Uniswap. Menez toujours vos propres recherches avant de procéder.",
"token.selector.search.error": "Impossible de charger les résultats de la recherche",
"token.stats.fullyDilutedValuation": "Valorisation entièrement diluée",
"token.stats.marketCap": "Capitalisation boursière",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Autres tokens sur {{network}}",
"tokens.selector.section.recent": "Recherches récentes",
"tokens.selector.section.search": "Résultats de recherche",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Vos tokens",
"tokens.table.search.placeholder.pools": "Rechercher des pools",
"tokens.table.search.placeholder.tokens": "Rechercher des tokens",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Low network token balance",
"transaction.watcher.error.cancel": "Impossible d'annuler la transaction",
"transaction.watcher.error.status": "Erreur lors de la vérification du statut de la transaction",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " regroupe les sources de liquidité pour obtenir de meilleurs prix et effectuer des échanges sans gaz.",
"uniswapx.description": "UniswapX regroupe les sources de liquidité pour obtenir de meilleurs prix et effectuer des échanges sans gaz.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Comprend UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "En savoir plus sur l'échange avec UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/he-IL.json b/packages/uniswap/src/i18n/locales/translations/he-IL.json
index a3790c6e21c..6df1e1eb2a7 100644
--- a/packages/uniswap/src/i18n/locales/translations/he-IL.json
+++ b/packages/uniswap/src/i18n/locales/translations/he-IL.json
@@ -176,6 +176,7 @@
"common.allTime": "כל הזמן",
"common.amount.label": "כמות",
"common.amountDeposited.label": "{{amount}} הופקד",
+ "common.amountInput.placeholder": "כמות קלט",
"common.and": "ו",
"common.app": "אפליקציה",
"common.approval.cancelled": "האישור בוטל",
@@ -312,7 +313,6 @@
"common.currency": "מַטְבֵּעַ",
"common.currentPrice": "מחיר נוכחי",
"common.currentPrice.label": "מחיר נוכחי:",
- "common.currentPrice.unavailable": "המחיר הנוכחי אינו זמין",
"common.custom": "המותאם אישית",
"common.customRange": "טווח מותאם אישית",
"common.dataOutdated": "הנתונים עשויים להיות מיושנים",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} עמלות שהושגו:",
"common.feesEarnedPerBase": "{{symbolA}} לכל {{symbolB}}",
"common.fetchingRoute": "מסלול אחזור",
+ "common.flag": "דֶגֶל",
"common.floor": "קוֹמָה",
"common.floorPrice": "מחיר רצפה",
"common.for": "ל",
@@ -681,7 +682,6 @@
"common.wallet.approve": "אישור בארנק",
"common.wallet.label": "ארנק",
"common.walletForSwapping": "הארנק בנוי להחלפה. זמין ב-iOS וב-Android.",
- "common.warning": "אַזהָרָה",
"common.webApp": "אפליקציית אינטרנט",
"common.website": "אתר אינטרנט",
"common.whyApprove": "למה אני צריך לאשר אסימון?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "לא ניתן היה לטעון אסימונים לקנייה",
"fiatOnRamp.error.max": "מקסימום {{amount}}",
"fiatOnRamp.error.min": "מינימום {{amount}}",
- "fiatOnRamp.error.noQuotes": "לא נמצאו ציטוטים.",
"fiatOnRamp.error.unavailable": "שירות זה אינו זמין באזור שלך",
"fiatOnRamp.error.unsupported": "לא נתמך באזור",
"fiatOnRamp.error.usd": "זמין לרכישה רק בדולר ארה\"ב",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} עבור {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "לא נמצאו ציטוטים",
"fiatOnRamp.purchasedOn": "נרכש ב- {{serviceProvider}}",
"fiatOnRamp.quote.advice": "תמשיך לפורטל של הספק כדי לראות את העמלות הקשורות לעסקה שלך.",
"fiatOnRamp.quote.type.list": "{{optionsList}}ואפשרויות אחרות",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} מחיר:",
"migrate.v2Description": "כלי זה יעביר בבטחה את הנזילות שלך {{source}} ל-V3. התהליך חסר אמון לחלוטין הודות לחוזה ההעברה של <0>Uniswap0> ↗",
"migrate.v2Instruction": "עבור כל מאגר המוצג להלן, לחץ על העבר כדי להסיר את הנזילות שלך מ-Uniswap V2 ולהפקיד אותה ב-Uniswap V3.",
+ "migrate.v2Subtitle": "העבר את אסימוני הנזילות שלך מ-Uniswap V2 ל-Uniswap V3.",
"migrate.v2Title": "העבר נזילות V2",
"migrate.v3Price": "V3 {{sym}} מחיר:",
"mint.v3.input.invalidPrice.error": "קלט מחיר לא חוקי",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "תן שם לארנק שלך",
"onboarding.notification.permission.message": "כדי לקבל הודעות, הפעל הודעות עבור ארנק Uniswap בהגדרות המכשיר שלך.",
"onboarding.notification.permission.title": "הרשאת הודעות",
- "onboarding.notification.subtitle": "הישאר מעודכן לגבי סטטוסים של עסקאות ושינויי מחירים גדולים עבור אסימונים מועדפים",
- "onboarding.notification.title": "הפעל התראות",
+ "onboarding.notification.subtitle": "קבל הודעה כאשר ההעברות, ההחלפות והאישורים שלך יסתיימו.",
+ "onboarding.notification.title": "הפעל הודעות דחיפה",
"onboarding.passkey.account.protection": "החשבון שלך מוגן על ידי אחסון סיסמאות מאובטח משלך.",
"onboarding.passkey.biometric.scan": "טלפון, טאבלט או דפדפן - פשוט סרוק את הביומטרי שלך ותתחבר.",
"onboarding.passkey.create": "צור את המפתח שלך",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "התחבר לארנק כדי לראות את הנזילות שלך.",
"pool.liquidity.data.error.message": "אירעה שגיאה באחזור הנתונים הנדרשים עבור העסקה שלך.",
"pool.liquidity.earn.fee": "ספקי נזילות מרוויחים עמלה של 0.3% על כל העסקאות ביחס לחלקם במאגר. עמלות מתווספות למאגר, מצטברות בזמן אמת וניתן לתבוע אותן על ידי משיכת הנזילות שלך.",
- "pool.liquidity.outOfSync": "אי התאמה של מחירי הבריכה והשוק",
- "pool.liquidity.outOfSync.message": "המחירים במאגר זה שונים ממחירי השוק של האסימונים הנבחרים. התאם את טווח המחירים שלך בהתאם או המתן עד שהבריכה תתאזן מחדש כדי למנוע הפסדים.",
+ "pool.liquidity.outOfSync": "מחירי הבריכה לא מסונכרנים",
+ "pool.liquidity.outOfSync.message": "המחירים במאגר זה אינם מסונכרנים עם השוק הנוכחי. הוספת נזילות עלולה לגרום לאובדן כספים.",
"pool.liquidity.ownershipWarning.message": "אתה לא הבעלים של עמדת LP זו. לא תוכל למשוך את הנזילות מעמדה זו אלא אם כן בבעלותך הכתובת הבאה: {{ownerAddress}}",
"pool.liquidity.rewards": "תגמולים לספק נזילות",
"pool.liquidity.taxWarning": "מסים סמליים",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "המחיר של בריכה זו הוא בטווח שבחרת. העמדה שלך מרוויחה כעת עמלות.",
"pool.rates": "תעריפים",
"pool.ratioTokenToPrice": "יחס האסימונים שתוסיף יקבע את המחיר של הבריכה הזו.",
- "pool.refresh.prices": "רענון מחירים",
"pool.removeLiquidity": "להסיר נזילות",
"pool.rewardsPool.label": "אסימוני בריכה במאגר התגמולים:",
"pool.selectedRange": "טווח נבחר",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "הוקס הם תכונה מתקדמת המאפשרת לבריכות לקיים אינטראקציה עם חוזים חכמים, ולפתוח יכולות שונות. היזהר בעת הוספת ווים, מכיוון שחלקם עלולים להיות זדוניים או לגרום לתוצאות לא רצויות.",
"position.addingHook": "הוספת וו",
"position.addingHook.disclaimer": "להוספת ווים עלולה להיות השלכות לא מכוונות. עשה את המחקר שלך והמשיך באחריותך בלבד.",
- "position.addingHook.hideProperties": "הסתר מאפיינים",
"position.addingHook.invalidAddress": "הזן כתובת הוק חוקית",
"position.addingHook.viewProperties": "הצג נכסים",
"position.appearHere": "עמדתך תופיע כאן.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "הופקד {{currencySymbol}}",
"position.hook.disclaimer": "אני מבין את הסיכונים.",
"position.hook.liquidityWarning": "דגל זה יכול לגרום למאגר לחסום הוספת נזילות חדשה. העסקה שלך עשויה לחזור.",
- "position.hook.removeWarning": "עלול לגרום לנעילה של הכספים שלך או לחסום אותך מגביית עמלות.",
+ "position.hook.removeWarning": "דגל זה יכול לגרום לכספים שלך להינעל או לחסום אותך מגביית עמלות.",
"position.hook.swapWarning": "דגל זה יכול לאפשר למשתמשים מתוחכמים למנף ביתר קלות את נזילות ה-Just-In-Time וכתוצאה מכך להרוויח עמלות נמוכות יותר.",
"position.hook.warningHeader": "זוהה קרס בסיכון גבוה",
"position.hook.warningInfo": "זיהינו סיכונים פוטנציאליים עם הקרס הזה. אנא עיין בדגלים וודא שזהו הוו שאתה רוצה להשתמש בו לפני שתמשיך.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "לאשר ולהחליף",
"swap.approveInWallet": "אשר בארנק שלך",
"swap.balance.amount": "יתרה: {{amount}}",
- "swap.bestRoute.cost": "המסלול היעיל ביותר מוערך בעלות של ~{{gasPrice}} בעלויות הרשת. ",
+ "swap.bestRoute.cost": "מסלול המחיר הטוב ביותר עולה ~{{gasPrice}} בדלק. ",
+ "swap.bestRoute.cost.v4": "עלויות מסלול אופטימלי ~{{gasPrice}} בדלק. ",
"swap.bridging.estimatedTime": "הערכה זְמַן",
"swap.bridging.title": "החלפה בין רשתות",
"swap.bridging.warning.description": "אתה מחליף מ- {{fromNetwork}} ל- {{toNetwork}}. זה ידוע גם בשם \"גישור\", אשר מעביר את האסימונים שלך מרשת אחת לאחרת.",
@@ -1868,16 +1866,15 @@
"swap.review": "סקירה החלפה",
"swap.review.summary": "אתה מחליף",
"swap.reviewLimit": "מגבלת ביקורת",
- "swap.route.optimizedGasCost": "מסלול זה מתייחס למסלולים מפוצלים, ריבוי דילוגים ועלויות רשת של כל שלב.",
+ "swap.route.optimizedGasCost": "מסלול זה מייעל את התפוקה הכוללת שלך על ידי התחשבות במסלולים מפוצלים, ריבוי דילוגים ועלויות הרשת של כל שלב.",
"swap.settings.deadline.tooltip": "העסקה שלך תחזור אם היא בהמתנה במשך יותר מתקופת זמן זו. (מקסימום: 3 ימים).",
"swap.settings.deadline.warning": "דדליין גבוה",
"swap.settings.protection.description": "עם הגנת החלפה מופעלת, עסקאות ה-Ethereum שלך יהיו מוגנות מפני התקפות סנדוויץ', עם סיכויים מופחתים לכישלון.",
"swap.settings.protection.subtitle.supported": "{{chainName}} רשת",
"swap.settings.protection.subtitle.unavailable": "לא זמין ב- {{chainName}}",
"swap.settings.protection.title": "הגנת החלפה",
- "swap.settings.routingPreference.option.default.description": "בחירה באפשרות זו מזהה את המסלול היעיל ביותר עבור ההחלפה שלך.",
- "swap.settings.routingPreference.option.default.description.preV4": "לקוח Uniswap בוחר את אפשרות הסחר הזולה ביותר תוך התחשבות במחיר ועלויות רשת.",
- "swap.settings.routingPreference.option.default.tooltip": "מסלול מזוהה בהתחשב ב-v2, v3 ומאגרי v4 מסוימים, תוך התחשבות בהשפעת המחיר המשוערת ועלויות הרשת.",
+ "swap.settings.routingPreference.option.default.description": "לקוח Uniswap בוחר את אפשרות הסחר הזולה ביותר תוך התחשבות במחיר ועלויות רשת.",
+ "swap.settings.routingPreference.option.default.description.v4": "לקוח Uniswap בוחר את אפשרות הסחר האופטימלית תוך התחשבות במחיר ועלויות הרשת.",
"swap.settings.routingPreference.option.v2.title": "v2 בריכות",
"swap.settings.routingPreference.option.v3.title": "v3 בריכות",
"swap.settings.routingPreference.option.v4.title": "v4 בריכות",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "תעשה תמיד את המחקר שלך",
"token.safety.warning.blocked.description.default_one": "אינך יכול לסחור באסימון זה באמצעות אפליקציית Uniswap.",
"token.safety.warning.blocked.description.default_other": "אתה לא יכול לסחור באסימונים האלה באמצעות אפליקציית Uniswap.",
+ "token.safety.warning.blocked.description.named": "אתה לא יכול לסחור {{tokenSymbol}} באמצעות אפליקציית Uniswap.",
"token.safety.warning.dontShowWarningAgain": "אל תראה לי את האזהרה הזו שוב",
"token.safety.warning.doYourOwnResearch": "בצע תמיד מחקר משלך לפני שתמשיך.",
"token.safety.warning.feeDescription": "גובה כאשר {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "ייתכן ש{{tokenSymbol}} אינו האסימון שאתה מחפש להחליף.",
"token.safety.warning.malicious.title": "זוהה אסימון זדוני",
"token.safety.warning.mayResultInLoss": "החלפתו עלולה לגרום לאובדן כספים.",
+ "token.safety.warning.medium.heading.default_one": "אסימון זה אינו נסחר בבורסות מובילות בארה\"ב.",
+ "token.safety.warning.medium.heading.default_other": "האסימונים הללו אינם נסחרים בבורסות מובילות בארה\"ב.",
+ "token.safety.warning.medium.heading.default_one_also": "האסימון הזה גם לא נסחר בבורסות מובילות בארה\"ב.",
+ "token.safety.warning.medium.heading.default_other_also": "האסימונים הללו גם אינם נסחרים בבורסות מרכזיות מובילות בארה\"ב.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} לא נסחר בבורסות מובילות בארה\"ב.",
"token.safety.warning.notListedOnExchanges": "לא רשום בבורסות המובילות בארה\"ב",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} סומן כבלתי ניתן למכירה.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} סומן כדואר זבל על ידי Blockaid.",
"token.safety.warning.spam.title": "זוהה אסימון ספאם",
"token.safety.warning.spamsUsers": "משתמשי ספאם",
+ "token.safety.warning.strong.heading.default_one": "אסימון זה אינו נסחר בבורסות מובילות בארה\"ב או מוחלף לעתים קרובות ב-Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "האסימונים הללו אינם נסחרים בבורסות מובילות בארה\"ב או מוחלפים לעתים קרובות ב-Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} אינו נסחר בבורסות מובילות בארה\"ב או מוחלף לעתים קרובות ב-Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} גובה עמלה של {{buyFeePercent}} בקנייה ו {{sellFeePercent}} בעת מכירה.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} גובה עמלה של {{feePercent}} בקנייה.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} גובה עמלה של {{feePercent}} בעת מכירה.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} גובה עמלה בעת קנייה או מכירה.",
+ "token.safetyLevel.blocked.header": "לא זמין",
"token.safetyLevel.blocked.message": "אינך יכול לסחור באסימון זה באמצעות ארנק Uniswap.",
+ "token.safetyLevel.medium.header": "זְהִירוּת",
+ "token.safetyLevel.medium.message": "אסימון זה אינו נסחר בבורסות מובילות בארה\"ב. עשה תמיד מחקר משלך לפני שתמשיך.",
"token.safetyLevel.medium.message.plural": "האסימונים הללו אינם נסחרים בבורסות מובילות בארה\"ב. בצע תמיד מחקר משלך לפני שתמשיך.",
+ "token.safetyLevel.strong.header": "אַזהָרָה",
+ "token.safetyLevel.strong.message": "אסימון זה אינו נסחר בבורסות מובילות בארה\"ב או מוחלף לעתים קרובות ב-Uniswap. בצע תמיד מחקר משלך לפני שתמשיך.",
"token.selector.search.error": "לא ניתן היה לטעון את תוצאות החיפוש",
"token.stats.fullyDilutedValuation": "הערכת שווי בדילול מלא",
"token.stats.marketCap": "שווי שוק",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "אסימונים אחרים ב- {{network}}",
"tokens.selector.section.recent": "חיפושים אחרונים",
"tokens.selector.section.search": "תוצאות חיפוש",
- "tokens.selector.section.trending": "אסימונים בנפח 24 שעות",
"tokens.selector.section.yours": "האסימונים שלך",
"tokens.table.search.placeholder.pools": "חפש בבריכות",
"tokens.table.search.placeholder.tokens": "חפש אסימונים",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "יתרת אסימון רשת נמוכה",
"transaction.watcher.error.cancel": "לא ניתן לבטל את העסקה",
"transaction.watcher.error.status": "שגיאה בעת בדיקת סטטוס העסקה",
- "unichain.promotion.cold.description": "החלפות מהירות יותר. עמלות נמוכות יותר. Unichain הוא הבית של DeFi.",
- "unichain.promotion.cold.title": "הכירו את יוניצ'יין",
- "unichain.promotion.modal.description": "החלפות מהירות יותר. עמלות נמוכות יותר. Unichain הוא הבית לנזילות צולבת שרשרת.",
- "unichain.promotion.modal.detail.costs": "עלויות נמוכות יותר עבור יצירת בריכות וניהול עמדות.",
- "unichain.promotion.modal.detail.fees": "חסוך 95% בעמלות בהשוואה לאתריום.",
- "unichain.promotion.modal.detail.instant": "להחליף באופן מיידי",
- "unichain.promotion.warm.description": "החלף את האסימונים האהובים עליך מהר יותר ועם עלויות דלק נמוכות יותר.",
- "unichain.promotion.warm.title": "התחל להחליף ב-Unichain",
"uniswapX.aggregatesLiquidity": " אוסף מקורות נזילות למחירים טובים יותר והחלפות ללא גז.",
"uniswapx.description": "UniswapX צוברת מקורות נזילות למחירים טובים יותר והחלפות ללא גז.",
- "uniswapx.included": "כולל UniswapX",
+ "uniswapx.included": "כולל UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "למידע נוסף על החלפה עם UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/hi-IN.json b/packages/uniswap/src/i18n/locales/translations/hi-IN.json
index 63fbc29292c..b7bc39946d5 100644
--- a/packages/uniswap/src/i18n/locales/translations/hi-IN.json
+++ b/packages/uniswap/src/i18n/locales/translations/hi-IN.json
@@ -176,6 +176,7 @@
"common.allTime": "पूरे समय",
"common.amount.label": "मात्रा",
"common.amountDeposited.label": "{{amount}} जमा",
+ "common.amountInput.placeholder": "इनपुट राशि",
"common.and": "और",
"common.app": "अनुप्रयोग",
"common.approval.cancelled": "स्वीकृति रद्द",
@@ -312,7 +313,6 @@
"common.currency": "मुद्रा",
"common.currentPrice": "मौजूदा कीमत",
"common.currentPrice.label": "मौजूदा कीमत:",
- "common.currentPrice.unavailable": "वर्तमान मूल्य उपलब्ध नहीं है",
"common.custom": "रिवाज़",
"common.customRange": "कस्टम रेंज",
"common.dataOutdated": "डेटा पुराना हो सकता है",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} अर्जित शुल्क:",
"common.feesEarnedPerBase": "{{symbolA}} प्रति {{symbolB}}",
"common.fetchingRoute": "मार्ग प्राप्त किया जा रहा है",
+ "common.flag": "झंडा",
"common.floor": "ज़मीन",
"common.floorPrice": "न्यूनतम मूल्य",
"common.for": "के लिए",
@@ -681,7 +682,6 @@
"common.wallet.approve": "वॉलेट में स्वीकृति दें",
"common.wallet.label": "बटुआ",
"common.walletForSwapping": "स्वैपिंग के लिए बनाया गया वॉलेट। iOS और Android पर उपलब्ध है।",
- "common.warning": "चेतावनी",
"common.webApp": "वेब अप्प",
"common.website": "वेबसाइट",
"common.whyApprove": "मुझे टोकन स्वीकृत क्यों करना होगा?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "खरीदने के लिए टोकन लोड नहीं किए जा सके",
"fiatOnRamp.error.max": "अधिकतम {{amount}}",
"fiatOnRamp.error.min": "न्यूनतम {{amount}}",
- "fiatOnRamp.error.noQuotes": "कोई उद्धरण नहीं मिला.",
"fiatOnRamp.error.unavailable": "यह सेवा आपके क्षेत्र में उपलब्ध नहीं है",
"fiatOnRamp.error.unsupported": "क्षेत्र में समर्थित नहीं है",
"fiatOnRamp.error.usd": "केवल USD में खरीदने के लिए उपलब्ध है",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} के लिए {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "कोई उद्धरण नहीं मिला",
"fiatOnRamp.purchasedOn": "{{serviceProvider}}पर खरीदा गया",
"fiatOnRamp.quote.advice": "आप अपने लेनदेन से जुड़े शुल्क देखने के लिए प्रदाता के पोर्टल पर जाएंगे।",
"fiatOnRamp.quote.type.list": "{{optionsList}}, और अन्य विकल्प",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} मूल्य:",
"migrate.v2Description": "यह टूल आपकी {{source}} लिक्विडिटी को सुरक्षित तरीके से V3 में माइग्रेट कर देगा। <0>यूनिस्वैप माइग्रेशन कॉन्ट्रैक्ट की बदौलत यह प्रक्रिया पूरी तरह से भरोसेमंद है0> ↗",
"migrate.v2Instruction": "नीचे दिखाए गए प्रत्येक पूल के लिए, Uniswap V2 से अपनी तरलता निकालने और उसे Uniswap V3 में जमा करने के लिए माइग्रेट पर क्लिक करें।",
+ "migrate.v2Subtitle": "अपने लिक्विडिटी टोकन को Uniswap V2 से Uniswap V3 में माइग्रेट करें।",
"migrate.v2Title": "V2 लिक्विडिटी माइग्रेट करें",
"migrate.v3Price": "V3 {{sym}} मूल्य:",
"mint.v3.input.invalidPrice.error": "अमान्य मूल्य इनपुट",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "अपने बटुए को एक नाम दें",
"onboarding.notification.permission.message": "सूचनाएं प्राप्त करने के लिए, अपने डिवाइस की सेटिंग में Uniswap वॉलेट के लिए सूचनाएं चालू करें।",
"onboarding.notification.permission.title": "अधिसूचना अनुमति",
- "onboarding.notification.subtitle": "पसंदीदा टोकन के लिए लेनदेन की स्थिति और प्रमुख मूल्य परिवर्तनों पर अपडेट रहें",
- "onboarding.notification.title": "सूचनाओं पर मुड़ें",
+ "onboarding.notification.subtitle": "जब आपका स्थानांतरण, स्वैप और अनुमोदन पूरा हो जाए तो सूचित करें।",
+ "onboarding.notification.title": "पुश सूचनाएँ चालू करें",
"onboarding.passkey.account.protection": "आपका खाता आपके स्वयं के सुरक्षित पासवर्ड भण्डारण द्वारा सुरक्षित है।",
"onboarding.passkey.biometric.scan": "फ़ोन, टैबलेट या ब्राउज़र - बस अपने बायोमेट्रिक्स को स्कैन करें और आप लॉग इन हो जाएंगे।",
"onboarding.passkey.create": "अपना पासकी बनाएं",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "अपनी तरलता देखने के लिए वॉलेट से कनेक्ट करें।",
"pool.liquidity.data.error.message": "आपके लेन-देन के लिए आवश्यक डेटा प्राप्त करते समय एक त्रुटि हुई.",
"pool.liquidity.earn.fee": "लिक्विडिटी प्रदाता पूल में अपने हिस्से के अनुपात में सभी ट्रेडों पर 0.3% शुल्क कमाते हैं। शुल्क पूल में जोड़े जाते हैं, वास्तविक समय में अर्जित होते हैं और अपनी लिक्विडिटी निकालकर उनका दावा किया जा सकता है।",
- "pool.liquidity.outOfSync": "पूल और बाजार मूल्य में बेमेल",
- "pool.liquidity.outOfSync.message": "इस पूल में कीमतें चयनित टोकन की बाज़ार कीमतों से अलग होती हैं। अपनी मूल्य सीमा को तदनुसार समायोजित करें या घाटे से बचने के लिए पूल के पुनर्संतुलन की प्रतीक्षा करें।",
+ "pool.liquidity.outOfSync": "पूल की कीमतें असंगत",
+ "pool.liquidity.outOfSync.message": "इस पूल में कीमतें मौजूदा बाजार के साथ तालमेल में नहीं हैं। तरलता बढ़ाने से फंड की हानि हो सकती है।",
"pool.liquidity.ownershipWarning.message": "आप इस LP पोजीशन के मालिक नहीं हैं। आप इस पोजीशन से लिक्विडिटी तब तक नहीं निकाल पाएंगे जब तक कि आपके पास निम्न पता न हो: {{ownerAddress}}",
"pool.liquidity.rewards": "तरलता प्रदाता पुरस्कार",
"pool.liquidity.taxWarning": "सांकेतिक कर",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "इस पूल की कीमत आपकी चुनी हुई सीमा के भीतर है। आपकी स्थिति वर्तमान में शुल्क अर्जित कर रही है।",
"pool.rates": "दरें",
"pool.ratioTokenToPrice": "आपके द्वारा जोड़े गए टोकन का अनुपात इस पूल का मूल्य निर्धारित करेगा।",
- "pool.refresh.prices": "ताज़ा कीमतें",
"pool.removeLiquidity": "तरलता हटाएँ",
"pool.rewardsPool.label": "पुरस्कार पूल में पूल टोकन:",
"pool.selectedRange": "चयनित श्रेणी",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "हुक एक उन्नत सुविधा है जो पूल को स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करने में सक्षम बनाती है, जिससे विभिन्न क्षमताएँ अनलॉक होती हैं। हुक जोड़ते समय सावधानी बरतें, क्योंकि कुछ दुर्भावनापूर्ण हो सकते हैं या अनपेक्षित परिणाम पैदा कर सकते हैं।",
"position.addingHook": "हुक जोड़ना",
"position.addingHook.disclaimer": "हुक जोड़ने से अनपेक्षित परिणाम हो सकते हैं। अपना शोध करें और अपने जोखिम पर आगे बढ़ें।",
- "position.addingHook.hideProperties": "गुण छुपाएं",
"position.addingHook.invalidAddress": "वैध हुक पता दर्ज करें",
"position.addingHook.viewProperties": "गुण देखें",
"position.appearHere": "आपकी स्थिति यहां दिखाई देगी.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "जमा {{currencySymbol}}",
"position.hook.disclaimer": "मैं जोखिम समझता हूं.",
"position.hook.liquidityWarning": "यह फ़्लैग पूल को नई लिक्विडिटी जोड़ने से रोक सकता है। आपका लेन-देन वापस हो सकता है।",
- "position.hook.removeWarning": "इससे आपकी धनराशि अवरुद्ध हो सकती है या आपको शुल्क जमा करने से रोका जा सकता है।",
+ "position.hook.removeWarning": "इस फ्लैग के कारण आपकी धनराशि अवरुद्ध हो सकती है या आपको शुल्क एकत्र करने से रोका जा सकता है।",
"position.hook.swapWarning": "यह फ्लैग परिष्कृत उपयोगकर्ताओं को अधिक आसानी से जस्ट-इन-टाइम तरलता का लाभ उठाने की अनुमति दे सकता है, जिसके परिणामस्वरूप कम शुल्क अर्जित होगा।",
"position.hook.warningHeader": "उच्च जोखिम वाले हुक का पता चला",
"position.hook.warningInfo": "हमने इस हुक के साथ संभावित जोखिमों की पहचान की है। कृपया आगे बढ़ने से पहले झंडों की समीक्षा करें और सत्यापित करें कि यह वही हुक है जिसका आप उपयोग करना चाहते हैं।",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "स्वीकृति दें और अदला-बदली करें",
"swap.approveInWallet": "अपने वॉलेट में स्वीकृति दें",
"swap.balance.amount": "शेष: {{amount}}",
- "swap.bestRoute.cost": "सबसे कुशल मार्ग की नेटवर्क लागत ~{{gasPrice}} होने का अनुमान है। ",
+ "swap.bestRoute.cost": "सर्वोत्तम मूल्य मार्ग की लागत ~{{gasPrice}} गैस में है। ",
+ "swap.bestRoute.cost.v4": "इष्टतम मार्ग की लागत ~{{gasPrice}} गैस है। ",
"swap.bridging.estimatedTime": "अनुमानित समय",
"swap.bridging.title": "नेटवर्कों में अदला-बदली",
"swap.bridging.warning.description": "आप {{fromNetwork}} से {{toNetwork}}पर स्वैप कर रहे हैं। इसे \"ब्रिजिंग\" के रूप में भी जाना जाता है, जो आपके टोकन को एक नेटवर्क से दूसरे नेटवर्क पर ले जाता है।",
@@ -1868,16 +1866,15 @@
"swap.review": "समीक्षा स्वैप",
"swap.review.summary": "आप अदला-बदली कर रहे हैं",
"swap.reviewLimit": "समीक्षा सीमा",
- "swap.route.optimizedGasCost": "यह मार्ग विभाजित मार्गों, एकाधिक हॉप्स, तथा प्रत्येक चरण की नेटवर्क लागतों पर विचार करता है।",
+ "swap.route.optimizedGasCost": "यह मार्ग विभाजित मार्गों, एकाधिक हॉप्स और प्रत्येक चरण की नेटवर्क लागतों पर विचार करके आपके कुल आउटपुट को अनुकूलित करता है।",
"swap.settings.deadline.tooltip": "यदि आपका लेन-देन इस समयावधि से अधिक समय तक लंबित रहता है तो उसे वापस कर दिया जाएगा। (अधिकतम: 3 दिन)।",
"swap.settings.deadline.warning": "उच्च समय सीमा",
"swap.settings.protection.description": "स्वैप सुरक्षा चालू होने पर, आपका एथेरियम लेनदेन सैंडविच हमलों से सुरक्षित रहेगा, और विफलता की संभावना कम हो जाएगी।",
"swap.settings.protection.subtitle.supported": "{{chainName}} नेटवर्क",
"swap.settings.protection.subtitle.unavailable": "{{chainName}}पर उपलब्ध नहीं है",
"swap.settings.protection.title": "स्वैप सुरक्षा",
- "swap.settings.routingPreference.option.default.description": "इस विकल्प का चयन करने से आपके स्वैप के लिए सबसे कुशल मार्ग की पहचान हो जाती है।",
- "swap.settings.routingPreference.option.default.description.preV4": "यूनिस्वैप ग्राहक मूल्य और नेटवर्क लागत को ध्यान में रखते हुए सबसे सस्ता व्यापार विकल्प चुनता है।",
- "swap.settings.routingPreference.option.default.tooltip": "अनुमानित मूल्य प्रभाव और नेटवर्क लागत को ध्यान में रखते हुए v2, v3 और कुछ v4 पूलों पर विचार करते हुए एक मार्ग की पहचान की जाती है।",
+ "swap.settings.routingPreference.option.default.description": "यूनिस्वैप ग्राहक मूल्य और नेटवर्क लागत को ध्यान में रखते हुए सबसे सस्ता व्यापार विकल्प चुनता है।",
+ "swap.settings.routingPreference.option.default.description.v4": "यूनिस्वैप क्लाइंट मूल्य और नेटवर्क लागत को ध्यान में रखते हुए इष्टतम व्यापार विकल्प का चयन करता है।",
"swap.settings.routingPreference.option.v2.title": "v2 पूल",
"swap.settings.routingPreference.option.v3.title": "v3 पूल",
"swap.settings.routingPreference.option.v4.title": "v4 पूल",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "हमेशा अपना शोध करें",
"token.safety.warning.blocked.description.default_one": "आप Uniswap ऐप का उपयोग करके इस टोकन का व्यापार नहीं कर सकते।",
"token.safety.warning.blocked.description.default_other": "आप Uniswap ऐप का उपयोग करके इन टोकन का व्यापार नहीं कर सकते।",
+ "token.safety.warning.blocked.description.named": "आप Uniswap ऐप का उपयोग करके {{tokenSymbol}} का व्यापार नहीं कर सकते।",
"token.safety.warning.dontShowWarningAgain": "मुझे यह चेतावनी दोबारा मत दिखाओ",
"token.safety.warning.doYourOwnResearch": "आगे बढ़ने से पहले हमेशा स्वयं शोध करें।",
"token.safety.warning.feeDescription": "{{action}}होने पर चार्ज करता है",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} हो सकता है कि वह टोकन न हो जिसे आप बदलना चाहते हैं।",
"token.safety.warning.malicious.title": "दुर्भावनापूर्ण टोकन का पता चला",
"token.safety.warning.mayResultInLoss": "इसे बदलने से धन की हानि हो सकती है।",
+ "token.safety.warning.medium.heading.default_one": "इस टोकन का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर नहीं किया जाता है।",
+ "token.safety.warning.medium.heading.default_other": "इन टोकनों का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर नहीं किया जाता है।",
+ "token.safety.warning.medium.heading.default_one_also": "इस टोकन का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर भी नहीं किया जाता है।",
+ "token.safety.warning.medium.heading.default_other_also": "इन टोकनों का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर भी नहीं किया जाता है।",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर नहीं होता है।",
"token.safety.warning.notListedOnExchanges": "प्रमुख अमेरिकी एक्सचेंजों में सूचीबद्ध नहीं",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} को विक्रययोग्य नहीं माना गया है।",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} को ब्लॉकएड द्वारा स्पैम के रूप में चिह्नित किया गया है।",
"token.safety.warning.spam.title": "स्पैम टोकन का पता चला",
"token.safety.warning.spamsUsers": "स्पैम उपयोगकर्ता",
+ "token.safety.warning.strong.heading.default_one": "इस टोकन का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर नहीं किया जाता है या इसे अक्सर यूनिस्वैप पर स्वैप नहीं किया जाता है।",
+ "token.safety.warning.strong.heading.default_other": "इन टोकनों का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर नहीं किया जाता है या इन्हें अक्सर यूनिस्वैप पर स्वैप नहीं किया जाता है।",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} का कारोबार अमेरिका के प्रमुख केंद्रीकृत एक्सचेंजों पर नहीं किया जाता है या अक्सर यूनिस्वैप पर स्वैप नहीं किया जाता है।",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} खरीदने पर {{buyFeePercent}} शुल्क लेता है और बेचने पर {{sellFeePercent}} शुल्क लेता है।",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} खरीदने पर {{feePercent}} शुल्क लगता है।",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} बेचे जाने पर {{feePercent}} शुल्क लेता है।",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} खरीदने या बेचने पर शुल्क लेता है।",
+ "token.safetyLevel.blocked.header": "उपलब्ध नहीं है",
"token.safetyLevel.blocked.message": "आप Uniswap वॉलेट का उपयोग करके इस टोकन का व्यापार नहीं कर सकते।",
+ "token.safetyLevel.medium.header": "सावधानी",
+ "token.safetyLevel.medium.message": "यह टोकन प्रमुख अमेरिकी केंद्रीकृत एक्सचेंजों पर कारोबार नहीं किया जाता है। आगे बढ़ने से पहले हमेशा अपना खुद का शोध करें।",
"token.safetyLevel.medium.message.plural": "ये टोकन प्रमुख अमेरिकी केंद्रीकृत एक्सचेंजों पर कारोबार नहीं किए जाते हैं। आगे बढ़ने से पहले हमेशा अपना खुद का शोध करें।",
+ "token.safetyLevel.strong.header": "चेतावनी",
+ "token.safetyLevel.strong.message": "यह टोकन प्रमुख अमेरिकी केंद्रीकृत एक्सचेंजों पर कारोबार नहीं किया जाता है या अक्सर यूनिस्वैप पर स्वैप नहीं किया जाता है। आगे बढ़ने से पहले हमेशा अपना खुद का शोध करें।",
"token.selector.search.error": "खोज परिणाम लोड नहीं किये जा सके",
"token.stats.fullyDilutedValuation": "पूरी तरह से पतला मूल्यांकन",
"token.stats.marketCap": "बाज़ार आकार",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}}पर अन्य टोकन",
"tokens.selector.section.recent": "हाल की खोजें",
"tokens.selector.section.search": "खोज के परिणाम",
- "tokens.selector.section.trending": "24 घंटे की मात्रा के अनुसार टोकन",
"tokens.selector.section.yours": "आपके टोकन",
"tokens.table.search.placeholder.pools": "पूल खोजें",
"tokens.table.search.placeholder.tokens": "टोकन खोजें",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "नेटवर्क टोकन बैलेंस कम",
"transaction.watcher.error.cancel": "लेनदेन रद्द करने में असमर्थ",
"transaction.watcher.error.status": "लेन-देन की स्थिति जाँचते समय त्रुटि",
- "unichain.promotion.cold.description": "तेज़ स्वैप। कम शुल्क। यूनिचेन DeFi का घर है।",
- "unichain.promotion.cold.title": "यूनिचेन का परिचय",
- "unichain.promotion.modal.description": "तेज़ स्वैप। कम शुल्क। यूनिचेन क्रॉस-चेन लिक्विडिटी का घर है।",
- "unichain.promotion.modal.detail.costs": "पूल बनाने और पदों के प्रबंधन के लिए कम लागत।",
- "unichain.promotion.modal.detail.fees": "इथेरियम की तुलना में फीस पर 95% की बचत करें।",
- "unichain.promotion.modal.detail.instant": "तुरन्त स्वैप करें",
- "unichain.promotion.warm.description": "अपने पसंदीदा टोकन को तेजी से और कम गैस लागत पर स्वैप करें।",
- "unichain.promotion.warm.title": "यूनिचेन पर स्वैपिंग शुरू करें",
"uniswapX.aggregatesLiquidity": " बेहतर कीमतों और गैस मुक्त स्वैप के लिए तरलता स्रोतों को एकत्रित करता है।",
"uniswapx.description": "यूनिस्वैपएक्स बेहतर कीमतों और गैस मुक्त स्वैप के लिए तरलता स्रोतों को एकत्रित करता है।",
- "uniswapx.included": "इसमें शामिल है UniswapX",
+ "uniswapx.included": "शामिल UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "यूनिस्वैपएक्स",
"uniswapX.learnMore": "UniswapX के साथ स्वैपिंग के बारे में अधिक जानें",
diff --git a/packages/uniswap/src/i18n/locales/translations/hu-HU.json b/packages/uniswap/src/i18n/locales/translations/hu-HU.json
index 0964590b18a..35f3a9e0167 100644
--- a/packages/uniswap/src/i18n/locales/translations/hu-HU.json
+++ b/packages/uniswap/src/i18n/locales/translations/hu-HU.json
@@ -176,6 +176,7 @@
"common.allTime": "Mindig",
"common.amount.label": "Összeg",
"common.amountDeposited.label": "{{amount}} Letétbe helyezve",
+ "common.amountInput.placeholder": "Beviteli mennyiség",
"common.and": "és",
"common.app": "App",
"common.approval.cancelled": "A jóváhagyás visszavonva",
@@ -312,7 +313,6 @@
"common.currency": "Valuta",
"common.currentPrice": "Jelenlegi ár",
"common.currentPrice.label": "Jelenlegi ár:",
- "common.currentPrice.unavailable": "Jelenlegi ár nem elérhető",
"common.custom": "Egyedi",
"common.customRange": "Egyedi tartomány",
"common.dataOutdated": "Az adatok elavultak lehetnek",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Beszerzett díjak:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Útvonal lekérése",
+ "common.flag": "Zászló",
"common.floor": "Padló",
"common.floorPrice": "Padló ár",
"common.for": "Mert",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Jóváhagyás a pénztárcában",
"common.wallet.label": "Pénztárca",
"common.walletForSwapping": "A pénztárca cserére készült. Elérhető iOS és Android rendszeren.",
- "common.warning": "Figyelem",
"common.webApp": "Webes alkalmazás",
"common.website": "Weboldal",
"common.whyApprove": "Miért kell jóváhagynom egy tokent?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Nem sikerült betölteni a vásárolni kívánt tokeneket",
"fiatOnRamp.error.max": "Maximum {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "Nem található idézet.",
"fiatOnRamp.error.unavailable": "Ez a szolgáltatás nem érhető el az Ön régiójában",
"fiatOnRamp.error.unsupported": "A régióban nem támogatott",
"fiatOnRamp.error.usd": "Csak USD-ben vásárolható meg",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Nem található idézet",
"fiatOnRamp.purchasedOn": "Vásárlás: {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Továbbjut a szolgáltató portáljára, ahol megtekintheti a tranzakciójához kapcsolódó díjakat.",
"fiatOnRamp.quote.type.list": "{{optionsList}}és egyéb lehetőségek",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Ár:",
"migrate.v2Description": "Ez az eszköz biztonságosan migrálja a {{source}} likviditását a V3-ra. A folyamat teljesen megbízhatatlan az <0>Uniswap migrációs szerződésnek köszönhetően0> ↗",
"migrate.v2Instruction": "Minden alább látható készletnél kattintson az áttelepítés gombra, hogy eltávolítsa likviditását az Uniswap V2-ből, és helyezze el a Uniswap V3-ba.",
+ "migrate.v2Subtitle": "Migrálja át likviditási tokenjeit Uniswap V2-ről Uniswap V3-ra.",
"migrate.v2Title": "V2 likviditás migrálása",
"migrate.v3Price": "V3 {{sym}} Ár:",
"mint.v3.input.invalidPrice.error": "Érvénytelen árbevitel",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Adjon nevet a pénztárcájának",
"onboarding.notification.permission.message": "Értesítések fogadásához kapcsolja be az Uniswap Wallet értesítéseit az eszköz beállításaiban.",
"onboarding.notification.permission.title": "Értesítési engedély",
- "onboarding.notification.subtitle": "Legyen naprakész a tranzakciók állapotáról és a kedvenc tokenek főbb árváltozásairól",
- "onboarding.notification.title": "Kapcsolja be az értesítéseket",
+ "onboarding.notification.subtitle": "Értesítést kaphat, ha az átutalások, csereügyletek és jóváhagyások befejeződnek.",
+ "onboarding.notification.title": "Kapcsolja be a push értesítéseket",
"onboarding.passkey.account.protection": "Fiókját saját, biztonságos jelszótárolója védi.",
"onboarding.passkey.biometric.scan": "Telefon, táblagép vagy böngésző – csak olvassa be biometrikus adatait, és máris bejelentkezik.",
"onboarding.passkey.create": "Hozd létre a jelszót",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "A likviditás megtekintéséhez csatlakozzon egy pénztárcához.",
"pool.liquidity.data.error.message": "Hiba történt a tranzakcióhoz szükséges adatok lekérésekor.",
"pool.liquidity.earn.fee": "A likviditási szolgáltatók minden ügylet után 0,3%-os díjat kapnak a poolból való részesedésükkel arányosan. A díjak hozzáadódnak a poolhoz, valós időben halmozódnak fel, és a likviditás visszavonásával igényelhetők.",
- "pool.liquidity.outOfSync": "A medence és a piaci ár nem egyezik",
- "pool.liquidity.outOfSync.message": "Ebben a készletben az árak különböznek a kiválasztott tokenek piaci árától. Ennek megfelelően állítsa be az ártartományt, vagy várja meg, amíg a medence egyensúlyba kerül a veszteségek elkerülése érdekében.",
+ "pool.liquidity.outOfSync": "A medence árak nincsenek szinkronban",
+ "pool.liquidity.outOfSync.message": "Az árak ebben a készletben nincsenek összhangban a jelenlegi piaccal. A likviditás növelése forrásvesztéssel járhat.",
"pool.liquidity.ownershipWarning.message": "Nem Ön ennek az LP pozíciónak a tulajdonosa. Ebből a pozícióból nem vonhatja ki a likviditást, hacsak nem rendelkezik a következő címmel: {{ownerAddress}}",
"pool.liquidity.rewards": "Likviditási szolgáltató jutalmak",
"pool.liquidity.taxWarning": "Jelképes adók",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "A medence ára az Ön által kiválasztott tartományon belül van. Az Ön pozíciója jelenleg díjakat keres.",
"pool.rates": "Árak",
"pool.ratioTokenToPrice": "A hozzáadott tokenek aránya határozza meg ennek a készletnek az árát.",
- "pool.refresh.prices": "Frissítse az árakat",
"pool.removeLiquidity": "Távolítsa el a likviditást",
"pool.rewardsPool.label": "Pool tokenek a jutalom poolban:",
"pool.selectedRange": "Kiválasztott tartomány",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "A horgok egy olyan fejlett funkció, amely lehetővé teszi a poolok számára, hogy kölcsönhatásba léphessenek az intelligens szerződésekkel, felszabadítva ezzel a különféle képességeket. Legyen körültekintő a horgok felszerelésekor, mivel egyesek rosszindulatúak lehetnek, vagy nem kívánt következményekkel járhatnak.",
"position.addingHook": "Horog hozzáadása",
"position.addingHook.disclaimer": "A horgok hozzáadása nem kívánt következményekkel járhat. Végezze el a kutatást, és folytassa a saját felelősségére.",
- "position.addingHook.hideProperties": "Tulajdonságok elrejtése",
"position.addingHook.invalidAddress": "Adjon meg egy érvényes horogcímet",
"position.addingHook.viewProperties": "Tulajdonságok megtekintése",
"position.appearHere": "Az Ön pozíciója itt fog megjelenni.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Letétbe helyezve {{currencySymbol}}",
"position.hook.disclaimer": "Megértem a kockázatokat.",
"position.hook.liquidityWarning": "Ez a jelző azt okozhatja, hogy a pool blokkolja az új likviditás hozzáadását. A tranzakció visszaállhat.",
- "position.hook.removeWarning": "Előfordulhat, hogy pénzeszközeit zároljuk, vagy megakadályozhatja a díjak beszedését.",
+ "position.hook.removeWarning": "Ez a jelzés azt eredményezheti, hogy pénzeszközeit zároljuk, vagy megakadályozhatja a díjak beszedését.",
"position.hook.swapWarning": "Ez a jelző lehetővé teszi a kifinomult felhasználók számára, hogy könnyebben kihasználják a Just-In-Time likviditást, ami alacsonyabb díjakat eredményez.",
"position.hook.warningHeader": "Magas kockázatú horog észlelve",
"position.hook.warningInfo": "Azonosítottuk a lehetséges kockázatokat ezzel a horoggal. Kérjük, tekintse át a zászlókat, és ellenőrizze, hogy ezt a horgot szeretné használni, mielőtt továbblépne.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Jóváhagyás és csere",
"swap.approveInWallet": "Jóváhagyja a pénztárcájában",
"swap.balance.amount": "Egyenleg: {{amount}}",
- "swap.bestRoute.cost": "A leghatékonyabb útvonal a becslések szerint ~{{gasPrice}} hálózati költségekbe kerül. ",
+ "swap.bestRoute.cost": "A legjobb árú útvonal ~{{gasPrice}} benzinben. ",
+ "swap.bestRoute.cost.v4": "Az optimális útvonal költsége ~{{gasPrice}} gázban. ",
"swap.bridging.estimatedTime": "Becs. idő",
"swap.bridging.title": "Csere a hálózatok között",
"swap.bridging.warning.description": "A {{fromNetwork}} értékről a {{toNetwork}}értékre vált. Ezt \"áthidalásnak\" is nevezik, amely áthelyezi a tokeneket egyik hálózatról a másikra.",
@@ -1868,16 +1866,15 @@
"swap.review": "Véleménycsere",
"swap.review.summary": "Cserélsz",
"swap.reviewLimit": "Ellenőrzési korlát",
- "swap.route.optimizedGasCost": "Ez az útvonal minden lépésnél figyelembe veszi a megosztott útvonalakat, a többszörös ugrásokat és a hálózati költségeket.",
+ "swap.route.optimizedGasCost": "Ez az útvonal optimalizálja a teljes teljesítményt, figyelembe véve az osztott útvonalakat, a többszörös ugrásokat és az egyes lépések hálózati költségeit.",
"swap.settings.deadline.tooltip": "A tranzakció visszaáll, ha az ennél hosszabb ideig függőben van. (Maximum: 3 nap).",
"swap.settings.deadline.warning": "Magas határidő",
"swap.settings.protection.description": "A cserevédelem bekapcsolásával az Ethereum-tranzakciói védettek lesznek a szendvicstámadásokkal szemben, és csökken a kudarc esélye.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Hálózat",
"swap.settings.protection.subtitle.unavailable": "Nem érhető el itt: {{chainName}}",
"swap.settings.protection.title": "Cserevédelem",
- "swap.settings.routingPreference.option.default.description": "Ennek az opciónak a kiválasztása azonosítja a leghatékonyabb útvonalat a cseréhez.",
- "swap.settings.routingPreference.option.default.description.preV4": "Az Uniswap kliens az ár és a hálózati költségek figyelembevételével a legolcsóbb kereskedési lehetőséget választja.",
- "swap.settings.routingPreference.option.default.tooltip": "Az útvonal a v2, v3 és bizonyos v4 készletek alapján kerül meghatározásra, figyelembe véve a becsült árhatást és a hálózati költségeket.",
+ "swap.settings.routingPreference.option.default.description": "Az Uniswap kliens a legolcsóbb kereskedési lehetőséget választja, figyelembe véve az árakat és a hálózati költségeket.",
+ "swap.settings.routingPreference.option.default.description.v4": "Az Uniswap kliens az ár és a hálózati költségek figyelembevételével választja ki az optimális kereskedési lehetőséget.",
"swap.settings.routingPreference.option.v2.title": "v2 poolok",
"swap.settings.routingPreference.option.v3.title": "v3 poolok",
"swap.settings.routingPreference.option.v4.title": "v4 poolok",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Mindig végezzen kutatást",
"token.safety.warning.blocked.description.default_one": "Ezzel a tokent nem lehet kereskedni az Uniswap alkalmazással.",
"token.safety.warning.blocked.description.default_other": "Ezekkel a tokenekkel nem kereskedhet az Uniswap alkalmazással.",
+ "token.safety.warning.blocked.description.named": "Nem kereskedhet {{tokenSymbol}} az Uniswap alkalmazással.",
"token.safety.warning.dontShowWarningAgain": "Ne mutasd többé ezt a figyelmeztetést",
"token.safety.warning.doYourOwnResearch": "Mindig végezzen saját kutatást, mielőtt folytatná.",
"token.safety.warning.feeDescription": " -t tölt fel, amikor {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "Előfordulhat, hogy a {{tokenSymbol}} nem az a token, amelyet cserélni szeretne.",
"token.safety.warning.malicious.title": "Rosszindulatú token észlelve",
"token.safety.warning.mayResultInLoss": "A csere pénzkiesést okozhat.",
+ "token.safety.warning.medium.heading.default_one": "Ezzel a tokennel nem kereskednek a vezető amerikai központosított tőzsdéken.",
+ "token.safety.warning.medium.heading.default_other": "Ezekkel a tokenekkel nem kereskednek a vezető amerikai központosított tőzsdéken.",
+ "token.safety.warning.medium.heading.default_one_also": "Ezzel a tokennel szintén nem kereskednek a vezető amerikai központosított tőzsdéken.",
+ "token.safety.warning.medium.heading.default_other_also": "Ezekkel a tokenekkel szintén nem kereskednek a vezető amerikai központosított tőzsdéken.",
"token.safety.warning.medium.heading.named": "A {{tokenSymbol}} -vel nem kereskednek a vezető amerikai központosított tőzsdéken.",
"token.safety.warning.notListedOnExchanges": "Nem jegyzik a vezető amerikai tőzsdéken",
"token.safety.warning.sellFee100.message": "A {{ tokenSymbol }} eladhatatlanként lett megjelölve.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} a Blockaid spamként jelölte meg.",
"token.safety.warning.spam.title": "Spam token észlelve",
"token.safety.warning.spamsUsers": "Spam felhasználók",
+ "token.safety.warning.strong.heading.default_one": "Ezzel a tokent nem kereskednek vezető amerikai központosított tőzsdéken, és nem cserélik gyakran Uniswapon.",
+ "token.safety.warning.strong.heading.default_other": "Ezekkel a tokenekkel nem kereskednek vezető amerikai központosított tőzsdéken, és nem cserélik őket gyakran Uniswapon.",
+ "token.safety.warning.strong.heading.named": "A {{tokenSymbol}} -vel nem kereskednek vezető amerikai központosított tőzsdéken, és nem cserélik gyakran Uniswap-on.",
"token.safety.warning.tokenChargesFee.both.message": "A {{tokenSymbol}} {{buyFeePercent}} díjat számít fel vásárláskor és {{sellFeePercent}} adásvétel esetén.",
"token.safety.warning.tokenChargesFee.buy.message": "A {{tokenSymbol}} {{feePercent}} díjat számít fel vásárláskor.",
"token.safety.warning.tokenChargesFee.sell.message": "A {{tokenSymbol}} {{feePercent}} díjat számít fel eladáskor.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "A {{tokenSymbol}} vásárláskor vagy eladáskor díjat számít fel.",
+ "token.safetyLevel.blocked.header": "Nem elérhető",
"token.safetyLevel.blocked.message": "Ezzel a tokennel nem kereskedhet az Uniswap Wallet használatával.",
+ "token.safetyLevel.medium.header": "Vigyázat",
+ "token.safetyLevel.medium.message": "Ezzel a tokennel nem kereskednek a vezető amerikai központosított tőzsdéken. Mindig végezzen saját kutatást, mielőtt folytatná.",
"token.safetyLevel.medium.message.plural": "Ezekkel a tokenekkel nem kereskednek a vezető amerikai központosított tőzsdéken. Mindig végezzen saját kutatást, mielőtt folytatná.",
+ "token.safetyLevel.strong.header": "Figyelem",
+ "token.safetyLevel.strong.message": "Ezzel a tokent nem kereskednek vezető amerikai központosított tőzsdéken, és nem cserélik gyakran Uniswapon. Mindig végezzen saját kutatást, mielőtt továbblép.",
"token.selector.search.error": "Nem sikerült betölteni a keresési eredményeket",
"token.stats.fullyDilutedValuation": "Teljesen hígított értékelés",
"token.stats.marketCap": "Piac Cap",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Egyéb tokenek a {{network}}oldalon",
"tokens.selector.section.recent": "Legutóbbi keresések",
"tokens.selector.section.search": "Keresési eredmények",
- "tokens.selector.section.trending": "Tokenek 24 órás hangerővel",
"tokens.selector.section.yours": "A tokenek",
"tokens.table.search.placeholder.pools": "Keresés a medencékben",
"tokens.table.search.placeholder.tokens": "Tokenek keresése",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Alacsony hálózati token egyenleg",
"transaction.watcher.error.cancel": "Nem lehet törölni a tranzakciót",
"transaction.watcher.error.status": "Hiba a tranzakció állapotának ellenőrzése közben",
- "unichain.promotion.cold.description": "Gyorsabb cserék. Alacsonyabb díjak. A Unichain a DeFi otthona.",
- "unichain.promotion.cold.title": "Bemutatkozik az Unichain",
- "unichain.promotion.modal.description": "Gyorsabb cserék. Alacsonyabb díjak. A Unichain a láncok közötti likviditás otthona.",
- "unichain.promotion.modal.detail.costs": "Alacsonyabb költségek a poolok létrehozásához és a pozíciók kezeléséhez.",
- "unichain.promotion.modal.detail.fees": "Takarítson meg 95%-ot a díjakon az Ethereumhoz képest.",
- "unichain.promotion.modal.detail.instant": "Csere azonnal",
- "unichain.promotion.warm.description": "Cserélje le kedvenc tokenjeit gyorsabban és alacsonyabb benzinköltséggel.",
- "unichain.promotion.warm.title": "Kezdje el a cserét az Unichain-en",
"uniswapX.aggregatesLiquidity": " aggregálja a likviditási forrásokat a jobb árak és a gázmentes csereügyletek érdekében.",
"uniswapx.description": "Az UniswapX összesíti a likviditási forrásokat a jobb árak és a gázmentes csereügyletek érdekében.",
- "uniswapx.included": "Tartalmazza a UniswapX",
+ "uniswapx.included": "Tartalmazza a UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Tudjon meg többet az UniswapX-szel való cseréről",
diff --git a/packages/uniswap/src/i18n/locales/translations/id-ID.json b/packages/uniswap/src/i18n/locales/translations/id-ID.json
index 1f84ba26bb8..5cce32269cf 100644
--- a/packages/uniswap/src/i18n/locales/translations/id-ID.json
+++ b/packages/uniswap/src/i18n/locales/translations/id-ID.json
@@ -176,6 +176,7 @@
"common.allTime": "Sepanjang waktu",
"common.amount.label": "Jumlah",
"common.amountDeposited.label": "{{amount}} Disetorkan",
+ "common.amountInput.placeholder": "Masukkan jumlah",
"common.and": "dan",
"common.app": "Aplikasi",
"common.approval.cancelled": "Persetujuan dibatalkan",
@@ -312,7 +313,6 @@
"common.currency": "Mata uang",
"common.currentPrice": "Harga sekarang",
"common.currentPrice.label": "Harga sekarang:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Khusus",
"common.customRange": "Rentang khusus",
"common.dataOutdated": "Data mungkin sudah usang",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Biaya yang Diperoleh:",
"common.feesEarnedPerBase": "{{symbolA}} untuk {{symbolB}}",
"common.fetchingRoute": "Mengambil rute",
+ "common.flag": "Tanda",
"common.floor": "Terendah",
"common.floorPrice": "Harga terendah",
"common.for": "Untuk",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Setujui di dompet",
"common.wallet.label": "Dompet",
"common.walletForSwapping": "Dompet dibuat untuk bertukar. Tersedia di iOS dan Android.",
- "common.warning": "Warning",
"common.webApp": "Aplikasi website",
"common.website": "Situs web",
"common.whyApprove": "Mengapa token harus disetujui?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Tidak dapat memuat token yang akan dibeli",
"fiatOnRamp.error.max": "Maksimum {{amount}}",
"fiatOnRamp.error.min": "Minimal {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Layanan ini tidak tersedia di wilayah Anda",
"fiatOnRamp.error.unsupported": "Tidak didukung di wilayah",
"fiatOnRamp.error.usd": "Hanya dapat dibeli dalam USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} untuk {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Dibeli di {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Anda akan melanjutkan ke portal penyedia untuk melihat biaya yang terkait dengan transaksi Anda.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, dan opsi lainnya",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} NFT LP",
"migrate.lpTokens": "{{symA}}/{{symB}} Token LP",
"migrate.migrating": "Bermigrasi",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Tidak melihat salah satu posisi v2 Anda? Impor.",
"migrate.noV2Liquidity": "Tidak ditemukan likuiditas V2.",
"migrate.positionNoFees": "Posisi Anda tidak akan memperoleh biaya atau digunakan dalam perdagangan sampai harga pasar bergerak ke rentang Anda.",
"migrate.priceDifference": "Perbedaan harga: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Harga:",
"migrate.v2Description": "Alat ini akan dengan aman memigrasikan likuiditas {{source}} Anda ke V3. Prosesnya sepenuhnya trustless (tanpa perlu memercayakan kepada pihak ketiga mana pun) berkat <0>kontrak migrasi Uniswap0> ↗",
"migrate.v2Instruction": "Untuk setiap cadangan aset yang ditunjukkan di bawah, klik migrasi untuk menghapus likuiditas Anda dari Uniswap V2 dan menyetorkannya ke Uniswap V3.",
+ "migrate.v2Subtitle": "Migrasikan token likuiditas Anda dari Uniswap V2 ke Uniswap V3.",
"migrate.v2Title": "Migrasikan likuiditas V2",
"migrate.v3Price": "V3 {{sym}} Harga:",
"mint.v3.input.invalidPrice.error": "Masukan harga tidak valid",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Beri nama untuk dompet Anda",
"onboarding.notification.permission.message": "Untuk menerima notifikasi, aktifkan notifikasi untuk Dompet Uniswap di pengaturan perangkat Anda.",
"onboarding.notification.permission.title": "Izin notifikasi",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Dapatkan notifikasi saat proses transfer, penukaran, dan persetujuan Anda selesai.",
+ "onboarding.notification.title": "Aktifkan notifikasi push",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Hubungkan ke dompet untuk melihat likuiditas Anda.",
"pool.liquidity.data.error.message": "Terjadi kesalahan saat mengambil data untuk transaksi Anda.",
"pool.liquidity.earn.fee": "Penyedia likuiditas mendapatkan biaya 0,3% untuk semua perdagangan sebanding dengan bagian mereka dalam cadangan aset. Biaya ditambahkan ke cadangan aset, bertambah secara real time dan dapat diklaim dengan menarik likuiditas Anda.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Harga di pool tidak sinkron",
+ "pool.liquidity.outOfSync.message": "Harga di pool tidak tersinkronisasi dengan harga di pasar saat ini. Anda berisiko kehilangan dana apabila menambah likuiditas.",
"pool.liquidity.ownershipWarning.message": "Anda bukan pemilik posisi LP ini. Anda tidak akan dapat menarik likuiditas dari posisi ini kecuali Anda memiliki alamat berikut: {{ownerAddress}}",
"pool.liquidity.rewards": "Reward penyedia likuiditas",
"pool.liquidity.taxWarning": "Pajak token",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Harga cadangan aset ini ada di dalam rentang yang Anda pilih. Posisi Anda saat ini menghasilkan biaya.",
"pool.rates": "Tarif",
"pool.ratioTokenToPrice": "Rasio token yang Anda tambahkan akan menentukan harga cadangan aset ini.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Hapus likuiditas",
"pool.rewardsPool.label": "Token cadangan aset di pool reward:",
"pool.selectedRange": "Rentang yang dipilih",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hook merupakan fitur canggih yang memungkinkan cadangan aset berinteraksi dengan kontrak cerdas dan membuka berbagai kemampuan. Berhati-hatilah saat menambahkan hook, karena beberapa hook mungkin berbahaya atau menyebabkan konsekuensi yang tidak diinginkan.",
"position.addingHook": "Menambahkan hook",
"position.addingHook.disclaimer": "Anda dapat mengalami konsekuensi yang tidak diharapkan jika menambahkan hook. Lakukan riset terlebih dahulu sebelum mengambil tindakan.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Masukkan alamat hook yang valid",
"position.addingHook.viewProperties": "Lihat properti",
"position.appearHere": "Posisi Anda akan muncul di sini.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "{{currencySymbol}} disetorkan",
"position.hook.disclaimer": "Saya paham risikonya.",
"position.hook.liquidityWarning": "Tanda ini dapat mengakibatkan pool memblokir tambahan likuiditas baru. Transaksi Anda mungkin dibatalkan.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Tanda ini dapat mengakibatkan dana Anda terkunci, atau mencegah Anda memungut biaya.",
"position.hook.swapWarning": "Tanda ini memungkinkan pengguna yang sudah mahir untuk dengan lebih mudah memanfaatkan likuiditas Just-In-Time (JIT) sehingga biaya yang ditimbulkan lebih sedikit.",
"position.hook.warningHeader": "Terdeteksi hook berisiko tinggi",
"position.hook.warningInfo": "Kami mengidentifikasi adanya potensi risiko pada hook ini. Sebelum melanjutkan, harap periksa tanda dan pastikan bahwa hook ini memang ingin Anda gunakan.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Setujui dan tukar",
"swap.approveInWallet": "Setujui di dompet Anda",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Biaya rute harga terbaik ~{{gasPrice}} dalam biaya gas. ",
+ "swap.bestRoute.cost.v4": "Biaya rute optimal ~{{gasPrice}} biaya gas.",
"swap.bridging.estimatedTime": "Perkiraan waktu",
"swap.bridging.title": "Pertukaran antar jaringan",
"swap.bridging.warning.description": "Anda melakukan pertukaran dari {{fromNetwork}} ke {{toNetwork}}. Ini juga dikenal sebagai \"bridging\", yang memindahkan token Anda dari satu jaringan ke jaringan lain.",
@@ -1868,16 +1866,15 @@
"swap.review": "Tinjau pertukaran",
"swap.review.summary": "Anda bertukar",
"swap.reviewLimit": "Tinjau batasan",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "Rute ini mengoptimalkan total output Anda dengan mempertimbangkan rute terpisah, beberapa lompatan, dan biaya jaringan setiap langkah.",
"swap.settings.deadline.tooltip": "Transaksi Anda akan dibatalkan jika tertunda lebih dari jangka waktu ini. (Maksimum: 3 hari).",
"swap.settings.deadline.warning": "Tenggat tinggi",
"swap.settings.protection.description": "Dengan mengaktifkan perlindungan pertukaran, transaksi Ethereum Anda akan terlindungi dari serangan sandwich, dengan kemungkinan kegagalan yang lebih kecil.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Jaringan",
"swap.settings.protection.subtitle.unavailable": "Tidak tersedia pada {{chainName}}",
"swap.settings.protection.title": "Perlindungan pertukaran",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Klien Uniswap memilih opsi perdagangan termurah dengan memperhitungkan harga dan biaya jaringan.",
+ "swap.settings.routingPreference.option.default.description.v4": "Klien Uniswap memilih opsi perdagangan optimal dengan memperhitungkan harga dan biaya jaringan.",
"swap.settings.routingPreference.option.v2.title": "Cadangan aset v2",
"swap.settings.routingPreference.option.v3.title": "Cadangan aset v3",
"swap.settings.routingPreference.option.v4.title": "Cadangan aset v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Selalu lakukan riset secara mandiri",
"token.safety.warning.blocked.description.default_one": "Anda tidak dapat memperdagangkan token ini menggunakan Aplikasi Uniswap.",
"token.safety.warning.blocked.description.default_other": "Anda tidak dapat memperdagangkan token ini menggunakan Aplikasi Uniswap.",
+ "token.safety.warning.blocked.description.named": "Anda tidak dapat memperdagangkan {{tokenSymbol}} menggunakan Aplikasi Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Jangan tampilkan peringatan ini lagi",
"token.safety.warning.doYourOwnResearch": "Selalu lakukan riset secara mandiri sebelum melanjutkan.",
"token.safety.warning.feeDescription": "Memungut ketika {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} sebaiknya jangan bertukar token ini.",
"token.safety.warning.malicious.title": "Token berbahaya terdeteksi",
"token.safety.warning.mayResultInLoss": "Bertukar token ini dapat mengakibatkan kerugian dana.",
+ "token.safety.warning.medium.heading.default_one": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS.",
+ "token.safety.warning.medium.heading.default_other": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS.",
+ "token.safety.warning.medium.heading.default_one_also": "Token ini juga tidak diperdagangkan di bursa terpusat terkemuka di AS.",
+ "token.safety.warning.medium.heading.default_other_also": "Token ini juga tidak diperdagangkan di bursa terpusat terkemuka di AS.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} tidak diperdagangkan di bursa terpusat terkemuka di AS.",
"token.safety.warning.notListedOnExchanges": "Tidak terdaftar di bursa AS terkemuka",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} telah ditandai sebagai tidak bisa dijual.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} telah ditandai sebagai spam oleh Blockaid.",
"token.safety.warning.spam.title": "Token spam terdeteksi",
"token.safety.warning.spamsUsers": "Mengirimkan spam",
+ "token.safety.warning.strong.heading.default_one": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS atau sering ditukar di Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS atau sering ditukar di Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} tidak diperdagangkan di bursa terpusat terkemuka AS atau sering ditukar di Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} memungut biaya {{buyFeePercent}} ketika dibeli dan {{sellFeePercent}} ketika dijual.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} memungut biaya {{feePercent}} ketika dibeli.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} memungut biaya {{feePercent}} ketika dijual.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} memungut biaya saat dibeli atau dijual.",
+ "token.safetyLevel.blocked.header": "Tidak tersedia",
"token.safetyLevel.blocked.message": "Anda tidak dapat memperdagangkan token ini menggunakan Dompet Uniswap.",
+ "token.safetyLevel.medium.header": "Peringatan",
+ "token.safetyLevel.medium.message": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS. Selalu lakukan riset secara mandiri sebelum melanjutkan.",
"token.safetyLevel.medium.message.plural": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS. Selalu lakukan riset secara mandiri sebelum melanjutkan.",
+ "token.safetyLevel.strong.header": "Peringatan",
+ "token.safetyLevel.strong.message": "Token ini tidak diperdagangkan di bursa terpusat terkemuka di AS atau sering ditukar di Uniswap. Selalu lakukan riset secara mandiri sebelum melanjutkan.",
"token.selector.search.error": "Tidak dapat memuat hasil penelusuran",
"token.stats.fullyDilutedValuation": "Penilaian Terdilusi Sepenuhnya",
"token.stats.marketCap": "Kapitalisasi Pasar",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Token lain di {{network}}",
"tokens.selector.section.recent": "Pencarian terkini",
"tokens.selector.section.search": "Hasil pencarian",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Token Anda",
"tokens.table.search.placeholder.pools": "Cari cadangan aset",
"tokens.table.search.placeholder.tokens": "Cari token",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Saldo token jaringan hampir habis",
"transaction.watcher.error.cancel": "Tidak dapat membatalkan transaksi",
"transaction.watcher.error.status": "Kesalahan saat memeriksa status transaksi",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " mengumpulkan sumber likuiditas untuk harga yang lebih baik dan pertukaran bebas biaya gas.",
"uniswapx.description": "UniswapX mengumpulkan sumber likuiditas untuk harga yang lebih baik dan pertukaran bebas biaya gas.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Termasuk UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Pelajari lebih lanjut tentang bertukar dengan UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/it-IT.json b/packages/uniswap/src/i18n/locales/translations/it-IT.json
index 4a45478cee0..b55b76d08bf 100644
--- a/packages/uniswap/src/i18n/locales/translations/it-IT.json
+++ b/packages/uniswap/src/i18n/locales/translations/it-IT.json
@@ -176,6 +176,7 @@
"common.allTime": "Sempre",
"common.amount.label": "Quantità",
"common.amountDeposited.label": "{{amount}} Depositato",
+ "common.amountInput.placeholder": "Importo immesso",
"common.and": "E",
"common.app": "Applicazione",
"common.approval.cancelled": "Approvazione annullata",
@@ -312,7 +313,6 @@
"common.currency": "Valuta",
"common.currentPrice": "Prezzo attuale",
"common.currentPrice.label": "Prezzo attuale:",
- "common.currentPrice.unavailable": "Prezzo attuale non disponibile",
"common.custom": "Costume",
"common.customRange": "Gamma personalizzata",
"common.dataOutdated": "I dati potrebbero essere obsoleti",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Commissioni guadagnate:",
"common.feesEarnedPerBase": "{{symbolA}} ogni {{symbolB}}",
"common.fetchingRoute": "Recupero percorso",
+ "common.flag": "Bandiera",
"common.floor": "Pavimento",
"common.floorPrice": "Prezzo al piano",
"common.for": "Per",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Approva nel portafoglio",
"common.wallet.label": "Portafoglio",
"common.walletForSwapping": "Il portafoglio pensato per lo scambio. Disponibile su iOS e Android.",
- "common.warning": "Avvertimento",
"common.webApp": "Applicazione Web",
"common.website": "Sito web",
"common.whyApprove": "Perché devo approvare un token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Impossibile caricare i token da acquistare",
"fiatOnRamp.error.max": "Massimo {{amount}}",
"fiatOnRamp.error.min": "Minimo {{amount}}",
- "fiatOnRamp.error.noQuotes": "Nessuna citazione trovata.",
"fiatOnRamp.error.unavailable": "Questo servizio non è disponibile nella tua regione",
"fiatOnRamp.error.unsupported": "Non supportato nella regione",
"fiatOnRamp.error.usd": "Disponibile solo per l'acquisto in USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} per {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Nessuna citazione trovata",
"fiatOnRamp.purchasedOn": "Acquistato il {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Continuerai al portale del fornitore per vedere le commissioni associate alla tua transazione.",
"fiatOnRamp.quote.type.list": "{{optionsList}}e altre opzioni",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Prezzo:",
"migrate.v2Description": "Questo strumento migrerà in modo sicuro la tua liquidità {{source}} alla V3. Il processo è completamente trustless grazie al <0>contratto di migrazione Uniswap0> ↗",
"migrate.v2Instruction": "Per ogni pool mostrato di seguito, fai clic su Migra per rimuovere la liquidità da Uniswap V2 e depositarla su Uniswap V3.",
+ "migrate.v2Subtitle": "Migra i tuoi token di liquidità da Uniswap V2 a Uniswap V3.",
"migrate.v2Title": "Migrare la liquidità V2",
"migrate.v3Price": "V3 {{sym}} Prezzo:",
"mint.v3.input.invalidPrice.error": "Immissione del prezzo non valida",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Dai un nome al tuo portafoglio",
"onboarding.notification.permission.message": "Per ricevere notifiche, attiva le notifiche per Uniswap Wallet nelle impostazioni del tuo dispositivo.",
"onboarding.notification.permission.title": "Autorizzazione notifiche",
- "onboarding.notification.subtitle": "Rimani aggiornato sullo stato delle transazioni e sulle principali variazioni di prezzo per i token preferiti",
- "onboarding.notification.title": "Attiva le notifiche",
+ "onboarding.notification.subtitle": "Ricevi una notifica quando i trasferimenti, gli scambi e le approvazioni vengono completati.",
+ "onboarding.notification.title": "Attiva le notifiche push",
"onboarding.passkey.account.protection": "Il tuo account è protetto dal tuo archivio sicuro di password.",
"onboarding.passkey.biometric.scan": "Telefono, tablet o browser: ti basterà scansionare i tuoi dati biometrici e sarai loggato.",
"onboarding.passkey.create": "Crea la tua passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Connettiti a un portafoglio per visualizzare la tua liquidità.",
"pool.liquidity.data.error.message": "Si è verificato un errore durante il recupero dei dati necessari per la transazione.",
"pool.liquidity.earn.fee": "I fornitori di liquidità guadagnano una commissione dello 0,3% su tutte le operazioni proporzionale alla loro quota del pool. Le commissioni vengono aggiunte al pool, maturano in tempo reale e possono essere richieste prelevando la liquidità.",
- "pool.liquidity.outOfSync": "Disallineamento tra prezzo di mercato e prezzo di piscina",
- "pool.liquidity.outOfSync.message": "I prezzi in questo pool differiscono dai prezzi di mercato dei token selezionati. Regola di conseguenza il tuo intervallo di prezzo o attendi che il pool si ribilanci per evitare perdite.",
+ "pool.liquidity.outOfSync": "I prezzi delle piscine non sono sincronizzati",
+ "pool.liquidity.outOfSync.message": "I prezzi in questo pool non sono sincronizzati con il mercato attuale. Aggiungere liquidità potrebbe comportare una perdita di fondi.",
"pool.liquidity.ownershipWarning.message": "Non sei il proprietario di questa posizione LP. Non potrai prelevare la liquidità da questa posizione a meno che tu non possieda il seguente indirizzo: {{ownerAddress}}",
"pool.liquidity.rewards": "Premi per i fornitori di liquidità",
"pool.liquidity.taxWarning": "Tasse simboliche",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Il prezzo di questa piscina rientra nell'intervallo selezionato. La tua posizione attualmente sta guadagnando commissioni.",
"pool.rates": "Aliquote",
"pool.ratioTokenToPrice": "Il rapporto tra i token che aggiungi determinerà il prezzo di questo pool.",
- "pool.refresh.prices": "Aggiorna i prezzi",
"pool.removeLiquidity": "Rimuovere la liquidità",
"pool.rewardsPool.label": "Token del pool nel pool di premi:",
"pool.selectedRange": "Intervallo selezionato",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Gli hook sono una funzionalità avanzata che consente ai pool di interagire con gli smart contract, sbloccando varie capacità. Fai attenzione quando aggiungi hook, poiché alcuni potrebbero essere dannosi o causare conseguenze indesiderate.",
"position.addingHook": "Aggiunta di un gancio",
"position.addingHook.disclaimer": "Aggiungere hook potrebbe avere conseguenze indesiderate. Fai le tue ricerche e procedi a tuo rischio e pericolo.",
- "position.addingHook.hideProperties": "Nascondi proprietà",
"position.addingHook.invalidAddress": "Inserisci un indirizzo di hook valido",
"position.addingHook.viewProperties": "Visualizza le proprietà",
"position.appearHere": "La tua posizione apparirà qui.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Depositato {{currencySymbol}}",
"position.hook.disclaimer": "Capisco i rischi.",
"position.hook.liquidityWarning": "Questo flag può causare il blocco dell'aggiunta di nuova liquidità da parte del pool. La tua transazione potrebbe essere annullata.",
- "position.hook.removeWarning": "Potrebbe causare il blocco dei tuoi fondi o impedirti di riscuotere commissioni.",
+ "position.hook.removeWarning": "Questo flag può causare il blocco dei tuoi fondi o impedirti di riscuotere commissioni.",
"position.hook.swapWarning": "Questo flag può consentire agli utenti più esperti di sfruttare più facilmente la liquidità Just-In-Time, con conseguenti commissioni guadagnate inferiori.",
"position.hook.warningHeader": "Rilevato gancio ad alto rischio",
"position.hook.warningInfo": "Abbiamo identificato potenziali rischi con questo hook. Si prega di rivedere i flag e verificare che questo sia l'hook che si desidera utilizzare prima di procedere.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Approva e scambia",
"swap.approveInWallet": "Approva nel tuo portafoglio",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Si stima che il percorso più efficiente abbia un costo di circa ~{{gasPrice}} in costi di rete. ",
+ "swap.bestRoute.cost": "Il percorso al miglior prezzo costa ~{{gasPrice}} in gas. ",
+ "swap.bestRoute.cost.v4": "Il percorso ottimale costa ~{{gasPrice}} in carburante. ",
"swap.bridging.estimatedTime": "Tempo stimato",
"swap.bridging.title": "Scambio tra reti",
"swap.bridging.warning.description": "Stai passando da {{fromNetwork}} a {{toNetwork}}. Questo è anche noto come \"bridging\", che sposta i tuoi token da una rete all'altra.",
@@ -1868,16 +1866,15 @@
"swap.review": "Scambio di recensioni",
"swap.review.summary": "Stai scambiando",
"swap.reviewLimit": "Limite di revisione",
- "swap.route.optimizedGasCost": "Questo percorso considera percorsi suddivisi, salti multipli e costi di rete di ogni passaggio.",
+ "swap.route.optimizedGasCost": "Questo percorso ottimizza il tuo output totale tenendo conto di percorsi suddivisi, hop multipli e costi di rete di ogni passaggio.",
"swap.settings.deadline.tooltip": "La transazione verrà annullata se rimane in sospeso per un periodo di tempo superiore a questo. (Massimo: 3 giorni).",
"swap.settings.deadline.warning": "Scadenza elevata",
"swap.settings.protection.description": "Con la protezione swap attiva, le tue transazioni Ethereum saranno protette dagli attacchi sandwich, con ridotte possibilità di fallimento.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Rete",
"swap.settings.protection.subtitle.unavailable": "Non disponibile su {{chainName}}",
"swap.settings.protection.title": "Protezione dallo scambio",
- "swap.settings.routingPreference.option.default.description": "Selezionando questa opzione si identifica il percorso più efficiente per lo scambio.",
- "swap.settings.routingPreference.option.default.description.preV4": "Il cliente Uniswap seleziona l'opzione di trading più economica tenendo conto del prezzo e dei costi di rete.",
- "swap.settings.routingPreference.option.default.tooltip": "Viene identificato un percorso considerando i pool v2, v3 e alcuni pool v4, tenendo conto dell'impatto stimato sui prezzi e dei costi di rete.",
+ "swap.settings.routingPreference.option.default.description": "Il cliente Uniswap seleziona l'opzione di trading più economica tenendo conto del prezzo e dei costi di rete.",
+ "swap.settings.routingPreference.option.default.description.v4": "Il cliente Uniswap seleziona l'opzione di trading ottimale tenendo conto del prezzo e dei costi di rete.",
"swap.settings.routingPreference.option.v2.title": "piscine v2",
"swap.settings.routingPreference.option.v3.title": "pool v3",
"swap.settings.routingPreference.option.v4.title": "piscine v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Fai sempre le tue ricerche",
"token.safety.warning.blocked.description.default_one": "Non puoi scambiare questo token utilizzando l'app Uniswap.",
"token.safety.warning.blocked.description.default_other": "Non puoi scambiare questi token utilizzando l'app Uniswap.",
+ "token.safety.warning.blocked.description.named": "Non puoi scambiare {{tokenSymbol}} utilizzando l'app Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Non mostrarmi più questo avviso",
"token.safety.warning.doYourOwnResearch": "Prima di procedere, fai sempre le tue ricerche.",
"token.safety.warning.feeDescription": "Carica un quando {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} potrebbe non essere il token che stai cercando di scambiare.",
"token.safety.warning.malicious.title": "Rilevato token dannoso",
"token.safety.warning.mayResultInLoss": "Lo scambio potrebbe comportare una perdita di fondi.",
+ "token.safety.warning.medium.heading.default_one": "Questo token non è negoziato sui principali scambi centralizzati statunitensi.",
+ "token.safety.warning.medium.heading.default_other": "Questi token non sono negoziati sui principali scambi centralizzati statunitensi.",
+ "token.safety.warning.medium.heading.default_one_also": "Questo token non è inoltre scambiato sui principali exchange centralizzati degli Stati Uniti.",
+ "token.safety.warning.medium.heading.default_other_also": "Questi token non sono negoziati sui principali exchange centralizzati degli Stati Uniti.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} non è negoziato nelle principali borse centralizzate statunitensi.",
"token.safety.warning.notListedOnExchanges": "Non quotato nelle principali borse statunitensi",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} è stato segnalato come invendibile.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} è stato segnalato come spam da Blockaid.",
"token.safety.warning.spam.title": "Rilevato token spam",
"token.safety.warning.spamsUsers": "Spam agli utenti",
+ "token.safety.warning.strong.heading.default_one": "Questo token non è negoziato sulle principali borse centralizzate statunitensi né scambiato frequentemente su Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Questi token non sono negoziati sui principali scambi centralizzati statunitensi o scambiati frequentemente su Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} non è scambiato sulle principali borse centralizzate statunitensi e non viene scambiato frequentemente su Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} addebita una commissione di {{buyFeePercent}} quando viene acquistato e di {{sellFeePercent}} quando viene venduto.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} addebita una commissione di {{feePercent}} quando viene acquistato.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} addebita una commissione di {{feePercent}} quando viene venduto.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} addebita una commissione quando viene acquistato o venduto.",
+ "token.safetyLevel.blocked.header": "Non disponibile",
"token.safetyLevel.blocked.message": "Non puoi scambiare questo token utilizzando Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Attenzione",
+ "token.safetyLevel.medium.message": "Questo token non è scambiato sui principali exchange centralizzati degli Stati Uniti. Fai sempre le tue ricerche prima di procedere.",
"token.safetyLevel.medium.message.plural": "Questi token non sono scambiati sui principali exchange centralizzati degli Stati Uniti. Fai sempre le tue ricerche prima di procedere.",
+ "token.safetyLevel.strong.header": "Avvertimento",
+ "token.safetyLevel.strong.message": "Questo token non è scambiato sui principali exchange centralizzati degli Stati Uniti né frequentemente scambiato su Uniswap. Fai sempre le tue ricerche prima di procedere.",
"token.selector.search.error": "Impossibile caricare i risultati della ricerca",
"token.stats.fullyDilutedValuation": "Valutazione completamente diluita",
"token.stats.marketCap": "Capitalizzazione di mercato",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Altri token su {{network}}",
"tokens.selector.section.recent": "Ricerche recenti",
"tokens.selector.section.search": "Risultati di ricerca",
- "tokens.selector.section.trending": "Token per volume 24H",
"tokens.selector.section.yours": "I tuoi gettoni",
"tokens.table.search.placeholder.pools": "Cerca pool",
"tokens.table.search.placeholder.tokens": "Cerca token",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Basso saldo del token di rete",
"transaction.watcher.error.cancel": "Impossibile annullare la transazione",
"transaction.watcher.error.status": "Errore durante il controllo dello stato della transazione",
- "unichain.promotion.cold.description": "Scambi più rapidi. Commissioni più basse. Unichain è la casa della DeFi.",
- "unichain.promotion.cold.title": "Presentazione di Unichain",
- "unichain.promotion.modal.description": "Swap più rapidi. Commissioni più basse. Unichain è la casa della liquidità cross-chain.",
- "unichain.promotion.modal.detail.costs": "Costi inferiori per la creazione di pool e la gestione delle posizioni.",
- "unichain.promotion.modal.detail.fees": "Risparmia il 95% sulle commissioni rispetto a Ethereum.",
- "unichain.promotion.modal.detail.instant": "Scambia all'istante",
- "unichain.promotion.warm.description": "Scambia i tuoi token preferiti più velocemente e con costi di carburante più bassi.",
- "unichain.promotion.warm.title": "Inizia a scambiare su Unichain",
"uniswapX.aggregatesLiquidity": " aggrega fonti di liquidità per prezzi migliori e scambi senza gas.",
"uniswapx.description": "UniswapX aggrega le fonti di liquidità per prezzi migliori e swap senza gas.",
- "uniswapx.included": "Include UniswapX",
+ "uniswapx.included": "Include UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Scopri di più sullo scambio con UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/ja-JP.json b/packages/uniswap/src/i18n/locales/translations/ja-JP.json
index ef44169d8ff..98c06733462 100644
--- a/packages/uniswap/src/i18n/locales/translations/ja-JP.json
+++ b/packages/uniswap/src/i18n/locales/translations/ja-JP.json
@@ -176,6 +176,7 @@
"common.allTime": "全期間",
"common.amount.label": "金額",
"common.amountDeposited.label": "{{amount}} を預け入れました",
+ "common.amountInput.placeholder": "入力金額",
"common.and": "および",
"common.app": "アプリ",
"common.approval.cancelled": "承認がキャンセルされました",
@@ -312,7 +313,6 @@
"common.currency": "通貨",
"common.currentPrice": "現在の価格",
"common.currentPrice.label": "現在の価格:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "カスタム",
"common.customRange": "カスタム範囲",
"common.dataOutdated": "データが古い可能性があります",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} の手数料を獲得しました:",
"common.feesEarnedPerBase": "{{symbolB}} あたり {{symbolA}}",
"common.fetchingRoute": "ルートを取得中です",
+ "common.flag": "フラグ",
"common.floor": "底値",
"common.floorPrice": "フロア価格",
"common.for": "次に相当",
@@ -681,7 +682,6 @@
"common.wallet.approve": "ウォレットで承認",
"common.wallet.label": "ウォレット",
"common.walletForSwapping": "スワップ用に構築されたウォレットです。iOS と Android でご利用いただけます。",
- "common.warning": "Warning",
"common.webApp": "Web アプリ",
"common.website": "Web サイト",
"common.whyApprove": "なぜトークンを承認する必要があるのですか?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "購入用のトークンを読み込めませんでした",
"fiatOnRamp.error.max": "最大 {{amount}}",
"fiatOnRamp.error.min": "最小 {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "このサービスはお客様の地域ではご利用いただけません",
"fiatOnRamp.error.unsupported": "サポート対象外の地域です",
"fiatOnRamp.error.usd": "購入に使用できるのは米国ドルのみです",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} で {{inputAmount}} {{inputSymbol}} を",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "{{serviceProvider}} で購入しました",
"fiatOnRamp.quote.advice": "トランザクションに関連する手数料を確認するには、プロバイダのポータルに進んでください。",
"fiatOnRamp.quote.type.list": "{{optionsList}}、およびその他のオプション",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} LP NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP トークン",
"migrate.migrating": "移行中です",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "v2 ポジションが見つからない場合は、インポートしてください。",
"migrate.noV2Liquidity": "V2 流動性が見つかりません。",
"migrate.positionNoFees": "市場価格がお客様の範囲内に入るまで、お客様のポジションは手数料を稼いだり、取引に使用されたりすることはありません。",
"migrate.priceDifference": "価格差:",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} 価格:",
"migrate.v2Description": "このツールは、{{source}} の流動性を V3 に安全に移行します。このプロセスは <0>Uniswap 移行契約0> により完全にトラストレスになっています↗",
"migrate.v2Instruction": "以下に示す各プールについて、[移行] をクリックして流動性を Uniswap V2 から削除し、Uniswap V3 に入金します。",
+ "migrate.v2Subtitle": "流動性トークンを Uniswap V2 から Uniswap V3 に移行します。",
"migrate.v2Title": "V2 流動性を移行",
"migrate.v3Price": "V3 {{sym}} 価格:",
"mint.v3.input.invalidPrice.error": "無効な価格入力です",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "ウォレットに名前を付ける",
"onboarding.notification.permission.message": "通知を受け取るには、デバイスの設定で Uniswap ウォレットの通知をオンにしてください。",
"onboarding.notification.permission.title": "通知の許可",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "転送、スワップ、承認が完了すると通知が届きます。",
+ "onboarding.notification.title": "プッシュ通知をオンにする",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "流動性を表示するにはウォレットに接続してください。",
"pool.liquidity.data.error.message": "トランザクションに必要なデータの取得中にエラーが発生しました。",
"pool.liquidity.earn.fee": "流動性プロバイダは、プールのシェアに応じて、すべての取引に対して0.3% の手数料を獲得します。手数料はプールに追加され、リアルタイムで発生し、流動性を引き出すことで請求できます。",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "プールの価格が同期されていません",
+ "pool.liquidity.outOfSync.message": "このプールにある価格が現在の市場価格と同期されていません。流動性を追加すると資金が失われる可能性があります。",
"pool.liquidity.ownershipWarning.message": "お客様はこの LP ポジションの所有者ではありません。アドレス {{ownerAddress}} を所有していない限り、このポジションから流動性を引き出すことはできません。",
"pool.liquidity.rewards": "流動性プロバイダのリワード",
"pool.liquidity.taxWarning": "トークン税",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "このプールの価格は選択範囲内です。お客様のポジションは現在手数料が発生しています。",
"pool.rates": "レート",
"pool.ratioTokenToPrice": "追加するトークンの比率によって、このプールの価格が設定されます。",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "流動性を削除",
"pool.rewardsPool.label": "リワードプール内のプールトークン:",
"pool.selectedRange": "選択範囲",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "フックは、プールがスマートコントラクトと対話してさまざまな機能を利用できるようにする高度な機能です。フックを追加するときは注意してください。フックの中には悪意のあるものや、意図しない結果を引き起こすものもあるかもしれません。",
"position.addingHook": "フックの追加",
"position.addingHook.disclaimer": "フックを追加すると、予期しない結果を招く可能性があります。調査を行い、ご自分の責任で進めてください。",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "有効なフックアドレスを入力してください",
"position.addingHook.viewProperties": "プロパティを表示",
"position.appearHere": "お客様のポジションがここに表示されます。",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "寄託 {{currencySymbol}}",
"position.hook.disclaimer": "リスクを理解しました。",
"position.hook.liquidityWarning": "このフラグにより、新たな流動性の追加がプールによりブロックされる可能性があります。トランザクションが取り消されることがあります。",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "このフラグにより、資金がロックされるか手数料の回収がブロックされる可能性があります。",
"position.hook.swapWarning": "このフラグにより、熟練したユーザーがジャストインタイム流動性をより簡単に活用できるため、得られる手数料が低くなる可能性があります。",
"position.hook.warningHeader": "高リスクフックが検出されました",
"position.hook.warningInfo": "このフックには潜在的なリスクがあることが確認されました。進める前に、フラグを確認し、本当に使用したいフックであるか確認してください。",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "承認してスワップ",
"swap.approveInWallet": "ウォレットで承認",
"swap.balance.amount": "残高:{{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "最安ルートのガス代は ~{{gasPrice}} です。",
+ "swap.bestRoute.cost.v4": "Optimal route costs ~{{gasPrice}} in gas. ",
"swap.bridging.estimatedTime": "推定時間",
"swap.bridging.title": "ネットワーク間のスワッピング",
"swap.bridging.warning.description": "{{fromNetwork}} から {{toNetwork}} にスワップ中です。これは「ブリッジング」とも呼ばれ、トークンをあるネットワークから別のネットワークに移動します。",
@@ -1868,16 +1866,15 @@
"swap.review": "スワップをレビュー",
"swap.review.summary": "スワップ中です",
"swap.reviewLimit": "指値注文をレビュー",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.",
"swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).",
"swap.settings.deadline.warning": "High deadline",
"swap.settings.protection.description": "スワップ保護をオンにすると、イーサリアムトランザクションはサンドイッチ攻撃から保護され、失敗の可能性が低くなります。",
"swap.settings.protection.subtitle.supported": "{{chainName}} ネットワーク",
"swap.settings.protection.subtitle.unavailable": "{{chainName}} では利用できません",
"swap.settings.protection.title": "スワップ保護",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
+ "swap.settings.routingPreference.option.default.description.v4": "The Uniswap client selects the optimal trade option factoring in price and network costs.",
"swap.settings.routingPreference.option.v2.title": "v2 プール",
"swap.settings.routingPreference.option.v3.title": "v3 プール",
"swap.settings.routingPreference.option.v4.title": "v4 プール",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "常に調査を行う",
"token.safety.warning.blocked.description.default_one": "Uniswap アプリを使用してこのトークンを取引することはできません。",
"token.safety.warning.blocked.description.default_other": "Uniswap アプリを使用してこれらのトークンを取引することはできません。",
+ "token.safety.warning.blocked.description.named": "Uniswap アプリを使用して {{tokenSymbol}} を取引することはできません。",
"token.safety.warning.dontShowWarningAgain": "この警告を再度表示しない",
"token.safety.warning.doYourOwnResearch": "先に進む前に必ずご自身で調査を行ってください。",
"token.safety.warning.feeDescription": "Charges a when {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} may not be the token you are looking to swap.",
"token.safety.warning.malicious.title": "悪意のあるトークンが検出されました",
"token.safety.warning.mayResultInLoss": "Swapping it may result in a loss of funds.",
+ "token.safety.warning.medium.heading.default_one": "このトークンは、米国の主要な中央集権型取引所では取引されていません。",
+ "token.safety.warning.medium.heading.default_other": "これらのトークンは、米国の主要な中央集権型取引所では取引されていません。",
+ "token.safety.warning.medium.heading.default_one_also": "このトークンも、米国の大手中央集権型取引所では取引されていません。",
+ "token.safety.warning.medium.heading.default_other_also": "これらのトークンも、米国の大手中央集権型取引所では取引されていません。",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} は、米国の主要中央集権型取引所では取引されていません。",
"token.safety.warning.notListedOnExchanges": "Not listed on leading U.S. exchanges",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} has been flagged as unsellable.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} has been flagged as spam by Blockaid.",
"token.safety.warning.spam.title": "スパムトークンが検出されました",
"token.safety.warning.spamsUsers": "Spams users",
+ "token.safety.warning.strong.heading.default_one": "このトークンは、米国の主要な中央集権型取引所で取引されていないか、Uniswap でのスワップが頻繁に行われていません。",
+ "token.safety.warning.strong.heading.default_other": "これらのトークンは、米国の大手中央集権型取引所で取引されていないか、Uniswap でのスワップが頻繁に行われていません。",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} は、米国の主要な中央集権型取引所では取引されていないか、Uniswap でのスワップが頻繁に行われていません。",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} charges a {{buyFeePercent}} fee when bought and {{sellFeePercent}} when sold.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} charges a {{feePercent}} fee when bought.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} charges a {{feePercent}} fee when sold.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} charges a fee when bought or sold.",
+ "token.safetyLevel.blocked.header": "利用できません",
"token.safetyLevel.blocked.message": "Uniswap ウォレットを使用してこのトークンを取引することはできません。",
+ "token.safetyLevel.medium.header": "注意",
+ "token.safetyLevel.medium.message": "このトークンは、米国の主要な中央集権型取引所では取引されていません。続行する前に必ずご自身で調査を行ってください。",
"token.safetyLevel.medium.message.plural": "これらのトークンは、米国の主要な中央集権型取引所では取引されていません。続行する前に必ずご自身で調査を行ってください。",
+ "token.safetyLevel.strong.header": "警告",
+ "token.safetyLevel.strong.message": "このトークンは、米国の主要な中央集権型取引所で取引されていないか、Uniswap でのスワップが頻繁に行われていません。続行する前に必ずご自身で調査を行ってください。",
"token.selector.search.error": "検索結果を読み込めませんでした",
"token.stats.fullyDilutedValuation": "完全希薄化後評価",
"token.stats.marketCap": "時価総額",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}} 上のその他のトークン",
"tokens.selector.section.recent": "最近の検索履歴",
"tokens.selector.section.search": "検索結果",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "お客様のトークン",
"tokens.table.search.placeholder.pools": "プールを検索",
"tokens.table.search.placeholder.tokens": "トークンを検索",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Low network token balance",
"transaction.watcher.error.cancel": "トランザクションをキャンセルできません",
"transaction.watcher.error.status": "トランザクションステータスの確認中にエラーが発生しました",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " は流動性ソースを集約し、より良い価格とガス代無料のスワップを実現します。",
"uniswapx.description": "UniswapX は流動性ソースを集約し、より良い価格とガス代無料のスワップを実現します。",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "UniswapXを含む",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "UniswapX でのスワップについて詳しく知る",
diff --git a/packages/uniswap/src/i18n/locales/translations/ko-KR.json b/packages/uniswap/src/i18n/locales/translations/ko-KR.json
index 9778fd31fdf..b21351fc75c 100644
--- a/packages/uniswap/src/i18n/locales/translations/ko-KR.json
+++ b/packages/uniswap/src/i18n/locales/translations/ko-KR.json
@@ -176,6 +176,7 @@
"common.allTime": "누적",
"common.amount.label": "양",
"common.amountDeposited.label": "{{amount}} 입금됨",
+ "common.amountInput.placeholder": "금액 입력",
"common.and": "및",
"common.app": "앱",
"common.approval.cancelled": "승인 취소됨",
@@ -312,7 +313,6 @@
"common.currency": "통화",
"common.currentPrice": "현재 가격",
"common.currentPrice.label": "현재 가격:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "사용자 정의",
"common.customRange": "맞춤 설정 범위",
"common.dataOutdated": "데이터가 오래되었을 수 있습니다.",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} 수수료 획득:",
"common.feesEarnedPerBase": "{{symbolB}}당 {{symbolA}}",
"common.fetchingRoute": "경로를 가져오는 중",
+ "common.flag": "플래그",
"common.floor": "바닥",
"common.floorPrice": "가격 하한선",
"common.for": "을 위한",
@@ -681,7 +682,6 @@
"common.wallet.approve": "지갑에서 승인",
"common.wallet.label": "지갑",
"common.walletForSwapping": "스왑을 위해 만들어진 지갑입니다. iOS와 안드로이드에서 이용 가능합니다.",
- "common.warning": "Warning",
"common.webApp": "웹 앱",
"common.website": "웹사이트",
"common.whyApprove": "토큰을 승인해야 하는 이유는 무엇입니까?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "구매할 토큰을 로드할 수 없습니다.",
"fiatOnRamp.error.max": "최대 {{amount}}",
"fiatOnRamp.error.min": "최소 {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "해당 지역에서는 이 서비스를 사용할 수 없습니다.",
"fiatOnRamp.error.unsupported": "해당 지역에서는 지원되지 않습니다.",
"fiatOnRamp.error.usd": "USD로만 구매 가능",
"fiatOnRamp.exchangeRate": "{{inputAmount}} {{inputSymbol}} 만큼의 {{outputAmount}} {{outputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "{{serviceProvider}}에서 구매함",
"fiatOnRamp.quote.advice": "계속해서 공급자의 포털로 이동하여 트랜잭션와 관련된 수수료를 확인하세요.",
"fiatOnRamp.quote.type.list": "{{optionsList}}및 기타 옵션",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} LP NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP 토큰",
"migrate.migrating": "마이그레이션 중",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "v2 포지션 중 하나가 보이지 않습니까? 가져오기.",
"migrate.noV2Liquidity": "V2 유동성이 없습니다.",
"migrate.positionNoFees": "당신의 포지션은 시장 가격이 당신의 범위에 들어갈 때까지 수수료를 받거나 거래에 사용되지 않습니다.",
"migrate.priceDifference": "가격 차이: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} 가격:",
"migrate.v2Description": "이 도구는 {{source}} 유동성을 V3로 안전하게 마이그레이션합니다. <0>Uniswap 마이그레이션 컨트랙트 덕분에 이 프로세스는 완전히 신뢰할 수 있습니다.0> ↗",
"migrate.v2Instruction": "아래에 표시된 각 풀에 대해 마이그레이트를 클릭하여 Uniswap V2에서 유동성을 제거하고 Uniswap V3에 예치하세요.",
+ "migrate.v2Subtitle": "Uniswap V2에서 Uniswap V3로 유동성 토큰을 마이그레이션하세요.",
"migrate.v2Title": "V2 유동성 마이그레이션",
"migrate.v3Price": "V3 {{sym}} 가격:",
"mint.v3.input.invalidPrice.error": "잘못된 가격 입력",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "지갑에 이름을 지정하세요",
"onboarding.notification.permission.message": "알림을 받으려면 기기 설정에서 Uniswap Wallet에 대한 알림을 켜세요.",
"onboarding.notification.permission.title": "알림 권한",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "이전, 스왑, 승인이 완료되면 알림을 받으세요.",
+ "onboarding.notification.title": "푸시 알림 켜기",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "유동성을 확인하려면 지갑에 연결하세요.",
"pool.liquidity.data.error.message": "트랜잭션에 필요한 데이터를 가져오는 동안 오류가 발생했습니다.",
"pool.liquidity.earn.fee": "유동성 공급자는 풀의 비율에 따라 모든 거래에서 0.3%의 수수료를 벌 수 있습니다. 수수료는 풀에 추가되며 실시간으로 누적되고 유동성을 인출하여 클레임할 수 있습니다.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "풀 가격이 동기화되지 않음",
+ "pool.liquidity.outOfSync.message": "이 풀의 가격이 현재 시장과 동기화되어 있지 않습니다. 유동성을 추가하면 자금이 손실될 수 있습니다.",
"pool.liquidity.ownershipWarning.message": "당신은 이 LP 포지션의 소유자가 아닙니다. 다음 주소를 소유하지 않으면 이 포지션에서 유동성을 인출할 수 없습니다: {{ownerAddress}}",
"pool.liquidity.rewards": "유동성 공급자 보상",
"pool.liquidity.taxWarning": "토큰세",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "이 풀의 가격은 당신이 선택한 범위 내에 있습니다. 당신의 포지션은 현재 수수료를 받고 있습니다.",
"pool.rates": "비율",
"pool.ratioTokenToPrice": "추가하는 토큰의 비율에 따라 이 풀의 가격이 결정됩니다.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "유동성 제거",
"pool.rewardsPool.label": "보상 풀의 풀 토큰:",
"pool.selectedRange": "선택한 범위",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "후크는 풀이 스마트 계약과 상호작용하여 다양한 기능을 잠금 해제할 수 있도록 하는 고급 기능입니다. 후크를 추가할 때는 일부는 악의적이거나 의도치 않은 결과를 초래할 수 있으므로 주의하세요.",
"position.addingHook": "후크 추가",
"position.addingHook.disclaimer": "후크를 추가하면 의도치 않은 결과를 초래할 수 있습니다. 충분히 알아본 후 위험을 감수하고 진행하세요.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "유효한 후크 주소 입력",
"position.addingHook.viewProperties": "속성 보기",
"position.appearHere": "당신의 포지션이 여기에 표시됩니다.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "입금된 {{currencySymbol}}",
"position.hook.disclaimer": "위험을 알고 있습니다.",
"position.hook.liquidityWarning": "이 플래그로 인해 풀에서 새 유동성을 추가하는 작업이 차단될 수 있습니다. 트랜잭션이 취소될 수 있습니다.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "이 플래그로 인해 자금이 잠기거나 수수료 인출이 차단될 수 있습니다.",
"position.hook.swapWarning": "이 플래그를 사용하면 고급 사용자가 더욱 쉽게 JIT(Just-In-Time) 유동성을 활용하여 수수료를 낮출 수 있습니다.",
"position.hook.warningHeader": "위험이 높은 후크가 탐지됨",
"position.hook.warningInfo": "이 후크에서 잠재적 위험을 발견했습니다. 진행하기 전에 플래그를 검토하고 사용하려는 후크가 맞는지 확인하세요.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "승인 및 스왑",
"swap.approveInWallet": "지갑에서 승인하세요",
"swap.balance.amount": "잔액: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "최적의 가격 경로는 가스비 ~{{gasPrice}} 입니다. ",
+ "swap.bestRoute.cost.v4": "최적 경로 비용은 가스비 ~{{gasPrice}}입니다. ",
"swap.bridging.estimatedTime": "예상 시간",
"swap.bridging.title": "네트워크 간 스와핑",
"swap.bridging.warning.description": "{{fromNetwork}}에서 {{toNetwork}}(으)로 스왑합니다. 이를 \"브리징\"이라고도 하며, 토큰을 한 네트워크에서 다른 네트워크로 옮깁니다.",
@@ -1868,16 +1866,15 @@
"swap.review": "스왑 검토",
"swap.review.summary": "당신은 스왑 중입니다",
"swap.reviewLimit": "지정가 주문 검토",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "이 경로는 분할 경로, 다중 홉, 각 단계의 네트워크 비용을 고려하여 총 아웃풋을 최적화합니다.",
"swap.settings.deadline.tooltip": "이 기간 이상 보류 중인 경우(최대 3일) 트랜잭션이 원래대로 돌아갑니다.",
"swap.settings.deadline.warning": "촉박한 기한",
"swap.settings.protection.description": "스왑 보호가 켜져 있으면 이더리움 트랜잭션이 샌드위치 공격으로부터 보호되며 실패 가능성이 줄어듭니다.",
"swap.settings.protection.subtitle.supported": "{{chainName}} 네트워크",
"swap.settings.protection.subtitle.unavailable": "{{chainName}}에는 이용 불가",
"swap.settings.protection.title": "스왑 보호",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap 클라이언트는 가격과 네트워크 비용을 고려하여 가장 저렴한 거래 옵션을 선택합니다.",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap 클라이언트는 가격과 네트워크 비용을 고려하여 최적의 거래 옵션을 선택합니다.",
"swap.settings.routingPreference.option.v2.title": "v2 풀",
"swap.settings.routingPreference.option.v3.title": "v3 풀",
"swap.settings.routingPreference.option.v4.title": "v4 풀",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "항상 조사를 하세요",
"token.safety.warning.blocked.description.default_one": "Uniswap 앱을 사용하여 이 토큰을 거래할 수 없습니다.",
"token.safety.warning.blocked.description.default_other": "Uniswap 앱을 사용하여 이 토큰을 거래할 수 없습니다.",
+ "token.safety.warning.blocked.description.named": "Uniswap 앱을 사용해 {{tokenSymbol}}을 거래할 수 없습니다.",
"token.safety.warning.dontShowWarningAgain": "이 경고를 다시 표시하지 마세요",
"token.safety.warning.doYourOwnResearch": "항상 진행하기 전에 스스로 조사하세요.",
"token.safety.warning.feeDescription": "{{action}} 시 부과",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}}은(는) 스왑하려는 토큰이 아닐 수 있습니다.",
"token.safety.warning.malicious.title": "악성 토큰이 감지되었습니다",
"token.safety.warning.mayResultInLoss": "스왑 시 자금에 손실이 발생할 수 있습니다.",
+ "token.safety.warning.medium.heading.default_one": "이 토큰은 미국의 주요 중앙화된 거래소에서 거래되지 않습니다.",
+ "token.safety.warning.medium.heading.default_other": "이 토큰은 미국의 주요 중앙화된 거래소에서 거래되지 않습니다.",
+ "token.safety.warning.medium.heading.default_one_also": "이 토큰은 미국의 주요 중앙화 거래소에서도 거래되지 않습니다.",
+ "token.safety.warning.medium.heading.default_other_also": "이 토큰은 미국의 주요 중앙화 거래소에서도 거래되지 않습니다.",
"token.safety.warning.medium.heading.named": "이 토큰은 미국의 주요 중앙화된 거래소에서 거래되지 않습니다.",
"token.safety.warning.notListedOnExchanges": "주요 미국 거래소에 상장되지 않음",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }}이(가) 판매 불가로 표시되었습니다.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}}이(가) Blockaid에서 스팸으로 표시되었습니다.",
"token.safety.warning.spam.title": "스팸 토큰이 감지되었습니다",
"token.safety.warning.spamsUsers": "사용자에게 스팸 전송",
+ "token.safety.warning.strong.heading.default_one": "이 토큰은 미국의 주요 중앙 거래소에서 거래되지 않으며 Uniswap에서 자주 스왑되지 않습니다.",
+ "token.safety.warning.strong.heading.default_other": "이러한 토큰은 미국의 주요 중앙 거래소에서 거래되지 않으며 Uniswap에서 자주 스왑되지 않습니다.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} 은 미국의 주요 중앙 거래소에서 거래되지 않거나 Uniswap에서 자주 스왑되지 않습니다.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}}은(는) 매수 시 {{buyFeePercent}}, 매도 시 {{sellFeePercent}}의 수수료를 부과합니다.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}}은(는) 매수 시 {{feePercent}}의 수수료를 부과합니다.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}}은(는) 매도 시 {{feePercent}}의 수수료를 부과합니다.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}}은(는) 매수 또는 매도 시 수수료를 부과합니다.",
+ "token.safetyLevel.blocked.header": "사용 불가",
"token.safetyLevel.blocked.message": "Uniswap Wallet을 사용하여 이 토큰을 트랜잭션할 수 없습니다.",
+ "token.safetyLevel.medium.header": "주의",
+ "token.safetyLevel.medium.message": "이 토큰은 미국의 주요 중앙화된 거래소에서 거래되지 않습니다. 트랜잭션하기 전에 항상 스스로 조사를 수행하십시오.",
"token.safetyLevel.medium.message.plural": "이 토큰은 미국의 주요 중앙화 거래소에서 거래되지 않습니다. 진행하기 전에 항상 직접 조사하세요.",
+ "token.safetyLevel.strong.header": "경고",
+ "token.safetyLevel.strong.message": "이 토큰은 미국의 주요 중앙 거래소에서 거래되지 않으며 Uniswap에서 자주 스왑되지 않습니다. 트랜잭션하기 전에 항상 스스로 조사를 수행하십시오.",
"token.selector.search.error": "검색결과를 로드할 수 없습니다.",
"token.stats.fullyDilutedValuation": "완전희석가치 (Fdv)",
"token.stats.marketCap": "시가총액",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}}의 다른 토큰",
"tokens.selector.section.recent": "최근 검색어",
"tokens.selector.section.search": "검색 결과",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "당신의 토큰",
"tokens.table.search.placeholder.pools": "풀 검색",
"tokens.table.search.placeholder.tokens": "토큰 검색",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "네트워크 토큰 잔액 낮음",
"transaction.watcher.error.cancel": "트랜잭션을 취소할 수 없습니다.",
"transaction.watcher.error.status": "트랜잭션 상태를 확인하는 중 오류가 발생했습니다.",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": "는 더 나은 가격과 가스 없는 스왑을 위해 유동성 원천을 집계합니다.",
"uniswapx.description": "UniswapX는 더 나은 가격과 가스 프리 스왑을 위해 유동성 소스를 통합합니다.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "UniswapX포함",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "UniswapX로 스왑하는 방법에 대해 자세히 알아보세요.",
diff --git a/packages/uniswap/src/i18n/locales/translations/ms-MY.json b/packages/uniswap/src/i18n/locales/translations/ms-MY.json
index e5a44c555ea..db78e1f6228 100644
--- a/packages/uniswap/src/i18n/locales/translations/ms-MY.json
+++ b/packages/uniswap/src/i18n/locales/translations/ms-MY.json
@@ -176,6 +176,7 @@
"common.allTime": "Setiap masa",
"common.amount.label": "Jumlah",
"common.amountDeposited.label": "{{amount}} Didepositkan",
+ "common.amountInput.placeholder": "Jumlah input",
"common.and": "dan",
"common.app": "Aplikasi",
"common.approval.cancelled": "Kelulusan dibatalkan",
@@ -312,7 +313,6 @@
"common.currency": "mata wang",
"common.currentPrice": "Harga semasa",
"common.currentPrice.label": "Harga semasa:",
- "common.currentPrice.unavailable": "Harga semasa tidak tersedia",
"common.custom": "Adat",
"common.customRange": "Julat tersuai",
"common.dataOutdated": "Data mungkin sudah lapuk",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Yuran Diperolehi:",
"common.feesEarnedPerBase": "{{symbolA}} setiap {{symbolB}}",
"common.fetchingRoute": "Mengambil laluan",
+ "common.flag": "Bendera",
"common.floor": "Lantai",
"common.floorPrice": "Harga lantai",
"common.for": "Untuk",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Luluskan dalam dompet",
"common.wallet.label": "Dompet",
"common.walletForSwapping": "Dompet yang dibina untuk bertukar. Tersedia pada iOS dan Android.",
- "common.warning": "Amaran",
"common.webApp": "Apl web",
"common.website": "laman web",
"common.whyApprove": "Mengapa saya perlu meluluskan token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Tidak dapat memuatkan token untuk dibeli",
"fiatOnRamp.error.max": "Maksimum {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "Tiada petikan ditemui.",
"fiatOnRamp.error.unavailable": "Perkhidmatan ini tidak tersedia di rantau anda",
"fiatOnRamp.error.unsupported": "Tidak disokong di wilayah",
"fiatOnRamp.error.usd": "Hanya tersedia untuk pembelian dalam USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} untuk {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Tiada petikan ditemui",
"fiatOnRamp.purchasedOn": "Dibeli pada {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Anda akan terus ke portal penyedia untuk melihat yuran yang berkaitan dengan transaksi anda.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, dan pilihan lain",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Harga:",
"migrate.v2Description": "Alat ini akan memindahkan kecairan {{source}} anda kepada V3 dengan selamat. Proses ini tidak boleh dipercayai sepenuhnya terima kasih kepada <0>kontrak migrasi Uniswap0> ↗",
"migrate.v2Instruction": "Untuk setiap kumpulan yang ditunjukkan di bawah, klik migrasi untuk mengalih keluar kecairan anda daripada Uniswap V2 dan mendepositkannya ke dalam Uniswap V3.",
+ "migrate.v2Subtitle": "Pindahkan token kecairan anda daripada Uniswap V2 kepada Uniswap V3.",
"migrate.v2Title": "Pindahkan kecairan V2",
"migrate.v3Price": "V3 {{sym}} Harga:",
"mint.v3.input.invalidPrice.error": "Input harga tidak sah",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Beri nama dompet anda",
"onboarding.notification.permission.message": "Untuk menerima pemberitahuan, hidupkan pemberitahuan untuk Uniswap Wallet dalam tetapan peranti anda.",
"onboarding.notification.permission.title": "Kebenaran pemberitahuan",
- "onboarding.notification.subtitle": "Kekal dikemas kini tentang status transaksi dan perubahan harga utama untuk token kegemaran",
- "onboarding.notification.title": "Hidupkan pemberitahuan",
+ "onboarding.notification.subtitle": "Dapatkan pemberitahuan apabila pemindahan, pertukaran dan kelulusan anda selesai.",
+ "onboarding.notification.title": "Hidupkan pemberitahuan tolak",
"onboarding.passkey.account.protection": "Akaun anda dilindungi oleh storan kata laluan selamat anda sendiri.",
"onboarding.passkey.biometric.scan": "Telefon, tablet atau penyemak imbas — hanya imbas biometrik anda dan anda akan dilog masuk.",
"onboarding.passkey.create": "Cipta kunci laluan anda",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Sambung ke dompet untuk melihat kecairan anda.",
"pool.liquidity.data.error.message": "Terdapat ralat semasa mengambil data yang diperlukan untuk transaksi anda.",
"pool.liquidity.earn.fee": "Penyedia kecairan memperoleh yuran 0.3% pada semua dagangan yang berkadar dengan bahagian kumpulan mereka. Yuran ditambahkan pada kumpulan, terakru dalam masa nyata dan boleh dituntut dengan mengeluarkan kecairan anda.",
- "pool.liquidity.outOfSync": "Kolam dan ketidakpadanan harga pasaran",
- "pool.liquidity.outOfSync.message": "Harga dalam kumpulan ini berbeza dengan harga pasaran token yang dipilih. Laraskan julat harga anda dengan sewajarnya atau tunggu kumpulan untuk mengimbangi semula untuk mengelakkan kerugian.",
+ "pool.liquidity.outOfSync": "Harga kolam tidak segerak",
+ "pool.liquidity.outOfSync.message": "Harga dalam kumpulan ini tidak selari dengan pasaran semasa. Menambah kecairan boleh mengakibatkan kehilangan dana.",
"pool.liquidity.ownershipWarning.message": "Anda bukan pemilik jawatan LP ini. Anda tidak akan dapat menarik balik kecairan daripada kedudukan ini melainkan anda memiliki alamat berikut: {{ownerAddress}}",
"pool.liquidity.rewards": "Ganjaran pembekal kecairan",
"pool.liquidity.taxWarning": "Cukai token",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Harga kolam ini adalah dalam julat pilihan anda. Jawatan anda sedang memperoleh yuran.",
"pool.rates": "Kadar",
"pool.ratioTokenToPrice": "Nisbah token yang anda tambah akan menetapkan harga kumpulan ini.",
- "pool.refresh.prices": "Muat semula harga",
"pool.removeLiquidity": "Keluarkan kecairan",
"pool.rewardsPool.label": "Token kumpulan dalam kumpulan ganjaran:",
"pool.selectedRange": "Julat yang dipilih",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Cangkuk ialah ciri lanjutan yang membolehkan kumpulan berinteraksi dengan kontrak pintar, membuka kunci pelbagai keupayaan. Berhati-hati apabila menambah cangkuk, kerana sesetengahnya mungkin berniat jahat atau menyebabkan akibat yang tidak diingini.",
"position.addingHook": "Menambah cangkuk",
"position.addingHook.disclaimer": "Menambah cangkuk mungkin mempunyai akibat yang tidak diingini. Lakukan penyelidikan anda dan teruskan atas risiko anda sendiri.",
- "position.addingHook.hideProperties": "Sembunyikan sifat",
"position.addingHook.invalidAddress": "Masukkan alamat cangkuk yang sah",
"position.addingHook.viewProperties": "Lihat hartanah",
"position.appearHere": "Kedudukan anda akan dipaparkan di sini.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Didepositkan {{currencySymbol}}",
"position.hook.disclaimer": "Saya faham risikonya.",
"position.hook.liquidityWarning": "Bendera ini boleh menyebabkan kumpulan menyekat penambahan kecairan baharu. Transaksi anda mungkin kembali.",
- "position.hook.removeWarning": "Boleh menyebabkan dana anda dikunci atau menghalang anda daripada mengutip yuran.",
+ "position.hook.removeWarning": "Bendera ini boleh menyebabkan dana anda dikunci atau menyekat anda daripada mengutip yuran.",
"position.hook.swapWarning": "Bendera ini boleh membenarkan pengguna yang canggih untuk memanfaatkan kecairan Just-In-Time dengan lebih mudah yang menyebabkan yuran yang diperolehi lebih rendah.",
"position.hook.warningHeader": "cangkuk berisiko tinggi dikesan",
"position.hook.warningInfo": "Kami telah mengenal pasti potensi risiko dengan cangkuk ini. Sila semak bendera dan sahkan bahawa ini adalah cangkuk yang anda mahu gunakan sebelum meneruskan.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Lulus dan tukar",
"swap.approveInWallet": "Luluskan dalam dompet anda",
"swap.balance.amount": "Baki: {{amount}}",
- "swap.bestRoute.cost": "Laluan paling cekap dianggarkan bernilai ~{{gasPrice}} dalam kos rangkaian. ",
+ "swap.bestRoute.cost": "Kos laluan harga terbaik ~{{gasPrice}} dalam gas. ",
+ "swap.bestRoute.cost.v4": "Kos laluan optimum ~{{gasPrice}} dalam gas. ",
"swap.bridging.estimatedTime": "Anggaran masa",
"swap.bridging.title": "Bertukar merentasi rangkaian",
"swap.bridging.warning.description": "Anda bertukar daripada {{fromNetwork}} kepada {{toNetwork}}. Ini juga dikenali sebagai \"merapatkan\", yang memindahkan token anda dari satu rangkaian ke rangkaian yang lain.",
@@ -1868,16 +1866,15 @@
"swap.review": "Tukar ulasan",
"swap.review.summary": "Anda bertukar-tukar",
"swap.reviewLimit": "Had semakan",
- "swap.route.optimizedGasCost": "Laluan ini mempertimbangkan laluan berpecah, berbilang lompatan dan kos rangkaian bagi setiap langkah.",
+ "swap.route.optimizedGasCost": "Laluan ini mengoptimumkan jumlah output anda dengan mempertimbangkan laluan berpecah, berbilang lompatan dan kos rangkaian bagi setiap langkah.",
"swap.settings.deadline.tooltip": "Urus niaga anda akan kembali jika ia belum selesai lebih daripada tempoh masa ini. (Maksimum: 3 hari).",
"swap.settings.deadline.warning": "Tarikh akhir yang tinggi",
"swap.settings.protection.description": "Dengan perlindungan swap dihidupkan, urus niaga Ethereum anda akan dilindungi daripada serangan sandwic, dengan mengurangkan kemungkinan kegagalan.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Rangkaian",
"swap.settings.protection.subtitle.unavailable": "Tidak tersedia pada {{chainName}}",
"swap.settings.protection.title": "Perlindungan Pertukaran",
- "swap.settings.routingPreference.option.default.description": "Memilih pilihan ini mengenal pasti laluan paling cekap untuk pertukaran anda.",
- "swap.settings.routingPreference.option.default.description.preV4": "Pelanggan Uniswap memilih pemfaktoran pilihan perdagangan termurah dalam harga dan kos rangkaian.",
- "swap.settings.routingPreference.option.default.tooltip": "Satu laluan dikenal pasti dengan mengambil kira v2, v3 dan kumpulan v4 tertentu, mengambil kira dalam anggaran impak harga dan kos rangkaian.",
+ "swap.settings.routingPreference.option.default.description": "Pelanggan Uniswap memilih pemfaktoran pilihan perdagangan termurah dalam harga dan kos rangkaian.",
+ "swap.settings.routingPreference.option.default.description.v4": "Pelanggan Uniswap memilih pemfaktoran pilihan perdagangan yang optimum dalam harga dan kos rangkaian.",
"swap.settings.routingPreference.option.v2.title": "kolam v2",
"swap.settings.routingPreference.option.v3.title": "kolam v3",
"swap.settings.routingPreference.option.v4.title": "kolam v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Sentiasa buat kajian anda",
"token.safety.warning.blocked.description.default_one": "Anda tidak boleh menukar token ini menggunakan Apl Uniswap.",
"token.safety.warning.blocked.description.default_other": "Anda tidak boleh berdagang token ini menggunakan Apl Uniswap.",
+ "token.safety.warning.blocked.description.named": "Anda tidak boleh berdagang {{tokenSymbol}} menggunakan Apl Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Jangan tunjukkan amaran ini kepada saya lagi",
"token.safety.warning.doYourOwnResearch": "Sentiasa lakukan penyelidikan anda sendiri sebelum meneruskan.",
"token.safety.warning.feeDescription": "Mengecas apabila {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} mungkin bukan token yang anda ingin tukar.",
"token.safety.warning.malicious.title": "Token berniat jahat dikesan",
"token.safety.warning.mayResultInLoss": "Pertukaran itu boleh mengakibatkan kehilangan dana.",
+ "token.safety.warning.medium.heading.default_one": "Token ini tidak didagangkan pada bursa terpusat AS yang terkemuka.",
+ "token.safety.warning.medium.heading.default_other": "Token ini tidak didagangkan di bursa terpusat AS yang terkemuka.",
+ "token.safety.warning.medium.heading.default_one_also": "Token ini juga tidak didagangkan pada bursa terpusat AS yang terkemuka.",
+ "token.safety.warning.medium.heading.default_other_also": "Token ini juga tidak didagangkan di bursa terpusat AS yang terkemuka.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} tidak didagangkan di bursa terpusat AS terkemuka.",
"token.safety.warning.notListedOnExchanges": "Tidak disenaraikan di bursa AS terkemuka",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} telah dibenderakan sebagai tidak boleh dijual.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} telah dibenderakan sebagai spam oleh Blockaid.",
"token.safety.warning.spam.title": "Token spam dikesan",
"token.safety.warning.spamsUsers": "Pengguna spam",
+ "token.safety.warning.strong.heading.default_one": "Token ini tidak didagangkan di bursa terpusat AS terkemuka atau sering ditukar di Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Token ini tidak didagangkan di bursa terpusat AS terkemuka atau sering ditukar di Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} tidak didagangkan di bursa terpusat AS terkemuka atau sering ditukar di Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} mengenakan bayaran {{buyFeePercent}} apabila dibeli dan {{sellFeePercent}} apabila dijual.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} mengenakan bayaran {{feePercent}} apabila dibeli.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} mengenakan bayaran {{feePercent}} apabila dijual.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} mengenakan bayaran apabila dibeli atau dijual.",
+ "token.safetyLevel.blocked.header": "Tidak tersedia",
"token.safetyLevel.blocked.message": "Anda tidak boleh menukar token ini menggunakan Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Berhati-hati",
+ "token.safetyLevel.medium.message": "Token ini tidak didagangkan di bursa terpusat AS yang terkemuka. Sentiasa lakukan penyelidikan anda sendiri sebelum meneruskan.",
"token.safetyLevel.medium.message.plural": "Token ini tidak didagangkan di bursa terpusat AS yang terkemuka. Sentiasa lakukan penyelidikan anda sendiri sebelum meneruskan.",
+ "token.safetyLevel.strong.header": "Amaran",
+ "token.safetyLevel.strong.message": "Token ini tidak didagangkan di bursa terpusat AS terkemuka atau sering ditukar di Uniswap. Sentiasa lakukan penyelidikan anda sendiri sebelum meneruskan.",
"token.selector.search.error": "Tidak dapat memuatkan hasil carian",
"token.stats.fullyDilutedValuation": "Penilaian Dicairkan Sepenuhnya",
"token.stats.marketCap": "Modal Pasaran",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Token lain pada {{network}}",
"tokens.selector.section.recent": "Carian terkini",
"tokens.selector.section.search": "Keputusan Carian",
- "tokens.selector.section.trending": "Token mengikut volum 24H",
"tokens.selector.section.yours": "Token anda",
"tokens.table.search.placeholder.pools": "Kolam carian",
"tokens.table.search.placeholder.tokens": "Cari token",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Baki token rangkaian yang rendah",
"transaction.watcher.error.cancel": "Tidak dapat membatalkan transaksi",
"transaction.watcher.error.status": "Ralat semasa menyemak status transaksi",
- "unichain.promotion.cold.description": "Pertukaran lebih cepat. Yuran yang lebih rendah. Unichain ialah rumah untuk DeFi.",
- "unichain.promotion.cold.title": "Memperkenalkan Unichain",
- "unichain.promotion.modal.description": "Pertukaran lebih cepat. Yuran yang lebih rendah. Unichain ialah rumah untuk kecairan silang rantaian.",
- "unichain.promotion.modal.detail.costs": "Kos yang lebih rendah untuk mencipta kumpulan & mengurus jawatan.",
- "unichain.promotion.modal.detail.fees": "Jimat 95% pada yuran berbanding Ethereum.",
- "unichain.promotion.modal.detail.instant": "Tukar serta merta",
- "unichain.promotion.warm.description": "Tukar token kegemaran anda dengan lebih pantas dan dengan kos gas yang lebih rendah.",
- "unichain.promotion.warm.title": "Mula bertukar pada Unichain",
"uniswapX.aggregatesLiquidity": " mengagregatkan sumber kecairan untuk harga yang lebih baik dan pertukaran bebas gas.",
"uniswapx.description": "UniswapX mengagregatkan sumber kecairan untuk harga yang lebih baik dan pertukaran bebas gas.",
- "uniswapx.included": "Termasuk UniswapX",
+ "uniswapx.included": "Termasuk UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Ketahui lebih lanjut tentang bertukar dengan UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/nl-NL.json b/packages/uniswap/src/i18n/locales/translations/nl-NL.json
index e19d91bf7e9..e0995621fcd 100644
--- a/packages/uniswap/src/i18n/locales/translations/nl-NL.json
+++ b/packages/uniswap/src/i18n/locales/translations/nl-NL.json
@@ -176,6 +176,7 @@
"common.allTime": "Altijd",
"common.amount.label": "Bedrag",
"common.amountDeposited.label": "{{amount}} gestort",
+ "common.amountInput.placeholder": "Invoerbedrag",
"common.and": "en",
"common.app": "App",
"common.approval.cancelled": "Goedkeuring geannuleerd",
@@ -312,7 +313,6 @@
"common.currency": "Valuta",
"common.currentPrice": "Huidige prijs",
"common.currentPrice.label": "Huidige prijs:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Aangepast",
"common.customRange": "Aangepast bereik",
"common.dataOutdated": "De data zijn mogelijk verouderd",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "In {{symbol}} verdiende vergoedingen:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Bezig route op te halen",
+ "common.flag": "Markering",
"common.floor": "Bodem",
"common.floorPrice": "Bodemprijs",
"common.for": "Voor",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Goedkeuren in wallet",
"common.wallet.label": "Wallet",
"common.walletForSwapping": "De wallet gemaakt om te swappen. Beschikbaar op iOS en Android.",
- "common.warning": "Warning",
"common.webApp": "Web-app",
"common.website": "Website",
"common.whyApprove": "Waarom moet ik een token goedkeuren?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Kon tokens om te kopen niet laden",
"fiatOnRamp.error.max": "Maximum {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Deze service is niet beschikbaar in je regio",
"fiatOnRamp.error.unsupported": "Niet ondersteund in regio",
"fiatOnRamp.error.usd": "Alleen verkrijgbaar in USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} voor {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Gekocht op {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Je gaat verder naar het portaal van de aanbieder om de kosten te bekijken die aan je transactie verbonden zijn.",
"fiatOnRamp.quote.type.list": "{{optionsList}} en andere opties",
@@ -1057,13 +1055,13 @@
"migrate.connectAccount": "Je moet een account koppelen.",
"migrate.connectWallet": "Maak verbinding met een wallet om je V2-liquiditeit te bekijken.",
"migrate.contract": "Uniswap-migratiecontract",
- "migrate.firstLP": "Je bent de eerste liquiditeitsaanbieder voor deze Uniswap V3-pool. Je liquiditeit zal migreren tegen de huidige prijs van {{source}}.",
+ "migrate.firstLP": "Je bent de eerste liquiditeitsverschaffer voor deze Uniswap V3-pool. Je liquiditeit zal migreren tegen de huidige prijs van {{source}}.",
"migrate.highGasCost": "Je transactiekosten zullen veel hoger zijn, omdat het ook de gaskosten bevat om de pool te creëren.",
"migrate.invalidRange": "Ongeldig bereik geselecteerd. De minimumprijs moet lager zijn dan de maximumprijs.",
"migrate.lpNFT": "{{symA}}/{{symB}} LP-NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP-tokens",
"migrate.migrating": "Migreren",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Zie je een van je v2-posities niet? Importeer deze.",
"migrate.noV2Liquidity": "Geen V2-liquiditeit gevonden.",
"migrate.positionNoFees": "Je positie zal geen vergoedingen opleveren of in transacties worden gebruikt totdat de marktprijs binnen je bereik komt.",
"migrate.priceDifference": "Prijsverschil: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Prijs:",
"migrate.v2Description": "Deze tool migreert je liquiditeit van {{source}} veilig naar V3. Het proces is volledig betrouwbaar dankzij het <0>Uniswap-migratiecontract0> ↗",
"migrate.v2Instruction": "Voor elke hieronder weergegeven pool klik je op Migreren om je liquiditeit uit Uniswap V2 te verwijderen en deze in Uniswap V3 te storten.",
+ "migrate.v2Subtitle": "Migreer je liquiditeitstokens van Uniswap V2 naar Uniswap V3.",
"migrate.v2Title": "Migreer V2-liquiditeit",
"migrate.v3Price": "Prijs van {{sym}} in V3:",
"mint.v3.input.invalidPrice.error": "Ongeldige prijsinvoer",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Geef je wallet een naam",
"onboarding.notification.permission.message": "Om meldingen te ontvangen, zet je meldingen voor Uniswap Wallet aan in de instellingen van je apparaat.",
"onboarding.notification.permission.title": "Toestemming voor meldingen",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Krijg een melding wanneer je overboekingen, swaps en goedkeuringen zijn afgerond.",
+ "onboarding.notification.title": "Schakel pushmeldingen in",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1364,7 +1363,7 @@
"pool.apr": "APR",
"pool.apr.description": "Op jaarbasis gebaseerd op vergoedingen voor 1 dag",
"pool.areCreating": "Je maakt een pool aan",
- "pool.areFirst": "Je bent de eerste liquiditeitsaanbieder.",
+ "pool.areFirst": "Je bent de eerste liquiditeitsverschaffer.",
"pool.back": "Terug naar de pool",
"pool.balances": "Poolsaldi",
"pool.closedCTA.description": "Je kunt deze zien door het filter bovenaan de pagina te gebruiken.",
@@ -1404,11 +1403,11 @@
"pool.limitFluctuation.warning": "Houd er rekening mee dat de uitvoering van limieten kan variëren op basis van realtime marktfluctuaties en congestie op het Ethereum-netwerk. Limieten worden mogelijk niet exact uitgevoerd wanneer tokens de opgegeven prijs bereiken.",
"pool.liquidity.connectToAdd": "Maak verbinding met een wallet om je liquiditeit te bekijken.",
"pool.liquidity.data.error.message": "Er is een fout opgetreden bij het ophalen van de gegevens die nodig zijn voor je transactie.",
- "pool.liquidity.earn.fee": "Liquiditeitsaanbieders verdienen een vergoeding van 0,3% op alle transacties, proportioneel aan hun aandeel in de pool. Vergoedingen worden toegevoegd aan de pool, ontstaan in realtime en kunnen worden opgeëist door je liquiditeit op te nemen.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.earn.fee": "Liquiditeitsverschaffers verdienen een vergoeding van 0,3% op alle transacties, proportioneel aan hun aandeel in de pool. Vergoedingen worden toegevoegd aan de pool, ontstaan in realtime en kunnen worden opgeëist door je liquiditeit op te nemen.",
+ "pool.liquidity.outOfSync": "Poolprijzen niet synchroon",
+ "pool.liquidity.outOfSync.message": "De prijzen in deze pool zijn niet gesynchroniseerd met de huidige markt. Als je liquiditeit toevoegt, kan dat resulteren in geldverlies.",
"pool.liquidity.ownershipWarning.message": "Je bent niet de eigenaar van deze LP-positie. Je kunt de liquiditeit uit deze positie niet opnemen tenzij je eigenaar bent van het volgende adres: {{ownerAddress}}",
- "pool.liquidity.rewards": "Beloningen voor liquiditeitsaanbieders",
+ "pool.liquidity.rewards": "Beloningen voor liquiditeitsverschaffers",
"pool.liquidity.taxWarning": "Tokenbelastingen",
"pool.liquidity.taxWarning.message": "Op één of meer van deze tokens zijn overdrachtsbelastingen van toepassing. Het toevoegen van liquiditeit met V3 kan resulteren in geldverlies. Probeer in plaats daarvan V2 te gebruiken.",
"pool.liquidityPoolFeesNotice": "Wanneer je liquiditeit toevoegt, ontvang je pooltokens die je positie vertegenwoordigen. Deze tokens verdienen automatisch vergoedingen, proportioneel aan jouw aandeel in de pool, en kunnen op elk moment worden ingewisseld.",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "De prijs van deze pool ligt binnen het door jou geselecteerde bereik. Voor je positie worden momenteel vergoedingen gegenereerd.",
"pool.rates": "Tarieven",
"pool.ratioTokenToPrice": "De verhouding van tokens die je toevoegt, bepaalt de prijs van deze pool.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Verwijder liquiditeit",
"pool.rewardsPool.label": "Pooltokens in beloningspool:",
"pool.selectedRange": "Geselecteerd bereik",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hooks zijn een geavanceerde functie die het mogelijk maken voor pools om te interageren met smartcontracten, waardoor verschillende mogelijkheden beschikbaar worden. Wees voorzichtig bij het toevoegen van hooks, aangezien sommige kwaadaardig kunnen zijn of onbedoelde gevolgen kunnen hebben.",
"position.addingHook": "Hook toevoegen",
"position.addingHook.disclaimer": "Het toevoegen van hooks kan onvoorziene gevolgen hebben. Doe je onderzoek en ga verder op eigen risico.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Voer een geldig hook-adres in",
"position.addingHook.viewProperties": "Eigenschappen bekijken",
"position.appearHere": "Je positie wordt hier weergegeven.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "{{currencySymbol}} gestort",
"position.hook.disclaimer": "Ik begrijp de risico´s.",
"position.hook.liquidityWarning": "Deze melding kan ervoor zorgen dat de pool het toevoegen van nieuwe liquiditeit blokkeert. Je transactie kan worden teruggedraaid.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Deze melding kan ervoor zorgen dat je geld wordt vergrendeld of dat je geen vergoedingen kunt innen.",
"position.hook.swapWarning": "Met deze melding kunnen geavanceerde gebruikers gemakkelijker just-in-time-liquiditeit benutten, wat resulteert in lagere vergoedingen.",
"position.hook.warningHeader": "Hoogrisico-hook gedetecteerd",
"position.hook.warningInfo": "We hebben mogelijke risico's met deze hook geïdentificeerd. Controleer de meldingen en verifieer dat dit de hook is die je wilt gebruiken voordat je verdergaat.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Goedkeuren en swappen",
"swap.approveInWallet": "In je wallet goedkeuren",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "De beste prijsroute kost ongeveer {{gasPrice}} aan gas.",
+ "swap.bestRoute.cost.v4": "De optimale route kost ongeveer {{gasPrice}} aan benzine. ",
"swap.bridging.estimatedTime": "Geschatte tijd",
"swap.bridging.title": "Swappen tussen netwerken",
"swap.bridging.warning.description": "Je swapt van {{fromNetwork}} naar {{toNetwork}}. Dit staat ook bekend als bridgen, waarbij je tokens van het ene netwerk naar het andere worden verplaatst.",
@@ -1799,7 +1797,7 @@
"swap.button.unwrap": "Unwrappen",
"swap.button.wrap": "Wrappen",
"swap.buy.countryModal.placeholder": "Zoeken op land of regio",
- "swap.cancel.cannotExecute_one": "Het kan zijn dat je swap wordt uitgevoerd voordat de annulering is verwerkt. Je netwerkkosten kunnen niet worden terugbetaald. Wil je doorgaan?",
+ "swap.cancel.cannotExecute_one": "Your swap could execute before cancellation is processed. Your network costs cannot be refunded. Do you wish to proceed?",
"swap.cancel.cannotExecute_other": "Het kan zijn dat je swaps worden uitgevoerd voordat de annulering is verwerkt. Je netwerkkosten kunnen niet worden terugbetaald. Wil je doorgaan?",
"swap.confirmLimit": "Limiet bevestigen",
"swap.confirmSwap": "Swap bevestigen",
@@ -1843,7 +1841,7 @@
"swap.form.warning.output.fotFees": "Vanwege de tokenkosten van {{fotCurrencySymbol}} kunnen swapbedragen alleen via het invoerveld worden ingevoerd",
"swap.form.warning.output.fotFees.fallback": "Vanwege tokenkosten kunnen ruilbedragen alleen via het invoerveld worden ingevoerd",
"swap.form.warning.restore": "Herstel je wallet om te swappen",
- "swap.frontrun.warning": "Je transactie kan worden gefrontrund, wat kan resulteren in een ongunstige trade.",
+ "swap.frontrun.warning": "Je transactie kan worden gefrontrund, wat kan resulteren in een ongunstige transactie.",
"swap.header.viewOnly": "Alleen-lezen",
"swap.impactOfTrade": "De impact die je transactie heeft op de marktprijs van deze pool.",
"swap.inputEstimated.atMost": "De input wordt geschat. Je verkoopt maximaal , anders wordt de transactie teruggedraaid.",
@@ -1868,16 +1866,15 @@
"swap.review": "Swap controleren",
"swap.review.summary": "Je bent aan het swappen",
"swap.reviewLimit": "Limiet controleren",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.",
"swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).",
"swap.settings.deadline.warning": "High deadline",
"swap.settings.protection.description": "Met swapbescherming ingeschakeld, worden je Ethereum-transacties beschermd tegen sandwichaanvallen, met verminderde kans op mislukkingen.",
"swap.settings.protection.subtitle.supported": "{{chainName}}-netwerk",
"swap.settings.protection.subtitle.unavailable": "Niet beschikbaar op {{chainName}}",
"swap.settings.protection.title": "Swapbescherming",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "De Uniswap Client selecteert de goedkoopste tradingoptie, waarbij rekening wordt gehouden met de prijs en netwerkkosten.",
+ "swap.settings.routingPreference.option.default.description.v4": "De Uniswap Client selecteert de optimale tradingoptie, waarbij rekening wordt gehouden met de prijs en netwerkkosten.",
"swap.settings.routingPreference.option.v2.title": "v2-pools",
"swap.settings.routingPreference.option.v3.title": "v3-pools",
"swap.settings.routingPreference.option.v4.title": "v4-pools",
@@ -1890,8 +1887,8 @@
"swap.settings.slippage.output.message": "Als de prijs verder verschuift, wordt je transactie geannuleerd. Hieronder staat het maximale bedrag dat je zou moeten uitgeven.",
"swap.settings.slippage.output.spend.title": "Besteed maximaal",
"swap.settings.slippage.warning": "Very high slippage",
- "swap.settings.slippage.warning.description": "Een slippage van meer dan 20% zal waarschijnlijk resulteren in een ongunstige trade. Verlaag je instellingen om het risico op front-running te verminderen.",
- "swap.settings.slippage.warning.hover": "Dit kan een ongunstige trade tot gevolg hebben. Probeer je slippage-instellingen te verlagen.",
+ "swap.settings.slippage.warning.description": "Slippage above 20% is likely to result in an unfavorable trade. To reduce the risk being front-run, lower your settings.",
+ "swap.settings.slippage.warning.hover": "Dit kan een ongunstige handel tot gevolg hebben. Probeer de slippage-instellingen te verlagen.",
"swap.settings.slippage.warning.max": "Voer een waarde in die kleiner is dan {{maxSlippageTolerance}}",
"swap.settings.slippage.warning.message": "Slippage kan groter zijn dan nodig",
"swap.settings.slippage.warning.min": "Voer een waarde in die groter is dan 0",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Doe altijd je eigen onderzoek",
"token.safety.warning.blocked.description.default_one": "Je kunt deze token niet met de Uniswap-app traden.",
"token.safety.warning.blocked.description.default_other": "Je kunt deze tokens niet met de Uniswap-app traden.",
+ "token.safety.warning.blocked.description.named": "Je kunt {{tokenSymbol}} niet met de Uniswap-app traden.",
"token.safety.warning.dontShowWarningAgain": "Laat deze waarschuwing niet meer zien",
"token.safety.warning.doYourOwnResearch": "Doe altijd je eigen onderzoek voordat je verdergaat.",
"token.safety.warning.feeDescription": "Brengt in rekening bij {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} is mogelijk niet het token dat je wilt swappen.",
"token.safety.warning.malicious.title": "Schadelijke token gedetecteerd",
"token.safety.warning.mayResultInLoss": "Als je deze token swapt, kan dit leiden tot geldverlies.",
+ "token.safety.warning.medium.heading.default_one": "Deze token wordt niet op toonaangevende gecentraliseerde Amerikaanse beurzen verhandeld.",
+ "token.safety.warning.medium.heading.default_other": "Deze tokens worden niet op toonaangevende gecentraliseerde Amerikaanse beurzen verhandeld.",
+ "token.safety.warning.medium.heading.default_one_also": "Deze token wordt ook niet op toonaangevende gecentraliseerde Amerikaanse beurzen verhandeld.",
+ "token.safety.warning.medium.heading.default_other_also": "Deze tokens worden ook niet op toonaangevende gecentraliseerde Amerikaanse beurzen verhandeld.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} wordt niet op toonaangevende gecentraliseerde Amerikaanse beurzen verhandeld.",
"token.safety.warning.notListedOnExchanges": "Niet genoteerd bij toonaangevende Amerikaanse beurzen",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} is gemarkeerd als onverkoopbaar.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Blockaid heeft {{tokenSymbol}} als spam gemarkeerd.",
"token.safety.warning.spam.title": "Spam-token gedetecteerd",
"token.safety.warning.spamsUsers": "Spamt gebruikers",
+ "token.safety.warning.strong.heading.default_one": "Deze token wordt niet verhandeld op toonaangevende gecentraliseerde Amerikaanse beurzen en ook niet vaak geswapt op Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Deze tokens worden niet verhandeld op toonaangevende Amerikaanse gecentraliseerde beurzen en worden ook niet vaak geswapt op Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} wordt niet verhandeld op toonaangevende Amerikaanse gecentraliseerde beurzen en worden ook niet vaak geswapt op Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} rekent transactiekosten van {{buyFeePercent}} bij aankoop en {{sellFeePercent}} bij verkoop.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} rekent transactiekosten van {{feePercent}} bij de aankoop.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} rekent transactiekosten van {{feePercent}} bij de verkoop.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} charges a fee when bought or sold.",
+ "token.safetyLevel.blocked.header": "Niet beschikbaar",
"token.safetyLevel.blocked.message": "Je kunt deze token niet verhandelen via de Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Let op",
+ "token.safetyLevel.medium.message": "Deze token wordt niet op toonaangevende Amerikaanse gecentraliseerde beurzen verhandeld. Doe altijd je eigen onderzoek voordat je verdergaat.",
"token.safetyLevel.medium.message.plural": "Deze tokens worden niet op toonaangevende Amerikaanse gecentraliseerde beurzen verhandeld. Doe altijd uw eigen onderzoek voordat u verdergaat.",
+ "token.safetyLevel.strong.header": "Waarschuwing",
+ "token.safetyLevel.strong.message": "Deze token wordt niet op toonaangevende Amerikaanse gecentraliseerde beurzen verhandeld of regelmatig op Uniswap geswapt. Doe altijd je eigen onderzoek voordat je verdergaat.",
"token.selector.search.error": "Kan zoekresultaten niet laden",
"token.stats.fullyDilutedValuation": "Volledig verwaterde waardering (FDV)",
"token.stats.marketCap": "Market cap",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Andere tokens op {{network}}",
"tokens.selector.section.recent": "Recente zoekopdrachten",
"tokens.selector.section.search": "Zoekresultaten",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Je tokens",
"tokens.table.search.placeholder.pools": "Pools zoeken",
"tokens.table.search.placeholder.tokens": "Tokens zoeken",
@@ -2133,7 +2142,7 @@
"transaction.details.dappName": "App",
"transaction.details.from": "Van",
"transaction.details.networkFee": "Netwerkkosten",
- "transaction.details.providerFee": "Aanbiederskosten",
+ "transaction.details.providerFee": "Provider fee",
"transaction.details.swapRate": "Tarief",
"transaction.details.transaction": "Transactie",
"transaction.details.uniswapFee": "Kosten ({{ feePercent }}%)",
@@ -2190,7 +2199,7 @@
"transaction.status.sale.canceled": "Canceled sale",
"transaction.status.sale.canceling": "Canceling sale",
"transaction.status.sale.failedOn": "Sale Failed via {{serviceProvider}}",
- "transaction.status.sale.pendingOn": "Verkopen via {{serviceProvider}}",
+ "transaction.status.sale.pendingOn": "Selling via {{serviceProvider}}",
"transaction.status.sale.successOn": "Sold via {{serviceProvider}}",
"transaction.status.sell.canceled": "Verkoop geannuleerd",
"transaction.status.sell.canceling": "Bezig verkoop te annuleren",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Laag netwerktokensaldo",
"transaction.watcher.error.cancel": "Kon transactie niet annuleren",
"transaction.watcher.error.status": "Fout bij het controleren van de transactiestatus",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " verzamelt liquiditeitsbronnen voor betere prijzen en gasvrij swappen.",
"uniswapx.description": "UniswapX bundelt liquiditeitsbronnen voor betere prijzen en gasvrije swaps.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Bevat UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Meer informatie over swappen met UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/no-NO.json b/packages/uniswap/src/i18n/locales/translations/no-NO.json
index 874d0ab2b42..e6d96e210c8 100644
--- a/packages/uniswap/src/i18n/locales/translations/no-NO.json
+++ b/packages/uniswap/src/i18n/locales/translations/no-NO.json
@@ -176,6 +176,7 @@
"common.allTime": "Hele tiden",
"common.amount.label": "Beløp",
"common.amountDeposited.label": "{{amount}} Deponert",
+ "common.amountInput.placeholder": "Inndatabeløp",
"common.and": "og",
"common.app": "App",
"common.approval.cancelled": "Godkjenning kansellert",
@@ -312,7 +313,6 @@
"common.currency": "Valuta",
"common.currentPrice": "Gjeldende pris",
"common.currentPrice.label": "Gjeldende pris:",
- "common.currentPrice.unavailable": "Gjeldende pris er ikke tilgjengelig",
"common.custom": "Tilpasset",
"common.customRange": "Egendefinert rekkevidde",
"common.dataOutdated": "Data kan være utdaterte",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Opptjente gebyrer:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Henter rute",
+ "common.flag": "Flagg",
"common.floor": "Gulv",
"common.floorPrice": "Gulvpris",
"common.for": "Til",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Godkjenne i lommebok",
"common.wallet.label": "Lommebok",
"common.walletForSwapping": "Lommeboken bygget for å bytte. Tilgjengelig på iOS og Android.",
- "common.warning": "Advarsel",
"common.webApp": "Nettapp",
"common.website": "Nettsted",
"common.whyApprove": "Hvorfor må jeg godkjenne et token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Kunne ikke laste inn tokens for å kjøpe",
"fiatOnRamp.error.max": "Maksimalt {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "Ingen sitater funnet.",
"fiatOnRamp.error.unavailable": "Denne tjenesten er utilgjengelig i din region",
"fiatOnRamp.error.unsupported": "Støttes ikke i regionen",
"fiatOnRamp.error.usd": "Kun tilgjengelig for kjøp i USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} for {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Ingen sitater funnet",
"fiatOnRamp.purchasedOn": "Kjøpt på {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Du fortsetter til leverandørens portal for å se gebyrene knyttet til transaksjonen din.",
"fiatOnRamp.quote.type.list": "{{optionsList}}og andre alternativer",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Pris:",
"migrate.v2Description": "Dette verktøyet vil trygt migrere {{source}} likviditeten til V3. Prosessen er fullstendig tillitsløs takket være <0>Uniswap-migreringskontrakten0> ↗",
"migrate.v2Instruction": "For hver pool vist nedenfor, klikk på migrere for å fjerne likviditeten din fra Uniswap V2 og sette den inn i Uniswap V3.",
+ "migrate.v2Subtitle": "Migrer likviditetstokenene dine fra Uniswap V2 til Uniswap V3.",
"migrate.v2Title": "Migrer V2-likviditet",
"migrate.v3Price": "V3 {{sym}} Pris:",
"mint.v3.input.invalidPrice.error": "Ugyldig prisinndata",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Gi lommeboken et navn",
"onboarding.notification.permission.message": "For å motta varsler, slå på varsler for Uniswap Wallet i enhetens innstillinger.",
"onboarding.notification.permission.title": "Tillatelse for varsler",
- "onboarding.notification.subtitle": "Hold deg oppdatert på transaksjonsstatuser og store prisendringer for favoritt-tokens",
- "onboarding.notification.title": "Slå på varsler",
+ "onboarding.notification.subtitle": "Bli varslet når overføringene, byttene og godkjenningene er fullført.",
+ "onboarding.notification.title": "Slå på push-varsler",
"onboarding.passkey.account.protection": "Kontoen din er beskyttet av din egen sikre passordlagring.",
"onboarding.passkey.biometric.scan": "Telefon, nettbrett eller nettleser – bare skann biometrien din, så blir du logget på.",
"onboarding.passkey.create": "Opprett passordet ditt",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Koble til en lommebok for å se likviditeten din.",
"pool.liquidity.data.error.message": "Det oppsto en feil under henting av data som kreves for transaksjonen din.",
"pool.liquidity.earn.fee": "Likviditetstilbydere tjener et gebyr på 0,3 % på alle handler proporsjonalt med deres andel av poolen. Gebyrer legges til bassenget, påløper i sanntid og kan kreves ved å ta ut likviditeten din.",
- "pool.liquidity.outOfSync": "Pool og markedspris uoverensstemmelse",
- "pool.liquidity.outOfSync.message": "Prisene i denne poolen avviker med markedsprisene på de valgte tokens. Juster prisklassen din tilsvarende eller vent til bassenget balanserer seg på nytt for å unngå tap.",
+ "pool.liquidity.outOfSync": "Poolpriser ute av synkronisering",
+ "pool.liquidity.outOfSync.message": "Prisene i denne poolen er ikke synkronisert med det nåværende markedet. Tilførsel av likviditet kan føre til tap av midler.",
"pool.liquidity.ownershipWarning.message": "Du er ikke eieren av denne LP-stillingen. Du vil ikke kunne ta ut likviditeten fra denne posisjonen med mindre du eier følgende adresse: {{ownerAddress}}",
"pool.liquidity.rewards": "Likviditetsleverandørens belønninger",
"pool.liquidity.taxWarning": "Symbolskatter",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Prisen på dette bassenget er innenfor det valgte området. Stillingen din tjener for øyeblikket avgifter.",
"pool.rates": "Priser",
"pool.ratioTokenToPrice": "Forholdet mellom tokens du legger til vil sette prisen på denne poolen.",
- "pool.refresh.prices": "Oppdater prisene",
"pool.removeLiquidity": "Fjern likviditet",
"pool.rewardsPool.label": "Pool tokens i belønningspoolen:",
"pool.selectedRange": "Valgt område",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hooks er en avansert funksjon som lar bassenger samhandle med smarte kontrakter, og låser opp ulike funksjoner. Vær forsiktig når du legger til kroker, siden noen kan være skadelige eller forårsake utilsiktede konsekvenser.",
"position.addingHook": "Legge til krok",
"position.addingHook.disclaimer": "Å legge til kroker kan ha utilsiktede konsekvenser. Gjør din forskning og fortsett på egen risiko.",
- "position.addingHook.hideProperties": "Skjul egenskaper",
"position.addingHook.invalidAddress": "Skriv inn en gyldig hook-adresse",
"position.addingHook.viewProperties": "Se eiendommer",
"position.appearHere": "Posisjonen din vil vises her.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Deponert {{currencySymbol}}",
"position.hook.disclaimer": "Jeg forstår risikoen.",
"position.hook.liquidityWarning": "Dette flagget kan føre til at bassenget blokkerer tilførsel av ny likviditet. Transaksjonen din kan gå tilbake.",
- "position.hook.removeWarning": "Kan føre til at midlene dine blir låst eller blokkere deg fra å kreve inn gebyrer.",
+ "position.hook.removeWarning": "Dette flagget kan føre til at midlene dine blir låst eller blokkere deg fra å samle inn gebyrer.",
"position.hook.swapWarning": "Dette flagget kan tillate sofistikerte brukere å lettere utnytte Just-In-Time-likviditet, noe som resulterer i lavere opptjente gebyrer.",
"position.hook.warningHeader": "Høyrisiko krok oppdaget",
"position.hook.warningInfo": "Vi har identifisert potensielle risikoer med denne kroken. Se gjennom flaggene og bekreft at dette er kroken du vil bruke før du fortsetter.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Godkjenn og bytt",
"swap.approveInWallet": "Godkjenne i lommeboken",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Den mest effektive ruten er beregnet til å koste ~{{gasPrice}} i nettverkskostnader. ",
+ "swap.bestRoute.cost": "Beste pris rute koster ~{{gasPrice}} i gass. ",
+ "swap.bestRoute.cost.v4": "Optimale rutekostnader ~{{gasPrice}} i gass. ",
"swap.bridging.estimatedTime": "Est. tid",
"swap.bridging.title": "Bytte på tvers av nettverk",
"swap.bridging.warning.description": "Du bytter fra {{fromNetwork}} til {{toNetwork}}. Dette er også kjent som \"bridging\", som flytter dine tokens fra ett nettverk til et annet.",
@@ -1868,16 +1866,15 @@
"swap.review": "Anmeldelsesbytte",
"swap.review.summary": "Du bytter",
"swap.reviewLimit": "Gjennomgangsgrense",
- "swap.route.optimizedGasCost": "Denne ruten vurderer delte ruter, flere hopp og nettverkskostnader for hvert trinn.",
+ "swap.route.optimizedGasCost": "Denne ruten optimerer din totale produksjon ved å vurdere delte ruter, flere hopp og nettverkskostnadene for hvert trinn.",
"swap.settings.deadline.tooltip": "Transaksjonen din vil gå tilbake hvis den venter i mer enn denne perioden. (Maksimalt: 3 dager).",
"swap.settings.deadline.warning": "Høy frist",
"swap.settings.protection.description": "Med byttebeskyttelse på, vil dine Ethereum-transaksjoner være beskyttet mot sandwich-angrep, med reduserte sjanser for å mislykkes.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Nettverk",
"swap.settings.protection.subtitle.unavailable": "Ikke tilgjengelig på {{chainName}}",
"swap.settings.protection.title": "Byttebeskyttelse",
- "swap.settings.routingPreference.option.default.description": "Hvis du velger dette alternativet, identifiseres den mest effektive ruten for byttet ditt.",
- "swap.settings.routingPreference.option.default.description.preV4": "Uniswap-klienten velger det billigste alternativet med tanke på pris og nettverkskostnader.",
- "swap.settings.routingPreference.option.default.tooltip": "En rute er identifisert med tanke på v2, v3 og visse v4-pooler, og tar hensyn til estimert prispåvirkning og nettverkskostnader.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap-klienten velger det billigste alternativet med tanke på pris og nettverkskostnader.",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap-klienten velger det optimale handelsalternativet med tanke på pris og nettverkskostnader.",
"swap.settings.routingPreference.option.v2.title": "v2 bassenger",
"swap.settings.routingPreference.option.v3.title": "v3 bassenger",
"swap.settings.routingPreference.option.v4.title": "v4 bassenger",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Gjør alltid research",
"token.safety.warning.blocked.description.default_one": "Du kan ikke bytte dette tokenet ved å bruke Uniswap-appen.",
"token.safety.warning.blocked.description.default_other": "Du kan ikke bytte disse tokenene ved å bruke Uniswap-appen.",
+ "token.safety.warning.blocked.description.named": "Du kan ikke handle {{tokenSymbol}} ved å bruke Uniswap-appen.",
"token.safety.warning.dontShowWarningAgain": "Ikke vis meg denne advarselen igjen",
"token.safety.warning.doYourOwnResearch": "Gjør alltid din egen forskning før du fortsetter.",
"token.safety.warning.feeDescription": "Lader en når {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} er kanskje ikke tokenet du ønsker å bytte.",
"token.safety.warning.malicious.title": "Skadelig token oppdaget",
"token.safety.warning.mayResultInLoss": "Å bytte det kan føre til tap av midler.",
+ "token.safety.warning.medium.heading.default_one": "Dette tokenet handles ikke på ledende amerikanske sentraliserte børser.",
+ "token.safety.warning.medium.heading.default_other": "Disse tokenene handles ikke på ledende amerikanske sentraliserte børser.",
+ "token.safety.warning.medium.heading.default_one_also": "Dette tokenet handles heller ikke på ledende amerikanske sentraliserte børser.",
+ "token.safety.warning.medium.heading.default_other_also": "Disse tokenene handles heller ikke på ledende amerikanske sentraliserte børser.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} handles ikke på ledende amerikanske sentraliserte børser.",
"token.safety.warning.notListedOnExchanges": "Ikke notert på ledende amerikanske børser",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} har blitt flagget som uselgbar.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} har blitt flagget som spam av Blockaid.",
"token.safety.warning.spam.title": "Spam-token oppdaget",
"token.safety.warning.spamsUsers": "Spam-brukere",
+ "token.safety.warning.strong.heading.default_one": "Dette tokenet handles ikke på ledende amerikanske sentraliserte børser eller byttes ofte på Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Disse tokenene handles ikke på ledende amerikanske sentraliserte børser eller byttes ofte på Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} handles ikke på ledende amerikanske sentraliserte børser eller byttes ofte på Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} belaster et {{buyFeePercent}} gebyr ved kjøp og {{sellFeePercent}} ved salg.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} belaster et {{feePercent}} gebyr ved kjøp.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} belaster et {{feePercent}} gebyr ved salg.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} krever et gebyr ved kjøp eller salg.",
+ "token.safetyLevel.blocked.header": "Ikke tilgjengelig",
"token.safetyLevel.blocked.message": "Du kan ikke bytte dette tokenet ved å bruke Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Forsiktighet",
+ "token.safetyLevel.medium.message": "Dette tokenet handles ikke på ledende amerikanske sentraliserte børser. Gjør alltid din egen forskning før du fortsetter.",
"token.safetyLevel.medium.message.plural": "Disse tokenene handles ikke på ledende amerikanske sentraliserte børser. Gjør alltid din egen forskning før du fortsetter.",
+ "token.safetyLevel.strong.header": "Advarsel",
+ "token.safetyLevel.strong.message": "Dette tokenet handles ikke på ledende amerikanske sentraliserte børser eller byttes ofte på Uniswap. Gjør alltid din egen forskning før du fortsetter.",
"token.selector.search.error": "Kunne ikke laste inn søkeresultater",
"token.stats.fullyDilutedValuation": "Fullstendig utvannet verdivurdering",
"token.stats.marketCap": "Markedsverdi",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Andre tokens på {{network}}",
"tokens.selector.section.recent": "Nylige søk",
"tokens.selector.section.search": "Søkeresultater",
- "tokens.selector.section.trending": "Tokens med 24-timers volum",
"tokens.selector.section.yours": "Dine tokens",
"tokens.table.search.placeholder.pools": "Søk i bassenger",
"tokens.table.search.placeholder.tokens": "Søk tokens",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Lav nettverkstokenbalanse",
"transaction.watcher.error.cancel": "Kan ikke kansellere transaksjonen",
"transaction.watcher.error.status": "Feil under kontroll av transaksjonsstatus",
- "unichain.promotion.cold.description": "Raskere bytte. Lavere avgifter. Unichain er hjemmet til DeFi.",
- "unichain.promotion.cold.title": "Vi introduserer Unichain",
- "unichain.promotion.modal.description": "Raskere bytte. Lavere avgifter. Unichain er hjemmet for likviditet på tvers av kjeder.",
- "unichain.promotion.modal.detail.costs": "Lavere kostnader for å opprette pools og administrere stillinger.",
- "unichain.promotion.modal.detail.fees": "Spar 95% på gebyrer sammenlignet med Ethereum.",
- "unichain.promotion.modal.detail.instant": "Bytt umiddelbart",
- "unichain.promotion.warm.description": "Bytt favorittsymbolene dine raskere og med lavere bensinkostnader.",
- "unichain.promotion.warm.title": "Begynn å bytte på Unichain",
"uniswapX.aggregatesLiquidity": " samler likviditetskilder for bedre priser og gassfrie bytteavtaler.",
"uniswapx.description": "UniswapX samler likviditetskilder for bedre priser og gassfrie bytteavtaler.",
- "uniswapx.included": "Inkluderer UniswapX",
+ "uniswapx.included": "Inkluderer UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Lær mer om å bytte med UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/pl-PL.json b/packages/uniswap/src/i18n/locales/translations/pl-PL.json
index 449fef8076f..0ec7bec9226 100644
--- a/packages/uniswap/src/i18n/locales/translations/pl-PL.json
+++ b/packages/uniswap/src/i18n/locales/translations/pl-PL.json
@@ -176,6 +176,7 @@
"common.allTime": "Cały czas",
"common.amount.label": "Kwota",
"common.amountDeposited.label": "{{amount}} Zdeponowano",
+ "common.amountInput.placeholder": "Kwota wejściowa",
"common.and": "I",
"common.app": "Aplikacja",
"common.approval.cancelled": "Zatwierdzenie anulowane",
@@ -312,7 +313,6 @@
"common.currency": "Waluta",
"common.currentPrice": "Aktualna cena",
"common.currentPrice.label": "Aktualna cena:",
- "common.currentPrice.unavailable": "Aktualna cena niedostępna",
"common.custom": "Zwyczaj",
"common.customRange": "Zakres niestandardowy",
"common.dataOutdated": "Dane mogą być nieaktualne",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Uzyskane opłaty:",
"common.feesEarnedPerBase": "{{symbolA}} na {{symbolB}}",
"common.fetchingRoute": "Trasa pobierania",
+ "common.flag": "Flaga",
"common.floor": "Podłoga",
"common.floorPrice": "Cena minimalna",
"common.for": "Dla",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Zatwierdź w portfelu",
"common.wallet.label": "Portfel",
"common.walletForSwapping": "Portfel stworzony z myślą o wymianie. Dostępne na iOS i Androida.",
- "common.warning": "Ostrzeżenie",
"common.webApp": "Aplikacja internetowa",
"common.website": "Strona internetowa",
"common.whyApprove": "Dlaczego muszę zatwierdzić token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Nie udało się wczytać tokenów do kupienia",
"fiatOnRamp.error.max": "Maksymalnie {{amount}}",
"fiatOnRamp.error.min": "Minimalnie {{amount}}",
- "fiatOnRamp.error.noQuotes": "Nie znaleziono cytatów.",
"fiatOnRamp.error.unavailable": "Ta usługa jest niedostępna w Twoim regionie",
"fiatOnRamp.error.unsupported": "Nieobsługiwane w regionie",
"fiatOnRamp.error.usd": "Możliwość zakupu wyłącznie w USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} dla {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Nie znaleziono cytatów",
"fiatOnRamp.purchasedOn": "Zakupiono {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Przejdziesz do portalu dostawcy, aby zobaczyć opłaty związane z Twoją transakcją.",
"fiatOnRamp.quote.type.list": "{{optionsList}}i inne opcje",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Cena:",
"migrate.v2Description": "To narzędzie bezpiecznie przeprowadzi migrację Twojej płynności {{source}} do wersji V3. Proces ten jest całkowicie pozbawiony zaufania dzięki umowie migracyjnej <0>Uniswap0> ↗",
"migrate.v2Instruction": "Dla każdej puli pokazanej poniżej kliknij opcję migracji, aby usunąć płynność z Uniswap V2 i zdeponować ją w Uniswap V3.",
+ "migrate.v2Subtitle": "Przeprowadź migrację swoich tokenów płynności z Uniswap V2 do Uniswap V3.",
"migrate.v2Title": "Przeprowadź migrację płynności V2",
"migrate.v3Price": "V3 {{sym}} Cena:",
"mint.v3.input.invalidPrice.error": "Nieprawidłowe wprowadzone ceny",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Nadaj swojemu portfelowi nazwę",
"onboarding.notification.permission.message": "Aby otrzymywać powiadomienia, włącz powiadomienia dla Portfela Uniswap w ustawieniach swojego urządzenia.",
"onboarding.notification.permission.title": "Zezwolenie na powiadomienia",
- "onboarding.notification.subtitle": "Bądź na bieżąco ze statusami transakcji i większymi zmianami cen ulubionych tokenów",
- "onboarding.notification.title": "Włącz powiadomienia",
+ "onboarding.notification.subtitle": "Otrzymuj powiadomienia o zakończeniu transferów, zamian i zatwierdzeń.",
+ "onboarding.notification.title": "Włącz powiadomienia push",
"onboarding.passkey.account.protection": "Twoje konto jest chronione przez własny, bezpieczny magazyn haseł.",
"onboarding.passkey.biometric.scan": "Telefon, tablet lub przeglądarka — wystarczy zeskanować dane biometryczne, a zostaniesz zalogowany.",
"onboarding.passkey.create": "Utwórz swój klucz dostępu",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Połącz się z portfelem, aby zobaczyć swoją płynność.",
"pool.liquidity.data.error.message": "Wystąpił błąd podczas pobierania danych wymaganych do transakcji.",
"pool.liquidity.earn.fee": "Dostawcy płynności zarabiają prowizję w wysokości 0,3% od wszystkich transakcji, proporcjonalnie do ich udziału w puli. Opłaty są dodawane do puli, naliczane w czasie rzeczywistym i można je odebrać, wycofując swoją płynność.",
- "pool.liquidity.outOfSync": "Niedopasowanie cen basenowych i rynkowych",
- "pool.liquidity.outOfSync.message": "Ceny w tej puli różnią się od cen rynkowych wybranych tokenów. Dostosuj odpowiednio swój przedział cenowy lub poczekaj, aż pula zostanie zrównoważona, aby uniknąć strat.",
+ "pool.liquidity.outOfSync": "Ceny basenów nie są zsynchronizowane",
+ "pool.liquidity.outOfSync.message": "Ceny w tym puli są niezsynchronizowane z obecnym rynkiem. Dodanie płynności może spowodować utratę środków.",
"pool.liquidity.ownershipWarning.message": "Nie jesteś właścicielem tej pozycji LP. Nie będziesz mógł wypłacić płynności z tej pozycji, chyba że posiadasz następujący adres: {{ownerAddress}}",
"pool.liquidity.rewards": "Nagrody dla dostawców płynności",
"pool.liquidity.taxWarning": "Podatki symboliczne",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Cena tej puli mieści się w wybranym przez Ciebie przedziale. Twoje stanowisko obecnie generuje opłaty.",
"pool.rates": "Stawki",
"pool.ratioTokenToPrice": "Stosunek dodanych tokenów ustali cenę tej puli.",
- "pool.refresh.prices": "Odśwież ceny",
"pool.removeLiquidity": "Usuń płynność",
"pool.rewardsPool.label": "Żetony puli w puli nagród:",
"pool.selectedRange": "Wybrany zakres",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hooki to zaawansowana funkcja, która umożliwia pulom interakcję z inteligentnymi kontraktami, odblokowując różne możliwości. Zachowaj ostrożność podczas dodawania hooków, ponieważ niektóre mogą być złośliwe lub powodować niezamierzone konsekwencje.",
"position.addingHook": "Dodawanie haka",
"position.addingHook.disclaimer": "Dodawanie haczyków może mieć niezamierzone konsekwencje. Przeprowadź rozeznanie i działaj na własne ryzyko.",
- "position.addingHook.hideProperties": "Ukryj właściwości",
"position.addingHook.invalidAddress": "Wprowadź prawidłowy adres haka",
"position.addingHook.viewProperties": "Wyświetl właściwości",
"position.appearHere": "Twoje stanowisko pojawi się tutaj.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Złożono {{currencySymbol}}",
"position.hook.disclaimer": "Rozumiem ryzyko.",
"position.hook.liquidityWarning": "Ta flaga może spowodować, że pula zablokuje dodawanie nowej płynności. Twoja transakcja może zostać cofnięta.",
- "position.hook.removeWarning": "Może spowodować zablokowanie środków lub uniemożliwić pobieranie opłat.",
+ "position.hook.removeWarning": "Ta flaga może spowodować zablokowanie środków lub uniemożliwić pobieranie opłat.",
"position.hook.swapWarning": "Flaga ta może pozwolić zaawansowanym użytkownikom na łatwiejsze wykorzystanie płynności Just-In-Time, co przełoży się na niższe opłaty.",
"position.hook.warningHeader": "Wykryto hak wysokiego ryzyka",
"position.hook.warningInfo": "Zidentyfikowaliśmy potencjalne zagrożenia związane z tym hakiem. Przed kontynuowaniem sprawdź flagi i upewnij się, że jest to hak, którego chcesz użyć.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Zatwierdź i zamień",
"swap.approveInWallet": "Zatwierdź w swoim portfelu",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Szacuje się, że najbardziej efektywna trasa będzie kosztować około ~{{gasPrice}} w kosztach sieciowych. ",
+ "swap.bestRoute.cost": "Najlepsza cena za trasę ~{{gasPrice}} na benzynie. ",
+ "swap.bestRoute.cost.v4": "Optymalna trasa kosztuje ~{{gasPrice}} w benzynie. ",
"swap.bridging.estimatedTime": "Szacowany czas",
"swap.bridging.title": "Wymiana między sieciami",
"swap.bridging.warning.description": "Zamieniasz się z {{fromNetwork}} na {{toNetwork}}. Jest to znane również jako „mostkowanie”, które przenosi twoje tokeny z jednej sieci do drugiej.",
@@ -1868,16 +1866,15 @@
"swap.review": "Przejrzyj wymianę",
"swap.review.summary": "Zamieniasz się",
"swap.reviewLimit": "Limit przeglądu",
- "swap.route.optimizedGasCost": "Trasa ta uwzględnia trasy rozdzielone, wiele przeskoków i koszty sieciowe każdego kroku.",
+ "swap.route.optimizedGasCost": "Ta trasa optymalizuje całkowitą wydajność poprzez uwzględnienie tras podzielonych, wielu przeskoków i kosztów sieciowych każdego etapu.",
"swap.settings.deadline.tooltip": "Twoja transakcja zostanie cofnięta, jeśli będzie oczekiwała na realizację przez okres dłuższy niż ten. (Maksymalnie: 3 dni).",
"swap.settings.deadline.warning": "Wysoki termin",
"swap.settings.protection.description": "Po włączeniu ochrony swap Twoje transakcje Ethereum będą chronione przed atakami typu „sandwich”, przy zmniejszonym ryzyku niepowodzenia.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Sieć",
"swap.settings.protection.subtitle.unavailable": "Niedostępne w {{chainName}}",
"swap.settings.protection.title": "Ochrona wymiany",
- "swap.settings.routingPreference.option.default.description": "Wybranie tej opcji identyfikuje najefektywniejszą trasę wymiany.",
- "swap.settings.routingPreference.option.default.description.preV4": "Klient Uniswap wybiera najtańszą opcję transakcji, biorąc pod uwagę cenę i koszty sieciowe.",
- "swap.settings.routingPreference.option.default.tooltip": "Trasa jest identyfikowana z uwzględnieniem puli v2, v3 i niektórych v4, biorąc pod uwagę szacowany wpływ na cenę i koszty sieciowe.",
+ "swap.settings.routingPreference.option.default.description": "Klient Uniswap wybiera najtańszą opcję transakcji, biorąc pod uwagę cenę i koszty sieciowe.",
+ "swap.settings.routingPreference.option.default.description.v4": "Klient Uniswap wybiera optymalną opcję transakcji, biorąc pod uwagę cenę i koszty sieciowe.",
"swap.settings.routingPreference.option.v2.title": "baseny v2",
"swap.settings.routingPreference.option.v3.title": "baseny v3",
"swap.settings.routingPreference.option.v4.title": "pule v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Zawsze rób rozeznanie",
"token.safety.warning.blocked.description.default_one": "Nie możesz handlować tym tokenem za pomocą aplikacji Uniswap.",
"token.safety.warning.blocked.description.default_other": "Nie możesz handlować tymi tokenami za pomocą aplikacji Uniswap.",
+ "token.safety.warning.blocked.description.named": "Nie możesz handlować {{tokenSymbol}} za pomocą aplikacji Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Nie pokazuj mi więcej tego ostrzeżenia",
"token.safety.warning.doYourOwnResearch": "Zawsze przeprowadź własne badania przed podjęciem dalszych działań.",
"token.safety.warning.feeDescription": "Ładuje , gdy {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} może nie być tokenem, który chcesz wymienić.",
"token.safety.warning.malicious.title": "Wykryto złośliwy token",
"token.safety.warning.mayResultInLoss": "Zamiana może skutkować utratą środków.",
+ "token.safety.warning.medium.heading.default_one": "Token ten nie jest przedmiotem obrotu na wiodących scentralizowanych giełdach w USA.",
+ "token.safety.warning.medium.heading.default_other": "Tokeny te nie są przedmiotem obrotu na wiodących scentralizowanych giełdach w USA.",
+ "token.safety.warning.medium.heading.default_one_also": "Ten token nie jest również przedmiotem obrotu na wiodących scentralizowanych giełdach w USA.",
+ "token.safety.warning.medium.heading.default_other_also": "Te tokeny nie są też przedmiotem obrotu na wiodących scentralizowanych giełdach amerykańskich.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} nie jest przedmiotem obrotu na wiodących scentralizowanych giełdach w USA.",
"token.safety.warning.notListedOnExchanges": "Nie jest notowany na wiodących giełdach amerykańskich",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} został oznaczony jako niesprzedawalny.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Wiadomość {{tokenSymbol}} została oznaczona jako spam przez Blockaid.",
"token.safety.warning.spam.title": "Wykryto token spamowy",
"token.safety.warning.spamsUsers": "Spamuje użytkowników",
+ "token.safety.warning.strong.heading.default_one": "Token ten nie jest przedmiotem obrotu na wiodących scentralizowanych giełdach w USA ani nie jest często wymieniany na Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Tokeny te nie są przedmiotem obrotu na wiodących scentralizowanych giełdach w USA ani nie są często wymieniane na Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} nie jest przedmiotem obrotu na wiodących scentralizowanych giełdach w USA ani nie jest często wymieniany na Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} pobiera opłatę {{buyFeePercent}} przy zakupie i {{sellFeePercent}} przy sprzedaży.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} pobiera opłatę {{feePercent}} przy zakupie.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} pobiera opłatę {{feePercent}} przy sprzedaży.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} pobiera opłatę przy zakupie lub sprzedaży.",
+ "token.safetyLevel.blocked.header": "Niedostępne",
"token.safetyLevel.blocked.message": "Nie możesz handlować tym tokenem za pomocą portfela Uniswap.",
+ "token.safetyLevel.medium.header": "Ostrożność",
+ "token.safetyLevel.medium.message": "Ten token nie jest przedmiotem obrotu na wiodących amerykańskich giełdach scentralizowanych. Zawsze przeprowadź własne badania przed kontynuowaniem.",
"token.safetyLevel.medium.message.plural": "Te tokeny nie są przedmiotem obrotu na wiodących amerykańskich giełdach scentralizowanych. Zawsze przeprowadź własne badania przed kontynuowaniem.",
+ "token.safetyLevel.strong.header": "Ostrzeżenie",
+ "token.safetyLevel.strong.message": "Ten token nie jest przedmiotem obrotu na wiodących amerykańskich giełdach scentralizowanych ani często wymieniany na Uniswap. Zawsze przeprowadź własne badania przed kontynuowaniem.",
"token.selector.search.error": "Nie udało się wczytać wyników wyszukiwania",
"token.stats.fullyDilutedValuation": "W pełni rozwodniona wycena",
"token.stats.marketCap": "Kapitalizacja rynkowa",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Inne tokeny na {{network}}",
"tokens.selector.section.recent": "Ostatnie wyszukiwania",
"tokens.selector.section.search": "Wyniki wyszukiwania",
- "tokens.selector.section.trending": "Tokeny według wolumenu 24H",
"tokens.selector.section.yours": "Twoje tokeny",
"tokens.table.search.placeholder.pools": "Wyszukaj baseny",
"tokens.table.search.placeholder.tokens": "Szukaj tokenów",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Niskie saldo tokenów sieciowych",
"transaction.watcher.error.cancel": "Nie można anulować transakcji",
"transaction.watcher.error.status": "Błąd podczas sprawdzania statusu transakcji",
- "unichain.promotion.cold.description": "Szybsze swapy. Niższe opłaty. Unichain jest domem dla DeFi.",
- "unichain.promotion.cold.title": "Przedstawiamy Unichain",
- "unichain.promotion.modal.description": "Szybsze swapy. Niższe opłaty. Unichain jest domem dla płynności międzyłańcuchowej.",
- "unichain.promotion.modal.detail.costs": "Niższe koszty tworzenia pul i zarządzania pozycjami.",
- "unichain.promotion.modal.detail.fees": "Zaoszczędź 95% na opłatach w porównaniu z Ethereum.",
- "unichain.promotion.modal.detail.instant": "Zamień natychmiast",
- "unichain.promotion.warm.description": "Wymieniaj swoje ulubione tokeny szybciej i przy niższych kosztach gazu.",
- "unichain.promotion.warm.title": "Rozpocznij wymianę na Unichain",
"uniswapX.aggregatesLiquidity": " agreguje źródła płynności w celu uzyskania lepszych cen i swapów bez gazu.",
"uniswapx.description": "UniswapX agreguje źródła płynności w celu uzyskania lepszych cen i swapów bez gazu.",
- "uniswapx.included": "Zawiera UniswapX",
+ "uniswapx.included": "Obejmuje UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Dowiedz się więcej o wymianie z UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/pt-PT.json b/packages/uniswap/src/i18n/locales/translations/pt-PT.json
index 1f4a2aa826d..20352579336 100644
--- a/packages/uniswap/src/i18n/locales/translations/pt-PT.json
+++ b/packages/uniswap/src/i18n/locales/translations/pt-PT.json
@@ -176,6 +176,7 @@
"common.allTime": "Todo o período",
"common.amount.label": "Valor",
"common.amountDeposited.label": "{{amount}} depositado",
+ "common.amountInput.placeholder": "Valor inserido",
"common.and": "e",
"common.app": "Aplicativo",
"common.approval.cancelled": "Aprovação cancelada",
@@ -312,7 +313,6 @@
"common.currency": "Moeda",
"common.currentPrice": "Preço atual",
"common.currentPrice.label": "Preço atual:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Personalizado",
"common.customRange": "Intervalo personalizado",
"common.dataOutdated": "Os dados podem estar desatualizados",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} tarifas ganhas:",
"common.feesEarnedPerBase": "{{symbolA}} por {{symbolB}}",
"common.fetchingRoute": "Buscando rota",
+ "common.flag": "Sinalizar",
"common.floor": "Mínimo",
"common.floorPrice": "Preço mínimo",
"common.for": "Para",
@@ -435,7 +436,7 @@
"common.liquidity.removed": "Liquidez removida",
"common.loading": "Carregando",
"common.loadingAllowance": "Carregamento autorizado",
- "common.loadMore": "Mais informações",
+ "common.loadMore": "Carregar mais",
"common.longText.button.less": "Ler menos",
"common.longText.button.more": "Ler mais",
"common.lowPrice": "Preço baixo",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Aprovar na carteira",
"common.wallet.label": "Carteira",
"common.walletForSwapping": "A carteira feita para trocas. Disponível para iOS e Android.",
- "common.warning": "Warning",
"common.webApp": "Versão de navegador",
"common.website": "Site",
"common.whyApprove": "Por que preciso aprovar um token?",
@@ -873,7 +873,7 @@
"fee.tier.select": "Selecionar nível de tarifas",
"fee.tier.select.existing.button": "Selecionar nível de tarifas existente",
"fee.tierExact": "Nível de tarifas {{fee}}",
- "fee.unavailable": "Tarifas recebidas só ficam visíveis em posições v2 após a remoção da liquidez.",
+ "fee.unavailable": "Tarifas recebidas só ficam visíveis em posições de v2 após a remoção da liquidez.",
"fee.uncollected": "Inclui tarifas não recolhidas:",
"fiatOffRamp.checkout.title": "Vender com",
"fiatOffRamp.connection.quote": "Vendendo {{amount}} em {{currencySymbol}}",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Não foi possível carregar os tokens para a compra",
"fiatOnRamp.error.max": "Máximo de {{amount}}",
"fiatOnRamp.error.min": "Mínimo de {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Este serviço não está disponível em sua região",
"fiatOnRamp.error.unsupported": "Sem suporte na região",
"fiatOnRamp.error.usd": "Disponível apenas para compra em USD",
"fiatOnRamp.exchangeRate": "{{outputSymbol}} {{outputAmount}} para {{inputSymbol}} {{inputAmount}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Compra feita em {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Você seguirá para o portal do provedor para ver as tarifas da sua transação.",
"fiatOnRamp.quote.type.list": "{{optionsList}} e outras opções",
@@ -923,8 +921,8 @@
"forceUpgrade.action.confirm": "Atualizar agora",
"forceUpgrade.action.learn": "Saiba como atualizar",
"forceUpgrade.action.recoveryPhrase": "Ver frase de recuperação",
- "forceUpgrade.description.extension": "Uma nova versão do aplicativo está disponível. Atualize para continuar usando o Uniswap Extension.",
- "forceUpgrade.description.wallet": "Uma nova versão do aplicativo está disponível. Atualize para continuar usando a Uniswap Wallet.",
+ "forceUpgrade.description.extension": "Uma nova versão do aplicativo está disponível. Para continuar usando a extensão da Uniswap, atualize-a para a versão mais recente.",
+ "forceUpgrade.description.wallet": "Uma nova versão do aplicativo está disponível. Para continuar usando a Uniswap Wallet, atualize-o para a versão mais recente.",
"forceUpgrade.label.recoveryPhrase": "Frase de recuperação",
"forceUpgrade.title": "Atualizar para a versão mais recente",
"globalPreferences.title": "Preferências globais",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "NFT de LP {{symA}}/{{symB}}",
"migrate.lpTokens": "Tokens de LP {{symA}}/{{symB}}",
"migrate.migrating": "Migrando",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Não vê uma de suas posições v2? Importe-a.",
"migrate.noV2Liquidity": "Nenhuma liquidez V2 encontrada.",
"migrate.positionNoFees": "Sua posição não gerará ganho em tarifas nem será usada em negociações até que o preço de mercado entre na sua faixa.",
"migrate.priceDifference": "Diferença de preço: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "Preço de {{protocolName}} {{tokenSymbol}}:",
"migrate.v2Description": "Esta ferramenta migrará, com segurança, sua liquidez {{source}} para V3. O processo não requer confiança de intermediários graças ao <0>contrato de migração da Uniswap0> ↗",
"migrate.v2Instruction": "Para cada pool mostrado abaixo, clique em migrar para remover sua liquidez da Uniswap V2 e depositá-la na Uniswap V3.",
+ "migrate.v2Subtitle": "Migre seus tokens de liquidez da Uniswap V2 para a Uniswap V3.",
"migrate.v2Title": "Migrar liquidez V2",
"migrate.v3Price": "Preço do V3 {{sym}}:",
"mint.v3.input.invalidPrice.error": "Preço inserido inválido",
@@ -1109,7 +1108,7 @@
"nft.learnWhy": "Saiba por quê",
"nft.list.header.lastPrice": "Último",
"nft.list.title": "Listar NFTs",
- "nft.listedSignificantly_one": "Um NFT está listado {{percentage}} abaixo do preço mínimo da coleção. Quer mesmo continuar?",
+ "nft.listedSignificantly_one": "Um NFT está listado {{percentage}} abaixo do preço mínimo da coleção. Tem certeza de que deseja continuar?",
"nft.listedSignificantly_other": "{{count}} NFTs estão anunciados muito abaixo do preço mínimo da coleção. Quer mesmo continuar?",
"nft.listForSale": "Disponibilizar para venda",
"nft.lowPrice": "Preço de listagem baixo",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Dê um nome à carteira",
"onboarding.notification.permission.message": "Para receber notificações, ative as notificações da Carteira Uniswap nas configurações do seu dispositivo.",
"onboarding.notification.permission.title": "Permissão de notificações",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Receba notificações quando suas transferências, trocas e aprovações forem concluídas.",
+ "onboarding.notification.title": "Ativar notificações por push",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1358,7 +1357,7 @@
"permit.approval.fail.message": "O Permit2 permite o compartilhamento e o gerenciamento de aprovações de tokens em diferentes aplicativos.",
"pool.activePositions.appear": "Suas posições de liquidez do V3 ativas aparecerão aqui.",
"pool.activeRange": "Intervalo de variação ativo",
- "pool.addAs": "Adicionar como {{nativeWrappedSymbol}}",
+ "pool.addAs": "Adicionar {{nativeWrappedSymbol}}",
"pool.addLiquidity.seoTitle": "Adicione liquidez a {{tokenPair}} ({{chain}}) na Uniswap",
"pool.addMoreLiquidity": "Adicione mais liquidez",
"pool.apr": "APR",
@@ -1390,7 +1389,7 @@
"pool.exporeAnalytics": "Explorar as análises da Uniswap.",
"pool.hideClosed": "Ocultar posições fechadas",
"pool.import": "Importar pool",
- "pool.import.link.description": "Algumas posições da v2 não são exibidas automaticamente.",
+ "pool.import.link.description": "Algumas posições v2 não são exibidas automaticamente.",
"pool.import.positions.v2": "Importar posições v2",
"pool.import.positions.v2.selectPair.description": "Algumas posições v2 não são exibidas automaticamente. Selecione um par de tokens para importar e visualizar suas posições.",
"pool.import.success": "Pool importado",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Conecte-se a uma carteira para visualizar sua liquidez.",
"pool.liquidity.data.error.message": "Houve um erro ao obter dados necessários para sua transação.",
"pool.liquidity.earn.fee": "Os provedores de liquidez ganham uma tarifa de 0,3% em todas as negociações, proporcionalmente à sua quota no pool. As tarifas são adicionadas ao pool, acumuladas em tempo real e podem ser resgatadas ao sacar sua liquidez.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Preços do pool dessincronizados",
+ "pool.liquidity.outOfSync.message": "Os preços deste pool não estão sincronizados com o mercado atual. Adicionar liquidez pode gerar perda de fundos.",
"pool.liquidity.ownershipWarning.message": "Esta posição de PL não é sua. Portanto, você não poderá sacar a liquidez dela, a menos que o seguinte endereço seja seu: {{ownerAddress}}",
"pool.liquidity.rewards": "Recompensas do provedor de liquidez",
"pool.liquidity.taxWarning": "Impostos do token",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "O preço deste pool está dentro do intervalo selecionado. No momento, sua posição está ganhando tarifas.",
"pool.rates": "Taxas",
"pool.ratioTokenToPrice": "O índice de tokens adicionados definirá o preço deste pool.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Remover liquidez",
"pool.rewardsPool.label": "Tokens do pool no pool de recompensas:",
"pool.selectedRange": "Intervalo selecionado",
@@ -1473,18 +1471,17 @@
"pool.volOverTvl": "Vol. de 1 dia/TVL",
"pool.volume.thirtyDay": "Volume de 30 dias",
"pool.volume.thirtyDay.short": "Vol. 30 d",
- "pool.withdrawAs": "Sacar como {{nativeWrappedSymbol}}",
+ "pool.withdrawAs": "Sacar {{nativeWrappedSymbol}}",
"pool.yourv2": "Sua liquidez V2",
"poolFinder.availablePools": "Pools disponíveis",
"poolFinder.availablePools.found.description": "Pools v2 correspondentes à sua seleção de pares.",
- "poolFinder.availablePools.notFound.description": "Não foram encontrados pools v2 correspondentes. Verifique novamente sua seleção de tokens e se está acessando a carteira certa.",
+ "poolFinder.availablePools.notFound.description": "Não foram encontrados pools v2 correspondentes. Verifique novamente sua seleção de tokens e certifique-se de estar conectado à carteira correta.",
"pools.approving.amount": "Aprovando {{amount}}",
"pools.explore": "Explorar pools",
"position.addHook": "Adicionar um hook",
"position.addHook.tooltip": "Hooks são um recurso avançado que permite que pools interajam com contratos inteligentes, possibilitando o acesso a vários recursos. Tenha cuidado ao adicionar hooks, pois alguns podem ser maliciosos ou causar consequências não intencionais.",
"position.addingHook": "Adicionar hook",
"position.addingHook.disclaimer": "A adição de hooks pode ter consequências e riscos inesperados para você. Pesquise antes de continuar.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Insira um endereço de hook válido",
"position.addingHook.viewProperties": "Ver propriedades",
"position.appearHere": "Sua posição aparecerá aqui.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Depósito de {{currencySymbol}}",
"position.hook.disclaimer": "Entendo os riscos.",
"position.hook.liquidityWarning": "Esta sinalização pode fazer o pool bloquear a adição de liquidez. Sua transação pode ser retornada.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Esta sinalização pode bloquear seus fundos ou impedir o recolhimento de tarifas.",
"position.hook.swapWarning": "Esta sinalização pode dar a usuários sofisticados a chance de usar liquidez pontual, o que pode reduzir o ganho com tarifas.",
"position.hook.warningHeader": "Hook de alto risco detectado",
"position.hook.warningInfo": "Identificamos possíveis riscos com este hook. Veja as sinalizações e verifique se quer realmente usá-lo antes de continuar.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Aprovar e trocar",
"swap.approveInWallet": "Aprovar na sua carteira",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "A rota de melhor preço custa ~{{gasPrice}} em gas. ",
+ "swap.bestRoute.cost.v4": "Custos de rota ideal: aprox. {{gasPrice}} em gas.",
"swap.bridging.estimatedTime": "Tempo estimado",
"swap.bridging.title": "Troca entre redes",
"swap.bridging.warning.description": "Você está trocando de {{fromNetwork}} para {{toNetwork}}. Isso também é conhecido como \"transferência\", que move seus tokens de uma rede para outra.",
@@ -1799,8 +1797,8 @@
"swap.button.unwrap": "Fazer unwrap",
"swap.button.wrap": "Fazer wrap",
"swap.buy.countryModal.placeholder": "Pesquisar por país ou região",
- "swap.cancel.cannotExecute_one": "Seu swap pode ser executado antes de processarmos o cancelamento. Não é possível reembolsar os custos de rede. Quer mesmo continuar?",
- "swap.cancel.cannotExecute_other": "Seus swaps poderão ser executados antes que o cancelamento seja processado. Seus custos de rede não podem ser reembolsados. Você deseja prosseguir?",
+ "swap.cancel.cannotExecute_one": "Seu swap poderá ser realizado antes que o cancelamento seja processado. Seus custos de rede não podem ser reembolsados. Você deseja continuar?",
+ "swap.cancel.cannotExecute_other": "Seus swaps podem ser executados antes de processarmos o cancelamento. Não é possível reembolsar os custos de rede. Quer mesmo continuar?",
"swap.confirmLimit": "Confirmar ordem-limite",
"swap.confirmSwap": "Confirmar troca",
"swap.deadline.settings.title": "Prazo da transação",
@@ -1868,16 +1866,15 @@
"swap.review": "Analisar troca",
"swap.review.summary": "Você está trocando",
"swap.reviewLimit": "Revisar ordem-limite",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
- "swap.settings.deadline.tooltip": "Transações pendentes por mais do que esse período serão revertidas (máximo: 3 dias).",
+ "swap.route.optimizedGasCost": "Essa rota otimiza o resultado total por levar em conta rotas divididas, uso de saltos diversos e os custos de rede de cada etapa.",
+ "swap.settings.deadline.tooltip": "Sua transação será revertida se estiver pendente por mais do que esse período. (Máximo: 3 dias).",
"swap.settings.deadline.warning": "Prazo elevado",
"swap.settings.protection.description": "Com a proteção de troca ativada, suas transações de Ethereum estarão protegidas contra ataques de sandwich, com menos chances de falha.",
"swap.settings.protection.subtitle.supported": "Rede {{chainName}}",
"swap.settings.protection.subtitle.unavailable": "Não disponível em {{chainName}}",
"swap.settings.protection.title": "Proteção contra troca",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "O cliente Uniswap seleciona a opção de negociação mais barata, considerando cotação e custos da rede.",
+ "swap.settings.routingPreference.option.default.description.v4": "O cliente Uniswap seleciona a opção de negociação ideal, considerando cotação e custos da rede.",
"swap.settings.routingPreference.option.v2.title": "Pools v2",
"swap.settings.routingPreference.option.v3.title": "Pools v3",
"swap.settings.routingPreference.option.v4.title": "Pools v4",
@@ -1890,8 +1887,8 @@
"swap.settings.slippage.output.message": "Se ocorrer ainda mais movimentação no preço, sua transação será revertida. Abaixo está o valor máximo que você precisaria gastar.",
"swap.settings.slippage.output.spend.title": "Gastar no máximo",
"swap.settings.slippage.warning": "Slippage muito elevado",
- "swap.settings.slippage.warning.description": "Slippage acima de 20% provavelmente tornará a negociação desfavorável. Para reduzir o risco de sofrer front running, reduza suas configurações.",
- "swap.settings.slippage.warning.hover": "Essa negociação pode gerar prejuízos. Tente limitar mais sua configuração de slippage.",
+ "swap.settings.slippage.warning.description": "Slippage acima de 20% provavelmente resultará em uma negociação desfavorável. Para reduzir o risco de antecipação, diminua suas configurações.",
+ "swap.settings.slippage.warning.hover": "Isso pode resultar em uma negociação desfavorável. Tente diminuir sua configuração de slippage.",
"swap.settings.slippage.warning.max": "Digite um valor menor que {{maxSlippageTolerance}}",
"swap.settings.slippage.warning.message": "A derrapagem pode ser maior que o necessário",
"swap.settings.slippage.warning.min": "Digite um valor maior que 0",
@@ -1912,7 +1909,7 @@
"swap.total": "Total",
"swap.tradeRoutes": "Rotas de negociação",
"swap.transaction.deadline": "Prazo da transação",
- "swap.transaction.revertAfter": "Transações pendentes por mais do que esse período serão revertidas.",
+ "swap.transaction.revertAfter": "Sua transação será revertida se ficar pendente por mais tempo que este período.",
"swap.unsupportedAssets.readMore": "Leia mais sobre ativos sem suporte",
"swap.warning.enterLargerAmount.title": "Digite um valor maior",
"swap.warning.expectedFailure.increaseSlippage": "Tente aumentar o slippage.",
@@ -1934,7 +1931,7 @@
"swap.warning.noRoutesFound.title": "Sem rotas disponíveis",
"swap.warning.offline.message": "Talvez tenha ocorrido perda de conexão com a internet ou a rede não esteja operacional. Verifique sua conexão com a internet e tente novamente.",
"swap.warning.offline.title": "Você está off-line",
- "swap.warning.priceImpact": "Esta transação resultará em um impacto de no preço de mercado deste pool. Quer mesmo continuar?",
+ "swap.warning.priceImpact": "Esta transação resultará em um impacto de no preço de mercado deste pool. Deseja continuar?",
"swap.warning.priceImpact.message": "Devido ao volume de liquidez de {{outputCurrencySymbol}} atualmente disponível, quanto mais {{inputCurrencySymbol}} você tentar trocar, menos {{outputCurrencySymbol}} receberá.",
"swap.warning.priceImpact.message.veryHigh": "Esta transação resultará em um impacto de {{priceImpactValue}} no preço de mercado deste pool e resultará em perda de fundos.",
"swap.warning.priceImpact.title": "Impacto de preço alto ({{priceImpactValue}})",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Sempre faça sua pesquisa",
"token.safety.warning.blocked.description.default_one": "Você não pode negociar este token usando o aplicativo Uniswap.",
"token.safety.warning.blocked.description.default_other": "Você não pode negociar estes tokens usando o aplicativo Uniswap.",
+ "token.safety.warning.blocked.description.named": "Você não pode negociar {{tokenSymbol}} usando o aplicativo Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Não mostrar este aviso novamente",
"token.safety.warning.doYourOwnResearch": "Sempre faça sua própria pesquisa antes de prosseguir.",
"token.safety.warning.feeDescription": "Cobra uma quando {{action}}",
@@ -2042,10 +2040,14 @@
"token.safety.warning.impersonator": "Falsificação de outro token",
"token.safety.warning.impersonator.title": "Token falsificado detectado",
"token.safety.warning.malicious.general.message": "{{tokenSymbol}} foi marcado como malicioso pela Blockaid.",
- "token.safety.warning.malicious.impersonator.message": "{{tokenSymbol}} foi marcado pela Blockaid por tentar copiar um token diferente. Este pode não ser o token com o qual você quer fazer swap.",
+ "token.safety.warning.malicious.impersonator.message": "{{tokenSymbol}} foi marcado pela Blockaid por tentar copiar um token diferente. Este pode não ser o token que você quer fazer swap.",
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} pode não ser o token que você quer transacionar.",
"token.safety.warning.malicious.title": "Token malicioso detectado",
"token.safety.warning.mayResultInLoss": "Essa transação pode gerar prejuízo.",
+ "token.safety.warning.medium.heading.default_one": "Este token não é negociado nas principais bolsas centralizadas dos EUA.",
+ "token.safety.warning.medium.heading.default_other": "Estes tokens não são negociados nas principais bolsas centralizadas dos EUA.",
+ "token.safety.warning.medium.heading.default_one_also": "Este token também não é negociado nas principais bolsas centralizadas dos EUA.",
+ "token.safety.warning.medium.heading.default_other_also": "Estes tokens também não são negociados nas principais bolsas centralizadas dos EUA.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} não é negociado nas principais bolsas centralizadas dos EUA.",
"token.safety.warning.notListedOnExchanges": "Não listado nas maiores bolsas americanas",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} foi marcado como incompatível para venda.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} foi marcado como spam pela Blockaid.",
"token.safety.warning.spam.title": "Token de spam detectado",
"token.safety.warning.spamsUsers": "Envia spam a usuários",
+ "token.safety.warning.strong.heading.default_one": "Este token não é negociado nas principais bolsas centralizadas dos EUA ou trocado com frequência na Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Estes tokens não são negociados nas principais bolsas centralizadas dos EUA ou trocados com frequência na Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} não é negociado nas principais bolsas centralizadas dos EUA ou trocado com frequência na Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "Para o {{tokenSymbol}}, há uma tarifa de {{buyFeePercent}} na compra e {{sellFeePercent}} na venda.",
"token.safety.warning.tokenChargesFee.buy.message": "Para o {{tokenSymbol}}, há uma tarifa de {{feePercent}} na compra.",
"token.safety.warning.tokenChargesFee.sell.message": "Para o {{tokenSymbol}}, há uma tarifa de {{feePercent}} na venda.",
- "token.safety.warning.tokenChargesFee.unknownFee.message": "Uma tarifa é aplicada sobre compras e vendas de {{tokenSymbol}}.",
+ "token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} cobra uma tarifa quando comprado ou vendido.",
+ "token.safetyLevel.blocked.header": "Não disponível",
"token.safetyLevel.blocked.message": "Você não pode negociar este token usando a carteira Uniswap.",
+ "token.safetyLevel.medium.header": "Cuidado",
+ "token.safetyLevel.medium.message": "Este token não é negociado nas principais bolsas centralizadas dos EUA. Sempre faça sua própria pesquisa antes de prosseguir.",
"token.safetyLevel.medium.message.plural": "Estes tokens não são negociados nas principais bolsas centralizadas dos EUA. Sempre faça sua própria pesquisa antes de prosseguir.",
+ "token.safetyLevel.strong.header": "Aviso",
+ "token.safetyLevel.strong.message": "Este token não é negociado nas principais bolsas centralizadas dos EUA ou trocado com frequência na Uniswap. Sempre faça sua própria pesquisa antes de prosseguir.",
"token.selector.search.error": "Não foi possível carregar os resultados da pesquisa",
"token.stats.fullyDilutedValuation": "Avaliação totalmente diluída",
"token.stats.marketCap": "Valor de mercado",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Outros tokens em {{network}}",
"tokens.selector.section.recent": "Pesquisas recentes",
"tokens.selector.section.search": "Resultados da pesquisa",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Seus tokens",
"tokens.table.search.placeholder.pools": "Procurar pools",
"tokens.table.search.placeholder.tokens": "Procurar tokens",
@@ -2133,7 +2142,7 @@
"transaction.details.dappName": "Aplicativo",
"transaction.details.from": "De",
"transaction.details.networkFee": "Taxa de rede",
- "transaction.details.providerFee": "Tarifa do provedor",
+ "transaction.details.providerFee": "Taxa do provedor",
"transaction.details.swapRate": "Taxa",
"transaction.details.transaction": "Transação",
"transaction.details.uniswapFee": "Tarifa ({{ feePercent }}%)",
@@ -2229,21 +2238,13 @@
"transaction.warning.insufficientGas.modal.message": "Você precisa de ~ {{tokenSymbol}} {{tokenAmount}} () em {{networkName}} para cobrir a taxa de rede desta transação.",
"transaction.warning.insufficientGas.modal.title.withNetwork": "Não há {{tokenSymbol}} suficiente em {{networkName}}",
"transaction.warning.insufficientGas.modal.title.withoutNetwork": "Não há {{tokenSymbol}} suficiente",
- "transaction.warning.maxNative.message": "Você está prestes a gastar a maior parte do seu saldo de token de rede. Essa ação deixará fundos insuficientes para cobrir os custos de rede futuros.",
+ "transaction.warning.maxNative.message": "You’re about to spend most of your network token balance. This may leave insufficient funds to cover future network costs.",
"transaction.warning.maxNative.title": "Baixo saldo de tokens de rede",
"transaction.watcher.error.cancel": "Não é possível cancelar a transação",
"transaction.watcher.error.status": "Erro ao verificar o status da transação",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": "O agrega fontes de liquidez para garantir melhores preços e trocas sem custos de gas.",
"uniswapx.description": "O UniswapX agrega fontes de liquidez para garantir melhores preços e trocas sem custos de gas.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Inclui UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Saiba mais sobre como trocar com o UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/ro-RO.json b/packages/uniswap/src/i18n/locales/translations/ro-RO.json
index b5da97ca96e..64d59b05181 100644
--- a/packages/uniswap/src/i18n/locales/translations/ro-RO.json
+++ b/packages/uniswap/src/i18n/locales/translations/ro-RO.json
@@ -176,6 +176,7 @@
"common.allTime": "Tot timpul",
"common.amount.label": "Cantitate",
"common.amountDeposited.label": "{{amount}} Depus",
+ "common.amountInput.placeholder": "Suma de intrare",
"common.and": "şi",
"common.app": "App",
"common.approval.cancelled": "Aprobare anulată",
@@ -312,7 +313,6 @@
"common.currency": "Valută",
"common.currentPrice": "Pretul curent",
"common.currentPrice.label": "Pretul curent:",
- "common.currentPrice.unavailable": "Prețul actual nu este disponibil",
"common.custom": "Personalizat",
"common.customRange": "Gamă personalizată",
"common.dataOutdated": "Datele pot fi depășite",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Taxe câștigate:",
"common.feesEarnedPerBase": "{{symbolA}} pe {{symbolB}}",
"common.fetchingRoute": "Preluare traseu",
+ "common.flag": "Pavilion",
"common.floor": "Podea",
"common.floorPrice": "Preț la etaj",
"common.for": "Pentru",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Aprobați în portofel",
"common.wallet.label": "Portofel",
"common.walletForSwapping": "Portofelul construit pentru schimb. Disponibil pe iOS și Android.",
- "common.warning": "Avertizare",
"common.webApp": "aplicație web",
"common.website": "Site-ul web",
"common.whyApprove": "De ce trebuie să aprob un token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Nu s-au putut încărca jetoane pentru a cumpăra",
"fiatOnRamp.error.max": "Maxim {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "Nu s-au găsit ghilimele.",
"fiatOnRamp.error.unavailable": "Acest serviciu nu este disponibil în regiunea dvs",
"fiatOnRamp.error.unsupported": "Nu este acceptat în regiune",
"fiatOnRamp.error.usd": "Disponibil pentru cumpărare numai în USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} pentru {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Nu s-au găsit ghilimele",
"fiatOnRamp.purchasedOn": "Achiziționat pe {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Veți continua către portalul furnizorului pentru a vedea taxele asociate tranzacției dvs.",
"fiatOnRamp.quote.type.list": "{{optionsList}}și alte opțiuni",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Preț:",
"migrate.v2Description": "Acest instrument va migra în siguranță lichiditatea dvs. {{source}} la V3. Procesul este complet lipsit de încredere datorită contractului de migrare <0>Uniswap0> ↗",
"migrate.v2Instruction": "Pentru fiecare grup afișat mai jos, faceți clic pe migrați pentru a elimina lichiditatea din Uniswap V2 și a o depune în Uniswap V3.",
+ "migrate.v2Subtitle": "Migrați-vă jetoanele de lichiditate de la Uniswap V2 la Uniswap V3.",
"migrate.v2Title": "Migrați lichiditatea V2",
"migrate.v3Price": "V3 {{sym}} Preț:",
"mint.v3.input.invalidPrice.error": "Preț introdus nevalid",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Dă-ți portofel un nume",
"onboarding.notification.permission.message": "Pentru a primi notificări, activați notificările pentru Uniswap Wallet în setările dispozitivului dvs.",
"onboarding.notification.permission.title": "Permisiune de notificări",
- "onboarding.notification.subtitle": "Rămâneți la curent cu starea tranzacțiilor și modificările majore ale prețurilor pentru jetoanele preferate",
- "onboarding.notification.title": "Activați notificările",
+ "onboarding.notification.subtitle": "Primiți notificări când transferurile, schimburile și aprobările dvs. sunt finalizate.",
+ "onboarding.notification.title": "Activați notificările push",
"onboarding.passkey.account.protection": "Contul dvs. este protejat de propria dvs. stocare sigură a parolei.",
"onboarding.passkey.biometric.scan": "Telefon, tabletă sau browser — scanați-vă datele biometrice și veți fi conectat.",
"onboarding.passkey.create": "Creați-vă cheia de acces",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Conectați-vă la un portofel pentru a vă vedea lichiditatea.",
"pool.liquidity.data.error.message": "A apărut o eroare la preluarea datelor necesare pentru tranzacția dvs.",
"pool.liquidity.earn.fee": "Furnizorii de lichiditate câștigă o taxă de 0,3% pentru toate tranzacțiile proporțional cu cota lor din pool. Taxele sunt adăugate la pool, se acumulează în timp real și pot fi solicitate prin retragerea lichidității.",
- "pool.liquidity.outOfSync": "Nepotrivirea prețului de piață și a grupului",
- "pool.liquidity.outOfSync.message": "Prețurile din acest pool diferă în funcție de prețurile de piață ale jetoanelor selectate. Ajustați-vă intervalul de preț în consecință sau așteptați ca grupul să se reechilibreze pentru a evita pierderile.",
+ "pool.liquidity.outOfSync": "Prețurile pool desincronizate",
+ "pool.liquidity.outOfSync.message": "Prețurile din acest grup nu sunt sincronizate cu piața actuală. Adăugarea de lichiditate poate duce la o pierdere de fonduri.",
"pool.liquidity.ownershipWarning.message": "Nu sunteți proprietarul acestei poziții LP. Nu veți putea retrage lichiditatea din această poziție decât dacă dețineți următoarea adresă: {{ownerAddress}}",
"pool.liquidity.rewards": "Recompense ale furnizorului de lichiditate",
"pool.liquidity.taxWarning": "Taxe simbol",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Prețul acestui bazin se încadrează în intervalul selectat de dvs. Poziția dvs. câștigă în prezent comisioane.",
"pool.rates": "Tarife",
"pool.ratioTokenToPrice": "Raportul de jetoane pe care îl adăugați va stabili prețul acestui pool.",
- "pool.refresh.prices": "Actualizează prețurile",
"pool.removeLiquidity": "Eliminați lichiditatea",
"pool.rewardsPool.label": "Jetoane din grupul de recompense:",
"pool.selectedRange": "Gama selectată",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Cârligele sunt o caracteristică avansată care permite grupurilor să interacționeze cu contractele inteligente, deblocând diverse capabilități. Fiți atenți când adăugați cârlige, deoarece unele pot fi rău intenționate sau pot provoca consecințe nedorite.",
"position.addingHook": "Adăugarea cârligului",
"position.addingHook.disclaimer": "Adăugarea de cârlige poate avea consecințe nedorite. Faceți-vă cercetările și continuați pe propriul risc.",
- "position.addingHook.hideProperties": "Ascunde proprietățile",
"position.addingHook.invalidAddress": "Introduceți o adresă de cârlig validă",
"position.addingHook.viewProperties": "Vizualizați proprietăți",
"position.appearHere": "Poziția ta va apărea aici.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Depus {{currencySymbol}}",
"position.hook.disclaimer": "Înțeleg riscurile.",
"position.hook.liquidityWarning": "Acest indicator poate determina ca pool-ul să blocheze adăugarea de noi lichidități. Tranzacția dvs. poate reveni.",
- "position.hook.removeWarning": "Poate cauza blocarea fondurilor sau blocarea taxelor.",
+ "position.hook.removeWarning": "Acest semnalizare vă poate bloca fondurile sau vă poate împiedica să colectați taxe.",
"position.hook.swapWarning": "Acest indicator poate permite utilizatorilor sofisticați să folosească mai ușor lichiditatea Just-In-Time, rezultând comisioane mai mici câștigate.",
"position.hook.warningHeader": "Cârlig cu risc ridicat detectat",
"position.hook.warningInfo": "Am identificat riscuri potențiale cu acest cârlig. Vă rugăm să examinați steaguri și să verificați dacă acesta este cârligul pe care doriți să îl utilizați înainte de a continua.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Aprobați și schimbați",
"swap.approveInWallet": "Aprobați în portofel",
"swap.balance.amount": "Sold: {{amount}}",
- "swap.bestRoute.cost": "Se estimează că cea mai eficientă rută costă ~{{gasPrice}} în costuri de rețea. ",
+ "swap.bestRoute.cost": "Ruta cu cel mai bun preț costă ~{{gasPrice}} în benzină. ",
+ "swap.bestRoute.cost.v4": "Ruta optimă costă ~{{gasPrice}} în gaz. ",
"swap.bridging.estimatedTime": "EST. timp",
"swap.bridging.title": "Schimbarea între rețele",
"swap.bridging.warning.description": "Schimbați de la {{fromNetwork}} la {{toNetwork}}. Acest lucru este cunoscut și sub denumirea de „punte”, care vă mută jetoanele de la o rețea la alta.",
@@ -1868,16 +1866,15 @@
"swap.review": "Schimb de recenzii",
"swap.review.summary": "Schimbați",
"swap.reviewLimit": "Limita de revizuire",
- "swap.route.optimizedGasCost": "Această rută ia în considerare rutele împărțite, hopurile multiple și costurile de rețea ale fiecărui pas.",
+ "swap.route.optimizedGasCost": "Această rută vă optimizează producția totală, luând în considerare rutele împărțite, salturile multiple și costurile de rețea ale fiecărui pas.",
"swap.settings.deadline.tooltip": "Tranzacția dvs. va reveni dacă este în așteptare mai mult de această perioadă de timp. (Maximum: 3 zile).",
"swap.settings.deadline.warning": "Termen mare",
"swap.settings.protection.description": "Cu protecția swap activată, tranzacțiile dvs. Ethereum vor fi protejate de atacurile tip sandwich, cu șanse reduse de eșec.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Rețea",
"swap.settings.protection.subtitle.unavailable": "Nu este disponibil pe {{chainName}}",
"swap.settings.protection.title": "Protecție la schimb",
- "swap.settings.routingPreference.option.default.description": "Selectarea acestei opțiuni identifică cea mai eficientă rută pentru schimbul dvs.",
- "swap.settings.routingPreference.option.default.description.preV4": "Clientul Uniswap selectează cea mai ieftină opțiune de tranzacționare luând în considerare prețul și costurile de rețea.",
- "swap.settings.routingPreference.option.default.tooltip": "O rută este identificată luând în considerare v2, v3 și anumite grupuri v4, luând în considerare impactul estimat al prețului și costurile de rețea.",
+ "swap.settings.routingPreference.option.default.description": "Clientul Uniswap selectează cea mai ieftină opțiune de tranzacționare luând în considerare prețul și costurile de rețea.",
+ "swap.settings.routingPreference.option.default.description.v4": "Clientul Uniswap selectează opțiunea de tranzacționare optimă luând în considerare prețul și costurile de rețea.",
"swap.settings.routingPreference.option.v2.title": "piscine v2",
"swap.settings.routingPreference.option.v3.title": "piscine v3",
"swap.settings.routingPreference.option.v4.title": "piscine v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Fă-ți întotdeauna cercetările",
"token.safety.warning.blocked.description.default_one": "Nu puteți tranzacționa acest token folosind aplicația Uniswap.",
"token.safety.warning.blocked.description.default_other": "Nu puteți tranzacționa aceste jetoane folosind aplicația Uniswap.",
+ "token.safety.warning.blocked.description.named": "Nu puteți tranzacționa {{tokenSymbol}} folosind aplicația Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Nu-mi mai arăta acest avertisment",
"token.safety.warning.doYourOwnResearch": "Fă-ți întotdeauna propria cercetare înainte de a continua.",
"token.safety.warning.feeDescription": "Încarcă un când {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "Este posibil ca {{tokenSymbol}} să nu fie simbolul pe care doriți să îl schimbați.",
"token.safety.warning.malicious.title": "A fost detectat un simbol rău intenționat",
"token.safety.warning.mayResultInLoss": "Schimbarea acestuia poate duce la o pierdere de fonduri.",
+ "token.safety.warning.medium.heading.default_one": "Acest token nu este tranzacționat pe principalele burse centralizate din SUA.",
+ "token.safety.warning.medium.heading.default_other": "Aceste jetoane nu sunt tranzacționate pe principalele burse centralizate din SUA.",
+ "token.safety.warning.medium.heading.default_one_also": "De asemenea, acest token nu este tranzacționat pe principalele burse centralizate din SUA.",
+ "token.safety.warning.medium.heading.default_other_also": "De asemenea, aceste jetoane nu sunt tranzacționate pe principalele burse centralizate din SUA.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} nu este tranzacționat pe principalele burse centralizate din SUA.",
"token.safety.warning.notListedOnExchanges": "Nu este listat la bursele de top din SUA",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} a fost semnalat ca nevândubil.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} a fost semnalat ca spam de Blockaid.",
"token.safety.warning.spam.title": "Indicativ de spam detectat",
"token.safety.warning.spamsUsers": "Spam utilizatorii",
+ "token.safety.warning.strong.heading.default_one": "Acest token nu este tranzacționat pe principalele burse centralizate din SUA sau schimbat frecvent pe Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Aceste jetoane nu sunt tranzacționate pe principalele burse centralizate din SUA sau schimbate frecvent pe Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} nu este tranzacționat pe principalele burse centralizate din SUA sau schimbat frecvent pe Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} percepe o taxă de {{buyFeePercent}} când este cumpărat și {{sellFeePercent}} când este vândut.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} percepe o taxă de {{feePercent}} atunci când este cumpărat.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} percepe o taxă de {{feePercent}} la vânzare.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} percepe o taxă atunci când este cumpărat sau vândut.",
+ "token.safetyLevel.blocked.header": "Nu este disponibil",
"token.safetyLevel.blocked.message": "Nu puteți tranzacționa acest token utilizând portofelul Uniswap.",
+ "token.safetyLevel.medium.header": "Prudență",
+ "token.safetyLevel.medium.message": "Acest token nu este tranzacționat pe principalele burse centralizate din SUA. Fă-ți întotdeauna propria cercetare înainte de a continua.",
"token.safetyLevel.medium.message.plural": "Aceste jetoane nu sunt tranzacționate pe principalele burse centralizate din SUA. Fă-ți întotdeauna propria cercetare înainte de a continua.",
+ "token.safetyLevel.strong.header": "Avertizare",
+ "token.safetyLevel.strong.message": "Acest token nu este tranzacționat pe principalele burse centralizate din SUA sau schimbat frecvent pe Uniswap. Fă-ți întotdeauna propria cercetare înainte de a continua.",
"token.selector.search.error": "Nu s-au putut încărca rezultatele căutării",
"token.stats.fullyDilutedValuation": "Evaluare complet diluată",
"token.stats.marketCap": "Capitalizarea pieței",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Alte jetoane pe {{network}}",
"tokens.selector.section.recent": "Căutări recente",
"tokens.selector.section.search": "Rezultatele cautarii",
- "tokens.selector.section.trending": "Jetoane după volum 24 de ore",
"tokens.selector.section.yours": "Jetoanele tale",
"tokens.table.search.placeholder.pools": "Căutați piscine",
"tokens.table.search.placeholder.tokens": "Jetoane de căutare",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Echilibrul jetoanelor de rețea scăzut",
"transaction.watcher.error.cancel": "Nu se poate anula tranzacția",
"transaction.watcher.error.status": "Eroare la verificarea stării tranzacției",
- "unichain.promotion.cold.description": "Schimbări mai rapide. Taxe mai mici. Unichain este casa pentru DeFi.",
- "unichain.promotion.cold.title": "Vă prezentăm Unichain",
- "unichain.promotion.modal.description": "Schimbări mai rapide. Taxe mai mici. Unichain este casa pentru lichiditatea cross-chain.",
- "unichain.promotion.modal.detail.costs": "Costuri mai mici pentru crearea grupurilor și gestionarea pozițiilor.",
- "unichain.promotion.modal.detail.fees": "Economisiți 95% la comisioane comparativ cu Ethereum.",
- "unichain.promotion.modal.detail.instant": "Schimbați instantaneu",
- "unichain.promotion.warm.description": "Schimbați jetoanele preferate mai rapid și cu costuri mai mici de gaz.",
- "unichain.promotion.warm.title": "Începeți să schimbați pe Unichain",
"uniswapX.aggregatesLiquidity": " reunește sursele de lichiditate pentru prețuri mai bune și swap fără gaz.",
"uniswapx.description": "UniswapX reunește sursele de lichiditate pentru prețuri mai bune și swap fără gaz.",
- "uniswapx.included": "Include UniswapX",
+ "uniswapx.included": "Include UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Aflați mai multe despre schimbarea cu UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/ru-RU.json b/packages/uniswap/src/i18n/locales/translations/ru-RU.json
index 21973426c65..ab014308151 100644
--- a/packages/uniswap/src/i18n/locales/translations/ru-RU.json
+++ b/packages/uniswap/src/i18n/locales/translations/ru-RU.json
@@ -176,6 +176,7 @@
"common.allTime": "За все время",
"common.amount.label": "Сумма",
"common.amountDeposited.label": "Внесено {{amount}}",
+ "common.amountInput.placeholder": "Введенная сумма",
"common.and": "и",
"common.app": "Приложение",
"common.approval.cancelled": "Утверждение отменено",
@@ -312,7 +313,6 @@
"common.currency": "Валюта",
"common.currentPrice": "Текущая цена",
"common.currentPrice.label": "Текущая цена:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Индивидуальная настройка",
"common.customRange": "Индивидуальный диапазон",
"common.dataOutdated": "Данные могут быть устаревшими",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "Полученные комиссии в {{symbol}}:",
"common.feesEarnedPerBase": "{{symbolA}} за {{symbolB}}",
"common.fetchingRoute": "Получение маршрута",
+ "common.flag": "Отметить",
"common.floor": "Нижний порог",
"common.floorPrice": "Минимальная цена",
"common.for": "Для",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Утвердить в кошельке",
"common.wallet.label": "Кошелек",
"common.walletForSwapping": "Кошелек, созданный для обмена. Доступен на устройствах iOS и Android.",
- "common.warning": "Warning",
"common.webApp": "Веб-приложение",
"common.website": "Веб-сайт",
"common.whyApprove": "Для чего утверждать токен?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Не удалось загрузить токены для покупки",
"fiatOnRamp.error.max": "Максимальная сумма {{amount}}",
"fiatOnRamp.error.min": "Минимальная сумма {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Данная услуга недоступна в вашем регионе",
"fiatOnRamp.error.unsupported": "Не поддерживается в определенном регионе",
"fiatOnRamp.error.usd": "Доступно только для покупки в долларах США",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} на {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Куплено у {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Вы перейдете на портал поставщика услуг для просмотра комиссий, связанных с вашей транзакцией.",
"fiatOnRamp.quote.type.list": "{{optionsList}} и другие варианты",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "LP NFT {{symA}}/{{symB}}",
"migrate.lpTokens": "LP-токены {{symA}}/{{symB}}",
"migrate.migrating": "Перенос",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Не видите ни одной из своих позиций v2? Импортируйте ее.",
"migrate.noV2Liquidity": "Ликвидность V2 не обнаружена.",
"migrate.positionNoFees": "Ваша позиция не будет приносить комиссию и не будет использоваться в сделках до тех пор, пока рыночная цена не переместится в ваш диапазон.",
"migrate.priceDifference": "Разница в цене: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "Цена {{tokenSymbol}} {{protocolName}}:",
"migrate.v2Description": "Этот инструмент безопасно перенесет вашу ликвидность {{source}} на V3. Этот процесс полностью безопасен благодаря <0>контракту переноса Uniswap.0> ↗",
"migrate.v2Instruction": "Для каждого пула, показанного ниже, нажмите «Перенос», чтобы вывести свою ликвидность из Uniswap V2 и перенести ее в Uniswap V3.",
+ "migrate.v2Subtitle": "Перенесите свои токены ликвидности из Uniswap V2 в Uniswap V3.",
"migrate.v2Title": "Перенос ликвидности V2",
"migrate.v3Price": "Цена {{sym}} V3:",
"mint.v3.input.invalidPrice.error": "Неверный ввод цены",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Придумайте имя для своего кошелька",
"onboarding.notification.permission.message": "Чтобы получать уведомления, включите их для Uniswap Wallet в настройках своего устройства.",
"onboarding.notification.permission.title": "Разрешение на уведомления",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Получайте уведомления о своих переводах, свопах и утверждениях.",
+ "onboarding.notification.title": "Включите push-уведомления",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Подключитесь к кошельку, чтобы просмотреть свою ликвидность.",
"pool.liquidity.data.error.message": "Во время получения данных для вашей транзакции произошла ошибка.",
"pool.liquidity.earn.fee": "Поставщики ликвидности получают за все сделки комиссию в размере 0,3 % пропорционально их доле в пуле. Комиссии добавляются в пул, начисляются в режиме реального времени и могут быть получены путем вывода ликвидности.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Цены в пуле не согласованы",
+ "pool.liquidity.outOfSync.message": "Цены в этом пуле не совпадают с текущим рынком. Добавление ликвидности может привести к потере средств.",
"pool.liquidity.ownershipWarning.message": "Вы не являетесь владельцем этой позиции LP. Вы не сможете вывести ликвидность из этой позиции, если у вас нет следующего адреса: {{ownerAddress}}",
"pool.liquidity.rewards": "Вознаграждения поставщика ликвидности",
"pool.liquidity.taxWarning": "Налоги на токены",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Цена этого пула находится в пределах выбранного вами диапазона. Ваша позиция в настоящее время приносит комиссии.",
"pool.rates": "Ставки",
"pool.ratioTokenToPrice": "Соотношение добавленных вами токенов будет определять цену этого пула.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Удалить ликвидность",
"pool.rewardsPool.label": "Токены пула в пуле вознаграждений:",
"pool.selectedRange": "Выбранный диапазон",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Хуки — это расширенная функция, которая позволяет пулам взаимодействовать со смарт-контрактами, открывая различные возможности. Будьте осторожны при добавлении хуков, так как некоторые из них могут быть вредоносными или вызывать непреднамеренные последствия.",
"position.addingHook": "Добавление хука",
"position.addingHook.disclaimer": "Добавление хуков может иметь непредвиденные последствия. Проверьте информацию и продолжайте на свой страх и риск.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Введите действительный адрес хука",
"position.addingHook.viewProperties": "Просмотреть свойства",
"position.appearHere": "Здесь будет отображаться ваша позиция.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Внесено {{currencySymbol}}",
"position.hook.disclaimer": "Я понимаю риски.",
"position.hook.liquidityWarning": "Это предупреждение может привести к блокированию пулом новой добавляемой ликвидности. Ваша транзакция может не состояться.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Это предупреждение может привести к блокированию ваших средств или запрету на взимание комиссий.",
"position.hook.swapWarning": "Это предупреждение может позволить продвинутым пользователям легче использовать ликвидность Just-In-Time, что приведет к получению более низких комиссионных.",
"position.hook.warningHeader": "Обнаружен хук с высокой степенью риска",
"position.hook.warningInfo": "Мы обнаружили потенциальные риски, связанные с этим хуком. Прежде чем продолжить, просмотрите предупреждения и убедитесь, что это именно тот хук, который вы хотите использовать.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Утвердить и выполнить своп",
"swap.approveInWallet": "Утвердить в кошельке",
"swap.balance.amount": "Баланс: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Маршрут по лучшей цене со стоимостью газа прибл. {{gasPrice}}. ",
+ "swap.bestRoute.cost.v4": "Оптимальный маршрут со стоимостью газа прибл. {{gasPrice}}.",
"swap.bridging.estimatedTime": "Прибл. время",
"swap.bridging.title": "Своп между сетями",
"swap.bridging.warning.description": "Вы выполняете своп из {{fromNetwork}} в {{toNetwork}}. Такая операция, также известная как создание «моста», перемещает ваши токены из одной сети в другую.",
@@ -1868,16 +1866,15 @@
"swap.review": "Просмотреть сведения о свопе",
"swap.review.summary": "Вы выполняете своп",
"swap.reviewLimit": "Проверить лимит",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "Данный маршрут оптимизирует общий выход, учитывая разделенные маршруты, несколько переходов и комиссии сети на всех этапах.",
"swap.settings.deadline.tooltip": "Ваша транзакция будет отменена, если останется в ожидании дольше указанного времени (максимум — 3 дня).",
"swap.settings.deadline.warning": "Длительный крайний срок",
"swap.settings.protection.description": "Если включена защита свопа, ваши транзакции Эфириум будут защищены от сэндвич-атак с уменьшенной вероятностью сбоя.",
"swap.settings.protection.subtitle.supported": "Сеть {{chainName}}",
"swap.settings.protection.subtitle.unavailable": "Недоступно в {{chainName}}",
"swap.settings.protection.title": "Защита свопа",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Клиент Uniswap выбирает самый дешевый вариант торговли с учетом цены и комиссий сети.",
+ "swap.settings.routingPreference.option.default.description.v4": "Клиент Uniswap выбирает оптимальный вариант торговли с учетом цены и комиссий сети.",
"swap.settings.routingPreference.option.v2.title": "Пулы V2",
"swap.settings.routingPreference.option.v3.title": "Пулы V3",
"swap.settings.routingPreference.option.v4.title": "Пулы V4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Всегда проверяйте информацию",
"token.safety.warning.blocked.description.default_one": "Вы не можете торговать этим токеном с помощью приложения Uniswap.",
"token.safety.warning.blocked.description.default_other": "Вы не можете торговать этими токенами с помощью приложения Uniswap.",
+ "token.safety.warning.blocked.description.named": "Вы не можете торговать {{tokenSymbol}} с помощью приложения Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Больше не показывать мне это предупреждение",
"token.safety.warning.doYourOwnResearch": "Всегда проверяйте информацию, прежде чем действовать.",
"token.safety.warning.feeDescription": "Взимает комиссию , когда {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "Возможно, {{tokenSymbol}} не тот токен, с которым вы хотите выполнить своп.",
"token.safety.warning.malicious.title": "Обнаружен вредоносный токен",
"token.safety.warning.mayResultInLoss": "Его своп может привести к потере средств.",
+ "token.safety.warning.medium.heading.default_one": "Этот токен не торгуется на ведущих централизованных криптовалютных биржах США.",
+ "token.safety.warning.medium.heading.default_other": "Эти токены не торгуются на ведущих централизованных криптовалютных биржах США.",
+ "token.safety.warning.medium.heading.default_one_also": "Этот токен также не торгуется на ведущих централизованных криптовалютных биржах США.",
+ "token.safety.warning.medium.heading.default_other_also": "Эти токены также не торгуются на ведущих централизованных криптовалютных биржах США.",
"token.safety.warning.medium.heading.named": "Токен {{tokenSymbol}} не торгуется на ведущих централизованных криптовалютных биржах США.",
"token.safety.warning.notListedOnExchanges": "Не котируется на ведущих криптовалютных биржах США",
"token.safety.warning.sellFee100.message": "Токен {{ tokenSymbol }} помечен как непригодный для продажи.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Токен {{tokenSymbol}} помечен как спам в Blockaid.",
"token.safety.warning.spam.title": "Обнаружен спам-токен",
"token.safety.warning.spamsUsers": "Распространяет спам среди пользователей",
+ "token.safety.warning.strong.heading.default_one": "Этот токен не торгуется на ведущих централизованных криптовалютных биржах США и редко обменивается на Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Эти токены не торгуются на ведущих централизованных криптовалютных биржах США и редко обмениваются на Uniswap.",
+ "token.safety.warning.strong.heading.named": "Токен {{tokenSymbol}} не торгуется на ведущих централизованных криптовалютных биржах США и редко обменивается на Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} взимает комиссию в размере {{buyFeePercent}} при покупке и {{sellFeePercent}} при продаже.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} взимает комиссию в размере {{feePercent}} при покупке.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} взимает комиссию в размере {{feePercent}} при продаже.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "За покупку и продажу {{tokenSymbol}} взимается комиссия.",
+ "token.safetyLevel.blocked.header": "Недоступно",
"token.safetyLevel.blocked.message": "Вы не можете торговать этим токеном с помощью кошелька Uniswap.",
+ "token.safetyLevel.medium.header": "Предупреждение",
+ "token.safetyLevel.medium.message": "Этот токен не торгуется на ведущих централизованных криптовалютных биржах США. Всегда проверяйте информацию, прежде чем продолжить.",
"token.safetyLevel.medium.message.plural": "Эти токены не торгуются на ведущих централизованных криптовалютных биржах США. Всегда проверяйте информацию, прежде чем продолжить.",
+ "token.safetyLevel.strong.header": "Предупреждение",
+ "token.safetyLevel.strong.message": "Этот токен не торгуется на ведущих централизованных криптовалютных биржах США и редко обменивается на Uniswap. Всегда проверяйте информацию, прежде чем продолжить.",
"token.selector.search.error": "Не удалось загрузить результаты поиска",
"token.stats.fullyDilutedValuation": "Полностью разбавленная оценка",
"token.stats.marketCap": "Рыночная капитализация",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Другие токены в {{network}}",
"tokens.selector.section.recent": "Недавние поисковые запросы",
"tokens.selector.section.search": "Результаты поиска",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Ваши токены",
"tokens.table.search.placeholder.pools": "Поиск пулов",
"tokens.table.search.placeholder.tokens": "Поиск токенов",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Низкий сетевой баланс токенов",
"transaction.watcher.error.cancel": "Невозможно отменить транзакцию",
"transaction.watcher.error.status": "Ошибка при проверке статуса транзакции",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " объединяет источники ликвидности для более выгодных цен и свопов без газа.",
"uniswapx.description": "UniswapX объединяет источники ликвидности для более выгодных цен и свопов без газа.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Включает UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Узнайте больше о свопе с помощью UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/sl-SI.json b/packages/uniswap/src/i18n/locales/translations/sl-SI.json
index b356ffdc9af..38dd048e094 100644
--- a/packages/uniswap/src/i18n/locales/translations/sl-SI.json
+++ b/packages/uniswap/src/i18n/locales/translations/sl-SI.json
@@ -176,6 +176,7 @@
"common.allTime": "Ves čas",
"common.amount.label": "Znesek",
"common.amountDeposited.label": "{{amount}} Deponirano",
+ "common.amountInput.placeholder": "Vnos zneska",
"common.and": "in",
"common.app": "aplikacija",
"common.approval.cancelled": "Odobritev preklicana",
@@ -312,7 +313,6 @@
"common.currency": "Valuta",
"common.currentPrice": "Trenutna cena",
"common.currentPrice.label": "Trenutna cena:",
- "common.currentPrice.unavailable": "Trenutna cena ni na voljo",
"common.custom": "Po meri",
"common.customRange": "Razpon po meri",
"common.dataOutdated": "Podatki so lahko zastareli",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Zasluženi honorarji:",
"common.feesEarnedPerBase": "{{symbolA}} na {{symbolB}}",
"common.fetchingRoute": "Pridobivanje poti",
+ "common.flag": "Zastava",
"common.floor": "Nadstropje",
"common.floorPrice": "Spodnja cena",
"common.for": "Za",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Odobri v denarnici",
"common.wallet.label": "Denarnica",
"common.walletForSwapping": "Denarnica, narejena za menjavo. Na voljo za iOS in Android.",
- "common.warning": "Opozorilo",
"common.webApp": "Spletna aplikacija",
"common.website": "Spletna stran",
"common.whyApprove": "Zakaj moram odobriti žeton?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Ni bilo mogoče naložiti žetonov za nakup",
"fiatOnRamp.error.max": "Največ {{amount}}",
"fiatOnRamp.error.min": "Najmanj {{amount}}",
- "fiatOnRamp.error.noQuotes": "Ni narekovajev.",
"fiatOnRamp.error.unavailable": "Ta storitev ni na voljo v vaši regiji",
"fiatOnRamp.error.unsupported": "Ni podprto v regiji",
"fiatOnRamp.error.usd": "Na voljo samo za nakup v USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} za {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Ni narekovajev",
"fiatOnRamp.purchasedOn": "Kupljeno {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Nadaljevali boste s portalom ponudnika, da si ogledate stroške, povezane z vašo transakcijo.",
"fiatOnRamp.quote.type.list": "{{optionsList}}in druge možnosti",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Cena:",
"migrate.v2Description": "To orodje bo vašo {{source}} likvidnost varno preselilo v V3. Postopek je popolnoma nezaupljiv zaradi <0>pogodbe o migraciji Uniswap0> ↗",
"migrate.v2Instruction": "Za vsak sklad, prikazan spodaj, kliknite preseli, da odstranite svojo likvidnost iz Uniswap V2 in jo položite v Uniswap V3.",
+ "migrate.v2Subtitle": "Preselite svoje likvidnostne žetone iz Uniswap V2 v Uniswap V3.",
"migrate.v2Title": "Preseli likvidnost V2",
"migrate.v3Price": "V3 {{sym}} Cena:",
"mint.v3.input.invalidPrice.error": "Neveljaven vnos cene",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Poimenujte svojo denarnico",
"onboarding.notification.permission.message": "Če želite prejemati obvestila, vklopite obvestila za Uniswap Wallet v nastavitvah naprave.",
"onboarding.notification.permission.title": "Dovoljenje za obvestila",
- "onboarding.notification.subtitle": "Bodite obveščeni o statusih transakcij in večjih spremembah cen za priljubljene žetone",
- "onboarding.notification.title": "Vklopi obvestila",
+ "onboarding.notification.subtitle": "Prejmite obvestilo, ko bodo vaši prenosi, zamenjave in odobritve končani.",
+ "onboarding.notification.title": "Vklopite potisna obvestila",
"onboarding.passkey.account.protection": "Vaš račun je zaščiten z vašo varno shrambo gesel.",
"onboarding.passkey.biometric.scan": "Telefon, tablica ali brskalnik – samo skenirajte svoje biometrične podatke in prijavljeni boste.",
"onboarding.passkey.create": "Ustvarite svoje geslo",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Povežite se z denarnico in si oglejte svojo likvidnost.",
"pool.liquidity.data.error.message": "Pri pridobivanju podatkov, potrebnih za vašo transakcijo, je prišlo do napake.",
"pool.liquidity.earn.fee": "Ponudniki likvidnosti zaslužijo 0,3-odstotno provizijo za vse posle sorazmerno z njihovim deležem v združenju. Provizije se dodajo v skupino, se zbirajo v realnem času in jih je mogoče zahtevati z dvigom vaše likvidnosti.",
- "pool.liquidity.outOfSync": "Neusklajenost skupne in tržne cene",
- "pool.liquidity.outOfSync.message": "Cene v tem bazenu se razlikujejo od tržnih cen izbranih žetonov. Ustrezno prilagodite svoj cenovni razpon ali počakajte, da se sklad ponovno uravnoteži, da se izognete izgubam.",
+ "pool.liquidity.outOfSync": "Cene bazenov niso usklajene",
+ "pool.liquidity.outOfSync.message": "Cene v tem bazenu niso usklajene s trenutnim trgom. Povečanje likvidnosti lahko povzroči izgubo sredstev.",
"pool.liquidity.ownershipWarning.message": "Niste lastnik tega položaja LP. S te pozicije ne boste mogli dvigniti likvidnosti, razen če ste lastnik naslednjega naslova: {{ownerAddress}}",
"pool.liquidity.rewards": "Nagrade vzdrževalcem likvidnosti",
"pool.liquidity.taxWarning": "Žetonski davki",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Cena tega bazena je znotraj vašega izbranega razpona. Vaš položaj trenutno služi honorarje.",
"pool.rates": "Stopnje",
"pool.ratioTokenToPrice": "Razmerje žetonov, ki jih dodate, bo določilo ceno tega sklada.",
- "pool.refresh.prices": "Osveži cene",
"pool.removeLiquidity": "Odstranite likvidnost",
"pool.rewardsPool.label": "Žetoni združenja v skladu nagrad:",
"pool.selectedRange": "Izbrani obseg",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Kavlji so napredna funkcija, ki bazenom omogoča interakcijo s pametnimi pogodbami in odklepanje različnih zmogljivosti. Pri dodajanju kavljev bodite previdni, saj so nekateri lahko zlonamerni ali povzročijo neželene posledice.",
"position.addingHook": "Dodajanje kljuke",
"position.addingHook.disclaimer": "Dodajanje kavljev ima lahko neželene posledice. Raziščite in nadaljujte na lastno odgovornost.",
- "position.addingHook.hideProperties": "Skrij lastnosti",
"position.addingHook.invalidAddress": "Vnesite veljaven naslov kljuke",
"position.addingHook.viewProperties": "Ogled lastnosti",
"position.appearHere": "Vaš položaj bo prikazan tukaj.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Deponirano {{currencySymbol}}",
"position.hook.disclaimer": "Razumem tveganja.",
"position.hook.liquidityWarning": "Ta zastavica lahko povzroči, da združenje blokira dodajanje nove likvidnosti. Vaša transakcija se lahko povrne.",
- "position.hook.removeWarning": "Lahko povzroči zaklepanje vaših sredstev ali blokiranje pobiranja pristojbin.",
+ "position.hook.removeWarning": "Ta zastavica lahko povzroči zaklepanje vaših sredstev ali blokiranje pobiranja provizij.",
"position.hook.swapWarning": "Ta zastavica lahko izkušenim uporabnikom omogoči, da lažje izkoristijo pravočasno likvidnost, kar povzroči nižje zaslužene provizije.",
"position.hook.warningHeader": "Zaznan kavelj visokega tveganja",
"position.hook.warningInfo": "Prepoznali smo morebitna tveganja s to kljuko. Preglejte zastavice in preverite, ali je to kavelj, ki ga želite uporabiti, preden nadaljujete.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Odobri in zamenjaj",
"swap.approveInWallet": "Odobri v svoji denarnici",
"swap.balance.amount": "Stanje: {{amount}}",
- "swap.bestRoute.cost": "Ocenjuje se, da najučinkovitejša pot stane ~{{gasPrice}} stroškov omrežja. ",
+ "swap.bestRoute.cost": "Pot po najboljši ceni stane ~{{gasPrice}} goriva. ",
+ "swap.bestRoute.cost.v4": "Optimalna pot stane ~{{gasPrice}} plina. ",
"swap.bridging.estimatedTime": "Ocena čas",
"swap.bridging.title": "Zamenjava med omrežji",
"swap.bridging.warning.description": "Zamenjavate iz {{fromNetwork}} v {{toNetwork}}. To je znano tudi kot \"premostitev\", ki premakne vaše žetone iz enega omrežja v drugo.",
@@ -1868,16 +1866,15 @@
"swap.review": "Pregled zamenjave",
"swap.review.summary": "Menjaš se",
"swap.reviewLimit": "Omejitev pregleda",
- "swap.route.optimizedGasCost": "Ta pot upošteva razdeljene poti, več skokov in omrežne stroške vsakega koraka.",
+ "swap.route.optimizedGasCost": "Ta pot optimizira vaš skupni rezultat z upoštevanjem razdeljenih poti, več skokov in omrežnih stroškov vsakega koraka.",
"swap.settings.deadline.tooltip": "Vaša transakcija bo razveljavljena, če je na čakanju dlje od tega časa. (Največ: 3 dni).",
"swap.settings.deadline.warning": "Visok rok",
"swap.settings.protection.description": "Z vklopljeno zaščito pred zamenjavo bodo vaše transakcije Ethereum zaščitene pred sendvič napadi z zmanjšanimi možnostmi neuspeha.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Omrežje",
"swap.settings.protection.subtitle.unavailable": "Ni na voljo na {{chainName}}",
"swap.settings.protection.title": "Zaščita pred zamenjavo",
- "swap.settings.routingPreference.option.default.description": "Če izberete to možnost, določite najučinkovitejšo pot za vašo zamenjavo.",
- "swap.settings.routingPreference.option.default.description.preV4": "Odjemalec Uniswap izbere najcenejšo možnost trgovanja ob upoštevanju cene in stroškov omrežja.",
- "swap.settings.routingPreference.option.default.tooltip": "Pot je identificirana ob upoštevanju skupin v2, v3 in nekaterih v4, pri čemer je upoštevan ocenjen vpliv na ceno in stroške omrežja.",
+ "swap.settings.routingPreference.option.default.description": "Odjemalec Uniswap izbere najcenejšo možnost trgovanja ob upoštevanju cene in stroškov omrežja.",
+ "swap.settings.routingPreference.option.default.description.v4": "Odjemalec Uniswap izbere optimalno možnost trgovanja ob upoštevanju cene in stroškov omrežja.",
"swap.settings.routingPreference.option.v2.title": "bazeni v2",
"swap.settings.routingPreference.option.v3.title": "v3 bazeni",
"swap.settings.routingPreference.option.v4.title": "v4 bazeni",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Vedno opravite svoje raziskave",
"token.safety.warning.blocked.description.default_one": "S tem žetonom ne morete trgovati z aplikacijo Uniswap.",
"token.safety.warning.blocked.description.default_other": "S temi žetoni ne morete trgovati z aplikacijo Uniswap.",
+ "token.safety.warning.blocked.description.named": "Z aplikacijo Uniswap ne morete trgovati {{tokenSymbol}} .",
"token.safety.warning.dontShowWarningAgain": "Ne pokaži mi več tega opozorila",
"token.safety.warning.doYourOwnResearch": "Preden nadaljujete, vedno opravite lastno raziskavo.",
"token.safety.warning.feeDescription": "Polni , ko {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} morda ni žeton, ki ga želite zamenjati.",
"token.safety.warning.malicious.title": "Zaznan zlonamerni žeton",
"token.safety.warning.mayResultInLoss": "Zamenjava lahko povzroči izgubo sredstev.",
+ "token.safety.warning.medium.heading.default_one": "S tem žetonom se ne trguje na vodilnih centraliziranih borzah v ZDA.",
+ "token.safety.warning.medium.heading.default_other": "S temi žetoni se ne trguje na vodilnih centraliziranih borzah v ZDA.",
+ "token.safety.warning.medium.heading.default_one_also": "S tem žetonom se tudi ne trguje na vodilnih centraliziranih borzah v ZDA.",
+ "token.safety.warning.medium.heading.default_other_also": "S temi žetoni se tudi ne trguje na vodilnih centraliziranih borzah v ZDA.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} se ne trguje na vodilnih centraliziranih borzah v ZDA.",
"token.safety.warning.notListedOnExchanges": "Ni uvrščen na vodilne ameriške borze",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} je bilo označeno kot neprodajno.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Blockaid je {{tokenSymbol}} označil kot vsiljeno pošto.",
"token.safety.warning.spam.title": "Zaznan žeton neželene pošte",
"token.safety.warning.spamsUsers": "Spam uporabnikom",
+ "token.safety.warning.strong.heading.default_one": "S tem žetonom se ne trguje na vodilnih centraliziranih borzah v ZDA ali pogosto zamenja na Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "S temi žetoni se ne trguje na vodilnih centraliziranih borzah v ZDA ali se pogosto menjajo na Uniswap.",
+ "token.safety.warning.strong.heading.named": "Z {{tokenSymbol}} se ne trguje na vodilnih centraliziranih borzah v ZDA ali pogosto zamenja na Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} zaračuna {{buyFeePercent}} pristojbino ob nakupu in {{sellFeePercent}} ob prodaji.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} ob nakupu zaračuna pristojbino {{feePercent}} .",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} ob prodaji zaračuna pristojbino {{feePercent}} .",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} zaračuna provizijo ob nakupu ali prodaji.",
+ "token.safetyLevel.blocked.header": "Ni na voljo",
"token.safetyLevel.blocked.message": "S tem žetonom ne morete trgovati z denarnico Uniswap.",
+ "token.safetyLevel.medium.header": "Previdnost",
+ "token.safetyLevel.medium.message": "S tem žetonom se ne trguje na vodilnih centraliziranih borzah v ZDA. Preden nadaljujete, vedno opravite lastno raziskavo.",
"token.safetyLevel.medium.message.plural": "S temi žetoni se ne trguje na vodilnih centraliziranih borzah v ZDA. Preden nadaljujete, vedno opravite lastno raziskavo.",
+ "token.safetyLevel.strong.header": "Opozorilo",
+ "token.safetyLevel.strong.message": "S tem žetonom se ne trguje na vodilnih centraliziranih borzah v ZDA ali pogosto zamenja na Uniswap. Preden nadaljujete, vedno opravite lastno raziskavo.",
"token.selector.search.error": "Rezultatov iskanja ni bilo mogoče naložiti",
"token.stats.fullyDilutedValuation": "Popolnoma razredčeno vrednotenje",
"token.stats.marketCap": "Tržna kapitalizacija",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Drugi žetoni na {{network}}",
"tokens.selector.section.recent": "Nedavna iskanja",
"tokens.selector.section.search": "Rezultati iskanja",
- "tokens.selector.section.trending": "Žetoni po volumnu 24H",
"tokens.selector.section.yours": "Vaši žetoni",
"tokens.table.search.placeholder.pools": "Iskanje bazenov",
"tokens.table.search.placeholder.tokens": "Iskanje žetonov",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Nizko stanje omrežnih žetonov",
"transaction.watcher.error.cancel": "Transakcije ni mogoče preklicati",
"transaction.watcher.error.status": "Napaka pri preverjanju stanja transakcije",
- "unichain.promotion.cold.description": "Hitrejše menjave. Nižje pristojbine. Unichain je dom za DeFi.",
- "unichain.promotion.cold.title": "Predstavljamo Unichain",
- "unichain.promotion.modal.description": "Hitrejše menjave. Nižje pristojbine. Unichain je dom za medverižno likvidnost.",
- "unichain.promotion.modal.detail.costs": "Nižji stroški za ustvarjanje skupin in upravljanje pozicij.",
- "unichain.promotion.modal.detail.fees": "Prihranite 95 % pri provizijah v primerjavi z Ethereumom.",
- "unichain.promotion.modal.detail.instant": "Zamenjaj takoj",
- "unichain.promotion.warm.description": "Zamenjajte svoje najljubše žetone hitreje in z nižjimi stroški goriva.",
- "unichain.promotion.warm.title": "Začnite menjavati na Unichainu",
"uniswapX.aggregatesLiquidity": " združuje vire likvidnosti za boljše cene in zamenjave brez plina.",
"uniswapx.description": "UniswapX združuje vire likvidnosti za boljše cene in zamenjave brez plina.",
- "uniswapx.included": "Vključuje UniswapX",
+ "uniswapx.included": "Vključuje UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Izvedite več o zamenjavi z UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/sr-SP.json b/packages/uniswap/src/i18n/locales/translations/sr-SP.json
index 5fccd98e87d..31e0fc0e7f4 100644
--- a/packages/uniswap/src/i18n/locales/translations/sr-SP.json
+++ b/packages/uniswap/src/i18n/locales/translations/sr-SP.json
@@ -176,6 +176,7 @@
"common.allTime": "Све време",
"common.amount.label": "Износ",
"common.amountDeposited.label": "{{amount}} Депоновано",
+ "common.amountInput.placeholder": "Унесите износ",
"common.and": "и",
"common.app": "Апликација",
"common.approval.cancelled": "Одобрење је отказано",
@@ -312,7 +313,6 @@
"common.currency": "Валута",
"common.currentPrice": "Тренутна цена",
"common.currentPrice.label": "Тренутна цена:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Обичај",
"common.customRange": "Прилагођени домет",
"common.dataOutdated": "Подаци су можда застарели",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Зарађене накнаде:",
"common.feesEarnedPerBase": "{{symbolA}} по {{symbolB}}",
"common.fetchingRoute": "Преузимање руте",
+ "common.flag": "Flag",
"common.floor": "Под",
"common.floorPrice": "Флоор прице",
"common.for": "За",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Одобри у новчанику",
"common.wallet.label": "Новчаник",
"common.walletForSwapping": "Новчаник направљен за замену. Доступно на иОС-у и Андроид-у.",
- "common.warning": "Упозорење",
"common.webApp": "Веб апликација",
"common.website": "Веб сајт",
"common.whyApprove": "Зашто морам да одобрим токен?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Није могуће учитати токене за куповину",
"fiatOnRamp.error.max": "Максимално {{amount}}",
"fiatOnRamp.error.min": "Минимално {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Ова услуга није доступна у вашем региону",
"fiatOnRamp.error.unsupported": "Није подржано у региону",
"fiatOnRamp.error.usd": "Доступно само за куповину у УСД",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} за {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Купљено {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Наставићете на портал провајдера да бисте видели накнаде повезане са вашом трансакцијом.",
"fiatOnRamp.quote.type.list": "{{optionsList}}и друге опције",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Цена:",
"migrate.v2Description": "Овај алат ће безбедно пренети вашу {{source}} ликвидност на В3. Процес је потпуно неповерљив захваљујући <0>Унисвап уговору о миграцији0> ↗",
"migrate.v2Instruction": "За сваки базен приказан испод, кликните на мигрира да бисте уклонили своју ликвидност из Унисвап В2 и депоновали је у Унисвап В3.",
+ "migrate.v2Subtitle": "Мигрирајте своје токене ликвидности са Унисвап В2 на Унисвап В3.",
"migrate.v2Title": "Пренесите В2 ликвидност",
"migrate.v3Price": "В3 {{sym}} Цена:",
"mint.v3.input.invalidPrice.error": "Неважећи унос цене",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Доделите име вашем новчанику",
"onboarding.notification.permission.message": "Да бисте примали обавештења, укључите обавештења за Унисвап новчаник у подешавањима уређаја.",
"onboarding.notification.permission.title": "Дозвола за обавештења",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Добијајте обавештења када се ваши трансфери, замене и одобрења заврше.",
+ "onboarding.notification.title": "Укључите пусх обавештења",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Повежите се са новчаником да бисте видели своју ликвидност.",
"pool.liquidity.data.error.message": "There was an error fetching data required for your transaction.",
"pool.liquidity.earn.fee": "Провајдери ликвидности зарађују накнаду од 0,3% за све трговине пропорционално њиховом уделу у фонду. Накнаде се додају у фонд, прикупљају у реалном времену и могу се тражити повлачењем ваше ликвидности.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Pool prices out of sync",
+ "pool.liquidity.outOfSync.message": "Prices in this pool are out of sync with the current market. Adding liquidity may result in a loss of funds.",
"pool.liquidity.ownershipWarning.message": "Нисте власник ове ЛП позиције. Нећете моћи да повучете ликвидност са ове позиције осим ако немате следећу адресу: {{ownerAddress}}",
"pool.liquidity.rewards": "Награде добављача ликвидности",
"pool.liquidity.taxWarning": "Токен такес",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Цена овог базена је унутар вашег изабраног распона. Ваша позиција тренутно зарађује накнаде.",
"pool.rates": "Тарифе",
"pool.ratioTokenToPrice": "Однос токена које додате ће одредити цену овог скупа.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Уклоните ликвидност",
"pool.rewardsPool.label": "Токени скупа у фонду награда:",
"pool.selectedRange": "Изабрани опсег",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Хукови су напредна функција која омогућава базенима да интергују са паметним уговорима, отварајући различите могућности. Будите опрезни при додавању хукова, јер неки могу бити злоћудни или изазвати нежељене последице.",
"position.addingHook": "Adding hook",
"position.addingHook.disclaimer": "Adding hooks may have unintended consequences. Do your research and proceed at your own risk.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Enter a valid hook address",
"position.addingHook.viewProperties": "View properties",
"position.appearHere": "Овде ће се појавити ваша позиција.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Депозитован {{currencySymbol}}",
"position.hook.disclaimer": "I understand the risks.",
"position.hook.liquidityWarning": "This flag can cause the pool to block the addition of new liquidity. Your transaction may revert.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "This flag can cause your funds to be locked or block you from collecting fees.",
"position.hook.swapWarning": "This flag can allow sophisticated users to more easily leverage Just-In-Time liquidity resulting in lower fees earned.",
"position.hook.warningHeader": "High risk hook detected",
"position.hook.warningInfo": "We’ve identified potential risks with this hook. Please review the flags and verify that this is the hook you want to use before proceeding.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Одобрите и замените",
"swap.approveInWallet": "Одобрите у свом новчанику",
"swap.balance.amount": "Стање: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Најбоља цена руте кошта ~{{gasPrice}} у гасу. ",
+ "swap.bestRoute.cost.v4": "Optimal route costs ~{{gasPrice}} in gas. ",
"swap.bridging.estimatedTime": "Процењено време",
"swap.bridging.title": "Замена преко мрежа",
"swap.bridging.warning.description": "Мењате са {{fromNetwork}} на {{toNetwork}}. Ово је такође познато као „повезивање“, што премешта ваше токене са једне мреже на другу.",
@@ -1868,16 +1866,15 @@
"swap.review": "Замена прегледа",
"swap.review.summary": "Мењате се",
"swap.reviewLimit": "Ограничење прегледа",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.",
"swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).",
"swap.settings.deadline.warning": "High deadline",
"swap.settings.protection.description": "Са укљученом заштитом замене, ваше Етхереум трансакције ће бити заштићене од сендвич напада, са смањеним шансама за неуспех.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Мрежа",
"swap.settings.protection.subtitle.unavailable": "Није доступно на {{chainName}}",
"swap.settings.protection.title": "Свап Протецтион",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
+ "swap.settings.routingPreference.option.default.description.v4": "The Uniswap client selects the optimal trade option factoring in price and network costs.",
"swap.settings.routingPreference.option.v2.title": "в2 базени",
"swap.settings.routingPreference.option.v3.title": "в3 базени",
"swap.settings.routingPreference.option.v4.title": "в4 базени",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Увек спроведите сопствено истраживање",
"token.safety.warning.blocked.description.default_one": "Не можете трговати овим токеном користећи Унисвап апликацију.",
"token.safety.warning.blocked.description.default_other": "Не можете трговати овим токенима користећи Унисвап апликацију.",
+ "token.safety.warning.blocked.description.named": "Не можете трговати {{tokenSymbol}} користећи Унисвап апликацију.",
"token.safety.warning.dontShowWarningAgain": "Не показуј ми поново ово упозорење",
"token.safety.warning.doYourOwnResearch": "Увек спроведите сопствено истраживање пре наставка.",
"token.safety.warning.feeDescription": "Charges a when {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} may not be the token you are looking to swap.",
"token.safety.warning.malicious.title": "Откривен злонамерни токен",
"token.safety.warning.mayResultInLoss": "Swapping it may result in a loss of funds.",
+ "token.safety.warning.medium.heading.default_one": "Овим токеном се не тргује на водећим америчким централизованим берзама.",
+ "token.safety.warning.medium.heading.default_other": "Овим токенима се не тргује на водећим америчким централизованим берзама.",
+ "token.safety.warning.medium.heading.default_one_also": "Овим токеном се такође не тргује на водећим америчким централизованим берзама.",
+ "token.safety.warning.medium.heading.default_other_also": "Овим токенима се такође не тргује на водећим америчким централизованим берзама.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} се не тргује на водећим америчким централизованим берзама.",
"token.safety.warning.notListedOnExchanges": "Not listed on leading U.S. exchanges",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} has been flagged as unsellable.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} has been flagged as spam by Blockaid.",
"token.safety.warning.spam.title": "Детектован спам токен",
"token.safety.warning.spamsUsers": "Spams users",
+ "token.safety.warning.strong.heading.default_one": "Овим токеном се не тргује на водећим америчким централизованим берзама нити се често мења на Унисвап-у.",
+ "token.safety.warning.strong.heading.default_other": "Овим токенима се не тргује на водећим америчким централизованим берзама нити се често мењају на Унисвап-у.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} се не тргује на водећим америчким централизованим берзама нити се често мења на Унисвап-у.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} charges a {{buyFeePercent}} fee when bought and {{sellFeePercent}} when sold.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} charges a {{feePercent}} fee when bought.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} charges a {{feePercent}} fee when sold.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} charges a fee when bought or sold.",
+ "token.safetyLevel.blocked.header": "Није доступно",
"token.safetyLevel.blocked.message": "Не можете трговати овим токеном користећи Унисвап новчаник.",
+ "token.safetyLevel.medium.header": "Опрез",
+ "token.safetyLevel.medium.message": "Овим токеном се не тргује на водећим америчким централизованим берзама. Увек спроведите сопствено истраживање пре поступања.",
"token.safetyLevel.medium.message.plural": "Овим токенима се не тргује на водећим америчким централизованим берзама. Увек спроведите сопствено истраживање пре поступања.",
+ "token.safetyLevel.strong.header": "Упозорење",
+ "token.safetyLevel.strong.message": "Овим токеном се не тргује на водећим америчким централизованим берзама нити се често мења на Унисвап-у. Увек спроведите сопствено истраживање пре поступања.",
"token.selector.search.error": "Учитавање резултата претраге није успело",
"token.stats.fullyDilutedValuation": "Потпуно разводњена процена",
"token.stats.marketCap": "Тржишна капитализација",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Остали токени на {{network}}",
"tokens.selector.section.recent": "Недавне претраге",
"tokens.selector.section.search": "Резултати претраге",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Ваши жетони",
"tokens.table.search.placeholder.pools": "Сеарцх поолс",
"tokens.table.search.placeholder.tokens": "Претражи токене",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Low network token balance",
"transaction.watcher.error.cancel": "Није могуће отказати трансакцију",
"transaction.watcher.error.status": "Грешка приликом провере статуса трансакције",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " обједињује изворе ликвидности за боље цене и размену без гаса.",
"uniswapx.description": "УнисвапКс обједињује изворе ликвидности за боље цене и свопове без гаса.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Укључује УнисвапКс",
"uniswapx.item": "УнисвапКс",
"uniswapx.label": "УнисвапКс",
"uniswapX.learnMore": "Сазнајте више о размени са УнисвапКс",
diff --git a/packages/uniswap/src/i18n/locales/translations/sv-SE.json b/packages/uniswap/src/i18n/locales/translations/sv-SE.json
index b8ba878788d..c83c77272f8 100644
--- a/packages/uniswap/src/i18n/locales/translations/sv-SE.json
+++ b/packages/uniswap/src/i18n/locales/translations/sv-SE.json
@@ -176,6 +176,7 @@
"common.allTime": "Hela tiden",
"common.amount.label": "Belopp",
"common.amountDeposited.label": "{{amount}} Insatt",
+ "common.amountInput.placeholder": "Inmatat belopp",
"common.and": "och",
"common.app": "App",
"common.approval.cancelled": "Godkännandet avbröts",
@@ -312,7 +313,6 @@
"common.currency": "Valuta",
"common.currentPrice": "Nuvarande pris",
"common.currentPrice.label": "Nuvarande pris:",
- "common.currentPrice.unavailable": "Aktuellt pris är inte tillgängligt",
"common.custom": "Beställnings",
"common.customRange": "Anpassat sortiment",
"common.dataOutdated": "Data kan vara inaktuella",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Intjänade avgifter:",
"common.feesEarnedPerBase": "{{symbolA}} per {{symbolB}}",
"common.fetchingRoute": "Hämtar rutt",
+ "common.flag": "Flagga",
"common.floor": "Golv",
"common.floorPrice": "Golvpris",
"common.for": "För",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Godkänn i plånbok",
"common.wallet.label": "Plånbok",
"common.walletForSwapping": "Plånboken byggd för att byta. Tillgänglig på iOS och Android.",
- "common.warning": "Varning",
"common.webApp": "Webbapp",
"common.website": "Hemsida",
"common.whyApprove": "Varför måste jag godkänna en token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Det gick inte att ladda tokens för att köpa",
"fiatOnRamp.error.max": "Högst {{amount}}",
"fiatOnRamp.error.min": "Minst {{amount}}",
- "fiatOnRamp.error.noQuotes": "Inga citat hittades.",
"fiatOnRamp.error.unavailable": "Den här tjänsten är inte tillgänglig i din region",
"fiatOnRamp.error.unsupported": "Stöds inte i regionen",
"fiatOnRamp.error.usd": "Endast tillgänglig att köpa i USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} för {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Inga citat hittades",
"fiatOnRamp.purchasedOn": "Köpt på {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Du fortsätter till leverantörens portal för att se de avgifter som är kopplade till din transaktion.",
"fiatOnRamp.quote.type.list": "{{optionsList}}och andra alternativ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Pris:",
"migrate.v2Description": "Detta verktyg kommer säkert att migrera din {{source}} likviditet till V3. Processen är helt tillförlitlig tack vare migreringskontraktet <0>Uniswap0> ↗",
"migrate.v2Instruction": "För varje pool som visas nedan, klicka på migrera för att ta bort din likviditet från Uniswap V2 och sätta in den i Uniswap V3.",
+ "migrate.v2Subtitle": "Migrera dina likviditetstokens från Uniswap V2 till Uniswap V3.",
"migrate.v2Title": "Migrera V2-likviditet",
"migrate.v3Price": "V3 {{sym}} Pris:",
"mint.v3.input.invalidPrice.error": "Ogiltig prisinmatning",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Ge din plånbok ett namn",
"onboarding.notification.permission.message": "För att få aviseringar, aktivera aviseringar för Uniswap Wallet i enhetens inställningar.",
"onboarding.notification.permission.title": "Aviseringsbehörighet",
- "onboarding.notification.subtitle": "Håll dig uppdaterad om transaktionsstatus och större prisändringar för favoritpoletter",
- "onboarding.notification.title": "Slå på aviseringar",
+ "onboarding.notification.subtitle": "Få aviseringar när dina överföringar, byten och godkännanden är klara.",
+ "onboarding.notification.title": "Slå på push-meddelanden",
"onboarding.passkey.account.protection": "Ditt konto är skyddat av din egen säkra lösenordslagring.",
"onboarding.passkey.biometric.scan": "Telefon, surfplatta eller webbläsare – skanna bara din biometri och du loggas in.",
"onboarding.passkey.create": "Skapa ditt lösenord",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Anslut till en plånbok för att se din likviditet.",
"pool.liquidity.data.error.message": "Det gick inte att hämta data som krävs för din transaktion.",
"pool.liquidity.earn.fee": "Likviditetsleverantörer tjänar en avgift på 0,3 % på alla affärer i proportion till deras andel av poolen. Avgifter läggs till poolen, samlas in i realtid och kan krävas genom att ta ut din likviditet.",
- "pool.liquidity.outOfSync": "Pool- och marknadsprisfel överensstämmer",
- "pool.liquidity.outOfSync.message": "Priserna i denna pool skiljer sig med marknadspriserna för de utvalda tokens. Justera din prisklass därefter eller vänta tills poolen återbalanseras för att undvika förluster.",
+ "pool.liquidity.outOfSync": "Poolpriserna är osynkroniserade",
+ "pool.liquidity.outOfSync.message": "Priserna i denna pool är inte synkroniserade med den nuvarande marknaden. Att tillföra likviditet kan resultera i en förlust av medel.",
"pool.liquidity.ownershipWarning.message": "Du är inte ägare till denna LP-position. Du kommer inte att kunna ta ut likviditeten från denna position om du inte äger följande adress: {{ownerAddress}}",
"pool.liquidity.rewards": "Likviditetsleverantörens belöningar",
"pool.liquidity.taxWarning": "Symboliska skatter",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Priset för denna pool ligger inom ditt valda intervall. Din position tjänar för närvarande avgifter.",
"pool.rates": "Priser",
"pool.ratioTokenToPrice": "Förhållandet mellan tokens du lägger till bestämmer priset för denna pool.",
- "pool.refresh.prices": "Uppdatera priserna",
"pool.removeLiquidity": "Ta bort likviditeten",
"pool.rewardsPool.label": "Poolpoletter i belöningspoolen:",
"pool.selectedRange": "Valt intervall",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hooks är en avancerad funktion som gör det möjligt för pooler att interagera med smarta kontrakt, vilket låser upp olika funktioner. Var försiktig när du lägger till krokar, eftersom vissa kan vara skadliga eller orsaka oavsiktliga konsekvenser.",
"position.addingHook": "Lägger till krok",
"position.addingHook.disclaimer": "Att lägga till krokar kan få oavsiktliga konsekvenser. Gör din forskning och fortsätt på egen risk.",
- "position.addingHook.hideProperties": "Dölj egenskaper",
"position.addingHook.invalidAddress": "Ange en giltig hook-adress",
"position.addingHook.viewProperties": "Visa fastigheter",
"position.appearHere": "Din position kommer att visas här.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Deponerade {{currencySymbol}}",
"position.hook.disclaimer": "Jag förstår riskerna.",
"position.hook.liquidityWarning": "Denna flagga kan få poolen att blockera tillskottet av ny likviditet. Din transaktion kan återgå.",
- "position.hook.removeWarning": "Kan göra att dina pengar låses eller blockera dig från att ta ut avgifter.",
+ "position.hook.removeWarning": "Denna flagga kan göra att dina pengar låses eller blockera dig från att ta ut avgifter.",
"position.hook.swapWarning": "Denna flagga kan tillåta sofistikerade användare att lättare utnyttja Just-In-Time-likviditeten, vilket resulterar i lägre intjänade avgifter.",
"position.hook.warningHeader": "Högriskkrok upptäckt",
"position.hook.warningInfo": "Vi har identifierat potentiella risker med denna krok. Vänligen granska flaggorna och verifiera att detta är kroken du vill använda innan du fortsätter.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Godkänn och byt",
"swap.approveInWallet": "Godkänn i din plånbok",
"swap.balance.amount": "Saldo: {{amount}}",
- "swap.bestRoute.cost": "Den mest effektiva vägen beräknas kosta ~{{gasPrice}} i nätverkskostnader. ",
+ "swap.bestRoute.cost": "Bästa prisväg kostar ~{{gasPrice}} i gas. ",
+ "swap.bestRoute.cost.v4": "Optimala ruttkostnader ~{{gasPrice}} i gas. ",
"swap.bridging.estimatedTime": "Uppskattad tid",
"swap.bridging.title": "Byte mellan nätverk",
"swap.bridging.warning.description": "Du byter från {{fromNetwork}} till {{toNetwork}}. Detta är också känt som \"bridging\", som flyttar dina tokens från ett nätverk till ett annat.",
@@ -1868,16 +1866,15 @@
"swap.review": "Recensionsbyte",
"swap.review.summary": "Du byter",
"swap.reviewLimit": "Granskningsgräns",
- "swap.route.optimizedGasCost": "Den här rutten tar hänsyn till delade rutter, flera hopp och nätverkskostnader för varje steg.",
+ "swap.route.optimizedGasCost": "Denna rutt optimerar din totala produktion genom att ta hänsyn till delade rutter, flera hopp och nätverkskostnaderna för varje steg.",
"swap.settings.deadline.tooltip": "Din transaktion kommer att återställas om den väntar längre än denna tidsperiod. (Max: 3 dagar).",
"swap.settings.deadline.warning": "Hög deadline",
"swap.settings.protection.description": "Med swap-skydd på kommer dina Ethereum-transaktioner att skyddas från sandwichattacker, med minskade chanser att misslyckas.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Nätverk",
"swap.settings.protection.subtitle.unavailable": "Ej tillgängligt på {{chainName}}",
"swap.settings.protection.title": "Bytesskydd",
- "swap.settings.routingPreference.option.default.description": "Om du väljer det här alternativet identifieras den mest effektiva rutten för ditt byte.",
- "swap.settings.routingPreference.option.default.description.preV4": "Uniswap-klienten väljer det billigaste handelsalternativet med hänsyn till pris och nätverkskostnader.",
- "swap.settings.routingPreference.option.default.tooltip": "En rutt identifieras med hänsyn till v2, v3 och vissa v4-pooler, med beaktande av uppskattad prispåverkan och nätverkskostnader.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap-klienten väljer det billigaste handelsalternativet med hänsyn till pris och nätverkskostnader.",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap-klienten väljer det optimala handelsalternativet med hänsyn till pris och nätverkskostnader.",
"swap.settings.routingPreference.option.v2.title": "v2 pooler",
"swap.settings.routingPreference.option.v3.title": "v3 pooler",
"swap.settings.routingPreference.option.v4.title": "v4 pooler",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Gör alltid din research",
"token.safety.warning.blocked.description.default_one": "Du kan inte byta denna token med Uniswap-appen.",
"token.safety.warning.blocked.description.default_other": "Du kan inte byta dessa tokens med Uniswap-appen.",
+ "token.safety.warning.blocked.description.named": "Du kan inte handla {{tokenSymbol}} med Uniswap-appen.",
"token.safety.warning.dontShowWarningAgain": "Visa mig inte denna varning igen",
"token.safety.warning.doYourOwnResearch": "Gör alltid din egen forskning innan du fortsätter.",
"token.safety.warning.feeDescription": "Laddar en när {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} kanske inte är den token du vill byta.",
"token.safety.warning.malicious.title": "Skadlig token har upptäckts",
"token.safety.warning.mayResultInLoss": "Att byta det kan resultera i förlust av pengar.",
+ "token.safety.warning.medium.heading.default_one": "Denna token handlas inte på ledande amerikanska centraliserade börser.",
+ "token.safety.warning.medium.heading.default_other": "Dessa tokens handlas inte på ledande amerikanska centraliserade börser.",
+ "token.safety.warning.medium.heading.default_one_also": "Denna token handlas inte heller på ledande amerikanska centraliserade börser.",
+ "token.safety.warning.medium.heading.default_other_also": "Dessa tokens handlas inte heller på ledande amerikanska centraliserade börser.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} handlas inte på ledande amerikanska centraliserade börser.",
"token.safety.warning.notListedOnExchanges": "Ej noterat på ledande amerikanska börser",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} har flaggats som osäljbar.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} har flaggats som spam av Blockaid.",
"token.safety.warning.spam.title": "Spam-token har upptäckts",
"token.safety.warning.spamsUsers": "Spam användare",
+ "token.safety.warning.strong.heading.default_one": "Denna token handlas inte på ledande amerikanska centraliserade börser eller byts ofta på Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Dessa tokens handlas inte på ledande amerikanska centraliserade börser eller byts ofta på Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} handlas inte på ledande amerikanska centraliserade börser eller byts ofta på Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} tar ut en {{buyFeePercent}} avgift vid köp och {{sellFeePercent}} vid försäljning.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} tar ut en {{feePercent}} avgift vid köp.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} tar ut en {{feePercent}} avgift vid försäljning.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} tar ut en avgift vid köp eller försäljning.",
+ "token.safetyLevel.blocked.header": "Inte tillgänglig",
"token.safetyLevel.blocked.message": "Du kan inte byta denna token med Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Varning",
+ "token.safetyLevel.medium.message": "Denna token handlas inte på ledande amerikanska centraliserade börser. Gör alltid din egen forskning innan du fortsätter.",
"token.safetyLevel.medium.message.plural": "Dessa tokens handlas inte på ledande amerikanska centraliserade börser. Gör alltid din egen forskning innan du fortsätter.",
+ "token.safetyLevel.strong.header": "Varning",
+ "token.safetyLevel.strong.message": "Denna token handlas inte på ledande amerikanska centraliserade börser eller byts ofta på Uniswap. Gör alltid din egen forskning innan du fortsätter.",
"token.selector.search.error": "Det gick inte att läsa in sökresultat",
"token.stats.fullyDilutedValuation": "Fullt utspädd värdering",
"token.stats.marketCap": "Börsvärde",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Andra tokens på {{network}}",
"tokens.selector.section.recent": "Senaste sökningar",
"tokens.selector.section.search": "Sökresultat",
- "tokens.selector.section.trending": "Tokens med 24H volym",
"tokens.selector.section.yours": "Dina tokens",
"tokens.table.search.placeholder.pools": "Sök pooler",
"tokens.table.search.placeholder.tokens": "Sök tokens",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Lågt saldo för nätverkstoken",
"transaction.watcher.error.cancel": "Det gick inte att avbryta transaktionen",
"transaction.watcher.error.status": "Fel vid kontroll av transaktionsstatus",
- "unichain.promotion.cold.description": "Snabbare byten. Lägre avgifter. Unichain är hemmet för DeFi.",
- "unichain.promotion.cold.title": "Vi presenterar Unichain",
- "unichain.promotion.modal.description": "Snabbare byten. Lägre avgifter. Unichain är hemmet för likviditet över kedjan.",
- "unichain.promotion.modal.detail.costs": "Lägre kostnader för att skapa pooler och hantera positioner.",
- "unichain.promotion.modal.detail.fees": "Spara 95% på avgifter jämfört med Ethereum.",
- "unichain.promotion.modal.detail.instant": "Byt omedelbart",
- "unichain.promotion.warm.description": "Byt dina favoritpoletter snabbare och med lägre bensinkostnader.",
- "unichain.promotion.warm.title": "Börja byta på Unichain",
"uniswapX.aggregatesLiquidity": " samlar likviditetskällor för bättre priser och gasfria swappar.",
"uniswapx.description": "UniswapX samlar likviditetskällor för bättre priser och gasfria swappar.",
- "uniswapx.included": "Inkluderar UniswapX",
+ "uniswapx.included": "Inkluderar UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Läs mer om att byta med UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/sw-TZ.json b/packages/uniswap/src/i18n/locales/translations/sw-TZ.json
index f0364ac6934..fee61aa44dd 100644
--- a/packages/uniswap/src/i18n/locales/translations/sw-TZ.json
+++ b/packages/uniswap/src/i18n/locales/translations/sw-TZ.json
@@ -176,6 +176,7 @@
"common.allTime": "Muda wote",
"common.amount.label": "Kiasi",
"common.amountDeposited.label": "{{amount}} Imewekwa",
+ "common.amountInput.placeholder": "Kiasi cha kuingiza",
"common.and": "na",
"common.app": "Programu",
"common.approval.cancelled": "Uidhinishaji umeghairiwa",
@@ -312,7 +313,6 @@
"common.currency": "Sarafu",
"common.currentPrice": "Bei ya sasa",
"common.currentPrice.label": "Bei ya sasa:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Desturi",
"common.customRange": "Anuwai maalum",
"common.dataOutdated": "Data inaweza kuwa ya zamani",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Ada Zilizopatikana:",
"common.feesEarnedPerBase": "{{symbolA}} kwa {{symbolB}}",
"common.fetchingRoute": "Inaleta njia",
+ "common.flag": "Flag",
"common.floor": "Sakafu",
"common.floorPrice": "Bei ya sakafu",
"common.for": "Kwa",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Idhinisha kwenye mkoba",
"common.wallet.label": "Mkoba",
"common.walletForSwapping": "Mkoba uliojengwa kwa kubadilishana. Inapatikana kwenye iOS na Android.",
- "common.warning": "Onyo",
"common.webApp": "Programu ya wavuti",
"common.website": "Tovuti",
"common.whyApprove": "Kwa nini ni lazima niidhinishe ishara?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Haikuweza kupakia tokeni ili kununua",
"fiatOnRamp.error.max": "Upeo {{amount}}",
"fiatOnRamp.error.min": "Kiwango cha chini {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Huduma hii haipatikani katika eneo lako",
"fiatOnRamp.error.unsupported": "Haitumiki katika eneo",
"fiatOnRamp.error.usd": "Inapatikana tu kwa kununua kwa USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} kwa {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Imenunuliwa kwa {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Utaenda kwenye tovuti ya mtoa huduma ili kuona ada zinazohusiana na muamala wako.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, na chaguzi zingine",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Bei:",
"migrate.v2Description": "Zana hii itahamisha {{source}} ukwasi wako kwa usalama hadi V3. Mchakato huo hauaminiki kabisa kutokana na <0>mkataba wa uhamiaji wa Uniswap0> ↗",
"migrate.v2Instruction": "Kwa kila kundi lililoonyeshwa hapa chini, bofya hamisha ili kuondoa ukwasi wako kutoka Uniswap V2 na uiweke kwenye Uniswap V3.",
+ "migrate.v2Subtitle": "Hamisha tokeni zako za ukwasi kutoka Uniswap V2 hadi Uniswap V3.",
"migrate.v2Title": "Hamisha ukwasi wa V2",
"migrate.v3Price": "V3 {{sym}} Bei:",
"mint.v3.input.invalidPrice.error": "Ingizo la bei si sahihi",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Pea mkoba wako jina",
"onboarding.notification.permission.message": "Ili kupokea arifa, washa arifa za Uniswap Wallet katika mipangilio ya kifaa chako.",
"onboarding.notification.permission.title": "Ruhusa ya arifa",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Pata arifa uhamishaji, kubadilishana na idhini zako kukamilika.",
+ "onboarding.notification.title": "Washa arifa zinazotumwa na programu hata wakati huitumii",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Unganisha kwenye pochi ili kuona ukwasi wako.",
"pool.liquidity.data.error.message": "There was an error fetching data required for your transaction.",
"pool.liquidity.earn.fee": "Watoa huduma za ukwasi hupata ada ya 0.3% kwa biashara zote sawia na sehemu yao ya bwawa. Ada huongezwa kwenye bwawa, huongezeka kwa wakati halisi na inaweza kudaiwa kwa kuondoa ukwasi wako.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Pool prices out of sync",
+ "pool.liquidity.outOfSync.message": "Prices in this pool are out of sync with the current market. Adding liquidity may result in a loss of funds.",
"pool.liquidity.ownershipWarning.message": "Wewe si mmiliki wa nafasi hii ya LP. Hutaweza kuondoa ukwasi kutoka kwa nafasi hii isipokuwa unamiliki anwani ifuatayo: {{ownerAddress}}",
"pool.liquidity.rewards": "Zawadi za mtoa huduma za ukwasi",
"pool.liquidity.taxWarning": "Ushuru wa ishara",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Bei ya bwawa hili iko ndani ya safu uliyochagua. Nafasi yako kwa sasa inapata ada.",
"pool.rates": "Viwango",
"pool.ratioTokenToPrice": "Uwiano wa tokeni utakazoongeza utaweka bei ya bwawa hili.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Ondoa ukwasi",
"pool.rewardsPool.label": "Ishara za bwawa katika bwawa la zawadi:",
"pool.selectedRange": "Masafa yaliyochaguliwa",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Viunganishi ni kipengele kilichoendelezwa kinacho wezesha mabwawa kufanya kazi na mikataba ya kielektroniki, kufungua uwezo mbalimbali. Chukua tahadhari wakati wa kuongeza viunganishi, kwani vingine vinaweza kuwa hatari au kusababisha madhara yasiyotarajiwa.",
"position.addingHook": "Adding hook",
"position.addingHook.disclaimer": "Adding hooks may have unintended consequences. Do your research and proceed at your own risk.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Enter a valid hook address",
"position.addingHook.viewProperties": "View properties",
"position.appearHere": "Nafasi yako itaonekana hapa.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Imewekwa {{currencySymbol}}",
"position.hook.disclaimer": "I understand the risks.",
"position.hook.liquidityWarning": "This flag can cause the pool to block the addition of new liquidity. Your transaction may revert.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "This flag can cause your funds to be locked or block you from collecting fees.",
"position.hook.swapWarning": "This flag can allow sophisticated users to more easily leverage Just-In-Time liquidity resulting in lower fees earned.",
"position.hook.warningHeader": "High risk hook detected",
"position.hook.warningInfo": "We’ve identified potential risks with this hook. Please review the flags and verify that this is the hook you want to use before proceeding.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Idhinisha na ubadilishane",
"swap.approveInWallet": "Idhinisha kwenye mkoba wako",
"swap.balance.amount": "Mizani: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Gharama bora za njia ya bei{{gasPrice}} katika gesi. ",
+ "swap.bestRoute.cost.v4": "Optimal route costs ~{{gasPrice}} in gas. ",
"swap.bridging.estimatedTime": "Muda uliokadiriwa",
"swap.bridging.title": "Kubadilishana kwenye mitandao",
"swap.bridging.warning.description": "Unabadilisha kutoka {{fromNetwork}} kwenda {{toNetwork}}. Hii pia inajulikana kama \"kuaunganisha\", ambayo inahamisha tokeni zako kutoka mtandao mmoja hadi mwingine.",
@@ -1868,16 +1866,15 @@
"swap.review": "Kagua ubadilishaji",
"swap.review.summary": "Unabadilishana",
"swap.reviewLimit": "Kagua kikomo",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "This route optimizes your total output by considering split routes, multiple hops, and the network costs of each step.",
"swap.settings.deadline.tooltip": "Your transaction will revert if it is pending for more than this period of time. (Maximum: 3 days).",
"swap.settings.deadline.warning": "High deadline",
"swap.settings.protection.description": "Ulinzi wa kubadilishana ukiwa umewashwa, miamala yako ya Ethereum italindwa dhidi ya mashambulizi ya sandwich, na uwezekano mdogo wa kushindwa.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Mtandao",
"swap.settings.protection.subtitle.unavailable": "Haipatikani kwenye {{chainName}}",
"swap.settings.protection.title": "Badili Ulinzi",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
+ "swap.settings.routingPreference.option.default.description.v4": "The Uniswap client selects the optimal trade option factoring in price and network costs.",
"swap.settings.routingPreference.option.v2.title": "v2 mabwawa",
"swap.settings.routingPreference.option.v3.title": "v3 mabwawa",
"swap.settings.routingPreference.option.v4.title": "mabwawa ya v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Daima fanya utafiti wako mwenyewe",
"token.safety.warning.blocked.description.default_one": "Huwezi kufanya biashara ya tokeni hii kwa kutumia Programu ya Uniswap.",
"token.safety.warning.blocked.description.default_other": "Huwezi kufanya biashara ya tokeni hizi kwa kutumia Programu ya Uniswap.",
+ "token.safety.warning.blocked.description.named": "Huwezi kufanya biashara {{tokenSymbol}} kwa kutumia Programu ya Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Usinionyeshe onyo hili tena",
"token.safety.warning.doYourOwnResearch": "Daima fanya utafiti wako mwenyewe kabla ya kuendelea.",
"token.safety.warning.feeDescription": "Charges a when {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} may not be the token you are looking to swap.",
"token.safety.warning.malicious.title": "Token ya uharibifu imegunduliwa",
"token.safety.warning.mayResultInLoss": "Swapping it may result in a loss of funds.",
+ "token.safety.warning.medium.heading.default_one": "Tokeni hii haiuzwi kwenye masoko ya kati ya Marekani yanayoongoza.",
+ "token.safety.warning.medium.heading.default_other": "Tokeni hizi haziuzwi kwenye ubadilishanaji wa kati wa Marekani.",
+ "token.safety.warning.medium.heading.default_one_also": "Tokeni hii pia haiuzwi kwenye masoko ya kati ya Marekani yanayoongoza.",
+ "token.safety.warning.medium.heading.default_other_also": "Tokeni hizi pia haziuzwi kwenye masoko ya kati ya Marekani yanayoongoza.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} haiuzwi kwa masoko ya kati ya Marekani yanayoongoza.",
"token.safety.warning.notListedOnExchanges": "Not listed on leading U.S. exchanges",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} has been flagged as unsellable.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} has been flagged as spam by Blockaid.",
"token.safety.warning.spam.title": "Tokeni ya ulaghai imetambulika",
"token.safety.warning.spamsUsers": "Spams users",
+ "token.safety.warning.strong.heading.default_one": "Tokeni hii haiuzwi kwenye masoko ya kati ya Marekani au hubadilishwa mara kwa mara kwenye Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Tokeni hizi haziuzwi kwenye masoko ya kati ya Marekani au hubadilishwa mara kwa mara kwenye Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} haiuzwi kwa masoko ya kati ya Marekani inayoongoza au hubadilishwa mara kwa mara kwenye Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} charges a {{buyFeePercent}} fee when bought and {{sellFeePercent}} when sold.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} charges a {{feePercent}} fee when bought.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} charges a {{feePercent}} fee when sold.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} charges a fee when bought or sold.",
+ "token.safetyLevel.blocked.header": "Haipatikani",
"token.safetyLevel.blocked.message": "Huwezi kubadilisha tokeni hii kwa kutumia Uniswap Wallet.",
+ "token.safetyLevel.medium.header": "Tahadhari",
+ "token.safetyLevel.medium.message": "Tokeni hii haiuzwi kwenye masoko ya kati ya Marekani yanayoongoza. Daima fanya utafiti wako mwenyewe kabla ya kuendelea.",
"token.safetyLevel.medium.message.plural": "Tokeni hizi haziuzwi kwenye masoko ya kati ya Marekani yanayoongoza. Daima fanya utafiti wako mwenyewe kabla ya kuendelea.",
+ "token.safetyLevel.strong.header": "Onyo",
+ "token.safetyLevel.strong.message": "Tokeni hii haiuzwi kwenye masoko ya kati ya Marekani au hubadilishwa mara kwa mara kwenye Uniswap. Daima fanya utafiti wako mwenyewe kabla ya kuendelea.",
"token.selector.search.error": "Haikuweza kupakia matokeo ya utafutaji",
"token.stats.fullyDilutedValuation": "Uthamini uliopunguzwa kikamilifu",
"token.stats.marketCap": "Sura ya Soko",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Tokeni zingine kwenye {{network}}",
"tokens.selector.section.recent": "Utafutaji wa hivi majuzi",
"tokens.selector.section.search": "Matokeo ya utafutaji",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Ishara zako",
"tokens.table.search.placeholder.pools": "Tafuta mabwawa",
"tokens.table.search.placeholder.tokens": "Tafuta ishara",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Low network token balance",
"transaction.watcher.error.cancel": "Imeshindwa kughairi muamala",
"transaction.watcher.error.status": "Hitilafu wakati wa kuangalia hali ya muamala",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " hujumlisha vyanzo vya ukwasi kwa bei bora na ubadilishaji usio na gesi.",
"uniswapx.description": "UniswapX hujumlisha vyanzo vya ukwasi kwa bei bora na ubadilishaji usio na gesi.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Inajumuisha UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Pata maelezo zaidi kuhusu kubadilishana na UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/tr-TR.json b/packages/uniswap/src/i18n/locales/translations/tr-TR.json
index b001554219d..8e370764048 100644
--- a/packages/uniswap/src/i18n/locales/translations/tr-TR.json
+++ b/packages/uniswap/src/i18n/locales/translations/tr-TR.json
@@ -176,6 +176,7 @@
"common.allTime": "Her zaman",
"common.amount.label": "Tutar",
"common.amountDeposited.label": "{{amount}} Yatırıldı",
+ "common.amountInput.placeholder": "Giriş tutarı",
"common.and": "ve",
"common.app": "Uygulama",
"common.approval.cancelled": "Onay iptal edildi",
@@ -312,7 +313,6 @@
"common.currency": "Para birimi",
"common.currentPrice": "Mevcut fiyat",
"common.currentPrice.label": "Mevcut fiyat:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Özel",
"common.customRange": "Özel aralık",
"common.dataOutdated": "Veriler güncel olmayabilir",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "Kazanılan {{symbol}} Ücretleri:",
"common.feesEarnedPerBase": "{{symbolB}} başına {{symbolA}}",
"common.fetchingRoute": "Rota getiriliyor",
+ "common.flag": "İşaretle",
"common.floor": "Taban",
"common.floorPrice": "Taban fiyat",
"common.for": "Şunun için:",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Cüzdanda onayla",
"common.wallet.label": "Cüzdan",
"common.walletForSwapping": "Swap işlemi için geliştirilmiş cüzdan. iOS ve Android'de mevcuttur.",
- "common.warning": "Warning",
"common.webApp": "Web uygulaması",
"common.website": "Web sitesi",
"common.whyApprove": "Neden bir token'ı onaylamam gerekiyor?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Alınacak token'lar yüklenemedi",
"fiatOnRamp.error.max": "Maksimum {{amount}}",
"fiatOnRamp.error.min": "Minimum {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Bu hizmet bölgende kullanılamıyor",
"fiatOnRamp.error.unsupported": "Bölgede desteklenmiyor",
"fiatOnRamp.error.usd": "Yalnızca USD cinsinden satın alınabilir",
"fiatOnRamp.exchangeRate": "{{inputAmount}} {{inputSymbol}} karşılığında {{outputAmount}} {{outputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "{{serviceProvider}} üzerinden satın alındı",
"fiatOnRamp.quote.advice": "İşleminle ilişkili ücretleri görmek için sağlayıcının portalına yönlendirileceksin.",
"fiatOnRamp.quote.type.list": "{{optionsList}} ve diğer seçenekler",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} LP NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP token'ları",
"migrate.migrating": "Taşınıyor",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "v2 pozisyonlarından birini göremiyor musun? İçe aktar.",
"migrate.noV2Liquidity": "V2 likiditesi bulunamadı.",
"migrate.positionNoFees": "Piyasa fiyatı aralığına gelene kadar pozisyonun ücret kazandırmayacak veya alım satımlarda kullanılmayacak.",
"migrate.priceDifference": "Fiyat farkı: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Fiyatı:",
"migrate.v2Description": "Bu araç {{source}} likiditeni güvenli bir şekilde V3'e taşıyacak. <0>Uniswap taşıma sözleşmesi0> sayesinde süreç güvene bel bağlamak zorunda kalmadan yürütülür ↗",
"migrate.v2Instruction": "Aşağıda gösterilen her havuz için, likiditeni Uniswap V2'den kaldırmak ve Uniswap V3'e yatırmak üzere Taşı seçeneğine tıkla.",
+ "migrate.v2Subtitle": "Likidite token'larını Uniswap V2'den Uniswap V3'e taşı.",
"migrate.v2Title": "V2 likiditesini taşı",
"migrate.v3Price": "V3 {{sym}} Fiyatı:",
"mint.v3.input.invalidPrice.error": "Geçersiz fiyat girişi",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Cüzdanına bir isim ver",
"onboarding.notification.permission.message": "Bildirim almak için cihazının ayarlarında Uniswap Cüzdan bildirimlerini aç.",
"onboarding.notification.permission.title": "Bildirim izni",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Transferlerin, swap işlemlerin ve onayların tamamlandığında bildirim al.",
+ "onboarding.notification.title": "Anlık bildirimleri aç",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Likiditeni görüntülemek için bir cüzdana bağlan.",
"pool.liquidity.data.error.message": "İşlemin için gerekli veriler getirilirken hata oluştu.",
"pool.liquidity.earn.fee": "Likidite sağlayıcıları tüm işlemlerden havuzdaki paylarıyla orantılı olarak %0,3 ücret kazanırlar. Ücretler havuza eklenir, gerçek zamanlı olarak tahakkuk eder ve likiditen çekilerek tahsil edilebilir.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Havuz fiyatları senkronize değil",
+ "pool.liquidity.outOfSync.message": "Bu havuzdaki fiyatlar, güncel piyasa ile senkronize değil. Likidite eklemek, fon kaybetmene neden olabilir.",
"pool.liquidity.ownershipWarning.message": "Bu LP pozisyonunun sahibi değilsin. Şu adresin sahibi olmadığın sürece bu pozisyondan likidite çekemezsin: {{ownerAddress}}",
"pool.liquidity.rewards": "Likidite sağlayıcı getirileri",
"pool.liquidity.taxWarning": "Token vergileri",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Bu havuzun fiyatı seçtiğin aralıkta. Pozisyonun şu anda ücret kazandırıyor.",
"pool.rates": "Oranlar",
"pool.ratioTokenToPrice": "Eklediğin token'ların oranı bu havuzun fiyatını belirleyecek.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Likiditeyi kaldır",
"pool.rewardsPool.label": "Getiri havuzundaki havuz token'ları:",
"pool.selectedRange": "Seçilen aralık",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Kancalar, havuzların akıllı sözleşmelerle etkileşime girmesini sağlayan ve çeşitli olanakların kilidini açan gelişmiş bir özelliktir. Bazıları kötü amaçlı olabileceğinden veya beklenmeyen sonuçlara yol açabileceğinden kanca eklerken dikkatli ol.",
"position.addingHook": "Kanca ekleniyor",
"position.addingHook.disclaimer": "Kanca eklemenin beklenmedik sonuçları olabilir. Kendi araştırmanı yap ve alabileceğin riski hesap ederek ilerle.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Geçerli bir kanca adresi gir",
"position.addingHook.viewProperties": "Özellikleri görüntüle",
"position.appearHere": "Pozisyonun burada görünecek.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "{{currencySymbol}} yatırıldı",
"position.hook.disclaimer": "Riskleri anlıyorum.",
"position.hook.liquidityWarning": "Bu işaret, havuzun yeni likidite eklenmesini engellemesine neden olabilir. İşlemin geri alınabilir.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Bu işaret, fonlarının kilitlenmesine veya ücret tahsil etmenin engellenmesine neden olabilir.",
"position.hook.swapWarning": "Bu işaret, sofistike kullanıcıların Tam Zamanında likiditeden daha kolay yararlanmalarına imkan tanıyabilir ve sonuçta daha düşük ücretler elde edilebilir.",
"position.hook.warningHeader": "Yüksek riskli kanca tespit edildi",
"position.hook.warningInfo": "Bu kancayla ilgili olası riskler belirledik. Lütfen işaretleri incele ve devam etmeden önce, kullanmak istediğin kancanın bu olduğunu doğrula.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Onayla ve swap et",
"swap.approveInWallet": "Cüzdanında onayla",
"swap.balance.amount": "Bakiye: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "En iyi fiyat rotası yaklaşık {{gasPrice}} Gas ücretine mal oluyor.",
+ "swap.bestRoute.cost.v4": "Optimum rota yaklaşık {{gasPrice}} Gas ücretine mal oluyor. ",
"swap.bridging.estimatedTime": "Tahmini süre",
"swap.bridging.title": "Ağlar arasında swap",
"swap.bridging.warning.description": "{{fromNetwork}} ağından {{toNetwork}} ağına swap işlemi gerçekleştiriyorsun. Bu işlem \"köprüleme\" olarak da adlandırılır ve token'larını bir ağdan diğerine taşır.",
@@ -1868,16 +1866,15 @@
"swap.review": "Swap işlemini incele",
"swap.review.summary": "Swap işlemi yapıyorsun",
"swap.reviewLimit": "Limiti incele",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "Bu rota, bölünmüş rotaları, çoklu atlamaları ve her adımın ağ maliyetlerini dikkate alarak toplam çıkışını optimize eder.",
"swap.settings.deadline.tooltip": "İşlemin bu süreden daha uzun süre beklemede kalırsa geri alınır. (Maksimum: 3 gün)",
"swap.settings.deadline.warning": "Uzun son tarih",
"swap.settings.protection.description": "Swap koruması açıkken Ethereum işlemleriniz sandviç saldırılarına karşı korunur ve başarısızlık olasılığı azalır.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Ağı",
"swap.settings.protection.subtitle.unavailable": "{{chainName}} zincirinde mevcut değil",
"swap.settings.protection.title": "Swap koruması",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap müşterisi, fiyatı ve ağ maliyetlerini dikkate alarak en ucuz alım satım seçeneğini belirler.",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap müşterisi, fiyatı ve ağ maliyetlerini dikkate alarak ideal alım satım seçeneğini belirler.",
"swap.settings.routingPreference.option.v2.title": "v2 havuzları",
"swap.settings.routingPreference.option.v3.title": "v3 havuzları",
"swap.settings.routingPreference.option.v4.title": "v4 havuzları",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Her zaman kendi araştırmanı yap",
"token.safety.warning.blocked.description.default_one": "Bu token'ı Uniswap Uygulamasını kullanarak alıp satamazsın.",
"token.safety.warning.blocked.description.default_other": "Bu token'ları Uniswap Uygulamasını kullanarak alıp satamazsın.",
+ "token.safety.warning.blocked.description.named": "{{tokenSymbol}} token'ını Uniswap Uygulamasını kullanarak alıp satamazsın.",
"token.safety.warning.dontShowWarningAgain": "Bana bu uyarıyı bir daha gösterme",
"token.safety.warning.doYourOwnResearch": "Devam etmeden önce mutlaka kendi araştırmanı yap.",
"token.safety.warning.feeDescription": "{{action}} durumunda alıyor",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}}, swap etmek istediğiniz token olmayabilir.",
"token.safety.warning.malicious.title": "Kötü amaçlı token algılandı",
"token.safety.warning.mayResultInLoss": "Swap edilmesi fon kaybına yol açabilir.",
+ "token.safety.warning.medium.heading.default_one": "Bu token, önde gelen ABD merkezi borsalarında işlem görmüyor.",
+ "token.safety.warning.medium.heading.default_other": "Bu token'lar, önde gelen ABD merkezi borsalarında işlem görmüyor.",
+ "token.safety.warning.medium.heading.default_one_also": "Bu token da önde gelen ABD merkezi borsalarında işlem görmüyor.",
+ "token.safety.warning.medium.heading.default_other_also": "Bu token'lar da önde gelen ABD merkezi borsalarında işlem görmüyor.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}}, önde gelen ABD merkezi borsalarında işlem görmüyor.",
"token.safety.warning.notListedOnExchanges": "Önde gelen ABD borsalarında işlem görmüyor",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }}, satılamaz olarak işaretlendi.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}}, Blockaid tarafından spam olarak işaretlendi.",
"token.safety.warning.spam.title": "Spam token'ı algılandı",
"token.safety.warning.spamsUsers": "Kullanıcılara spam gönderiyor",
+ "token.safety.warning.strong.heading.default_one": "Bu token önde gelen ABD merkezi borsalarında işlem görmüyor veya Uniswap'ta sıklıkla swap edilmiyor.",
+ "token.safety.warning.strong.heading.default_other": "Bu token'lar önde gelen ABD merkezi borsalarında işlem görmüyor veya Uniswap'ta sıklıkla swap edilmiyor.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}}, önde gelen ABD merkezi borsalarında işlem görmüyor veya Uniswap'ta sıklıkla swap edilmiyor.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} satın alındığında {{buyFeePercent}} ücret, satıldığında ise {{sellFeePercent}} ücret tahsil edilir.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}}, satın alındığında {{feePercent}} ücret tahsil edilir.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}}, satıldığında {{feePercent}} ücret tahsil edilir.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} alındığında veya satıldığında ücret tahsil edilir.",
+ "token.safetyLevel.blocked.header": "Mevcut değil",
"token.safetyLevel.blocked.message": "Uniswap Cüzdan'ı kullanarak bu token'ı alıp satamazsın.",
+ "token.safetyLevel.medium.header": "Dikkat",
+ "token.safetyLevel.medium.message": "Bu token önde gelen ABD merkezi borsalarında işlem görmüyor. Devam etmeden önce mutlaka kendi araştırmanı yap.",
"token.safetyLevel.medium.message.plural": "Bu token'lar önde gelen ABD merkezi borsalarında işlem görmüyor. Devam etmeden önce mutlaka kendi araştırmanı yap.",
+ "token.safetyLevel.strong.header": "Uyarı",
+ "token.safetyLevel.strong.message": "Bu token önde gelen ABD merkezi borsalarında işlem görmüyor veya Uniswap'ta sıklıkla swap edilmiyor. Devam etmeden önce mutlaka kendi araştırmanı yap.",
"token.selector.search.error": "Arama sonuçları yüklenemedi",
"token.stats.fullyDilutedValuation": "Tamamen Seyreltilmiş Değerleme",
"token.stats.marketCap": "Piyasa Değeri",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}} ağındaki diğer token'lar",
"tokens.selector.section.recent": "Son aramalar",
"tokens.selector.section.search": "Arama sonuçları",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Token'larınız",
"tokens.table.search.placeholder.pools": "Havuzlarda ara",
"tokens.table.search.placeholder.tokens": "Token ara",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Düşük ağ token'ı bakiyesi",
"transaction.watcher.error.cancel": "İşlem iptal edilemiyor",
"transaction.watcher.error.status": "İşlem durumu kontrol edilirken hata oluştu",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " daha iyi fiyatlar ve Gas ücreti alınmayan swap işlemleri için likidite kaynaklarını bir araya getirir.",
"uniswapx.description": "UniswapX daha iyi fiyatlar ve Gas ücreti alınmayan swap işlemleri için likidite kaynaklarını bir araya getirir.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "UniswapX içerir",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "UniswapX ile swap işlemleri hakkında daha fazla bilgi edin",
diff --git a/packages/uniswap/src/i18n/locales/translations/uk-UA.json b/packages/uniswap/src/i18n/locales/translations/uk-UA.json
index 4e846e7ad3d..5adac1c60d1 100644
--- a/packages/uniswap/src/i18n/locales/translations/uk-UA.json
+++ b/packages/uniswap/src/i18n/locales/translations/uk-UA.json
@@ -176,6 +176,7 @@
"common.allTime": "Весь час",
"common.amount.label": "Сума",
"common.amountDeposited.label": "{{amount}} Депоновано",
+ "common.amountInput.placeholder": "Введіть суму",
"common.and": "і",
"common.app": "додаток",
"common.approval.cancelled": "Затвердження скасовано",
@@ -312,7 +313,6 @@
"common.currency": "Валюта",
"common.currentPrice": "Поточна ціна",
"common.currentPrice.label": "Поточна ціна:",
- "common.currentPrice.unavailable": "Поточна ціна недоступна",
"common.custom": "Custom",
"common.customRange": "Спеціальний діапазон",
"common.dataOutdated": "Дані можуть бути застарілими",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} Зароблені комісії:",
"common.feesEarnedPerBase": "{{symbolA}} на {{symbolB}}",
"common.fetchingRoute": "Отримання маршруту",
+ "common.flag": "Прапор",
"common.floor": "Поверх",
"common.floorPrice": "Мінімальна ціна",
"common.for": "для",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Підтвердити в гаманці",
"common.wallet.label": "Гаманець",
"common.walletForSwapping": "Гаманець, створений для обміну. Доступно на iOS і Android.",
- "common.warning": "УВАГА",
"common.webApp": "Веб-додаток",
"common.website": "Веб-сайт",
"common.whyApprove": "Чому я маю схвалити маркер?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Не вдалося завантажити токени для покупки",
"fiatOnRamp.error.max": "Максимум {{amount}}",
"fiatOnRamp.error.min": "Мінімум {{amount}}",
- "fiatOnRamp.error.noQuotes": "Цитати не знайдено.",
"fiatOnRamp.error.unavailable": "Ця послуга недоступна у вашому регіоні",
"fiatOnRamp.error.unsupported": "Не підтримується в регіоні",
"fiatOnRamp.error.usd": "Доступно лише для покупки в доларах США",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} для {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "Цитати не знайдено",
"fiatOnRamp.purchasedOn": "Придбано {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Ви перейдете на портал постачальника, щоб побачити комісії, пов’язані з вашою транзакцією.",
"fiatOnRamp.quote.type.list": "{{optionsList}}та інші параметри",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} Ціна:",
"migrate.v2Description": "Цей інструмент безпечно перенесе вашу {{source}} ліквідність у V3. Завдяки <0>контракту міграції Uniswap процес абсолютно ненадійний0> ↗",
"migrate.v2Instruction": "Для кожного пулу, наведеного нижче, натисніть «Перенести», щоб видалити свою ліквідність із Uniswap V2 і внести її в Uniswap V3.",
+ "migrate.v2Subtitle": "Перенесіть свої токени ліквідності з Uniswap V2 на Uniswap V3.",
"migrate.v2Title": "Перенесіть ліквідність V2",
"migrate.v3Price": "V3 {{sym}} Ціна:",
"mint.v3.input.invalidPrice.error": "Введена недійсна ціна",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Назвіть свій гаманець",
"onboarding.notification.permission.message": "Щоб отримувати сповіщення, увімкніть сповіщення для Uniswap Wallet у налаштуваннях свого пристрою.",
"onboarding.notification.permission.title": "Дозвіл на сповіщення",
- "onboarding.notification.subtitle": "Будьте в курсі статусів транзакцій і основних змін цін на улюблені токени",
- "onboarding.notification.title": "Увімкніть сповіщення",
+ "onboarding.notification.subtitle": "Отримуйте сповіщення, коли ваші передачі, обміни та затвердження завершаться.",
+ "onboarding.notification.title": "Увімкніть push-сповіщення",
"onboarding.passkey.account.protection": "Ваш обліковий запис захищено власним надійним сховищем паролів.",
"onboarding.passkey.biometric.scan": "Телефон, планшет або браузер — просто проскануйте свої біометричні дані, і ви ввійдете в систему.",
"onboarding.passkey.create": "Створіть свій ключ доступу",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Підключіться до гаманця, щоб переглянути свою ліквідність.",
"pool.liquidity.data.error.message": "Під час отримання даних, необхідних для транзакції, сталася помилка.",
"pool.liquidity.earn.fee": "Постачальники ліквідності отримують комісію 0,3% за всі угоди пропорційно їхній частці пулу. Комісії додаються до пулу, накопичуються в режимі реального часу та можуть бути витребувані шляхом зняття вашої ліквідності.",
- "pool.liquidity.outOfSync": "Невідповідність пулу та ринкової ціни",
- "pool.liquidity.outOfSync.message": "Ціни в цьому пулі відрізняються від ринкових цін вибраних токенів. Відповідно відкоригуйте свій ціновий діапазон або зачекайте, поки пул відновить баланс, щоб уникнути втрат.",
+ "pool.liquidity.outOfSync": "Ціни пулу не синхронізовані",
+ "pool.liquidity.outOfSync.message": "Ціни в цьому пулі не відповідають поточному ринку. Додавання ліквідності може призвести до втрати коштів.",
"pool.liquidity.ownershipWarning.message": "Ви не є власником цієї посади LP. Ви не зможете вивести ліквідність із цієї позиції, якщо у вас не є така адреса: {{ownerAddress}}",
"pool.liquidity.rewards": "Винагорода постачальника ліквідності",
"pool.liquidity.taxWarning": "Символічні податки",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Ціна цього басейну знаходиться в межах обраного вами діапазону. Ваша посада наразі заробляє гонорари.",
"pool.rates": "Ставки",
"pool.ratioTokenToPrice": "Співвідношення токенів, які ви додаєте, встановлюватиме ціну цього пулу.",
- "pool.refresh.prices": "Оновити ціни",
"pool.removeLiquidity": "Видалити ліквідність",
"pool.rewardsPool.label": "Токени пулу в пулі винагород:",
"pool.selectedRange": "Вибраний діапазон",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Хуки — це розширена функція, яка дозволяє пулам взаємодіяти зі смарт-контрактами, розблоковуючи різні можливості. Будьте обережні, додаючи хуки, оскільки деякі з них можуть бути зловмисними або викликати небажані наслідки.",
"position.addingHook": "Додавання гачка",
"position.addingHook.disclaimer": "Додавання хуків може мати непередбачені наслідки. Проведіть дослідження та продовжуйте на свій страх і ризик.",
- "position.addingHook.hideProperties": "Приховати властивості",
"position.addingHook.invalidAddress": "Введіть дійсну адресу гака",
"position.addingHook.viewProperties": "Переглянути властивості",
"position.appearHere": "Тут з'явиться ваша посада.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Депоновано {{currencySymbol}}",
"position.hook.disclaimer": "Я розумію ризики.",
"position.hook.liquidityWarning": "Цей прапорець може змусити пул блокувати додавання нової ліквідності. Ваша транзакція може бути скасована.",
- "position.hook.removeWarning": "Може призвести до блокування ваших коштів або блокування збору комісії.",
+ "position.hook.removeWarning": "Цей прапорець може призвести до блокування ваших коштів або блокування з вас зборів.",
"position.hook.swapWarning": "Цей прапор може дозволити досвідченим користувачам легше використовувати ліквідність Just-In-Time, що призведе до менших зароблених комісій.",
"position.hook.warningHeader": "Виявлено гачок високого ризику",
"position.hook.warningInfo": "Ми визначили потенційні ризики за допомогою цього гачка. Перш ніж продовжити, перегляньте прапорці та переконайтеся, що це той хук, який ви хочете використати.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Затвердити та поміняти",
"swap.approveInWallet": "Підтвердити в гаманці",
"swap.balance.amount": "Баланс: {{amount}}",
- "swap.bestRoute.cost": "За оцінками, найефективніший маршрут коштує ~{{gasPrice}} витрат на мережу. ",
+ "swap.bestRoute.cost": "Найкращий маршрут коштує ~{{gasPrice}} газу. ",
+ "swap.bestRoute.cost.v4": "Оптимальний маршрут коштує ~{{gasPrice}} газу. ",
"swap.bridging.estimatedTime": "Приблизно час",
"swap.bridging.title": "Перемикання між мережами",
"swap.bridging.warning.description": "Ви міняєтеся з {{fromNetwork}} на {{toNetwork}}. Це також відоме як «перемикання», яке переміщує ваші токени з однієї мережі в іншу.",
@@ -1868,16 +1866,15 @@
"swap.review": "Огляд обміну",
"swap.review.summary": "Ви міняєтеся",
"swap.reviewLimit": "Ліміт огляду",
- "swap.route.optimizedGasCost": "Цей маршрут враховує розділені маршрути, кілька переходів і мережеві витрати на кожному кроці.",
+ "swap.route.optimizedGasCost": "Цей маршрут оптимізує ваш загальний результат, враховуючи розділені маршрути, кілька переходів і мережеву вартість кожного кроку.",
"swap.settings.deadline.tooltip": "Ваша трансакція буде скасована, якщо вона очікує на розгляд більше цього періоду часу. (Максимум: 3 дні).",
"swap.settings.deadline.warning": "Високий термін",
"swap.settings.protection.description": "Якщо захист від обміну ввімкнено, ваші транзакції Ethereum будуть захищені від сендвіч-атак із меншими ймовірністю збою.",
"swap.settings.protection.subtitle.supported": "{{chainName}} Мережа",
"swap.settings.protection.subtitle.unavailable": "Недоступно на {{chainName}}",
"swap.settings.protection.title": "Захист від обміну",
- "swap.settings.routingPreference.option.default.description": "Вибір цього параметра визначає найефективніший маршрут для вашого обміну.",
- "swap.settings.routingPreference.option.default.description.preV4": "Клієнт Uniswap вибирає найдешевший варіант торгівлі з урахуванням ціни та вартості мережі.",
- "swap.settings.routingPreference.option.default.tooltip": "Маршрут визначається з урахуванням версії 2, версії 3 і деяких пулів версії 4, враховуючи прогнозований вплив на ціну та вартість мережі.",
+ "swap.settings.routingPreference.option.default.description": "Клієнт Uniswap вибирає найдешевший варіант торгівлі з урахуванням ціни та вартості мережі.",
+ "swap.settings.routingPreference.option.default.description.v4": "Клієнт Uniswap вибирає оптимальний варіант торгівлі з урахуванням ціни та вартості мережі.",
"swap.settings.routingPreference.option.v2.title": "v2 пули",
"swap.settings.routingPreference.option.v3.title": "v3 пули",
"swap.settings.routingPreference.option.v4.title": "v4 пули",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Завжди проводите дослідження",
"token.safety.warning.blocked.description.default_one": "Ви не можете торгувати цим токеном за допомогою програми Uniswap.",
"token.safety.warning.blocked.description.default_other": "Ви не можете торгувати цими токенами за допомогою програми Uniswap.",
+ "token.safety.warning.blocked.description.named": "Ви не можете торгувати {{tokenSymbol}} за допомогою програми Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Більше не показувати це попередження",
"token.safety.warning.doYourOwnResearch": "Завжди проводите власне дослідження, перш ніж продовжити.",
"token.safety.warning.feeDescription": "Заряджає , коли {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} може бути не тим токеном, який ви хочете обміняти.",
"token.safety.warning.malicious.title": "Виявлено шкідливий маркер",
"token.safety.warning.mayResultInLoss": "Його заміна може призвести до втрати коштів.",
+ "token.safety.warning.medium.heading.default_one": "Цей токен не торгується на провідних централізованих біржах США.",
+ "token.safety.warning.medium.heading.default_other": "Ці токени не торгуються на провідних централізованих біржах США.",
+ "token.safety.warning.medium.heading.default_one_also": "Цей токен також не торгується на провідних централізованих біржах США.",
+ "token.safety.warning.medium.heading.default_other_also": "Ці токени також не торгуються на провідних централізованих біржах США.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} не торгується на провідних централізованих біржах США.",
"token.safety.warning.notListedOnExchanges": "Не котирується на провідних біржах США",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} позначено як непридатний для продажу.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "Blockaid позначив {{tokenSymbol}} як спам.",
"token.safety.warning.spam.title": "Виявлено маркер спаму",
"token.safety.warning.spamsUsers": "Спам користувачів",
+ "token.safety.warning.strong.heading.default_one": "Цей токен не торгується на провідних централізованих біржах США або часто обмінюється на Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Ці токени не торгуються на провідних централізованих біржах США або часто обмінюються на Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} не торгується на провідних централізованих біржах США або часто обмінюється на Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} стягує комісію {{buyFeePercent}} за купівлю та {{sellFeePercent}} за продаж.",
"token.safety.warning.tokenChargesFee.buy.message": "При покупці {{tokenSymbol}} стягує комісію {{feePercent}} .",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} стягує комісію {{feePercent}} під час продажу.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} стягує комісію під час купівлі чи продажу.",
+ "token.safetyLevel.blocked.header": "Недоступний",
"token.safetyLevel.blocked.message": "Ви не можете торгувати цим токеном за допомогою гаманця Uniswap.",
+ "token.safetyLevel.medium.header": "Обережно",
+ "token.safetyLevel.medium.message": "Цей токен не торгується на провідних централізованих біржах США. Завжди проводите власне дослідження, перш ніж продовжити.",
"token.safetyLevel.medium.message.plural": "Ці токени не торгуються на провідних централізованих біржах США. Завжди проводите власне дослідження, перш ніж продовжити.",
+ "token.safetyLevel.strong.header": "УВАГА",
+ "token.safetyLevel.strong.message": "Цей токен не торгується на провідних централізованих біржах США або часто обмінюється на Uniswap. Завжди проводите власне дослідження, перш ніж продовжити.",
"token.selector.search.error": "Не вдалося завантажити результати пошуку",
"token.stats.fullyDilutedValuation": "Повністю розведена оцінка",
"token.stats.marketCap": "Ринкова капіталізація",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Інші токени на {{network}}",
"tokens.selector.section.recent": "Останні пошуки",
"tokens.selector.section.search": "Результати пошуку",
- "tokens.selector.section.trending": "Токени за обсягом 24 години",
"tokens.selector.section.yours": "Ваші жетони",
"tokens.table.search.placeholder.pools": "Пошукові пули",
"tokens.table.search.placeholder.tokens": "Пошук токенів",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Низький баланс токенів мережі",
"transaction.watcher.error.cancel": "Не вдалося скасувати трансакцію",
"transaction.watcher.error.status": "Помилка під час перевірки статусу трансакції",
- "unichain.promotion.cold.description": "Швидші обміни. Нижчі комісії. Unichain є домом для DeFi.",
- "unichain.promotion.cold.title": "Представляємо Unichain",
- "unichain.promotion.modal.description": "Швидші обміни. Нижчі комісії. Unichain є домом для міжланцюгової ліквідності.",
- "unichain.promotion.modal.detail.costs": "Менші витрати на створення пулів і управління позиціями.",
- "unichain.promotion.modal.detail.fees": "Заощаджуйте 95% на комісіях порівняно з Ethereum.",
- "unichain.promotion.modal.detail.instant": "Обмін миттєво",
- "unichain.promotion.warm.description": "Обмінюйте улюблені жетони швидше та з меншими витратами на газ.",
- "unichain.promotion.warm.title": "Почніть своп на Unichain",
"uniswapX.aggregatesLiquidity": " об’єднує джерела ліквідності для кращих цін і свопів без газу.",
"uniswapx.description": "UniswapX об’єднує джерела ліквідності для кращих цін і свопів без газу.",
- "uniswapx.included": "Включає UniswapX",
+ "uniswapx.included": "Включає UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Дізнайтеся більше про обмін за допомогою UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/ur-PK.json b/packages/uniswap/src/i18n/locales/translations/ur-PK.json
index 802847c352c..40ec75178e0 100644
--- a/packages/uniswap/src/i18n/locales/translations/ur-PK.json
+++ b/packages/uniswap/src/i18n/locales/translations/ur-PK.json
@@ -176,6 +176,7 @@
"common.allTime": "تمام وقت",
"common.amount.label": "رقم",
"common.amountDeposited.label": "{{amount}} جمع کیا گیا۔",
+ "common.amountInput.placeholder": "ان پٹ کی رقم",
"common.and": "اور",
"common.app": "ایپ",
"common.approval.cancelled": "منظوری منسوخ کر دی گئی۔",
@@ -312,7 +313,6 @@
"common.currency": "کرنسی",
"common.currentPrice": "موجودہ قیمت",
"common.currentPrice.label": "موجودہ قیمت:",
- "common.currentPrice.unavailable": "موجودہ قیمت دستیاب نہیں ہے۔",
"common.custom": "اپنی مرضی کے مطابق",
"common.customRange": "اپنی مرضی کی حد",
"common.dataOutdated": "ڈیٹا پرانا ہو سکتا ہے۔",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} فیس کمائی گئی:",
"common.feesEarnedPerBase": "{{symbolA}} فی {{symbolB}}",
"common.fetchingRoute": "راستہ نکالنا",
+ "common.flag": "جھنڈا۔",
"common.floor": "فرش",
"common.floorPrice": "منزل کی قیمت",
"common.for": "کے لیے",
@@ -681,7 +682,6 @@
"common.wallet.approve": "بٹوے میں منظور کریں۔",
"common.wallet.label": "پرس",
"common.walletForSwapping": "پرس تبدیل کرنے کے لیے بنایا گیا ہے۔ iOS اور Android پر دستیاب ہے۔",
- "common.warning": "وارننگ",
"common.webApp": "ویب ایپ",
"common.website": "ویب سائٹ",
"common.whyApprove": "مجھے ٹوکن منظور کرنے کی کیا ضرورت ہے؟",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "خریدنے کے لیے ٹوکن لوڈ نہیں ہو سکے۔",
"fiatOnRamp.error.max": "زیادہ سے زیادہ {{amount}}",
"fiatOnRamp.error.min": "کم از کم {{amount}}",
- "fiatOnRamp.error.noQuotes": "کوئی اقتباسات نہیں ملے۔",
"fiatOnRamp.error.unavailable": "یہ سروس آپ کے علاقے میں دستیاب نہیں ہے۔",
"fiatOnRamp.error.unsupported": "خطے میں تعاون یافتہ نہیں ہے۔",
"fiatOnRamp.error.usd": "صرف USD میں خریدنے کے لیے دستیاب ہے۔",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} برائے {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "کوئی اقتباسات نہیں ملے",
"fiatOnRamp.purchasedOn": "{{serviceProvider}}پر خریدا گیا۔",
"fiatOnRamp.quote.advice": "آپ اپنے لین دین سے وابستہ فیس دیکھنے کے لیے فراہم کنندہ کے پورٹل پر جائیں گے۔",
"fiatOnRamp.quote.type.list": "{{optionsList}}، اور دیگر اختیارات",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} قیمت:",
"migrate.v2Description": "یہ ٹول محفوظ طریقے سے آپ کی {{source}} لیکویڈیٹی کو V3 میں منتقل کر دے گا۔ <0>Uniswap منتقلی کے معاہدے کی بدولت یہ عمل مکمل طور پر بے اعتبار ہے۔0> ↗",
"migrate.v2Instruction": "ذیل میں دکھائے گئے ہر پول کے لیے، Uniswap V2 سے اپنی لیکویڈیٹی کو ہٹانے اور اسے Uniswap V3 میں جمع کرنے کے لیے منتقلی پر کلک کریں۔",
+ "migrate.v2Subtitle": "اپنے لیکویڈیٹی ٹوکنز کو Uniswap V2 سے Uniswap V3 میں منتقل کریں۔",
"migrate.v2Title": "V2 لیکویڈیٹی کو منتقل کریں۔",
"migrate.v3Price": "V3 {{sym}} قیمت:",
"mint.v3.input.invalidPrice.error": "غلط قیمت ان پٹ",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "اپنے بٹوے کو ایک نام دیں۔",
"onboarding.notification.permission.message": "اطلاعات موصول کرنے کے لیے، اپنے آلے کی ترتیبات میں Unswap Wallet کے لیے اطلاعات کو آن کریں۔",
"onboarding.notification.permission.title": "اطلاعات کی اجازت",
- "onboarding.notification.subtitle": "لین دین کے حالات اور پسندیدہ ٹوکنز کی قیمتوں میں اہم تبدیلیوں کے بارے میں اپ ڈیٹ رہیں",
- "onboarding.notification.title": "اطلاعات کو آن کریں۔",
+ "onboarding.notification.subtitle": "جب آپ کی منتقلی، تبادلہ، اور منظوری مکمل ہو جائے تو اطلاع حاصل کریں۔",
+ "onboarding.notification.title": "پش اطلاعات کو آن کریں۔",
"onboarding.passkey.account.protection": "آپ کا اکاؤنٹ آپ کے اپنے محفوظ پاس ورڈ اسٹوریج سے محفوظ ہے۔",
"onboarding.passkey.biometric.scan": "فون، ٹیبلیٹ، یا براؤزر — بس اپنے بایومیٹرکس کو اسکین کریں اور آپ لاگ ان ہو جائیں گے۔",
"onboarding.passkey.create": "اپنی پاسکی بنائیں",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "اپنی لیکویڈیٹی دیکھنے کے لیے بٹوے سے جڑیں۔",
"pool.liquidity.data.error.message": "آپ کے لین دین کے لیے درکار ڈیٹا حاصل کرنے میں ایک خرابی تھی۔",
"pool.liquidity.earn.fee": "لیکویڈیٹی فراہم کرنے والے پول کے اپنے حصے کے متناسب تمام تجارتوں پر 0.3% فیس کماتے ہیں۔ پول میں فیسیں شامل کی جاتی ہیں، اصل وقت میں جمع ہوتی ہیں اور آپ کی لیکویڈیٹی واپس لے کر دعویٰ کیا جا سکتا ہے۔",
- "pool.liquidity.outOfSync": "پول اور مارکیٹ کی قیمت میں مماثلت نہیں ہے۔",
- "pool.liquidity.outOfSync.message": "اس پول میں قیمتیں منتخب ٹوکنز کی مارکیٹ کی قیمتوں سے مختلف ہوتی ہیں۔ اس کے مطابق اپنی قیمت کی حد کو ایڈجسٹ کریں یا نقصان سے بچنے کے لیے پول کے دوبارہ توازن کا انتظار کریں۔",
+ "pool.liquidity.outOfSync": "پول کی قیمتیں ہم آہنگی سے باہر ہیں۔",
+ "pool.liquidity.outOfSync.message": "اس پول میں قیمتیں موجودہ مارکیٹ کے ساتھ مطابقت سے باہر ہیں۔ لیکویڈیٹی شامل کرنے سے فنڈز کا نقصان ہو سکتا ہے۔",
"pool.liquidity.ownershipWarning.message": "آپ اس LP پوزیشن کے مالک نہیں ہیں۔ آپ اس پوزیشن سے لیکویڈیٹی واپس نہیں لے سکیں گے جب تک کہ آپ درج ذیل پتے کے مالک نہ ہوں: {{ownerAddress}}",
"pool.liquidity.rewards": "لیکویڈیٹی فراہم کرنے والے کے انعامات",
"pool.liquidity.taxWarning": "ٹوکن ٹیکس",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "اس پول کی قیمت آپ کی منتخب کردہ حد کے اندر ہے۔ آپ کی پوزیشن فی الحال فیس کما رہی ہے۔",
"pool.rates": "نرخ",
"pool.ratioTokenToPrice": "آپ جو ٹوکن شامل کرتے ہیں اس کا تناسب اس پول کی قیمت مقرر کرے گا۔",
- "pool.refresh.prices": "قیمتیں تازہ کریں۔",
"pool.removeLiquidity": "لیکویڈیٹی کو ہٹا دیں۔",
"pool.rewardsPool.label": "انعامات کے تالاب میں پول ٹوکن:",
"pool.selectedRange": "منتخب کردہ رینج",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "ہکس ایک جدید خصوصیت ہے جو پولز کو سمارٹ کنٹریکٹس کے ساتھ تعامل کرنے کے قابل بناتی ہے، مختلف صلاحیتوں کو کھول کر۔ ہکس شامل کرتے وقت احتیاط برتیں، کیونکہ کچھ نقصان دہ ہو سکتے ہیں یا غیر ارادی نتائج کا سبب بن سکتے ہیں۔",
"position.addingHook": "ہک شامل کرنا",
"position.addingHook.disclaimer": "ہکس شامل کرنے کے غیر ارادی نتائج ہو سکتے ہیں۔ اپنی تحقیق کریں اور اپنی ذمہ داری پر آگے بڑھیں۔",
- "position.addingHook.hideProperties": "پراپرٹیز چھپائیں۔",
"position.addingHook.invalidAddress": "ایک درست ہک ایڈریس درج کریں۔",
"position.addingHook.viewProperties": "پراپرٹیز دیکھیں",
"position.appearHere": "آپ کی پوزیشن یہاں ظاہر ہوگی۔",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "جمع شدہ {{currencySymbol}}",
"position.hook.disclaimer": "میں خطرات کو سمجھتا ہوں۔",
"position.hook.liquidityWarning": "یہ جھنڈا پول کو نئی لیکویڈیٹی کے اضافے کو روکنے کا سبب بن سکتا ہے۔ آپ کا لین دین واپس ہو سکتا ہے۔",
- "position.hook.removeWarning": "آپ کے فنڈز کو لاک کرنے یا آپ کو فیس جمع کرنے سے روک سکتا ہے۔",
+ "position.hook.removeWarning": "یہ جھنڈا آپ کے فنڈز کو لاک کرنے یا آپ کو فیس جمع کرنے سے روک سکتا ہے۔",
"position.hook.swapWarning": "یہ جھنڈا نفیس صارفین کو زیادہ آسانی سے جسٹ ان ٹائم لیکویڈیٹی سے فائدہ اٹھانے کی اجازت دیتا ہے جس کے نتیجے میں کم فیس کمائی جاتی ہے۔",
"position.hook.warningHeader": "ہائی رسک ہک کا پتہ چلا",
"position.hook.warningInfo": "ہم نے اس ہک کے ساتھ ممکنہ خطرات کی نشاندہی کی ہے۔ براہ کرم جھنڈوں کا جائزہ لیں اور تصدیق کریں کہ یہ وہی ہک ہے جسے آپ آگے بڑھنے سے پہلے استعمال کرنا چاہتے ہیں۔",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "منظور کریں اور تبادلہ کریں۔",
"swap.approveInWallet": "اپنے بٹوے میں منظور کریں۔",
"swap.balance.amount": "بیلنس: {{amount}}",
- "swap.bestRoute.cost": "نیٹ ورک کی لاگت میں سب سے زیادہ موثر راستے کا تخمینہ ~{{gasPrice}} لاگت کا ہے۔ ",
+ "swap.bestRoute.cost": "بہترین قیمت کے راستے کی قیمت گیس میں{{gasPrice}} ۔ ",
+ "swap.bestRoute.cost.v4": "گیس میں بہترین راستے کی قیمت ~{{gasPrice}} ۔ ",
"swap.bridging.estimatedTime": "تخمینہ وقت",
"swap.bridging.title": "نیٹ ورکس میں تبادلہ",
"swap.bridging.warning.description": "آپ {{fromNetwork}} سے {{toNetwork}}میں تبدیل ہو رہے ہیں۔ اسے \"برجنگ\" کے نام سے بھی جانا جاتا ہے، جو آپ کے ٹوکنز کو ایک نیٹ ورک سے دوسرے نیٹ ورک میں منتقل کرتا ہے۔",
@@ -1868,16 +1866,15 @@
"swap.review": "تبادلہ کا جائزہ لیں۔",
"swap.review.summary": "آپ تبادلہ کر رہے ہیں۔",
"swap.reviewLimit": "جائزہ کی حد",
- "swap.route.optimizedGasCost": "یہ راستہ تقسیم راستوں، متعدد ہاپس، اور ہر قدم کے نیٹ ورک کے اخراجات پر غور کرتا ہے۔",
+ "swap.route.optimizedGasCost": "یہ راستہ تقسیم راستوں، متعدد ہاپس، اور ہر قدم کے نیٹ ورک کے اخراجات پر غور کر کے آپ کے کل آؤٹ پٹ کو بہتر بناتا ہے۔",
"swap.settings.deadline.tooltip": "اگر آپ کا لین دین اس مدت سے زیادہ زیر التوا ہے تو وہ واپس آجائے گا۔ (زیادہ سے زیادہ: 3 دن)۔",
"swap.settings.deadline.warning": "ہائی ڈیڈ لائن",
"swap.settings.protection.description": "سویپ پروٹیکشن آن کے ساتھ، آپ کے ایتھریم ٹرانزیکشنز کو سینڈوچ حملوں سے محفوظ رکھا جائے گا، ناکامی کے کم امکانات کے ساتھ۔",
"swap.settings.protection.subtitle.supported": "{{chainName}} نیٹ ورک",
"swap.settings.protection.subtitle.unavailable": "{{chainName}}پر دستیاب نہیں ہے۔",
"swap.settings.protection.title": "تبادلہ تحفظ",
- "swap.settings.routingPreference.option.default.description": "اس اختیار کو منتخب کرنے سے آپ کے سویپ کے لیے سب سے زیادہ موثر راستے کی نشاندہی ہوتی ہے۔",
- "swap.settings.routingPreference.option.default.description.preV4": "Uniswap کلائنٹ قیمت اور نیٹ ورک کی لاگت کے لحاظ سے سب سے سستے تجارتی آپشن کا انتخاب کرتا ہے۔",
- "swap.settings.routingPreference.option.default.tooltip": "ایک راستے کی شناخت v2، v3، اور کچھ v4 پولز کو مدنظر رکھتے ہوئے کی جاتی ہے، تخمینہ قیمت کے اثرات اور نیٹ ورک کی لاگت میں فیکٹرنگ۔",
+ "swap.settings.routingPreference.option.default.description": "Uniswap کلائنٹ قیمت اور نیٹ ورک کی لاگت کے لحاظ سے سب سے سستے تجارتی آپشن کا انتخاب کرتا ہے۔",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap کلائنٹ قیمت اور نیٹ ورک کی لاگت کے لحاظ سے بہترین تجارتی آپشن کا انتخاب کرتا ہے۔",
"swap.settings.routingPreference.option.v2.title": "v2 تالاب",
"swap.settings.routingPreference.option.v3.title": "v3 تالاب",
"swap.settings.routingPreference.option.v4.title": "v4 تالاب",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "ہمیشہ اپنی تحقیق کریں۔",
"token.safety.warning.blocked.description.default_one": "آپ Uniswap ایپ کا استعمال کر کے اس ٹوکن کی تجارت نہیں کر سکتے۔",
"token.safety.warning.blocked.description.default_other": "آپ ان ٹوکنز کی تجارت Uniswap ایپ کا استعمال نہیں کر سکتے۔",
+ "token.safety.warning.blocked.description.named": "آپ Uniswap ایپ کا استعمال کر کے {{tokenSymbol}} تجارت نہیں کر سکتے۔",
"token.safety.warning.dontShowWarningAgain": "مجھے یہ وارننگ دوبارہ مت دکھائیں۔",
"token.safety.warning.doYourOwnResearch": "آگے بڑھنے سے پہلے ہمیشہ اپنی تحقیق کریں۔",
"token.safety.warning.feeDescription": " چارج کرتا ہے جب {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} وہ ٹوکن نہیں ہو سکتا جسے آپ تبدیل کرنا چاہتے ہیں۔",
"token.safety.warning.malicious.title": "نقصان دہ ٹوکن کا پتہ چلا",
"token.safety.warning.mayResultInLoss": "اسے تبدیل کرنے سے فنڈز کا نقصان ہو سکتا ہے۔",
+ "token.safety.warning.medium.heading.default_one": "اس ٹوکن کی تجارت امریکہ کے معروف مرکزی تبادلے پر نہیں کی جاتی ہے۔",
+ "token.safety.warning.medium.heading.default_other": "ان ٹوکنز کی تجارت امریکہ کے معروف مرکزی تبادلے پر نہیں کی جاتی ہے۔",
+ "token.safety.warning.medium.heading.default_one_also": "اس ٹوکن کی تجارت امریکہ کے معروف مرکزی تبادلے پر بھی نہیں ہوتی ہے۔",
+ "token.safety.warning.medium.heading.default_other_also": "یہ ٹوکن امریکہ کے معروف مرکزی تبادلے پر بھی ٹریڈ نہیں ہوتے ہیں۔",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} معروف امریکی مرکزی تبادلے پر تجارت نہیں کی جاتی ہے۔",
"token.safety.warning.notListedOnExchanges": "معروف امریکی تبادلے میں درج نہیں ہے۔",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} کو ناقابل فروخت کے طور پر جھنڈا لگایا گیا ہے۔",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} کو بلاک ایڈ کے ذریعہ اسپام کے طور پر جھنڈا لگایا گیا ہے۔",
"token.safety.warning.spam.title": "اسپام ٹوکن کا پتہ چلا",
"token.safety.warning.spamsUsers": "سپیم صارفین",
+ "token.safety.warning.strong.heading.default_one": "اس ٹوکن کی تجارت امریکہ کے معروف سنٹرلائزڈ ایکسچینجز پر نہیں کی جاتی ہے یا اسے اکثر یونی سویپ پر تبدیل نہیں کیا جاتا ہے۔",
+ "token.safety.warning.strong.heading.default_other": "ان ٹوکنز کی تجارت امریکہ کے معروف مرکزی تبادلے پر نہیں کی جاتی ہے اور نہ ہی ان کو یونی سویپ پر اکثر تبدیل کیا جاتا ہے۔",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} کی تجارت امریکہ کے معروف مرکزی تبادلے پر نہیں کی جاتی ہے یا اکثر یونی سویپ پر تبدیل نہیں ہوتی ہے۔",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} خریدے جانے پر {{buyFeePercent}} اور بیچنے پر {{sellFeePercent}} فیس لیتا ہے۔",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} خریدنے پر {{feePercent}} فیس لیتا ہے۔",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} فروخت ہونے پر {{feePercent}} فیس لیتا ہے۔",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} خریدنے یا بیچنے پر فیس لیتا ہے۔",
+ "token.safetyLevel.blocked.header": "دستیاب نہیں ہے",
"token.safetyLevel.blocked.message": "آپ Unswap Wallet کا استعمال کرتے ہوئے اس ٹوکن کی تجارت نہیں کر سکتے۔",
+ "token.safetyLevel.medium.header": "احتیاط",
+ "token.safetyLevel.medium.message": "اس ٹوکن کی تجارت امریکہ کے معروف مرکزی تبادلے پر نہیں کی جاتی ہے۔ آگے بڑھنے سے پہلے ہمیشہ اپنی تحقیق کریں۔",
"token.safetyLevel.medium.message.plural": "ان ٹوکنز کی تجارت امریکہ کے معروف مرکزی تبادلے پر نہیں کی جاتی ہے۔ آگے بڑھنے سے پہلے ہمیشہ اپنی تحقیق کریں۔",
+ "token.safetyLevel.strong.header": "وارننگ",
+ "token.safetyLevel.strong.message": "اس ٹوکن کی تجارت امریکہ کے معروف سنٹرلائزڈ ایکسچینجز پر نہیں کی جاتی ہے یا اسے اکثر یونی سویپ پر تبدیل نہیں کیا جاتا ہے۔ آگے بڑھنے سے پہلے ہمیشہ اپنی تحقیق کریں۔",
"token.selector.search.error": "تلاش کے نتائج لوڈ نہیں ہو سکے۔",
"token.stats.fullyDilutedValuation": "مکمل طور پر کمزور تشخیص",
"token.stats.marketCap": "مارکیٹ کیپ",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}}پر دیگر ٹوکن",
"tokens.selector.section.recent": "حالیہ تلاشیں۔",
"tokens.selector.section.search": "تلاش کے نتائج",
- "tokens.selector.section.trending": "ٹوکنز بذریعہ 24H والیوم",
"tokens.selector.section.yours": "آپ کے ٹوکنز",
"tokens.table.search.placeholder.pools": "تالاب تلاش کریں۔",
"tokens.table.search.placeholder.tokens": "ٹوکن تلاش کریں۔",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "کم نیٹ ورک ٹوکن بیلنس",
"transaction.watcher.error.cancel": "لین دین منسوخ کرنے سے قاصر",
"transaction.watcher.error.status": "ٹرانزیکشن اسٹیٹس چیک کرتے وقت خرابی",
- "unichain.promotion.cold.description": "تیز تر تبادلہ۔ کم فیس۔ یونیچین ڈی فائی کا گھر ہے۔",
- "unichain.promotion.cold.title": "یونی چین کا تعارف",
- "unichain.promotion.modal.description": "تیز تر تبادلہ۔ کم فیس۔ یونچین کراس چین لیکویڈیٹی کا گھر ہے۔",
- "unichain.promotion.modal.detail.costs": "پول بنانے اور عہدوں کے انتظام کے لیے کم لاگت۔",
- "unichain.promotion.modal.detail.fees": "Ethereum کے مقابلے میں فیس پر 95% کی بچت کریں۔",
- "unichain.promotion.modal.detail.instant": "فوری طور پر تبادلہ کریں۔",
- "unichain.promotion.warm.description": "اپنے پسندیدہ ٹوکنز کو تیزی سے اور کم گیس کی قیمتوں کے ساتھ تبدیل کریں۔",
- "unichain.promotion.warm.title": "یونیچین پر تبادلہ کرنا شروع کریں۔",
"uniswapX.aggregatesLiquidity": " بہتر قیمتوں اور گیس سے پاک تبادلہ کے لیے لیکویڈیٹی ذرائع کو جمع کرتا ہے۔",
"uniswapx.description": "UniswapX بہتر قیمتوں اور گیس سے پاک تبادلہ کے لیے لیکویڈیٹی ذرائع کو جمع کرتا ہے۔",
- "uniswapx.included": "شامل ہے UniswapX",
+ "uniswapx.included": "شامل ہے UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "UniswapX کے ساتھ تبادلہ کرنے کے بارے میں مزید جانیں۔",
diff --git a/packages/uniswap/src/i18n/locales/translations/vi-VN.json b/packages/uniswap/src/i18n/locales/translations/vi-VN.json
index f6957c224f6..b7b1741bd99 100644
--- a/packages/uniswap/src/i18n/locales/translations/vi-VN.json
+++ b/packages/uniswap/src/i18n/locales/translations/vi-VN.json
@@ -176,6 +176,7 @@
"common.allTime": "Mọi thời điểm",
"common.amount.label": "Số tiền",
"common.amountDeposited.label": "Đã nạp {{amount}}",
+ "common.amountInput.placeholder": "Nhập số tiền",
"common.and": "và",
"common.app": "Ứng dụng",
"common.approval.cancelled": "Đã hủy phê duyệt",
@@ -312,7 +313,6 @@
"common.currency": "Loại tiền",
"common.currentPrice": "Giá hiện tại",
"common.currentPrice.label": "Giá hiện tại:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "Tùy chỉnh",
"common.customRange": "Khoảng giá tùy chỉnh",
"common.dataOutdated": "Dữ liệu có thể đã cũ",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "Phí {{symbol}} đã nhận được:",
"common.feesEarnedPerBase": "{{symbolA}} cho mỗi {{symbolB}}",
"common.fetchingRoute": "Đang tìm tuyến",
+ "common.flag": "Gắn cờ",
"common.floor": "Sàn",
"common.floorPrice": "Mức giá sàn",
"common.for": "Cho",
@@ -681,7 +682,6 @@
"common.wallet.approve": "Phê duyệt trong ví",
"common.wallet.label": "Ví",
"common.walletForSwapping": "Ví được xây dựng để hoán đổi. Khả dụng trên iOS và Android.",
- "common.warning": "Warning",
"common.webApp": "Ứng dụng web",
"common.website": "Trang web",
"common.whyApprove": "Tại sao tôi lại phải phê duyệt token?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "Không thể tải token để mua",
"fiatOnRamp.error.max": "Tối đa {{amount}}",
"fiatOnRamp.error.min": "Tối thiểu {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "Dịch vụ này không khả dụng tại khu vực của bạn",
"fiatOnRamp.error.unsupported": "Không được hỗ trợ tại khu vực",
"fiatOnRamp.error.usd": "Chỉ có thể mua bằng USD",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} cho {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "Đã mua trên {{serviceProvider}}",
"fiatOnRamp.quote.advice": "Bạn sẽ được chuyển đến cổng thanh toán của nhà cung cấp để xem phí liên quan đến giao dịch của bạn.",
"fiatOnRamp.quote.type.list": "{{optionsList}}, và các lựa chọn khác",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "NFT LP {{symA}}/{{symB}}",
"migrate.lpTokens": "Token LP {{symA}}/{{symB}}",
"migrate.migrating": "Đang di chuyển",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "Không thấy một trong các vị thế v2 của bạn? Hãy nhập vào.",
"migrate.noV2Liquidity": "Không tìm thấy thanh khoản V2.",
"migrate.positionNoFees": "Vị thế của bạn sẽ không kiếm được phí hoặc được sử dụng trong giao dịch cho đến khi giá thị trường nằm trong khoảng giá của bạn.",
"migrate.priceDifference": "Chênh lệch giá: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "Giá {{tokenSymbol}} {{protocolName}}:",
"migrate.v2Description": "Công cụ này sẽ di chuyển thanh khoản {{source}} của bạn sang V3 một cách an toàn. Quá trình này hoàn toàn không cần phải đặt niềm tin vào bên thứ ba nhờ <0> hợp đồng di chuyển Uniswap 0> ↗",
"migrate.v2Instruction": "Với mỗi pool hiển thị bên dưới, nhấp vào di chuyển để rút thanh khoản của bạn từ Uniswap V2 và nạp vào Uniswap V3.",
+ "migrate.v2Subtitle": "Di chuyển token thanh khoản của bạn từ Uniswap V2 sang Uniswap V3.",
"migrate.v2Title": "Di chuyển thanh khoản V2",
"migrate.v3Price": "Giá {{sym}} V3:",
"mint.v3.input.invalidPrice.error": "Giá nhập không hợp lệ",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "Đặt tên cho ví của bạn",
"onboarding.notification.permission.message": "Để nhận thông báo, hãy bật thông báo cho Ví Uniswap trong mục cài đặt của thiết bị bạn.",
"onboarding.notification.permission.title": "Quyền thông báo",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "Nhận thông báo khi quá trình chuyển, hoán đổi và phê duyệt của bạn hoàn tất.",
+ "onboarding.notification.title": "Bật thông báo đẩy",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "Kết nối với ví để xem thanh khoản của bạn.",
"pool.liquidity.data.error.message": "Gặp lỗi khi lấy dữ liệu cần thiết cho giao dịch của bạn.",
"pool.liquidity.earn.fee": "Nhà cung cấp thanh khoản kiếm được phí 0,3% trên tất cả giao dịch tương ứng với cổ phần của họ trong pool. Phí được thêm vào pool, dồn tích theo thời gian thực và có thể được nhận bằng cách rút thanh khoản.",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "Giá trong pool không đồng bộ",
+ "pool.liquidity.outOfSync.message": "Giá trong pool này không đồng bộ với giá thị trường hiện tại. Việc thêm thanh khoản có thể gây mất quỹ.",
"pool.liquidity.ownershipWarning.message": "Bạn không phải chủ sở hữu của vị thế LP này. Bạn sẽ không thể rút thanh khoản từ vị thế này trừ khi bạn sở hữu địa chỉ sau: {{ownerAddress}}",
"pool.liquidity.rewards": "Phần thưởng nhà cung cấp thanh khoản",
"pool.liquidity.taxWarning": "Thuế token",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "Giá của pool này nằm trong khoảng giá bạn đã chọn. Vị thế của bạn hiện đang kiếm được phí.",
"pool.rates": "Tỷ giá",
"pool.ratioTokenToPrice": "Tỷ lệ token bạn thêm vào sẽ đặt ra giá của pool này.",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "Rút thanh khoản",
"pool.rewardsPool.label": "Token trong pool tại pool phần thưởng:",
"pool.selectedRange": "Khoảng giá đã chọn",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hook là tính năng nâng cao cho phép pool tương tác với hợp đồng thông minh, mở khóa nhiều khả năng khác nhau. Hãy thận trọng khi thêm hook, vì một số hook có thể độc hại hoặc gây ra hậu quả không mong muốn.",
"position.addingHook": "Đang thêm hook",
"position.addingHook.disclaimer": "Việc thêm hook có thể gây ra hậu quả không mong muốn. Hãy nghiên cứu kỹ và tự chịu rủi ro khi tiến hành.",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "Nhập địa chỉ hook hợp lệ",
"position.addingHook.viewProperties": "Xem thuộc tính",
"position.appearHere": "Vị thế của bạn sẽ xuất hiện tại đây.",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "Đã nạp {{currencySymbol}}",
"position.hook.disclaimer": "Tôi hiểu các rủi ro.",
"position.hook.liquidityWarning": "Cờ này có thể khiến pool chặn việc thêm thanh khoản mới. Giao dịch của bạn có thể bị hoàn tác.",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "Cờ này có thể khiến tiền của bạn bị khóa hoặc ngăn bạn thu phí.",
"position.hook.swapWarning": "Cờ này có thể cho phép người dùng thành thạo dễ dàng tận dụng thanh khoản Just-In-Time, dẫn đến phí kiếm được thấp hơn.",
"position.hook.warningHeader": "Phát hiện hook có rủi ro cao",
"position.hook.warningInfo": "Chúng tôi đã xác định các rủi ro tiềm ẩn với hook này. Vui lòng xem xét các cờ và xác minh đây là hook bạn muốn sử dụng trước khi tiếp tục.",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "Phê duyệt và hoán đổi",
"swap.approveInWallet": "Phê duyệt trong ví của bạn",
"swap.balance.amount": "Số dư: {{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "Tuyến giá tốt nhất tốn ~{{gasPrice}} phí gas. ",
+ "swap.bestRoute.cost.v4": "Phí tuyến tối ưu là ~{{gasPrice}} gas. ",
"swap.bridging.estimatedTime": "Thời gian ước tính",
"swap.bridging.title": "Hoán đổi trên các mạng",
"swap.bridging.warning.description": "Bạn đang hoán đổi từ {{fromNetwork}} sang {{toNetwork}}. Điều này còn được gọi là \"kết nối cầu\", tức là di chuyển token của bạn từ mạng này sang mạng khác.",
@@ -1868,16 +1866,15 @@
"swap.review": "Xem lại hoán đổi",
"swap.review.summary": "Bạn đang hoán đổi",
"swap.reviewLimit": "Xem lại giới hạn",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "Tuyến này sẽ tối ưu hóa tổng đầu ra của bạn bằng cách xem xét các tuyến phân tách, nhiều chặng và phí mạng của từng bước.",
"swap.settings.deadline.tooltip": "Giao dịch của bạn sẽ hoàn tác nếu thời gian chờ dài hơn khoảng thời gian này. (Tối đa: 3 ngày).",
"swap.settings.deadline.warning": "Sắp đến hạn",
"swap.settings.protection.description": "Khi đang bật bảo vệ hoán đổi, giao dịch Ethereum của bạn sẽ được bảo vệ khỏi tấn công sandwich, giảm khả năng không thành công.",
"swap.settings.protection.subtitle.supported": "Mạng {{chainName}}",
"swap.settings.protection.subtitle.unavailable": "Không khả dụng trên {{chainName}}",
"swap.settings.protection.title": "Bảo vệ hoán đổi",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Ứng dụng Uniswap sẽ chọn tùy chọn giao dịch rẻ nhất dựa trên giá và phí mạng.",
+ "swap.settings.routingPreference.option.default.description.v4": "Ứng dụng Uniswap sẽ chọn tùy chọn giao dịch tối ưu dựa trên giá và phí mạng.",
"swap.settings.routingPreference.option.v2.title": "Pool v2",
"swap.settings.routingPreference.option.v3.title": "Pool v3",
"swap.settings.routingPreference.option.v4.title": "Pool v4",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "Luôn tự nghiên cứu",
"token.safety.warning.blocked.description.default_one": "Bạn không thể giao dịch token này bằng Ứng dụng Uniswap.",
"token.safety.warning.blocked.description.default_other": "Bạn không thể giao dịch các token này bằng Ứng dụng Uniswap.",
+ "token.safety.warning.blocked.description.named": "Bạn không thể giao dịch {{tokenSymbol}} bằng Ứng dụng Uniswap.",
"token.safety.warning.dontShowWarningAgain": "Không hiển thị cảnh báo này nữa",
"token.safety.warning.doYourOwnResearch": "Luôn tự nghiên cứu trước khi tiếp tục.",
"token.safety.warning.feeDescription": "Tính khi {{action}}",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} có thể không phải là token mà bạn định hoán đổi.",
"token.safety.warning.malicious.title": "Đã phát hiện token độc hại",
"token.safety.warning.mayResultInLoss": "Hoán đổi token này có thể khiến bạn mất quỹ.",
+ "token.safety.warning.medium.heading.default_one": "Token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ.",
+ "token.safety.warning.medium.heading.default_other": "Các token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ.",
+ "token.safety.warning.medium.heading.default_one_also": "Token này cũng không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ.",
+ "token.safety.warning.medium.heading.default_other_also": "Các token này cũng không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ.",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ.",
"token.safety.warning.notListedOnExchanges": "Không được niêm yết trên các sàn giao dịch hàng đầu của Hoa Kỳ",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} bị gắn cờ không thể bán.",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} bị Blockaid gắn cờ spam.",
"token.safety.warning.spam.title": "Đã phát hiện token spam",
"token.safety.warning.spamsUsers": "Người dùng spam",
+ "token.safety.warning.strong.heading.default_one": "Token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ hoặc thường xuyên hoán đổi trên Uniswap.",
+ "token.safety.warning.strong.heading.default_other": "Các token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ hoặc thường xuyên hoán đổi trên Uniswap.",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ hoặc thường xuyên hoán đổi trên Uniswap.",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} tính phí {{buyFeePercent}} khi mua và {{sellFeePercent}} khi bán.",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} sẽ tính phí {{feePercent}} khi mua.",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} sẽ tính phí {{feePercent}} khi bán.",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} sẽ tính phí khi mua hoặc bán.",
+ "token.safetyLevel.blocked.header": "Không khả dụng",
"token.safetyLevel.blocked.message": "Bạn không thể giao dịch token này bằng Ví Uniswap.",
+ "token.safetyLevel.medium.header": "Thận trọng",
+ "token.safetyLevel.medium.message": "Token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ. Luôn tự nghiên cứu trước khi tiếp tục.",
"token.safetyLevel.medium.message.plural": "Các token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ. Luôn tự nghiên cứu trước khi tiếp tục.",
+ "token.safetyLevel.strong.header": "Cảnh báo",
+ "token.safetyLevel.strong.message": "Token này không được giao dịch trên các sàn giao dịch tập trung hàng đầu của Mỹ hoặc thường xuyên hoán đổi trên Uniswap. Luôn tự nghiên cứu trước khi tiếp tục.",
"token.selector.search.error": "Không thể tải kết quả tìm kiếm",
"token.stats.fullyDilutedValuation": "Vốn hóa pha loãng hoàn toàn",
"token.stats.marketCap": "Vốn hóa thị trường",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "Token khác trên {{network}}",
"tokens.selector.section.recent": "Tìm kiếm gần đây",
"tokens.selector.section.search": "Kết quả tìm kiếm",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "Token của bạn",
"tokens.table.search.placeholder.pools": "Tìm kiếm pool",
"tokens.table.search.placeholder.tokens": "Tìm kiếm token",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "Số dư token mạng thấp",
"transaction.watcher.error.cancel": "Không thể hủy giao dịch",
"transaction.watcher.error.status": "Lỗi khi kiểm tra trạng thái giao dịch",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " tổng hợp các nguồn thanh khoản để có giá tốt hơn và hoán đổi có miễn phí gas.",
"uniswapx.description": "UniswapX tổng hợp các nguồn thanh khoản để có giá tốt hơn và hoán đổi có miễn phí gas.",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "Bao gồm UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "Tìm hiểu thêm về hoán đổi với UniswapX",
diff --git a/packages/uniswap/src/i18n/locales/translations/zh-CN.json b/packages/uniswap/src/i18n/locales/translations/zh-CN.json
index c009aeb875a..b48219f58e8 100644
--- a/packages/uniswap/src/i18n/locales/translations/zh-CN.json
+++ b/packages/uniswap/src/i18n/locales/translations/zh-CN.json
@@ -176,6 +176,7 @@
"common.allTime": "所有时间",
"common.amount.label": "金额",
"common.amountDeposited.label": "{{amount}} 已存入",
+ "common.amountInput.placeholder": "输入金额",
"common.and": "和",
"common.app": "应用",
"common.approval.cancelled": "批准被取消",
@@ -312,7 +313,6 @@
"common.currency": "货币",
"common.currentPrice": "当前价格",
"common.currentPrice.label": "当前价格:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "自定义",
"common.customRange": "定制范围",
"common.dataOutdated": "数据可能已过时",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} 已赚取的费用:",
"common.feesEarnedPerBase": "{{symbolA}} 每 {{symbolB}}",
"common.fetchingRoute": "正在获取路径",
+ "common.flag": "标记",
"common.floor": "底价",
"common.floorPrice": "底价",
"common.for": "相当于",
@@ -681,7 +682,6 @@
"common.wallet.approve": "在钱包中批准",
"common.wallet.label": "钱包",
"common.walletForSwapping": "专为交换而设计的钱包。适用于 iOS 和 Android。",
- "common.warning": "Warning",
"common.webApp": "网络应用",
"common.website": "网站",
"common.whyApprove": "为什么我必须批准代币?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "未能加载要购买的代币",
"fiatOnRamp.error.max": "最高 {{amount}}",
"fiatOnRamp.error.min": "最低 {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "你所在的地区不提供此服务",
"fiatOnRamp.error.unsupported": "地区不支持",
"fiatOnRamp.error.usd": "只能以美元购买",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} 交换 {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "已在 {{serviceProvider}} 上购买",
"fiatOnRamp.quote.advice": "你将前往提供商的门户查看交易的相关费用。",
"fiatOnRamp.quote.type.list": "{{optionsList}} 以及其他选项",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} LP NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP 代币",
"migrate.migrating": "正在迁移",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "没有看到你的 v2 头寸?将其导入。",
"migrate.noV2Liquidity": "未发现 V2 流动性。",
"migrate.positionNoFees": "在市场价格进入你的交易范围之前,你的头寸不会赚取费用或用于交易。",
"migrate.priceDifference": "差价: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} 价格:",
"migrate.v2Description": "此工具将安全地将你的 {{source}} 流动性迁移至 V3。由于 <0>Uniswap 迁移合约0>↗的存在,该过程实现了完全的无信任化操作",
"migrate.v2Instruction": "对于下面显示的每个资金池,点击迁移即可从 Uniswap V2 中移除流动性,并将其存入 Uniswap V3。",
+ "migrate.v2Subtitle": "将你的流动性代币从 Uniswap V2 迁移到 Uniswap V3。",
"migrate.v2Title": "迁移 V2 流动性",
"migrate.v3Price": "V3 {{sym}} 价格:",
"mint.v3.input.invalidPrice.error": "输入的价格无效",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "给你的钱包起个名字",
"onboarding.notification.permission.message": "要接收通知,请在你设备的设置中开启 Uniswap 钱包通知。",
"onboarding.notification.permission.title": "通知权限",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "在转让、交换和批准完成时收到通知。",
+ "onboarding.notification.title": "开启推送通知",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "连接到钱包以查看你的流动性。",
"pool.liquidity.data.error.message": "获取交易所需的数据时出错了。",
"pool.liquidity.earn.fee": "流动性提供者在所有交易中赚取 0.3% 的费用,费用与其在资金池中的份额成比例。费用会添加到资金池中,实时累积,并可通过提取你的流动资金来申领。",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "资金池价格不同步",
+ "pool.liquidity.outOfSync.message": "此资金池中的价格与当前市场不同步。增加流动性可能会导致资金损失。",
"pool.liquidity.ownershipWarning.message": "你不是该 LP 头寸的所有者。除非你拥有以下地址,否则你将无法从该仓位提取流动性:{{ownerAddress}}",
"pool.liquidity.rewards": "流动性提供者奖励",
"pool.liquidity.taxWarning": "代币税",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "该资金池的价格在你选择的范围内。你的头寸目前正在赚取费用。",
"pool.rates": "费率",
"pool.ratioTokenToPrice": "你添加的代币比例将决定该资金池的价格。",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "移除流动性",
"pool.rewardsPool.label": "将代币存入奖励资金池:",
"pool.selectedRange": "选择的区间",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "Hook 是一项高级功能,使资金池能够与智能合约进行交互,从而解锁各种功能。添加 Hook 时要小心,因为有些 Hook 可能是恶意的或会导致意想不到的后果。",
"position.addingHook": "添加挂钩",
"position.addingHook.disclaimer": "添加挂钩可能会产生意外后果。请仔细研究,自行承担风险。",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "输入有效的挂钩地址",
"position.addingHook.viewProperties": "查看属性",
"position.appearHere": "你的头寸将出现在这里。",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "已存入 {{currencySymbol}}",
"position.hook.disclaimer": "我了解其中的风险。",
"position.hook.liquidityWarning": "此标记可能导致资金池阻止添加新的流动性。你的交易可能会被撤销。",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "此标记可能会导致你的资金被锁定或阻止你收取费用。",
"position.hook.swapWarning": "此标记可以让经验丰富的用户更容易利用即时流动性,但会降低赚取的费用。",
"position.hook.warningHeader": "检测到高风险挂钩",
"position.hook.warningInfo": "我们发现此挂钩可能存在风险。请检查标记并确认这是你要使用的挂钩,然后再继续。",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "批准并交换",
"swap.approveInWallet": "在钱包中批准",
"swap.balance.amount": "余额:{{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "最优价格路线的 Gas 费用约为 {{gasPrice}}。 ",
+ "swap.bestRoute.cost.v4": "最佳路径的 Gas 费约为 {{gasPrice}}。 ",
"swap.bridging.estimatedTime": "估计时间",
"swap.bridging.title": "正在跨网络交换",
"swap.bridging.warning.description": "你正在从 {{fromNetwork}} 交换到 {{toNetwork}}。这也被称为“桥接”,将你的代币从一个网络移动到另一个网络。",
@@ -1868,16 +1866,15 @@
"swap.review": "审查兑换",
"swap.review.summary": "你正在交换",
"swap.reviewLimit": "审核限额",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "该路径通过考虑分割路径、多跳和每一步的网络费用来优化总输出。",
"swap.settings.deadline.tooltip": "如果你的交易处于待处理状态超过该时间,则交易将被撤销。(最长时间:3 天)。",
"swap.settings.deadline.warning": "紧急截止日期",
"swap.settings.protection.description": "开启兑换保护后,你的以太坊交易将免受三明治攻击,从而降低失败的可能性。",
"swap.settings.protection.subtitle.supported": "{{chainName}} 网络",
"swap.settings.protection.subtitle.unavailable": "在 {{chainName}} 上不可用",
"swap.settings.protection.title": "兑换保护",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap 客户端根据价格和网络费用选择最便宜的交易选项。",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap 客户端根据价格和网络费用选择最佳交易选项。",
"swap.settings.routingPreference.option.v2.title": "v2 资金池",
"swap.settings.routingPreference.option.v3.title": "v3 资金池",
"swap.settings.routingPreference.option.v4.title": "v4 资金池",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "务必自行调查研究",
"token.safety.warning.blocked.description.default_one": "你无法使用 Uniswap 应用交易此代币。",
"token.safety.warning.blocked.description.default_other": "你无法使用 Uniswap 应用交易此代币。",
+ "token.safety.warning.blocked.description.named": "你无法使用 Uniswap 应用交易 {{tokenSymbol}}。",
"token.safety.warning.dontShowWarningAgain": "不要再向我显示此警告",
"token.safety.warning.doYourOwnResearch": "在继续之前务必自行调查研究。",
"token.safety.warning.feeDescription": "{{action}} 时收取 ",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} 可能不是你想要交换的代币。",
"token.safety.warning.malicious.title": "检测到恶意代币",
"token.safety.warning.mayResultInLoss": "交换它可能会导致资金损失。",
+ "token.safety.warning.medium.heading.default_one": "此代币并未在美国的主要中心化交易所交易。",
+ "token.safety.warning.medium.heading.default_other": "这些代币并未在美国的主要中心化交易所进行交易。",
+ "token.safety.warning.medium.heading.default_one_also": "此代币也没有在美国领先的中心化交易所进行交易。",
+ "token.safety.warning.medium.heading.default_other_also": "这些代币也没有在美国领先的中心化交易所进行交易。",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} 并未在美国的主要中心化交易所交易。",
"token.safety.warning.notListedOnExchanges": "未在美国主要交易所上市",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} 已被标记为不可出售。",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} 已被 Blockaid 标记为垃圾代币。",
"token.safety.warning.spam.title": "检测到垃圾代币",
"token.safety.warning.spamsUsers": "垃圾代币用户",
+ "token.safety.warning.strong.heading.default_one": "此代币并未在美国的主要中心化交易所交易,也不常在 Uniswap 上交换。",
+ "token.safety.warning.strong.heading.default_other": "这些代币并未在美国的主要中心化交易所交易,也不常在 Uniswap 上交换。",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} 并未在美国的主要中心化交易所交易,也不常在 Uniswap 上交换。",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} 买入时收取 {{buyFeePercent}} 费用,出售时收取 {{sellFeePercent}} 费用。",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} 买入时收取 {{feePercent}} 费用。",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} 出售时收取 {{feePercent}} 费用。",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} 在购买或出售时会收取费用。",
+ "token.safetyLevel.blocked.header": "不可用",
"token.safetyLevel.blocked.message": "你无法使用 Uniswap 钱包交易此代币。",
+ "token.safetyLevel.medium.header": "小心",
+ "token.safetyLevel.medium.message": "此代币并未在美国的主要中心化交易所交易。在继续之前务必自行调查研究。",
"token.safetyLevel.medium.message.plural": "这些代币并未在美国的主要中心化交易所进行交易。在继续之前务必自行调查研究。",
+ "token.safetyLevel.strong.header": "警告",
+ "token.safetyLevel.strong.message": "此代币并未在美国的主要中心化交易所交易,也不常在 Uniswap 上交换。在继续之前务必自行调查研究。",
"token.selector.search.error": "未能加载搜索结果",
"token.stats.fullyDilutedValuation": "完全摊薄估值",
"token.stats.marketCap": "市值",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}} 上的其他代币",
"tokens.selector.section.recent": "最近搜索",
"tokens.selector.section.search": "搜索结果",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "你的代币",
"tokens.table.search.placeholder.pools": "搜索资金池",
"tokens.table.search.placeholder.tokens": "搜索代币",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "网络代币余额不足",
"transaction.watcher.error.cancel": "无法取消交易",
"transaction.watcher.error.status": "检查交易状态时出错",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " 聚合流动资金来源以获得更好的价格和免 Gas 费交换。",
"uniswapx.description": "UniswapX 聚合流动资金来源以获得更好的价格和免 Gas 费交换。",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "包括 UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "了解有关使用 UniswapX 进行交换的更多信息",
diff --git a/packages/uniswap/src/i18n/locales/translations/zh-TW.json b/packages/uniswap/src/i18n/locales/translations/zh-TW.json
index 09eb34b9ccb..276151cecf5 100644
--- a/packages/uniswap/src/i18n/locales/translations/zh-TW.json
+++ b/packages/uniswap/src/i18n/locales/translations/zh-TW.json
@@ -176,6 +176,7 @@
"common.allTime": "全部時間",
"common.amount.label": "金額",
"common.amountDeposited.label": "已存入 {{amount}}",
+ "common.amountInput.placeholder": "輸入金額",
"common.and": "和",
"common.app": "App",
"common.approval.cancelled": "已取消核准",
@@ -312,7 +313,6 @@
"common.currency": "貨幣",
"common.currentPrice": "目前價格",
"common.currentPrice.label": "目前價格:",
- "common.currentPrice.unavailable": "Current price unavailable",
"common.custom": "自訂",
"common.customRange": "定制範圍",
"common.dataOutdated": "資料可能已過時",
@@ -374,6 +374,7 @@
"common.feesEarned.label": "{{symbol}} 已賺取的交易費用:",
"common.feesEarnedPerBase": "{{symbolA}} 每 {{symbolB}}",
"common.fetchingRoute": "正在取得路徑",
+ "common.flag": "標誌",
"common.floor": "地板價",
"common.floorPrice": "地板價",
"common.for": "為",
@@ -681,7 +682,6 @@
"common.wallet.approve": "在錢包中核准",
"common.wallet.label": "錢包",
"common.walletForSwapping": "專為交換而設計的錢包。適用於 iOS 和 Android。",
- "common.warning": "Warning",
"common.webApp": "網路 App",
"common.website": "網站",
"common.whyApprove": "為什麼我需要核准代幣?",
@@ -903,12 +903,10 @@
"fiatOnRamp.error.load": "無法載入要購買的代幣",
"fiatOnRamp.error.max": "最高 {{amount}}",
"fiatOnRamp.error.min": "最低 {{amount}}",
- "fiatOnRamp.error.noQuotes": "No quotes found.",
"fiatOnRamp.error.unavailable": "你所在的地區無法使用此服務",
"fiatOnRamp.error.unsupported": "非支援地區",
"fiatOnRamp.error.usd": "只能以美元購買",
"fiatOnRamp.exchangeRate": "{{outputAmount}} {{outputSymbol}} 換 {{inputAmount}} {{inputSymbol}}",
- "fiatOnRamp.noQuotes.error": "No quotes found",
"fiatOnRamp.purchasedOn": "購買於 {{serviceProvider}}",
"fiatOnRamp.quote.advice": "你將繼續前往提供者的入口網站查看交易相關費用。",
"fiatOnRamp.quote.type.list": "{{optionsList}},以及其他選項",
@@ -1063,7 +1061,7 @@
"migrate.lpNFT": "{{symA}}/{{symB}} LP NFT",
"migrate.lpTokens": "{{symA}}/{{symB}} LP 代幣",
"migrate.migrating": "正在遷移",
- "migrate.missingV2Position": "Don’t see one of your v2 positions? Import it.",
+ "migrate.missingV2Position": "沒看到其中一個 v2 部位?匯入它。",
"migrate.noV2Liquidity": "未發現 V2 流動資產。",
"migrate.positionNoFees": "在市價進入你設定的範圍之前,你的部位不會賺取費用或用於交易。",
"migrate.priceDifference": "價格差異: ",
@@ -1074,6 +1072,7 @@
"migrate.symbolPrice": "{{protocolName}} {{tokenSymbol}} 價格:",
"migrate.v2Description": "該工具將安全地將你的 {{source}} 流動資產遷移至 V3。由於 <0>Uniswap 遷移合約0> ↗,該流程完全無信任",
"migrate.v2Instruction": "對於下方顯示的各個資產池,按一下「遷移」以從 Uniswap V2 中移除你的流動資產,並將其存入 Uniswap V3。",
+ "migrate.v2Subtitle": "將你的流動資產代幣從 Uniswap V2 遷移至 Uniswap V3。",
"migrate.v2Title": "遷移 V2 流動資產",
"migrate.v3Price": "V3 {{sym}} 價格:",
"mint.v3.input.invalidPrice.error": "輸入的價格無效",
@@ -1303,8 +1302,8 @@
"onboarding.name.wallet.title": "為你的錢包取一個名字",
"onboarding.notification.permission.message": "若要接收通知,請在裝置設定中開啟 Uniswap 錢包的通知。",
"onboarding.notification.permission.title": "通知權限",
- "onboarding.notification.subtitle": "Stay updated on transaction statuses and major price changes for favorite tokens",
- "onboarding.notification.title": "Turn on notifications",
+ "onboarding.notification.subtitle": "接收轉移、交換和核准完成通知。",
+ "onboarding.notification.title": "開啟推播通知",
"onboarding.passkey.account.protection": "Your account is protected by your own secure password storage.",
"onboarding.passkey.biometric.scan": "Phone, tablet, or browser — just scan your biometrics and you’ll be logged in.",
"onboarding.passkey.create": "Create your passkey",
@@ -1405,8 +1404,8 @@
"pool.liquidity.connectToAdd": "連線至錢包以查看你的流動資產。",
"pool.liquidity.data.error.message": "獲取交易所需的資料時出錯。",
"pool.liquidity.earn.fee": "流動資產提供者在所有交易中賺取 0.3% 的交易費用,交易費用與其在資產池中的份額成比例。交易費用會新增到資產池中,並即時累計,並可以透過提取流動資產進行領取。",
- "pool.liquidity.outOfSync": "Pool and market price mismatch",
- "pool.liquidity.outOfSync.message": "The prices in this pool differ with the market prices of the selected tokens. Adjust your price range accordingly or wait for the pool to rebalance to avoid losses.",
+ "pool.liquidity.outOfSync": "資產池價格不同步",
+ "pool.liquidity.outOfSync.message": "該資產池中的價格與當前市場不同步。新增流動資產可能會導致資金損失。",
"pool.liquidity.ownershipWarning.message": "你不是該 LP 部位的擁有者。除非你擁有以下地址,否則你將無法從該部位提領流動資產:{{ownerAddress}}",
"pool.liquidity.rewards": "流動資產提供者獎勵",
"pool.liquidity.taxWarning": "代幣稅",
@@ -1445,7 +1444,6 @@
"pool.rangeBadge.tooltip.withinRange": "此資產池的價格在你選擇的範圍內。你的部位目前正在賺取交易費用。",
"pool.rates": "利率",
"pool.ratioTokenToPrice": "你新增的代幣比例將決定該資產池的價格。",
- "pool.refresh.prices": "Refresh prices",
"pool.removeLiquidity": "移除流動資產",
"pool.rewardsPool.label": "在獎勵資產池中匯集代幣:",
"pool.selectedRange": "選定範圍",
@@ -1484,7 +1482,6 @@
"position.addHook.tooltip": "掛鉤是一項進階功能,使資產池能夠與智慧型合約互動,進而解鎖各種功能。在新增掛鉤時請務必小心,因為有些掛鉤可能是惡意的或會導致意外後果。",
"position.addingHook": "新增掛鉤",
"position.addingHook.disclaimer": "新增掛鉤可能會有未預期的後果。請進行研究並自行承擔風險。",
- "position.addingHook.hideProperties": "Hide properties",
"position.addingHook.invalidAddress": "輸入有效的掛鉤地址",
"position.addingHook.viewProperties": "檢視屬性",
"position.appearHere": "你的部位將會出現在這裡。",
@@ -1496,7 +1493,7 @@
"position.depositedCurrency": "已存入 {{currencySymbol}}",
"position.hook.disclaimer": "我了解風險。",
"position.hook.liquidityWarning": "此標誌可能導致資產池阻止新增流動資產。你的交易可能會還原。",
- "position.hook.removeWarning": "May cause your funds to be locked or block you from collecting fees.",
+ "position.hook.removeWarning": "此標誌可能會導致你的資金被鎖定或阻止你收取交易費用。",
"position.hook.swapWarning": "此標誌可能使高級使用者更容易利用及時流動資產,從而導致賺取的交易費用變低。",
"position.hook.warningHeader": "偵測到高風險掛鉤",
"position.hook.warningInfo": "我們已識別出此掛鉤的潛在風險。在繼續之前,請檢視標誌並確認這是你想要使用的掛鉤。",
@@ -1786,7 +1783,8 @@
"swap.approveAndSwap": "核准並交換",
"swap.approveInWallet": "在你的錢包中核准",
"swap.balance.amount": "餘額:{{amount}}",
- "swap.bestRoute.cost": "Most efficient route is estimated to cost ~{{gasPrice}} in network costs. ",
+ "swap.bestRoute.cost": "最佳價格路徑的 Gas 費用約為 {{gasPrice}}。 ",
+ "swap.bestRoute.cost.v4": "最佳路徑的燃料費約為 {{gasPrice}}。 ",
"swap.bridging.estimatedTime": "預計時間",
"swap.bridging.title": "跨網路交換",
"swap.bridging.warning.description": "你正在從 {{fromNetwork}} 交換到 {{toNetwork}}。這也稱為「橋接」,它將你的代幣從一個網路移動到另一個網路。",
@@ -1868,16 +1866,15 @@
"swap.review": "審核交換",
"swap.review.summary": "你正在交換",
"swap.reviewLimit": "審核限制",
- "swap.route.optimizedGasCost": "This route considers split routes, multiple hops, and network costs of each step.",
+ "swap.route.optimizedGasCost": "該路徑透過考慮分割路徑、多跳以及每個步驟的網路費來讓總轉出達到最佳化。",
"swap.settings.deadline.tooltip": "如果你的交易處於待處理狀態超過該時間,則交易將會撤回。(最長時間:3 天)。",
"swap.settings.deadline.warning": "緊急截止日期",
"swap.settings.protection.description": "啟用交換保護後,你的乙太幣交易將免受三明治攻擊,並減少失敗的可能性。",
"swap.settings.protection.subtitle.supported": "{{chainName}} 網路",
"swap.settings.protection.subtitle.unavailable": "不適用於 {{chainName}}",
"swap.settings.protection.title": "交換保護",
- "swap.settings.routingPreference.option.default.description": "Selecting this option identifies the most efficient route for your swap.",
- "swap.settings.routingPreference.option.default.description.preV4": "The Uniswap client selects the cheapest trade option factoring in price and network costs.",
- "swap.settings.routingPreference.option.default.tooltip": "A route is identified considering v2, v3, and certain v4 pools, factoring in estimated price impact and network costs.",
+ "swap.settings.routingPreference.option.default.description": "Uniswap 用戶端根據價格和網路費來選擇最便宜的交易選項。",
+ "swap.settings.routingPreference.option.default.description.v4": "Uniswap 用戶端根據價格和網路費來選擇最佳交易選項。",
"swap.settings.routingPreference.option.v2.title": "v2 資產池",
"swap.settings.routingPreference.option.v3.title": "v3 資產池",
"swap.settings.routingPreference.option.v4.title": "v4 資產池",
@@ -2030,6 +2027,7 @@
"token.safety.warning.alwaysDoYourResearch": "盡責調查",
"token.safety.warning.blocked.description.default_one": "你無法使用 Uniswap 應用程式進行交易此代幣。",
"token.safety.warning.blocked.description.default_other": "你無法使用 Uniswap 應用程式進行交易這些代幣。",
+ "token.safety.warning.blocked.description.named": "你無法使用 Uniswap 應用程式進行交易 {{tokenSymbol}}。",
"token.safety.warning.dontShowWarningAgain": "不要再向我顯示此警告",
"token.safety.warning.doYourOwnResearch": "在繼續之前一定要先盡責調查。",
"token.safety.warning.feeDescription": "當{{action}}時收取 ",
@@ -2046,6 +2044,10 @@
"token.safety.warning.malicious.impersonator.message.short": "{{tokenSymbol}} 可能不是你想要交換的代幣。",
"token.safety.warning.malicious.title": "偵測到惡意代幣",
"token.safety.warning.mayResultInLoss": "交換它可能會導致資金損失。",
+ "token.safety.warning.medium.heading.default_one": "此代幣未在美國的主要中心化交易所上市。",
+ "token.safety.warning.medium.heading.default_other": "這些代幣不在美國領先的中心化交易所進行交易。",
+ "token.safety.warning.medium.heading.default_one_also": "該代幣也不在美國領先的中心化交易所進行交易。",
+ "token.safety.warning.medium.heading.default_other_also": "這些代幣也不在美國領先的中心化交易所進行交易。",
"token.safety.warning.medium.heading.named": "{{tokenSymbol}} 不在美國主要集中交易所進行交易。",
"token.safety.warning.notListedOnExchanges": "未在美國的主要交易所上市",
"token.safety.warning.sellFee100.message": "{{ tokenSymbol }} 已被標記為不可售。",
@@ -2053,12 +2055,20 @@
"token.safety.warning.spam.message": "{{tokenSymbol}} 已被 Blockaid 標記為垃圾代幣。",
"token.safety.warning.spam.title": "偵測到垃圾代幣",
"token.safety.warning.spamsUsers": "垃圾代幣使用者",
+ "token.safety.warning.strong.heading.default_one": "此代幣未在美國的主要中心化交易所上市,也未在 Uniswap 上經常交換。",
+ "token.safety.warning.strong.heading.default_other": "這些代幣未在美國的主要中心化交易所上市,也未在 Uniswap 上經常交換。",
+ "token.safety.warning.strong.heading.named": "{{tokenSymbol}} 未在美國的主要中心化交易所上市,也未在 Uniswap 上經常交換。",
"token.safety.warning.tokenChargesFee.both.message": "{{tokenSymbol}} 購買時收取 {{buyFeePercent}} 交易費用,出售時收取 {{sellFeePercent}}。",
"token.safety.warning.tokenChargesFee.buy.message": "{{tokenSymbol}} 購買時收取 {{feePercent}} 交易費用。",
"token.safety.warning.tokenChargesFee.sell.message": "{{tokenSymbol}} 出售時收取 {{feePercent}} 交易費用。",
"token.safety.warning.tokenChargesFee.unknownFee.message": "{{tokenSymbol}} 購買或出售時會收取交易費用。",
+ "token.safetyLevel.blocked.header": "無法使用",
"token.safetyLevel.blocked.message": "你無法使用 Uniswap 錢包進行交易此代幣。",
+ "token.safetyLevel.medium.header": "警告",
+ "token.safetyLevel.medium.message": "此代幣未在美國的主要中心化交易所上市。在繼續之前一定要先盡責調查。",
"token.safetyLevel.medium.message.plural": "這些代幣不在美國領先的中心化交易所進行交易。在繼續之前一定要先進行自己的研究。",
+ "token.safetyLevel.strong.header": "警告",
+ "token.safetyLevel.strong.message": "此代幣未在美國的主要中心化交易所上市,也未在 Uniswap 上經常交換。在繼續之前一定要先進行自己的研究。",
"token.selector.search.error": "無法載入搜尋結果",
"token.stats.fullyDilutedValuation": "完全稀釋估值",
"token.stats.marketCap": "市值",
@@ -2113,7 +2123,6 @@
"tokens.selector.section.otherSearchResults": "{{network}} 上的其他代幣",
"tokens.selector.section.recent": "最近的搜尋",
"tokens.selector.section.search": "搜尋結果",
- "tokens.selector.section.trending": "Tokens by 24H volume",
"tokens.selector.section.yours": "你的代幣",
"tokens.table.search.placeholder.pools": "搜尋資產池",
"tokens.table.search.placeholder.tokens": "搜尋代幣",
@@ -2233,17 +2242,9 @@
"transaction.warning.maxNative.title": "網路代幣餘額不足",
"transaction.watcher.error.cancel": "無法取消交易",
"transaction.watcher.error.status": "檢查交易狀態時發生錯誤",
- "unichain.promotion.cold.description": "Faster swaps. Lower fees. Unichain is the home for DeFi.",
- "unichain.promotion.cold.title": "Introducing Unichain",
- "unichain.promotion.modal.description": "Faster swaps. Lower fees. Unichain is the home for cross-chain liquidity.",
- "unichain.promotion.modal.detail.costs": "Lower costs for creating pools & managing positions.",
- "unichain.promotion.modal.detail.fees": "Save 95% on fees compared to Ethereum.",
- "unichain.promotion.modal.detail.instant": "Swap instantly",
- "unichain.promotion.warm.description": "Swap your favorite tokens faster and with lower gas costs.",
- "unichain.promotion.warm.title": "Start swapping on Unichain",
"uniswapX.aggregatesLiquidity": " 匯集流動資產來源,以獲得更優惠的價格以及免 Gas 費的交換。",
"uniswapx.description": "UniswapX 集結流動資產來源,以獲得更優惠的價格以及免 Gas 費的交換。",
- "uniswapx.included": "Includes UniswapX",
+ "uniswapx.included": "包括 UniswapX",
"uniswapx.item": "UniswapX",
"uniswapx.label": "UniswapX",
"uniswapX.learnMore": "了解有關使用 UniswapX 進行交換的更多資訊",
diff --git a/packages/uniswap/src/react-native-dotenv.d.ts b/packages/uniswap/src/react-native-dotenv.d.ts
index ebc9af31438..2dd3afe6138 100644
--- a/packages/uniswap/src/react-native-dotenv.d.ts
+++ b/packages/uniswap/src/react-native-dotenv.d.ts
@@ -16,7 +16,6 @@ declare module 'react-native-dotenv' {
export const WALLETCONNECT_PROJECT_ID: string
export const QUICKNODE_ENDPOINT_NAME: string
export const QUICKNODE_ENDPOINT_TOKEN: string
- export const QUICKNODE_MONAD_TESTNET_RPC_URL: string
export const TRADING_API_KEY: string
export const FIREBASE_APP_CHECK_DEBUG_TOKEN: string
export const AMPLITUDE_PROXY_URL_OVERRIDE: string
diff --git a/packages/uniswap/src/test/fixtures/testIDs.ts b/packages/uniswap/src/test/fixtures/testIDs.ts
index 8b663ee1d81..dba08ccf74a 100644
--- a/packages/uniswap/src/test/fixtures/testIDs.ts
+++ b/packages/uniswap/src/test/fixtures/testIDs.ts
@@ -19,18 +19,6 @@ export const TestID = {
Continue: 'continue',
Copy: 'copy',
CreateAccount: 'create-account',
- DecimalPadBackspace: 'decimal-pad-backspace',
- DecimalPadDecimal: 'decimal-pad-decimal',
- DecimalPadNumber0: 'decimal-pad-0',
- DecimalPadNumber1: 'decimal-pad-1',
- DecimalPadNumber2: 'decimal-pad-2',
- DecimalPadNumber3: 'decimal-pad-3',
- DecimalPadNumber4: 'decimal-pad-4',
- DecimalPadNumber5: 'decimal-pad-5',
- DecimalPadNumber6: 'decimal-pad-6',
- DecimalPadNumber7: 'decimal-pad-7',
- DecimalPadNumber8: 'decimal-pad-8',
- DecimalPadNumber9: 'decimal-pad-9',
Done: 'done',
Edit: 'edit',
ExploreSearchInput: 'explore-search-input',
diff --git a/packages/uniswap/src/types/screens/mobile.ts b/packages/uniswap/src/types/screens/mobile.ts
index 198a443f146..d2bafa46413 100644
--- a/packages/uniswap/src/types/screens/mobile.ts
+++ b/packages/uniswap/src/types/screens/mobile.ts
@@ -16,7 +16,6 @@ export enum MobileScreens {
SettingsCloudBackupProcessing = 'SettingsCloudBackupProcessing',
SettingsCloudBackupStatus = 'SettingsCloudBackupStatus',
SettingsLanguage = 'SettingsLanguage',
- SettingsNotifications = 'SettingsNotifications',
SettingsPrivacy = 'SettingsPrivacy',
SettingsWallet = 'SettingsWallet',
SettingsWalletEdit = 'SettingsWalletEdit',
diff --git a/packages/utilities/package.json b/packages/utilities/package.json
index f8127297486..a7d097be286 100644
--- a/packages/utilities/package.json
+++ b/packages/utilities/package.json
@@ -22,7 +22,7 @@
"@sentry/react": "7.80.0",
"@uniswap/analytics": "1.7.0",
"@uniswap/analytics-events": "2.40.0",
- "@uniswap/sdk-core": "7.1.0",
+ "@uniswap/sdk-core": "6.1.0",
"aws-appsync-auth-link": "3.0.7",
"aws-appsync-subscription-link": "3.1.3",
"dayjs": "1.11.7",
diff --git a/packages/utilities/src/environment/constants.ts b/packages/utilities/src/environment/constants.ts
index 542e37bb80e..11de47a93b4 100644
--- a/packages/utilities/src/environment/constants.ts
+++ b/packages/utilities/src/environment/constants.ts
@@ -1,6 +1,6 @@
import { isRNDev } from 'utilities/src/environment/env'
-export const isE2EMode = Boolean(process.env.E2E_MODE)
+export const isDetoxBuild = Boolean(process.env.DETOX_MODE)
export const isJestRun = !!process.env.JEST_WORKER_ID
export const isNonJestDev = isRNDev() && !isJestRun
/**
diff --git a/packages/utilities/src/logger/Datadog.native.ts b/packages/utilities/src/logger/Datadog.native.ts
index 82b47863cf3..359f8da2950 100644
--- a/packages/utilities/src/logger/Datadog.native.ts
+++ b/packages/utilities/src/logger/Datadog.native.ts
@@ -59,7 +59,10 @@ export function logWarningToDatadog(
functionName: string
},
): void {
- DdLogs.warn(message, options).catch(() => {})
+ DdLogs.warn(message, {
+ ...options,
+ reduxState,
+ }).catch(() => {})
}
export function logToDatadog(
@@ -74,7 +77,10 @@ export function logToDatadog(
functionName: string
},
): void {
- DdLogs.info(message, options).catch(() => {})
+ DdLogs.info(message, {
+ ...options,
+ reduxState,
+ }).catch(() => {})
}
/*
diff --git a/packages/utilities/src/logger/contextEnhancer.native.ts b/packages/utilities/src/logger/contextEnhancer.native.ts
index 78cc095e349..2d859e5832f 100644
--- a/packages/utilities/src/logger/contextEnhancer.native.ts
+++ b/packages/utilities/src/logger/contextEnhancer.native.ts
@@ -1,12 +1,11 @@
import { DdRum, RumActionType } from '@datadog/mobile-react-native'
-import { DDRumAction } from 'utilities/src/logger/datadogEvents'
export function logContextUpdate(contextName: string, newState: unknown, _isDatadogEnabled: boolean): void {
if (__DEV__) {
return
}
- DdRum.addAction(RumActionType.CUSTOM, DDRumAction.Context(contextName), {
+ DdRum.addAction(RumActionType.CUSTOM, `${contextName} Update`, {
newState,
}).catch(() => undefined)
}
diff --git a/packages/utilities/src/logger/datadogEvents.ts b/packages/utilities/src/logger/datadogEvents.ts
deleted file mode 100644
index 52769095f76..00000000000
--- a/packages/utilities/src/logger/datadogEvents.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Datadog RUM Action events
- *
- * DdRum.addAction(DDRumAction.ApplicationStartJs)
- */
-export const DDRumAction = {
- ApplicationStartJs: 'application_start_js',
- Context: (contextName: string): string => `${contextName} Update`,
- ManualTiming: 'manual_timing',
-}
-
-/**
- * Datadog RUM Timing events
- *
- * DdRum.addTiming(DDRumTiming.ScreenInteractive)
- */
-export const DDRumTiming = {
- ScreenInteractive: 'screen_interactive',
-}
-
-/**
- * Datadog RUM manual timing events that we manually created.
- *
- * DdRum.addAction(DDRumAction.ManualTiming, CustomTiming.TokenSelectorListRender, {
- * ...
- * })
- */
-export const DDRumManualTiming = {
- TokenSelectorListRender: 'token_selector_list_render',
- RenderExploreSections: 'render_explore_sections',
- RenderActivityTabList: 'render_activity_tab_list',
- RenderTokenBalanceList: 'render_token_balance_list',
-}
diff --git a/packages/utilities/src/logger/usePerformanceLogger.native.tsx b/packages/utilities/src/logger/usePerformanceLogger.native.tsx
deleted file mode 100644
index c5f36abca52..00000000000
--- a/packages/utilities/src/logger/usePerformanceLogger.native.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import { DdRum, RumActionType } from '@datadog/mobile-react-native'
-import { DependencyList, useEffect, useRef } from 'react'
-import { InteractionManager } from 'react-native'
-import { DDRumAction } from 'utilities/src/logger/datadogEvents'
-import { logger } from 'utilities/src/logger/logger'
-
-/**
- * Hook for measuring performance between renders on target dependencies.
- *
- * @param eventName - The name of the event to log.
- * @param dependencyList - The DependencyList that will start tracking the performance.
- *
- * Example:
- *
- * usePerformanceLogger('render_activity_tab_list', [userStateThatTriggersRender])
- *
- **/
-export function usePerformanceLogger(eventName: string, dependencyList: DependencyList): void {
- const isCurrentlyMeasuring = useRef(false)
-
- useEffect(() => {
- try {
- if (isCurrentlyMeasuring.current) {
- return
- }
-
- isCurrentlyMeasuring.current = true
- const start = performance.now()
-
- // It's been difficult to get named fields while also making this hook
- // take in a DependencyList. For now we just record the values as
- // an unnamed list in favor of keeping the DependencyList as is.
- const triggers = dependencyList.map((dep) => (typeof dep === 'string' ? dep.slice(0, 100) : dep))
-
- // wait for the next frame to ensure the state change that triggers a re-render has fired
- requestAnimationFrame(async () => {
- await InteractionManager.runAfterInteractions(async (): Promise => {
- const end = performance.now()
- const duration = end - start
- const eventObject = {
- duration,
- eventName,
- triggers,
- }
- await DdRum.addAction(RumActionType.CUSTOM, DDRumAction.ManualTiming, eventObject)
- isCurrentlyMeasuring.current = false
- })
- })
- } catch (error) {
- logger.error(error, {
- tags: { file: 'usePerformanceLogger.native.tsx', function: 'logPerformance' },
- })
- isCurrentlyMeasuring.current = false
- }
- // eventName is required and should never change so it's safe to ignore it
- // dependencyList is a DependencyList which is the object a useEffect hook takes
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, dependencyList)
-}
diff --git a/packages/utilities/src/logger/usePerformanceLogger.tsx b/packages/utilities/src/logger/usePerformanceLogger.tsx
deleted file mode 100644
index 95c961af696..00000000000
--- a/packages/utilities/src/logger/usePerformanceLogger.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import { DependencyList } from 'react'
-import { PlatformSplitStubError } from 'utilities/src/errors'
-
-export function usePerformanceLogger(_eventName: string, _dependencyList: DependencyList): void {
- throw new PlatformSplitStubError('usePerformanceLogger')
-}
diff --git a/packages/utilities/src/logger/usePerformanceLogger.web.tsx b/packages/utilities/src/logger/usePerformanceLogger.web.tsx
deleted file mode 100644
index 1a7984419e2..00000000000
--- a/packages/utilities/src/logger/usePerformanceLogger.web.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-import { DependencyList } from 'react'
-
-export function usePerformanceLogger(_eventName: string, _dependencyList: DependencyList): void {}
diff --git a/packages/utilities/src/primitives/string.test.ts b/packages/utilities/src/primitives/string.test.ts
index 22d97002359..e7fc35ab4e7 100644
--- a/packages/utilities/src/primitives/string.test.ts
+++ b/packages/utilities/src/primitives/string.test.ts
@@ -1,4 +1,10 @@
-import { concatStrings, escapeRegExp, normalizeTextInput, trimToLength } from 'utilities/src/primitives/string'
+import {
+ concatStrings,
+ escapeRegExp,
+ normalizeTextInput,
+ parseFloatWithThrow,
+ trimToLength,
+} from 'utilities/src/primitives/string'
describe(trimToLength, () => {
it('handles empty string', () => {
@@ -71,3 +77,37 @@ describe(concatStrings, () => {
expect(concatStrings(['1', '2', '3', '4'], 'and')).toEqual('1, 2, 3 and 4')
})
})
+
+describe(parseFloatWithThrow, () => {
+ it('should parse a valid number string', () => {
+ expect(parseFloatWithThrow('123.45')).toBe(123.45)
+ })
+
+ it('should parse a valid integer string', () => {
+ expect(parseFloatWithThrow('123')).toBe(123)
+ })
+
+ it('should parse a valid number with a trailing dot', () => {
+ expect(parseFloatWithThrow('123.')).toBe(123)
+ })
+
+ it('should parse a valid number string with leading and trailing spaces', () => {
+ expect(parseFloatWithThrow(' 123.45 ')).toBe(123.45)
+ })
+
+ it('should throw an error for an invalid number string', () => {
+ expect(() => parseFloatWithThrow('abc')).toThrow('String is not a number')
+ })
+
+ it('should throw an error for an empty string', () => {
+ expect(() => parseFloatWithThrow('')).toThrow('String is not a number')
+ })
+
+ it('should throw an error for a string with only spaces', () => {
+ expect(() => parseFloatWithThrow(' ')).toThrow('String is not a number')
+ })
+
+ it('should parse a valid number string with scientific notation', () => {
+ expect(parseFloatWithThrow('1.23e4')).toBe(12300)
+ })
+})
diff --git a/packages/utilities/src/primitives/string.ts b/packages/utilities/src/primitives/string.ts
index a3e994a395b..f7c4e38bb60 100644
--- a/packages/utilities/src/primitives/string.ts
+++ b/packages/utilities/src/primitives/string.ts
@@ -42,3 +42,20 @@ export function containsNonPrintableChars(msg: string): boolean {
return false
}
+
+/**
+ * Wraps parseFloat with a throw if the value is not a number.
+ *
+ * This will throw if an empty string is passed.
+ * @param value string to parse
+ * @returns parsed number
+ */
+export function parseFloatWithThrow(value: string): number {
+ const parsed = parseFloat(value)
+
+ if (Number.isNaN(parsed)) {
+ throw new Error('String is not a number')
+ }
+
+ return parsed
+}
diff --git a/packages/wallet/package.json b/packages/wallet/package.json
index c1f05a4b502..4d41e01d681 100644
--- a/packages/wallet/package.json
+++ b/packages/wallet/package.json
@@ -26,11 +26,11 @@
"@shopify/flash-list": "1.6.3",
"@uniswap/analytics-events": "2.40.0",
"@uniswap/permit2-sdk": "1.3.0",
- "@uniswap/router-sdk": "1.18.0",
- "@uniswap/sdk-core": "7.1.0",
+ "@uniswap/router-sdk": "1.15.0",
+ "@uniswap/sdk-core": "6.1.0",
"@uniswap/uniswapx-sdk": "3.0.0-beta.1",
- "@uniswap/universal-router-sdk": "4.10.0",
- "@uniswap/v3-sdk": "3.21.0",
+ "@uniswap/universal-router-sdk": "4.7.0",
+ "@uniswap/v3-sdk": "3.19.0",
"apollo3-cache-persist": "0.14.1",
"axios": "1.6.5",
"dayjs": "1.11.7",
@@ -49,7 +49,7 @@
"react-native-context-menu-view": "1.15.0",
"react-native-fast-image": "8.6.3",
"react-native-gesture-handler": "2.19.0",
- "react-native-image-picker": "7.2.3",
+ "react-native-image-picker": "7.0.1",
"react-native-localize": "2.2.6",
"react-native-reanimated": "3.15.0",
"react-native-restart": "0.0.27",
diff --git a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx
index 176347941d3..345a946abd5 100644
--- a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx
+++ b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.test.tsx
@@ -275,14 +275,14 @@ describe(DappLogoWithWCBadge, () => {
it('renders dapp icon placeholder if dappImageUrl is not provided', () => {
const { queryByTestId } = render()
- expect(queryByTestId('img-dapp-image')).toBeFalsy()
+ expect(queryByTestId('dapp-image')).toBeFalsy()
expect(queryByTestId('dapp-icon-placeholder')).toBeTruthy()
})
it('renders dapp image if dappImageUrl is provided', () => {
const { queryByTestId } = render()
- expect(queryByTestId('img-dapp-image')).toBeTruthy()
+ expect(queryByTestId('dapp-image')).toBeTruthy()
expect(queryByTestId('dapp-icon-placeholder')).toBeFalsy()
})
})
diff --git a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx
index 424e2241a34..cd5bbceb42f 100644
--- a/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx
+++ b/packages/wallet/src/components/CurrencyLogo/LogoWithTxStatus.tsx
@@ -2,7 +2,7 @@
import React, { useEffect } from 'react'
import { StyleSheet } from 'react-native'
import type { IconProps } from 'ui/src'
-import { Flex, UniversalImage, UniversalImageResizeMode, useSporeColors } from 'ui/src'
+import { Flex, useSporeColors } from 'ui/src'
import WalletConnectLogo from 'ui/src/assets/icons/walletconnect.svg'
import {
AlertTriangleFilled,
@@ -27,6 +27,7 @@ import { logger } from 'utilities/src/logger/logger'
import { DappIconPlaceholder } from 'wallet/src/components/WalletConnect/DappIconPlaceholder'
import { ImageUri } from 'wallet/src/features/images/ImageUri'
import { NFTViewer } from 'wallet/src/features/images/NFTViewer'
+import { RemoteImage } from 'wallet/src/features/images/RemoteImage'
interface LogoWithTxStatusBaseProps {
assetType: AssetType
@@ -247,19 +248,12 @@ export function DappLogoWithWCBadge({
const statusSize = dappImageSize * STATUS_RATIO
const totalSize = dappImageSize + statusSize * (1 / 4)
const dappImage = dappImageUrl ? (
-
) : (
diff --git a/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap b/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap
index 764b78317d2..7869d7fc434 100644
--- a/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap
+++ b/packages/wallet/src/components/CurrencyLogo/__snapshots__/LogoWithTxStatus.test.tsx.snap
@@ -86,28 +86,25 @@ exports[`DappLogoWithWCBadge renders without error 1`] = `
}
}
>
-
-
-
+ }
+ testID="dapp-image"
+ />
{GraphicElement}
diff --git a/packages/wallet/src/components/introCards/useSharedIntroCards.ts b/packages/wallet/src/components/introCards/useSharedIntroCards.ts
index ac2ff9d8287..461d1c5f9b6 100644
--- a/packages/wallet/src/components/introCards/useSharedIntroCards.ts
+++ b/packages/wallet/src/components/introCards/useSharedIntroCards.ts
@@ -1,23 +1,15 @@
import { useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
-import { BRIDGING_BANNER, UNICHAIN_BANNER_COLD, UNICHAIN_BANNER_WARM } from 'ui/src/assets'
+import { BRIDGING_BANNER } from 'ui/src/assets'
import { Person } from 'ui/src/components/icons'
-import { PollingInterval } from 'uniswap/src/constants/misc'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { selectHasViewedBridgingBanner } from 'uniswap/src/features/behaviorHistory/selectors'
-import {
- setHasDismissedUnichainColdBanner,
- setHasDismissedUnichainWarmBanner,
- setHasViewedBridgingBanner,
-} from 'uniswap/src/features/behaviorHistory/slice'
+import { setHasViewedBridgingBanner } from 'uniswap/src/features/behaviorHistory/slice'
import { useNumBridgingChains } from 'uniswap/src/features/bridging/hooks/chains'
-import { UniverseChainId } from 'uniswap/src/features/chains/types'
-import { usePortfolioTotalValue } from 'uniswap/src/features/dataApi/balances'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import { OnboardingCardLoggingName } from 'uniswap/src/features/telemetry/types'
-import { useUnichainBannerVisibility } from 'uniswap/src/features/unichain/hooks/useUnichainBannerVisibility'
import { UNITAG_SUFFIX_NO_LEADING_DOT } from 'uniswap/src/features/unitags/constants'
import { CurrencyField } from 'uniswap/src/types/currency'
import { CardType, IntroCardGraphicType, IntroCardProps } from 'wallet/src/components/introCards/IntroCard'
@@ -28,7 +20,7 @@ import { useUnitagClaimHandler } from 'wallet/src/features/unitags/useUnitagClai
import { useActiveAccountWithThrow } from 'wallet/src/features/wallet/hooks'
type SharedIntroCardsProps = {
- showUnichainModal: () => void
+ hasTokens: boolean
navigateToUnitagClaim: () => void
navigateToUnitagIntro: () => void
}
@@ -42,7 +34,7 @@ type SharedIntroCardReturn = {
export function useSharedIntroCards({
navigateToUnitagClaim,
navigateToUnitagIntro,
- showUnichainModal,
+ hasTokens,
}: SharedIntroCardsProps): SharedIntroCardReturn {
const { t } = useTranslation()
const dispatch = useDispatch()
@@ -50,13 +42,6 @@ export function useSharedIntroCards({
const isSignerAccount = activeAccount.type === AccountType.SignerMnemonic
const claimUnitagEnabled = useFeatureFlag(FeatureFlags.ExtensionClaimUnitag)
- const { data: totalValueData } = usePortfolioTotalValue({
- address: activeAccount.address,
- // Not needed often given usage, and will get updated from other sources
- pollInterval: PollingInterval.Slow,
- })
- const hasTokens = (totalValueData?.balanceUSD ?? 0) > 0
-
const hasSkippedUnitagPrompt = useSelector(selectHasSkippedUnitagPrompt)
const { canClaimUnitag } = useCanActiveAddressClaimUnitag()
const { handleClaim: handleUnitagClaim, handleDismiss: handleUnitagDismiss } = useUnitagClaimHandler({
@@ -86,6 +71,7 @@ export function useSharedIntroCards({
const bridgingCard = useMemo(() => {
return {
loggingName: OnboardingCardLoggingName.BridgingBanner,
+ isNew: true,
graphic: {
type: IntroCardGraphicType.Image as const,
image: BRIDGING_BANNER,
@@ -98,47 +84,6 @@ export function useSharedIntroCards({
}
}, [handleBridgingDismiss, numBridgingChains, t])
- const { shouldShowUnichainBannerCold, shouldShowUnichainBannerWarm } = useUnichainBannerVisibility()
-
- const unichainBannerCold = useMemo(() => {
- return {
- loggingName: OnboardingCardLoggingName.UnichainBannerCold,
- isNew: true,
- graphic: {
- type: IntroCardGraphicType.Image as const,
- image: UNICHAIN_BANNER_COLD,
- },
- title: t('unichain.promotion.cold.title'),
- description: t('unichain.promotion.cold.description'),
- cardType: CardType.Dismissible,
- onPress: showUnichainModal,
- onClose: (): void => {
- dispatch(setHasDismissedUnichainColdBanner(true))
- },
- }
- }, [dispatch, showUnichainModal, t])
-
- const unichainBannerWarm = useMemo(() => {
- return {
- loggingName: OnboardingCardLoggingName.UnichainBannerWarm,
- isNew: true,
- graphic: {
- type: IntroCardGraphicType.Image as const,
- image: UNICHAIN_BANNER_WARM,
- },
- title: t('unichain.promotion.warm.title'),
- description: t('unichain.promotion.warm.description'),
- cardType: CardType.Dismissible,
- onPress: (): void => {
- navigateToSwapFlow({ openTokenSelector: CurrencyField.OUTPUT, inputChainId: UniverseChainId.Unichain })
- dispatch(setHasDismissedUnichainWarmBanner(true))
- },
- onClose: (): void => {
- dispatch(setHasDismissedUnichainWarmBanner(true))
- },
- }
- }, [dispatch, navigateToSwapFlow, t])
-
return useMemo(() => {
const output: IntroCardProps[] = []
@@ -159,14 +104,6 @@ export function useSharedIntroCards({
})
}
- if (shouldShowUnichainBannerCold) {
- output.push(unichainBannerCold)
- }
-
- if (shouldShowUnichainBannerWarm) {
- output.push(unichainBannerWarm)
- }
-
if (shouldShowBridgingBanner) {
output.push(bridgingCard)
}
@@ -179,14 +116,10 @@ export function useSharedIntroCards({
}, [
shouldPromptUnitag,
claimUnitagEnabled,
- shouldShowUnichainBannerCold,
- shouldShowUnichainBannerWarm,
shouldShowBridgingBanner,
t,
handleUnitagClaim,
handleUnitagDismiss,
- unichainBannerCold,
- unichainBannerWarm,
bridgingCard,
])
}
diff --git a/packages/wallet/src/contexts/WalletNavigationContext.tsx b/packages/wallet/src/contexts/WalletNavigationContext.tsx
index ee9fa957527..35c40f263c8 100644
--- a/packages/wallet/src/contexts/WalletNavigationContext.tsx
+++ b/packages/wallet/src/contexts/WalletNavigationContext.tsx
@@ -1,6 +1,6 @@
import { createContext, ReactNode, useContext } from 'react'
-import { getNativeAddress } from 'uniswap/src/constants/addresses'
import { AssetType } from 'uniswap/src/entities/assets'
+import { DEFAULT_NATIVE_ADDRESS } from 'uniswap/src/features/chains/chainInfo'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { FiatOnRampCurrency } from 'uniswap/src/features/fiatOnRamp/types'
import { getSwapPrefilledState } from 'uniswap/src/features/transactions/swap/hooks/useSwapPrefilledState'
@@ -21,8 +21,6 @@ type NavigateToSwapFlowPartialState = {
type NavigateToSwapFlowWithActions = {
openTokenSelector: CurrencyField
- inputChainId?: UniverseChainId
- outputChainId?: UniverseChainId
}
type NavigateToSendFlowPartialState = {
@@ -69,18 +67,16 @@ export function getNavigateToSwapFlowArgsInitialState(
} else if (isNavigateToSwapFlowArgsPartialState(args)) {
return getSwapPrefilledState(args) as TransactionState
} else if (isNavigateToSwapFlowWithActions(args)) {
- const inputChainId = args.inputChainId ?? defaultChainId
return {
[CurrencyField.INPUT]: {
- address: getNativeAddress(inputChainId),
- chainId: inputChainId,
+ address: DEFAULT_NATIVE_ADDRESS,
+ chainId: defaultChainId,
type: AssetType.Currency,
},
[CurrencyField.OUTPUT]: null,
exactCurrencyField: CurrencyField.INPUT,
exactAmountToken: '',
selectingCurrencyField: CurrencyField.OUTPUT,
- selectingCurrencyChainId: args.outputChainId,
}
} else {
return undefined
diff --git a/packages/wallet/src/features/activity/hooks.ts b/packages/wallet/src/features/activity/hooks.ts
index 270ad7746ff..95d9cdd3bcb 100644
--- a/packages/wallet/src/features/activity/hooks.ts
+++ b/packages/wallet/src/features/activity/hooks.ts
@@ -1,11 +1,9 @@
-import { ApolloError, NetworkStatus, QueryHookOptions } from '@apollo/client'
+import { ApolloError, NetworkStatus } from '@apollo/client'
import isEqual from 'lodash/isEqual'
import { useCallback, useMemo, useRef } from 'react'
import { useSelector } from 'react-redux'
import { PollingInterval } from 'uniswap/src/constants/misc'
import {
- TransactionListQuery,
- TransactionListQueryVariables,
useFeedTransactionListQuery,
useTransactionListQuery,
} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
@@ -130,12 +128,11 @@ export function useFormattedTransactionDataForActivity({
address,
hideSpamTokens,
pageSize,
- ...queryOptions
}: {
address: Address
hideSpamTokens: boolean
pageSize?: number
-} & QueryHookOptions): {
+}): {
hasData: boolean
isLoading: boolean
isError: ApolloError | undefined
@@ -152,7 +149,6 @@ export function useFormattedTransactionDataForActivity({
data,
error: requestError,
} = useTransactionListQuery({
- ...queryOptions,
variables: { address, chains: gqlChains, pageSize },
notifyOnNetworkStatusChange: true,
// rely on TransactionHistoryUpdater for polling
diff --git a/packages/wallet/src/features/behaviorHistory/slice.ts b/packages/wallet/src/features/behaviorHistory/slice.ts
index a8c297c4710..362555fc900 100644
--- a/packages/wallet/src/features/behaviorHistory/slice.ts
+++ b/packages/wallet/src/features/behaviorHistory/slice.ts
@@ -26,7 +26,6 @@ export const initialBehaviorHistoryState: BehaviorHistoryState = {
hasViewedOffRampTooltip: false,
hasViewedDappRequestBridgingBanner: {},
}
-
const slice = createSlice({
name: 'behaviorHistory',
initialState: initialBehaviorHistoryState,
@@ -53,6 +52,7 @@ const slice = createSlice({
state.hasViewedDappRequestBridgingBanner ??= {}
state.hasViewedDappRequestBridgingBanner[action.payload.dappUrl] = action.payload.hasViewed
},
+
// Should only be used for testing
resetWalletBehaviorHistory: (_state, _action: PayloadAction) => {
return {
diff --git a/packages/wallet/src/features/dataApi/balances.test.ts b/packages/wallet/src/features/dataApi/balances.test.ts
index 0a6bbcbbdf4..0f5871e5ff7 100644
--- a/packages/wallet/src/features/dataApi/balances.test.ts
+++ b/packages/wallet/src/features/dataApi/balances.test.ts
@@ -6,7 +6,7 @@ import {
Chain,
PortfolioBalancesDocument,
} from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
-import { ALL_CHAIN_IDS, UniverseChainId } from 'uniswap/src/features/chains/types'
+import { ALL_CHAIN_IDS } from 'uniswap/src/features/chains/types'
import { filterChainIdsByFeatureFlag, getEnabledChains } from 'uniswap/src/features/chains/utils'
import {
sortPortfolioBalances,
@@ -373,7 +373,7 @@ describe(usePortfolioTotalValue, () => {
})
})
- it('returns undefined when no balances for the specified address are found', async () => {
+ it('retruns undefined when no balances for the specified address are found', async () => {
const { resolvers } = queryResolvers({
portfolios: () => [],
})
@@ -667,8 +667,7 @@ describe(usePortfolioCacheUpdater, () => {
const enabledChains = getEnabledChains({
isTestnetModeEnabled: false,
connectedWalletChainIds: ALL_CHAIN_IDS,
- // Doesn't include Unichain while feature flagged
- featureFlaggedChainIds: filterChainIdsByFeatureFlag({ [UniverseChainId.Unichain]: false }),
+ featureFlaggedChainIds: filterChainIdsByFeatureFlag({}),
})
cache.writeQuery({
diff --git a/packages/wallet/src/features/fiatOnRamp/api.ts b/packages/wallet/src/features/fiatOnRamp/api.ts
index be70ca317af..6369c3958a5 100644
--- a/packages/wallet/src/features/fiatOnRamp/api.ts
+++ b/packages/wallet/src/features/fiatOnRamp/api.ts
@@ -4,7 +4,6 @@ import { FOR_API_HEADERS } from 'uniswap/src/features/fiatOnRamp/constants'
import {
FORTransactionDetails,
FORTransactionResponse,
- OffRampTransferDetailsRequest,
OffRampTransferDetailsResponse,
} from 'uniswap/src/features/fiatOnRamp/types'
import { TransactionStatus, TransactionType } from 'uniswap/src/features/transactions/types/transactionDetails'
@@ -74,28 +73,12 @@ export async function fetchFORTransaction(
return extractFORTransactionDetails(transaction, isOffRamp, activeAccountAddress)
}
-export async function fetchOffRampTransferDetails(
- sessionId: string | null,
- baseCurrencyCode: string | null,
- baseCurrencyAmount: number | null,
- depositWalletAddress: string | null,
-): Promise {
- let requestParams: OffRampTransferDetailsRequest | undefined
-
- if (baseCurrencyCode && baseCurrencyAmount && depositWalletAddress) {
- requestParams = {
- moonpayDetails: {
- baseCurrencyCode,
- baseCurrencyAmount,
- depositWalletAddress,
- },
- }
- } else if (sessionId) {
- requestParams = {
- meldDetails: {
- sessionId,
- },
- }
+export async function fetchOffRampTransferDetails(sessionId: string): Promise {
+ // TODO: support moonpay once backend is ready
+ const requestParams = {
+ meldDetails: {
+ sessionId,
+ },
}
const res = await fetch(`${uniswapUrls.forApiUrl}/OffRampTransferDetails`, {
diff --git a/packages/wallet/src/features/nfts/useNftContextMenu.tsx b/packages/wallet/src/features/nfts/useNftContextMenu.tsx
index d8c91008669..99fa7aa67f7 100644
--- a/packages/wallet/src/features/nfts/useNftContextMenu.tsx
+++ b/packages/wallet/src/features/nfts/useNftContextMenu.tsx
@@ -3,11 +3,11 @@ import { useTranslation } from 'react-i18next'
import { NativeSyntheticEvent } from 'react-native'
import { ContextMenuAction, ContextMenuOnPressNativeEvent } from 'react-native-context-menu-view'
import { useDispatch, useSelector } from 'react-redux'
-import { GeneratedIcon, isWeb } from 'ui/src'
+import { GeneratedIcon, isWeb, useIsDarkMode } from 'ui/src'
import { Eye, EyeOff, Trash } from 'ui/src/components/icons'
+import { UNIVERSE_CHAIN_LOGO } from 'uniswap/src/assets/chainLogos'
import { reportNftSpamToSimpleHash } from 'uniswap/src/data/apiClients/simpleHashApi/SimpleHashApiClient'
import { AccountType } from 'uniswap/src/features/accounts/types'
-import { useBlockExplorerLogo } from 'uniswap/src/features/chains/logos'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { getChainLabel } from 'uniswap/src/features/chains/utils'
import { selectNftsVisibility } from 'uniswap/src/features/favorites/selectors'
@@ -50,6 +50,7 @@ export function useNFTContextMenu({
} {
const { t } = useTranslation()
const dispatch = useDispatch()
+ const isDarkMode = useIsDarkMode()
const isSelfReportSpamNFTEnabled = useFeatureFlag(FeatureFlags.SelfReportSpamNFTs)
const account = useActiveAccountWithThrow()
const isViewOnlyWallet = account.type === AccountType.Readonly
@@ -134,8 +135,6 @@ export function useNFTContextMenu({
}
}, [contractAddress, tokenId, chainId, navigateToNftDetails])
- const ExplorerLogo = useBlockExplorerLogo(chainId)
-
const menuActions = useMemo(
() =>
nftKey
@@ -145,7 +144,9 @@ export function useNFTContextMenu({
{
title: t('tokens.nfts.action.viewOnExplorer', { blockExplorerName: getExplorerName(chainId) }),
onPress: onPressNavigateToExplorer,
- Icon: ExplorerLogo,
+ Icon: isDarkMode
+ ? UNIVERSE_CHAIN_LOGO[chainId].explorer.logoDark
+ : UNIVERSE_CHAIN_LOGO[chainId].explorer.logoLight,
destructive: false,
},
]
@@ -197,14 +198,14 @@ export function useNFTContextMenu({
chainId,
t,
onPressNavigateToExplorer,
- ExplorerLogo,
+ isDarkMode,
onPressShare,
- isSelfReportSpamNFTEnabled,
- isViewOnlyWallet,
- onPressReport,
isLocalAccount,
+ isViewOnlyWallet,
hidden,
+ isSelfReportSpamNFTEnabled,
onPressHiddenStatus,
+ onPressReport,
],
)
diff --git a/packages/wallet/src/features/notifications/components/UnknownNotification.tsx b/packages/wallet/src/features/notifications/components/UnknownNotification.tsx
index be250d02707..87edae74873 100644
--- a/packages/wallet/src/features/notifications/components/UnknownNotification.tsx
+++ b/packages/wallet/src/features/notifications/components/UnknownNotification.tsx
@@ -16,7 +16,7 @@ export function UnknownTxNotification({
}: {
notification: TransactionNotificationBase
}): JSX.Element {
- const { name: ensName } = useENS({ nameOrAddress: tokenAddress, chainId })
+ const { name: ensName } = useENS(chainId, tokenAddress)
const currencyInfo = useCurrencyInfo(tokenAddress ? buildCurrencyId(chainId, tokenAddress) : undefined)
const title = formUnknownTxTitle(txStatus, tokenAddress, ensName)
const icon = currencyInfo ? (
diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx
index 32f433a10e9..b6e6afb7310 100644
--- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx
+++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/OffRampTransactionDetails.tsx
@@ -25,7 +25,7 @@ export function OffRampTransactionDetails({
const { amount, value } = useFormattedCurrencyAmountAndUSDValue({
currency: currencyInfo?.currency,
- currencyAmountRaw: typeInfo.sourceAmount?.toString(),
+ currencyAmountRaw: typeInfo.destinationTokenAmount?.toString(),
formatter,
isApproximateAmount: false,
valueType: ValueType.Exact,
diff --git a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx
index 8d8dbd3ff85..466fa479e92 100644
--- a/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx
+++ b/packages/wallet/src/features/transactions/SummaryCards/DetailsModal/TransactionDetailsInfoRows.tsx
@@ -1,6 +1,5 @@
/* eslint-disable complexity */
import { useTranslation } from 'react-i18next'
-import { useDispatch } from 'react-redux'
import {
Flex,
Loader,
@@ -11,12 +10,10 @@ import {
UniversalImageResizeMode,
useIsDarkMode,
} from 'ui/src'
-import { CopyAlt, ExternalLink, UniswapX } from 'ui/src/components/icons'
+import { ExternalLink, UniswapX } from 'ui/src/components/icons'
import { borderRadii, fonts, iconSizes } from 'ui/src/theme'
import { NetworkLogo } from 'uniswap/src/components/CurrencyLogo/NetworkLogo'
import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
-import { pushNotification } from 'uniswap/src/features/notifications/slice'
-import { AppNotificationType, CopyNotificationType } from 'uniswap/src/features/notifications/types'
import { ValueType, getCurrencyAmount } from 'uniswap/src/features/tokens/getCurrencyAmount'
import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo'
import { isUniswapX } from 'uniswap/src/features/transactions/swap/utils/routing'
@@ -28,7 +25,6 @@ import {
TransactionDetails,
TransactionType,
} from 'uniswap/src/features/transactions/types/transactionDetails'
-import { setClipboard } from 'uniswap/src/utils/clipboard'
import { ExplorerDataType, getExplorerLink, openUri } from 'uniswap/src/utils/linking'
import { shortenAddress } from 'utilities/src/addresses'
import { NumberType } from 'utilities/src/format/types'
@@ -118,7 +114,6 @@ export function useTransactionDetailsInfoRows(
specificRows.push()
break
case TransactionType.OffRampSale:
- specificRows.push()
specificRows.push(
@@ -126,7 +121,7 @@ export function useTransactionDetailsInfoRows(
,
)
- specificRows.push()
+ specificRows.push()
break
case TransactionType.Bridge:
if (isShowingMore) {
@@ -174,21 +169,22 @@ export function useTransactionDetailsInfoRows(
/>,
)
}
- const address = typeInfo.dappInfo?.address
- if (address) {
- specificRows.push(
-
- {shortenAddress(address)}
- => {
- await openUri(getExplorerLink(transactionDetails.chainId, address, ExplorerDataType.ADDRESS))
- }}
- >
-
-
- ,
- )
- }
+ specificRows.push(
+
+ {shortenAddress(typeInfo.dappInfo.address)}
+ => {
+ if (typeInfo.dappInfo?.address) {
+ await openUri(
+ getExplorerLink(transactionDetails.chainId, typeInfo.dappInfo.address, ExplorerDataType.ADDRESS),
+ )
+ }
+ }}
+ >
+
+
+ ,
+ )
}
break
default:
@@ -243,38 +239,6 @@ function TransactionHashRow({ transactionDetails }: { transactionDetails: Transa
)
}
-function TransactionOfframpRow({ transactionId }: { transactionId?: string }): JSX.Element | null {
- const dispatch = useDispatch()
- const { t } = useTranslation()
-
- if (!transactionId) {
- return null
- }
-
- return (
-
- => {
- await setClipboard(transactionId)
- dispatch(
- pushNotification({
- type: AppNotificationType.Copied,
- copyType: CopyNotificationType.TransactionId,
- }),
- )
- }}
- >
- {shortenHash(transactionId)}
-
-
-
- )
-}
-
function DappInfoRow({ label, name, iconUrl }: { label: string; name: string; iconUrl?: string | null }): JSX.Element {
return (
diff --git a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx
index 40e7985ca27..c1a6221f9e2 100644
--- a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx
+++ b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransactionActionsModal.tsx
@@ -155,9 +155,8 @@ export function getTransactionId(transactionDetails: TransactionDetails): string
switch (transactionDetails.typeInfo.type) {
case TransactionType.OnRampPurchase:
case TransactionType.OnRampTransfer:
- return transactionDetails.typeInfo.id
case TransactionType.OffRampSale:
- return transactionDetails.typeInfo.providerTransactionId
+ return transactionDetails.typeInfo.id
default:
return transactionDetails.hash
}
diff --git a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransferTokenSummaryItem.tsx b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransferTokenSummaryItem.tsx
index 14d693baa63..3c4d88cc067 100644
--- a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransferTokenSummaryItem.tsx
+++ b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/TransferTokenSummaryItem.tsx
@@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next'
import { ElementAfterText } from 'ui/src'
import { Unitag } from 'ui/src/components/icons'
import { AssetType } from 'uniswap/src/entities/assets'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useENS } from 'uniswap/src/features/ens/useENS'
import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo'
@@ -82,7 +83,7 @@ export function TransferTokenSummaryItem({
])
// Search for matching ENS
- const { name: ensName } = useENS({ nameOrAddress: otherAddress, autocompleteDomain: true })
+ const { name: ensName } = useENS(UniverseChainId.Mainnet, otherAddress, true)
const { unitag } = useUnitagByAddress(otherAddress)
const personDisplayName = unitag?.username ?? ensName ?? shortenAddress(otherAddress)
diff --git a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/UnknownSummaryItem.tsx b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/UnknownSummaryItem.tsx
index 5f7f2740b73..f1fe78a1cf3 100644
--- a/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/UnknownSummaryItem.tsx
+++ b/packages/wallet/src/features/transactions/SummaryCards/SummaryItems/UnknownSummaryItem.tsx
@@ -18,16 +18,10 @@ export function UnknownSummaryItem({
const colors = useSporeColors()
const caption = useMemo(() => {
- if (transaction.typeInfo.dappInfo?.name) {
- return transaction.typeInfo.dappInfo.name
- }
-
- if (transaction.typeInfo.tokenAddress && getValidAddress(transaction.typeInfo.tokenAddress)) {
- return shortenAddress(transaction.typeInfo.tokenAddress)
- }
-
- return ''
- }, [transaction.typeInfo.tokenAddress, transaction.typeInfo.dappInfo?.name])
+ return transaction.typeInfo.tokenAddress && getValidAddress(transaction.typeInfo.tokenAddress)
+ ? shortenAddress(transaction.typeInfo.tokenAddress)
+ : ''
+ }, [transaction.typeInfo.tokenAddress])
const icon = useMemo(
() =>
diff --git a/packages/wallet/src/features/transactions/contexts/SendContext.tsx b/packages/wallet/src/features/transactions/contexts/SendContext.tsx
index 5d0907e8beb..9b392ad2aa9 100644
--- a/packages/wallet/src/features/transactions/contexts/SendContext.tsx
+++ b/packages/wallet/src/features/transactions/contexts/SendContext.tsx
@@ -16,6 +16,8 @@ import { TransactionType } from 'uniswap/src/features/transactions/types/transac
import { TransactionState } from 'uniswap/src/features/transactions/types/transactionState'
import { CurrencyField } from 'uniswap/src/types/currency'
import { currencyAddress } from 'uniswap/src/utils/currencyId'
+import { logger } from 'utilities/src/logger/logger'
+import { parseFloatWithThrow } from 'utilities/src/primitives/string'
import { useDerivedSendInfo } from 'wallet/src/features/transactions/send/hooks/useDerivedSendInfo'
import { useSendTransactionRequest } from 'wallet/src/features/transactions/send/hooks/useSendTransactionRequest'
import { useSendWarnings } from 'wallet/src/features/transactions/send/hooks/useSendWarnings'
@@ -79,15 +81,25 @@ export function SendContextProvider({
const isAmountSet = (newState.isFiatInput ? newState.exactAmountFiat : newState.exactAmountToken) !== undefined
if (isAmountSet) {
- // for explicit "max" actions (eg max button clicked)
- const isExplicitMax = !!newState.isMax
-
- const isMaxTokenAmount =
- maxInputAmount && newState.exactAmountToken
- ? parseFloat(maxInputAmount) <= parseFloat(newState.exactAmountToken)
- : isExplicitMax
-
- newState.isMax = isMaxTokenAmount
+ try {
+ // for explicit "max" actions (eg max button clicked)
+ const isExplicitMax = !!newState.isMax
+
+ const isMaxTokenAmount =
+ maxInputAmount && newState.exactAmountToken
+ ? parseFloatWithThrow(maxInputAmount) <= parseFloatWithThrow(newState.exactAmountToken)
+ : isExplicitMax
+
+ newState.isMax = isMaxTokenAmount
+ } catch (error) {
+ logger.error(error, {
+ tags: { file: 'SendContext.tsx', function: 'updateSendForm' },
+ extra: {
+ maxInputAmount,
+ exactAmountToken: newState.exactAmountToken,
+ },
+ })
+ }
}
setSendForm((prevState) => ({ ...prevState, ...newState }))
diff --git a/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts b/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts
index d7583c41ee9..88bb1151765 100644
--- a/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts
+++ b/packages/wallet/src/features/transactions/history/conversion/extractFiatOnRampTransactionDetails.ts
@@ -40,7 +40,6 @@ function parseFORTransaction(
networkFee: transaction.cryptoDetails.networkFee,
transactionFee: transaction.cryptoDetails.transactionFee,
totalFee: transaction.cryptoDetails.totalFee,
- providerTransactionId: transaction.id,
}
const typeInfo: OnRampPurchaseInfo | OnRampTransferInfo | OffRampSaleInfo =
diff --git a/packages/wallet/src/features/transactions/transactionWatcherSaga.ts b/packages/wallet/src/features/transactions/transactionWatcherSaga.ts
index dcfdaabc052..44690bd337e 100644
--- a/packages/wallet/src/features/transactions/transactionWatcherSaga.ts
+++ b/packages/wallet/src/features/transactions/transactionWatcherSaga.ts
@@ -362,11 +362,15 @@ function* waitForRemoteUpdate(transaction: TransactionDetails, provider: provide
switch (flashbotsReceipt.status) {
case 'FAILED':
- logger.warn(
- 'transactionWatcherSaga',
- 'waitForRemoteUpdate',
- `Flashbots Protect transaction failed with simulation error: ${flashbotsReceipt.simError}`,
- { transaction, flashbotsReceipt },
+ logger.error(
+ new Error(`Flashbots Protect transaction failed with simulation error: ${flashbotsReceipt.simError}`),
+ {
+ tags: {
+ file: 'transactionWatcherSaga',
+ function: 'waitForRemoteUpdate',
+ },
+ extra: { transaction, flashbotsReceipt },
+ },
)
return { ...transaction, status: TransactionStatus.Failed }
case 'CANCELLED':
diff --git a/packages/wallet/src/features/unitags/EditUnitagProfileContent.tsx b/packages/wallet/src/features/unitags/EditUnitagProfileContent.tsx
index ce4001899dd..4f9969e3792 100644
--- a/packages/wallet/src/features/unitags/EditUnitagProfileContent.tsx
+++ b/packages/wallet/src/features/unitags/EditUnitagProfileContent.tsx
@@ -16,6 +16,7 @@ import {
import { Pen } from 'ui/src/components/icons'
import { borderRadii, fonts, iconSizes, imageSizes, spacing } from 'ui/src/theme'
import { TextInput } from 'uniswap/src/components/input/TextInput'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useENS } from 'uniswap/src/features/ens/useENS'
import { pushNotification } from 'uniswap/src/features/notifications/slice'
import { AppNotificationType } from 'uniswap/src/features/notifications/types'
@@ -120,7 +121,7 @@ export function EditUnitagProfileContent({
}
const isDarkMode = useIsDarkMode()
- const { name: ensName } = useENS({ nameOrAddress: address, autocompleteDomain: true })
+ const { name: ensName } = useENS(UniverseChainId.Mainnet, address)
const onSetTwitterInput = (input: string): void => {
const normalizedInput = normalizeTwitterUsername(input)
setTwitterInput(normalizedInput)
diff --git a/packages/wallet/src/features/unitags/UnitagChooseProfilePicContent.tsx b/packages/wallet/src/features/unitags/UnitagChooseProfilePicContent.tsx
index 3f019de2121..486fc0efc8c 100644
--- a/packages/wallet/src/features/unitags/UnitagChooseProfilePicContent.tsx
+++ b/packages/wallet/src/features/unitags/UnitagChooseProfilePicContent.tsx
@@ -4,6 +4,7 @@ import { ActivityIndicator } from 'react-native'
import { DeprecatedButton, Flex, Text, TouchableArea, useIsDarkMode, useSporeColors } from 'ui/src'
import { Pen } from 'ui/src/components/icons'
import { fonts, iconSizes, imageSizes, spacing } from 'ui/src/theme'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useENSName } from 'uniswap/src/features/ens/api'
import { UnitagClaimSource } from 'uniswap/src/features/unitags/types'
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
@@ -50,7 +51,7 @@ export function UnitagChooseProfilePicContent({
}): JSX.Element {
const { t } = useTranslation()
const colors = useSporeColors()
- const { data: ensName } = useENSName(address)
+ const { data: ensName } = useENSName(address, UniverseChainId.Mainnet)
const claimUnitag = useClaimUnitag()
const isDarkMode = useIsDarkMode()
diff --git a/packages/wallet/src/features/unitags/hooks.ts b/packages/wallet/src/features/unitags/hooks.ts
index 3c0fc175701..e5ffad136ce 100644
--- a/packages/wallet/src/features/unitags/hooks.ts
+++ b/packages/wallet/src/features/unitags/hooks.ts
@@ -5,6 +5,7 @@ import { useDispatch } from 'react-redux'
import { useUnitagsAddressesQuery } from 'uniswap/src/data/apiClients/unitagsApi/useUnitagsAddressQuery'
import { useUnitagsClaimEligibilityQuery } from 'uniswap/src/data/apiClients/unitagsApi/useUnitagsClaimEligibilityQuery'
import { useUnitagsUsernameQuery } from 'uniswap/src/data/apiClients/unitagsApi/useUnitagsUsernameQuery'
+import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useENS } from 'uniswap/src/features/ens/useENS'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
@@ -142,7 +143,7 @@ export const useCanClaimUnitagName = (unitag: string | undefined): { error: stri
params: unitagToSearch ? { username: unitagToSearch } : undefined,
staleTime: 2 * ONE_MINUTE_MS,
})
- const { loading: ensLoading } = useENS({ nameOrAddress: unitagToSearch, autocompleteDomain: true })
+ const { loading: ensLoading } = useENS(UniverseChainId.Mainnet, unitagToSearch, true)
const loading = unitagLoading || ensLoading
// Check for availability
diff --git a/packages/wallet/src/features/wallet/accounts/types.ts b/packages/wallet/src/features/wallet/accounts/types.ts
index e6e2ea22804..4d79ee0d3af 100644
--- a/packages/wallet/src/features/wallet/accounts/types.ts
+++ b/packages/wallet/src/features/wallet/accounts/types.ts
@@ -15,7 +15,6 @@ export interface WalletAccountFields {
backups?: BackupType[]
timeImportedMs: number
pushNotificationsEnabled?: boolean
- hasBalanceOrActivity?: boolean
}
export interface SignerMnemonicAccount extends WalletAccountFields, SignerMnemonicAccountMeta {
diff --git a/packages/wallet/src/features/wallet/hooks.ts b/packages/wallet/src/features/wallet/hooks.ts
index 105e92a029c..76110f02175 100644
--- a/packages/wallet/src/features/wallet/hooks.ts
+++ b/packages/wallet/src/features/wallet/hooks.ts
@@ -30,29 +30,6 @@ export function useAccounts(): Record {
return useSelector(selectAccounts)
}
-/**
- * Hook used to get a list of all accounts
- * @returns list of accounts, with signer accounts first sorted by derivation index then view only accounts sorted by time imported
- */
-export function useAccountsList(): Account[] {
- const addressToAccount = useAccounts()
-
- return useMemo(() => {
- const accounts = Object.values(addressToAccount)
- const _mnemonicWallets = accounts
- .filter((a): a is SignerMnemonicAccount => a.type === AccountType.SignerMnemonic)
- .sort((a, b) => {
- return a.derivationIndex - b.derivationIndex
- })
- const _viewOnlyWallets = accounts
- .filter((a) => a.type === AccountType.Readonly)
- .sort((a, b) => {
- return a.timeImportedMs - b.timeImportedMs
- })
- return [..._mnemonicWallets, ..._viewOnlyWallets]
- }, [addressToAccount])
-}
-
export function useAccount(address: Address): Account {
const account = useSelector(selectAccounts)[address]
if (!account) {
diff --git a/packages/wallet/src/features/wallet/selectors.ts b/packages/wallet/src/features/wallet/selectors.ts
index 54b1a2df70c..7e2fc0c5bc6 100644
--- a/packages/wallet/src/features/wallet/selectors.ts
+++ b/packages/wallet/src/features/wallet/selectors.ts
@@ -1,9 +1,8 @@
import { createSelector, Selector } from '@reduxjs/toolkit'
-import { RankingType } from 'uniswap/src/data/types'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { Account, ReadOnlyAccount, SignerMnemonicAccount } from 'wallet/src/features/wallet/accounts/types'
import { SwapProtectionSetting } from 'wallet/src/features/wallet/slice'
-import { ExploreOrderBy } from 'wallet/src/features/wallet/types'
+import { ExploreOrderBy, RankingType } from 'wallet/src/features/wallet/types'
import { WalletState } from 'wallet/src/state/walletReducer'
const DEFAULT_TOKENS_ORDER_BY = RankingType.Volume
@@ -76,6 +75,3 @@ export const appRatingProvidedMsSelector = (state: WalletState): number | undefi
export const appRatingPromptedMsSelector = (state: WalletState): number | undefined => state.wallet.appRatingPromptedMs
export const appRatingFeedbackProvidedMsSelector = (state: WalletState): number | undefined =>
state.wallet.appRatingFeedbackProvidedMs
-
-export const selectHasBalanceOrActivityForAddress = (state: WalletState, address: Address): boolean =>
- state.wallet.accounts[address]?.hasBalanceOrActivity ?? false
diff --git a/packages/wallet/src/features/wallet/slice.ts b/packages/wallet/src/features/wallet/slice.ts
index 94fcf183dd3..f19b0e48032 100644
--- a/packages/wallet/src/features/wallet/slice.ts
+++ b/packages/wallet/src/features/wallet/slice.ts
@@ -1,8 +1,7 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
-import { RankingType } from 'uniswap/src/data/types'
import { areAddressesEqual, getValidAddress } from 'uniswap/src/utils/addresses'
import { Account } from 'wallet/src/features/wallet/accounts/types'
-import { ExploreOrderBy } from 'wallet/src/features/wallet/types'
+import { ExploreOrderBy, RankingType } from 'wallet/src/features/wallet/types'
export enum SwapProtectionSetting {
On = 'on',
@@ -135,13 +134,6 @@ const slice = createSlice({
},
resetWallet: () => initialWalletState,
restoreMnemonicComplete: (state) => state,
- setHasBalanceOrActivity: (state, action: PayloadAction<{ address: Address; hasBalanceOrActivity: boolean }>) => {
- const { address, hasBalanceOrActivity } = action.payload
- const account = state.accounts[address]
- if (account) {
- account.hasBalanceOrActivity = hasBalanceOrActivity
- }
- },
},
})
@@ -157,7 +149,6 @@ export const {
restoreMnemonicComplete,
setSwapProtectionSetting,
setAppRating,
- setHasBalanceOrActivity,
} = slice.actions
export const walletReducer = slice.reducer
diff --git a/packages/wallet/src/features/wallet/types.ts b/packages/wallet/src/features/wallet/types.ts
index 3d51b0b16f2..d3ff8b28010 100644
--- a/packages/wallet/src/features/wallet/types.ts
+++ b/packages/wallet/src/features/wallet/types.ts
@@ -1,10 +1,25 @@
-import { CustomRankingType, RankingType } from 'uniswap/src/data/types'
-
export enum NFTViewType {
Grid,
Collection,
}
+/**
+ * These types are not currently included in the protbufs generated types. For now will specifiy here
+ * and remove when added to protobuf.
+ * https://github.com/Uniswap/backend/blob/397033c6c63703f2dddfd5ae4bb95c54ecd0c23b/packages/services/explore/src/model/types.ts#L19-L30
+ */
+export enum RankingType {
+ TotalValueLocked = 'TOTAL_VALUE_LOCKED',
+ MarketCap = 'MARKET_CAP',
+ Volume = 'VOLUME',
+ Popularity = 'POPULARITY',
+}
+
+export enum CustomRankingType {
+ PricePercentChange1DayAsc = 'PRICE_PERCENT_CHANGE_1_DAY_ASC',
+ PricePercentChange1DayDesc = 'PRICE_PERCENT_CHANGE_1_DAY_DESC',
+}
+
export type ExploreOrderBy = RankingType | CustomRankingType
export enum TokenMetadataDisplayType {
diff --git a/packages/wallet/src/state/walletMigrations.ts b/packages/wallet/src/state/walletMigrations.ts
index 2ab55ebf58b..a9257886bcf 100644
--- a/packages/wallet/src/state/walletMigrations.ts
+++ b/packages/wallet/src/state/walletMigrations.ts
@@ -1,7 +1,6 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-explicit-any */
-import { RankingType } from 'uniswap/src/data/types'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { FiatCurrency } from 'uniswap/src/features/fiatCurrency/constants'
import { Language } from 'uniswap/src/features/language/constants'
@@ -10,6 +9,7 @@ import { CurrencyId } from 'uniswap/src/types/currency'
import { areAddressesEqual } from 'uniswap/src/utils/addresses'
import { currencyIdToAddress, currencyIdToChain } from 'uniswap/src/utils/currencyId'
import { Account } from 'wallet/src/features/wallet/accounts/types'
+import { RankingType } from 'wallet/src/features/wallet/types'
// Mobile: 63
// Extension: 0
diff --git a/packages/wallet/src/state/walletMigrationsTests.ts b/packages/wallet/src/state/walletMigrationsTests.ts
index 18a40b58125..5eb4ef50c3f 100644
--- a/packages/wallet/src/state/walletMigrationsTests.ts
+++ b/packages/wallet/src/state/walletMigrationsTests.ts
@@ -1,13 +1,13 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable max-lines */
import { USDC } from 'uniswap/src/constants/tokens'
-import { RankingType } from 'uniswap/src/data/types'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { FiatCurrency } from 'uniswap/src/features/fiatCurrency/constants'
import { Language } from 'uniswap/src/features/language/constants'
import { buildCurrencyId } from 'uniswap/src/utils/currencyId'
import { Account } from 'wallet/src/features/wallet/accounts/types'
+import { RankingType } from 'wallet/src/features/wallet/types'
export function testActivatePendingAccounts(migration: (state: any) => any, prevSchema: any): void {
// all accounts active
diff --git a/yarn.lock b/yarn.lock
index 955bd9c5a14..df46bcebd6e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -82,7 +82,14 @@ __metadata:
languageName: node
linkType: hard
-"@adraffy/ens-normalize@npm:^1.10.1":
+"@adraffy/ens-normalize@npm:1.10.0":
+ version: 1.10.0
+ resolution: "@adraffy/ens-normalize@npm:1.10.0"
+ checksum: af0540f963a2632da2bbc37e36ea6593dcfc607b937857133791781e246d47f870d5e3d21fa70d5cfe94e772c284588c81ea3f5b7f4ea8fbb824369444e4dbcb
+ languageName: node
+ linkType: hard
+
+"@adraffy/ens-normalize@npm:1.11.0":
version: 1.11.0
resolution: "@adraffy/ens-normalize@npm:1.11.0"
checksum: b2911269e3e0ec6396a2e5433a99e0e1f9726befc6c167994448cd0e53dbdd0be22b4835b4f619558b568ed9aa7312426b8fa6557a13999463489daa88169ee5
@@ -6362,6 +6369,13 @@ __metadata:
languageName: node
linkType: hard
+"@flatten-js/interval-tree@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "@flatten-js/interval-tree@npm:1.1.2"
+ checksum: c83bad7a21c19ead42d31380b2886123c62f055fb83d3a9cfc72736bf689eb109ab18f99916941727c14f46ee50b196a0ce1ba9251d6e09e053ec35f184c834b
+ languageName: node
+ linkType: hard
+
"@floating-ui/core@npm:^1.0.0, @floating-ui/core@npm:^1.6.0":
version: 1.6.4
resolution: "@floating-ui/core@npm:1.6.4"
@@ -8335,7 +8349,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15":
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15":
version: 1.4.15
resolution: "@jridgewell/sourcemap-codec@npm:1.4.15"
checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8
@@ -8597,9 +8611,9 @@ __metadata:
linkType: hard
"@metamask/safe-event-emitter@npm:^3.0.0":
- version: 3.1.2
- resolution: "@metamask/safe-event-emitter@npm:3.1.2"
- checksum: 8ef7579f9317eb5c94ecf3e6abb8d13b119af274b678805eac76abe4c0667bfdf539f385e552bb973e96333b71b77aa7c787cb3fce9cd5fb4b00f1dbbabf880d
+ version: 3.1.1
+ resolution: "@metamask/safe-event-emitter@npm:3.1.1"
+ checksum: e24db4d7c20764bfc5b025065f92518c805f0ffb1da4820078b8cff7dcae964c0f354cf053fcb7ac659de015d5ffdf21aae5e8d44e191ee8faa9066855f22653
languageName: node
linkType: hard
@@ -8836,25 +8850,7 @@ __metadata:
languageName: node
linkType: hard
-"@noble/curves@npm:1.6.0, @noble/curves@npm:~1.6.0":
- version: 1.6.0
- resolution: "@noble/curves@npm:1.6.0"
- dependencies:
- "@noble/hashes": 1.5.0
- checksum: 258f3feb2a6098cf35521562ecb7d452fd728e8a008ff9f1ef435184f9d0c782ceb8f7b7fa8df3317c3be7a19f53995ee124cd05c8080b130bd42e3cb072f24d
- languageName: node
- linkType: hard
-
-"@noble/curves@npm:^1.4.0, @noble/curves@npm:^1.6.0, @noble/curves@npm:~1.8.0":
- version: 1.8.0
- resolution: "@noble/curves@npm:1.8.0"
- dependencies:
- "@noble/hashes": 1.7.0
- checksum: 88198bc5b8049358dfcc6c5e121125744fb81c703299127800f38f868a41697bc26bef8f88dc38f1939f4e0133b8db5f24337164eca7421a6a9480ee711f5e1b
- languageName: node
- linkType: hard
-
-"@noble/curves@npm:~1.2.0":
+"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0":
version: 1.2.0
resolution: "@noble/curves@npm:1.2.0"
dependencies:
@@ -8863,6 +8859,15 @@ __metadata:
languageName: node
linkType: hard
+"@noble/curves@npm:1.6.0, @noble/curves@npm:^1.4.0, @noble/curves@npm:~1.6.0":
+ version: 1.6.0
+ resolution: "@noble/curves@npm:1.6.0"
+ dependencies:
+ "@noble/hashes": 1.5.0
+ checksum: 258f3feb2a6098cf35521562ecb7d452fd728e8a008ff9f1ef435184f9d0c782ceb8f7b7fa8df3317c3be7a19f53995ee124cd05c8080b130bd42e3cb072f24d
+ languageName: node
+ linkType: hard
+
"@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0":
version: 1.2.0
resolution: "@noble/hashes@npm:1.2.0"
@@ -8884,20 +8889,13 @@ __metadata:
languageName: node
linkType: hard
-"@noble/hashes@npm:1.5.0, @noble/hashes@npm:~1.5.0":
+"@noble/hashes@npm:1.5.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.5.0":
version: 1.5.0
resolution: "@noble/hashes@npm:1.5.0"
checksum: 9cc031d5c888c455bfeef76af649b87f75380a4511405baea633c1e4912fd84aff7b61e99716f0231d244c9cfeda1fafd7d718963e6a0c674ed705e9b1b4f76b
languageName: node
linkType: hard
-"@noble/hashes@npm:1.7.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:~1.7.0":
- version: 1.7.0
- resolution: "@noble/hashes@npm:1.7.0"
- checksum: c06949ead7f5771a74f6fc9a346c7519212b3484c5b7916c8cad6b1b0e5f5f6c997ac3a43c0884ef8b99cfc55fac89058eefb29b6aad1cb41f436c748b316a1c
- languageName: node
- linkType: hard
-
"@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0":
version: 1.7.1
resolution: "@noble/secp256k1@npm:1.7.1"
@@ -10746,14 +10744,7 @@ __metadata:
languageName: node
linkType: hard
-"@scure/base@npm:^1.1.3, @scure/base@npm:~1.2.1":
- version: 1.2.1
- resolution: "@scure/base@npm:1.2.1"
- checksum: 061e04e4f6ed7bada6cdad4c799e6a82f30dda3f4008895bdb2e556f333f9b41f44dc067d25c064357ed6c012ea9c8be1e7927caf8a083af865b8de27b52370c
- languageName: node
- linkType: hard
-
-"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8":
+"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8":
version: 1.1.9
resolution: "@scure/base@npm:1.1.9"
checksum: 120820a37dfe9dfe4cab2b7b7460552d08e67dee8057ed5354eb68d8e3440890ae983ce3bee957d2b45684950b454a2b6d71d5ee77c1fd3fddc022e2a510337f
@@ -10804,17 +10795,6 @@ __metadata:
languageName: node
linkType: hard
-"@scure/bip32@npm:^1.5.0":
- version: 1.6.1
- resolution: "@scure/bip32@npm:1.6.1"
- dependencies:
- "@noble/curves": ~1.8.0
- "@noble/hashes": ~1.7.0
- "@scure/base": ~1.2.1
- checksum: a3a604aab771c425ce2422965b7041fcbaefceb5a77f6c3a9b6a2a1530932dfdc8d8b4e9447164fe14e31969d09f8883e0f29176b07c86b880d23e0f88df3727
- languageName: node
- linkType: hard
-
"@scure/bip39@npm:1.1.1":
version: 1.1.1
resolution: "@scure/bip39@npm:1.1.1"
@@ -10845,16 +10825,6 @@ __metadata:
languageName: node
linkType: hard
-"@scure/bip39@npm:^1.4.0":
- version: 1.5.1
- resolution: "@scure/bip39@npm:1.5.1"
- dependencies:
- "@noble/hashes": ~1.7.0
- "@scure/base": ~1.2.1
- checksum: 3069832465fc5b84602ee73271be22c47a7adb8459538b8121ad384e631f466703d7005b927db8b5554d70981e8c96bb99d5761cc45622786bfc555d46625e3e
- languageName: node
- linkType: hard
-
"@segment/loosely-validate-event@npm:^2.0.0":
version: 2.0.0
resolution: "@segment/loosely-validate-event@npm:2.0.0"
@@ -10901,6 +10871,108 @@ __metadata:
languageName: node
linkType: hard
+"@sentry/bundler-plugin-core@npm:2.10.3":
+ version: 2.10.3
+ resolution: "@sentry/bundler-plugin-core@npm:2.10.3"
+ dependencies:
+ "@sentry/cli": ^2.22.3
+ "@sentry/node": ^7.60.0
+ "@sentry/utils": ^7.60.0
+ dotenv: ^16.3.1
+ find-up: 5.0.0
+ glob: 9.3.2
+ magic-string: 0.27.0
+ unplugin: 1.0.1
+ checksum: 12c56904caca078df97e6abf19f38ee31812fd8f795f35ccadef948100614bde622710518a9e9b5fd0a985876f97d6da7a76432326fe9829ad71e6d77d32bece
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-darwin@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-darwin@npm:2.26.0"
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-arm64@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-linux-arm64@npm:2.26.0"
+ conditions: (os=linux | os=freebsd) & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-arm@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-linux-arm@npm:2.26.0"
+ conditions: (os=linux | os=freebsd) & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-i686@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-linux-i686@npm:2.26.0"
+ conditions: (os=linux | os=freebsd) & (cpu=x86 | cpu=ia32)
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-x64@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-linux-x64@npm:2.26.0"
+ conditions: (os=linux | os=freebsd) & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-win32-i686@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-win32-i686@npm:2.26.0"
+ conditions: os=win32 & (cpu=x86 | cpu=ia32)
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-win32-x64@npm:2.26.0":
+ version: 2.26.0
+ resolution: "@sentry/cli-win32-x64@npm:2.26.0"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@sentry/cli@npm:^2.22.3":
+ version: 2.26.0
+ resolution: "@sentry/cli@npm:2.26.0"
+ dependencies:
+ "@sentry/cli-darwin": 2.26.0
+ "@sentry/cli-linux-arm": 2.26.0
+ "@sentry/cli-linux-arm64": 2.26.0
+ "@sentry/cli-linux-i686": 2.26.0
+ "@sentry/cli-linux-x64": 2.26.0
+ "@sentry/cli-win32-i686": 2.26.0
+ "@sentry/cli-win32-x64": 2.26.0
+ https-proxy-agent: ^5.0.0
+ node-fetch: ^2.6.7
+ progress: ^2.0.3
+ proxy-from-env: ^1.1.0
+ which: ^2.0.2
+ dependenciesMeta:
+ "@sentry/cli-darwin":
+ optional: true
+ "@sentry/cli-linux-arm":
+ optional: true
+ "@sentry/cli-linux-arm64":
+ optional: true
+ "@sentry/cli-linux-i686":
+ optional: true
+ "@sentry/cli-linux-x64":
+ optional: true
+ "@sentry/cli-win32-i686":
+ optional: true
+ "@sentry/cli-win32-x64":
+ optional: true
+ bin:
+ sentry-cli: bin/sentry-cli
+ checksum: 8fe6b45bfa5540c1a39e86a5b61fc3c9ed24afa7cb221733983a835289fecf809de1aa7bdd627c35dd6168b45e54d830a8d9801e6afa91566a9b9c2c1080a6b2
+ languageName: node
+ linkType: hard
+
"@sentry/core@npm:7.45.0":
version: 7.45.0
resolution: "@sentry/core@npm:7.45.0"
@@ -10990,6 +11062,28 @@ __metadata:
languageName: node
linkType: hard
+"@sentry/utils@npm:^7.60.0":
+ version: 7.119.1
+ resolution: "@sentry/utils@npm:7.119.1"
+ dependencies:
+ "@sentry/types": 7.119.1
+ checksum: cdde755040c3314a4ea842a753bdf676a957478083de14e68232a1fd0f64a5b1cbfe44a223eb53e3fee93fa8a431bcd3ce0f4c6ce43ad464374217716c00a6a3
+ languageName: node
+ linkType: hard
+
+"@sentry/webpack-plugin@npm:2.10.3":
+ version: 2.10.3
+ resolution: "@sentry/webpack-plugin@npm:2.10.3"
+ dependencies:
+ "@sentry/bundler-plugin-core": 2.10.3
+ unplugin: 1.0.1
+ uuid: ^9.0.0
+ peerDependencies:
+ webpack: ">=4.40.0"
+ checksum: d37dadb2783258f85e410e4860c567a4fc7aa0dbe657f55baa8542611dd718a1e3a7ad02b4c859a0e716fde1223d37189d7ac430ad4a324bad0d788722235e5d
+ languageName: node
+ linkType: hard
+
"@shopify/flash-list@npm:1.6.3":
version: 1.6.3
resolution: "@shopify/flash-list@npm:1.6.3"
@@ -11099,22 +11193,6 @@ __metadata:
languageName: node
linkType: hard
-"@simplewebauthn/browser@npm:11.0.0":
- version: 11.0.0
- resolution: "@simplewebauthn/browser@npm:11.0.0"
- dependencies:
- "@simplewebauthn/types": ^11.0.0
- checksum: 0c1c7d24bb3cf074596591e023d08faa8f79d4a1875ef2a0279873014f3c5bc91b0def7d8670f237f9720cfd9833c87f5fafa5ab4c13e77f1854018930d1bef2
- languageName: node
- linkType: hard
-
-"@simplewebauthn/types@npm:11.0.0, @simplewebauthn/types@npm:^11.0.0":
- version: 11.0.0
- resolution: "@simplewebauthn/types@npm:11.0.0"
- checksum: 6fec4393a15393e5c1dfe7e9f3c924143c0616b637dd25bfd70b59fb0f24f6f4e2c9822f588a15f4a3415d476c2e8f5a22969fa8223b5aabe938fb6c5fbf2808
- languageName: node
- linkType: hard
-
"@sinclair/typebox@npm:^0.24.1":
version: 0.24.51
resolution: "@sinclair/typebox@npm:0.24.51"
@@ -16356,7 +16434,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/secp256k1@npm:^4.0.1":
+"@types/secp256k1@npm:^4.0.1, @types/secp256k1@npm:^4.0.4":
version: 4.0.6
resolution: "@types/secp256k1@npm:4.0.6"
dependencies:
@@ -16650,6 +16728,30 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/eslint-plugin@npm:^5.30.5, @typescript-eslint/eslint-plugin@npm:^5.5.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0"
+ dependencies:
+ "@eslint-community/regexpp": ^4.4.0
+ "@typescript-eslint/scope-manager": 5.62.0
+ "@typescript-eslint/type-utils": 5.62.0
+ "@typescript-eslint/utils": 5.62.0
+ debug: ^4.3.4
+ graphemer: ^1.4.0
+ ignore: ^5.2.0
+ natural-compare-lite: ^1.4.0
+ semver: ^7.3.7
+ tsutils: ^3.21.0
+ peerDependencies:
+ "@typescript-eslint/parser": ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/experimental-utils@npm:^5.0.0":
version: 5.62.0
resolution: "@typescript-eslint/experimental-utils@npm:5.62.0"
@@ -16716,6 +16818,23 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/type-utils@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/type-utils@npm:5.62.0"
+ dependencies:
+ "@typescript-eslint/typescript-estree": 5.62.0
+ "@typescript-eslint/utils": 5.62.0
+ debug: ^4.3.4
+ tsutils: ^3.21.0
+ peerDependencies:
+ eslint: "*"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/type-utils@npm:6.20.0":
version: 6.20.0
resolution: "@typescript-eslint/type-utils@npm:6.20.0"
@@ -16899,17 +17018,10 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/client-embeddedwallet@npm:0.0.13":
- version: 0.0.13
- resolution: "@uniswap/client-embeddedwallet@npm:0.0.13"
- checksum: aaac81afa3351bbb11a694ba3b9cd25d13569dafcbb57bf5dca91bfefce9c9a83881e5c46f9af24c9c46f38f5c1d0978802acb788e4625883bcac2b872a725d1
- languageName: node
- linkType: hard
-
-"@uniswap/client-explore@npm:0.0.14":
- version: 0.0.14
- resolution: "@uniswap/client-explore@npm:0.0.14"
- checksum: bbbe4c339932c36caa7ae7e3f3e650a554500e2f849ad1fb1b01526609a830b63b8856cf3c2e77df1588033a4fc58a601ce0eb25b86049bcbb32b55b09eabe22
+"@uniswap/client-explore@npm:0.0.12":
+ version: 0.0.12
+ resolution: "@uniswap/client-explore@npm:0.0.12"
+ checksum: 742fcd33d869275578dfffef98762fdf33f4481d139af7b9de130dac5e39074f1077cd8b976351c8ff44f73dcc526dc7adc1094f9cccdb73fe63d1b1fd149acb
languageName: node
linkType: hard
@@ -16987,6 +17099,9 @@ __metadata:
"@metamask/rpc-errors": 6.2.1
"@pmmmwh/react-refresh-webpack-plugin": 0.5.11
"@reduxjs/toolkit": 1.9.3
+ "@sentry/browser": 7.80.0
+ "@sentry/react": 7.80.0
+ "@sentry/webpack-plugin": 2.10.3
"@svgr/webpack": 8.0.1
"@tamagui/core": 1.114.4
"@testing-library/dom": 7.31.2
@@ -17002,9 +17117,9 @@ __metadata:
"@uniswap/analytics-events": 2.40.0
"@uniswap/eslint-config": "workspace:^"
"@uniswap/uniswapx-sdk": 3.0.0-beta.1
- "@uniswap/universal-router-sdk": 4.10.0
- "@uniswap/v3-sdk": 3.21.0
- "@uniswap/v4-sdk": 1.15.0
+ "@uniswap/universal-router-sdk": 4.7.0
+ "@uniswap/v3-sdk": 3.19.0
+ "@uniswap/v4-sdk": 1.12.0
"@welldone-software/why-did-you-render": 8.0.1
clean-webpack-plugin: 4.0.0
concurrently: 8.2.2
@@ -17139,7 +17254,7 @@ __metadata:
"@types/xml2js": 0.4.14
"@uniswap/analytics": 1.7.0
"@uniswap/analytics-events": 2.40.0
- "@uniswap/client-explore": 0.0.14
+ "@uniswap/client-explore": 0.0.12
"@uniswap/client-pools": 0.0.12
"@uniswap/default-token-list": 11.19.0
"@uniswap/eslint-config": "workspace:^"
@@ -17147,19 +17262,19 @@ __metadata:
"@uniswap/merkle-distributor": 1.0.1
"@uniswap/permit2-sdk": 1.3.0
"@uniswap/redux-multicall": 1.1.8
- "@uniswap/router-sdk": 1.18.0
- "@uniswap/sdk-core": 7.1.0
+ "@uniswap/router-sdk": 1.15.0
+ "@uniswap/sdk-core": 6.1.0
"@uniswap/smart-order-router": 3.17.3
"@uniswap/token-lists": 1.0.0-beta.33
"@uniswap/uniswapx-sdk": 3.0.0-beta.1
- "@uniswap/universal-router-sdk": 4.10.0
+ "@uniswap/universal-router-sdk": 4.7.0
"@uniswap/v2-core": 1.0.1
"@uniswap/v2-periphery": 1.1.0-beta.0
- "@uniswap/v2-sdk": 4.9.0
+ "@uniswap/v2-sdk": 4.7.0
"@uniswap/v3-core": 1.0.1
"@uniswap/v3-periphery": 1.4.4
- "@uniswap/v3-sdk": 3.21.0
- "@uniswap/v4-sdk": 1.15.0
+ "@uniswap/v3-sdk": 3.19.0
+ "@uniswap/v4-sdk": 1.12.0
"@vanilla-extract/css": 1.14.0
"@vanilla-extract/dynamic": 2.1.0
"@vanilla-extract/jest-transform": 1.1.1
@@ -17378,10 +17493,10 @@ __metadata:
"@types/redux-mock-store": 1.0.6
"@uniswap/analytics": 1.7.0
"@uniswap/analytics-events": 2.40.0
- "@uniswap/client-explore": 0.0.14
+ "@uniswap/client-explore": 0.0.12
"@uniswap/eslint-config": "workspace:^"
"@uniswap/ethers-rs-mobile": 0.0.5
- "@uniswap/sdk-core": 7.1.0
+ "@uniswap/sdk-core": 6.1.0
"@walletconnect/core": 2.17.1
"@walletconnect/react-native-compat": 2.17.1
"@walletconnect/types": 2.17.1
@@ -17397,6 +17512,7 @@ __metadata:
cross-fetch: 3.1.5
d3-shape: 3.2.0
dayjs: 1.11.7
+ detox: 20.23.0
eslint: 8.44.0
ethers: 5.7.2
expo: 50.0.15
@@ -17440,7 +17556,7 @@ __metadata:
react-native-gesture-handler: 2.19.0
react-native-get-random-values: 1.8.0
react-native-image-colors: 1.5.2
- react-native-image-picker: 7.2.3
+ react-native-image-picker: 7.0.1
react-native-localize: 2.2.6
react-native-markdown-display: 7.0.0-alpha.2
react-native-mmkv: 2.10.1
@@ -17502,23 +17618,23 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/router-sdk@npm:1.18.0":
- version: 1.18.0
- resolution: "@uniswap/router-sdk@npm:1.18.0"
+"@uniswap/router-sdk@npm:1.14.3":
+ version: 1.14.3
+ resolution: "@uniswap/router-sdk@npm:1.14.3"
dependencies:
"@ethersproject/abi": ^5.5.0
- "@uniswap/sdk-core": ^7.1.0
+ "@uniswap/sdk-core": ^5.8.0
"@uniswap/swap-router-contracts": ^1.3.0
- "@uniswap/v2-sdk": ^4.9.0
- "@uniswap/v3-sdk": ^3.21.0
- "@uniswap/v4-sdk": ^1.15.0
- checksum: b715c91be8653697251cca6c27054e4a2c1edfd074c93205a9b320ffa16de4afb34a78822485aa72964d4c8f1f1bb2af7ffba0a3c5daf116b57ec8a56fd0608b
+ "@uniswap/v2-sdk": ^4.6.0
+ "@uniswap/v3-sdk": ^3.17.0
+ "@uniswap/v4-sdk": ^1.10.3
+ checksum: ba7e0800d493c0d5f71c050bb21b475f762e56f81de13be96f29bb792351ef9846929271d8befdab93eae0e2800d64516f93d86eecb0ae894da708f806a1010d
languageName: node
linkType: hard
-"@uniswap/sdk-core@npm:7.1.0":
- version: 7.1.0
- resolution: "@uniswap/sdk-core@npm:7.1.0"
+"@uniswap/sdk-core@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@uniswap/sdk-core@npm:6.1.0"
dependencies:
"@ethersproject/address": ^5.0.2
"@ethersproject/bytes": ^5.7.0
@@ -17529,7 +17645,7 @@ __metadata:
jsbi: ^3.1.4
tiny-invariant: ^1.1.0
toformat: ^2.0.0
- checksum: 6c307c0a30e778c0a9f4e8064751442c9f651eeca2f49148393c89f8daf581119b439c3a19d7a90805d68c8525bbdf33a491f4c25b64496682c648d3fe525805
+ checksum: 0bd5a60239a4b41fa70119028eb65740a65c0b6a790fa599951b2098c7ee2cfcf239d4da80c00dfa16a4444eb79557aed7fb9ac9b50b2fdc20a568839a1958c8
languageName: node
linkType: hard
@@ -17599,23 +17715,23 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/universal-router-sdk@npm:4.10.0":
- version: 4.10.0
- resolution: "@uniswap/universal-router-sdk@npm:4.10.0"
+"@uniswap/universal-router-sdk@npm:4.7.0":
+ version: 4.7.0
+ resolution: "@uniswap/universal-router-sdk@npm:4.7.0"
dependencies:
"@openzeppelin/contracts": 4.7.0
"@uniswap/permit2-sdk": ^1.3.0
- "@uniswap/router-sdk": ^1.18.0
- "@uniswap/sdk-core": ^7.1.0
+ "@uniswap/router-sdk": ^1.15.0
+ "@uniswap/sdk-core": ^6.0.0
"@uniswap/universal-router": 2.0.0-beta.2
"@uniswap/v2-core": ^1.0.1
- "@uniswap/v2-sdk": ^4.9.0
+ "@uniswap/v2-sdk": ^4.7.0
"@uniswap/v3-core": 1.0.0
- "@uniswap/v3-sdk": ^3.21.0
- "@uniswap/v4-sdk": ^1.15.0
+ "@uniswap/v3-sdk": ^3.19.0
+ "@uniswap/v4-sdk": ^1.12.0
bignumber.js: ^9.0.2
ethers: ^5.7.0
- checksum: 6382d60baf850df745bb57bb70265a57127a4bf2c51e04425db9ee0e273f88e9f29537b289d03e7efae1b363daa213944955daea9de00bae5f22525161cce301
+ checksum: 67407edd32d29ca696307ab11e75d1a5bde7b1434b9ee1a26bf807b86a29980a29f9dfaeda663ee9ecb749c718d127a64d3b8b50188cc5a02b9a7c67837d67d1
languageName: node
linkType: hard
@@ -17681,16 +17797,16 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/v2-sdk@npm:4.9.0":
- version: 4.9.0
- resolution: "@uniswap/v2-sdk@npm:4.9.0"
+"@uniswap/v2-sdk@npm:4.6.1":
+ version: 4.6.1
+ resolution: "@uniswap/v2-sdk@npm:4.6.1"
dependencies:
"@ethersproject/address": ^5.0.2
"@ethersproject/solidity": ^5.0.9
- "@uniswap/sdk-core": ^7.1.0
+ "@uniswap/sdk-core": ^5.8.1
tiny-invariant: ^1.1.0
tiny-warning: ^1.0.3
- checksum: 2612f8c8658ceee6856860674d7c1d01fa93501d1e6aef35c9e62746355c4838502b075a7def7e967f08932df117d48528377517c5d2eeab7a48d4a46711b147
+ checksum: 0d4c1e58feef7d65c143a776447dbe4e0c06c2f2b6877d57b2db3056a4f8c441c503449f5bfa150ac9e02516ef1c6f5fce5bc89a55d637311bc3e5c8e01ef163
languageName: node
linkType: hard
@@ -17721,19 +17837,19 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/v3-sdk@npm:3.21.0, @uniswap/v3-sdk@npm:^3.10.0, @uniswap/v3-sdk@npm:^3.11.0, @uniswap/v3-sdk@npm:^3.21.0":
- version: 3.21.0
- resolution: "@uniswap/v3-sdk@npm:3.21.0"
+"@uniswap/v3-sdk@npm:3.19.0, @uniswap/v3-sdk@npm:^3.10.0, @uniswap/v3-sdk@npm:^3.11.0, @uniswap/v3-sdk@npm:^3.17.0, @uniswap/v3-sdk@npm:^3.19.0":
+ version: 3.19.0
+ resolution: "@uniswap/v3-sdk@npm:3.19.0"
dependencies:
"@ethersproject/abi": ^5.5.0
"@ethersproject/solidity": ^5.0.9
- "@uniswap/sdk-core": ^7.1.0
+ "@uniswap/sdk-core": ^6.0.0
"@uniswap/swap-router-contracts": ^1.3.0
"@uniswap/v3-periphery": ^1.1.1
"@uniswap/v3-staker": 1.0.0
tiny-invariant: ^1.1.0
tiny-warning: ^1.0.3
- checksum: 252b6b4f53cad00147542f722cdd5bd7cf42085480c984e56fa3b02321b5fc41f866783d2be783020e9ee9b385510467656c55a2256889fe31092fec1f9ec7d8
+ checksum: b076fa983838694ee7c38ebfbe5fb211514f5b5d5b37089b79ddc2a5684cd11cc32bc4f7182ed0db99f7f46b08a850397991702078bd6043103f35cf36cb6a84
languageName: node
linkType: hard
@@ -17748,16 +17864,16 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/v4-sdk@npm:1.15.0, @uniswap/v4-sdk@npm:^1.15.0":
- version: 1.15.0
- resolution: "@uniswap/v4-sdk@npm:1.15.0"
+"@uniswap/v4-sdk@npm:1.12.0, @uniswap/v4-sdk@npm:^1.10.3, @uniswap/v4-sdk@npm:^1.12.0":
+ version: 1.12.0
+ resolution: "@uniswap/v4-sdk@npm:1.12.0"
dependencies:
"@ethersproject/solidity": ^5.0.9
- "@uniswap/sdk-core": ^7.1.0
- "@uniswap/v3-sdk": 3.21.0
+ "@uniswap/sdk-core": ^6.0.0
+ "@uniswap/v3-sdk": 3.19.0
tiny-invariant: ^1.1.0
tiny-warning: ^1.0.3
- checksum: 8541dcaec654fc6dd2c0d4ce61e1858df5e07577349678e6a66c4f1b582cde316c5c036b2d8658ba11708633f9269c59bd24a6f460c1d7d7e5e708c7e09a45dc
+ checksum: 975b88da4b70cc3fe66fe768ad94b2019ac4c70d9601ac148e6c8081a53d26fdd77cc77f1bf286faec1072d13463608ff629c59820f2f0aa7f7bd16a46cb328c
languageName: node
linkType: hard
@@ -18933,24 +19049,24 @@ __metadata:
languageName: node
linkType: hard
-"abitype@npm:1.0.6":
- version: 1.0.6
- resolution: "abitype@npm:1.0.6"
+"abitype@npm:0.9.8":
+ version: 0.9.8
+ resolution: "abitype@npm:0.9.8"
peerDependencies:
typescript: ">=5.0.4"
- zod: ^3 >=3.22.0
+ zod: ^3 >=3.19.1
peerDependenciesMeta:
typescript:
optional: true
zod:
optional: true
- checksum: 0bf6ed5ec785f372746c3ec5d6c87bf4d8cf0b6db30867b8d24e86fbc66d9f6599ae3d463ccd49817e67eedec6deba7cdae317bcf4da85b02bc48009379b9f84
+ checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6
languageName: node
linkType: hard
-"abitype@npm:^1.0.6":
- version: 1.0.8
- resolution: "abitype@npm:1.0.8"
+"abitype@npm:1.0.6":
+ version: 1.0.6
+ resolution: "abitype@npm:1.0.6"
peerDependencies:
typescript: ">=5.0.4"
zod: ^3 >=3.22.0
@@ -18959,7 +19075,7 @@ __metadata:
optional: true
zod:
optional: true
- checksum: 104bc2f6820ced8d2cb61521916f7f22c0981a846216f5b6144f69461265f7da137a4ae108bf4b84cd8743f2dd1e9fdadffc0f95371528e15a59e0a369e08438
+ checksum: 0bf6ed5ec785f372746c3ec5d6c87bf4d8cf0b6db30867b8d24e86fbc66d9f6599ae3d463ccd49817e67eedec6deba7cdae317bcf4da85b02bc48009379b9f84
languageName: node
linkType: hard
@@ -19197,7 +19313,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.9.0":
+"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.6.3, ajv@npm:^8.9.0":
version: 8.17.1
resolution: "ajv@npm:8.17.1"
dependencies:
@@ -20801,7 +20917,7 @@ __metadata:
languageName: node
linkType: hard
-"bluebird@npm:3.7.2, bluebird@npm:^3.7.2":
+"bluebird@npm:3.7.2, bluebird@npm:^3.5.4, bluebird@npm:^3.7.2":
version: 3.7.2
resolution: "bluebird@npm:3.7.2"
checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef
@@ -21329,6 +21445,26 @@ __metadata:
languageName: node
linkType: hard
+"bunyamin@npm:^1.5.2":
+ version: 1.5.2
+ resolution: "bunyamin@npm:1.5.2"
+ dependencies:
+ "@flatten-js/interval-tree": ^1.1.2
+ multi-sort-stream: ^1.0.4
+ stream-json: ^1.7.5
+ trace-event-lib: ^1.3.1
+ peerDependencies:
+ "@types/bunyan": ^1.8.8
+ bunyan: ^1.8.15 || ^2.0.0
+ peerDependenciesMeta:
+ "@types/bunyan":
+ optional: true
+ bunyan:
+ optional: true
+ checksum: aa753b279e130736a8aa6a4fe79fa3eb1a22c7e09eba5e866ce0241a2c024abf4560fd42c758b6bfda287a86a7901d0200b0b751e13c32c15c99ddb988cbde28
+ languageName: node
+ linkType: hard
+
"bunyan-blackhole@npm:^1.1.1":
version: 1.1.1
resolution: "bunyan-blackhole@npm:1.1.1"
@@ -21340,7 +21476,18 @@ __metadata:
languageName: node
linkType: hard
-"bunyan@npm:^1.8.15":
+"bunyan-debug-stream@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "bunyan-debug-stream@npm:3.1.0"
+ dependencies:
+ chalk: ^4.1.2
+ peerDependencies:
+ bunyan: "*"
+ checksum: 38a89a711d7e7f540a233f7afdf2388c3178709a5d316734d6f2752805abfcb7f4688b453df11e58fdcd3a4a0a2da3b1db0dd96712ec99bdb181878aae2c1bcb
+ languageName: node
+ linkType: hard
+
+"bunyan@npm:^1.8.12, bunyan@npm:^1.8.15":
version: 1.8.15
resolution: "bunyan@npm:1.8.15"
dependencies:
@@ -21363,6 +21510,30 @@ __metadata:
languageName: node
linkType: hard
+"bunyan@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "bunyan@npm:2.0.5"
+ dependencies:
+ dtrace-provider: ~0.8
+ exeunt: 1.1.0
+ moment: ^2.19.3
+ mv: ~2
+ safe-json-stringify: ~1
+ dependenciesMeta:
+ dtrace-provider:
+ optional: true
+ moment:
+ optional: true
+ mv:
+ optional: true
+ safe-json-stringify:
+ optional: true
+ bin:
+ bunyan: bin/bunyan
+ checksum: a932e883387e5bef23eee0f1f9af94e8b885da32492eaf7164dc58e3b42e5a65845068beb7ac8fbcff31511a55728c1a826bf48ba3e4edd7e220ebf0fe2ab989
+ languageName: node
+ linkType: hard
+
"busboy@npm:^1.6.0":
version: 1.6.0
resolution: "busboy@npm:1.6.0"
@@ -21489,6 +21660,13 @@ __metadata:
languageName: node
linkType: hard
+"caf@npm:^15.0.1":
+ version: 15.0.1
+ resolution: "caf@npm:15.0.1"
+ checksum: 832cc5d3a6053efb458ed1c1f5e5d3ebbc7710f2275f033c6362dcfd1565f15e29dbee15fa0f3301ecb5c4dbdc753c070b5a4a6d3dc8e246cb784cb26c601e8b
+ languageName: node
+ linkType: hard
+
"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
version: 1.0.7
resolution: "call-bind@npm:1.0.7"
@@ -21932,6 +22110,17 @@ __metadata:
languageName: node
linkType: hard
+"child-process-promise@npm:^2.2.0":
+ version: 2.2.1
+ resolution: "child-process-promise@npm:2.2.1"
+ dependencies:
+ cross-spawn: ^4.0.2
+ node-version: ^1.0.0
+ promise-polyfill: ^6.0.1
+ checksum: fb72dda7ee78099f106d57bf3d7cc3225c16c9ddfe8e364e3535a52396482ee81aecd3eff0da7131ca17b7ba9fcbb8af827da63a03f0c3262c76268696898642
+ languageName: node
+ linkType: hard
+
"chokidar@npm:3.5.3":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
@@ -23216,6 +23405,16 @@ __metadata:
languageName: node
linkType: hard
+"cross-spawn@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "cross-spawn@npm:4.0.2"
+ dependencies:
+ lru-cache: ^4.0.1
+ which: ^1.2.9
+ checksum: 8ce57b3e11c5c798542a21ddfdc1edef33ab6fe001958b31f3340a6ff684e3334a8baad2751efa78b6200aad442cf12b939396d758b0dd5c42c9b782c28fe06e
+ languageName: node
+ linkType: hard
+
"cross-spawn@npm:^5.0.1, cross-spawn@npm:^5.1.0":
version: 5.1.0
resolution: "cross-spawn@npm:5.1.0"
@@ -25177,6 +25376,106 @@ __metadata:
languageName: node
linkType: hard
+"detox@npm:20.23.0":
+ version: 20.23.0
+ resolution: "detox@npm:20.23.0"
+ dependencies:
+ ajv: ^8.6.3
+ bunyan: ^1.8.12
+ bunyan-debug-stream: ^3.1.0
+ caf: ^15.0.1
+ chalk: ^4.0.0
+ child-process-promise: ^2.2.0
+ execa: ^5.1.1
+ find-up: ^5.0.0
+ fs-extra: ^11.0.0
+ funpermaproxy: ^1.1.0
+ glob: ^8.0.3
+ ini: ^1.3.4
+ jest-environment-emit: ^1.0.8
+ json-cycle: ^1.3.0
+ lodash: ^4.17.11
+ multi-sort-stream: ^1.0.3
+ multipipe: ^4.0.0
+ node-ipc: 9.2.1
+ proper-lockfile: ^3.0.2
+ resolve-from: ^5.0.0
+ sanitize-filename: ^1.6.1
+ semver: ^7.0.0
+ serialize-error: ^8.0.1
+ shell-quote: ^1.7.2
+ signal-exit: ^3.0.3
+ stream-json: ^1.7.4
+ strip-ansi: ^6.0.1
+ telnet-client: 1.2.8
+ tempfile: ^2.0.0
+ trace-event-lib: ^1.3.1
+ which: ^1.3.1
+ ws: ^7.0.0
+ yargs: ^17.0.0
+ yargs-parser: ^21.0.0
+ yargs-unparser: ^2.0.0
+ peerDependencies:
+ jest: 29.x.x || 28.x.x || ^27.2.5
+ peerDependenciesMeta:
+ jest:
+ optional: true
+ bin:
+ detox: local-cli/cli.js
+ checksum: e466a66ecf24194bb9ce4436539299134e9acc1accd00f04e29b2a53f9caef8d4e237a6d4f6a86b2a7f413b91261448c8daa97a917668db491719c02e951e3bb
+ languageName: node
+ linkType: hard
+
+"detox@patch:detox@npm%3A20.23.0#./.yarn/patches/detox-npm-20.23.0-6d61110e63.patch::locator=universe%40workspace%3A.":
+ version: 20.23.0
+ resolution: "detox@patch:detox@npm%3A20.23.0#./.yarn/patches/detox-npm-20.23.0-6d61110e63.patch::version=20.23.0&hash=a63042&locator=universe%40workspace%3A."
+ dependencies:
+ ajv: ^8.6.3
+ bunyan: ^1.8.12
+ bunyan-debug-stream: ^3.1.0
+ caf: ^15.0.1
+ chalk: ^4.0.0
+ child-process-promise: ^2.2.0
+ execa: ^5.1.1
+ find-up: ^5.0.0
+ fs-extra: ^11.0.0
+ funpermaproxy: ^1.1.0
+ glob: ^8.0.3
+ ini: ^1.3.4
+ jest-environment-emit: ^1.0.8
+ json-cycle: ^1.3.0
+ lodash: ^4.17.11
+ multi-sort-stream: ^1.0.3
+ multipipe: ^4.0.0
+ node-ipc: 9.2.1
+ proper-lockfile: ^3.0.2
+ resolve-from: ^5.0.0
+ sanitize-filename: ^1.6.1
+ semver: ^7.0.0
+ serialize-error: ^8.0.1
+ shell-quote: ^1.7.2
+ signal-exit: ^3.0.3
+ stream-json: ^1.7.4
+ strip-ansi: ^6.0.1
+ telnet-client: 1.2.8
+ tempfile: ^2.0.0
+ trace-event-lib: ^1.3.1
+ which: ^1.3.1
+ ws: ^7.0.0
+ yargs: ^17.0.0
+ yargs-parser: ^21.0.0
+ yargs-unparser: ^2.0.0
+ peerDependencies:
+ jest: 29.x.x || 28.x.x || ^27.2.5
+ peerDependenciesMeta:
+ jest:
+ optional: true
+ bin:
+ detox: local-cli/cli.js
+ checksum: 086bb4845abfff283cc30ef2b2f66a8827a91b8cb1a6c4d4aa3bc9c9faac2c6e53d8f305e5b9da967d808202d780a5f8296f769bd3f331c5664c66b69403d3f8
+ languageName: node
+ linkType: hard
+
"didyoumean@npm:^1.2.2":
version: 1.2.2
resolution: "didyoumean@npm:1.2.2"
@@ -25561,7 +25860,7 @@ __metadata:
languageName: node
linkType: hard
-"dotenv@npm:^16.0.0, dotenv@npm:^16.4.4, dotenv@npm:~16.4.5":
+"dotenv@npm:^16.0.0, dotenv@npm:^16.3.1, dotenv@npm:^16.4.4, dotenv@npm:~16.4.5":
version: 16.4.5
resolution: "dotenv@npm:16.4.5"
checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c
@@ -25592,6 +25891,15 @@ __metadata:
languageName: node
linkType: hard
+"duplexer2@npm:^0.1.2":
+ version: 0.1.4
+ resolution: "duplexer2@npm:0.1.4"
+ dependencies:
+ readable-stream: ^2.0.2
+ checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241
+ languageName: node
+ linkType: hard
+
"duplexer3@npm:^0.1.4":
version: 0.1.4
resolution: "duplexer3@npm:0.1.4"
@@ -25637,6 +25945,13 @@ __metadata:
languageName: node
linkType: hard
+"easy-stack@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "easy-stack@npm:1.0.1"
+ checksum: 161a99e497b3857b0be4ec9e1ebbe90b241ea9d84702f9881b8e5b3f6822065b8c4e33436996935103e191bffba3607de70712a792f4d406a050def48c6bc381
+ languageName: node
+ linkType: hard
+
"ecc-jsbn@npm:~0.1.1":
version: 0.1.2
resolution: "ecc-jsbn@npm:0.1.2"
@@ -25657,12 +25972,13 @@ __metadata:
linkType: hard
"eciesjs@npm:^0.3.15":
- version: 0.3.21
- resolution: "eciesjs@npm:0.3.21"
+ version: 0.3.18
+ resolution: "eciesjs@npm:0.3.18"
dependencies:
+ "@types/secp256k1": ^4.0.4
futoin-hkdf: ^1.5.3
- secp256k1: ^5.0.1
- checksum: 257065d17232f4d9bbd1a1045432c23728a7b30db4f791ac8ac5c1a54ce302a176eb1d58e28011c562a4e10ebdbd688942025cf927e06f6010610522d1959734
+ secp256k1: ^5.0.0
+ checksum: 2d6e1624c4b2110ab4c76a684d0f458774c702f9711859404a52ede1b2dea67f61e8fc258a0867c2090e5b1110ca3201ea2876f5ac0e2dd57ef1bcfb358d3004
languageName: node
linkType: hard
@@ -27679,6 +27995,13 @@ __metadata:
languageName: node
linkType: hard
+"event-pubsub@npm:4.3.0":
+ version: 4.3.0
+ resolution: "event-pubsub@npm:4.3.0"
+ checksum: 6940f57790c01a967b7c637f1c9fd000ee968a1d5894186ffb3356ffbe174c70e22e62adbbcfcee3f305482d99b6abe7613c1c27c909b07adc9127dc16c8cf73
+ languageName: node
+ linkType: hard
+
"event-stream@npm:=3.3.4":
version: 3.3.4
resolution: "event-stream@npm:3.3.4"
@@ -27877,6 +28200,13 @@ __metadata:
languageName: node
linkType: hard
+"exeunt@npm:1.1.0":
+ version: 1.1.0
+ resolution: "exeunt@npm:1.1.0"
+ checksum: c0054fa49d7b3abbc2acecd4c6e34c6ce3a0370f9c31d18cdf64dad6be9a6d3fb84d93be892b7d1906f3f23051b3855bde7b255129fc49605a04392f69e98ea2
+ languageName: node
+ linkType: hard
+
"exif-parser@npm:^0.1.12":
version: 0.1.12
resolution: "exif-parser@npm:0.1.12"
@@ -29440,6 +29770,13 @@ __metadata:
languageName: node
linkType: hard
+"funpermaproxy@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "funpermaproxy@npm:1.1.0"
+ checksum: 74cf0aafeadbd79053324f1fb981c1a4358618722ad01c65bd1466b42498fd07acb7749ab9224b25fc8e81c2e1283b92ceee61dded265bd7527b225351db998b
+ languageName: node
+ linkType: hard
+
"fuse.js@npm:6.5.3":
version: 6.5.3
resolution: "fuse.js@npm:6.5.3"
@@ -29905,6 +30242,18 @@ __metadata:
languageName: node
linkType: hard
+"glob@npm:9.3.2":
+ version: 9.3.2
+ resolution: "glob@npm:9.3.2"
+ dependencies:
+ fs.realpath: ^1.0.0
+ minimatch: ^7.4.1
+ minipass: ^4.2.4
+ path-scurry: ^1.6.1
+ checksum: f3d188e9f70e24fa729a63ca197bcdb36d838677abec1fb9bbfe4b7620063bf90dc0f8d195203d632abfdfa049fad0edf22f93c60076de67cef20c23bcbfaee8
+ languageName: node
+ linkType: hard
+
"glob@npm:^10.3.10":
version: 10.4.5
resolution: "glob@npm:10.4.5"
@@ -32516,6 +32865,15 @@ __metadata:
languageName: node
linkType: hard
+"isows@npm:1.0.3":
+ version: 1.0.3
+ resolution: "isows@npm:1.0.3"
+ peerDependencies:
+ ws: "*"
+ checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440
+ languageName: node
+ linkType: hard
+
"isows@npm:1.0.6":
version: 1.0.6
resolution: "isows@npm:1.0.6"
@@ -32942,6 +33300,39 @@ __metadata:
languageName: node
linkType: hard
+"jest-environment-emit@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "jest-environment-emit@npm:1.0.8"
+ dependencies:
+ bunyamin: ^1.5.2
+ bunyan: ^2.0.5
+ bunyan-debug-stream: ^3.1.0
+ funpermaproxy: ^1.1.0
+ lodash.merge: ^4.6.2
+ node-ipc: 9.2.1
+ strip-ansi: ^6.0.0
+ tslib: ^2.5.3
+ peerDependencies:
+ "@jest/environment": ">=27.2.5"
+ "@jest/types": ">=27.2.5"
+ jest: ">=27.2.5"
+ jest-environment-jsdom: ">=27.2.5"
+ jest-environment-node: ">=27.2.5"
+ peerDependenciesMeta:
+ "@jest/environment":
+ optional: true
+ "@jest/types":
+ optional: true
+ jest:
+ optional: true
+ jest-environment-jsdom:
+ optional: true
+ jest-environment-node:
+ optional: true
+ checksum: 0c7bafbd3a6e5952f6abb45958f0d2997371d29b29f3876afda48d1d734ccd703577aaac0d5afec2e19dc33a9db0e9458721fe73dbe797f0ced21481d908acfd
+ languageName: node
+ linkType: hard
+
"jest-environment-jsdom@npm:29.5.0":
version: 29.5.0
resolution: "jest-environment-jsdom@npm:29.5.0"
@@ -33963,6 +34354,22 @@ __metadata:
languageName: node
linkType: hard
+"js-message@npm:1.0.7":
+ version: 1.0.7
+ resolution: "js-message@npm:1.0.7"
+ checksum: 18dcc4d80356e8b5be978ca7838d96d4e350a1cb8adc5741c229dec6df09f53bfed7c75c1f360171d2d791a14e2f077d6c2b1013ba899ded7a27d7dfcd4f3784
+ languageName: node
+ linkType: hard
+
+"js-queue@npm:2.0.2":
+ version: 2.0.2
+ resolution: "js-queue@npm:2.0.2"
+ dependencies:
+ easy-stack: ^1.0.1
+ checksum: 5049c3f648315ed13e46755704ff5453df70f7e8e1812acf1f98d6700efbec32421f76294a0e63fd2a9f8aabaf124233bbb308f9a2caec9d9f3d833ab5a73079
+ languageName: node
+ linkType: hard
+
"js-sha256@npm:^0.10.1":
version: 0.10.1
resolution: "js-sha256@npm:0.10.1"
@@ -34212,6 +34619,13 @@ __metadata:
languageName: node
linkType: hard
+"json-cycle@npm:^1.3.0":
+ version: 1.5.0
+ resolution: "json-cycle@npm:1.5.0"
+ checksum: 0a44cd349676c6726093c64283fb75402f9104b32325b06c9270af6d639e7caac419f5301a39298aef2ac1659b273b167e02bd622e628c3392cf86f0e77a9f78
+ languageName: node
+ linkType: hard
+
"json-parse-better-errors@npm:^1.0.1":
version: 1.0.2
resolution: "json-parse-better-errors@npm:1.0.2"
@@ -35445,6 +35859,15 @@ __metadata:
languageName: node
linkType: hard
+"magic-string@npm:0.27.0":
+ version: 0.27.0
+ resolution: "magic-string@npm:0.27.0"
+ dependencies:
+ "@jridgewell/sourcemap-codec": ^1.4.13
+ checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e
+ languageName: node
+ linkType: hard
+
"magic-string@npm:^0.25.0, magic-string@npm:^0.25.3, magic-string@npm:^0.25.7":
version: 0.25.9
resolution: "magic-string@npm:0.25.9"
@@ -36336,7 +36759,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^7.4.6":
+"minimatch@npm:^7.4.1, minimatch@npm:^7.4.6":
version: 7.4.6
resolution: "minimatch@npm:7.4.6"
dependencies:
@@ -36442,6 +36865,13 @@ __metadata:
languageName: node
linkType: hard
+"minipass@npm:^4.2.4":
+ version: 4.2.8
+ resolution: "minipass@npm:4.2.8"
+ checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830
+ languageName: node
+ linkType: hard
+
"minipass@npm:^5.0.0":
version: 5.0.0
resolution: "minipass@npm:5.0.0"
@@ -36729,6 +37159,13 @@ __metadata:
languageName: node
linkType: hard
+"multi-sort-stream@npm:^1.0.3, multi-sort-stream@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "multi-sort-stream@npm:1.0.4"
+ checksum: b234754e0e7489623f5184ba0e887ffd8014fe829c846fd8a95569339b6e19a616ae1d44f3d064279adfbf92fa5c4d016a89fc5026e16dbd680ebd67067b19a0
+ languageName: node
+ linkType: hard
+
"multibase@npm:^4.0.1":
version: 4.0.6
resolution: "multibase@npm:4.0.6"
@@ -36798,6 +37235,16 @@ __metadata:
languageName: node
linkType: hard
+"multipipe@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "multipipe@npm:4.0.0"
+ dependencies:
+ duplexer2: ^0.1.2
+ object-assign: ^4.1.0
+ checksum: 5a494ec2ce5bfdb389882ca595e3c4a33cae6c90dad879db2e3aa9a94484d8b164b0fb7b58ccf7593ae7e8c6213fd3f53a736b2c98e4f14c5ed1d38debc33f98
+ languageName: node
+ linkType: hard
+
"mustache@npm:^4.2.0":
version: 4.2.0
resolution: "mustache@npm:4.2.0"
@@ -36877,6 +37324,13 @@ __metadata:
languageName: node
linkType: hard
+"natural-compare-lite@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "natural-compare-lite@npm:1.4.0"
+ checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225
+ languageName: node
+ linkType: hard
+
"natural-compare@npm:^1.4.0":
version: 1.4.0
resolution: "natural-compare@npm:1.4.0"
@@ -37151,6 +37605,17 @@ __metadata:
languageName: node
linkType: hard
+"node-ipc@npm:9.2.1":
+ version: 9.2.1
+ resolution: "node-ipc@npm:9.2.1"
+ dependencies:
+ event-pubsub: 4.3.0
+ js-message: 1.0.7
+ js-queue: 2.0.2
+ checksum: a38aa4c8ca4317b293e0ce21f0a3a4941fc51c054800b35e263fcfe3e0feeb60e7d2c497f015054b28783316c6e7d9cc3837af9d9958bcbd8c577d0cdf6964b7
+ languageName: node
+ linkType: hard
+
"node-polyfill-webpack-plugin@npm:2.0.1":
version: 2.0.1
resolution: "node-polyfill-webpack-plugin@npm:2.0.1"
@@ -37218,6 +37683,13 @@ __metadata:
languageName: node
linkType: hard
+"node-version@npm:^1.0.0":
+ version: 1.2.0
+ resolution: "node-version@npm:1.2.0"
+ checksum: 74e92d2a7f0fe0fce3aafd6dcc30b3b440999df68b3d92fcefcad2a52b37bc29c6b542f33760229390bfdc1a4d993fb65b9c199b1f0d568969d07fc1c04bc1e7
+ languageName: node
+ linkType: hard
+
"node-vibrant@npm:3.1.6":
version: 3.1.6
resolution: "node-vibrant@npm:3.1.6"
@@ -37892,26 +38364,6 @@ __metadata:
languageName: node
linkType: hard
-"ox@npm:0.1.2":
- version: 0.1.2
- resolution: "ox@npm:0.1.2"
- dependencies:
- "@adraffy/ens-normalize": ^1.10.1
- "@noble/curves": ^1.6.0
- "@noble/hashes": ^1.5.0
- "@scure/bip32": ^1.5.0
- "@scure/bip39": ^1.4.0
- abitype: ^1.0.6
- eventemitter3: 5.0.1
- peerDependencies:
- typescript: ">=5.4.0"
- peerDependenciesMeta:
- typescript:
- optional: true
- checksum: 3f01119adbec8258b064298c66cb9830fc32c023e7fdc6e0634610505e74e8aab051c7fa49dad0fdd751a1c4af66c8eb2a825d993c6e79611e761a537276afd6
- languageName: node
- linkType: hard
-
"p-cancelable@npm:^1.0.0":
version: 1.1.0
resolution: "p-cancelable@npm:1.1.0"
@@ -38424,7 +38876,7 @@ __metadata:
languageName: node
linkType: hard
-"path-scurry@npm:^1.11.1":
+"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1":
version: 1.11.1
resolution: "path-scurry@npm:1.11.1"
dependencies:
@@ -39710,9 +40162,9 @@ __metadata:
linkType: hard
"preact@npm:^10.16.0":
- version: 10.25.0
- resolution: "preact@npm:10.25.0"
- checksum: f7ec537a2e21dfc5b9e0704af7c5b85388a2b675dbf49710261d85708bdc980e5d0b8f8601ba5c4d7cbd1295d3c6aaee9f5c70ad005d872ae89b22e7c46a17ed
+ version: 10.20.1
+ resolution: "preact@npm:10.20.1"
+ checksum: af5ed9bdf44bfa5487479c09fa971a32902987f277c74d6244f9d9466ccd5c1efd3a0949e7dc2227177623878b1adafcc5c50cee6617a84f72d1cebe55ff76ba
languageName: node
linkType: hard
@@ -40006,6 +40458,13 @@ __metadata:
languageName: node
linkType: hard
+"promise-polyfill@npm:^6.0.1":
+ version: 6.1.0
+ resolution: "promise-polyfill@npm:6.1.0"
+ checksum: 6f1899cca37e48f67a424842282acd525d8d99d3536f2d97e37a117cfc4a0006683330ceaf5a15fbc09b4450f319a680292f9970a5f8e9cf90acbce0bdb0f751
+ languageName: node
+ linkType: hard
+
"promise-polyfill@npm:^8.1.3":
version: 8.3.0
resolution: "promise-polyfill@npm:8.3.0"
@@ -40069,6 +40528,17 @@ __metadata:
languageName: node
linkType: hard
+"proper-lockfile@npm:^3.0.2":
+ version: 3.2.0
+ resolution: "proper-lockfile@npm:3.2.0"
+ dependencies:
+ graceful-fs: ^4.1.11
+ retry: ^0.12.0
+ signal-exit: ^3.0.2
+ checksum: 1be1bb702b9d47bdf18d75f22578f51370781feba7d2617f70ff8c66a86bcfa6e55b4f69c57fc326380110f2d1ffdb6e54a4900814bf156c04ee4eb2d3c065aa
+ languageName: node
+ linkType: hard
+
"proto3-json-serializer@npm:^2.0.2":
version: 2.0.2
resolution: "proto3-json-serializer@npm:2.0.2"
@@ -41060,13 +41530,13 @@ __metadata:
languageName: node
linkType: hard
-"react-native-image-picker@npm:7.2.3":
- version: 7.2.3
- resolution: "react-native-image-picker@npm:7.2.3"
+"react-native-image-picker@npm:7.0.1":
+ version: 7.0.1
+ resolution: "react-native-image-picker@npm:7.0.1"
peerDependencies:
react: "*"
react-native: "*"
- checksum: 96d67516e8e1c1768c593ca1b0a507d5212d8ac5df2610ad9d6f38c188b8d0720966559867849f74b6c19d2500664ce17c907e5fa37ab72487abd363cf493e7d
+ checksum: 1af72d42a82bc7ade4906210496bc0f86218595098b20f003488793c733f387115d58e0a44c22c4bbcc4cc8eb354ef18c306f5b64e4def2d67b2ddabd6d8cb46
languageName: node
linkType: hard
@@ -41908,7 +42378,7 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.0.6, readable-stream@npm:^2.1.5, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6":
+"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.0.6, readable-stream@npm:^2.1.5, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
dependencies:
@@ -42940,24 +43410,21 @@ __metadata:
linkType: hard
"rollup-plugin-visualizer@npm:^5.9.2":
- version: 5.14.0
- resolution: "rollup-plugin-visualizer@npm:5.14.0"
+ version: 5.12.0
+ resolution: "rollup-plugin-visualizer@npm:5.12.0"
dependencies:
open: ^8.4.0
- picomatch: ^4.0.2
+ picomatch: ^2.3.1
source-map: ^0.7.4
yargs: ^17.5.1
peerDependencies:
- rolldown: 1.x
rollup: 2.x || 3.x || 4.x
peerDependenciesMeta:
- rolldown:
- optional: true
rollup:
optional: true
bin:
rollup-plugin-visualizer: dist/bin/cli.js
- checksum: 8ef5b05c91bd74bc1bb536609dd0ef2f1995066ec623393d192d638c209620fd2318c902d185ae648873d0a2788131cbaec11595c91322f0c2661ef6a1cc7e42
+ checksum: 17dc10a93d4bd457c8bb7796a57c284487fb00f4b9703a33a1a954f5d40c66a89b24aca98564569922456f4fa8f72281c3ef96a95502195e6930b3fac62fce8e
languageName: node
linkType: hard
@@ -43127,6 +43594,15 @@ __metadata:
languageName: node
linkType: hard
+"sanitize-filename@npm:^1.6.1":
+ version: 1.6.3
+ resolution: "sanitize-filename@npm:1.6.3"
+ dependencies:
+ truncate-utf8-bytes: ^1.0.0
+ checksum: aa733c012b7823cf65730603cf3b503c641cee6b239771d3164ca482f22d81a50e434a713938d994071db18e4202625669cc56bccc9d13d818b4c983b5f47fde
+ languageName: node
+ linkType: hard
+
"sanitize.css@npm:*":
version: 13.0.0
resolution: "sanitize.css@npm:13.0.0"
@@ -43311,15 +43787,15 @@ __metadata:
languageName: node
linkType: hard
-"secp256k1@npm:^5.0.1":
- version: 5.0.1
- resolution: "secp256k1@npm:5.0.1"
+"secp256k1@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "secp256k1@npm:5.0.0"
dependencies:
- elliptic: ^6.5.7
+ elliptic: ^6.5.4
node-addon-api: ^5.0.0
node-gyp: latest
node-gyp-build: ^4.2.0
- checksum: e21fb801502fe03a233f04c294cfdf16bd6087c36caa6514ccc5eac38ebd5ff50090a59d0ee7d50adf87f6d508a8211d09b905290fac97b4d43751967b7dfd9e
+ checksum: a0719dff4687c38d385b5e0b7e811c51a4ea24893128be9d097aee99f879eb0ea52582590deb15a49da627a3db23c6b028ad5c9c6ac1fca92ce760153b8cf21c
languageName: node
linkType: hard
@@ -43425,6 +43901,15 @@ __metadata:
languageName: node
linkType: hard
+"serialize-error@npm:^8.0.1":
+ version: 8.1.0
+ resolution: "serialize-error@npm:8.1.0"
+ dependencies:
+ type-fest: ^0.20.2
+ checksum: 2eef236d50edd2d7926e602c14fb500dc3a125ee52e9f08f67033181b8e0be5d1122498bdf7c23c80683cddcad083a27974e9e7111ce23165f4d3bcdd6d65102
+ languageName: node
+ linkType: hard
+
"serialize-javascript@npm:6.0.0":
version: 6.0.0
resolution: "serialize-javascript@npm:6.0.0"
@@ -43674,7 +44159,7 @@ __metadata:
languageName: node
linkType: hard
-"shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.1":
+"shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.2, shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.1":
version: 1.8.1
resolution: "shell-quote@npm:1.8.1"
checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b
@@ -44615,6 +45100,13 @@ __metadata:
languageName: node
linkType: hard
+"stream-chain@npm:^2.2.5":
+ version: 2.2.5
+ resolution: "stream-chain@npm:2.2.5"
+ checksum: c83cbf504bd11e2bcbe761a92801295b3decac7ffa4092ceffca2eb1b5d0763bcc511fa22cd8044e8a18c21ca66794fd10c8d9cd1292a3e6c0d83a4194c6b8ed
+ languageName: node
+ linkType: hard
+
"stream-combiner@npm:~0.0.4":
version: 0.0.4
resolution: "stream-combiner@npm:0.0.4"
@@ -44645,6 +45137,15 @@ __metadata:
languageName: node
linkType: hard
+"stream-json@npm:^1.7.4, stream-json@npm:^1.7.5":
+ version: 1.8.0
+ resolution: "stream-json@npm:1.8.0"
+ dependencies:
+ stream-chain: ^2.2.5
+ checksum: c17ac72228815850fc5226d8c0a80afd6c2ffbfa71c572ad99ad2eac145dc836a3fc6f62a298b3df716f1726cc1ed8a448892ed9fb6123f46abf2f89c908749f
+ languageName: node
+ linkType: hard
+
"stream-shift@npm:^1.0.0, stream-shift@npm:^1.0.2":
version: 1.0.3
resolution: "stream-shift@npm:1.0.3"
@@ -45688,6 +46189,15 @@ __metadata:
languageName: node
linkType: hard
+"telnet-client@npm:1.2.8":
+ version: 1.2.8
+ resolution: "telnet-client@npm:1.2.8"
+ dependencies:
+ bluebird: ^3.5.4
+ checksum: d2430c5449a46f6f4f9a7c2c648164f014c308aa0d3207a4d6b5b7f0e443322d07b180ecac63ad43eadb6557c8ef5ae7dce1ea6276464c8c82c8c6a9c9c01bf2
+ languageName: node
+ linkType: hard
+
"temp-dir@npm:^1.0.0":
version: 1.0.0
resolution: "temp-dir@npm:1.0.0"
@@ -45721,6 +46231,16 @@ __metadata:
languageName: node
linkType: hard
+"tempfile@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "tempfile@npm:2.0.0"
+ dependencies:
+ temp-dir: ^1.0.0
+ uuid: ^3.0.1
+ checksum: 8a92a0f57e0ae457dfbc156b14c427b42048a86ca6bade311835cc2aeda61b25b82d688f71f2d663dde6f172f479ed07293b53f7981e41cb6f9120a3eb4fe797
+ languageName: node
+ linkType: hard
+
"tempy@npm:0.3.0":
version: 0.3.0
resolution: "tempy@npm:0.3.0"
@@ -46222,6 +46742,15 @@ __metadata:
languageName: node
linkType: hard
+"trace-event-lib@npm:^1.3.1":
+ version: 1.4.1
+ resolution: "trace-event-lib@npm:1.4.1"
+ dependencies:
+ browser-process-hrtime: ^1.0.0
+ checksum: f10dbfeccee9ec80a8cf69ecadd49fa609fc2593fb50a83cc4b664524c0531f91009134bf54302f9c4911afed119b0eebb8d2724723fc44516e24a40aaae9219
+ languageName: node
+ linkType: hard
+
"traverse@npm:~0.6.6":
version: 0.6.6
resolution: "traverse@npm:0.6.6"
@@ -46273,6 +46802,15 @@ __metadata:
languageName: node
linkType: hard
+"truncate-utf8-bytes@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "truncate-utf8-bytes@npm:1.0.2"
+ dependencies:
+ utf8-byte-length: ^1.0.1
+ checksum: ad097314709ea98444ad9c80c03aac8da805b894f37ceb5685c49ad297483afe3a5ec9572ebcaff699dda72b6cd447a2ba2a3fd10e96c2628cd16d94abeb328a
+ languageName: node
+ linkType: hard
+
"tryer@npm:^1.0.1":
version: 1.0.1
resolution: "tryer@npm:1.0.1"
@@ -46496,7 +47034,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.6.2, tslib@npm:^2.8.0":
+"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.5.3, tslib@npm:^2.6.2, tslib@npm:^2.8.0":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
@@ -47368,8 +47906,6 @@ __metadata:
"@react-native-async-storage/async-storage": 1.17.10
"@react-native-community/netinfo": 9.3.0
"@reduxjs/toolkit": 1.9.3
- "@simplewebauthn/browser": 11.0.0
- "@simplewebauthn/types": 11.0.0
"@tanstack/query-async-storage-persister": 5.51.21
"@tanstack/react-query": 5.51.16
"@tanstack/react-query-persist-client": 5.51.23
@@ -47380,20 +47916,18 @@ __metadata:
"@types/chrome": 0.0.254
"@types/react-window": 1.8.2
"@uniswap/analytics-events": 2.40.0
- "@uniswap/client-embeddedwallet": 0.0.13
- "@uniswap/client-explore": 0.0.14
+ "@uniswap/client-explore": 0.0.12
"@uniswap/client-pools": 0.0.12
"@uniswap/eslint-config": "workspace:^"
"@uniswap/permit2-sdk": 1.3.0
- "@uniswap/router-sdk": 1.18.0
- "@uniswap/sdk-core": 7.1.0
+ "@uniswap/router-sdk": 1.15.0
+ "@uniswap/sdk-core": 6.1.0
"@uniswap/uniswapx-sdk": 3.0.0-beta.1
- "@uniswap/v2-sdk": 4.9.0
- "@uniswap/v3-sdk": 3.21.0
- "@uniswap/v4-sdk": 1.15.0
+ "@uniswap/v2-sdk": 4.7.0
+ "@uniswap/v3-sdk": 3.19.0
+ "@uniswap/v4-sdk": 1.12.0
apollo-link-rest: 0.9.0
axios: 1.6.5
- date-fns: 2.30.0
dayjs: 1.11.7
depcheck: 1.4.7
es-toolkit: 1.10.0
@@ -47532,6 +48066,18 @@ __metadata:
languageName: node
linkType: hard
+"unplugin@npm:1.0.1":
+ version: 1.0.1
+ resolution: "unplugin@npm:1.0.1"
+ dependencies:
+ acorn: ^8.8.1
+ chokidar: ^3.5.3
+ webpack-sources: ^3.2.3
+ webpack-virtual-modules: ^0.5.0
+ checksum: b6bf00dcc79e71cd55d2b4dd39ec7c8ec40b071dc10c14e29095df5dccb13ad0ca1cf14e5da38bb16b8704f8eface750b7a3be9ee7ca2574ce31096ee966b356
+ languageName: node
+ linkType: hard
+
"unplugin@npm:^1.3.1":
version: 1.16.0
resolution: "unplugin@npm:1.16.0"
@@ -47848,12 +48394,19 @@ __metadata:
linkType: hard
"utf-8-validate@npm:^6.0.3":
- version: 6.0.5
- resolution: "utf-8-validate@npm:6.0.5"
+ version: 6.0.3
+ resolution: "utf-8-validate@npm:6.0.3"
dependencies:
node-gyp: latest
node-gyp-build: ^4.3.0
- checksum: ab6bd5b0db2241a990a9e1c434a29194900f9f8f715158b56d591306634cdd4f748e91b965d91a32fd459c86b082ec0a35d369bbc4efbb243b48f593c14448e8
+ checksum: 5e21383c81ff7469c1912119ca69d07202d944c73ddd8a54b84dddcc546b939054e5101c78c294e494d206fe93bd43428adc635a0660816b3ec9c8ec89286ac4
+ languageName: node
+ linkType: hard
+
+"utf8-byte-length@npm:^1.0.1":
+ version: 1.0.4
+ resolution: "utf8-byte-length@npm:1.0.4"
+ checksum: f188ca076ec094d58e7009fcc32623c5830c7f0f3e15802bfa4fdd1e759454a481fc4ac05e0fa83b7736e77af628a9ee0e57dcc89683d688fde3811473e42143
languageName: node
linkType: hard
@@ -47942,7 +48495,7 @@ __metadata:
"@uniswap/analytics": 1.7.0
"@uniswap/analytics-events": 2.40.0
"@uniswap/eslint-config": "workspace:^"
- "@uniswap/sdk-core": 7.1.0
+ "@uniswap/sdk-core": 6.1.0
aws-appsync-auth-link: 3.0.7
aws-appsync-subscription-link: 3.1.3
dayjs: 1.11.7
@@ -47989,7 +48542,7 @@ __metadata:
languageName: node
linkType: hard
-"uuid@npm:^3.3.2":
+"uuid@npm:^3.0.1, uuid@npm:^3.3.2":
version: 3.4.0
resolution: "uuid@npm:3.4.0"
bin:
@@ -48172,17 +48725,17 @@ __metadata:
languageName: node
linkType: hard
-"viem@npm:2.21.51":
- version: 2.21.51
- resolution: "viem@npm:2.21.51"
+"viem@npm:2.x":
+ version: 2.21.21
+ resolution: "viem@npm:2.21.21"
dependencies:
+ "@adraffy/ens-normalize": 1.11.0
"@noble/curves": 1.6.0
"@noble/hashes": 1.5.0
"@scure/bip32": 1.5.0
"@scure/bip39": 1.4.0
abitype: 1.0.6
isows: 1.0.6
- ox: 0.1.2
webauthn-p256: 0.0.10
ws: 8.18.0
peerDependencies:
@@ -48190,7 +48743,28 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: 8f3ae4cacdbba57bc804240be1c9b602959b7022e435c2594fe26d704932009715fb2e2322a9a8c9d3a0ffbea6cf9f5d9d8db448e98fb56d23104d38d13ce3d5
+ checksum: 71100fbbbf09ef743c7a2b3cfea94c0647c864856d2119cbdbf6abd3bd467310d02263492ec45f88dac20acfbdbd50c6eeea21e76f9e42ab5274245f11c975cf
+ languageName: node
+ linkType: hard
+
+"viem@npm:^1.0.0, viem@npm:^1.1.4":
+ version: 1.21.4
+ resolution: "viem@npm:1.21.4"
+ dependencies:
+ "@adraffy/ens-normalize": 1.10.0
+ "@noble/curves": 1.2.0
+ "@noble/hashes": 1.3.2
+ "@scure/bip32": 1.3.2
+ "@scure/bip39": 1.2.1
+ abitype: 0.9.8
+ isows: 1.0.3
+ ws: 8.13.0
+ peerDependencies:
+ typescript: ">=5.0.4"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: c351fdea2d53d2d781ac73c964348b3b9fc5dd46f9eb53903e867705fc9e30a893cb9f2c8d7a00acdcdeca27d14eeebf976eed9f948c28c47018dc9211369117
languageName: node
linkType: hard
@@ -48470,11 +49044,11 @@ __metadata:
"@uniswap/analytics-events": 2.40.0
"@uniswap/eslint-config": "workspace:^"
"@uniswap/permit2-sdk": 1.3.0
- "@uniswap/router-sdk": 1.18.0
- "@uniswap/sdk-core": 7.1.0
+ "@uniswap/router-sdk": 1.15.0
+ "@uniswap/sdk-core": 6.1.0
"@uniswap/uniswapx-sdk": 3.0.0-beta.1
- "@uniswap/universal-router-sdk": 4.10.0
- "@uniswap/v3-sdk": 3.21.0
+ "@uniswap/universal-router-sdk": 4.7.0
+ "@uniswap/v3-sdk": 3.19.0
apollo3-cache-persist: 0.14.1
axios: 1.6.5
dayjs: 1.11.7
@@ -48498,7 +49072,7 @@ __metadata:
react-native-context-menu-view: 1.15.0
react-native-fast-image: 8.6.3
react-native-gesture-handler: 2.19.0
- react-native-image-picker: 7.2.3
+ react-native-image-picker: 7.0.1
react-native-localize: 2.2.6
react-native-reanimated: 3.15.0
react-native-restart: 0.0.27
@@ -48928,6 +49502,13 @@ __metadata:
languageName: node
linkType: hard
+"webpack-virtual-modules@npm:^0.5.0":
+ version: 0.5.0
+ resolution: "webpack-virtual-modules@npm:0.5.0"
+ checksum: 22b59257b55c89d11ae295b588b683ee9fdf3aeb591bc7b6f88ac1d69cb63f4fcb507666ea986866dfae161a1fa534ad6fb4e2ea91bbcd0a6d454368d7d4c64b
+ languageName: node
+ linkType: hard
+
"webpack-virtual-modules@npm:^0.6.0, webpack-virtual-modules@npm:^0.6.2":
version: 0.6.2
resolution: "webpack-virtual-modules@npm:0.6.2"
@@ -49661,7 +50242,7 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7, ws@npm:^7.3.1, ws@npm:^7.4.6, ws@npm:^7.5.1, ws@npm:^7.5.10":
+"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7, ws@npm:^7.0.0, ws@npm:^7.3.1, ws@npm:^7.4.6, ws@npm:^7.5.1, ws@npm:^7.5.10":
version: 7.5.10
resolution: "ws@npm:7.5.10"
peerDependencies:
@@ -49929,14 +50510,14 @@ __metadata:
languageName: node
linkType: hard
-"yargs-parser@npm:^21.1.1":
+"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.1.1":
version: 21.1.1
resolution: "yargs-parser@npm:21.1.1"
checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c
languageName: node
linkType: hard
-"yargs-unparser@npm:2.0.0":
+"yargs-unparser@npm:2.0.0, yargs-unparser@npm:^2.0.0":
version: 2.0.0
resolution: "yargs-unparser@npm:2.0.0"
dependencies: