From 10c31ea22d98f4635522526c864a6bec8552e374 Mon Sep 17 00:00:00 2001 From: JunJie Date: Thu, 19 Mar 2026 15:04:28 +0800 Subject: [PATCH 01/12] feat: add rise && pharos mainnet --- .../dodoex-api/src/chainConfig/basicToken.ts | 11 ++++++ packages/dodoex-api/src/chainConfig/chain.ts | 3 ++ .../src/chainConfig/contractConfig.ts | 32 ++++++++++++++- .../dodoex-api/src/chainConfig/platform.ts | 2 + packages/dodoex-widgets/package.json | 4 +- .../dodoex-widgets/src/constants/chainList.ts | 19 +++++++++ .../dodoex-widgets/src/constants/chains.ts | 10 +++++ yarn.lock | 39 +++++++++++++++---- 8 files changed, 110 insertions(+), 10 deletions(-) diff --git a/packages/dodoex-api/src/chainConfig/basicToken.ts b/packages/dodoex-api/src/chainConfig/basicToken.ts index 66522e91..b235d35a 100644 --- a/packages/dodoex-api/src/chainConfig/basicToken.ts +++ b/packages/dodoex-api/src/chainConfig/basicToken.ts @@ -149,6 +149,10 @@ export const basicTokenMap: { ...DEFAULT_BASIC_TOKEN, wrappedTokenAddress: '0x4200000000000000000000000000000000000006', }, + [ChainId.RISE]: { + ...DEFAULT_BASIC_TOKEN, + wrappedTokenAddress: '0x4200000000000000000000000000000000000006', + }, [ChainId.NEROCHAIN]: { ...DEFAULT_BASIC_TOKEN, symbol: 'NERO', @@ -203,6 +207,13 @@ export const basicTokenMap: { wrappedTokenSymbol: 'WPHRS', wrappedTokenAddress: '0x838800b758277cc111b2d48ab01e5e164f8e9471', }, + [ChainId.PHAROS]: { + ...DEFAULT_BASIC_TOKEN, + symbol: 'PHRS', + name: 'PHRS', + wrappedTokenSymbol: 'WPHRS', + wrappedTokenAddress: '0x52c48d4213107b20bc583832b0d951fb9ca8f0b0', + }, [ChainId.STABLE_TESTNET]: { ...DEFAULT_BASIC_TOKEN, symbol: 'gUSDT', diff --git a/packages/dodoex-api/src/chainConfig/chain.ts b/packages/dodoex-api/src/chainConfig/chain.ts index 7a1890ad..beff0e20 100644 --- a/packages/dodoex-api/src/chainConfig/chain.ts +++ b/packages/dodoex-api/src/chainConfig/chain.ts @@ -45,6 +45,8 @@ export enum ChainId { RISE_TESTNET = 11155931, + RISE = 4153, + NEROCHAIN = 1689, BITLAYER = 200901, @@ -61,6 +63,7 @@ export enum ChainId { PHAROS_TESTNET = 688688, PHAROS_ATLANTIC_TESTNET = 688689, + PHAROS = 1672, STABLE_TESTNET = 2201, STABLE = 988, diff --git a/packages/dodoex-api/src/chainConfig/contractConfig.ts b/packages/dodoex-api/src/chainConfig/contractConfig.ts index d05f8433..442a95c6 100644 --- a/packages/dodoex-api/src/chainConfig/contractConfig.ts +++ b/packages/dodoex-api/src/chainConfig/contractConfig.ts @@ -16,7 +16,9 @@ import { pharosAtlanticTestnet, stableTestnet, stable, - eni + eni, + rise, + pharos } from '@dodoex/dodo-contract-request'; import { ChainId } from './chain'; @@ -390,6 +392,20 @@ const contractMap: { DODO_DPP_PROXY: riseTestnet.DODODppProxy, DODO_MINEV3_PROXY: riseTestnet.DODOMineV3Proxy, }, + [ChainId.RISE]: { + MULTI_CALL: rise.MulticallWithValid, + DODO_APPROVE: rise.DODOApprove, + ERC20_HELPER: rise.ERC20Helper, + + ROUTE_V2_DATA_FETCH: rise.DODOV2RouteHelper, + ROUTE_V1_DATA_FETCH: rise.DODOV1PmmHelper, + CALLEE_HELPER: rise.DODOCalleeHelper, + + DODO_PROXY: rise.DODOV2Proxy02, + DODO_DSP_PROXY: rise.DODODspProxy, + DODO_DPP_PROXY: rise.DODODppProxy, + DODO_MINEV3_PROXY: rise.DODOMineV3Proxy, + }, [ChainId.NEROCHAIN]: { MULTI_CALL: nero.MulticallWithValid, DODO_APPROVE: nero.DODOApprove, @@ -516,6 +532,20 @@ const contractMap: { DODO_DPP_PROXY: pharosAtlanticTestnet.DODODppProxy, DODO_MINEV3_PROXY: pharosAtlanticTestnet.DODOMineV3Proxy, }, + [ChainId.PHAROS]: { + MULTI_CALL: pharos.MulticallWithValid, + DODO_APPROVE: pharos.DODOApprove, + ERC20_HELPER: pharos.ERC20Helper, + + ROUTE_V2_DATA_FETCH: pharos.DODOV2RouteHelper, + ROUTE_V1_DATA_FETCH: pharos.DODOV1PmmHelper, + CALLEE_HELPER: pharos.DODOCalleeHelper, + + DODO_PROXY: pharos.DODOV2Proxy02, + DODO_DSP_PROXY: pharos.DODODspProxy, + DODO_DPP_PROXY: pharos.DODODppProxy, + DODO_MINEV3_PROXY: pharos.DODOMineV3Proxy, + }, [ChainId.STABLE_TESTNET]: { MULTI_CALL: stableTestnet.MulticallWithValid, DODO_APPROVE: stableTestnet.DODOApprove, diff --git a/packages/dodoex-api/src/chainConfig/platform.ts b/packages/dodoex-api/src/chainConfig/platform.ts index b45c657f..235ad4b9 100644 --- a/packages/dodoex-api/src/chainConfig/platform.ts +++ b/packages/dodoex-api/src/chainConfig/platform.ts @@ -27,6 +27,7 @@ export const platformIdMap: { [ChainId.NEOX]: 'neox', [ChainId.MORPH]: 'morph', [ChainId.RISE_TESTNET]: 'rise-testnet', + [ChainId.RISE]: 'rise', [ChainId.NEROCHAIN]: 'nero', [ChainId.BITLAYER]: 'btr', [ChainId.ZIRCUIT]: 'zircuit-mainnet', @@ -36,6 +37,7 @@ export const platformIdMap: { [ChainId.HEMI]: 'hemi', [ChainId.PHAROS_TESTNET]: 'pharos-testnet', [ChainId.PHAROS_ATLANTIC_TESTNET]: 'pharos-atlantic-testnet', + [ChainId.PHAROS]: 'pharos', [ChainId.STABLE_TESTNET]: 'stable-testnet', [ChainId.STABLE]: 'stable', [ChainId.ENI]: 'eni', diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index dc9742a7..7cea9ceb 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -61,7 +61,7 @@ "@dodoex/api": "^3.7.0", "@dodoex/components": "^3.3.0", "@dodoex/contract-request": "^1.3.0", - "@dodoex/dodo-contract-request": "^1.34.0", + "@dodoex/dodo-contract-request": "^1.35.0-alpha.2", "@dodoex/icons": "^2.1.0", "@emotion/react": "^11.10.0", "@emotion/styled": "^11.10.0", @@ -159,4 +159,4 @@ "optionalDependencies": { "pino-pretty": "^13.1.3" } -} \ No newline at end of file +} diff --git a/packages/dodoex-widgets/src/constants/chainList.ts b/packages/dodoex-widgets/src/constants/chainList.ts index 0a486ac8..60be927f 100644 --- a/packages/dodoex-widgets/src/constants/chainList.ts +++ b/packages/dodoex-widgets/src/constants/chainList.ts @@ -233,6 +233,15 @@ export const chainListMap: Map = new Map([ chainId: ChainId.RISE_TESTNET, logo: RiseLogo, name: 'Rise-Sepolia', + mainnet: ChainId.RISE, + }, + ], + [ + ChainId.RISE, + { + chainId: ChainId.RISE, + logo: RiseLogo, + name: 'Rise', }, ], [ @@ -297,6 +306,7 @@ export const chainListMap: Map = new Map([ chainId: ChainId.PHAROS_TESTNET, logo: PharosLogo, name: 'Pharos Testnet', + mainnet: ChainId.PHAROS, }, ], [ @@ -305,6 +315,15 @@ export const chainListMap: Map = new Map([ chainId: ChainId.PHAROS_ATLANTIC_TESTNET, logo: PharosLogo, name: 'Pharos Atlantic Testnet', + mainnet: ChainId.PHAROS, + }, + ], + [ + ChainId.PHAROS, + { + chainId: ChainId.PHAROS, + logo: PharosLogo, + name: 'Pharos', }, ], [ diff --git a/packages/dodoex-widgets/src/constants/chains.ts b/packages/dodoex-widgets/src/constants/chains.ts index 000bc848..d0853f16 100644 --- a/packages/dodoex-widgets/src/constants/chains.ts +++ b/packages/dodoex-widgets/src/constants/chains.ts @@ -56,6 +56,7 @@ export const rpcServerMap: { [ChainId.NEOX]: ['https://mainnet-1.rpc.banelabs.org'], [ChainId.MORPH]: ['https://rpc.morphl2.io'], [ChainId.RISE_TESTNET]: ['https://testnet.riselabs.xyz'], + [ChainId.RISE]: ['https://rpc.risechain.com'], [ChainId.NEROCHAIN]: ['https://rpc.nerochain.io'], [ChainId.BITLAYER]: ['https://rpc.bitlayer.org'], [ChainId.ZIRCUIT]: ['https://zircuit1-mainnet.liquify.com'], @@ -69,6 +70,7 @@ export const rpcServerMap: { [ChainId.PHAROS_ATLANTIC_TESTNET]: [ 'https://api.zan.top/node/v1/pharos/atlantic/54b49326c9f44b6e8730dc5dd4348421', ], + [ChainId.PHAROS]: ['https://rpc.pharos.xyz'], [ChainId.STABLE_TESTNET]: ['https://rpc.testnet.stable.xyz'], [ChainId.STABLE]: [ 'https://partners-rpc.stable.xyz/dodo.88b3272adaac2ddaa08f13c049824412d7bffe24a2c760089f6c480115ac00e1', @@ -126,6 +128,7 @@ export const scanUrlDomainMap: { [ChainId.NEOX]: 'xexplorer.neo.org', [ChainId.MORPH]: 'explorer.morphl2.io', [ChainId.RISE_TESTNET]: 'explorer.testnet.riselabs.xyz', + [ChainId.RISE]: 'explorer.risechain.com', [ChainId.NEROCHAIN]: 'www.neroscan.io', [ChainId.BITLAYER]: 'www.btrscan.com', [ChainId.ZIRCUIT]: 'explorer.zircuit.com', @@ -135,6 +138,7 @@ export const scanUrlDomainMap: { [ChainId.HEMI]: 'explorer.hemi.xyz', [ChainId.PHAROS_TESTNET]: 'testnet.pharosscan.xyz', [ChainId.PHAROS_ATLANTIC_TESTNET]: 'atlantic.pharosscan.xyz', + [ChainId.PHAROS]: 'pharos.socialscan.io', [ChainId.STABLE_TESTNET]: 'testnet.stablescan.xyz', [ChainId.STABLE]: 'stablescan.xyz', [ChainId.ENI]: 'scan.eniac.network', @@ -167,6 +171,7 @@ export const ThegraphKeyMap: { [ChainId.NEOX]: 'neox', [ChainId.MORPH]: 'morph', [ChainId.RISE_TESTNET]: 'rise-testnet', + [ChainId.RISE]: 'rise', [ChainId.NEROCHAIN]: 'nero', [ChainId.BITLAYER]: 'btr', [ChainId.ZIRCUIT]: 'zircuit-mainnet', @@ -176,6 +181,7 @@ export const ThegraphKeyMap: { [ChainId.HEMI]: 'hemi', [ChainId.PHAROS_TESTNET]: 'pharos-testnet', [ChainId.PHAROS_ATLANTIC_TESTNET]: 'pharos-atlantic-testnet', + [ChainId.PHAROS]: 'pharos', [ChainId.STABLE_TESTNET]: 'stable-testnet', [ChainId.STABLE]: 'stable', [ChainId.ENI]: 'eni', @@ -208,6 +214,7 @@ export const blockTimeMap: { [ChainId.NEOX]: 12000, [ChainId.MORPH]: 3200, [ChainId.RISE_TESTNET]: 0, + [ChainId.RISE]: 0, [ChainId.NEROCHAIN]: 3000, [ChainId.BITLAYER]: 3000, [ChainId.ZIRCUIT]: 2000, @@ -217,6 +224,7 @@ export const blockTimeMap: { [ChainId.HEMI]: 12000, [ChainId.PHAROS_TESTNET]: 0, [ChainId.PHAROS_ATLANTIC_TESTNET]: 2777, + [ChainId.PHAROS]: 0, [ChainId.STABLE_TESTNET]: 700, [ChainId.STABLE]: 988, [ChainId.ENI]: 1000, @@ -249,6 +257,7 @@ export const dexKeysMap: { [ChainId.NEOX]: [], [ChainId.MORPH]: [], [ChainId.RISE_TESTNET]: [], + [ChainId.RISE]: [], [ChainId.NEROCHAIN]: [], [ChainId.BITLAYER]: [], [ChainId.ZIRCUIT]: [], @@ -258,6 +267,7 @@ export const dexKeysMap: { [ChainId.HEMI]: [], [ChainId.PHAROS_TESTNET]: [], [ChainId.PHAROS_ATLANTIC_TESTNET]: [], + [ChainId.PHAROS]: [], [ChainId.STABLE_TESTNET]: [], [ChainId.STABLE]: [], [ChainId.ENI]: [], diff --git a/yarn.lock b/yarn.lock index baf5c56b..939664f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1409,10 +1409,10 @@ ethers "^6.13.2" https-proxy-agent "^7.0.5" -"@dodoex/dodo-contract-request@^1.34.0": - version "1.34.0" - resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.34.0.tgz#eec8675678aa43eccd38b5744970e4aaaf52f4dd" - integrity sha512-/vsLhH7upXPpTI97pK2Zr9sNR+FVV5nNSDSe4qnEjFWp9IJNa0YFwjoBMR2QnqDHLH7PTt5B0Q1jzFZ/8MbDEA== +"@dodoex/dodo-contract-request@^1.35.0-alpha.2": + version "1.35.0-alpha.2" + resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.35.0-alpha.2.tgz#be5f77553104aac846f2b65b3726239867e322d1" + integrity sha512-xPlRQB7X6ABeyJRFGaeF8ILh1Q64e1CDXus8rX9TN0msxihIQXKN1BgH2l9lCkHDaBT7oU67YPnIzXgmhTlgCQ== dependencies: typescript "^5" @@ -20398,7 +20398,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -20416,6 +20416,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -20515,7 +20524,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -20543,6 +20552,13 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.2" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" @@ -22106,7 +22122,7 @@ workerpool@^6.5.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -22132,6 +22148,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 2cba8a40d1a3ca3a6a12f4234da2c543a01aed75 Mon Sep 17 00:00:00 2001 From: JunJie Date: Thu, 19 Mar 2026 15:57:19 +0800 Subject: [PATCH 02/12] chore: update version --- packages/dodoex-api/package.json | 5 +++-- packages/dodoex-widgets/package.json | 4 ++-- yarn.lock | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index a2c0f9f1..5cb657c4 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.8.0", + "version": "3.9.0-alpha.1", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", @@ -103,4 +103,5 @@ "ts-jest": "^29.0.1", "typescript": "^5.6.3" } -} \ No newline at end of file +} + diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 7cea9ceb..8dee0fe7 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.19.0", + "version": "3.20.0-alpha.1", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -58,7 +58,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "^3.7.0", + "@dodoex/api": "^3.9.0-alpha.1", "@dodoex/components": "^3.3.0", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "^1.35.0-alpha.2", diff --git a/yarn.lock b/yarn.lock index 939664f9..2ddf8ebd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1401,6 +1401,20 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@dodoex/api@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@dodoex/api/-/api-3.7.0.tgz#6013ad664da411da63e3e6c0f830ae0683eabd5e" + integrity sha512-2WluSN00OnzcZG7uFa4KNrqBbpMPrkr9K3QGaDqxv97+q6oe+QQ+us/ITjxihSp3kAQ59m1OSssqkUmA17CDwQ== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/web" "^5.7.1" + cross-fetch "^4.0.0" + graphql "^16.8.1" + graphql-request "^6.1.0" + qs "^6.11.2" + "@dodoex/contract-request@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@dodoex/contract-request/-/contract-request-1.3.0.tgz#226272dc0460be4a02f2bdde6483d7ad84ce8afa" From 36c55e29267458db81c129e7dbb7828500e185f1 Mon Sep 17 00:00:00 2001 From: JunJie Date: Tue, 23 Jun 2026 16:03:16 +0800 Subject: [PATCH 03/12] feat: support external walletState injection via useWalletInfo - Migrate direct useWeb3React() reads (account/chainId/provider) to the useWalletInfo() hook across swap, bridge, pool and mining modules - Add optional walletState prop to Widget so integrators can inject their own account/chainId/provider; skip internal auto-connect when present - useWeb3Connectors: skip integrator connection sync when walletState manages state externally - NumberInput: keep raw input while typing, sync to sanitized value on blur - Guard chain-mismatch checks on account presence (Swap, NeedConnectButton) - useSwitchChain: allow non-MetaMask providers - Normalize provider unwrap to (provider as any)?.provider ?? provider - Fix Pharos mainnet explorer domain to www.pharosscan.xyz - chore: bump version to 3.20.0-alpha.7 Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/dodoex-widgets/package.json | 2 +- .../src/components/AddTokenToMetamask.tsx | 4 +-- .../src/components/AddressWithLinkAndCopy.tsx | 4 +-- .../ConnectWallet/ConnectWalletDialog.tsx | 3 +- .../ConnectWallet/NeedConnectButton.tsx | 5 +++- .../Swap/SwapOrderHistory/index.tsx | 4 +-- .../Swap/components/TokenCard/NumberInput.tsx | 28 +++++++++++++++---- .../src/components/Swap/index.tsx | 8 +++--- .../components/SwitchChainDialog/index.tsx | 4 +-- .../src/components/TokenPicker/TokenItem.tsx | 4 +-- .../src/components/Widget/index.tsx | 20 +++++++++++-- .../components/WithExecutionDialog/index.tsx | 4 +-- .../dodoex-widgets/src/constants/chains.ts | 2 +- .../hooks/Bridge/useExecuteBridgeRoute.tsx | 4 +-- .../hooks/Bridge/useFetchRoutePriceBridge.ts | 4 +-- .../src/hooks/Bridge/useSendRoute.ts | 4 +-- .../src/hooks/Chain/useChainList.ts | 4 +-- .../src/hooks/ConnectWallet/useSwitchChain.ts | 8 +++--- .../src/hooks/ConnectWallet/useWalletInfo.ts | 14 +++++++--- .../hooks/ConnectWallet/useWeb3Connectors.ts | 12 ++++---- .../src/hooks/Submission/useExecution.ts | 6 ++-- .../src/hooks/Swap/useCustomSlippage.ts | 4 +-- .../src/hooks/Swap/useExecuteSwap.ts | 4 +-- .../src/hooks/Swap/useFetchRoutePrice.ts | 4 +-- .../src/hooks/Swap/useInitDefaultToken.ts | 4 ++- .../src/hooks/Token/useFindTokenByAddress.ts | 4 +-- .../src/hooks/Token/useSelectChainList.ts | 4 +-- .../src/hooks/contract/useFetchBlockNumber.ts | 4 +-- .../src/hooks/contract/useFetchTokens.ts | 4 +-- packages/dodoex-widgets/src/locales/en-US.po | 6 ++-- packages/dodoex-widgets/src/locales/zh-CN.po | 6 ++-- .../MiningWidget/MiningDetail/index.tsx | 3 +- .../mining-types/BaseMiningCard.tsx | 4 +-- .../MiningList/operate-area/index.tsx | 4 +-- .../MiningWidget/OperateArea/index.tsx | 4 +-- .../hooks/useMiningBlockNumber.ts | 4 +-- .../hooks/useReviewRewardToken.ts | 4 +-- .../MiningWidget/hooks/useRewardListAmount.ts | 4 +-- .../operate-widgets/TokenPairSelect.tsx | 4 +-- .../components/MoreDetail/ParametersTable.tsx | 4 +-- .../components/MoreDetail/SwapsTable.tsx | 4 +-- .../hooks/usePoolListFilterChainId.ts | 4 +-- .../operate-widgets/BottomButtonGroup.tsx | 6 ++-- .../PoolWidget/PoolOperate/AddPoolOperate.tsx | 4 +-- .../PoolOperate/PoolOperateInner.tsx | 4 +-- .../PoolOperate/RemovePoolOperate.tsx | 4 +-- .../PoolOperate/components/OperateBtn.tsx | 4 +-- .../widgets/PoolWidget/PoolOperate/index.tsx | 4 +-- .../hooks/contract/useModifyDppPool.ts | 4 +-- yarn.lock | 14 ---------- 50 files changed, 155 insertions(+), 124 deletions(-) diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 8dee0fe7..5bb6e504 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.1", + "version": "3.20.0-alpha.7", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-widgets/src/components/AddTokenToMetamask.tsx b/packages/dodoex-widgets/src/components/AddTokenToMetamask.tsx index 57c1d8b5..115308d3 100644 --- a/packages/dodoex-widgets/src/components/AddTokenToMetamask.tsx +++ b/packages/dodoex-widgets/src/components/AddTokenToMetamask.tsx @@ -1,6 +1,6 @@ import { Box, BoxProps } from '@dodoex/components'; import { t } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; +import { useWalletInfo } from '../hooks/ConnectWallet/useWalletInfo'; import { merge } from 'lodash'; import { MouseEventHandler, useState } from 'react'; import { ReactComponent as metamaskLogo } from '../assets/logo/metamask.svg'; @@ -21,7 +21,7 @@ export function AddTokenToMetamask({ children?: React.ReactNode; }) { const [addLoading, setLoading] = useState(false); - const { provider, chainId: currentChainId } = useWeb3React(); + const { provider, chainId: currentChainId } = useWalletInfo(); const switchChain = useSwitchChain(token.chainId); const handleAdd: MouseEventHandler = async (e) => { diff --git a/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx b/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx index e623850c..65b36fa0 100644 --- a/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx +++ b/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx @@ -8,8 +8,8 @@ import { ButtonBase, } from '@dodoex/components'; import { ArrowRight, ArrowTopRightBorder, Share } from '@dodoex/icons'; -import { useWeb3React } from '@web3-react/core'; import { ChainId } from '@dodoex/api'; +import { useWalletInfo } from '../hooks/ConnectWallet/useWalletInfo'; import { getEtherscanPage, truncatePoolAddress } from '../utils'; import { CopyTooltipToast } from './CopyTooltipToast'; @@ -133,7 +133,7 @@ export function AddressWithLinkAndCopy({ }; // eslint-disable-next-line no-nested-ternary const typography = isBig ? 'h5' : isMedium ? 'body1' : 'body2'; - const { chainId: currentChainId } = useWeb3React(); + const { chainId: currentChainId } = useWalletInfo(); const chainId = customChainId ?? currentChainId; const handleOpenResult: AddressTextProps['handleOpen'] = (evt, type) => { diff --git a/packages/dodoex-widgets/src/components/ConnectWallet/ConnectWalletDialog.tsx b/packages/dodoex-widgets/src/components/ConnectWallet/ConnectWalletDialog.tsx index 53a813c3..efb812b3 100644 --- a/packages/dodoex-widgets/src/components/ConnectWallet/ConnectWalletDialog.tsx +++ b/packages/dodoex-widgets/src/components/ConnectWallet/ConnectWalletDialog.tsx @@ -110,7 +110,8 @@ export default function ConnectWalletDialog({ if (webReact.chainId && webReact.chainId !== chainId) { if ( wallet.type === WalletType.METAMASK && - webReact.provider?.provider?.isMetaMask && + ((webReact.provider as any)?.provider ?? webReact.provider) + ?.isMetaMask && switchChain ) { await switchChain(); diff --git a/packages/dodoex-widgets/src/components/ConnectWallet/NeedConnectButton.tsx b/packages/dodoex-widgets/src/components/ConnectWallet/NeedConnectButton.tsx index 2e24e918..00fa5578 100644 --- a/packages/dodoex-widgets/src/components/ConnectWallet/NeedConnectButton.tsx +++ b/packages/dodoex-widgets/src/components/ConnectWallet/NeedConnectButton.tsx @@ -5,6 +5,7 @@ import React from 'react'; import { ChainId } from '@dodoex/api'; import { chainListMap } from '../../constants/chainList'; import { useSwitchChain } from '../../hooks/ConnectWallet/useSwitchChain'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; import { useUserOptions } from '../UserOptionsProvider'; import { useGlobalState } from '../../hooks/useGlobalState'; @@ -17,11 +18,13 @@ export default function NeedConnectButton({ chainId?: ChainId; includeButton?: boolean; }) { - const { account, chainId: currentChainId, connector } = useWeb3React(); + const { account, chainId: currentChainId } = useWalletInfo(); + const { connector } = useWeb3React(); const { onConnectWalletClick, onSwitchChain } = useUserOptions(); const [loading, setLoading] = React.useState(false); const switchChain = useSwitchChain(chainId); const needSwitchNetwork = + !!account && currentChainId !== undefined && chainId !== undefined && currentChainId !== chainId; diff --git a/packages/dodoex-widgets/src/components/Swap/SwapOrderHistory/index.tsx b/packages/dodoex-widgets/src/components/Swap/SwapOrderHistory/index.tsx index dfd976e8..8aa90383 100644 --- a/packages/dodoex-widgets/src/components/Swap/SwapOrderHistory/index.tsx +++ b/packages/dodoex-widgets/src/components/Swap/SwapOrderHistory/index.tsx @@ -1,7 +1,6 @@ import { ChainId } from '@dodoex/api'; import { Box, BoxProps, useTheme } from '@dodoex/components'; import { t, Trans } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; import React from 'react'; import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; import { useTradeSwapOrderList } from '../../../hooks/Swap/useTradeSwapOrderList'; @@ -11,6 +10,7 @@ import SelectChain from '../../SelectChain'; import Table from '../../Table'; import { useUserOptions } from '../../UserOptionsProvider'; import SameOrderCard from './SameOrderCard'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export default function SwapOrderHistory({ swapOrderListQuery: swapOrderListQueryProps, @@ -20,7 +20,7 @@ export default function SwapOrderHistory({ const theme = useTheme(); const { onlyChainId } = useUserOptions(); const { isMobile } = useWidgetDevice(); - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const [filterChainId, setFilterChainId] = React.useState(); const swapOrderListQueryLocal = useTradeSwapOrderList({ diff --git a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx index 189d815f..223f1fc8 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx @@ -1,5 +1,5 @@ import { Box, Input, BoxProps, useTheme, ButtonBase } from '@dodoex/components'; -import { forwardRef, useMemo, ForwardedRef } from 'react'; +import { forwardRef, useMemo, useEffect, useRef, useState, ForwardedRef } from 'react'; import { Error, Clear } from '@dodoex/icons'; import { formatReadableNumber, @@ -38,6 +38,15 @@ export const NumberInput = forwardRef(function NumberInput( ref: ForwardedRef, ) { const theme = useTheme(); + const isFocused = useRef(false); + const [innerValue, setInnerValue] = useState(value || ''); + + // Sync display from external value changes only when not typing + useEffect(() => { + if (!isFocused.current) { + setInnerValue(value || ''); + } + }, [value]); const endAdornment = useMemo(() => { if (suffix) { @@ -82,17 +91,26 @@ export const NumberInput = forwardRef(function NumberInput( return ( { + isFocused.current = true; + onFocus?.(); + }} + onBlur={() => { + isFocused.current = false; + // Sync display to the sanitized value once user leaves + setInnerValue(value || ''); + }} onChange={(evt: any) => { const inputVal = evt.target.value; - const input = + const sanitized = inputVal.length === 0 ? '' : fixedInputStringToFormattedNumber(inputVal, decimals as number); - onChange && onChange(input as string); + setInnerValue(inputVal); // keep raw input on screen while typing + onChange && onChange(sanitized as string); }} data-testid={numberInputWrapper} suffix={(!readOnly || readonlyShowSuffix) && endAdornment} diff --git a/packages/dodoex-widgets/src/components/Swap/index.tsx b/packages/dodoex-widgets/src/components/Swap/index.tsx index bf66ded3..7388eed2 100644 --- a/packages/dodoex-widgets/src/components/Swap/index.tsx +++ b/packages/dodoex-widgets/src/components/Swap/index.tsx @@ -33,7 +33,6 @@ import { useFetchRoutePrice, } from '../../hooks/Swap'; import { formatReadableNumber } from '../../utils/formatter'; -import { useWeb3React } from '@web3-react/core'; import { AppUrl } from '../../constants/api'; import { ChainId } from '@dodoex/api'; import { basicTokenMap } from '../../constants/chains'; @@ -72,6 +71,7 @@ import { SwapSettingsDialog } from './components/SwapSettingsDialog'; import { useSwapSlippage } from '../../hooks/Swap/useSwapSlippage'; import { useGlobalState } from '../../hooks/useGlobalState'; import SwapPreviewInfoCard from './components/SwapPreviewInfoCard'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; export interface SwapProps { showPreviewInfoCard?: boolean; @@ -90,7 +90,7 @@ export function Swap({ }: SwapProps = {}) { const theme = useTheme(); const { isInflight } = useInflights(); - const { chainId, account } = useWeb3React(); + const { chainId, account } = useWalletInfo(); const { defaultChainId, noPowerBy, onlyChainId } = useUserOptions(); const [isReverseRouting, setIsReverseRouting] = useState(false); const basicTokenAddress = useMemo( @@ -462,8 +462,8 @@ export function Swap({ const isUnSupportChain = useMemo(() => !ChainId[chainId || 1], [chainId]); const isNotCurrentChain = useMemo( - () => !!chainId && !!fromToken?.chainId && fromToken?.chainId !== chainId, - [chainId, fromToken?.chainId], + () => !!account && !!chainId && !!fromToken?.chainId && fromToken?.chainId !== chainId, + [account, chainId, fromToken?.chainId], ); const disabledSwitch = useDisabledTokenSwitch({ diff --git a/packages/dodoex-widgets/src/components/SwitchChainDialog/index.tsx b/packages/dodoex-widgets/src/components/SwitchChainDialog/index.tsx index 251514ba..f9edb2cf 100644 --- a/packages/dodoex-widgets/src/components/SwitchChainDialog/index.tsx +++ b/packages/dodoex-widgets/src/components/SwitchChainDialog/index.tsx @@ -6,7 +6,6 @@ import { WidgetModal, } from '@dodoex/components'; import { Trans } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; import { ChangeEvent, useEffect, useState } from 'react'; import { chainListMap } from '../../constants/chainList'; import { ChainId } from '@dodoex/api'; @@ -17,6 +16,7 @@ import { import { useSwitchChain } from '../../hooks/ConnectWallet/useSwitchChain'; import { WIDGET_CLASS_NAME } from '../Widget'; import { useGlobalState } from '../../hooks/useGlobalState'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; export default function SwitchChainDialog({ chainId, @@ -29,7 +29,7 @@ export default function SwitchChainDialog({ }) { const theme = useTheme(); const [openTarget, setOpenTarget] = useState(false); - const { chainId: currentChainId } = useWeb3React(); + const { chainId: currentChainId } = useWalletInfo(); const [autoSwitch, setAutoSwitch] = useState(getAuthSwitchCache()); const switchChain = useSwitchChain(chainId); const { autoConnectLoading } = useGlobalState(); diff --git a/packages/dodoex-widgets/src/components/TokenPicker/TokenItem.tsx b/packages/dodoex-widgets/src/components/TokenPicker/TokenItem.tsx index 45032d8f..570b30ce 100644 --- a/packages/dodoex-widgets/src/components/TokenPicker/TokenItem.tsx +++ b/packages/dodoex-widgets/src/components/TokenPicker/TokenItem.tsx @@ -6,8 +6,8 @@ import { TokenInfo } from './../../hooks/Token'; import { ArrowTopRightBorder, Delete, Loading } from '@dodoex/icons'; import { tokenPickerItem } from '../../constants/testId'; import { useTheme } from '@dodoex/components'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; import TokenDetailInfo from './TokenDetailInfo'; export default function TokenItem({ @@ -26,7 +26,7 @@ export default function TokenItem({ onDelete?: () => void; }) { const theme = useTheme(); - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const balance = balanceBigNumber ? formatReadableNumber({ input: balanceBigNumber, diff --git a/packages/dodoex-widgets/src/components/Widget/index.tsx b/packages/dodoex-widgets/src/components/Widget/index.tsx index aefcf26a..dbe49fbc 100644 --- a/packages/dodoex-widgets/src/components/Widget/index.tsx +++ b/packages/dodoex-widgets/src/components/Widget/index.tsx @@ -1,4 +1,5 @@ import { ChainId, ContractRequests, GraphQLRequests } from '@dodoex/api'; +import { JsonRpcProvider } from '@ethersproject/providers'; import { Box, createTheme, @@ -20,6 +21,7 @@ import { useWeb3Connectors, Web3ConnectorsProps, } from '../../hooks/ConnectWallet'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; import { useFetchBlockNumber } from '../../hooks/contract'; import { ExecutionProps } from '../../hooks/Submission'; import { DefaultTokenInfo, TokenInfo } from '../../hooks/Token/type'; @@ -85,6 +87,16 @@ export interface WidgetProps noSubmissionDialog?: boolean; showSubmissionSubmittedDialog?: boolean; + /** + * External wallet state. When provided, the widget reads account/chainId/provider + * directly from this object instead of managing its own wallet connection. + * The integrator is responsible for keeping this up-to-date. + */ + walletState?: { + account?: string; + chainId?: number; + provider?: JsonRpcProvider; + }; onProviderChanged?: (provider?: any) => void; getStaticJsonRpcProviderByChainId?: Exclude< ConstructorParameters[0], @@ -149,11 +161,12 @@ function InitStatus(props: PropsWithChildren) { useInitTokenList(props); useFetchBlockNumber(); useInitContractRequest(); - const { provider, connector, chainId } = useWeb3React(); + const { connector } = useWeb3React(); + const { provider, chainId } = useWalletInfo(); const { autoConnectLoading } = useGlobalState(); useEffect(() => { if (autoConnectLoading === undefined) { - if (props.noAutoConnect) { + if (props.noAutoConnect || props.walletState) { setAutoConnectLoading(false); } else { setAutoConnectLoading(true); @@ -199,7 +212,7 @@ function InitStatus(props: PropsWithChildren) { if (props.onProviderChanged) { props.onProviderChanged(provider); } - const _provider = provider?.provider as any; + const _provider = (provider as any)?.provider ?? provider; const handleChainChanged = async () => { setAutoConnectLoading(true); try { @@ -266,6 +279,7 @@ function Web3Provider(props: PropsWithChildren) { provider: props.provider, jsonRpcUrlMap: props.jsonRpcUrlMap, defaultChainId, + walletState: props.walletState, }); return ( diff --git a/packages/dodoex-widgets/src/components/WithExecutionDialog/index.tsx b/packages/dodoex-widgets/src/components/WithExecutionDialog/index.tsx index 5fe1141b..413bbb0c 100644 --- a/packages/dodoex-widgets/src/components/WithExecutionDialog/index.tsx +++ b/packages/dodoex-widgets/src/components/WithExecutionDialog/index.tsx @@ -16,8 +16,8 @@ import { ArrowSubmit, } from '@dodoex/icons'; import { Showing } from '../../hooks/Submission/types'; -import { useWeb3React } from '@web3-react/core'; import { scanUrlDomainMap } from '../../constants/chains'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; import { ChainId } from '@dodoex/api'; import { useUserOptions } from '../UserOptionsProvider'; import { useWidgetDevice } from '../../hooks/style/useWidgetDevice'; @@ -147,7 +147,7 @@ function TransactionTime({ tx: string; }) { const [time, setTime] = useState(0); - const { chainId } = useWeb3React(); + const { chainId } = useWalletInfo(); const scanUrl = useMemo(() => { const domain = scanUrlDomainMap[(chainId as ChainId) || 1]; diff --git a/packages/dodoex-widgets/src/constants/chains.ts b/packages/dodoex-widgets/src/constants/chains.ts index d0853f16..1bc109ab 100644 --- a/packages/dodoex-widgets/src/constants/chains.ts +++ b/packages/dodoex-widgets/src/constants/chains.ts @@ -138,7 +138,7 @@ export const scanUrlDomainMap: { [ChainId.HEMI]: 'explorer.hemi.xyz', [ChainId.PHAROS_TESTNET]: 'testnet.pharosscan.xyz', [ChainId.PHAROS_ATLANTIC_TESTNET]: 'atlantic.pharosscan.xyz', - [ChainId.PHAROS]: 'pharos.socialscan.io', + [ChainId.PHAROS]: 'www.pharosscan.xyz', [ChainId.STABLE_TESTNET]: 'testnet.stablescan.xyz', [ChainId.STABLE]: 'stablescan.xyz', [ChainId.ENI]: 'scan.eniac.network', diff --git a/packages/dodoex-widgets/src/hooks/Bridge/useExecuteBridgeRoute.tsx b/packages/dodoex-widgets/src/hooks/Bridge/useExecuteBridgeRoute.tsx index 079fd60b..7b894615 100644 --- a/packages/dodoex-widgets/src/hooks/Bridge/useExecuteBridgeRoute.tsx +++ b/packages/dodoex-widgets/src/hooks/Bridge/useExecuteBridgeRoute.tsx @@ -1,4 +1,3 @@ -import { useWeb3React } from '@web3-react/core'; import { useCallback } from 'react'; import { t } from '@lingui/macro'; import { DoubleRight } from '@dodoex/icons'; @@ -14,6 +13,7 @@ import { useGetAPIService } from '../setting/useGetAPIService'; import { APIServiceKey } from '../../constants/api'; import { Metadata, MetadataFlag } from '../Submission/types'; import { useUserOptions } from '../../components/UserOptionsProvider'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export default function useExecuteBridgeRoute({ route, @@ -22,7 +22,7 @@ export default function useExecuteBridgeRoute({ route?: BridgeRouteI; bridgeOrderTxRequest?: BridgeTXRequest; }) { - const { chainId, account } = useWeb3React(); + const { chainId, account } = useWalletInfo(); const submission = useSubmission(); const { apikey } = useUserOptions(); const bridgeCreateRouteAPI = useGetAPIService( diff --git a/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.ts b/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.ts index c51c0dc6..da59d26e 100644 --- a/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.ts +++ b/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.ts @@ -1,5 +1,5 @@ import axios from 'axios'; -import { useWeb3React } from '@web3-react/core'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; import { parseFixed } from '@ethersproject/bignumber'; import { useCallback, useMemo, useState } from 'react'; import { EmptyAddress } from '../../constants/address'; @@ -145,7 +145,7 @@ export function useFetchRoutePriceBridge({ fromToken, fromAmount, }: FetchRoutePrice) { - const { account, provider } = useWeb3React(); + const { account, provider } = useWalletInfo(); const { defaultSlippage, loading: slippageLoading } = useDefaultSlippage(true); const { slippage: stateSlippage } = useGlobalState(); diff --git a/packages/dodoex-widgets/src/hooks/Bridge/useSendRoute.ts b/packages/dodoex-widgets/src/hooks/Bridge/useSendRoute.ts index 3e2bbcec..ad771472 100644 --- a/packages/dodoex-widgets/src/hooks/Bridge/useSendRoute.ts +++ b/packages/dodoex-widgets/src/hooks/Bridge/useSendRoute.ts @@ -6,7 +6,7 @@ import { basicTokenMap } from '../../constants/chains'; import { ChainId } from '@dodoex/api'; import { byWei, formatTokenAmountNumber } from '../../utils'; import { BridgeRouteI } from './useFetchRoutePriceBridge'; -import { useWeb3React } from '@web3-react/core'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; import { getEstimateGas } from '../contract/wallet'; import { BridgeTXRequest } from '../../components/Bridge/BridgeSummaryDialog'; import { useGetAPIService } from '../setting/useGetAPIService'; @@ -15,7 +15,7 @@ import { EmptyAddress } from '../../constants/address'; import { useUserOptions } from '../../components/UserOptionsProvider'; export function useSendRoute() { - const { provider } = useWeb3React(); + const { provider } = useWalletInfo(); const [bridgeOrderTxRequest, setBridgeOrderTxRequest] = useState(); const [sendRouteLoading, setSendRouteLoading] = useState(false); diff --git a/packages/dodoex-widgets/src/hooks/Chain/useChainList.ts b/packages/dodoex-widgets/src/hooks/Chain/useChainList.ts index 010b1149..c0a50ea6 100644 --- a/packages/dodoex-widgets/src/hooks/Chain/useChainList.ts +++ b/packages/dodoex-widgets/src/hooks/Chain/useChainList.ts @@ -1,11 +1,11 @@ -import { useWeb3React } from '@web3-react/core'; import { useMemo } from 'react'; import { ChainId } from '@dodoex/api'; import { ChainListItem, chainListMap } from '../../constants/chainList'; import { useUserOptions } from '../../components/UserOptionsProvider'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export function useChainList() { - const { chainId } = useWeb3React(); + const { chainId } = useWalletInfo(); const { supportChainIds } = useUserOptions(); const chainList = useMemo(() => { const currentChainListMap = new Map(); diff --git a/packages/dodoex-widgets/src/hooks/ConnectWallet/useSwitchChain.ts b/packages/dodoex-widgets/src/hooks/ConnectWallet/useSwitchChain.ts index 3fcff4ba..471c32f5 100644 --- a/packages/dodoex-widgets/src/hooks/ConnectWallet/useSwitchChain.ts +++ b/packages/dodoex-widgets/src/hooks/ConnectWallet/useSwitchChain.ts @@ -1,5 +1,5 @@ -import { useWeb3React } from '@web3-react/core'; import { useMemo } from 'react'; +import { useWalletInfo } from './useWalletInfo'; import { chainListMap } from '../../constants/chainList'; import { basicTokenMap, @@ -154,11 +154,11 @@ export async function registerNetworkWithMetamask({ } export function useSwitchChain(chainId?: ChainId) { - const { provider } = useWeb3React(); + const { provider } = useWalletInfo(); const switchChain = useMemo(() => { - const providerResult: any = provider?.provider ?? provider; - if (!chainId || !providerResult?.isMetaMask) { + const providerResult: any = (provider as any)?.provider ?? provider; + if (!chainId || !providerResult) { return undefined; } return () => { diff --git a/packages/dodoex-widgets/src/hooks/ConnectWallet/useWalletInfo.ts b/packages/dodoex-widgets/src/hooks/ConnectWallet/useWalletInfo.ts index e7085802..ee4869c4 100644 --- a/packages/dodoex-widgets/src/hooks/ConnectWallet/useWalletInfo.ts +++ b/packages/dodoex-widgets/src/hooks/ConnectWallet/useWalletInfo.ts @@ -1,15 +1,21 @@ import { ChainId } from '@dodoex/api'; import { useWeb3React } from '@web3-react/core'; +import { JsonRpcProvider } from '@ethersproject/providers'; import { useUserOptions } from '../../components/UserOptionsProvider'; export function useWalletInfo() { - const { account, chainId } = useWeb3React(); - const { onlyChainId, defaultChainId } = useUserOptions(); + const { account: web3Account, chainId: web3ChainId, provider: web3Provider } = useWeb3React(); + const { walletState, onlyChainId, defaultChainId } = useUserOptions(); + + const account = walletState?.account ?? web3Account; + const connectedChainId = walletState?.chainId ?? web3ChainId; + const provider: JsonRpcProvider | undefined = walletState?.provider ?? web3Provider; return { account, - chainId: (chainId || onlyChainId || defaultChainId || 1) as ChainId, - connectedChainId: chainId, + chainId: (connectedChainId || onlyChainId || defaultChainId || 1) as ChainId, + connectedChainId, + provider, defaultChainId, onlyChainId, }; diff --git a/packages/dodoex-widgets/src/hooks/ConnectWallet/useWeb3Connectors.ts b/packages/dodoex-widgets/src/hooks/ConnectWallet/useWeb3Connectors.ts index bd3c2f66..bbe859d6 100644 --- a/packages/dodoex-widgets/src/hooks/ConnectWallet/useWeb3Connectors.ts +++ b/packages/dodoex-widgets/src/hooks/ConnectWallet/useWeb3Connectors.ts @@ -16,6 +16,7 @@ export interface Web3ConnectorsProps { provider?: Eip1193Provider | JsonRpcProvider; jsonRpcUrlMap?: { [chainId: number]: string[] }; defaultChainId?: ChainId; + walletState?: { account?: string; chainId?: number; provider?: any }; } const connectorCacheMap: { @@ -26,11 +27,12 @@ export function useWeb3Connectors({ provider, jsonRpcUrlMap: jsonRpcUrlMapProps, defaultChainId, + walletState, }: Web3ConnectorsProps) { const onError = useMemo(() => console.error, []); const integratorConnection = useMemo( - () => getConnectionFromProvider(onError, provider), - [onError, provider], + () => walletState ? undefined : getConnectionFromProvider(onError, provider), + [onError, provider, walletState], ); const metaMaskConnection = useMemo( () => getConnectionFromMetaMask(onError), @@ -69,13 +71,13 @@ export function useWeb3Connectors({ }, [integratorConnection, metaMaskConnection, walletConnectConnectionPopup]); useEffect(() => { - // Sync provider status - if (provider && integratorConnection) { + // Sync provider status (skip when walletState is managing state externally) + if (!walletState && provider && integratorConnection) { connectToWallet(WalletType.INTEGRATOR, undefined, (error) => { console.error(error); }); } - }, [provider]); + }, [provider, walletState]); return { connectors, diff --git a/packages/dodoex-widgets/src/hooks/Submission/useExecution.ts b/packages/dodoex-widgets/src/hooks/Submission/useExecution.ts index e43fb9b0..c934b332 100644 --- a/packages/dodoex-widgets/src/hooks/Submission/useExecution.ts +++ b/packages/dodoex-widgets/src/hooks/Submission/useExecution.ts @@ -1,6 +1,6 @@ import { ChainId, CONTRACT_QUERY_KEY } from '@dodoex/api'; -import { useWeb3React } from '@web3-react/core'; import type { TransactionResponse } from '@ethersproject/abstract-provider'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; import { useCallback, useMemo, useState } from 'react'; import { useFetchBlockNumber } from '../contract'; import { approve, getEstimateGas, sendTransaction } from '../contract/wallet'; @@ -45,7 +45,7 @@ export default function useExecution({ onTxSuccess, onTxReverted, }: ExecutionProps = {}) { - const { account, provider } = useWeb3React(); + const { account, provider } = useWalletInfo(); const { noSubmissionDialog } = useUserOptions(); const queryClient = useQueryClient(); const chainId = useCurrentChainId(); @@ -93,7 +93,7 @@ export default function useExecution({ setShowing({ spec, brief, subtitle, submitState: 'loading' }); try { setWaitingSubmit(true); - await updatePharosTestnetRpc(chainId, provider?.provider ?? provider); + await updatePharosTestnetRpc(chainId, (provider as any)?.provider ?? provider); if (spec.opcode === OpCode.Approval) { transaction = await approve( spec.token.address, diff --git a/packages/dodoex-widgets/src/hooks/Swap/useCustomSlippage.ts b/packages/dodoex-widgets/src/hooks/Swap/useCustomSlippage.ts index de184ad4..1e2662bf 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useCustomSlippage.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useCustomSlippage.ts @@ -1,10 +1,10 @@ -import { useWeb3React } from '@web3-react/core'; import { TokenInfo } from '../Token'; import { CustomSwapPairSlippage, useSwapSettingStore, } from './useSwapSettingStore'; import React from 'react'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export function useCustomSlippage({ fromToken, @@ -13,7 +13,7 @@ export function useCustomSlippage({ fromToken?: TokenInfo | null; toToken?: TokenInfo | null; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const { customSwapPairSlippages } = useSwapSettingStore(); const findSlippageItem = React.useCallback( diff --git a/packages/dodoex-widgets/src/hooks/Swap/useExecuteSwap.ts b/packages/dodoex-widgets/src/hooks/Swap/useExecuteSwap.ts index 4fcc9db0..d3e8749f 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useExecuteSwap.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useExecuteSwap.ts @@ -1,5 +1,4 @@ import { t } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; import { BigNumber as EthersBigNumber } from '@ethersproject/bignumber'; import BigNumber from 'bignumber.js'; import React, { useCallback, useMemo } from 'react'; @@ -10,9 +9,10 @@ import { MIN_GAS_LIMIT } from '../../constants/swap'; import { useSubmission } from '../Submission'; import { OpCode } from '../Submission/spec'; import { MetadataFlag } from '../Submission/types'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export default function useExecuteSwap() { - const { chainId, account } = useWeb3React(); + const { chainId, account } = useWalletInfo(); const submission = useSubmission(); const execute = useCallback( diff --git a/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts b/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts index f01ca9e1..28fa444f 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts @@ -1,5 +1,5 @@ import axios from 'axios'; -import { useWeb3React } from '@web3-react/core'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; import { parseFixed } from '@ethersproject/bignumber'; import React, { useCallback, @@ -60,7 +60,7 @@ export function useFetchRoutePrice({ slippage, slippageLoading, }: FetchRoutePrice) { - const { account, chainId: walletChainId, provider } = useWeb3React(); + const { account, chainId: walletChainId, provider } = useWalletInfo(); const { defaultChainId, feeRate, rebateTo, apikey } = useUserOptions(); const chainId = useMemo( () => fromToken?.chainId || walletChainId || defaultChainId, diff --git a/packages/dodoex-widgets/src/hooks/Swap/useInitDefaultToken.ts b/packages/dodoex-widgets/src/hooks/Swap/useInitDefaultToken.ts index c48be8c4..4ebbbde5 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useInitDefaultToken.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useInitDefaultToken.ts @@ -1,6 +1,7 @@ import { useWeb3React } from '@web3-react/core'; import { useEffect } from 'react'; import { useUserOptions } from '../../components/UserOptionsProvider'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; import { getLastToken } from '../../constants/localstorage'; import { DefaultTokenInfo, TokenInfo, TokenList } from '../Token'; import { useGlobalState } from '../useGlobalState'; @@ -84,7 +85,8 @@ export function useInitDefaultToken({ const { crossChain, defaultFromToken, defaultToToken, onlyChainId } = useUserOptions(); const { autoConnectLoading } = useGlobalState(); - const { chainId, isActivating } = useWeb3React(); + const { chainId } = useWalletInfo(); + const { isActivating } = useWeb3React(); const initToken = () => { let findFromToken: TokenInfo | null = null; diff --git a/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.ts b/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.ts index e4acd1df..9ff4d3f9 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.ts @@ -1,9 +1,9 @@ -import { useWeb3React } from '@web3-react/core'; import { useMemo } from 'react'; import { useTokenState } from '../useTokenState'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export default function useFindTokenByAddress(address?: string) { - const { chainId } = useWeb3React(); + const { chainId } = useWalletInfo(); const { tokenList } = useTokenState(); const token = useMemo(() => { diff --git a/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.ts b/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.ts index e225aed8..841b7d3f 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.ts @@ -1,12 +1,12 @@ -import { useWeb3React } from '@web3-react/core'; import { useEffect, useMemo, useState } from 'react'; import { ChainId } from '@dodoex/api'; import { ChainListItem, chainListMap } from '../../constants/chainList'; import { useUserOptions } from '../../components/UserOptionsProvider'; import { getAllTokenList, useTokenState } from '../useTokenState'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export function useSelectChainList(side?: 'from' | 'to') { - const { chainId } = useWeb3React(); + const { chainId } = useWalletInfo(); const state = useTokenState(); const allTokenList = useMemo(() => getAllTokenList(state), [state]); const { crossChain, onlyChainId } = useUserOptions(); diff --git a/packages/dodoex-widgets/src/hooks/contract/useFetchBlockNumber.ts b/packages/dodoex-widgets/src/hooks/contract/useFetchBlockNumber.ts index ee2d269d..0929c645 100644 --- a/packages/dodoex-widgets/src/hooks/contract/useFetchBlockNumber.ts +++ b/packages/dodoex-widgets/src/hooks/contract/useFetchBlockNumber.ts @@ -1,9 +1,9 @@ -import { useWeb3React } from '@web3-react/core'; import { useCallback, useEffect } from 'react'; import { useGlobalState } from '../useGlobalState'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; export default function useFetchBlockNumber() { - const { provider, chainId } = useWeb3React(); + const { provider, chainId } = useWalletInfo(); const updateBlockNumber = useCallback(async () => { if (!provider || !chainId) { diff --git a/packages/dodoex-widgets/src/hooks/contract/useFetchTokens.ts b/packages/dodoex-widgets/src/hooks/contract/useFetchTokens.ts index bf3065ab..05345c1f 100644 --- a/packages/dodoex-widgets/src/hooks/contract/useFetchTokens.ts +++ b/packages/dodoex-widgets/src/hooks/contract/useFetchTokens.ts @@ -1,10 +1,10 @@ import { useQueries } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import { isEqual } from 'lodash'; import { useEffect, useMemo, useState } from 'react'; import { tokenApi } from '../../constants/api'; import { TokenList } from '../Token'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; type TokenInfoMap = Map< string, @@ -27,7 +27,7 @@ export default function useFetchTokens({ chainId?: number; skip?: boolean; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const [tokenInfoMap, setTokenInfoMap] = useState(new Map()); const addresses = useMemo(() => { return [ diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 76891b19..c18c4b74 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -105,7 +105,7 @@ msgid "* Please note that the Fee Rate cannot be modified after the pool is crea msgstr "* Please note that the Fee Rate cannot be modified after the pool is created" #. placeholder {0}: chainListMap.get(chainId)?.name ?? 'unknown' -#: src/components/ConnectWallet/NeedConnectButton.tsx:84 +#: src/components/ConnectWallet/NeedConnectButton.tsx:87 msgid "Switch to {0}" msgstr "Switch to {0}" @@ -848,7 +848,7 @@ msgstr "The price of this pool is outside of your selected range. Your position msgid "{0}" msgstr "{0}" -#: src/components/ConnectWallet/NeedConnectButton.tsx:82 +#: src/components/ConnectWallet/NeedConnectButton.tsx:85 msgid "Connecting..." msgstr "Connecting..." @@ -2189,7 +2189,7 @@ msgstr "The current slippage protection coefficient set exceeds {0}%, which may msgid "Total Rewards" msgstr "Total Rewards" -#: src/components/ConnectWallet/NeedConnectButton.tsx:86 +#: src/components/ConnectWallet/NeedConnectButton.tsx:89 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:55 #: src/widgets/PoolWidget/AMMV3/hooks/useDerivedV3BurnInfo.tsx:96 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:519 diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index 2e7dd658..f340285a 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -103,7 +103,7 @@ msgid "* Please note that the Fee Rate cannot be modified after the pool is crea msgstr "* 请注意,资金池创建完成后,费率无法修改" #. placeholder {0}: chainListMap.get(chainId)?.name ?? 'unknown' -#: src/components/ConnectWallet/NeedConnectButton.tsx:84 +#: src/components/ConnectWallet/NeedConnectButton.tsx:87 msgid "Switch to {0}" msgstr "切换至 {0} 网络" @@ -844,7 +844,7 @@ msgstr "该池的价格不在你选定的区间内。你的仓位目前不能赚 msgid "{0}" msgstr "{0}" -#: src/components/ConnectWallet/NeedConnectButton.tsx:82 +#: src/components/ConnectWallet/NeedConnectButton.tsx:85 msgid "Connecting..." msgstr "连接中..." @@ -2185,7 +2185,7 @@ msgstr "" msgid "Total Rewards" msgstr "总奖励" -#: src/components/ConnectWallet/NeedConnectButton.tsx:86 +#: src/components/ConnectWallet/NeedConnectButton.tsx:89 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:55 #: src/widgets/PoolWidget/AMMV3/hooks/useDerivedV3BurnInfo.tsx:96 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:519 diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/MiningDetail/index.tsx b/packages/dodoex-widgets/src/widgets/MiningWidget/MiningDetail/index.tsx index 73744061..75f35f0c 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/MiningDetail/index.tsx +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/MiningDetail/index.tsx @@ -1,6 +1,5 @@ import { MiningStatusE } from '@dodoex/api'; import { Box, Skeleton, useTheme } from '@dodoex/components'; -import { useWeb3React } from '@web3-react/core'; import { useEffect, useMemo, useState } from 'react'; import Dialog from '../../../components/Dialog'; import WidgetContainer from '../../../components/WidgetContainer'; @@ -211,7 +210,7 @@ export function MiningDetail({ }) => void; }) { const theme = useTheme(); - const { account, chainId: currentChainId } = useWeb3React(); + const { account, chainId: currentChainId } = useWalletInfo(); const { isMobile } = useWidgetDevice(); const { miningItem, error, loading, refetch } = useMiningItem({ diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/mining-types/BaseMiningCard.tsx b/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/mining-types/BaseMiningCard.tsx index 6e93ee18..00de09d9 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/mining-types/BaseMiningCard.tsx +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/mining-types/BaseMiningCard.tsx @@ -1,5 +1,4 @@ import { Box } from '@dodoex/components'; -import { useWeb3React } from '@web3-react/core'; import { memo, useContext } from 'react'; import { useWidgetDevice } from '../../../../hooks/style/useWidgetDevice'; import { @@ -23,6 +22,7 @@ import { useStakedInfo } from '../hooks/useStakedInfo'; import { useStatusAndStartBlockNumber } from '../hooks/useStatusAndStartBlockNumber'; import { OperateArea } from '../operate-area'; import { getDetailWrapperEle, getOperateAreaWrapperEle } from '../utils'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; export default memo(function BaseMiningCard({ contractData, @@ -66,7 +66,7 @@ export default memo(function BaseMiningCard({ const { operateId, viewType, refetchContractData } = useContext(MiningContext); const { isMobile } = useWidgetDevice(); - const { chainId: currentChainId, account } = useWeb3React(); + const { chainId: currentChainId, account } = useWalletInfo(); const { rewardTokenWithAprListArray, diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/operate-area/index.tsx b/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/operate-area/index.tsx index 67e9e3a5..32790ebd 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/operate-area/index.tsx +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/MiningList/operate-area/index.tsx @@ -1,7 +1,6 @@ import { MiningStatusE } from '@dodoex/api'; import { Box, Tabs, TabsButtonGroup, useTheme } from '@dodoex/components'; import { t } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import { useCallback, useMemo, useState } from 'react'; import { AddressWithLinkAndCopy } from '../../../../components/AddressWithLinkAndCopy'; @@ -28,6 +27,7 @@ import { StakeTokenSelect } from './StakeTokenSelect'; import { UnstakeButton } from './UnstakeButton'; import { getOptToken } from './utils'; import { OperateButtonWrapper } from '../components/widgets'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; export function OperateArea(props: OperateDataProps) { const { @@ -68,7 +68,7 @@ export function OperateArea(props: OperateDataProps) { const theme = useTheme(); - const { chainId: currentChainId, account } = useWeb3React(); + const { chainId: currentChainId, account } = useWalletInfo(); const isInCurrentChain = currentChainId === chainId; const skipApprove = diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/OperateArea/index.tsx b/packages/dodoex-widgets/src/widgets/MiningWidget/OperateArea/index.tsx index c97b1e97..adff7d41 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/OperateArea/index.tsx +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/OperateArea/index.tsx @@ -8,7 +8,6 @@ import { } from '@dodoex/components'; import { t } from '@lingui/macro'; import { useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import React from 'react'; import { TokenCard } from '../../../components/Swap/components/TokenCard'; @@ -29,6 +28,7 @@ import { RewardListCard } from './RewardListCard'; import { StakeButton } from './StakeButton'; import UnstakeButton from './UnstakeButton'; import { OperateButtonWrapper } from './Widgets'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export default function OperateArea({ chainId, @@ -52,7 +52,7 @@ export default function OperateArea({ goLpLink?: () => void; }) { const theme = useTheme(); - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const { miningContractAddress } = miningItem ?? {}; const baseToken = convertFetchTokenToTokenInfo( miningItem?.baseToken, diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useMiningBlockNumber.ts b/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useMiningBlockNumber.ts index 43c37770..56b139b2 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useMiningBlockNumber.ts +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useMiningBlockNumber.ts @@ -1,16 +1,16 @@ import { ChainId } from '@dodoex/api'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import { useEffect, useMemo } from 'react'; import { blockTimeMap } from '../../../constants/chains'; import useFetchBlockNumber from '../../../hooks/contract/useFetchBlockNumber'; import { useGlobalState } from '../../../hooks/useGlobalState'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export function useMiningBlockNumber( chainId: ChainId, otherChainBlockNumber: BigNumber | undefined, ) { - const { chainId: currentChainId } = useWeb3React(); + const { chainId: currentChainId } = useWalletInfo(); const { latestBlockNumber: currentChainBlockNumber } = useGlobalState(); const { updateBlockNumber } = useFetchBlockNumber(); diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useReviewRewardToken.ts b/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useReviewRewardToken.ts index 03275f66..70f8f619 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useReviewRewardToken.ts +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useReviewRewardToken.ts @@ -1,5 +1,4 @@ import { useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import { useMemo } from 'react'; import { miningApi } from '../helper'; @@ -7,6 +6,7 @@ import { MiningRewardTokenI, ReviewedMiningRewardTokenI } from '../types'; import { getV3MiningSingleRewardAmount } from './helper'; import { useMiningBlockNumber } from './useMiningBlockNumber'; import { getTimeByPreBlock } from './utils'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export function useReviewRewardToken({ chainId, @@ -21,7 +21,7 @@ export function useReviewRewardToken({ rewardToken: MiningRewardTokenI; skip?: Boolean; }) { - const { chainId: currentChainId } = useWeb3React(); + const { chainId: currentChainId } = useWalletInfo(); const inCurrentChain = chainId === currentChainId; const { blockNumber, blockTime } = useMiningBlockNumber( diff --git a/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useRewardListAmount.ts b/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useRewardListAmount.ts index 0118708b..91e41f9f 100644 --- a/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useRewardListAmount.ts +++ b/packages/dodoex-widgets/src/widgets/MiningWidget/hooks/useRewardListAmount.ts @@ -1,15 +1,15 @@ import { useQueries } from '@tanstack/react-query'; import { FetchMiningListItem } from '../types'; import { miningApi } from '../helper'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export function useRewardListAmount({ miningItem, }: { miningItem: FetchMiningListItem; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const rewardList = miningItem?.rewardTokenInfos ?? []; const queryInfo = [] as Array<{ diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolCreate/operate-widgets/TokenPairSelect.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolCreate/operate-widgets/TokenPairSelect.tsx index 0de880bc..59153f4a 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolCreate/operate-widgets/TokenPairSelect.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolCreate/operate-widgets/TokenPairSelect.tsx @@ -1,7 +1,6 @@ import { Box, ButtonBase, RotatingIcon, useTheme } from '@dodoex/components'; import { Trans } from '@lingui/macro'; import { useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import React from 'react'; import { TokenPickerDialog } from '../../../../components/Swap/components/TokenCard/TokenPickerDialog'; import TokenLogo from '../../../../components/TokenLogo'; @@ -11,6 +10,7 @@ import { formatTokenAmountNumber } from '../../../../utils/formatter'; import { Actions, StateProps, Types } from '../reducer'; import { SettingItemWrapper } from './widgets'; import { ReactComponent as Arrow } from './arrow.svg'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; function TokenPickSelect({ token, @@ -24,7 +24,7 @@ function TokenPickSelect({ tokenSelectOnChange: (value: TokenInfo) => void; }) { const theme = useTheme(); - const { chainId, account } = useWeb3React(); + const { chainId, account } = useWalletInfo(); const [tokenPickerVisible, setTokenPickerVisible] = React.useState(false); diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx index 4be7aeb8..7ca36736 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx @@ -16,8 +16,8 @@ import { usePoolDashboard } from '../../hooks/usePoolDashboard'; import { useQuery } from '@tanstack/react-query'; import { poolApi } from '../../../utils'; import { t } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; import { useWidgetDevice } from '../../../../../hooks/style/useWidgetDevice'; +import { useWalletInfo } from '../../../../../hooks/ConnectWallet/useWalletInfo'; import { isNotEmpty } from '../../../../../utils/utils'; export function formatDateTimeStr(timestamp?: number, short?: boolean): string { @@ -337,7 +337,7 @@ export default function ParametersTable({ showDecimals: 2, })}` ); - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const feeRateQuery = useQuery( poolApi.getFeeRateQuery( detail?.chainId, diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx index c3f2baa8..cc65ecb1 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx @@ -1,7 +1,6 @@ import { Box, ButtonBase, useTheme } from '@dodoex/components'; import { Switch, ArrowRight } from '@dodoex/icons'; import { useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import React from 'react'; import dayjs from 'dayjs'; import { Trans } from '@lingui/macro'; @@ -17,6 +16,7 @@ import { AddressWithLinkAndCopy } from '../../../../../components/AddressWithLin import TokenLogo from '../../../../../components/TokenLogo'; import BigNumber from 'bignumber.js'; import { CardStatus } from '../../../../../components/CardWidgets'; +import { useWalletInfo } from '../../../../../hooks/ConnectWallet/useWalletInfo'; export function formatDateTimeStr(timestamp?: number, short?: boolean): string { if (!timestamp) { @@ -90,7 +90,7 @@ export default function SwapsTable({ }) { const { isMobile } = useWidgetDevice(); const theme = useTheme(); - const { account, chainId } = useWeb3React(); + const { account, chainId } = useWalletInfo(); const feeRateQuery = useQuery( poolApi.getFeeRateQuery( poolDetail?.chainId, diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/usePoolListFilterChainId.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/usePoolListFilterChainId.ts index 08aa49ae..cf391e2d 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/usePoolListFilterChainId.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/usePoolListFilterChainId.ts @@ -1,12 +1,12 @@ -import { useWeb3React } from '@web3-react/core'; import React from 'react'; import { isTestNet } from '../../../../constants/chainList'; import { ChainId } from '@dodoex/api'; import { POOLS_LIST_FILTER_CHAIN } from '../../../../constants/sessionStorage'; import { useUserOptions } from '../../../../components/UserOptionsProvider'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; export function usePoolListFilterChainId() { - const { chainId: currentChainId } = useWeb3React(); + const { chainId: currentChainId } = useWalletInfo(); const { onlyChainId, defaultChainId, supportChainIds } = useUserOptions(); const [activeChainId, setActiveChainId] = React.useState( onlyChainId, diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx index d611a367..de5b81be 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx @@ -2,7 +2,6 @@ import { ChainId } from '@dodoex/api'; import { useTheme, Button, Box } from '@dodoex/components'; import { t, Trans } from '@lingui/macro'; import { useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import React from 'react'; import NeedConnectButton from '../../../../components/ConnectWallet/NeedConnectButton'; @@ -22,6 +21,7 @@ import { } from '../../PoolCreate/utils'; import { PoolTab } from '../../PoolList/hooks/usePoolListTabs'; import { poolApi } from '../../utils'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; function NextButton({ disabled, @@ -36,7 +36,7 @@ function NextButton({ quoteStatus: ReturnType; onClick: () => void; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); if (!account) { return ( @@ -105,7 +105,7 @@ export function BottomButtonGroup({ ); const theme = useTheme(); const { isMobile } = useWidgetDevice(); - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const router = useRouterStore(); const [confirmModalVisible, setConfirmModalVisible] = React.useState(false); diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx index 18e18a37..0be719bd 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx @@ -1,6 +1,5 @@ import { PoolApi } from '@dodoex/api'; import { Box, Button, LoadingSkeleton } from '@dodoex/components'; -import { useWeb3React } from '@web3-react/core'; import React, { useMemo } from 'react'; import { CardPlus, @@ -28,6 +27,7 @@ import { getUniswapV2Router02FixedFeeContractAddressByChainId, } from '@dodoex/dodo-contract-request'; import { usePrevious } from '../../MiningWidget/hooks/usePrevious'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; import { useSlipper } from './components/SlippageSetting'; import BigNumber from 'bignumber.js'; @@ -48,7 +48,7 @@ export function AddPoolOperate({ quoteReserve?: BigNumber; totalSupplyBG?: BigNumber; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const { baseAmount, quoteAmount, diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/PoolOperateInner.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/PoolOperateInner.tsx index 15a865a3..7276279d 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/PoolOperateInner.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/PoolOperateInner.tsx @@ -1,6 +1,5 @@ import { Tabs, TabPanel, TabsButtonGroup, Box } from '@dodoex/components'; import { useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import { FailedList } from '../../../components/List/FailedList'; import { usePoolBalanceInfo } from '../hooks/usePoolBalanceInfo'; import { poolApi } from '../utils'; @@ -14,6 +13,7 @@ import { } from './types'; import { RemovePoolOperate } from './RemovePoolOperate'; import { MigrationTag } from '../PoolList/components/migationWidget'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export interface PoolOperateInnerProps { pool: OperatePool; @@ -36,7 +36,7 @@ export default function PoolOperateInner({ }: PoolOperateInnerProps) { const { operateTab, operateTabs, handleChangeTab } = usePoolOperateTabs(operate); - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const balanceInfo = usePoolBalanceInfo({ account, pool: pool diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx index 6dc9163c..447ce24f 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx @@ -1,6 +1,5 @@ import { basicTokenMap, ChainId, PoolApi } from '@dodoex/api'; import { Box, Button, LoadingSkeleton, Select } from '@dodoex/components'; -import { useWeb3React } from '@web3-react/core'; import React from 'react'; import { CardPlus, @@ -39,6 +38,7 @@ import { poolApi } from '../utils'; import { toWei } from '../../../utils'; import { TokenInfo } from '../../../hooks/Token'; import { usePrevious } from '../../MiningWidget/hooks/usePrevious'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; export function RemovePoolOperate({ submittedBack: submittedBackProps, @@ -55,7 +55,7 @@ export function RemovePoolOperate({ getMigrationPairAndMining?: GetMigrationPairAndMining; showMigrationPairAndMining?: ShowMigrationPairAndMining; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const baseOverride = balanceInfo.userBaseLpToTokenBalance; const quoteOverride = balanceInfo.userQuoteLpToTokenBalance; const overrideBalanceLoading = balanceInfo.loading; diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx index 2c790c0b..913502d9 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx @@ -1,7 +1,7 @@ import { Button, Box } from '@dodoex/components'; import { Trans } from '@lingui/macro'; -import { useWeb3React } from '@web3-react/core'; import NeedConnectButton from '../../../../components/ConnectWallet/NeedConnectButton'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; import TokenStatusButton from '../../../../components/TokenStatusButton'; import { useInflights } from '../../../../hooks/Submission'; import { MetadataFlag } from '../../../../hooks/Submission/types'; @@ -20,7 +20,7 @@ export default function OperateBtn({ const updateBalanceLoading = false; const { runningRequests } = useInflights(); - const { account, chainId: currentChainId } = useWeb3React(); + const { account, chainId: currentChainId } = useWalletInfo(); if (!account || chainId !== currentChainId) { return ; diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/index.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/index.tsx index af9f410c..58229d1c 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/index.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/index.tsx @@ -21,8 +21,8 @@ import { convertFetchPoolToOperateData } from '../utils'; import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; import { ThegraphKeyMap } from '../../../constants/chains'; import LpTokenMiningOperate from '../../MiningWidget/LpTokenMiningOperate'; -import { useWeb3React } from '@web3-react/core'; import { usePoolBalanceInfo } from '../hooks/usePoolBalanceInfo'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; import { t } from '@lingui/macro'; import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; import { GSPPairRiskWarning } from './components/GSPPairRiskWarning'; @@ -54,7 +54,7 @@ export function PoolOperate({ getMigrationPairAndMining, showMigrationPairAndMining, }: PoolOperateProps) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const chain = chainId ? ThegraphKeyMap[chainId as ChainId] : ''; const graphQLRequests = useGraphQLRequests(); diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/contract/useModifyDppPool.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/contract/useModifyDppPool.ts index a3fda0d1..9969567d 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/contract/useModifyDppPool.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/contract/useModifyDppPool.ts @@ -1,6 +1,5 @@ import { PoolType } from '@dodoex/api'; import { useMutation, useQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; import BigNumber from 'bignumber.js'; import { SLIPPAGE_PROTECTION } from '../../../../constants/pool'; import { useSubmission } from '../../../../hooks/Submission'; @@ -11,6 +10,7 @@ import { poolApi } from '../../utils'; import { getModifyDPPPoolParams } from './getModifyDPPPoolParams'; import { useUserOptions } from '../../../../components/UserOptionsProvider'; import { useMessageState } from '../../../../hooks/useMessageState'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; const computeAmount = ( newAmount: string, @@ -38,7 +38,7 @@ export function useModifyDppPool({ quoteToken: TokenInfo; }; }) { - const { account } = useWeb3React(); + const { account } = useWalletInfo(); const submission = useSubmission(); const pmmStateQuery = useQuery( poolApi.getPMMStateQuery( diff --git a/yarn.lock b/yarn.lock index 2ddf8ebd..939664f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1401,20 +1401,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@dodoex/api@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@dodoex/api/-/api-3.7.0.tgz#6013ad664da411da63e3e6c0f830ae0683eabd5e" - integrity sha512-2WluSN00OnzcZG7uFa4KNrqBbpMPrkr9K3QGaDqxv97+q6oe+QQ+us/ITjxihSp3kAQ59m1OSssqkUmA17CDwQ== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/providers" "^5.7.2" - "@ethersproject/web" "^5.7.1" - cross-fetch "^4.0.0" - graphql "^16.8.1" - graphql-request "^6.1.0" - qs "^6.11.2" - "@dodoex/contract-request@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@dodoex/contract-request/-/contract-request-1.3.0.tgz#226272dc0460be4a02f2bdde6483d7ad84ce8afa" From ff782b21f52bd05f89e677daa6bc41ce56ccde23 Mon Sep 17 00:00:00 2001 From: JunJie Date: Fri, 3 Jul 2026 15:07:52 +0800 Subject: [PATCH 04/12] feat(pool): add LP fee reward (liquidity mining) banner, badge & claim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pool list page gains an LP fee reward activity, driven by WidgetProps `lpFeeRewardActivity` and the reworked `lp_fee_reward_getUserReward` API. Banner: - Shows activity title/description/View more + "My rewards" amount + token icon - Reward amount and Claim state follow `claimStatus`: ESTIMATING -> estimatedReward (Claim disabled); CLAIMABLE -> claimableReward (Claim enabled); CLAIMED -> "Claimed"; NOT_ELIGIBLE -> disabled - Claim wired to the Merkle distributor: SystemApi.encode.claimLpFeeReward encodes claim(index, account, amount, proof) and submits via the existing submission flow (useClaimLpFeeRewardSubmit); refetches on success - Theme-aware colors (primary + contrastText), decorative background bands, responsive sizing (amount 18px mobile / 24px desktop) Pool list: - 🔥 badge + "Mining Only" filter driven by `pair.apy.lpFeeRewardApy` - Badge shows the bonus APY with a title/description tooltip API (@dodoex/api): - fetchLpFeeRewardUserReward updated to the new fields (estimated/claimable reward, claimStatus, claimContract, period*, merkleRoot, index, proof), input via periodId - lpFeeRewardApy added to the liquidity list apy selections - Regenerated gql types; SystemApi.encode.claimLpFeeReward added i18n: en-US / zh-CN catalogs updated. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../doc/src/stories/widgets/Pool.stories.tsx | 15 + .../dodoex-api/src/gql/fragment-masking.ts | 29 +- packages/dodoex-api/src/gql/gql.ts | 48 +- packages/dodoex-api/src/gql/graphql.ts | 2662 ++++++++++++++++- .../src/services/pool/graphqlQuery.ts | 3 + .../src/services/system/SystemApi.ts | 35 + .../src/services/system/graphqlQuery.ts | 21 + .../src/components/Widget/index.tsx | 30 + .../src/hooks/Submission/types.ts | 1 + packages/dodoex-widgets/src/index.tsx | 1 + packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 60 +- packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 60 +- .../PoolWidget/PoolList/AddLiquidity.tsx | 141 +- .../PoolList/components/LpFeeRewardBadge.tsx | 79 + .../PoolList/components/LpFeeRewardBanner.tsx | 289 ++ .../hooks/useClaimLpFeeRewardSubmit.ts | 65 + .../src/widgets/PoolWidget/PoolList/index.tsx | 17 +- 19 files changed, 3327 insertions(+), 233 deletions(-) create mode 100644 packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx create mode 100644 packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx create mode 100644 packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/useClaimLpFeeRewardSubmit.ts diff --git a/packages/doc/src/stories/widgets/Pool.stories.tsx b/packages/doc/src/stories/widgets/Pool.stories.tsx index 56f385f5..27c98b4d 100644 --- a/packages/doc/src/stories/widgets/Pool.stories.tsx +++ b/packages/doc/src/stories/widgets/Pool.stories.tsx @@ -89,4 +89,19 @@ Primary.args = { // onlyChainId: 688689, showSubmissionSubmittedDialog: true, // onlyChainId: 1, + // LP fee reward (liquidity mining) activity demo config. + // The per-pool 🔥 badge / "Mining Only" filter is driven by the liquidity + // list's `apy.lpFeeRewardApy`; the banner reward comes from + // `lp_fee_reward_getUserReward` (needs a connected wallet). + lpFeeRewardActivity: { + activity: 'pharos_amm_v3_lp_fee_reward', + title: 'FBTC Liquidity Mining', + description: 'Earn extra $PROS from Jul 01 to Jul 25.', + viewMoreLink: 'https://dodoex.io', + rewardTokenSymbol: 'PROS', + rewardTokenLogo: + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', + myRewardsTooltip: + 'Rewards are settled daily and can be claimed once the activity ends.', + }, }; diff --git a/packages/dodoex-api/src/gql/fragment-masking.ts b/packages/dodoex-api/src/gql/fragment-masking.ts index 39e6e148..cada9ddd 100644 --- a/packages/dodoex-api/src/gql/fragment-masking.ts +++ b/packages/dodoex-api/src/gql/fragment-masking.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ import { ResultOf, DocumentTypeDecoration, @@ -20,7 +21,17 @@ export function useFragment( _documentNode: DocumentTypeDecoration, fragmentType: FragmentType>, ): TType; +// return nullable if `fragmentType` is undefined +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | undefined, +): TType | undefined; // return nullable if `fragmentType` is nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | null, +): TType | null; +// return nullable if `fragmentType` is nullable or undefined export function useFragment( _documentNode: DocumentTypeDecoration, fragmentType: @@ -29,11 +40,24 @@ export function useFragment( | undefined, ): TType | null | undefined; // return array of non-nullable if `fragmentType` is array of non-nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: Array>>, +): Array; +// return array of nullable if `fragmentType` is array of nullable +export function useFragment( + _documentNode: DocumentTypeDecoration, + fragmentType: + | Array>> + | null + | undefined, +): Array | null | undefined; +// return readonly array of non-nullable if `fragmentType` is array of non-nullable export function useFragment( _documentNode: DocumentTypeDecoration, fragmentType: ReadonlyArray>>, ): ReadonlyArray; -// return array of nullable if `fragmentType` is array of nullable +// return readonly array of nullable if `fragmentType` is array of nullable export function useFragment( _documentNode: DocumentTypeDecoration, fragmentType: @@ -45,10 +69,11 @@ export function useFragment( _documentNode: DocumentTypeDecoration, fragmentType: | FragmentType> + | Array>> | ReadonlyArray>> | null | undefined, -): TType | ReadonlyArray | null | undefined { +): TType | Array | ReadonlyArray | null | undefined { return fragmentType as any; } diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index 8eb8d6c8..3e9c6151 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -10,8 +10,32 @@ import * as types from './graphql'; * 3. It does not support dead code elimination, so it will add unused operations. * * Therefore it is highly recommended to use the babel or swc plugin for production. - */ -const documents = { + * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size + */ +type Documents = { + '\n query FetchErc20SwapCrossChainList($where: Erc20listV2Filter) {\n erc20_swapCrossChainList(where: $where) {\n name\n address\n symbol\n decimals\n slippage\n chainId\n logoImg\n tokenlists {\n name\n status\n }\n domains {\n name\n }\n funcLabels {\n key\n }\n attributeLabels {\n key\n }\n }\n }\n ': typeof types.FetchErc20SwapCrossChainListDocument; + '\n query FetchErc20ForecastSlippage($where: Erc20_extenderc20ExtendV2Filter) {\n erc20_extend_erc20ExtendV2(where: $where) {\n forecastSlippageList {\n forecastSlippage\n forecastValue\n confidenceRatio\n confidenceIntervalUpper\n confidenceIntervalLower\n }\n }\n }\n ': typeof types.FetchErc20ForecastSlippageDocument; + '\n query Ticks($where: Tick_filter, $skip: Int, $first: Int) {\n ticks(where: $where, skip: $skip, first: $first) {\n id\n poolAddress\n tickIdx\n liquidityNet\n price0\n price1\n }\n }\n': typeof types.TicksDocument; + '\n query FetchMiningList($where: Miningmining_list_filter) {\n mining_list(where: $where) {\n list {\n chainId\n type\n version\n address\n baseApy\n baseLpToken {\n decimals\n address: id\n symbol\n }\n baseToken {\n decimals\n address: id\n price\n symbol\n logoImg\n }\n endBlock\n miningContractAddress\n miningTotalDollar\n baseLpTokenMining\n quoteLpTokenMining\n quoteApy\n quoteLpToken {\n decimals\n address: id\n symbol\n }\n quoteToken {\n decimals\n address: id\n price\n symbol\n logoImg\n }\n rewardTokenInfos {\n apy\n decimals\n address: id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n rewardQuoteTokenInfos {\n apy\n decimals\n address: id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n startBlock\n title\n platform\n startTime\n endTime\n }\n totalCount\n chains\n }\n }\n ': typeof types.FetchMiningListDocument; + '\n query MiningList($where: Miningmining_list_filter) {\n mining_list(where: $where) {\n list {\n chainId\n type\n version\n address\n isGSP\n isNewERCMineV3\n baseApy\n baseLpToken {\n decimals\n id\n symbol\n }\n baseToken {\n decimals\n id\n price\n symbol\n logoImg\n }\n endBlock\n miningContractAddress\n miningTotalDollar\n baseLpTokenMining\n quoteLpTokenMining\n quoteApy\n quoteLpToken {\n decimals\n id\n symbol\n }\n quoteToken {\n decimals\n id\n price\n symbol\n logoImg\n }\n rewardTokenInfos {\n apy\n decimals\n id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n rewardQuoteTokenInfos {\n apy\n decimals\n id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n startBlock\n title\n platform\n blockNumber\n startTime\n endTime\n }\n totalCount\n chains\n }\n }\n ': typeof types.MiningListDocument; + '\n query MyCreatedMiningList($where: Miningmining_list_filter) {\n mining_list(where: $where) {\n list {\n chainId\n type\n version\n address\n isGSP\n isNewERCMineV3\n baseApy\n baseLpToken {\n decimals\n id\n symbol\n }\n baseToken {\n decimals\n id\n price\n symbol\n logoImg\n }\n endBlock\n miningContractAddress\n baseLpTokenMining\n quoteLpTokenMining\n quoteApy\n quoteLpToken {\n decimals\n id\n symbol\n }\n quoteToken {\n decimals\n id\n price\n symbol\n logoImg\n }\n rewardTokenInfos {\n apy\n decimals\n id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n rewardQuoteTokenInfos {\n apy\n decimals\n id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n startBlock\n title\n platform\n blockNumber\n participantsNum\n startTime\n endTime\n }\n totalCount\n chains\n }\n }\n ': typeof types.MyCreatedMiningListDocument; + '\n query FetchPoolList(\n $first: Int\n $where: Pair_filter\n $orderBy: Pair_orderBy\n ) {\n pairs(\n first: $first\n where: $where\n orderBy: $orderBy\n orderDirection: desc\n ) {\n id\n type\n creator\n owner\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n lastTradePrice\n feeBase\n feeQuote\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n }\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n }\n }\n ': typeof types.FetchPoolListDocument; + '\n query FetchLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n currentPage\n pageSize\n totalCount\n lqList {\n id\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ': typeof types.FetchLiquidityListDocument; + '\n query FetchMyLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n lqList {\n id\n liquidityPositions {\n id\n liquidityTokenBalance\n liquidityTokenInMining\n poolShare\n liquidityUSD\n tokenId\n outOfRange\n priceRange {\n token0LowerPrice\n token0UpperPrice\n token1LowerPrice\n token1UpperPrice\n }\n tickLower {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n tickUpper {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n }\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ': typeof types.FetchMyLiquidityListDocument; + '\n query FetchDashboardPairList($where: Dashboardtype_list_filter) {\n dashboard_pairs_list(where: $where) {\n list {\n chainId\n pairAddress\n poolType\n baseReserve\n quoteReserve\n totalFee\n baseAddress\n quoteAddress\n baseSymbol\n quoteSymbol\n tvl\n baseTvl\n quoteTvl\n baseTvlRate\n quoteTvlRate\n }\n }\n }\n ': typeof types.FetchDashboardPairListDocument; + '\n query FetchPool(\n $id: ID!\n $where: Pair_filter\n $liquidityWhere: Liquiditylist_filter\n ) {\n pair(id: $id, where: $where) {\n id\n type\n creator\n owner\n traderCount\n volumeBaseToken\n volumeQuoteToken\n volumeUSD\n feeBase\n feeQuote\n mtFeeRate\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n baseLpToken {\n id\n symbol\n name\n decimals\n }\n quoteLpToken {\n id\n symbol\n name\n decimals\n }\n }\n liquidity_list(where: $liquidityWhere) {\n lqList {\n pair {\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n }\n }\n }\n }\n ': typeof types.FetchPoolDocument; + '\n query FetchPoolDayData($where: Dashboardday_filter) {\n dashboard_pairs_day_data(where: $where) {\n timestamp\n date\n volumeUsd\n feeUsd\n mtFeeUsd\n tvlUsd\n addresses\n }\n }\n ': typeof types.FetchPoolDayDataDocument; + '\n query FetchPoolDashboard($where: Dashboardpair_detail_filter) {\n dashboard_pairs_detail(where: $where) {\n fee\n volume\n totalFee\n totalMtFee\n totalVolume\n tvl\n turnover\n liquidity\n baseReserve\n quoteReserve\n baseVolume\n quoteVolume\n basePrice\n quotePrice\n price\n baseFee\n quoteFee\n baseMtFee\n quoteMtFee\n pair\n poolType\n baseVolumeCumulative\n quoteVolumeCumulative\n baseAddress\n baseSymbol\n quoteAddress\n quoteSymbol\n network\n pairAddress\n txes\n txesNear24h\n txUsers\n txUserNear24h\n mtFeeNear24h\n feeNear24h\n }\n }\n ': typeof types.FetchPoolDashboardDocument; + '\n query FetchPoolSwapList(\n $first: Int\n $skip: Int\n $where: Swap_filter\n $orderBy: Swap_orderBy\n $orderDirection: OrderDirection\n ) {\n swaps(\n first: $first\n skip: $skip\n where: $where\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n timestamp\n from\n baseVolume\n quoteVolume\n feeBase\n feeQuote\n fromToken {\n id\n symbol\n name\n decimals\n }\n toToken {\n id\n symbol\n name\n decimals\n }\n amountIn\n amountOut\n }\n }\n ': typeof types.FetchPoolSwapListDocument; + '\n query FetchLiquidityPositions(\n $id: ID!\n $first: Int\n $skip: Int\n $where: LiquidityPosition_filter\n $miningWhere: LiquidityPosition_filter\n $orderBy: LiquidityPosition_orderBy\n $orderDirection: OrderDirection\n ) {\n balance: liquidityPositions(\n first: $first\n skip: $skip\n where: $where\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n liquidityTokenBalance\n }\n mining: liquidityPositions(\n first: $first\n skip: $skip\n where: $miningWhere\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n liquidityTokenInMining\n }\n pair(id: $id) {\n lastTradePrice\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n }\n }\n }\n ': typeof types.FetchLiquidityPositionsDocument; + '\n query FetchPoolPairList(\n $first: Int\n $baseWhere: Pair_filter\n $quoteWhere: Pair_filter\n $orderBy: Pair_orderBy\n $orderDirection: OrderDirection\n ) {\n basePairs: pairs(\n first: $first\n where: $baseWhere\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n type\n creator\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n volumeUSD\n baseToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n }\n quotePairs: pairs(\n first: $first\n where: $quoteWhere\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n type\n creator\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n volumeUSD\n baseToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n }\n }\n ': typeof types.FetchPoolPairListDocument; + '\n query FetchUserSwapOrderHistories($where: User_swapswapFilter) {\n user_swap_orderHistories(where: $where) {\n count\n page\n list {\n chainId\n createdAt\n fromAmount\n fromTokenDecimals\n fromTokenPrice\n fromTokenSymbol\n fromTokenAddress\n fromTokenLogoImg\n hash\n status\n toAmount\n toTokenDecimals\n toTokenPrice\n toTokenSymbol\n toTokenAddress\n toTokenLogoImg\n minAmount\n nonce\n extra\n user\n }\n }\n }\n ': typeof types.FetchUserSwapOrderHistoriesDocument; + '\n query FetchNoticeCenterTransactionList(\n $where: Notice_centertransactionListFilter\n ) {\n notice_center_transactionList(where: $where) {\n list {\n chainId\n createTime\n extend\n from\n id\n key\n type\n }\n count\n limit\n page\n }\n }\n ': typeof types.FetchNoticeCenterTransactionListDocument; + '\n query FetchLiquidityLpPartnerRewards(\n $where: LiquidityLpPartnerRewardsInput\n ) {\n liquidity_getLpPartnerRewards(where: $where) {\n partnerInfos {\n partner\n logo\n introduction\n link\n theme\n sort\n platform\n extra\n }\n partnerRewards {\n chainId\n pool\n partner\n reward\n type\n }\n }\n }\n ': typeof types.FetchLiquidityLpPartnerRewardsDocument; + '\n query FetchUserprofileReward($where: UserprofileReward_filter) {\n userprofile_reward(where: $where) {\n name_key\n token_address\n contract_address\n token_symbol\n locking\n version\n merkle {\n index\n amout\n proof\n }\n }\n }\n ': typeof types.FetchUserprofileRewardDocument; + '\n query FetchLpFeeRewardUserReward(\n $where: Lp_fee_rewardLpFeeRewardUserInput\n ) {\n lp_fee_reward_getUserReward(where: $where) {\n estimatedReward\n estimatedRewardRaw\n claimableReward\n claimableRewardRaw\n claimStatus\n claimContract\n periodId\n periodLabel\n periodStartTime\n periodEndTime\n merkleRoot\n index\n proof\n }\n }\n ': typeof types.FetchLpFeeRewardUserRewardDocument; +}; +const documents: Documents = { '\n query FetchErc20SwapCrossChainList($where: Erc20listV2Filter) {\n erc20_swapCrossChainList(where: $where) {\n name\n address\n symbol\n decimals\n slippage\n chainId\n logoImg\n tokenlists {\n name\n status\n }\n domains {\n name\n }\n funcLabels {\n key\n }\n attributeLabels {\n key\n }\n }\n }\n ': types.FetchErc20SwapCrossChainListDocument, '\n query FetchErc20ForecastSlippage($where: Erc20_extenderc20ExtendV2Filter) {\n erc20_extend_erc20ExtendV2(where: $where) {\n forecastSlippageList {\n forecastSlippage\n forecastValue\n confidenceRatio\n confidenceIntervalUpper\n confidenceIntervalLower\n }\n }\n }\n ': @@ -26,13 +50,13 @@ const documents = { types.MyCreatedMiningListDocument, '\n query FetchPoolList(\n $first: Int\n $where: Pair_filter\n $orderBy: Pair_orderBy\n ) {\n pairs(\n first: $first\n where: $where\n orderBy: $orderBy\n orderDirection: desc\n ) {\n id\n type\n creator\n owner\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n lastTradePrice\n feeBase\n feeQuote\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n }\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n }\n }\n ': types.FetchPoolListDocument, - '\n query FetchLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n currentPage\n pageSize\n totalCount\n lqList {\n id\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ': + '\n query FetchLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n currentPage\n pageSize\n totalCount\n lqList {\n id\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ': types.FetchLiquidityListDocument, - '\n query FetchMyLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n lqList {\n id\n liquidityPositions {\n id\n liquidityTokenBalance\n liquidityTokenInMining\n poolShare\n liquidityUSD\n tokenId\n outOfRange\n priceRange {\n token0LowerPrice\n token0UpperPrice\n token1LowerPrice\n token1UpperPrice\n }\n tickLower {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n tickUpper {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n }\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ': + '\n query FetchMyLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n lqList {\n id\n liquidityPositions {\n id\n liquidityTokenBalance\n liquidityTokenInMining\n poolShare\n liquidityUSD\n tokenId\n outOfRange\n priceRange {\n token0LowerPrice\n token0UpperPrice\n token1LowerPrice\n token1UpperPrice\n }\n tickLower {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n tickUpper {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n }\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ': types.FetchMyLiquidityListDocument, '\n query FetchDashboardPairList($where: Dashboardtype_list_filter) {\n dashboard_pairs_list(where: $where) {\n list {\n chainId\n pairAddress\n poolType\n baseReserve\n quoteReserve\n totalFee\n baseAddress\n quoteAddress\n baseSymbol\n quoteSymbol\n tvl\n baseTvl\n quoteTvl\n baseTvlRate\n quoteTvlRate\n }\n }\n }\n ': types.FetchDashboardPairListDocument, - '\n query FetchPool(\n $id: ID!\n $where: Pair_filter\n $liquidityWhere: Liquiditylist_filter\n ) {\n pair(id: $id, where: $where) {\n id\n type\n creator\n owner\n traderCount\n volumeBaseToken\n volumeQuoteToken\n volumeUSD\n feeBase\n feeQuote\n mtFeeRate\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n baseLpToken {\n id\n symbol\n name\n decimals\n }\n quoteLpToken {\n id\n symbol\n name\n decimals\n }\n }\n liquidity_list(where: $liquidityWhere) {\n lqList {\n pair {\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n }\n miningAddress\n }\n }\n }\n }\n ': + '\n query FetchPool(\n $id: ID!\n $where: Pair_filter\n $liquidityWhere: Liquiditylist_filter\n ) {\n pair(id: $id, where: $where) {\n id\n type\n creator\n owner\n traderCount\n volumeBaseToken\n volumeQuoteToken\n volumeUSD\n feeBase\n feeQuote\n mtFeeRate\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n baseLpToken {\n id\n symbol\n name\n decimals\n }\n quoteLpToken {\n id\n symbol\n name\n decimals\n }\n }\n liquidity_list(where: $liquidityWhere) {\n lqList {\n pair {\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n }\n }\n }\n }\n ': types.FetchPoolDocument, '\n query FetchPoolDayData($where: Dashboardday_filter) {\n dashboard_pairs_day_data(where: $where) {\n timestamp\n date\n volumeUsd\n feeUsd\n mtFeeUsd\n tvlUsd\n addresses\n }\n }\n ': types.FetchPoolDayDataDocument, @@ -52,6 +76,8 @@ const documents = { types.FetchLiquidityLpPartnerRewardsDocument, '\n query FetchUserprofileReward($where: UserprofileReward_filter) {\n userprofile_reward(where: $where) {\n name_key\n token_address\n contract_address\n token_symbol\n locking\n version\n merkle {\n index\n amout\n proof\n }\n }\n }\n ': types.FetchUserprofileRewardDocument, + '\n query FetchLpFeeRewardUserReward(\n $where: Lp_fee_rewardLpFeeRewardUserInput\n ) {\n lp_fee_reward_getUserReward(where: $where) {\n estimatedReward\n estimatedRewardRaw\n claimableReward\n claimableRewardRaw\n claimStatus\n claimContract\n periodId\n periodLabel\n periodStartTime\n periodEndTime\n merkleRoot\n index\n proof\n }\n }\n ': + types.FetchLpFeeRewardUserRewardDocument, }; /** @@ -100,13 +126,13 @@ export function graphql( * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql( - source: '\n query FetchLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n currentPage\n pageSize\n totalCount\n lqList {\n id\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ', + source: '\n query FetchLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n currentPage\n pageSize\n totalCount\n lqList {\n id\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ', ): typeof import('./graphql').FetchLiquidityListDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql( - source: '\n query FetchMyLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n lqList {\n id\n liquidityPositions {\n id\n liquidityTokenBalance\n liquidityTokenInMining\n poolShare\n liquidityUSD\n tokenId\n outOfRange\n priceRange {\n token0LowerPrice\n token0UpperPrice\n token1LowerPrice\n token1UpperPrice\n }\n tickLower {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n tickUpper {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n }\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ', + source: '\n query FetchMyLiquidityList($where: Liquiditylist_filter) {\n liquidity_list(where: $where) {\n lqList {\n id\n liquidityPositions {\n id\n liquidityTokenBalance\n liquidityTokenInMining\n poolShare\n liquidityUSD\n tokenId\n outOfRange\n priceRange {\n token0LowerPrice\n token0UpperPrice\n token1LowerPrice\n token1UpperPrice\n }\n tickLower {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n tickUpper {\n id\n tickIdx\n liquidityGross\n liquidityNet\n price0\n price1\n }\n }\n pair {\n id\n chainId\n type\n lpFeeRate\n mtFeeRate\n creator\n baseLpToken {\n id\n decimals\n }\n quoteLpToken {\n id\n decimals\n }\n baseToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n quoteToken {\n id\n symbol\n name\n decimals\n logoImg\n }\n tvl\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n volume24H\n }\n }\n }\n }\n ', ): typeof import('./graphql').FetchMyLiquidityListDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. @@ -118,7 +144,7 @@ export function graphql( * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql( - source: '\n query FetchPool(\n $id: ID!\n $where: Pair_filter\n $liquidityWhere: Liquiditylist_filter\n ) {\n pair(id: $id, where: $where) {\n id\n type\n creator\n owner\n traderCount\n volumeBaseToken\n volumeQuoteToken\n volumeUSD\n feeBase\n feeQuote\n mtFeeRate\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n baseLpToken {\n id\n symbol\n name\n decimals\n }\n quoteLpToken {\n id\n symbol\n name\n decimals\n }\n }\n liquidity_list(where: $liquidityWhere) {\n lqList {\n pair {\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n }\n miningAddress\n }\n }\n }\n }\n ', + source: '\n query FetchPool(\n $id: ID!\n $where: Pair_filter\n $liquidityWhere: Liquiditylist_filter\n ) {\n pair(id: $id, where: $where) {\n id\n type\n creator\n owner\n traderCount\n volumeBaseToken\n volumeQuoteToken\n volumeUSD\n feeBase\n feeQuote\n mtFeeRate\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n baseToken {\n id\n symbol\n name\n decimals\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n baseLpToken {\n id\n symbol\n name\n decimals\n }\n quoteLpToken {\n id\n symbol\n name\n decimals\n }\n }\n liquidity_list(where: $liquidityWhere) {\n lqList {\n pair {\n apy {\n miningBaseApy\n miningQuoteApy\n transactionBaseApy\n transactionQuoteApy\n metromMiningApy\n lpFeeRewardApy\n }\n miningAddress\n }\n }\n }\n }\n ', ): typeof import('./graphql').FetchPoolDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. @@ -174,6 +200,12 @@ export function graphql( export function graphql( source: '\n query FetchUserprofileReward($where: UserprofileReward_filter) {\n userprofile_reward(where: $where) {\n name_key\n token_address\n contract_address\n token_symbol\n locking\n version\n merkle {\n index\n amout\n proof\n }\n }\n }\n ', ): typeof import('./graphql').FetchUserprofileRewardDocument; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query FetchLpFeeRewardUserReward(\n $where: Lp_fee_rewardLpFeeRewardUserInput\n ) {\n lp_fee_reward_getUserReward(where: $where) {\n estimatedReward\n estimatedRewardRaw\n claimableReward\n claimableRewardRaw\n claimStatus\n claimContract\n periodId\n periodLabel\n periodStartTime\n periodEndTime\n merkleRoot\n index\n proof\n }\n }\n ', +): typeof import('./graphql').FetchLpFeeRewardUserRewardDocument; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index 0f8ac08e..9a80e254 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -34,6 +34,7 @@ export type Scalars = { BigNumber: { input: any; output: any }; /** Bytes custom scalar type */ Bytes: { input: any; output: any }; + Curve_stableswap_ngBytes: { input: any; output: any }; Dodochain_earnBytes: { input: any; output: any }; JSON: { input: any; output: any }; LiquidityBytes: { input: any; output: any }; @@ -258,6 +259,32 @@ export type All_Filter = { export type All_OrderBy = 'chain' | 'id'; +export type AmmTick = { + id: Scalars['String']['output']; + liquidityGross: Scalars['BigDecimal']['output']; + liquidityNet: Scalars['BigDecimal']['output']; + poolAddress: Scalars['String']['output']; + price0: Scalars['BigDecimal']['output']; + price1: Scalars['BigDecimal']['output']; + protocolPosition?: Maybe; + tickArrayLower?: Maybe; + tickArrayUpper?: Maybe; + tickIdx: Scalars['BigDecimal']['output']; +}; + +export type AmmTicksDataResult = { + chain: Scalars['String']['output']; + pairType: Scalars['String']['output']; + poolAddress: Scalars['String']['output']; + ticks: Array>; +}; + +export type AmmgetTicksDataInput = { + chain: Scalars['String']['input']; + pairType: Scalars['String']['input']; + poolAddress: Scalars['String']['input']; +}; + export type AnnouncementAnnouncement = { endAt?: Maybe; id?: Maybe; @@ -812,6 +839,52 @@ export type Avatar_Filter = { export type Avatar_OrderBy = 'balance' | 'chain' | 'componentsID' | 'id'; +export type Backend_Manage_Settlex_ServerBatchTransferList = { + batchId?: Maybe; + batchTransfers?: Maybe; + chainId?: Maybe; + date?: Maybe; + extend?: Maybe; + hash?: Maybe; + id?: Maybe; + memo?: Maybe; + platformFeeUsd?: Maybe; + receiveAmount?: Maybe; + receiveAmountUsd?: Maybe; + receiveToken?: Maybe; + receiver?: Maybe; + sendAmount?: Maybe; + sendAmountUsd?: Maybe; + sendToken?: Maybe; + sender?: Maybe; + status?: Maybe; + timestamp?: Maybe; +}; + +export type Backend_Manage_Settlex_ServerBatchTransferResult = { + count?: Maybe; + list?: Maybe>>; + page?: Maybe; + pageSize?: Maybe; +}; + +export type Backend_Manage_Settlex_ServerbatchTransferFilter = { + chainId?: InputMaybe; + orderColumn?: InputMaybe; + orderValue?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; + sendToken?: InputMaybe; + type?: InputMaybe; + user?: InputMaybe; +}; + +export type Backend_Manage_Settlex_ServerdetailBatchTransferFilter = { + id?: InputMaybe; + refreshNow?: InputMaybe; +}; + export type Balance = { chain: Scalars['String']['output']; id: Scalars['ID']['output']; @@ -847,6 +920,73 @@ export type Balance_Filter = { export type Balance_OrderBy = 'chain' | 'id'; +export type Berachain_AlmPool = { + id?: Maybe; + poolDayData?: Maybe>>; + token0?: Maybe; + token0Price?: Maybe; + token1?: Maybe; + token1Price?: Maybe; + totalValueLockedUSD?: Maybe; +}; + +export type Berachain_AlmPoolDayData = { + date?: Maybe; + feesUSD?: Maybe; + tvlUSD?: Maybe; + volumeUSD?: Maybe; +}; + +export type Berachain_AlmToken = { + decimals?: Maybe; + derivedUSD?: Maybe; + id?: Maybe; + initialUSD?: Maybe; + liquidityUSD?: Maybe; + marketCap?: Maybe; + name?: Maybe; + priceChange24h?: Maybe; + priceChange24hPercentage?: Maybe; + symbol?: Maybe; + totalSupply?: Maybe; +}; + +export type Berachain_AlmVault = { + allowTokenA?: Maybe; + allowTokenB?: Maybe; + count?: Maybe; + createdAtTimestamp?: Maybe; + feeApr_1d?: Maybe; + feeApr_3d?: Maybe; + feeApr_7d?: Maybe; + feeApr_30d?: Maybe; + holdersCount?: Maybe; + id?: Maybe; + pool?: Maybe; + protocol?: Maybe; + sender?: Maybe; + tokenA?: Maybe; + tokenB?: Maybe; + totalAmount0?: Maybe; + totalAmount1?: Maybe; + totalShares?: Maybe; + totalSupply?: Maybe; +}; + +export type Berachain_AlmVaultShares = { + id?: Maybe; + vault?: Maybe; + vaultShareBalance?: Maybe; +}; + +export type Berachain_AlmallVaultsSearch = { + search?: InputMaybe; +}; + +export type Berachain_AlmmyVaultsSearch = { + address?: InputMaybe; +}; + export type BidHistory = { /** action :bid、cancle */ action: Scalars['String']['output']; @@ -1876,6 +2016,7 @@ export type Cross_Chain_SwapExtend = { encodeId?: Maybe; fromToken?: Maybe; lifiBridge?: Maybe; + productStateInfo?: Maybe; refunded?: Maybe; route?: Maybe; toToken?: Maybe; @@ -1909,6 +2050,182 @@ export type Cross_Chain_SwapToolDetail = { name?: Maybe; }; +export type Cross_Chain_Swap_ZetachainCrossChainOrderCreate = { + success?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainOrderList = { + bridgeChainId?: Maybe; + bridgeRefundVault?: Maybe; + createdAt?: Maybe; + endTime?: Maybe; + externalId?: Maybe; + fees?: Maybe; + fromAddress?: Maybe; + fromAmount?: Maybe; + fromAmountUSD?: Maybe; + fromAmountWithOutDecimals?: Maybe; + fromChainId?: Maybe; + fromHash?: Maybe; + fromTokenAddress?: Maybe; + id?: Maybe; + omniPlan?: Maybe; + refundAmount?: Maybe; + refundChainId?: Maybe; + refundHash?: Maybe; + refundToken?: Maybe; + refundUser?: Maybe; + slippage?: Maybe; + source?: Maybe; + startTime?: Maybe; + status?: Maybe; + statusCode?: Maybe; + subStatus?: Maybe; + toAddress?: Maybe; + toAmount?: Maybe; + toAmountUSD?: Maybe; + toAmountWithOutDecimals?: Maybe; + toChainId?: Maybe; + toHash?: Maybe; + toTokenAddress?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainOrderResult = { + count?: Maybe; + list?: Maybe>>; + page?: Maybe; + pageSize?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainRoute = { + approveTarget?: Maybe; + encodeParams?: Maybe; + fees?: Maybe; + fromAddress?: Maybe; + fromAmount?: Maybe; + fromAmountUSD?: Maybe; + fromAmountWithOutDecimals?: Maybe; + fromChainId?: Maybe; + fromTokenAddress?: Maybe; + min?: Maybe; + omniPlan?: Maybe; + priceImpact?: Maybe; + routeId?: Maybe; + slippage?: Maybe; + source?: Maybe; + toAddress?: Maybe; + toAmount?: Maybe; + toAmountUSD?: Maybe; + toAmountWithOutDecimals?: Maybe; + toChainId?: Maybe; + toTokenAddress?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainTransactionEncode = { + chainId?: Maybe; + data?: Maybe; + from?: Maybe; + to?: Maybe; + value?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainSwapOrderList = { + chainId?: Maybe; + createdAt?: Maybe; + extra?: Maybe; + fromAmount?: Maybe; + fromTokenAddress?: Maybe; + fromTokenDecimals?: Maybe; + fromTokenPrice?: Maybe; + fromTokenSymbol?: Maybe; + hash?: Maybe; + key?: Maybe; + maxAmount?: Maybe; + minAmount?: Maybe; + nonce?: Maybe; + status?: Maybe; + toAmount?: Maybe; + toTokenAddress?: Maybe; + toTokenDecimals?: Maybe; + toTokenPrice?: Maybe; + toTokenSymbol?: Maybe; + user?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainSwapOrderResult = { + count?: Maybe; + list?: Maybe>>; + page?: Maybe; + pageSize?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainorderCreateData = { + calldata?: InputMaybe; + fees?: InputMaybe; + fromAddress?: InputMaybe; + fromAmount?: InputMaybe; + fromAmountUSD?: InputMaybe; + fromAmountWithOutDecimals?: InputMaybe; + fromChainId?: InputMaybe; + fromHash?: InputMaybe; + fromTokenAddress?: InputMaybe; + omniPlan?: InputMaybe; + routeId?: InputMaybe; + slippage?: InputMaybe; + source?: InputMaybe; + toAddress?: InputMaybe; + toAmount?: InputMaybe; + toAmountUSD?: InputMaybe; + toAmountWithOutDecimals?: InputMaybe; + toChainId?: InputMaybe; + toTokenAddress?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainorderDetailData = { + fromChainId?: InputMaybe; + fromHash?: InputMaybe; + refreshNow?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainorderListData = { + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; + type?: InputMaybe; + user?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainorderRefundClaimedData = { + externalId?: InputMaybe; + hash?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainrouteParams = { + fromAddress?: InputMaybe; + fromAmount?: InputMaybe; + fromChainId?: InputMaybe; + fromTokenAddress?: InputMaybe; + refreshNow?: InputMaybe; + slippage?: InputMaybe; + source?: InputMaybe; + toAddress?: InputMaybe; + toChainId?: InputMaybe; + toTokenAddress?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainswapOrderListData = { + chainId?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; + userAddress?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachaintransactionEncodeParams = { + interfaceParams?: InputMaybe; + refreshNow?: InputMaybe; +}; + export type Cross_Chain_SwapdodoOrderListData = { from?: InputMaybe; limit?: InputMaybe; @@ -1948,6 +2265,7 @@ export type Cross_Chain_SwaporderCreateDataExtendRoute = { feeUSD?: InputMaybe; step?: InputMaybe; toAmount?: InputMaybe; + toAmountMin?: InputMaybe; }; export type Cross_Chain_SwaporderDetailData = { @@ -1960,8 +2278,10 @@ export type Cross_Chain_SwaporderListData = { chainId?: InputMaybe; limit?: InputMaybe; page?: InputMaybe; + product?: InputMaybe; refreshNow?: InputMaybe; source?: InputMaybe; + status?: InputMaybe; user?: InputMaybe; }; @@ -1973,6 +2293,7 @@ export type Cross_Chain_SwaporderNewStatusData = { export type Cross_Chain_SwaporderRefundCountData = { chainId?: InputMaybe; from?: InputMaybe; + product?: InputMaybe; refreshNow?: InputMaybe; source?: InputMaybe; user?: InputMaybe; @@ -2074,79 +2395,416 @@ export type Cross_Chain_TokentokenlistFilter = { refreshNow?: InputMaybe; }; -export type CrowdPooling = { - /** base token */ - baseToken: Token; - /** bid end time */ - bidEndTime: Scalars['BigInt']['output']; - /** bid start time */ - bidStartTime: Scalars['BigInt']['output']; - /** clam end time */ - calmEndTime: Scalars['BigInt']['output']; - chain: Scalars['String']['output']; - /** create time */ - createTime: Scalars['BigInt']['output']; - /** creator */ - creator: Scalars['Bytes']['output']; - /** created dvm address */ - dvm?: Maybe; - /** pool feerate */ - feeRate?: Maybe; - /** freeze duration */ - freezeDuration: Scalars['BigInt']['output']; - /** i */ - i: Scalars['BigInt']['output']; - /** cp address */ - id: Scalars['ID']['output']; - /** investors count = creators */ - investorsCount: Scalars['BigInt']['output']; - /** is overcap stop */ - isOvercapStop?: Maybe; - /** k */ - k: Scalars['BigInt']['output']; - /** liquidator */ - liquidator: Scalars['Bytes']['output']; - /** mt fee rate model */ - mtFeeRateModel: Scalars['Bytes']['output']; - /** total quote in pool */ - poolQuote: Scalars['BigDecimal']['output']; - /** pool quote cap */ - poolQuoteCap: Scalars['BigDecimal']['output']; - /** quote token */ - quoteToken: Token; - /** serial number */ - serialNumber: Scalars['BigInt']['output']; - /** settle state */ - settled: Scalars['Boolean']['output']; - /** token claim duration */ - tokenClaimDuration?: Maybe; - /** token cliff rate */ - tokenCliffRate?: Maybe; - /** token vesting duration */ - tokenVestingDuration?: Maybe; - /** total base */ - totalBase: Scalars['BigDecimal']['output']; - /** total shares */ - totalShares: Scalars['BigDecimal']['output']; - /** updatedAt */ - updatedAt?: Maybe; - /** version */ - version?: Maybe; - /** vesting duration */ - vestingDuration: Scalars['BigInt']['output']; +export type Cross_Chain_TransferAttributeLabelV2 = { + key?: Maybe; + name?: Maybe; + status?: Maybe; }; -export type CrowdPoolingDayData = { - /** total quote canceled in durnation */ - canceledQuote: Scalars['BigDecimal']['output']; - chain: Scalars['String']['output']; - /** CrowdPooling */ - crowdPooling: CrowdPooling; - /** uinx timestamp(start of day) */ - date: Scalars['Int']['output']; - /** cp address - day id */ - id: Scalars['ID']['output']; - /** invest count */ +export type Cross_Chain_TransferCrossChainOrder = { + createdAt?: Maybe; + duration?: Maybe; + endTime?: Maybe; + fee?: Maybe; + feeUsd?: Maybe; + fromAmount?: Maybe; + fromChainId?: Maybe; + fromHash?: Maybe; + fromTokenAddress?: Maybe; + fromTokenDecimals?: Maybe; + fromTokenName?: Maybe; + fromTokenSymbol?: Maybe; + gas?: Maybe; + gasUsd?: Maybe; + id?: Maybe; + status?: Maybe; + toAddress?: Maybe; + toAmount?: Maybe; + toChainId?: Maybe; + toHash?: Maybe; + toTokenAddress?: Maybe; + toTokenDecimals?: Maybe; + toTokenName?: Maybe; + toTokenSymbol?: Maybe; + updatedAt?: Maybe; + user?: Maybe; +}; + +export type Cross_Chain_TransferCrossChainOrderList = { + currentPage?: Maybe; + list?: Maybe>>; + total?: Maybe; +}; + +export type Cross_Chain_TransferDomain = { + env?: Maybe; + name?: Maybe; +}; + +export type Cross_Chain_TransferErc20V2List = { + address?: Maybe; + attributeLabels?: Maybe>>; + chainId?: Maybe; + crossChainSymbol?: Maybe; + decimals?: Maybe; + domains?: Maybe>>; + erc20Extend?: Maybe; + funcLabels?: Maybe>>; + id?: Maybe; + logoImg?: Maybe; + name?: Maybe; + position?: Maybe; + slippage?: Maybe; + symbol?: Maybe; + tokenlists?: Maybe>>; +}; + +export type Cross_Chain_TransferExplorerAllSections = { + lastUpdated: Scalars['String']['output']; + sections: Array; +}; + +export type Cross_Chain_TransferExplorerProject = { + estimatedDate?: Maybe; + id: Scalars['Int']['output']; + launchDate?: Maybe; + projectLogo?: Maybe; + projectName: Scalars['String']['output']; + sections: Array; + sortOrder: Scalars['Int']['output']; + supportedChains?: Maybe>; + tags?: Maybe>; + tgeDate?: Maybe; + totalRaised?: Maybe; + twitterUrl?: Maybe; + websiteUrl?: Maybe; +}; + +export type Cross_Chain_TransferExplorerSection = + | 'hot_projects' + | 'mainnet_launches' + | 'recent_airdrops' + | 'testnet_launches' + | 'upcoming_airdrops'; + +export type Cross_Chain_TransferExplorerSectionProjects = { + projects: Array; + section: Cross_Chain_TransferExplorerSection; + sectionName: Scalars['String']['output']; + total: Scalars['Int']['output']; +}; + +export type Cross_Chain_TransferFeeBreakdown = { + crossChainFee: Scalars['String']['output']; + crossChainFeeUsd?: Maybe; + sourceSwapFee: Scalars['String']['output']; + sourceSwapFeeUsd?: Maybe; + targetSwapFee: Scalars['String']['output']; + targetSwapFeeUsd?: Maybe; + totalFee: Scalars['String']['output']; + totalFeeUsd?: Maybe; +}; + +export type Cross_Chain_TransferFuncLabelV2 = { + key?: Maybe; + name?: Maybe; + status?: Maybe; +}; + +export type Cross_Chain_TransferHeterogeneousQuoteResponse = { + amount: Scalars['String']['output']; + amountFormatted: Scalars['String']['output']; + bestQuote: Scalars['String']['output']; + bestQuoteFormatted: Scalars['String']['output']; + crossChainSymbol: Scalars['String']['output']; + estimatedCompletionTime: Scalars['Int']['output']; + feeBreakdown?: Maybe; + fixedFee: Scalars['String']['output']; + fixedFeeFormatted: Scalars['String']['output']; + fixedFeeUsd: Scalars['String']['output']; + gasFee: Scalars['String']['output']; + gasFeeFormatted: Scalars['String']['output']; + gasFeeUsd: Scalars['String']['output']; + gasTokenPrice: Scalars['String']['output']; + intermediateToken?: Maybe; + isHeterogeneous: Scalars['Boolean']['output']; + minReceiveQuote: Scalars['String']['output']; + minReceiveQuoteFormatted: Scalars['String']['output']; + orderId: Scalars['String']['output']; + rateFee: Scalars['String']['output']; + rateFeeFormatted: Scalars['String']['output']; + rateFeeUsd: Scalars['String']['output']; + recipient: Scalars['String']['output']; + slippageTolerance?: Maybe; + sourceChainId: Scalars['Int']['output']; + sourceSwap: Cross_Chain_TransferSwapInfo; + sourceTokenAddress: Scalars['String']['output']; + sourceTokenDecimals: Scalars['Int']['output']; + sourceTokenName: Scalars['String']['output']; + sourceTokenPrice: Scalars['String']['output']; + sourceTokenSymbol: Scalars['String']['output']; + targetChainId: Scalars['Int']['output']; + targetSwap: Cross_Chain_TransferSwapInfo; + targetTokenAddress: Scalars['String']['output']; + targetTokenDecimals: Scalars['Int']['output']; + targetTokenName: Scalars['String']['output']; + targetTokenSymbol: Scalars['String']['output']; + timestamp: Scalars['String']['output']; + totalFee: Scalars['String']['output']; + totalFeeFormatted: Scalars['String']['output']; + totalFeeUsd: Scalars['String']['output']; + totalPriceImpact: Scalars['Float']['output']; + transactionData: Cross_Chain_TransferQuoteResponseTransactionDataDto; + userAddress: Scalars['String']['output']; + version: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferOrderDetailFilter = { + orderId: Scalars['String']['input']; +}; + +export type Cross_Chain_TransferOrderListFilter = { + chainId?: InputMaybe; + destChainId?: InputMaybe; + maxAmount?: InputMaybe; + minAmount?: InputMaybe; + origChainId?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + status?: InputMaybe; + user?: InputMaybe; +}; + +export type Cross_Chain_TransferQuoteResponse = { + amount: Scalars['String']['output']; + amountFormatted: Scalars['String']['output']; + bestQuote: Scalars['String']['output']; + bestQuoteFormatted: Scalars['String']['output']; + crossChainSymbol: Scalars['String']['output']; + fixedFee: Scalars['String']['output']; + fixedFeeFormatted: Scalars['String']['output']; + fixedFeeUsd: Scalars['String']['output']; + gasFee: Scalars['String']['output']; + gasFeeFormatted: Scalars['String']['output']; + gasFeeUsd: Scalars['String']['output']; + gasTokenPrice: Scalars['String']['output']; + minReceiveQuote: Scalars['String']['output']; + minReceiveQuoteFormatted: Scalars['String']['output']; + orderId: Scalars['String']['output']; + rateFee: Scalars['String']['output']; + rateFeeFormatted: Scalars['String']['output']; + rateFeeUsd: Scalars['String']['output']; + recipient: Scalars['String']['output']; + sourceChainId: Scalars['Int']['output']; + sourceTokenAddress: Scalars['String']['output']; + sourceTokenDecimals: Scalars['Int']['output']; + sourceTokenName: Scalars['String']['output']; + sourceTokenPrice: Scalars['String']['output']; + sourceTokenSymbol: Scalars['String']['output']; + targetChainId: Scalars['Int']['output']; + targetTokenAddress: Scalars['String']['output']; + targetTokenDecimals: Scalars['Int']['output']; + targetTokenName: Scalars['String']['output']; + targetTokenSymbol: Scalars['String']['output']; + timestamp: Scalars['String']['output']; + totalFee: Scalars['String']['output']; + totalFeeFormatted: Scalars['String']['output']; + totalFeeUsd: Scalars['String']['output']; + transactionData: Cross_Chain_TransferQuoteResponseTransactionDataDto; + userAddress: Scalars['String']['output']; + version: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferQuoteResponseTransactionDataDto = { + data: Scalars['String']['output']; + targetApproveAddr?: Maybe; + to: Scalars['String']['output']; + value: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferRouteStep = { + amountIn: Scalars['String']['output']; + amountOut: Scalars['String']['output']; + poolAddress: Scalars['String']['output']; + protocol: Scalars['String']['output']; + tokenIn: Scalars['String']['output']; + tokenOut: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferSupportedChain = { + chainId: Scalars['Int']['output']; + chainName: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferSwapExecuteData = { + data: Scalars['String']['output']; + to: Scalars['String']['output']; + value: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferSwapInfo = { + estimatedGas?: Maybe; + executeData?: Maybe; + fromToken?: Maybe; + priceImpact?: Maybe; + quote?: Maybe; + required: Scalars['Boolean']['output']; + toToken?: Maybe; +}; + +export type Cross_Chain_TransferSwapQuoteInfo = { + executionPrice: Scalars['Float']['output']; + fromAmount: Scalars['String']['output']; + fromToken: Cross_Chain_TransferTokenInfo; + gasEstimate: Scalars['String']['output']; + minReceiveAmount: Scalars['String']['output']; + priceImpact: Scalars['Float']['output']; + routePath: Array; + toAmount: Scalars['String']['output']; + toToken: Cross_Chain_TransferTokenInfo; +}; + +export type Cross_Chain_TransferTokenInfo = { + address: Scalars['String']['output']; + chainId: Scalars['Int']['output']; + crossChainSymbol: Scalars['String']['output']; + decimals: Scalars['Int']['output']; + id: Scalars['Int']['output']; + name: Scalars['String']['output']; + symbol: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferTokenListV2 = { + chainId?: Maybe; + name?: Maybe; + status?: Maybe; +}; + +export type Cross_Chain_TransferheterogeneousQuoteFilter = { + amount: Scalars['String']['input']; + /** 同币种跨链时必填 */ + crossChainSymbol?: InputMaybe; + preferredIntermediateToken?: InputMaybe; + recipient: Scalars['String']['input']; + slippageTolerance?: InputMaybe; + sourceChainId: Scalars['Int']['input']; + sourceTokenAddress: Scalars['String']['input']; + targetChainId: Scalars['Int']['input']; + targetTokenAddress: Scalars['String']['input']; + userAddress: Scalars['String']['input']; +}; + +export type Cross_Chain_TransferlistV2Filter = { + chainId?: InputMaybe; + chainIds?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; +}; + +export type Cross_Chain_TransferquoteFilter = { + amount: Scalars['String']['input']; + crossChainSymbol: Scalars['String']['input']; + recipient: Scalars['String']['input']; + sourceChainId: Scalars['Int']['input']; + sourceTokenAddress: Scalars['String']['input']; + targetChainId: Scalars['Int']['input']; + targetTokenAddress: Scalars['String']['input']; + userAddress: Scalars['String']['input']; +}; + +export type Cross_Chain_Zetachain_TokenCrossChainTokenlist = { + address?: Maybe; + chainId?: Maybe; + decimals?: Maybe; + id?: Maybe; + logo?: Maybe; + name?: Maybe; + position?: Maybe; + slippage?: Maybe; + supportTargetChain?: Maybe; + symbol?: Maybe; +}; + +export type Cross_Chain_Zetachain_TokentokenlistFilter = { + chainId?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; +}; + +export type CrowdPooling = { + /** base token */ + baseToken: Token; + /** bid end time */ + bidEndTime: Scalars['BigInt']['output']; + /** bid start time */ + bidStartTime: Scalars['BigInt']['output']; + /** clam end time */ + calmEndTime: Scalars['BigInt']['output']; + chain: Scalars['String']['output']; + /** create time */ + createTime: Scalars['BigInt']['output']; + /** creator */ + creator: Scalars['Bytes']['output']; + /** created dvm address */ + dvm?: Maybe; + /** pool feerate */ + feeRate?: Maybe; + /** freeze duration */ + freezeDuration: Scalars['BigInt']['output']; + /** i */ + i: Scalars['BigInt']['output']; + /** cp address */ + id: Scalars['ID']['output']; + /** investors count = creators */ + investorsCount: Scalars['BigInt']['output']; + /** is overcap stop */ + isOvercapStop?: Maybe; + /** k */ + k: Scalars['BigInt']['output']; + /** liquidator */ + liquidator: Scalars['Bytes']['output']; + /** mt fee rate model */ + mtFeeRateModel: Scalars['Bytes']['output']; + /** total quote in pool */ + poolQuote: Scalars['BigDecimal']['output']; + /** pool quote cap */ + poolQuoteCap: Scalars['BigDecimal']['output']; + /** quote token */ + quoteToken: Token; + /** serial number */ + serialNumber: Scalars['BigInt']['output']; + /** settle state */ + settled: Scalars['Boolean']['output']; + /** token claim duration */ + tokenClaimDuration?: Maybe; + /** token cliff rate */ + tokenCliffRate?: Maybe; + /** token vesting duration */ + tokenVestingDuration?: Maybe; + /** total base */ + totalBase: Scalars['BigDecimal']['output']; + /** total shares */ + totalShares: Scalars['BigDecimal']['output']; + /** updatedAt */ + updatedAt?: Maybe; + /** version */ + version?: Maybe; + /** vesting duration */ + vestingDuration: Scalars['BigInt']['output']; +}; + +export type CrowdPoolingDayData = { + /** total quote canceled in durnation */ + canceledQuote: Scalars['BigDecimal']['output']; + chain: Scalars['String']['output']; + /** CrowdPooling */ + crowdPooling: CrowdPooling; + /** uinx timestamp(start of day) */ + date: Scalars['Int']['output']; + /** cp address - day id */ + id: Scalars['ID']['output']; + /** invest count */ investCount: Scalars['BigInt']['output']; /** total quote invest in durnation = taker tokens */ investedQuote: Scalars['BigDecimal']['output']; @@ -2945,75 +3603,211 @@ export type Crowd_Poolinglist_Filter = { top?: InputMaybe; }; -export type D3mmAsset = { - lpToken: D3mmToken; - token: D3mmToken; +export type Curve_Stableswap_NgFilterState = { + poolAddress?: InputMaybe; + poolName?: InputMaybe; + tokenAddress?: InputMaybe; }; -export type D3mmAssetDailyInterest = { - /** 存款 */ - balanceUsd: Scalars['BigDecimal']['output']; - date: Scalars['Int']['output']; - /** 挖矿收益,未完成暂时是假数据 */ - interestUsd: Scalars['BigDecimal']['output']; - /** 利息 */ - profitUsd: Scalars['BigDecimal']['output']; +export type Curve_Stableswap_NgLp = { + id?: Maybe; + liquidityTokenBalance?: Maybe; + lpTokens?: Maybe>>; }; -export type D3mmAssetInfo = { - address: Scalars['String']['output']; - /** 余款 */ - balanceUsd: Scalars['BigDecimal']['output']; - chainId: Scalars['Int']['output']; - decimals: Scalars['Int']['output']; - /** 总挖矿收益 */ - depositInterestUsd: Scalars['BigDecimal']['output']; - /** Total Liquidity - Can Deposit Funds - Amount */ - depositable: Scalars['BigDecimal']['output']; - /** Total Liquidity - Can Deposit Funds - Ratio */ - depositableRatio: Scalars['BigDecimal']['output']; - /** Total Liquidity - Deposited Funds - Amount */ - deposited: Scalars['BigDecimal']['output']; - /** Total Liquidity - Deposited Funds - Ratio */ - depositedRatio: Scalars['BigDecimal']['output']; - /** apy的组成部分, 挖矿利率 */ - miningApy: Scalars['BigDecimal']['output']; - /** Serve Fee APY */ - mtFeeApy: Scalars['BigDecimal']['output']; - name: Scalars['String']['output']; - /** @deprecated */ - staked: Scalars['BigDecimal']['output']; - /** apy的组成部分, 策略保底利率 */ - strategyApy: Scalars['BigDecimal']['output']; - /** - * 总策略保底收益 - * @deprecated - */ - strategyProfitUsd: Scalars['BigDecimal']['output']; - /** Fee APY */ - swapFeeApy: Scalars['BigDecimal']['output']; - symbol: Scalars['String']['output']; - /** @deprecated */ - unstaked: Scalars['BigDecimal']['output']; +export type Curve_Stableswap_NgLiquidityHistory = { + action: Scalars['String']['output']; + assets?: Maybe>; + id: Scalars['ID']['output']; + time: Scalars['BigInt']['output']; + user: Scalars['String']['output']; }; -export type D3mmAssetOperation = { +export type Curve_Stableswap_NgLiquidityHistoryAsset = { amount: Scalars['BigDecimal']['output']; - from?: Maybe; - hash: Scalars['String']['output']; - timestamp: Scalars['Int']['output']; - to?: Maybe; - /** dtoken代币 */ - token: D3mmToken; - /** 操作类型 */ - type: D3mmAssetOperationType; -}; - -export type D3mmAssetOperationPaginationResult = { - count: Scalars['Int']['output']; - list: Array>; - page: Scalars['Int']['output']; - size: Scalars['Int']['output']; + token: Curve_Stableswap_NgToken; +}; + +export type Curve_Stableswap_NgLiquidityHistoryListInfo = { + currentPage?: Maybe; + liquidityHistories?: Maybe>; + pageSize?: Maybe; + totalCount?: Maybe; +}; + +export type Curve_Stableswap_NgListInfo = { + chainId?: Maybe; + currentPage?: Maybe; + lqList?: Maybe>>; + pageSize?: Maybe; + totalCount?: Maybe; + user?: Maybe; +}; + +export type Curve_Stableswap_NgLqList = { + id?: Maybe; + isMyLiquidity?: Maybe; + liquidityPositions?: Maybe>>; + pool?: Maybe; +}; + +export type Curve_Stableswap_NgOrder = { + /** updatedAt tvl apy liquidity */ + orderBy?: InputMaybe; + /** desc asc' */ + orderDirection?: InputMaybe; +}; + +export type Curve_Stableswap_NgPool = { + a: Scalars['BigInt']['output']; + address: Scalars['String']['output']; + apy: Scalars['BigDecimal']['output']; + coins: Array; + dailyVolumeUsd: Scalars['BigDecimal']['output']; + daoFee: Scalars['BigDecimal']['output']; + decimals: Scalars['Int']['output']; + fee: Scalars['BigDecimal']['output']; + fees: Scalars['BigDecimal']['output']; + id: Scalars['ID']['output']; + liquidityUtilization: Scalars['BigDecimal']['output']; + name: Scalars['String']['output']; + offpegFeeMultiplier: Scalars['BigInt']['output']; + poolType: Scalars['String']['output']; + reserves?: Maybe>>; + symbol: Scalars['String']['output']; + totalSupply: Scalars['BigDecimal']['output']; + traderCount: Scalars['BigInt']['output']; + tvl: Scalars['BigDecimal']['output']; + virtualPrice: Scalars['BigDecimal']['output']; + volume: Scalars['BigDecimal']['output']; +}; + +export type Curve_Stableswap_NgPoolReserve = { + amount: Scalars['BigDecimal']['output']; + ratio: Scalars['BigDecimal']['output']; + token: Curve_Stableswap_NgToken; +}; + +export type Curve_Stableswap_NgSwap = { + id: Scalars['ID']['output']; + paidAmount: Scalars['BigDecimal']['output']; + paidToken: Curve_Stableswap_NgToken; + receivedAmount: Scalars['BigDecimal']['output']; + receivedToken: Curve_Stableswap_NgToken; + time: Scalars['BigInt']['output']; + user: Scalars['String']['output']; +}; + +export type Curve_Stableswap_NgSwapListInfo = { + currentPage?: Maybe; + pageSize?: Maybe; + swaps?: Maybe>; + totalCount?: Maybe; +}; + +export type Curve_Stableswap_NgToken = { + address: Scalars['String']['output']; + decimals: Scalars['Int']['output']; + id: Scalars['ID']['output']; + /** token logo img */ + logoImg?: Maybe; + name: Scalars['String']['output']; + symbol: Scalars['String']['output']; + tokenIndex?: Maybe; +}; + +export type Curve_Stableswap_NgUserToken = { + address: Scalars['String']['output']; + amount: Scalars['BigDecimal']['output']; + decimals: Scalars['Int']['output']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + symbol: Scalars['String']['output']; +}; + +export type Curve_Stableswap_Nglist_Filter = { + chainId?: InputMaybe; + currentPage?: InputMaybe; + filterState?: InputMaybe; + order?: InputMaybe; + pageSize?: InputMaybe; + user?: InputMaybe; +}; + +export type Curve_Stableswap_Ngpool_Info_Filter = { + chainId: Scalars['Int']['input']; + poolAddress: Scalars['String']['input']; +}; + +export type D3mmAsset = { + lpToken: D3mmToken; + token: D3mmToken; +}; + +export type D3mmAssetDailyInterest = { + /** 存款 */ + balanceUsd: Scalars['BigDecimal']['output']; + date: Scalars['Int']['output']; + /** 挖矿收益,未完成暂时是假数据 */ + interestUsd: Scalars['BigDecimal']['output']; + /** 利息 */ + profitUsd: Scalars['BigDecimal']['output']; +}; + +export type D3mmAssetInfo = { + address: Scalars['String']['output']; + /** 余款 */ + balanceUsd: Scalars['BigDecimal']['output']; + chainId: Scalars['Int']['output']; + decimals: Scalars['Int']['output']; + /** 总挖矿收益 */ + depositInterestUsd: Scalars['BigDecimal']['output']; + /** Total Liquidity - Can Deposit Funds - Amount */ + depositable: Scalars['BigDecimal']['output']; + /** Total Liquidity - Can Deposit Funds - Ratio */ + depositableRatio: Scalars['BigDecimal']['output']; + /** Total Liquidity - Deposited Funds - Amount */ + deposited: Scalars['BigDecimal']['output']; + /** Total Liquidity - Deposited Funds - Ratio */ + depositedRatio: Scalars['BigDecimal']['output']; + /** apy的组成部分, 挖矿利率 */ + miningApy: Scalars['BigDecimal']['output']; + /** Serve Fee APY */ + mtFeeApy: Scalars['BigDecimal']['output']; + name: Scalars['String']['output']; + /** @deprecated */ + staked: Scalars['BigDecimal']['output']; + /** apy的组成部分, 策略保底利率 */ + strategyApy: Scalars['BigDecimal']['output']; + /** + * 总策略保底收益 + * @deprecated + */ + strategyProfitUsd: Scalars['BigDecimal']['output']; + /** Fee APY */ + swapFeeApy: Scalars['BigDecimal']['output']; + symbol: Scalars['String']['output']; + /** @deprecated */ + unstaked: Scalars['BigDecimal']['output']; +}; + +export type D3mmAssetOperation = { + amount: Scalars['BigDecimal']['output']; + from?: Maybe; + hash: Scalars['String']['output']; + timestamp: Scalars['Int']['output']; + to?: Maybe; + /** dtoken代币 */ + token: D3mmToken; + /** 操作类型 */ + type: D3mmAssetOperationType; +}; + +export type D3mmAssetOperationPaginationResult = { + count: Scalars['Int']['output']; + list: Array>; + page: Scalars['Int']['output']; + size: Scalars['Int']['output']; }; export type D3mmAssetOperationType = @@ -3816,6 +4610,13 @@ export type DashboardDataGroupByDate = { volumeUsd?: Maybe; }; +export type DashboardOrder = { + /** tvl apy volume */ + orderBy?: InputMaybe; + /** desc asc' */ + orderDirection?: InputMaybe; +}; + export type DashboardPairData = { /** transaction count */ txes?: Maybe; @@ -4025,6 +4826,7 @@ export type Dashboardtype_List_Filter = { chainIds?: InputMaybe>>; creator?: InputMaybe; limit?: InputMaybe; + order?: InputMaybe; owner?: InputMaybe; page?: InputMaybe; refreshNow?: InputMaybe; @@ -5912,6 +6714,7 @@ export type Erc20listV2Filter = { chainIds?: InputMaybe; page?: InputMaybe; pageSize?: InputMaybe; + productName?: InputMaybe; refreshNow?: InputMaybe; }; @@ -6391,6 +7194,131 @@ export type IncentiveRewardHistory_OrderBy = | 'updatedAt' | 'user'; +export type Kaia_VaultDetailVault = { + activeTvl?: Maybe; + activeValue?: Maybe; + amount?: Maybe; + apy?: Maybe; + chainId?: Maybe; + feeRevenueLast30Days?: Maybe; + feeRevenueTotal?: Maybe; + poolAddress?: Maybe; + reserveTvl?: Maybe; + reserveValue?: Maybe; + tokenAddress?: Maybe; + tokenLogo?: Maybe; + tokenSymbol?: Maybe; + tvl?: Maybe; + yieldTvl?: Maybe; + yieldValue?: Maybe; +}; + +export type Kaia_VaultVaultList = { + activeTvl?: Maybe; + amount?: Maybe; + apy?: Maybe; + chainId?: Maybe; + feeRevenueLast30Days?: Maybe; + feeRevenueTotal?: Maybe; + poolAddress?: Maybe; + reserveTvl?: Maybe; + tokenAddress?: Maybe; + tokenLogo?: Maybe; + tokenSymbol?: Maybe; + tvl?: Maybe; + yieldTvl?: Maybe; +}; + +export type Kaia_VaultdetailFilter = { + chainId?: InputMaybe; + poolAddress?: InputMaybe; + refreshNow?: InputMaybe; +}; + +export type Kaia_VaultlistFilter = { + chainId?: InputMaybe; + refreshNow?: InputMaybe; +}; + +export type Leaderboard_ActivitiesActivityStats = { + addedLiquidity: Scalars['String']['output']; + topLPerRewards: Scalars['String']['output']; + topTraderRewards: Scalars['String']['output']; + tradingVolume: Scalars['String']['output']; +}; + +export type Leaderboard_ActivitiesLeaderboardInput = { + chain: Scalars['String']['input']; + date?: InputMaybe; + useCache?: InputMaybe; +}; + +export type Leaderboard_ActivitiesLeaderboardLPer = { + rank: Scalars['Int']['output']; + totalLiquidity: Scalars['String']['output']; + transactionCount: Scalars['Int']['output']; + user: Scalars['String']['output']; +}; + +export type Leaderboard_ActivitiesLeaderboardResult = { + chain?: Maybe; + date: Scalars['String']['output']; + endTime: Scalars['Int']['output']; + pairAddress?: Maybe; + period: Scalars['String']['output']; + startTime: Scalars['Int']['output']; + stats: Leaderboard_ActivitiesActivityStats; + topLPers: Array; + topTraders: Array; +}; + +export type Leaderboard_ActivitiesLeaderboardTrader = { + rank: Scalars['Int']['output']; + totalVolume: Scalars['String']['output']; + transactionCount: Scalars['Int']['output']; + user: Scalars['String']['output']; +}; + +export type Leaderboard_ActivitiesPeriodResult = { + endTime: Scalars['Int']['output']; + index: Scalars['Int']['output']; + startTime: Scalars['Int']['output']; + /** not_started ,ongoing, ended */ + status: Scalars['String']['output']; +}; + +export type Leaderboard_ActivitiesPeriodsInput = { + chain: Scalars['String']['input']; +}; + +export type Leaderboard_ActivitiesPeriodsResult = { + activityEndTime: Scalars['Int']['output']; + activityStartTime: Scalars['Int']['output']; + period: Scalars['String']['output']; + periods: Array; +}; + +export type Leaderboard_ActivitiesUserRankingInput = { + chain: Scalars['String']['input']; + date?: InputMaybe; + useCache?: InputMaybe; + user: Scalars['String']['input']; +}; + +export type Leaderboard_ActivitiesUserRankingResult = { + chain?: Maybe; + date: Scalars['String']['output']; + endTime: Scalars['Int']['output']; + lperRank?: Maybe; + pairAddress?: Maybe; + period: Scalars['String']['output']; + startTime: Scalars['Int']['output']; + totalLiquidity?: Maybe; + totalVolume?: Maybe; + traderRank?: Maybe; + user: Scalars['String']['output']; +}; + export type Limit_And_RfqCancelLimitOrderResponse = { authorization?: Maybe; }; @@ -6644,9 +7572,12 @@ export type Liquidator_OrderBy = | 'updatedAt'; export type LiquidityApyData = { + lpFeeRewardApy?: Maybe; metromMiningApy?: Maybe; miningBaseApy?: Maybe; miningQuoteApy?: Maybe; + /** 1D 7D 14D 30D */ + timeRange?: Maybe; transactionBaseApy?: Maybe; transactionQuoteApy?: Maybe; }; @@ -7069,14 +8000,19 @@ export type LiquidityLqList = { }; export type LiquidityOrder = { - /** updatedAt tvl apy liquidity */ + /** updatedAt tvl apy liquidity volume */ orderBy?: InputMaybe; /** desc asc' */ orderDirection?: InputMaybe; + /** 1D 7D 14D 30D */ + timeRange?: InputMaybe; }; export type LiquidityPair = { + /** Number of aggregated pools when aggPairs is true */ + aggregatedCount?: Maybe; apy?: Maybe; + apyList?: Maybe>>; /** base LP token, for DPP is null, for dodo v1 lpToken is different */ baseLpToken?: Maybe; /** base token reserve */ @@ -7133,6 +8069,7 @@ export type LiquidityPair = { mtFeeUSD: Scalars['BigDecimal']['output']; /** owner */ owner?: Maybe; + priceList?: Maybe>>; /** quote LP token,for DPP is null, for dodo v1 lpToken is different */ quoteLpToken?: Maybe; /** quote token reserve */ @@ -7158,6 +8095,7 @@ export type LiquidityPair = { volume24H?: Maybe; /** trade volume of basetoken */ volumeBaseToken: Scalars['BigDecimal']['output']; + volumeList?: Maybe>>; /** trade volume of quotetoken */ volumeQuoteToken: Scalars['BigDecimal']['output']; /** traded volume of USD */ @@ -7523,6 +8461,12 @@ export type LiquidityPosition_OrderBy = | 'vault' | 'yesterdayInterest'; +export type LiquidityPriceData = { + changeRate?: Maybe; + price?: Maybe; + timeRange?: Maybe; +}; + export type LiquidityTick = { id: Scalars['ID']['output']; liquidityGross: Scalars['BigInt']['output']; @@ -7569,12 +8513,18 @@ export type LiquidityToken = { volumeUSDBridge: Scalars['BigDecimal']['output']; }; +export type LiquidityVolumeData = { + timeRange?: Maybe; + volume?: Maybe; +}; + export type Liquiditycount_Data_Query = { chain?: InputMaybe; refreshNow?: InputMaybe; }; export type Liquiditylist_Filter = { + aggPairs?: InputMaybe; /** This field has been discarded for compatibility with the previous interface */ chain?: InputMaybe; /** The default is all chains, including test chains */ @@ -7721,6 +8671,83 @@ export type LpToken_OrderBy = | 'totalSupply' | 'updatedAt'; +export type Lp_Fee_RewardLpFeeRewardActivityPeriodsResult = { + activity: Scalars['String']['output']; + chain: Scalars['String']['output']; + periods: Array>; +}; + +export type Lp_Fee_RewardLpFeeRewardPeriodInput = { + activity: Scalars['String']['input']; +}; + +export type Lp_Fee_RewardLpFeeRewardPeriodResult = { + endTime: Scalars['BigInt']['output']; + id: Scalars['String']['output']; + isMerkleDeployed: Scalars['Boolean']['output']; + label: Scalars['String']['output']; + merkleContract: Scalars['String']['output']; + rewardTokenPriceUsd: Scalars['BigDecimal']['output']; + startTime: Scalars['BigInt']['output']; + totalBudgetRaw: Scalars['BigInt']['output']; +}; + +export type Lp_Fee_RewardLpFeeRewardUserInput = { + activity: Scalars['String']['input']; + /** 可选,奖励周期 ID;不传时后端按当前或最近周期选择 */ + periodId?: InputMaybe; + user: Scalars['String']['input']; +}; + +export type Lp_Fee_RewardUserRewardDetailPaginationResult = { + count: Scalars['Int']['output']; + list: Array>; + page: Scalars['Int']['output']; + size: Scalars['Int']['output']; +}; + +export type Lp_Fee_RewardUserRewardDetailResult = { + /** 该周期累计奖励 points */ + points: Scalars['BigDecimal']['output']; + /** 奖励来源类型:AMM V3 手续费奖励 */ + sourceType: Scalars['String']['output']; + /** 周期起始时间戳 */ + timestamp: Scalars['BigInt']['output']; +}; + +export type Lp_Fee_RewardUserRewardResult = { + /** 本周期领取合约地址,未部署时为空字符串 */ + claimContract: Scalars['String']['output']; + /** ESTIMATING CLAIMABLE CLAIMED NOT_ELIGIBLE */ + claimStatus: Scalars['String']['output']; + /** Merkle 合约已部署后最终可领取数量 */ + claimableReward: Scalars['BigDecimal']['output']; + /** Merkle 合约已部署后最终可领取 raw amount */ + claimableRewardRaw: Scalars['BigInt']['output']; + /** 合约未部署时按已释放预算预估的奖励数量 */ + estimatedReward: Scalars['BigDecimal']['output']; + /** 合约未部署时按已释放预算预估的奖励 raw amount */ + estimatedRewardRaw: Scalars['BigInt']['output']; + /** Merkle tree index */ + index?: Maybe; + /** Merkle root,未部署或无资格时为空字符串 */ + merkleRoot: Scalars['String']['output']; + /** 奖励周期结束时间戳,不包含 */ + periodEndTime: Scalars['BigInt']['output']; + /** 奖励周期 ID */ + periodId: Scalars['String']['output']; + /** 奖励周期展示名称 */ + periodLabel: Scalars['String']['output']; + /** 奖励周期起始时间戳,包含 */ + periodStartTime: Scalars['BigInt']['output']; + /** Merkle proof */ + proof: Array; + /** 用户累计奖励 points,当前等于手续费 USD 价值 * poolWeight */ + totalPoints: Scalars['BigDecimal']['output']; + /** 数据更新时间 */ + updatedAt: Scalars['BigInt']['output']; +}; + export type Lp_PointsOrder = { /** tvl, totalTwigs, totalTokenBonus */ orderBy?: InputMaybe; @@ -8663,6 +9690,22 @@ export type MintHistory_OrderBy = | 'timestamp' | 'user'; +export type Native_SignerdepositData = { + amount?: InputMaybe; + token?: InputMaybe; + user?: InputMaybe; +}; + +export type Native_SignerredeemData = { + sharesToBurn?: InputMaybe; + token?: InputMaybe; + user?: InputMaybe; +}; + +export type Native_SignersignatureResult = { + transaction?: Maybe; +}; + export type Nft = { chain: Scalars['String']['output']; id: Scalars['ID']['output']; @@ -10553,13 +11596,139 @@ export type PersistentString_Filter = { export type PersistentString_OrderBy = 'chain' | 'id'; -export type Pool = { - allFlag: Scalars['BigInt']['output']; - /** Block number of this event */ - blockNumber: Scalars['BigInt']['output']; - borrowSafe: Scalars['Boolean']['output']; - canBeLiquidated: Scalars['Boolean']['output']; - chain: Scalars['String']['output']; +export type Points_ActivityActivityRankItem = { + rank?: Maybe; + totalPoints?: Maybe; + user?: Maybe; +}; + +export type Points_ActivityHistoryItem = { + activityId?: Maybe; + id?: Maybe; + inviteeAddress?: Maybe; + points?: Maybe; + time?: Maybe; + type?: Maybe; + user?: Maybe; +}; + +export type Points_ActivityPointsActivityHistory = { + count?: Maybe; + list?: Maybe>>; + page?: Maybe; + pageSize?: Maybe; +}; + +export type Points_ActivityPointsActivityInviteAccept = { + inviterAddress?: Maybe; + success?: Maybe; +}; + +export type Points_ActivityPointsActivityInviteCode = { + inviteCode?: Maybe; + inviteUrl?: Maybe; +}; + +export type Points_ActivityPointsActivityInviteStatus = { + acceptedAt?: Maybe; + inviterAddress?: Maybe; + inviterCode?: Maybe; + status?: Maybe; +}; + +export type Points_ActivityPointsActivityLeaderboard = { + currentUserRank?: Maybe; + overallRanks?: Maybe>>; +}; + +export type Points_ActivityPointsActivitySpecialBoost = { + baseSymbol?: Maybe; + baseToken?: Maybe; + multiplier?: Maybe; + multiplierPercentage?: Maybe; + poolAddress?: Maybe; + quoteSymbol?: Maybe; + quoteToken?: Maybe; +}; + +export type Points_ActivityPointsActivitySummary = { + activityId?: Maybe; + activityName?: Maybe; + invitePoints?: Maybe; + inviteeCount?: Maybe; + lpPoints?: Maybe; + socialMediaPoints?: Maybe; + swapPoints?: Maybe; + totalPoints?: Maybe; + user?: Maybe; +}; + +export type Points_ActivityhistoryFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; + sourceType?: InputMaybe; + user?: InputMaybe; +}; + +export type Points_ActivityinviteAcceptFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + inviteCode?: InputMaybe; + inviteMethod?: InputMaybe; + message?: InputMaybe; + refreshNow?: InputMaybe; + signature?: InputMaybe; + timestamp?: InputMaybe; + user?: InputMaybe; +}; + +export type Points_ActivityinviteCodeFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + refreshNow?: InputMaybe; + user?: InputMaybe; +}; + +export type Points_ActivityinviteStatusFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + refreshNow?: InputMaybe; + user?: InputMaybe; +}; + +export type Points_ActivityleaderboardFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; + user?: InputMaybe; +}; + +export type Points_ActivityspecialBoostFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + refreshNow?: InputMaybe; + type?: InputMaybe; +}; + +export type Points_ActivityuserSummaryFilter = { + chainId?: InputMaybe; + domain?: InputMaybe; + refreshNow?: InputMaybe; + user?: InputMaybe; +}; + +export type Pool = { + allFlag: Scalars['BigInt']['output']; + /** Block number of this event */ + blockNumber: Scalars['BigInt']['output']; + borrowSafe: Scalars['Boolean']['output']; + canBeLiquidated: Scalars['Boolean']['output']; + chain: Scalars['String']['output']; collateralRatio: Scalars['BigInt']['output']; collectedFeesToken0: Scalars['BigDecimal']['output']; collectedFeesToken1: Scalars['BigDecimal']['output']; @@ -12106,6 +13275,8 @@ export type Query = { aggregateFragments: Array; all?: Maybe; alls: Array; + /** 获取amm ticks */ + amm_getTicksData: AmmTicksDataResult; announcement_getAnnouncement?: Maybe; approval?: Maybe; approvals: Array; @@ -12124,8 +13295,12 @@ export type Query = { avatarTransferHistories: Array; avatarTransferHistory?: Maybe; avatars: Array; + backend_manage_settlex_server_detail?: Maybe; + backend_manage_settlex_server_list?: Maybe; balance?: Maybe; balances: Array; + berachain_alm_allVaults?: Maybe>>; + berachain_alm_myVaults?: Maybe>>; bidHistories: Array; bidHistory?: Maybe; bidPosition?: Maybe; @@ -12165,8 +13340,26 @@ export type Query = { cross_chain_swap_orderRefundCount?: Maybe; cross_chain_swap_routesV2?: Maybe; cross_chain_swap_transactionEncode?: Maybe; + cross_chain_swap_zetachain_orderCreate?: Maybe; + cross_chain_swap_zetachain_orderDetail?: Maybe; + cross_chain_swap_zetachain_orderList?: Maybe; + cross_chain_swap_zetachain_orderRefundClaimed?: Maybe; + cross_chain_swap_zetachain_routes?: Maybe; + cross_chain_swap_zetachain_swapOrderList?: Maybe; + cross_chain_swap_zetachain_transactionEncode?: Maybe; cross_chain_token_list?: Maybe; cross_chain_token_tokenPair?: Maybe; + cross_chain_transfer_getExplorerAllSections: Cross_Chain_TransferExplorerAllSections; + cross_chain_transfer_getOrderDetail?: Maybe; + cross_chain_transfer_getOrderList: Cross_Chain_TransferCrossChainOrderList; + cross_chain_transfer_getTokenList?: Maybe< + Array> + >; + cross_chain_transfer_heterogeneousQuote: Cross_Chain_TransferHeterogeneousQuoteResponse; + cross_chain_transfer_quote: Cross_Chain_TransferQuoteResponse; + cross_chain_zetachain_token_list?: Maybe< + Array> + >; crowdPooling?: Maybe; crowdPoolingDayData?: Maybe; crowdPoolingDayDatas: Array; @@ -12189,6 +13382,16 @@ export type Query = { crowd_pooling_voteList?: Maybe< Array> >; + /** 获取所有池子列表 */ + curve_stableswap_ng_getAllPools?: Maybe; + /** 获取我的流动性列表 */ + curve_stableswap_ng_getMyLiquidity?: Maybe; + /** 获取池子详情信息 */ + curve_stableswap_ng_getPoolInfo?: Maybe; + /** 获取池子流动性操作历史列表 */ + curve_stableswap_ng_getPoolLiquidityHistory?: Maybe; + /** 获取池子交易信息列表 */ + curve_stableswap_ng_getPoolSwapInfo?: Maybe; /** 资产每日收益折线图 */ d3mm_getAssetDailyInterests: Array>; /** 资产详情信息, 如果资产不存在则返回null */ @@ -12348,6 +13551,11 @@ export type Query = { gas_feeder_getGasPrices?: Maybe>>; incentiveRewardHistories: Array; incentiveRewardHistory?: Maybe; + kaia_vault_detail?: Maybe; + kaia_vault_list?: Maybe>>; + leaderboard_activities_getLeaderboard?: Maybe; + leaderboard_activities_getPeriods?: Maybe; + leaderboard_activities_getUserRanking?: Maybe; limit_and_rfq_createPrivateOrder?: Maybe; limit_and_rfq_getOrderStatusBroadcasts?: Maybe< Array> @@ -12377,6 +13585,18 @@ export type Query = { liquidity_pool_apy_user?: Maybe>>; lpToken?: Maybe; lpTokens: Array; + /** 批量获取所有 AMM V3 LP 手续费奖励周期 */ + lp_fee_reward_getAllRewardPeriods: Array< + Maybe + >; + /** 获取 AMM V3 LP 手续费奖励周期 */ + lp_fee_reward_getRewardPeriods: Array< + Maybe + >; + /** 获取用户 AMM V3 LP 手续费奖励 */ + lp_fee_reward_getUserReward: Lp_Fee_RewardUserRewardResult; + /** 获取用户 AMM V3 LP 手续费奖励详情 */ + lp_fee_reward_getUserRewardDetail: Lp_Fee_RewardUserRewardDetailPaginationResult; /** 获取用户积分 */ lp_points_getUserPoints: Lp_PointsUserPointsResult; /** 获取用户详情 */ @@ -12407,6 +13627,8 @@ export type Query = { mining_list?: Maybe; mintHistories: Array; mintHistory?: Maybe; + native_signer_deposit?: Maybe; + native_signer_redeem?: Maybe; nft?: Maybe; nftCollateralVault?: Maybe; nftCollateralVaults: Array; @@ -12437,6 +13659,15 @@ export type Query = { persistentStringArray?: Maybe; persistentStringArrays: Array; persistentStrings: Array; + points_activity_history?: Maybe; + points_activity_inviteAccept?: Maybe; + points_activity_inviteCode?: Maybe; + points_activity_inviteStatus?: Maybe; + points_activity_leaderboard?: Maybe; + points_activity_specialBoost?: Maybe< + Array> + >; + points_activity_userSummary?: Maybe; pool?: Maybe; poolDayData?: Maybe; poolDayDatas: Array; @@ -12503,11 +13734,46 @@ export type Query = { setPoolInfos: Array; setVaultInfo?: Maybe; setVaultInfos: Array; + settlex_limit_getOrderStatusBroadcasts?: Maybe< + Array> + >; + settlex_limit_getPendingOrderChainList?: Maybe< + Array> + >; + settlex_limit_limitOrderAmountLimit?: Maybe; + settlex_limit_limitOrderCancel?: Maybe; + settlex_limit_limitOrderCreate?: Maybe; + settlex_limit_limitOrderCreateV2?: Maybe; + /** data url:post(https://host:port/api/v1/order/graphql/rfqTakerInquiry).data */ + settlex_limit_limitOrderFee?: Maybe; + settlex_limit_limitOrderList?: Maybe>>; + settlex_limit_limitOrderListWithPage?: Maybe; + settlex_limit_limitOrderListWithPageV2?: Maybe; + settlex_notice_center_transactionList?: Maybe; + settlex_notice_center_unread?: Maybe; + sigmax_limit_getOrderStatusBroadcasts?: Maybe< + Array> + >; + sigmax_limit_getPendingOrderChainList?: Maybe< + Array> + >; + sigmax_limit_limitOrderAmountLimit?: Maybe; + sigmax_limit_limitOrderCancel?: Maybe; + sigmax_limit_limitOrderCreate?: Maybe; + sigmax_limit_limitOrderCreateV2?: Maybe; + /** data url:post(https://host:port/api/v1/order/graphql/rfqTakerInquiry).data */ + sigmax_limit_limitOrderFee?: Maybe; + sigmax_limit_limitOrderList?: Maybe>>; + sigmax_limit_limitOrderListWithPage?: Maybe; + sigmax_limit_limitOrderListWithPageV2?: Maybe; starter?: Maybe; starters: Array; swap?: Maybe; swaps: Array; third_party_token_list?: Maybe>>; + third_party_token_zetachain_list?: Maybe< + Array> + >; tick?: Maybe; ticks: Array; token?: Maybe; @@ -12553,6 +13819,7 @@ export type Query = { Array> >; user_swap_pair_slippage_upsert?: Maybe; + user_swap_settlex_orderHistories?: Maybe; userprofile_asset?: Maybe; userprofile_inviteUser?: Maybe; userprofile_nftAssets?: Maybe; @@ -12577,6 +13844,21 @@ export type Query = { /** get service charges for vdodo */ vdodo_getServiceCharges: VdodoVdodoServiceChargesResult; vdodo_getStats: VdodoStatsResult; + /** 池子详情 */ + ve33_getPool?: Maybe; + /** 池子列表 */ + ve33_getPoolList: Array>; + /** 获取amm ticks */ + ve33_getTicksData: Ve33TicksDataResult; + /** 锁仓信息 */ + ve33_getUserLock: Array>; + /** 用户投资列表 */ + ve33_getUserPortfolioList: Array>; + /** 用户veMOMO信息 */ + ve33_getUserVeMOMOInfo: Ve33UserVeMomoInfo; + /** 投票池列表 */ + ve33_getVotePoolList: Array>; + ve33_token_list?: Maybe>>; withdrawFundHistories: Array; withdrawFundHistory?: Maybe; withdrawReserve?: Maybe; @@ -12644,6 +13926,10 @@ export type QueryAllsArgs = { where?: InputMaybe; }; +export type QueryAmm_GetTicksDataArgs = { + where?: InputMaybe; +}; + export type QueryAnnouncement_GetAnnouncementArgs = { lang?: InputMaybe; }; @@ -12758,6 +14044,14 @@ export type QueryAvatarsArgs = { where?: InputMaybe; }; +export type QueryBackend_Manage_Settlex_Server_DetailArgs = { + where?: InputMaybe; +}; + +export type QueryBackend_Manage_Settlex_Server_ListArgs = { + where?: InputMaybe; +}; + export type QueryBalanceArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -12773,6 +14067,14 @@ export type QueryBalancesArgs = { where?: InputMaybe; }; +export type QueryBerachain_Alm_AllVaultsArgs = { + where?: InputMaybe; +}; + +export type QueryBerachain_Alm_MyVaultsArgs = { + where?: InputMaybe; +}; + export type QueryBidHistoriesArgs = { block?: InputMaybe; first?: InputMaybe; @@ -12964,6 +14266,34 @@ export type QueryCross_Chain_Swap_TransactionEncodeArgs = { data?: InputMaybe; }; +export type QueryCross_Chain_Swap_Zetachain_OrderCreateArgs = { + data?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_OrderDetailArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_OrderListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_OrderRefundClaimedArgs = { + data?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_RoutesArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_SwapOrderListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_TransactionEncodeArgs = { + data?: InputMaybe; +}; + export type QueryCross_Chain_Token_ListArgs = { where?: InputMaybe; }; @@ -12972,6 +14302,30 @@ export type QueryCross_Chain_Token_TokenPairArgs = { where?: InputMaybe; }; +export type QueryCross_Chain_Transfer_GetOrderDetailArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_GetOrderListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_GetTokenListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_HeterogeneousQuoteArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_QuoteArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Zetachain_Token_ListArgs = { + where?: InputMaybe; +}; + export type QueryCrowdPoolingArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -13053,6 +14407,26 @@ export type QueryCrowd_Pooling_VoteListArgs = { where?: InputMaybe; }; +export type QueryCurve_Stableswap_Ng_GetAllPoolsArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetMyLiquidityArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetPoolInfoArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetPoolLiquidityHistoryArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetPoolSwapInfoArgs = { + where?: InputMaybe; +}; + export type QueryD3mm_GetAssetDailyInterestsArgs = { where?: InputMaybe; }; @@ -13581,6 +14955,26 @@ export type QueryIncentiveRewardHistoryArgs = { where?: InputMaybe; }; +export type QueryKaia_Vault_DetailArgs = { + where?: InputMaybe; +}; + +export type QueryKaia_Vault_ListArgs = { + where?: InputMaybe; +}; + +export type QueryLeaderboard_Activities_GetLeaderboardArgs = { + where: Leaderboard_ActivitiesLeaderboardInput; +}; + +export type QueryLeaderboard_Activities_GetPeriodsArgs = { + where: Leaderboard_ActivitiesPeriodsInput; +}; + +export type QueryLeaderboard_Activities_GetUserRankingArgs = { + where: Leaderboard_ActivitiesUserRankingInput; +}; + export type QueryLimit_And_Rfq_CreatePrivateOrderArgs = { where?: InputMaybe; }; @@ -13706,6 +15100,18 @@ export type QueryLpTokensArgs = { where?: InputMaybe; }; +export type QueryLp_Fee_Reward_GetRewardPeriodsArgs = { + where?: InputMaybe; +}; + +export type QueryLp_Fee_Reward_GetUserRewardArgs = { + where?: InputMaybe; +}; + +export type QueryLp_Fee_Reward_GetUserRewardDetailArgs = { + where?: InputMaybe; +}; + export type QueryLp_Points_GetUserPointsArgs = { where?: InputMaybe; }; @@ -13835,6 +15241,14 @@ export type QueryMintHistoryArgs = { where?: InputMaybe; }; +export type QueryNative_Signer_DepositArgs = { + data?: InputMaybe; +}; + +export type QueryNative_Signer_RedeemArgs = { + data?: InputMaybe; +}; + export type QueryNftArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -14039,6 +15453,34 @@ export type QueryPersistentStringsArgs = { where?: InputMaybe; }; +export type QueryPoints_Activity_HistoryArgs = { + where?: InputMaybe; +}; + +export type QueryPoints_Activity_InviteAcceptArgs = { + data?: InputMaybe; +}; + +export type QueryPoints_Activity_InviteCodeArgs = { + where?: InputMaybe; +}; + +export type QueryPoints_Activity_InviteStatusArgs = { + where?: InputMaybe; +}; + +export type QueryPoints_Activity_LeaderboardArgs = { + where?: InputMaybe; +}; + +export type QueryPoints_Activity_SpecialBoostArgs = { + where?: InputMaybe; +}; + +export type QueryPoints_Activity_UserSummaryArgs = { + where?: InputMaybe; +}; + export type QueryPoolArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -14307,6 +15749,94 @@ export type QuerySetVaultInfosArgs = { where?: InputMaybe; }; +export type QuerySettlex_Limit_GetOrderStatusBroadcastsArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_GetPendingOrderChainListArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderAmountLimitArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderCancelArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderCreateArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderCreateV2Args = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderFeeArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderListArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderListWithPageArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Limit_LimitOrderListWithPageV2Args = { + where?: InputMaybe; +}; + +export type QuerySettlex_Notice_Center_TransactionListArgs = { + where?: InputMaybe; +}; + +export type QuerySettlex_Notice_Center_UnreadArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_GetOrderStatusBroadcastsArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_GetPendingOrderChainListArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderAmountLimitArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderCancelArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderCreateArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderCreateV2Args = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderFeeArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderListArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderListWithPageArgs = { + where?: InputMaybe; +}; + +export type QuerySigmax_Limit_LimitOrderListWithPageV2Args = { + where?: InputMaybe; +}; + export type QueryStarterArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -14341,6 +15871,10 @@ export type QueryThird_Party_Token_ListArgs = { data?: InputMaybe; }; +export type QueryThird_Party_Token_Zetachain_ListArgs = { + data?: InputMaybe; +}; + export type QueryTickArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -14631,6 +16165,10 @@ export type QueryUser_Swap_Pair_Slippage_UpsertArgs = { data?: InputMaybe; }; +export type QueryUser_Swap_Settlex_OrderHistoriesArgs = { + where?: InputMaybe; +}; + export type QueryUserprofile_AssetArgs = { where?: InputMaybe; }; @@ -14778,6 +16316,38 @@ export type QueryVdodo_GetStatsArgs = { where?: InputMaybe; }; +export type QueryVe33_GetPoolArgs = { + where?: InputMaybe; +}; + +export type QueryVe33_GetPoolListArgs = { + where?: InputMaybe; +}; + +export type QueryVe33_GetTicksDataArgs = { + where?: InputMaybe; +}; + +export type QueryVe33_GetUserLockArgs = { + where: Ve33UserInput; +}; + +export type QueryVe33_GetUserPortfolioListArgs = { + where: Ve33PortfolioInput; +}; + +export type QueryVe33_GetUserVeMomoInfoArgs = { + where: Ve33UserInput; +}; + +export type QueryVe33_GetVotePoolListArgs = { + where?: InputMaybe; +}; + +export type QueryVe33_Token_ListArgs = { + where?: InputMaybe; +}; + export type QueryWithdrawFundHistoriesArgs = { block?: InputMaybe; first?: InputMaybe; @@ -15608,15 +17178,459 @@ export type SetVaultInfo_Filter = { vault_starts_with_nocase?: InputMaybe; }; -export type SetVaultInfo_OrderBy = - | 'blockNumber' - | 'hash' - | 'id' - | 'logIndex' - | 'operatorType' - | 'timestamp' - | 'updatedAt' - | 'vault'; +export type SetVaultInfo_OrderBy = + | 'blockNumber' + | 'hash' + | 'id' + | 'logIndex' + | 'operatorType' + | 'timestamp' + | 'updatedAt' + | 'vault'; + +export type Settlex_LimitCancelLimitOrderResponse = { + authorization?: Maybe; +}; + +export type Settlex_LimitLimitOrder = { + createdAt?: Maybe; + expiration?: Maybe; + failureReason?: Maybe; + filledAmount?: Maybe; + hash?: Maybe; + id?: Maybe; + maker?: Maybe; + makerAmount?: Maybe; + makerToken?: Maybe; + makerTokenDecimal?: Maybe; + makerTokenLogoImg?: Maybe; + makerTokenSymbol?: Maybe; + network?: Maybe; + order?: Maybe; + progress?: Maybe; + salt?: Maybe; + signature?: Maybe; + taker?: Maybe; + takerAmount?: Maybe; + takerToken?: Maybe; + takerTokenDecimal?: Maybe; + takerTokenLogoImg?: Maybe; + takerTokenSymbol?: Maybe; + updatedAt?: Maybe; +}; + +export type Settlex_LimitLimitOrderFeeInfo = { + baseFeeAmount?: Maybe; + baseFeeValue?: Maybe; + feeAmount?: Maybe; + feeId?: Maybe; + feeValue?: Maybe; + percentFeeAmount?: Maybe; + percentFeeValue?: Maybe; + priceImpactFactor?: Maybe; +}; + +export type Settlex_LimitLimitOrderInfo = { + expiration?: Maybe; + maker?: Maybe; + makerAmount?: Maybe; + makerToken?: Maybe; + salt?: Maybe; + taker?: Maybe; + takerAmount?: Maybe; + takerToken?: Maybe; +}; + +export type Settlex_LimitLimitOrderStatusBroadcastInfo = { + chainId?: Maybe; + createdAt?: Maybe; + id?: Maybe; + makerToken?: Maybe; + makerTokenSymbol?: Maybe; + orderId?: Maybe; + reason?: Maybe; + takerToken?: Maybe; + takerTokenSymbol?: Maybe; + updatedAt?: Maybe; + user?: Maybe; +}; + +export type Settlex_LimitLimitOrderV2 = { + createdAt?: Maybe; + expiration?: Maybe; + failureReason?: Maybe; + feeAmount?: Maybe; + filledAmount?: Maybe; + hash?: Maybe; + id?: Maybe; + maker?: Maybe; + makerAmount?: Maybe; + makerToken?: Maybe; + makerTokenDecimal?: Maybe; + makerTokenLogoImg?: Maybe; + makerTokenSymbol?: Maybe; + network?: Maybe; + order?: Maybe; + progress?: Maybe; + salt?: Maybe; + taker?: Maybe; + takerAmount?: Maybe; + takerToken?: Maybe; + takerTokenDecimal?: Maybe; + takerTokenLogoImg?: Maybe; + takerTokenSymbol?: Maybe; + updatedAt?: Maybe; +}; + +export type Settlex_LimitPaginateLimitOrderList = { + currentPage?: Maybe; + limit?: Maybe; + list?: Maybe>>; + total?: Maybe; + totalPage?: Maybe; +}; + +export type Settlex_LimitPaginateLimitOrderListV2 = { + currentPage?: Maybe; + limit?: Maybe; + list?: Maybe>>; + total?: Maybe; + totalPage?: Maybe; +}; + +export type Settlex_LimitPrivateOrderInfo = { + createdAt?: Maybe; + id?: Maybe; + network?: Maybe; + progress?: Maybe; + txid?: Maybe; +}; + +export type Settlex_LimitcreateLimitOrderInfo = { + expiration?: InputMaybe; + maker?: InputMaybe; + makerAmount?: InputMaybe; + makerToken?: InputMaybe; + salt?: InputMaybe; + taker?: InputMaybe; + takerAmount?: InputMaybe; + takerToken?: InputMaybe; +}; + +export type Settlex_LimitcreatePrivateOrderInfo = { + address?: InputMaybe; + network?: InputMaybe; + timeout?: InputMaybe; + transaction?: InputMaybe; + useSource?: InputMaybe; +}; + +export type Settlex_LimitgetPendingLimitOrderParam = { + address?: InputMaybe; +}; + +export type Settlex_LimitgetPrivateOrderParam = { + hash?: InputMaybe; +}; + +export type Settlex_LimitlimitCancelSignType = 'eip191' | 'eip712' | 'eip1271'; + +export type Settlex_LimitlimitCreateOrderWalletType = 'common' | 'unipass'; + +export type Settlex_LimitlimitOrderAmountLimitParam = { + network?: InputMaybe; + token?: InputMaybe; +}; + +export type Settlex_LimitlimitOrderQueryEnum = 'ALL' | 'FRESH' | 'NOT_FRESH'; + +export type Settlex_LimituserCancelLimitOrder = { + address?: InputMaybe; + /** limit order id */ + id?: InputMaybe; + network?: InputMaybe; + signature?: InputMaybe; + signkey?: InputMaybe; + signtime?: InputMaybe; + signtype?: InputMaybe; +}; + +export type Settlex_LimituserCreateLimitOrder = { + network?: InputMaybe; + order?: InputMaybe; + signature?: InputMaybe; + type?: InputMaybe; +}; + +export type Settlex_LimituserCreateLimitOrderV2 = { + feeId?: InputMaybe; + network?: InputMaybe; + order?: InputMaybe; + signature?: InputMaybe; + type?: InputMaybe; + wallet?: InputMaybe; +}; + +export type Settlex_LimituserQueryLimitOrderFee = { + chainId?: InputMaybe; + stableAmount?: InputMaybe; + toToken?: InputMaybe; + toTokenAmount?: InputMaybe; +}; + +export type Settlex_LimituserQueryLimitOrderList = { + address?: InputMaybe; + network?: InputMaybe; +}; + +export type Settlex_LimituserQueryLimitOrderListWithPage = { + address?: InputMaybe; + limit?: InputMaybe; + network?: InputMaybe; + orderType?: InputMaybe; + page?: InputMaybe; +}; + +export type Settlex_Notice_CenterNoticeCenterRead = { + success?: Maybe; +}; + +export type Settlex_Notice_CenterNoticeCenterTransactionItem = { + chainId?: Maybe; + createTime?: Maybe; + extend?: Maybe; + from?: Maybe; + id?: Maybe; + key?: Maybe; + type?: Maybe; +}; + +export type Settlex_Notice_CenterNoticeCenterTransactionList = { + count?: Maybe; + limit?: Maybe; + list?: Maybe>>; + page?: Maybe; +}; + +export type Settlex_Notice_CenterNoticeCenterUnRead = { + transactionCount?: Maybe; +}; + +export type Settlex_Notice_CenternoticeCenterUnreadFilter = { + refreshNow?: InputMaybe; + user?: InputMaybe; +}; + +export type Settlex_Notice_CentertransactionListFilter = { + chainId?: InputMaybe; + limit?: InputMaybe; + page?: InputMaybe; + refreshNow?: InputMaybe; + user?: InputMaybe; +}; + +export type Sigmax_LimitCancelLimitOrderResponse = { + authorization?: Maybe; +}; + +export type Sigmax_LimitLimitOrder = { + createdAt?: Maybe; + expiration?: Maybe; + failureReason?: Maybe; + filledAmount?: Maybe; + hash?: Maybe; + id?: Maybe; + maker?: Maybe; + makerAmount?: Maybe; + makerToken?: Maybe; + makerTokenDecimal?: Maybe; + makerTokenLogoImg?: Maybe; + makerTokenSymbol?: Maybe; + network?: Maybe; + order?: Maybe; + progress?: Maybe; + salt?: Maybe; + signature?: Maybe; + taker?: Maybe; + takerAmount?: Maybe; + takerToken?: Maybe; + takerTokenDecimal?: Maybe; + takerTokenLogoImg?: Maybe; + takerTokenSymbol?: Maybe; + updatedAt?: Maybe; +}; + +export type Sigmax_LimitLimitOrderFeeInfo = { + baseFeeAmount?: Maybe; + baseFeeValue?: Maybe; + feeAmount?: Maybe; + feeId?: Maybe; + feeValue?: Maybe; + percentFeeAmount?: Maybe; + percentFeeValue?: Maybe; + priceImpactFactor?: Maybe; +}; + +export type Sigmax_LimitLimitOrderInfo = { + expiration?: Maybe; + maker?: Maybe; + makerAmount?: Maybe; + makerToken?: Maybe; + salt?: Maybe; + taker?: Maybe; + takerAmount?: Maybe; + takerToken?: Maybe; +}; + +export type Sigmax_LimitLimitOrderStatusBroadcastInfo = { + chainId?: Maybe; + createdAt?: Maybe; + id?: Maybe; + makerToken?: Maybe; + makerTokenSymbol?: Maybe; + orderId?: Maybe; + reason?: Maybe; + takerToken?: Maybe; + takerTokenSymbol?: Maybe; + updatedAt?: Maybe; + user?: Maybe; +}; + +export type Sigmax_LimitLimitOrderV2 = { + createdAt?: Maybe; + expiration?: Maybe; + failureReason?: Maybe; + feeAmount?: Maybe; + filledAmount?: Maybe; + hash?: Maybe; + id?: Maybe; + maker?: Maybe; + makerAmount?: Maybe; + makerToken?: Maybe; + makerTokenDecimal?: Maybe; + makerTokenLogoImg?: Maybe; + makerTokenSymbol?: Maybe; + network?: Maybe; + order?: Maybe; + progress?: Maybe; + salt?: Maybe; + taker?: Maybe; + takerAmount?: Maybe; + takerToken?: Maybe; + takerTokenDecimal?: Maybe; + takerTokenLogoImg?: Maybe; + takerTokenSymbol?: Maybe; + updatedAt?: Maybe; +}; + +export type Sigmax_LimitPaginateLimitOrderList = { + currentPage?: Maybe; + limit?: Maybe; + list?: Maybe>>; + total?: Maybe; + totalPage?: Maybe; +}; + +export type Sigmax_LimitPaginateLimitOrderListV2 = { + currentPage?: Maybe; + limit?: Maybe; + list?: Maybe>>; + total?: Maybe; + totalPage?: Maybe; +}; + +export type Sigmax_LimitPrivateOrderInfo = { + createdAt?: Maybe; + id?: Maybe; + network?: Maybe; + progress?: Maybe; + txid?: Maybe; +}; + +export type Sigmax_LimitcreateLimitOrderInfo = { + expiration?: InputMaybe; + maker?: InputMaybe; + makerAmount?: InputMaybe; + makerToken?: InputMaybe; + salt?: InputMaybe; + taker?: InputMaybe; + takerAmount?: InputMaybe; + takerToken?: InputMaybe; +}; + +export type Sigmax_LimitcreatePrivateOrderInfo = { + address?: InputMaybe; + network?: InputMaybe; + timeout?: InputMaybe; + transaction?: InputMaybe; + useSource?: InputMaybe; +}; + +export type Sigmax_LimitgetPendingLimitOrderParam = { + address?: InputMaybe; +}; + +export type Sigmax_LimitgetPrivateOrderParam = { + hash?: InputMaybe; +}; + +export type Sigmax_LimitlimitCancelSignType = 'eip191' | 'eip712' | 'eip1271'; + +export type Sigmax_LimitlimitCreateOrderWalletType = 'common' | 'unipass'; + +export type Sigmax_LimitlimitOrderAmountLimitParam = { + network?: InputMaybe; + token?: InputMaybe; +}; + +export type Sigmax_LimitlimitOrderQueryEnum = 'ALL' | 'FRESH' | 'NOT_FRESH'; + +export type Sigmax_LimituserCancelLimitOrder = { + address?: InputMaybe; + /** limit order id */ + id?: InputMaybe; + network?: InputMaybe; + signature?: InputMaybe; + signkey?: InputMaybe; + signtime?: InputMaybe; + signtype?: InputMaybe; +}; + +export type Sigmax_LimituserCreateLimitOrder = { + network?: InputMaybe; + order?: InputMaybe; + signature?: InputMaybe; + type?: InputMaybe; +}; + +export type Sigmax_LimituserCreateLimitOrderV2 = { + feeId?: InputMaybe; + network?: InputMaybe; + order?: InputMaybe; + signature?: InputMaybe; + type?: InputMaybe; + wallet?: InputMaybe; +}; + +export type Sigmax_LimituserQueryLimitOrderFee = { + chainId?: InputMaybe; + stableAmount?: InputMaybe; + toToken?: InputMaybe; + toTokenAmount?: InputMaybe; +}; + +export type Sigmax_LimituserQueryLimitOrderList = { + address?: InputMaybe; + network?: InputMaybe; +}; + +export type Sigmax_LimituserQueryLimitOrderListWithPage = { + address?: InputMaybe; + limit?: InputMaybe; + network?: InputMaybe; + orderType?: InputMaybe; + page?: InputMaybe; +}; export type Starter = { chain: Scalars['String']['output']; @@ -16550,6 +18564,22 @@ export type Third_Party_TokenList = { symbol?: Maybe; }; +export type Third_Party_Token_ZetachainList = { + address?: Maybe; + chainId?: Maybe; + decimals?: Maybe; + from?: Maybe; + id?: Maybe; + logoURI?: Maybe; + name?: Maybe; + symbol?: Maybe; +}; + +export type Third_Party_Token_ZetachainlistData = { + chainId?: InputMaybe; + fromNames?: InputMaybe>>; +}; + export type Third_Party_TokenlistData = { chainId?: InputMaybe; fromNames?: InputMaybe>>; @@ -18805,11 +20835,53 @@ export type User_Swap_Pair_SlippageupsertDataPair = { toToken?: InputMaybe; }; +export type User_Swap_SettlexSwapOrderList = { + chainId?: Maybe; + createdAt?: Maybe; + extra?: Maybe; + fromAmount?: Maybe; + fromTokenAddress?: Maybe; + fromTokenDecimals?: Maybe; + fromTokenLogoImg?: Maybe; + fromTokenPrice?: Maybe; + fromTokenSymbol?: Maybe; + hash?: Maybe; + key?: Maybe; + maxAmount?: Maybe; + minAmount?: Maybe; + nonce?: Maybe; + status?: Maybe; + toAmount?: Maybe; + toTokenAddress?: Maybe; + toTokenDecimals?: Maybe; + toTokenLogoImg?: Maybe; + toTokenPrice?: Maybe; + toTokenSymbol?: Maybe; + user?: Maybe; +}; + +export type User_Swap_SettlexUserSwapOrder = { + count?: Maybe; + limit?: Maybe; + list?: Maybe>>; + page?: Maybe; +}; + +export type User_Swap_SettlexswapFilter = { + chainId?: InputMaybe; + limit?: InputMaybe; + page?: InputMaybe; + refreshNow?: InputMaybe; + source?: InputMaybe; + userAddress?: InputMaybe; +}; + export type User_SwapswapFilter = { chainId?: InputMaybe; limit?: InputMaybe; page?: InputMaybe; refreshNow?: InputMaybe; + source?: InputMaybe; userAddress?: InputMaybe; }; @@ -20144,6 +22216,231 @@ export type VdodoVdodoServiceChargesResult = { pool_fees_total: Scalars['String']['output']; }; +export type Ve33Incentive = { + amount: Scalars['BigInt']['output']; + token: Scalars['String']['output']; + usd: Scalars['BigDecimal']['output']; +}; + +export type Ve33Lock = { + id: Scalars['String']['output']; + isPermanent: Scalars['Boolean']['output']; + isVoted: Scalars['Boolean']['output']; + lockedEnd: Scalars['BigInt']['output']; + userAddress: Scalars['String']['output']; + value: Scalars['BigDecimal']['output']; + votingPower: Scalars['BigDecimal']['output']; +}; + +export type Ve33Pool = { + apr: Ve33PoolApr; + feeRate: Scalars['BigDecimal']['output']; + feesToken0: Scalars['BigDecimal']['output']; + feesToken1: Scalars['BigDecimal']['output']; + feesUSD: Scalars['BigDecimal']['output']; + gaugeAddress: Scalars['String']['output']; + id: Scalars['String']['output']; + tickSpacing: Scalars['Int']['output']; + title: Scalars['String']['output']; + token0Address: Scalars['String']['output']; + token0Decimals: Scalars['Int']['output']; + token0Name: Scalars['String']['output']; + token0Symbol: Scalars['String']['output']; + token1Address: Scalars['String']['output']; + token1Decimals: Scalars['Int']['output']; + token1Name: Scalars['String']['output']; + token1Symbol: Scalars['String']['output']; + totalValueLockedToken0: Scalars['BigDecimal']['output']; + totalValueLockedToken1: Scalars['BigDecimal']['output']; + totalValueLockedUSD: Scalars['BigDecimal']['output']; + tvl: Scalars['BigDecimal']['output']; + /** v2 or v3 */ + version: Scalars['String']['output']; + volumeToken0: Scalars['BigDecimal']['output']; + volumeToken1: Scalars['BigDecimal']['output']; + volumeUSD: Scalars['BigDecimal']['output']; +}; + +export type Ve33PoolApr = { + fees: Scalars['BigDecimal']['output']; + incentives: Scalars['BigDecimal']['output']; +}; + +export type Ve33PoolInput = { + pool?: InputMaybe; +}; + +export type Ve33PoolTotalVoted = { + token: Scalars['String']['output']; + weight: Scalars['String']['output']; +}; + +export type Ve33Portfolio = { + apr: Ve33PortfolioApr; + emissions: Scalars['BigDecimal']['output']; + emissionsUSD: Scalars['BigDecimal']['output']; + feeRate: Scalars['BigDecimal']['output']; + feesToken0: Scalars['BigDecimal']['output']; + feesToken1: Scalars['BigDecimal']['output']; + feesUSD: Scalars['BigDecimal']['output']; + gaugeAddress: Scalars['String']['output']; + /** liquidity position id, 'Position #1000' */ + id: Scalars['String']['output']; + incentives: Array>; + liquidityTokenBalance: Scalars['String']['output']; + liquidityTokenBalanceUSD: Scalars['String']['output']; + liquidityTokenInMining: Scalars['String']['output']; + liquidityTokenInMiningUSD: Scalars['String']['output']; + liquidityUSD: Scalars['String']['output']; + locks: Array>; + poolAddress: Scalars['String']['output']; + /** Stable, Volatile, CL */ + tickSpacing: Scalars['Int']['output']; + title: Scalars['String']['output']; + token0Address: Scalars['String']['output']; + token0Amount: Scalars['String']['output']; + token0Decimals: Scalars['Int']['output']; + token0LowerPrice: Scalars['String']['output']; + token0Name: Scalars['String']['output']; + token0Piece: Scalars['String']['output']; + token0Symbol: Scalars['String']['output']; + token0UpperPrice: Scalars['String']['output']; + token1Address: Scalars['String']['output']; + token1Amount: Scalars['String']['output']; + token1Decimals: Scalars['Int']['output']; + token1LowerPrice: Scalars['String']['output']; + token1Name: Scalars['String']['output']; + token1Piece: Scalars['String']['output']; + token1Symbol: Scalars['String']['output']; + token1UpperPrice: Scalars['String']['output']; + tvl: Scalars['BigDecimal']['output']; + /** voting=Voting Rewards, liquidity=LP Rewards */ + type: Scalars['String']['output']; + /** v2 or v3 */ + version: Scalars['String']['output']; +}; + +export type Ve33PortfolioApr = { + fees: Scalars['BigDecimal']['output']; + incentives: Scalars['BigDecimal']['output']; + rewards: Scalars['BigDecimal']['output']; +}; + +export type Ve33PortfolioInput = { + page?: InputMaybe; + size?: InputMaybe; + token_starts_with?: InputMaybe; + type?: InputMaybe; + user: Scalars['String']['input']; +}; + +export type Ve33PortfolioLock = { + id: Scalars['String']['output']; + lockedEnd: Scalars['BigInt']['output']; + totalWeight: Scalars['BigDecimal']['output']; + usd: Scalars['BigDecimal']['output']; + userAddress: Scalars['String']['output']; + value: Scalars['BigInt']['output']; + votingPower: Scalars['BigInt']['output']; + weight: Scalars['BigDecimal']['output']; +}; + +export type Ve33Tick = { + id: Scalars['String']['output']; + liquidityGross: Scalars['BigDecimal']['output']; + liquidityNet: Scalars['BigDecimal']['output']; + poolAddress: Scalars['String']['output']; + price0: Scalars['BigDecimal']['output']; + price1: Scalars['BigDecimal']['output']; + protocolPosition?: Maybe; + tickArrayLower?: Maybe; + tickArrayUpper?: Maybe; + tickIdx: Scalars['BigDecimal']['output']; +}; + +export type Ve33TicksDataResult = { + first?: Maybe; + pool: Scalars['String']['output']; + skip?: Maybe; + ticks: Array>; +}; + +export type Ve33TokenFilterPaginationInput = { + page?: InputMaybe; + size?: InputMaybe; + token_starts_with?: InputMaybe; +}; + +export type Ve33UserInput = { + user: Scalars['String']['input']; +}; + +export type Ve33UserVeMomoInfo = { + totalVeMOMOCount: Scalars['Int']['output']; + votedVeMOMOCount: Scalars['Int']['output']; +}; + +export type Ve33VotePool = { + apr: Ve33PoolApr; + feeRate: Scalars['BigDecimal']['output']; + feesToken0: Scalars['BigDecimal']['output']; + feesToken1: Scalars['BigDecimal']['output']; + feesUSD: Scalars['BigDecimal']['output']; + gaugeAddress: Scalars['String']['output']; + id: Scalars['String']['output']; + incentives: Array>; + tickSpacing: Scalars['Int']['output']; + title: Scalars['String']['output']; + token0Address: Scalars['String']['output']; + token0Decimals: Scalars['Int']['output']; + token0Name: Scalars['String']['output']; + token0Symbol: Scalars['String']['output']; + token1Address: Scalars['String']['output']; + token1Decimals: Scalars['Int']['output']; + token1Name: Scalars['String']['output']; + token1Symbol: Scalars['String']['output']; + totalValueLockedToken0: Scalars['BigDecimal']['output']; + totalValueLockedToken1: Scalars['BigDecimal']['output']; + totalValueLockedUSD: Scalars['BigDecimal']['output']; + tvl: Scalars['BigDecimal']['output']; + /** v2 or v3 */ + version: Scalars['String']['output']; + votes: Array>; +}; + +export type Ve33VotePoolInput = { + page?: InputMaybe; + size?: InputMaybe; + token_starts_with?: InputMaybe; + type?: InputMaybe; + user?: InputMaybe; +}; + +export type Ve33VotePoolType = 'All' | 'V2' | 'V3'; + +export type Ve33_TokenVe33Token = { + address?: Maybe; + chainId?: Maybe; + decimals?: Maybe; + logo?: Maybe; + name?: Maybe; + position?: Maybe; + slippage?: Maybe; + symbol?: Maybe; +}; + +export type Ve33_TokenlistFilter = { + chainId?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; +}; + +export type Ve33getTicksDataInput = { + first?: InputMaybe; + pool: Scalars['String']['input']; + skip?: InputMaybe; +}; + export type WithdrawFundHistory = { chain: Scalars['String']['output']; /** id hash-logindex */ @@ -20945,6 +23242,7 @@ export type FetchLiquidityListQuery = { transactionBaseApy?: any | null; transactionQuoteApy?: any | null; metromMiningApy?: any | null; + lpFeeRewardApy?: any | null; } | null; } | null; } | null> | null; @@ -21022,6 +23320,7 @@ export type FetchMyLiquidityListQuery = { transactionBaseApy?: any | null; transactionQuoteApy?: any | null; metromMiningApy?: any | null; + lpFeeRewardApy?: any | null; } | null; } | null; } | null> | null; @@ -21111,6 +23410,7 @@ export type FetchPoolQuery = { transactionBaseApy?: any | null; transactionQuoteApy?: any | null; metromMiningApy?: any | null; + lpFeeRewardApy?: any | null; } | null; } | null; } | null> | null; @@ -21388,20 +23688,45 @@ export type FetchUserprofileRewardQuery = { }> | null; }; +export type FetchLpFeeRewardUserRewardQueryVariables = Exact<{ + where?: InputMaybe; +}>; + +export type FetchLpFeeRewardUserRewardQuery = { + lp_fee_reward_getUserReward: { + estimatedReward: any; + estimatedRewardRaw: any; + claimableReward: any; + claimableRewardRaw: any; + claimStatus: string; + claimContract: string; + periodId: string; + periodLabel: string; + periodStartTime: any; + periodEndTime: any; + merkleRoot: string; + index?: number | null; + proof: Array; + }; +}; + export class TypedDocumentString extends String implements DocumentTypeDecoration { - __apiType?: DocumentTypeDecoration['__apiType']; + __apiType?: NonNullable< + DocumentTypeDecoration['__apiType'] + >; + private value: string; + public __meta__?: Record | undefined; - constructor( - private value: string, - public __meta__?: Record, - ) { + constructor(value: string, __meta__?: Record | undefined) { super(value); + this.value = value; + this.__meta__ = __meta__; } - toString(): string & DocumentTypeDecoration { + override toString(): string & DocumentTypeDecoration { return this.value; } } @@ -21797,6 +24122,7 @@ export const FetchLiquidityListDocument = new TypedDocumentString(` transactionBaseApy transactionQuoteApy metromMiningApy + lpFeeRewardApy } miningAddress volume24H @@ -21880,6 +24206,7 @@ export const FetchMyLiquidityListDocument = new TypedDocumentString(` transactionBaseApy transactionQuoteApy metromMiningApy + lpFeeRewardApy } miningAddress volume24H @@ -21973,6 +24300,7 @@ export const FetchPoolDocument = new TypedDocumentString(` transactionBaseApy transactionQuoteApy metromMiningApy + lpFeeRewardApy } miningAddress } @@ -22301,3 +24629,25 @@ export const FetchUserprofileRewardDocument = new TypedDocumentString(` FetchUserprofileRewardQuery, FetchUserprofileRewardQueryVariables >; +export const FetchLpFeeRewardUserRewardDocument = new TypedDocumentString(` + query FetchLpFeeRewardUserReward($where: Lp_fee_rewardLpFeeRewardUserInput) { + lp_fee_reward_getUserReward(where: $where) { + estimatedReward + estimatedRewardRaw + claimableReward + claimableRewardRaw + claimStatus + claimContract + periodId + periodLabel + periodStartTime + periodEndTime + merkleRoot + index + proof + } +} + `) as unknown as TypedDocumentString< + FetchLpFeeRewardUserRewardQuery, + FetchLpFeeRewardUserRewardQueryVariables +>; diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index 52d0dd93..38b527d8 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -92,6 +92,7 @@ export const poolGraphqlQuery = { transactionBaseApy transactionQuoteApy metromMiningApy + lpFeeRewardApy } miningAddress volume24H @@ -172,6 +173,7 @@ export const poolGraphqlQuery = { transactionBaseApy transactionQuoteApy metromMiningApy + lpFeeRewardApy } miningAddress volume24H @@ -263,6 +265,7 @@ export const poolGraphqlQuery = { transactionBaseApy transactionQuoteApy metromMiningApy + lpFeeRewardApy } miningAddress } diff --git a/packages/dodoex-api/src/services/system/SystemApi.ts b/packages/dodoex-api/src/services/system/SystemApi.ts index 3adcea76..ecc61f80 100644 --- a/packages/dodoex-api/src/services/system/SystemApi.ts +++ b/packages/dodoex-api/src/services/system/SystemApi.ts @@ -1,7 +1,42 @@ +import MerkleDistributorABI from '../../helper/ContractRequests/abi/ABIs/MerkleDistributorABI'; +import { encodeFunctionDataByFragments } from '../../helper/ContractRequests/encode'; import { systemGraphqlQuery } from './graphqlQuery'; export class SystemApi { constructor() {} static graphql = systemGraphqlQuery; + + static encode = { + /** + * Encode a Merkle distributor `claim(index, account, amount, merkleProof)` + * call for the LP fee reward. `claimContract`, `index`, `proof` and the raw + * `amount` (claimableRewardRaw) come from `lp_fee_reward_getUserReward`. + */ + claimLpFeeReward({ + claimContract, + index, + account, + amount, + proof, + }: { + claimContract: string; + index: number; + account: string; + amount: string; + proof: string[]; + }) { + const data = encodeFunctionDataByFragments(MerkleDistributorABI, 'claim', [ + index, + account, + amount, + proof, + ]); + return { + to: claimContract, + data, + value: 0, + }; + }, + }; } diff --git a/packages/dodoex-api/src/services/system/graphqlQuery.ts b/packages/dodoex-api/src/services/system/graphqlQuery.ts index 2dab4683..74935f75 100644 --- a/packages/dodoex-api/src/services/system/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/system/graphqlQuery.ts @@ -63,4 +63,25 @@ export const systemGraphqlQuery = { } } `), + fetchLpFeeRewardUserReward: graphql(` + query FetchLpFeeRewardUserReward( + $where: Lp_fee_rewardLpFeeRewardUserInput + ) { + lp_fee_reward_getUserReward(where: $where) { + estimatedReward + estimatedRewardRaw + claimableReward + claimableRewardRaw + claimStatus + claimContract + periodId + periodLabel + periodStartTime + periodEndTime + merkleRoot + index + proof + } + } + `), }; diff --git a/packages/dodoex-widgets/src/components/Widget/index.tsx b/packages/dodoex-widgets/src/components/Widget/index.tsx index dbe49fbc..776e9827 100644 --- a/packages/dodoex-widgets/src/components/Widget/index.tsx +++ b/packages/dodoex-widgets/src/components/Widget/index.tsx @@ -47,6 +47,34 @@ import { TokenPickerDialogProps } from '../Swap/components/TokenCard/TokenPicker export const WIDGET_CLASS_NAME = 'dodo-widget-container'; +/** + * Liquidity mining (LP fee reward) activity config. When provided, a reward banner + * is shown on the pool list page, and pools carrying an `apy.lpFeeRewardApy` value + * get a 🔥 badge and can be filtered via "Mining Only". + * + * The reward amount and claim state are read from the `lp_fee_reward_getUserReward` + * GraphQL query; the per-pool bonus APY comes from the liquidity list's + * `apy.lpFeeRewardApy` field. + */ +export interface LpFeeRewardActivity { + /** Activity id passed to `lp_fee_reward_getUserReward`. Required. */ + activity: string; + /** Banner title. Defaults to a generic "Liquidity Mining" title when omitted. */ + title?: string; + /** Banner description line. */ + description?: string; + /** "View more" external link shown in the banner description. */ + viewMoreLink?: string; + /** Reward token symbol, e.g. "PROS". */ + rewardTokenSymbol?: string; + /** Reward token logo url shown next to the reward amount. */ + rewardTokenLogo?: string; + /** Tooltip text shown in the question mark next to the "My rewards" label. When omitted, the tooltip is hidden. */ + myRewardsTooltip?: string; + /** Optional reward period id. When omitted, the backend picks the current/most-recent period. */ + periodId?: string; +} + export interface WidgetProps extends Web3ConnectorsProps, InitTokenListProps, @@ -81,6 +109,8 @@ export interface WidgetProps notSupportPMM?: boolean; supportAMMV2?: boolean; supportAMMV3?: boolean; + /** Liquidity mining (LP fee reward) activity config shown on the pool list page. */ + lpFeeRewardActivity?: LpFeeRewardActivity; executionDialogExtra?: any; /** When the winding status changes, no pop-up window will be displayed. */ diff --git a/packages/dodoex-widgets/src/hooks/Submission/types.ts b/packages/dodoex-widgets/src/hooks/Submission/types.ts index 148daa61..909b4cee 100644 --- a/packages/dodoex-widgets/src/hooks/Submission/types.ts +++ b/packages/dodoex-widgets/src/hooks/Submission/types.ts @@ -27,6 +27,7 @@ export enum MetadataFlag { stakeMining = 'stakeMining', unstakeMining = 'unstakeMining', claimMining = 'claimMining', + claimLpFeeReward = 'claimLpFeeReward', submissionCreateMetaKey = 'submissionCreateMetaKey', approve = 'approve', reset = 'reset', diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index b7b30f6f..13581c02 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -14,6 +14,7 @@ import { Pool } from './widgets/PoolWidget'; export { Widget, UnstyleWidget, Message } from './components/Widget'; export { WIDGET_MODULE_CLASS_NAME } from './components/WidgetContainer'; export type { WidgetProps } from './components/Widget'; +export type { LpFeeRewardActivity } from './components/Widget'; export type SwapWidgetProps = WidgetProps & SwapProps; export type { TokenInfo } from './hooks/Token/type'; export { useMessageState } from './hooks/useMessageState'; diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index c1a7c8ce..079a0afa 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\"],\"+Jkdiu\":[\"Transaction Time:\"],\"+uZnU3\":[\"Cross Chain\"],\"/+c6tU\":[\"99% Default\"],\"/6L4mj\":[\"Your position is empty\"],\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":[\"Total Number of Traders\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"Volume\"],\"/jQctM\":[\"To\"],\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":[\"Removing\"],\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":[\"Balance:\"],\"0RrIzN\":[\"Select token\"],\"0S8v3W\":[\"The start time cannot be in the past\"],\"0Sw1gZ\":[\"Staking Rules\"],\"0YxDPW\":[\"Loading info...\"],\"0b0AkA\":[\"* Please note that the Fee Rate cannot be modified after the pool is created\"],\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":[\"Create Liquidity Mining\"],\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":[\"Start Time\"],\"1QfxQT\":[\"Dismiss\"],\"1Qz63U\":[\"Pool Type\"],\"1gWStS\":[\"Unstaking\"],\"1yHVE+\":[\"Adding\"],\"22Xs8M\":[\"Deposit Ratio\"],\"237hSL\":[\"Ended\"],\"2IZBPB\":[\"The end time must be later than the start time.\"],\"2vjOqX\":[\"Pools with lower transaction fees will attract more traders.\"],\"34w3mT\":[\"Single-Token\"],\"3CsYwD\":[\"Select Pool\"],\"3VUfrF\":[\"Selected Range\"],\"3WdxUv\":[\"Do not remind again\"],\"3XBvkd\":[\"Remove Liquidity\"],\"3dP8Wx\":[\"Search by address\"],\"3ggd2j\":[\"Asset ratio within the pool\"],\"4cJ0hF\":[\"Rewards\"],\"4fL/V7\":[\"Pay\"],\"4kY4C4\":[\"Due to the market condition, market price and estimated price may have a slight difference\"],\"4nzwq3\":[\"Search by token or pool address\"],\"4ogEAw\":[\"Pegged Exchange Rate\"],\"4vKwIV\":[\"Private Pool\"],\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":[\"Creation Time\"],\"54ffaC\":[\"The current network is inconsistent with the wallet - please switch in wallet\"],\"5CZbyC\":[\"Set price range\"],\"5IHTSS\":[\"Full range\"],\"5Nb8LL\":[\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\"],\"5OKrbq\":[\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\"],\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":[\"The token amount is calculated by initial price.\"],\"5etEUX\":[\"Max price\"],\"5nL2hY\":[\"Staked Tokens\"],\"6+mYrD\":[\"Current price impact\"],\"6UYTy8\":[\"Minute\"],\"6V3Ea3\":[\"Copied\"],\"6XYkjc\":[\"Edit Parameter Settings\"],\"6XgEPi\":[\"Hour\"],\"6lss/t\":[\"Pricing Model\"],\"6y2TB3\":[\"Liquidity\"],\"70wH1Q\":[\"APR\"],\"72/M0o\":[\"Enter the token symbol or address\"],\"79D0qY\":[\"Liquidity data not available.\"],\"7Bj3x9\":[\"Failed\"],\"7C/BwI\":[\"Community Treasury\"],\"7IKPTP\":[\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\"],\"7VpPHA\":[\"Confirm\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"Fees (24H)\"],\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":[\"Initial Tokens\"],\"7rpoXw\":[\"This token is on\"],\"7y/8M6\":[\"Please confirm in wallet\"],\"88dol0\":[\"Success Rate\"],\"8OiU8L\":[\"Pool Creation\"],\"8Tg/JR\":[\"Custom\"],\"8XNsbx\":[\"Higher than dynamic slippage\"],\"8Z29ZO\":[\"Estimated service provider fees\"],\"93m8jT\":[\"Basic Fee\"],\"97jlEV\":[\"LP Balance\"],\"9D2g7k\":[\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\"],\"9yc9F+\":[\"Default value is \",[\"warnValue\"],\"%,the current slippage setting is higher than the default value, which means you are willing to accept a worse final execution price.\"],\"A1taO8\":[\"Search\"],\"A23gVF\":[\"Points for staking LP tokens.\"],\"AOhRo6\":[\"DODO provides a variety of pool versions to suit your needs.\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR = Reward Token Value per Year / TVL\"],\"Active\":[\"Active\"],\"AeZIvT\":[\"You will receive\"],\"AghcDJ\":[\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\"],\"All Mining\":[\"All Mining\"],\"Amount of token rewards\":[\"Amount of token rewards\"],\"AxPAXW\":[\"No results found\"],\"AxdOHo\":[\"Pair\"],\"B0/2ea\":[\"s\"],\"B0YDoE\":[\"Yes, I am sure\"],\"B3mhDR\":[\"Add liquidity to obtain LP tokens for mining\"],\"BRi+RY\":[\"Add more liquidity\"],\"C1mcuF\":[\"This CP has been settled by other addrs\"],\"C1qIFl\":[\"Liquidity Supplied\"],\"CK1KXz\":[\"Max\"],\"CKyk7Q\":[\"Go back\"],\"CMHmbm\":[\"Slippage\"],\"CP1UAq\":[\"The slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"Calculation = current rewards for a single block × number of blocks in 24h\"],\"CeLrge\":[\"Mid Price\"],\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":[\"Mining Pool Setup\"],\"Copied\":[\"Copied\"],\"D1bhHv\":[\"The pool’s market-making price is fixed\"],\"D87pha\":[\"Closed\"],\"DPfwMq\":[\"Done\"],\"DPi/hO\":[\"Results in a relatively fixed price.\"],\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":[\"Current price\"],\"DZULmp\":[\"Swap Rate\"],\"Da1+Da\":[\"Pool not found. Please switch to another network and retry.\"],\"Daily Rewards\":[\"Daily Rewards\"],\"Dt4Hc3\":[\"Token Pair Mining\"],\"Du6bPw\":[\"Address\"],\"DupCvC\":[\"Added successful\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"Add Initial Liquidity\"],\"E6MqGy\":[\"Add liquidity\"],\"EQs1sJ\":[\"Min price\"],\"ESQO1L\":[\"Pool address\"],\"EU3wU4\":[\"Fee tier\"],\"EUBGvH\":[\"Are you sure swapping to another chain?\"],\"EatqP4\":[\"Swaps\"],\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":[\"Edit\"],\"Eif7f6\":[\"PMM Pool\"],\"EkAv3P\":[\"Concentrated liquidity, higher efficiency\"],\"End Time\":[\"End Time\"],\"Ended\":[\"Ended\"],\"Enslfm\":[\"Destination\"],\"EpjpP9\":[\"Released Rewards\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"The newly created mining pool can start counting APR after depositing any liquidity.\"],\"F+sxb9\":[\"Unapproved\"],\"F18WP3\":[\"Parameters\"],\"F8yRdq\":[\"More trade settings\"],\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"Add Position\"],\"FQfStS\":[\"Emulator\"],\"FRBvjQ\":[\"Transaction Pending\"],\"Fdp03t\":[\"on\"],\"FrP5tr\":[\"Suitable for stablecoins with price fluctuations within 2%\"],\"GAypnX\":[\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"GGPOuT\":[\"set current mid price\"],\"GGWsTU\":[\"Canceled\"],\"GSt7YT\":[\"The fee rate must be between 0.01% to 10%\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"Go back\"],\"Gr2anW\":[\"Traders (24H)\"],\"Gs02OK\":[\"My Positions\"],\"H7OUPr\":[\"Day\"],\"H9HlDe\":[\"minutes\"],\"HGf8fG\":[\"You can set the minimum selling price for single-token pools.\"],\"HTX2HV\":[\"Minimum received\"],\"HXBqgG\":[\"Invalid price input\"],\"HkWY45\":[\"This pool type isn't supported on your current network. You can switch networks in your wallet to create it\"],\"HuVZMK\":[\"Days\"],\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":[\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":[\"Invite\"],\"IwiTcw\":[\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"Connecting...\"],\"J39pAJ\":[\"Additional Fee\"],\"J7M/DA\":[\"Pegged\"],\"JR7wWw\":[\"Equilibrium target\"],\"JRgkmT\":[\"End release time before adjustment\"],\"JYKRJS\":[\"Stake\"],\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":[\"Fetching best price...\"],\"Jh223O\":[\"Invalid range selected. The min price must be lower than the max price.\"],\"JlIjZf\":[\"Liquidity Provider\"],\"Joa5Dk\":[\"*Collecting fees will withdraw currently available fees for you.\"],\"JuzN3b\":[\"Related CrowdPooling\"],\"K/Ay/d\":[\"Review Swap\"],\"K/PgcA\":[\"Select Cross Chain\"],\"K8rjE/\":[\"Daily rewards before adjustment\"],\"KAbREa\":[\"*Deflationary tokens are not supported\"],\"KAbcm2\":[\"Succeeded\"],\"KAmxpM\":[\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"KRnA5J\":[\"Set pool parameters\"],\"Kb3KaW\":[\"Any Ratio\"],\"KkjUUb\":[\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\"],\"KlvBGJ\":[\"Select Tokens\"],\"KsqhWn\":[\"Staking\"],\"KvG1xW\":[\"Claiming\"],\"L37FfW\":[\"Create AMM V2 Position\"],\"L4nQwl\":[\"Suitable for stablecoins with price fluctuations within 0.5%\"],\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQ0J1B\":[\"Flexible customization, take full control of liquidity\"],\"LQU+Dm\":[\"Risk Disclaimer\"],\"LVzIav\":[\"The pool’s market-making price can be adjusted\"],\"Lfkqg7\":[\"Stake tokens to receive mining rewards.\"],\"LhMjLm\":[\"Time\"],\"LtI9AS\":[\"Owner\"],\"M9dIDb\":[\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\"],\"MU9s7M\":[\"Deposit amounts\"],\"MXQodB\":[\"Disable Indirect Routing\"],\"MZPP7t\":[\"Your position has 0 liquidity, and is not earning fees.\"],\"Mining Pool\":[\"Mining Pool\"],\"MvFS/h\":[\"No pools yet? Create one!\"],\"My Mining\":[\"My Mining\"],\"My Pools\":[\"My Pools\"],\"NEQTCn\":[\"Share Of Pool\"],\"NSCBTb\":[\"The setting has been switched to swap mode\"],\"NVAuTg\":[\"Quote not available\"],\"NXZdrO\":[\"My pool share\"],\"NgeSlx\":[\"Learn More\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"Use the recommended ratio\"],\"Nk6ddN\":[\"Stake LP tokens and receive mining rewards.\"],\"No LP pools match your criteria\":[\"No LP pools match your criteria\"],\"O6RUgz\":[\"Fee rate\"],\"OBdohg\":[\"Add Liquidity\"],\"OFjZGo\":[\"Unstake\"],\"OJOe+K\":[\"Set the fee to the same as most other pools\"],\"OKZP2O\":[\"If there are no participants before the end, the rewards cannot be taken out anymore.\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"Your position will appear here.\"],\"OauUE6\":[\"Fetching Price...\"],\"OfhWJH\":[\"Reset\"],\"OgKD6h\":[\"Best offer\"],\"OjaWXx\":[\"Fresh Mining\"],\"OnDEky\":[\"LP Fee\"],\"OuSseo\":[\"Ratio Settings\"],\"P+K/3O\":[\"Confirming\"],\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":[\"Quantity model\"],\"PLUB/s\":[\"Fee\"],\"PPqGw9\":[\"Applicable to pegged assets with a fixed price and no fluctuation\"],\"PVa3KL\":[\"Position on\"],\"PZqJog\":[\"Confirm Cross Chain\"],\"Q8W3SC\":[\"Volume (1D)\"],\"QNWt8A\":[\"Estimated Time\"],\"QNrpkx\":[\"Classical AMM-like pool. Suitable for most assets.\"],\"QR4/RH\":[\"Swap summary\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"You will also claim all rewards from this pool.\"],\"QtgfjM\":[\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\"],\"R7D79P\":[\"Invalid pair\"],\"R9Khdg\":[\"Auto\"],\"Remaining rewards/Total\":[\"Remaining rewards/Total\"],\"Rewards\":[\"Rewards\"],\"RtKKbA\":[\"Last\"],\"RvYEUJ\":[\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\"],\"RxHSET\":[\"LP Balance:\"],\"S3piC2\":[\"Tx\"],\"S8G1qk\":[\"Single\"],\"SXnevP\":[\"Review Cross Chain\"],\"SbBMxj\":[\"Share of pool\"],\"Search by address\":[\"Search by address\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"Enter a percent\"],\"Staked\":[\"Staked\"],\"Start Time\":[\"Start Time\"],\"Sti4vy\":[\"Mining\"],\"T+qgFw\":[\"Price Impact\"],\"T0Y2+3\":[\"Select a token\"],\"T5ExxV\":[\"Points for LP token holders.\"],\"TFOxRM\":[\"Mins\"],\"TGi+jm\":[\"Doc\"],\"TJBHlP\":[\"Standard\"],\"TP9/K5\":[\"Token\"],\"TTlkRL\":[\"Lower than dynamic slippage\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP Tokens\"],\"TizaRy\":[\"Wallet incompatibility\"],\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":[\"Settings\"],\"UE2beD\":[\"Creator\"],\"UN0Nip\":[\"Reward Rules\"],\"UPXmW+\":[\"Trader\"],\"URmyfc\":[\"Details\"],\"UbRKMZ\":[\"Pending\"],\"Upcoming\":[\"Upcoming\"],\"Users\":[\"Users\"],\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":[\"Seconds\"],\"V38hNQ\":[\"Single-Token Stake Mining\"],\"VXTSOE\":[\"Suitable for most situations.\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"Something went wrong…<0>Refresh again\"],\"WI3lQ1\":[\"SELECT\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"Select Token\"],\"WYqq5A\":[\"End mining\"],\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"When adding rewards, the number of rewards for a single block may be adjusted\"],\"X6T02b\":[\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\"],\"XPiFIY\":[\"Can the pool price be adjusted?\"],\"XeovX3\":[\"Swap Detail\"],\"Xpkm7d\":[\"No ForceStop access\"],\"Y0Knz4\":[\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\"],\"Y7rVy0\":[\"Fee Rate\"],\"Y9QDtD\":[\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\"],\"YA4hwj\":[\"Price Range\"],\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":[\"My Liquidity\"],\"YHpbe1\":[\"For\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"You are not currently providing liquidity for any LP pools.\"],\"You have not create any mining\":[\"You have not create any mining\"],\"Z033WN\":[\"Total Swap Fee\"],\"Z5HWHd\":[\"On\"],\"Z7ZXbT\":[\"Approve\"],\"Z8lGw6\":[\"Share\"],\"ZXvy7b\":[\"Additional routing fees set by the Widget user\"],\"ZgtZpB\":[\"The start time is too soon, please set a later time\"],\"ZhEBp4\":[\"Current liquidity pool token price\"],\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":[\"Maximum slippage do not exceed 50%\"],\"a1AzKr\":[\"For those who are looking to sell tokens and only need ask-side liquidity.\"],\"a7u1N9\":[\"Price\"],\"aGKLPO\":[\"The current network supports new pool types\"],\"aIvv/z\":[\"The price of this pool is within your selected range. Your position is currently earning fees.\"],\"aM1tos\":[\"You are creating a pool\"],\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"Minutes\"],\"az8lvo\":[\"Off\"],\"b+KjnH\":[\"Your position will not earn fees or be used in trades until the market price moves into your range.\"],\"b2jAb+\":[\"per\"],\"bC0iyq\":[\"Suitable for stablecoins with price fluctuations within 10%\"],\"bEsfUQ\":[\"Confirm submission\"],\"bQ3cKo\":[\"Select pool by tokens\"],\"bUUVED\":[\"Asset\"],\"bXp9u3\":[\"Fee Revenue\"],\"bwSQI0\":[\"Supply\"],\"c4miqE\":[\"Pool share\"],\"c6TMm0\":[\"Mining Type\"],\"cDWXuq\":[\"Settler\"],\"cJtosk\":[\"Remove liquidity\"],\"cOvZFM\":[\"Dynamic\"],\"cmUrtC\":[\"SEE HOW IT WORKS\"],\"cnGeoo\":[\"Delete\"],\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"Initial Price\"],\"d8YnVj\":[\"Guide Price\"],\"dEgA5A\":[\"Cancel\"],\"dI46oG\":[\"Auto switch network\"],\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":[\"One-Click Claim\"],\"dmiCGN\":[\"Select Token Pair\"],\"dqWPbT\":[\"I have read, understand, and agree to the <0>Terms of Service.\"],\"dzV+zO\":[\"Modify Confirmation\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"Tips:\"],\"eE0JZ4\":[\"Version\"],\"eK0eiF\":[\"Initial asset ratio\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"Edit\"],\"eTUF28\":[\"Min\"],\"eVZ7bY\":[\"Hide TVL=0 pools\"],\"em6LzM\":[\"Transaction rejected.\"],\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":[\"Results in a more volatile price.\"],\"fSFt4a\":[\"Token Pair\"],\"fZ5Vnu\":[\"Received\"],\"fZFkP1\":[\"My Pools\"],\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":[\"Rate\"],\"fsBGk0\":[\"Balance\"],\"fxRyGG\":[\"fee tier\"],\"g3x+cF\":[\"Service update, please wait and try again\"],\"gz+9Rb\":[\"Gas price is too low, please adjust in your wallet and try again\"],\"h3PbRN\":[\"My Pool Share\"],\"h4RLFN\":[\"RPC node data exception\"],\"h5FVz1\":[\"Estimated transaction time\"],\"h5pjuM\":[\"Collect fees\"],\"h7LgzN\":[\"Connect to your wallet\"],\"hCBYHP\":[\"Total Fee Revenue\"],\"hXzOVo\":[\"Next\"],\"hYgDIe\":[\"Create\"],\"hcNa1G\":[\"Token Amount\"],\"hdIg7i\":[\"Select Pool Version\"],\"hom7qf\":[\"Claim\"],\"i3Z+/Z\":[\"Out of range\"],\"iDGO1l\":[\"Disclaimer\"],\"iH8pgl\":[\"Back\"],\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":[\"Enter an amount\"],\"iaocTt\":[\"Ratio\"],\"j2Uisd\":[\"Approving\"],\"jMam5g\":[[\"0\"],\" Balance\"],\"jaH6JH\":[\"Higher than default slippage\"],\"jjuKOj\":[\"Min Price\"],\"juypHV\":[\"Liquidity Providers\"],\"kAC8rT\":[\"High price\"],\"kNeEXg\":[\"Current Price\"],\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":[\"Something went wrong.\"],\"kj3p6e\":[\"Daily Rewards\"],\"ku//5b\":[\"Second\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"Total Swap Volume\"],\"lDgVWA\":[\"Receive\"],\"lJvbHq\":[\"Select Network\"],\"lLbR0m\":[\"Simple, full-range liquidity\"],\"lNYomJ\":[\"AMM V2 Position\"],\"lQ6r7x\":[\"Confirm swap\"],\"lTmG/H\":[\"Minimum Received\"],\"lgE483\":[\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\"],\"lqTDfd\":[\"Slippage Tolerance\"],\"lsg9Mi\":[\"Parameter Settings\"],\"lt8yMa\":[\"Send to:\"],\"luOvdJ\":[\"My Staked\"],\"m16xKo\":[\"Add\"],\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\"],\"mObS+5\":[\"Failed to get price of the token\"],\"mYGY3B\":[\"Date\"],\"mZ4SrP\":[\"Liquidity Pool\"],\"me2dmq\":[\"Value (USD)\"],\"n25Lml\":[\"Depth\"],\"nIrcQi\":[\"No matching pool found\"],\"nTWWCZ\":[\"Low\"],\"nxRg31\":[\"Select pair\"],\"o/5/4c\":[\"Once Mining has started, it cannot be stopped.\"],\"o8aMNm\":[\"Select a liquidity pool\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\"],\"p2jbcE\":[\"Create Pool\"],\"p3607o\":[\"Managing\"],\"p7/w10\":[\"Volume (24H)\"],\"pHQq+U\":[\"Pool Setup\"],\"pKjCsP\":[\"100% use your own funds and enjoy the maximum degree of flexibility.\"],\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":[\"MT Fee\"],\"pY/ok7\":[\"All chains\"],\"pdZiL7\":[\"Current Market Price:\"],\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"Confirming...\"],\"qDhDFK\":[\"Traders\"],\"qK7wuW\":[\"Unable to SETTLE during the cooling-off period\"],\"qLkska\":[\"The setting has been switched to cross chain mode\"],\"qiOIiY\":[\"Buy\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"Total Rewards\"],\"r7ScnQ\":[\"Connect to a wallet\"],\"rAx5u1\":[\"End Time\"],\"rH6vg9\":[\"There is no liquidity data.\"],\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":[\"Detail\"],\"rSayea\":[\"APY\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"Preview\"],\"sCUx8G\":[\"Select Platform\"],\"sIPJGT\":[\"SELECT TOKEN\"],\"sNaLCG\":[\"Add Token\"],\"sTnImq\":[\"Total Liquidity\"],\"sVlqoo\":[\"AMM V3 Position\"],\"sjn3tj\":[\"Slippage Coefficient\"],\"sxkWRg\":[\"Advanced\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":[\"Initial Price Alert\"],\"t/YqKh\":[\"Remove\"],\"t3d3/V\":[\"ratio is 0\"],\"tKE4Ak\":[\"Cross Chain Summary\"],\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":[\"SafeERC20: low-level call failed. Please contact the DODO team.\"],\"tnRI9r\":[\"Pool Creation Confirmation\"],\"tu/fxg\":[\"Claim fees\"],\"tyGEMJ\":[\"Amounts\"],\"u1tnst\":[\"Create One\"],\"uAQUqI\":[\"Status\"],\"uEoBVI\":[\"Low price\"],\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":[\"Real Time\"],\"udsWDJ\":[\"Unsupported network - switch to trade\"],\"uiuMDr\":[\"Enter parameters to view the yield curve\"],\"v4nCHK\":[\"Paid\"],\"v4wgrk\":[\"Failed to add\"],\"vH2C/2\":[\"Swap\"],\"vLyv1R\":[\"Hide\"],\"vOyUlD\":[\"In range\"],\"vXvgFK\":[\"There is risk of being arbitraged if adding this liquidity.\"],\"vxHMzr\":[\"address\"],\"wSpNR+\":[\"This trading pair does not have enough historical data and has used the default dynamic slippage.\"],\"wckWOP\":[\"Manage\"],\"wdxz7K\":[\"Source\"],\"wmCrk7\":[\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\"],\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":[\"Liquidity Burn Ratio\"],\"x4QVeW\":[\"Percentage to remove\"],\"x6GJ4a\":[\"Max Slippage\"],\"xEbi+8\":[\"User denied transaction signature.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"Copy link\"],\"y4kfSV\":[\"WARNING\"],\"y5rS9U\":[\"Migrate\"],\"yM82Jw\":[\"ForceStop exception\"],\"yQ2kGp\":[\"Load more\"],\"yQE2r9\":[\"Loading\"],\"yXm1vH\":[\"The initial price is different from the current market price, which may cause your pool to be arbitraged\"],\"yY8wAv\":[\"Hours\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":[\"High\"],\"yz7wBu\":[\"Close\"],\"yzjPpo\":[\"Fees will be the same as in most other pools.\"],\"z9t6jM\":[\"Mining Pool\"],\"zA6/Yq\":[\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"Transaction Deadline\"],\"zXCpR0\":[\"Claim Rewards\"],\"zcVtwU\":[\"My Pools (PMM)\"],\"zeSosD\":[\"Starting price\"],\"zga9sT\":[\"OK\"],\"zkFuIm\":[\"Total Rewards=Daily Rewards*Duration\"],\"znqB4T\":[\"Insufficient balance\"],\"zwBp5t\":[\"Private\"],\"zwWKhA\":[\"Learn more\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\"],\"+Jkdiu\":[\"Transaction Time:\"],\"+uZnU3\":[\"Cross Chain\"],\"/+c6tU\":[\"99% Default\"],\"/6L4mj\":[\"Your position is empty\"],\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":[\"Total Number of Traders\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"Volume\"],\"/jQctM\":[\"To\"],\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":[\"Removing\"],\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":[\"Balance:\"],\"0RrIzN\":[\"Select token\"],\"0S8v3W\":[\"The start time cannot be in the past\"],\"0Sw1gZ\":[\"Staking Rules\"],\"0YxDPW\":[\"Loading info...\"],\"0b0AkA\":[\"* Please note that the Fee Rate cannot be modified after the pool is created\"],\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":[\"Create Liquidity Mining\"],\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":[\"Start Time\"],\"1QfxQT\":[\"Dismiss\"],\"1Qz63U\":[\"Pool Type\"],\"1gWStS\":[\"Unstaking\"],\"1yHVE+\":[\"Adding\"],\"22Xs8M\":[\"Deposit Ratio\"],\"237hSL\":[\"Ended\"],\"2IZBPB\":[\"The end time must be later than the start time.\"],\"2vjOqX\":[\"Pools with lower transaction fees will attract more traders.\"],\"34w3mT\":[\"Single-Token\"],\"3CsYwD\":[\"Select Pool\"],\"3VUfrF\":[\"Selected Range\"],\"3WdxUv\":[\"Do not remind again\"],\"3XBvkd\":[\"Remove Liquidity\"],\"3dP8Wx\":[\"Search by address\"],\"3ggd2j\":[\"Asset ratio within the pool\"],\"4cJ0hF\":[\"Rewards\"],\"4fL/V7\":[\"Pay\"],\"4kY4C4\":[\"Due to the market condition, market price and estimated price may have a slight difference\"],\"4m3nxQ\":[\"View more\"],\"4nzwq3\":[\"Search by token or pool address\"],\"4ogEAw\":[\"Pegged Exchange Rate\"],\"4vKwIV\":[\"Private Pool\"],\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":[\"Creation Time\"],\"54ffaC\":[\"The current network is inconsistent with the wallet - please switch in wallet\"],\"5CZbyC\":[\"Set price range\"],\"5IHTSS\":[\"Full range\"],\"5Nb8LL\":[\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\"],\"5OKrbq\":[\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\"],\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":[\"The token amount is calculated by initial price.\"],\"5etEUX\":[\"Max price\"],\"5nL2hY\":[\"Staked Tokens\"],\"6+mYrD\":[\"Current price impact\"],\"6UYTy8\":[\"Minute\"],\"6V3Ea3\":[\"Copied\"],\"6XYkjc\":[\"Edit Parameter Settings\"],\"6XgEPi\":[\"Hour\"],\"6lss/t\":[\"Pricing Model\"],\"6y2TB3\":[\"Liquidity\"],\"70wH1Q\":[\"APR\"],\"71gS06\":[\"My rewards\"],\"72/M0o\":[\"Enter the token symbol or address\"],\"79D0qY\":[\"Liquidity data not available.\"],\"7Bj3x9\":[\"Failed\"],\"7C/BwI\":[\"Community Treasury\"],\"7IKPTP\":[\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\"],\"7VpPHA\":[\"Confirm\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"Fees (24H)\"],\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":[\"Initial Tokens\"],\"7rpoXw\":[\"This token is on\"],\"7y/8M6\":[\"Please confirm in wallet\"],\"88dol0\":[\"Success Rate\"],\"8OiU8L\":[\"Pool Creation\"],\"8Tg/JR\":[\"Custom\"],\"8XNsbx\":[\"Higher than dynamic slippage\"],\"8Z29ZO\":[\"Estimated service provider fees\"],\"93m8jT\":[\"Basic Fee\"],\"97jlEV\":[\"LP Balance\"],\"9D2g7k\":[\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\"],\"9yc9F+\":[\"Default value is \",[\"warnValue\"],\"%,the current slippage setting is higher than the default value, which means you are willing to accept a worse final execution price.\"],\"A1taO8\":[\"Search\"],\"A23gVF\":[\"Points for staking LP tokens.\"],\"AOhRo6\":[\"DODO provides a variety of pool versions to suit your needs.\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR = Reward Token Value per Year / TVL\"],\"Active\":[\"Active\"],\"AeZIvT\":[\"You will receive\"],\"AghcDJ\":[\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\"],\"All Mining\":[\"All Mining\"],\"Amount of token rewards\":[\"Amount of token rewards\"],\"AxPAXW\":[\"No results found\"],\"AxdOHo\":[\"Pair\"],\"B0/2ea\":[\"s\"],\"B0YDoE\":[\"Yes, I am sure\"],\"B3mhDR\":[\"Add liquidity to obtain LP tokens for mining\"],\"BRi+RY\":[\"Add more liquidity\"],\"C1mcuF\":[\"This CP has been settled by other addrs\"],\"C1qIFl\":[\"Liquidity Supplied\"],\"CK1KXz\":[\"Max\"],\"CKyk7Q\":[\"Go back\"],\"CMHmbm\":[\"Slippage\"],\"CP1UAq\":[\"The slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"Calculation = current rewards for a single block × number of blocks in 24h\"],\"CeLrge\":[\"Mid Price\"],\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":[\"Mining Pool Setup\"],\"Copied\":[\"Copied\"],\"D1bhHv\":[\"The pool’s market-making price is fixed\"],\"D87pha\":[\"Closed\"],\"DPfwMq\":[\"Done\"],\"DPi/hO\":[\"Results in a relatively fixed price.\"],\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":[\"Current price\"],\"DZULmp\":[\"Swap Rate\"],\"Da1+Da\":[\"Pool not found. Please switch to another network and retry.\"],\"Daily Rewards\":[\"Daily Rewards\"],\"Dt4Hc3\":[\"Token Pair Mining\"],\"Du6bPw\":[\"Address\"],\"DupCvC\":[\"Added successful\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"Add Initial Liquidity\"],\"E6MqGy\":[\"Add liquidity\"],\"EQs1sJ\":[\"Min price\"],\"ESQO1L\":[\"Pool address\"],\"EU3wU4\":[\"Fee tier\"],\"EUBGvH\":[\"Are you sure swapping to another chain?\"],\"EatqP4\":[\"Swaps\"],\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":[\"Edit\"],\"Eif7f6\":[\"PMM Pool\"],\"EkAv3P\":[\"Concentrated liquidity, higher efficiency\"],\"End Time\":[\"End Time\"],\"Ended\":[\"Ended\"],\"Enslfm\":[\"Destination\"],\"EpjpP9\":[\"Released Rewards\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"The newly created mining pool can start counting APR after depositing any liquidity.\"],\"F+sxb9\":[\"Unapproved\"],\"F18WP3\":[\"Parameters\"],\"F8yRdq\":[\"More trade settings\"],\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"Add Position\"],\"FQfStS\":[\"Emulator\"],\"FRBvjQ\":[\"Transaction Pending\"],\"Fdp03t\":[\"on\"],\"FrP5tr\":[\"Suitable for stablecoins with price fluctuations within 2%\"],\"GAypnX\":[\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"GGPOuT\":[\"set current mid price\"],\"GGWsTU\":[\"Canceled\"],\"GSt7YT\":[\"The fee rate must be between 0.01% to 10%\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"Go back\"],\"Gr2anW\":[\"Traders (24H)\"],\"Gs02OK\":[\"My Positions\"],\"H7OUPr\":[\"Day\"],\"H9HlDe\":[\"minutes\"],\"HGf8fG\":[\"You can set the minimum selling price for single-token pools.\"],\"HTX2HV\":[\"Minimum received\"],\"HXBqgG\":[\"Invalid price input\"],\"HkWY45\":[\"This pool type isn't supported on your current network. You can switch networks in your wallet to create it\"],\"HuVZMK\":[\"Days\"],\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":[\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":[\"Invite\"],\"IwiTcw\":[\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"Connecting...\"],\"J39pAJ\":[\"Additional Fee\"],\"J7M/DA\":[\"Pegged\"],\"JR7wWw\":[\"Equilibrium target\"],\"JRgkmT\":[\"End release time before adjustment\"],\"JYKRJS\":[\"Stake\"],\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":[\"Fetching best price...\"],\"Jh223O\":[\"Invalid range selected. The min price must be lower than the max price.\"],\"JlIjZf\":[\"Liquidity Provider\"],\"Joa5Dk\":[\"*Collecting fees will withdraw currently available fees for you.\"],\"JuzN3b\":[\"Related CrowdPooling\"],\"K/Ay/d\":[\"Review Swap\"],\"K/PgcA\":[\"Select Cross Chain\"],\"K8rjE/\":[\"Daily rewards before adjustment\"],\"KAbREa\":[\"*Deflationary tokens are not supported\"],\"KAbcm2\":[\"Succeeded\"],\"KAmxpM\":[\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"KRnA5J\":[\"Set pool parameters\"],\"Kb3KaW\":[\"Any Ratio\"],\"KkjUUb\":[\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\"],\"KlvBGJ\":[\"Select Tokens\"],\"KsqhWn\":[\"Staking\"],\"KvG1xW\":[\"Claiming\"],\"L37FfW\":[\"Create AMM V2 Position\"],\"L4nQwl\":[\"Suitable for stablecoins with price fluctuations within 0.5%\"],\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQ0J1B\":[\"Flexible customization, take full control of liquidity\"],\"LQU+Dm\":[\"Risk Disclaimer\"],\"LVzIav\":[\"The pool’s market-making price can be adjusted\"],\"Lfkqg7\":[\"Stake tokens to receive mining rewards.\"],\"LhMjLm\":[\"Time\"],\"LtI9AS\":[\"Owner\"],\"M9dIDb\":[\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\"],\"MU9s7M\":[\"Deposit amounts\"],\"MXQodB\":[\"Disable Indirect Routing\"],\"MZPP7t\":[\"Your position has 0 liquidity, and is not earning fees.\"],\"Mining Pool\":[\"Mining Pool\"],\"MvFS/h\":[\"No pools yet? Create one!\"],\"My Mining\":[\"My Mining\"],\"My Pools\":[\"My Pools\"],\"NEQTCn\":[\"Share Of Pool\"],\"NSCBTb\":[\"The setting has been switched to swap mode\"],\"NVAuTg\":[\"Quote not available\"],\"NXZdrO\":[\"My pool share\"],\"NgeSlx\":[\"Learn More\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"Use the recommended ratio\"],\"Nk6ddN\":[\"Stake LP tokens and receive mining rewards.\"],\"No LP pools match your criteria\":[\"No LP pools match your criteria\"],\"O6RUgz\":[\"Fee rate\"],\"OBdohg\":[\"Add Liquidity\"],\"OFjZGo\":[\"Unstake\"],\"OJOe+K\":[\"Set the fee to the same as most other pools\"],\"OKZP2O\":[\"If there are no participants before the end, the rewards cannot be taken out anymore.\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"Your position will appear here.\"],\"OauUE6\":[\"Fetching Price...\"],\"OfhWJH\":[\"Reset\"],\"OgKD6h\":[\"Best offer\"],\"OjaWXx\":[\"Fresh Mining\"],\"OnDEky\":[\"LP Fee\"],\"OuSseo\":[\"Ratio Settings\"],\"P+K/3O\":[\"Confirming\"],\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":[\"Quantity model\"],\"PLUB/s\":[\"Fee\"],\"PPqGw9\":[\"Applicable to pegged assets with a fixed price and no fluctuation\"],\"PVa3KL\":[\"Position on\"],\"PZqJog\":[\"Confirm Cross Chain\"],\"Q8W3SC\":[\"Volume (1D)\"],\"QNWt8A\":[\"Estimated Time\"],\"QNrpkx\":[\"Classical AMM-like pool. Suitable for most assets.\"],\"QR4/RH\":[\"Swap summary\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"You will also claim all rewards from this pool.\"],\"QtgfjM\":[\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\"],\"R7D79P\":[\"Invalid pair\"],\"R9Khdg\":[\"Auto\"],\"Remaining rewards/Total\":[\"Remaining rewards/Total\"],\"Rewards\":[\"Rewards\"],\"RtKKbA\":[\"Last\"],\"RvYEUJ\":[\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\"],\"RxHSET\":[\"LP Balance:\"],\"S3piC2\":[\"Tx\"],\"S8G1qk\":[\"Single\"],\"SXnevP\":[\"Review Cross Chain\"],\"SbBMxj\":[\"Share of pool\"],\"Search by address\":[\"Search by address\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"Enter a percent\"],\"Staked\":[\"Staked\"],\"Start Time\":[\"Start Time\"],\"Sti4vy\":[\"Mining\"],\"T+qgFw\":[\"Price Impact\"],\"T0Y2+3\":[\"Select a token\"],\"T5ExxV\":[\"Points for LP token holders.\"],\"TFOxRM\":[\"Mins\"],\"TGi+jm\":[\"Doc\"],\"TJBHlP\":[\"Standard\"],\"TP9/K5\":[\"Token\"],\"TTlkRL\":[\"Lower than dynamic slippage\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP Tokens\"],\"TizaRy\":[\"Wallet incompatibility\"],\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":[\"Settings\"],\"UE2beD\":[\"Creator\"],\"UN0Nip\":[\"Reward Rules\"],\"UPXmW+\":[\"Trader\"],\"URmyfc\":[\"Details\"],\"UbRKMZ\":[\"Pending\"],\"Upcoming\":[\"Upcoming\"],\"Users\":[\"Users\"],\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":[\"Seconds\"],\"V38hNQ\":[\"Single-Token Stake Mining\"],\"VXTSOE\":[\"Suitable for most situations.\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"Something went wrong…<0>Refresh again\"],\"WI3lQ1\":[\"SELECT\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"Select Token\"],\"WYqq5A\":[\"End mining\"],\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"When adding rewards, the number of rewards for a single block may be adjusted\"],\"X6T02b\":[\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\"],\"XPiFIY\":[\"Can the pool price be adjusted?\"],\"XeovX3\":[\"Swap Detail\"],\"Xpkm7d\":[\"No ForceStop access\"],\"Y0Knz4\":[\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\"],\"Y7rVy0\":[\"Fee Rate\"],\"Y9QDtD\":[\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\"],\"YA4hwj\":[\"Price Range\"],\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":[\"My Liquidity\"],\"YHpbe1\":[\"For\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"You are not currently providing liquidity for any LP pools.\"],\"You have not create any mining\":[\"You have not create any mining\"],\"Z033WN\":[\"Total Swap Fee\"],\"Z5HWHd\":[\"On\"],\"Z7ZXbT\":[\"Approve\"],\"Z8lGw6\":[\"Share\"],\"ZXvy7b\":[\"Additional routing fees set by the Widget user\"],\"ZgtZpB\":[\"The start time is too soon, please set a later time\"],\"ZhEBp4\":[\"Current liquidity pool token price\"],\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":[\"Maximum slippage do not exceed 50%\"],\"a1AzKr\":[\"For those who are looking to sell tokens and only need ask-side liquidity.\"],\"a7u1N9\":[\"Price\"],\"aGKLPO\":[\"The current network supports new pool types\"],\"aIvv/z\":[\"The price of this pool is within your selected range. Your position is currently earning fees.\"],\"aM1tos\":[\"You are creating a pool\"],\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"Minutes\"],\"az8lvo\":[\"Off\"],\"b+KjnH\":[\"Your position will not earn fees or be used in trades until the market price moves into your range.\"],\"b2jAb+\":[\"per\"],\"bC0iyq\":[\"Suitable for stablecoins with price fluctuations within 10%\"],\"bEsfUQ\":[\"Confirm submission\"],\"bQ3cKo\":[\"Select pool by tokens\"],\"bUUVED\":[\"Asset\"],\"bXp9u3\":[\"Fee Revenue\"],\"bwSQI0\":[\"Supply\"],\"c4miqE\":[\"Pool share\"],\"c6TMm0\":[\"Mining Type\"],\"cDWXuq\":[\"Settler\"],\"cJtosk\":[\"Remove liquidity\"],\"cOvZFM\":[\"Dynamic\"],\"cmUrtC\":[\"SEE HOW IT WORKS\"],\"cnGeoo\":[\"Delete\"],\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"Initial Price\"],\"d8YnVj\":[\"Guide Price\"],\"dAXusZ\":[\"Mining Only\"],\"dEgA5A\":[\"Cancel\"],\"dI46oG\":[\"Auto switch network\"],\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":[\"One-Click Claim\"],\"dmiCGN\":[\"Select Token Pair\"],\"dqWPbT\":[\"I have read, understand, and agree to the <0>Terms of Service.\"],\"dzV+zO\":[\"Modify Confirmation\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"Tips:\"],\"eE0JZ4\":[\"Version\"],\"eK0eiF\":[\"Initial asset ratio\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"Edit\"],\"eTUF28\":[\"Min\"],\"eVZ7bY\":[\"Hide TVL=0 pools\"],\"em6LzM\":[\"Transaction rejected.\"],\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":[\"Results in a more volatile price.\"],\"fSFt4a\":[\"Token Pair\"],\"fZ5Vnu\":[\"Received\"],\"fZFkP1\":[\"My Pools\"],\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":[\"Rate\"],\"fsBGk0\":[\"Balance\"],\"fxRyGG\":[\"fee tier\"],\"g3x+cF\":[\"Service update, please wait and try again\"],\"gz+9Rb\":[\"Gas price is too low, please adjust in your wallet and try again\"],\"h3PbRN\":[\"My Pool Share\"],\"h4RLFN\":[\"RPC node data exception\"],\"h5FVz1\":[\"Estimated transaction time\"],\"h5pjuM\":[\"Collect fees\"],\"h7LgzN\":[\"Connect to your wallet\"],\"hCBYHP\":[\"Total Fee Revenue\"],\"hXzOVo\":[\"Next\"],\"hYgDIe\":[\"Create\"],\"hcNa1G\":[\"Token Amount\"],\"hdIg7i\":[\"Select Pool Version\"],\"hom7qf\":[\"Claim\"],\"i3Z+/Z\":[\"Out of range\"],\"iDGO1l\":[\"Disclaimer\"],\"iH8pgl\":[\"Back\"],\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":[\"Enter an amount\"],\"iaocTt\":[\"Ratio\"],\"j2Uisd\":[\"Approving\"],\"jMam5g\":[[\"0\"],\" Balance\"],\"jaH6JH\":[\"Higher than default slippage\"],\"jjuKOj\":[\"Min Price\"],\"juypHV\":[\"Liquidity Providers\"],\"kAC8rT\":[\"High price\"],\"kNeEXg\":[\"Current Price\"],\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":[\"Something went wrong.\"],\"kj3p6e\":[\"Daily Rewards\"],\"ku//5b\":[\"Second\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"Total Swap Volume\"],\"lDgVWA\":[\"Receive\"],\"lJvbHq\":[\"Select Network\"],\"lLbR0m\":[\"Simple, full-range liquidity\"],\"lNYomJ\":[\"AMM V2 Position\"],\"lQ6r7x\":[\"Confirm swap\"],\"lTmG/H\":[\"Minimum Received\"],\"lgE483\":[\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\"],\"lqTDfd\":[\"Slippage Tolerance\"],\"lsg9Mi\":[\"Parameter Settings\"],\"lt8yMa\":[\"Send to:\"],\"luOvdJ\":[\"My Staked\"],\"m16xKo\":[\"Add\"],\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\"],\"mObS+5\":[\"Failed to get price of the token\"],\"mYGY3B\":[\"Date\"],\"mZ4SrP\":[\"Liquidity Pool\"],\"me2dmq\":[\"Value (USD)\"],\"n25Lml\":[\"Depth\"],\"nIrcQi\":[\"No matching pool found\"],\"nTWWCZ\":[\"Low\"],\"nxRg31\":[\"Select pair\"],\"o/5/4c\":[\"Once Mining has started, it cannot be stopped.\"],\"o8aMNm\":[\"Select a liquidity pool\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\"],\"p2jbcE\":[\"Create Pool\"],\"p3607o\":[\"Managing\"],\"p7/w10\":[\"Volume (24H)\"],\"pHQq+U\":[\"Pool Setup\"],\"pKjCsP\":[\"100% use your own funds and enjoy the maximum degree of flexibility.\"],\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":[\"MT Fee\"],\"pY/ok7\":[\"All chains\"],\"pdZiL7\":[\"Current Market Price:\"],\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"Confirming...\"],\"qDhDFK\":[\"Traders\"],\"qK7wuW\":[\"Unable to SETTLE during the cooling-off period\"],\"qLkska\":[\"The setting has been switched to cross chain mode\"],\"qiOIiY\":[\"Buy\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"Total Rewards\"],\"r7ScnQ\":[\"Connect to a wallet\"],\"rAx5u1\":[\"End Time\"],\"rH6vg9\":[\"There is no liquidity data.\"],\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":[\"Detail\"],\"rSayea\":[\"APY\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"Preview\"],\"sCUx8G\":[\"Select Platform\"],\"sIPJGT\":[\"SELECT TOKEN\"],\"sNaLCG\":[\"Add Token\"],\"sTnImq\":[\"Total Liquidity\"],\"sVlqoo\":[\"AMM V3 Position\"],\"sjn3tj\":[\"Slippage Coefficient\"],\"sleulC\":[\"Liquidity Mining\"],\"sxkWRg\":[\"Advanced\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":[\"Initial Price Alert\"],\"t/YqKh\":[\"Remove\"],\"t3d3/V\":[\"ratio is 0\"],\"tKE4Ak\":[\"Cross Chain Summary\"],\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":[\"SafeERC20: low-level call failed. Please contact the DODO team.\"],\"tnRI9r\":[\"Pool Creation Confirmation\"],\"tu/fxg\":[\"Claim fees\"],\"tyGEMJ\":[\"Amounts\"],\"u1tnst\":[\"Create One\"],\"uAQUqI\":[\"Status\"],\"uEoBVI\":[\"Low price\"],\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":[\"Real Time\"],\"udsWDJ\":[\"Unsupported network - switch to trade\"],\"uiuMDr\":[\"Enter parameters to view the yield curve\"],\"v4nCHK\":[\"Paid\"],\"v4wgrk\":[\"Failed to add\"],\"vH2C/2\":[\"Swap\"],\"vLyv1R\":[\"Hide\"],\"vOyUlD\":[\"In range\"],\"vXvgFK\":[\"There is risk of being arbitraged if adding this liquidity.\"],\"vxHMzr\":[\"address\"],\"wSpNR+\":[\"This trading pair does not have enough historical data and has used the default dynamic slippage.\"],\"wckWOP\":[\"Manage\"],\"wdxz7K\":[\"Source\"],\"wmCrk7\":[\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\"],\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":[\"Liquidity Burn Ratio\"],\"x4QVeW\":[\"Percentage to remove\"],\"x6GJ4a\":[\"Max Slippage\"],\"xEbi+8\":[\"User denied transaction signature.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"Copy link\"],\"y4kfSV\":[\"WARNING\"],\"y5rS9U\":[\"Migrate\"],\"yM82Jw\":[\"ForceStop exception\"],\"yQ2kGp\":[\"Load more\"],\"yQE2r9\":[\"Loading\"],\"yXm1vH\":[\"The initial price is different from the current market price, which may cause your pool to be arbitraged\"],\"yY8wAv\":[\"Hours\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":[\"High\"],\"yz7wBu\":[\"Close\"],\"yzjPpo\":[\"Fees will be the same as in most other pools.\"],\"z9t6jM\":[\"Mining Pool\"],\"zA6/Yq\":[\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"Transaction Deadline\"],\"zXCpR0\":[\"Claim Rewards\"],\"zcVtwU\":[\"My Pools (PMM)\"],\"zeSosD\":[\"Starting price\"],\"zga9sT\":[\"OK\"],\"zkFuIm\":[\"Total Rewards=Daily Rewards*Duration\"],\"znqB4T\":[\"Insufficient balance\"],\"zwBp5t\":[\"Private\"],\"zwWKhA\":[\"Learn more\"]}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index c18c4b74..0a36fcfe 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -65,7 +65,7 @@ msgstr "Receive {0}" msgid "{0} pending" msgstr "{0} pending" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:493 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:524 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:362 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:786 msgid "Removing" @@ -136,8 +136,8 @@ msgstr "Start Time" msgid "Dismiss" msgstr "Dismiss" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:287 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:436 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:309 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:467 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:85 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:323 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:659 @@ -149,7 +149,7 @@ msgstr "Pool Type" msgid "Unstaking" msgstr "Unstaking" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:496 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:527 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:365 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:789 msgid "Adding" @@ -223,6 +223,10 @@ msgstr "Pay" msgid "Due to the market condition, market price and estimated price may have a slight difference" msgstr "Due to the market condition, market price and estimated price may have a slight difference" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:206 +msgid "View more" +msgstr "View more" + #: src/widgets/PoolWidget/PoolList/components/TokenAndPoolFilter.tsx:66 msgid "Search by token or pool address" msgstr "Search by token or pool address" @@ -311,7 +315,7 @@ msgid "Pricing Model" msgstr "Pricing Model" #: src/widgets/PoolWidget/PoolCreate/components/DepthAndLiquidityChart.tsx:74 -#: src/widgets/PoolWidget/PoolList/index.tsx:228 +#: src/widgets/PoolWidget/PoolList/index.tsx:241 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOrMiningTabs.ts:17 msgid "Liquidity" msgstr "Liquidity" @@ -321,6 +325,10 @@ msgstr "Liquidity" msgid "APR" msgstr "APR" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:240 +msgid "My rewards" +msgstr "My rewards" + #: src/components/TokenPicker/index.tsx:213 msgid "Enter the token symbol or address" msgstr "Enter the token symbol or address" @@ -476,7 +484,7 @@ msgstr "Amount of token rewards" msgid "No results found" msgstr "No results found" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:432 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:463 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:316 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:655 msgid "Pair" @@ -723,8 +731,8 @@ msgstr "More trade settings" msgid "Insufficient cross-chain fees, need at least {0} {1}" msgstr "Insufficient cross-chain fees, need at least {0} {1}" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:340 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:440 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:371 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:471 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:112 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:214 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:319 @@ -1072,8 +1080,8 @@ msgstr "Stake LP tokens and receive mining rewards." msgid "No LP pools match your criteria" msgstr "No LP pools match your criteria" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:255 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:625 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:277 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:660 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:291 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:898 msgid "Fee rate" @@ -1081,7 +1089,7 @@ msgstr "Fee rate" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 -#: src/widgets/PoolWidget/PoolList/index.tsx:164 +#: src/widgets/PoolWidget/PoolList/index.tsx:176 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:165 msgid "Add Liquidity" msgstr "Add Liquidity" @@ -1170,8 +1178,8 @@ msgstr "Position on" msgid "Confirm Cross Chain" msgstr "Confirm Cross Chain" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:361 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:447 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:392 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:478 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:125 msgid "Volume (1D)" msgstr "Volume (1D)" @@ -1181,7 +1189,7 @@ msgid "Estimated Time" msgstr "Estimated Time" #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:20 -#: src/widgets/PoolWidget/PoolList/index.tsx:229 +#: src/widgets/PoolWidget/PoolList/index.tsx:242 msgid "Classical AMM-like pool. Suitable for most assets." msgstr "Classical AMM-like pool. Suitable for most assets." @@ -1278,8 +1286,8 @@ msgstr "Staked" msgid "Start Time" msgstr "Start Time" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:211 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:677 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:231 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:713 #: src/widgets/PoolWidget/PoolList/components/PoolApyTooltip.tsx:190 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:247 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:954 @@ -1383,7 +1391,7 @@ msgid "Users" msgstr "Users" #. placeholder {0}: wallet.name -#: src/components/ConnectWallet/ConnectWalletDialog.tsx:154 +#: src/components/ConnectWallet/ConnectWalletDialog.tsx:155 msgid "Connect to your {0} Wallet" msgstr "Connect to your {0} Wallet" @@ -1685,6 +1693,10 @@ msgstr "Initial Price" msgid "Guide Price" msgstr "Guide Price" +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1046 +msgid "Mining Only" +msgstr "Mining Only" + #: src/components/Confirm.tsx:108 #: src/components/DateTimePickerInput/components/MobileDateTimePicker.tsx:203 #: src/components/SwitchChainDialog/index.tsx:127 @@ -1875,6 +1887,7 @@ msgstr "Select Pool Version" #: src/widgets/MiningWidget/MiningList/operate-area/index.tsx:204 #: src/widgets/MiningWidget/OperateArea/index.tsx:74 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:453 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:124 msgid "Claim" msgstr "Claim" @@ -2022,8 +2035,8 @@ msgstr "My Staked" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:451 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:79 #: src/widgets/PoolWidget/PoolDetail/index.tsx:219 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:385 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:749 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:416 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:786 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:284 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:591 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1212 @@ -2217,8 +2230,8 @@ msgid "Detail" msgstr "Detail" #: src/widgets/PoolWidget/PoolDetail/components/TitleInfo.tsx:239 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:310 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:443 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:341 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:474 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:100 #: src/widgets/PoolWidget/PoolList/components/TokenListPoolItem.tsx:102 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:348 @@ -2268,6 +2281,11 @@ msgstr "AMM V3 Position" msgid "Slippage Coefficient" msgstr "Slippage Coefficient" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx:21 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:181 +msgid "Liquidity Mining" +msgstr "Liquidity Mining" + #: src/components/Swap/components/SwapSettingsDialog/SlippageSetting.tsx:157 msgid "Advanced" msgstr "Advanced" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index dc3ce037..f46b0195 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"滑点系数越小,交易时候的滑点越低,深度越好。\"],\"+Jkdiu\":[\"交易时长:\"],\"+uZnU3\":[\"跨链桥\"],\"/+c6tU\":[\"99% 选择此参数\"],\"/6L4mj\":[\"您的仓位为空\"],\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":[\"累计交易用户\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"交易量\"],\"/jQctM\":[\"至\"],\"/k7Ttv\":[\"获得 \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":[\"提取\"],\"0O1wzf\":[\"卖出\",[\"0\"],\" \",[\"1\"],\",资金池盘口价格涨到 \",[\"2\"]],\"0QDjxt\":[\"余额:\"],\"0RrIzN\":[\"代币选择\"],\"0S8v3W\":[\"开始时间必须晚于当前时间\"],\"0Sw1gZ\":[\"挖矿规则\"],\"0YxDPW\":[\"状态加载中...\"],\"0b0AkA\":[\"* 请注意,资金池创建完成后,费率无法修改\"],\"1+P9RR\":[\"切换至 \",[\"0\"],\" 网络\"],\"1/LP4K\":[[\"tokenB\"],\" 每个 \",[\"tokenA\"]],\"14s9LL\":[\"创建挖矿\"],\"1ABiXc\":[\"添加流动性后,你可以按照 <0>\",[\"0\"],\" 的比例从资金池中获得交易手续费分润。撤出流动性时,可以将手续费一起取出。\"],\"1PQRWr\":[\"开始时间\"],\"1QfxQT\":[\"忽略\"],\"1Qz63U\":[\"类型\"],\"1gWStS\":[\"赎回中\"],\"1yHVE+\":[\"添加\"],\"22Xs8M\":[\"充值比例\"],\"237hSL\":[\"已结束\"],\"2IZBPB\":[\"结束时间必须晚于开始时间\"],\"2vjOqX\":[\"更低的手续费率,可以吸引更多的交易者。\"],\"34w3mT\":[\"单边\"],\"3CsYwD\":[\"选择做市池\"],\"3VUfrF\":[\"选定区间\"],\"3WdxUv\":[\"不再提醒\"],\"3XBvkd\":[\"移除流动性\"],\"3dP8Wx\":[\"输入地址\"],\"3ggd2j\":[\"资金池中资产比例\"],\"4cJ0hF\":[\"奖励代币\"],\"4fL/V7\":[\"支付\"],\"4kY4C4\":[\"由于市场情况不同,市场价格与估算价格可能略有差异。\"],\"4nzwq3\":[\"通过代币或者资金池地址查找\"],\"4ogEAw\":[\"锚定价格\"],\"4vKwIV\":[\"私有池\"],\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":[\"创建时间\"],\"54ffaC\":[\"当前网络与钱包不一致,请在钱包中切换\"],\"5CZbyC\":[\"设置价格区间\"],\"5IHTSS\":[\"全区间\"],\"5Nb8LL\":[\"*每天出块的时间并不是固定的,实际每日奖励数量可能会略有偏差\"],\"5OKrbq\":[\"由于该池使用了PMM算法,与通常的AMM池机制不同,因此初始价格的计算也与AMM不同。\"],\"5Pxzb6\":[\"预计开始区块高度{\",[\"start\"],\"},结束区块高度{\",[\"end\"],\"}。出块时间会上下波动,预计的活动时间和实际会有一定误差。\"],\"5QDjef\":[\"代币数量由初始价格计算。\"],\"5etEUX\":[\"最高价格\"],\"5nL2hY\":[\"质押代币\"],\"6+mYrD\":[\"当前价格冲击\"],\"6UYTy8\":[\"分钟\"],\"6V3Ea3\":[\"已复制\"],\"6XYkjc\":[\"修改参数\"],\"6XgEPi\":[\"小时\"],\"6lss/t\":[\"定价模式\"],\"6y2TB3\":[\"流动性\"],\"70wH1Q\":[\"APR\"],\"72/M0o\":[\"输入代币符号或地址\"],\"79D0qY\":[\"当前无流动性数据\"],\"7Bj3x9\":[\"失败\"],\"7C/BwI\":[\"社区金库\"],\"7IKPTP\":[\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\"],\"7VpPHA\":[\"确认\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"手续费(24小时)\"],\"7Z4WfS\":[\"每 \",[\"1\"],\" 计 \",[\"0\"],\" \"],\"7m5+6j\":[\"初始代币\"],\"7rpoXw\":[\"该代币在\"],\"7y/8M6\":[\"请在钱包确认\"],\"88dol0\":[\"交易成功率\"],\"8OiU8L\":[\"创建资金池\"],\"8Tg/JR\":[\"自定义\"],\"8XNsbx\":[\"比动态滑点高\"],\"8Z29ZO\":[\"预计服务供应商费用\"],\"93m8jT\":[\"基础手续费\"],\"97jlEV\":[\"LP 资金\"],\"9D2g7k\":[\"DODO 的流动性是连续的,这与UniV3的离散流动性不同。以柱状图展示用来说明不同做市模式下流动性分布的区别。\"],\"9yc9F+\":[\"默认滑点是 \",[\"warnValue\"],\"%,当前滑点设置比默认滑点高,可能会导致最终成交价格较差。\"],\"A1taO8\":[\"搜索\"],\"A23gVF\":[\"参与挖矿获得积分\"],\"AOhRo6\":[\"DODO 提供多种的做市模式以满足不同资产的流动性需要\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR 计算公式:以当前奖励代币价格估算每年奖励价值 / 总挖矿资金\"],\"Active\":[\"进行中\"],\"AeZIvT\":[\"您将会收到\"],\"AghcDJ\":[\"价格冲击超过了你设置的滑点, 请提高滑点后重试\"],\"All Mining\":[\"全部挖矿\"],\"Amount of token rewards\":[\"当前挖矿获得的代币奖励\"],\"AxPAXW\":[\"未找到匹配结果\"],\"AxdOHo\":[\"交易对\"],\"B0/2ea\":[\"秒\"],\"B0YDoE\":[\"是的,我确定\"],\"B3mhDR\":[\"添加流动性后,可以获取 LP 代币。质押 LP 代币,开启挖矿。\"],\"BRi+RY\":[\"添加更多流动性\"],\"C1mcuF\":[\"此众筹池已被其他地址结算\"],\"C1qIFl\":[\"做市资金\"],\"CK1KXz\":[\"全部\"],\"CKyk7Q\":[\"返回\"],\"CMHmbm\":[\"滑点\"],\"CP1UAq\":[\"滑点系数需要大于等于 0 且小于等于 0.1\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"计算方式=当前单个区块奖励×24h出块数\"],\"CeLrge\":[\"盘口中间价\"],\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":[\"设置挖矿资金池\"],\"Copied\":[\"已复制\"],\"D1bhHv\":[\"资金池价格固定\"],\"D87pha\":[\"已关闭\"],\"DPfwMq\":[\"完成\"],\"DPi/hO\":[\"适用于价格相对稳定的交易对\"],\"DTFrUE\":[\"授权 \",[\"0\"],\" 中\"],\"DWd30U\":[\"当前价格\"],\"DZULmp\":[\"价格\"],\"Da1+Da\":[\"没有查到资金池,建议您切换网络后重试\"],\"Daily Rewards\":[\"每日奖励\"],\"Dt4Hc3\":[\"双币做市挖矿\"],\"Du6bPw\":[\"合约地址\"],\"DupCvC\":[\"添加成功\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"添加初始流动性\"],\"E6MqGy\":[\"添加做市资金\"],\"EQs1sJ\":[\"最低价格\"],\"ESQO1L\":[\"资金池地址\"],\"EU3wU4\":[\"手续费费率\"],\"EUBGvH\":[\"是否确认切换到另一个链?\"],\"EatqP4\":[\"交易记录\"],\"EcVqOR\":[[\"0\"],\" 已提交\"],\"Edit\":[\"编辑\"],\"Eif7f6\":[\"PMM 资金池\"],\"EkAv3P\":[\"集中流动性,更高的资金利用率\"],\"End Time\":[\"结束时间\"],\"Ended\":[\"已结束\"],\"Enslfm\":[\"目标\"],\"EpjpP9\":[\"已释放奖励\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"新上线的挖矿池,存入任意流动性后即可开始统计APR\"],\"F+sxb9\":[\"未授权\"],\"F18WP3\":[\"参数\"],\"F8yRdq\":[\"更多设置\"],\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"加仓\"],\"FQfStS\":[\"模拟器\"],\"FRBvjQ\":[\"交易进行中\"],\"Fdp03t\":[\"在\"],\"FrP5tr\":[\"适用于价格波动在2%以内的稳定币\"],\"GAypnX\":[\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"GGPOuT\":[\"设置当前中间价\"],\"GGWsTU\":[\"已撤单\"],\"GSt7YT\":[\"费率必须在 0.01% 到 10% 之间\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"返回\"],\"Gr2anW\":[\"交易用户 (24小时)\"],\"Gs02OK\":[\"我的仓位\"],\"H7OUPr\":[\"天\"],\"H9HlDe\":[\"分\"],\"HGf8fG\":[\"你可以设置单边池的最小卖出价格。\"],\"HTX2HV\":[\"最低收到\"],\"HXBqgG\":[\"价格输入无效\"],\"HkWY45\":[\"当前网络不支持此池类型,您可以在钱包中切换网络来创建它\"],\"HuVZMK\":[\"天\"],\"I0LXan\":[\"价格滑点:\",[\"0\"]],\"I0yi1d\":[\"充值比例由池内流动资产的比例决定,该比例不代表资产之间的兑换价格\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"市场深度不足,无法统计【{\",[\"symbols\"],\"}代币】的美元价值\"],\"Invite\":[\"邀请\"],\"IwiTcw\":[\"该池的价格不在你选定的区间内。你的仓位目前不能赚取交易手续费。\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"连接中...\"],\"J39pAJ\":[\"额外手续费\"],\"J7M/DA\":[\"锚定池\"],\"JR7wWw\":[\"回归目标\"],\"JRgkmT\":[\"调整前结束释放时间\"],\"JYKRJS\":[\"质押\"],\"JaeUyE\":[\"资金池报价与 DODO 智能路由价格相差 \",[\"lqAndDodoCompareText\"]],\"JdNn1Y\":[\"获取最优价格中...\"],\"Jh223O\":[\"选定区间无效,最低价格必须低于最高价格。\"],\"JlIjZf\":[\"做市用户\"],\"Joa5Dk\":[\"*收取费用将领取当前已分配手续费。\"],\"JuzN3b\":[\"关联众筹建池\"],\"K/Ay/d\":[\"预览交易\"],\"K/PgcA\":[\"选择跨链桥\"],\"K8rjE/\":[\"调整前每日释放奖励\"],\"KAbREa\":[\"· 不支持通缩代币\"],\"KAbcm2\":[\"成功\"],\"KAmxpM\":[\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"KRnA5J\":[\"修改资金池参数\"],\"Kb3KaW\":[\"任意比例\"],\"KkjUUb\":[\"创建完成后,您可以随时修改做市价格,适用于资产锚定价可能出现变化的情况\"],\"KlvBGJ\":[\"选择代币\"],\"KsqhWn\":[\"质押中\"],\"KvG1xW\":[\"领取中\"],\"L37FfW\":[\"创建 AMM V2 仓位\"],\"L4nQwl\":[\"适用于价格波动在0.5%以内的稳定币\"],\"LHxwaD\":[\"手续费必须大于 \",[\"0\"],\"%\"],\"LQ0J1B\":[\"灵活自定义,高度掌控流动性\"],\"LQU+Dm\":[\"风险警示\"],\"LVzIav\":[\"池子价格可调整\"],\"Lfkqg7\":[\"质押指定代币获得挖矿奖励\"],\"LhMjLm\":[\"时间\"],\"LtI9AS\":[\"所有者\"],\"M9dIDb\":[\"锚定价格是指两个代币资产之间的汇率,其中一个资产的价值由另一个锚定。例如,美元和 USDT 之间的汇率是 1。\"],\"MU9s7M\":[\"充值数额\"],\"MXQodB\":[\"禁止多跳\"],\"MZPP7t\":[\"当前仓位流动性为 0 ,没有手续费收入。\"],\"Mining Pool\":[\"挖矿合约地址\"],\"MvFS/h\":[\"还没流动性池?来创建一个!\"],\"My Mining\":[\"我的挖矿\"],\"My Pools\":[\"我的资金池\"],\"NEQTCn\":[\"资金池份额\"],\"NSCBTb\":[\"设置已切换至闪兑模式\"],\"NVAuTg\":[\"没有报价\"],\"NXZdrO\":[\"我的资金池份额\"],\"NgeSlx\":[\"查看详情\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"使用推荐的比例\"],\"Nk6ddN\":[\"质押 做市 LP 代币,获得挖矿奖励\"],\"No LP pools match your criteria\":[\"没有找到符合条件的挖矿项目\"],\"O6RUgz\":[\"手续费费率\"],\"OBdohg\":[\"添加流动性\"],\"OFjZGo\":[\"撤出\"],\"OJOe+K\":[\"适用于大部分主流币\"],\"OKZP2O\":[\"若截止前无任何参与者,则挖矿奖励任何人无法提取。\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"你的仓位将会显示在这里\"],\"OauUE6\":[\"获取价格中...\"],\"OfhWJH\":[\"重置\"],\"OgKD6h\":[\"最优价格\"],\"OjaWXx\":[\"新上线\"],\"OnDEky\":[\"LP 手续费\"],\"OuSseo\":[\"比例设定\"],\"P+K/3O\":[\"确认中\"],\"P4iKEj\":[\"初始价格需要大于 \",[\"min\"],\",小于 100,000,000\"],\"PIYEqF\":[\"按照数量\"],\"PLUB/s\":[\"手续费\"],\"PPqGw9\":[\"适用于锚定资产,没有波动\"],\"PVa3KL\":[\"仓位在\"],\"PZqJog\":[\"确认跨链交易\"],\"Q8W3SC\":[\"交易量(1天)\"],\"QNWt8A\":[\"预计时间\"],\"QNrpkx\":[\"类似 AMM 做市策略,适用于大多数币种\"],\"QR4/RH\":[\"交易预览\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"你也将从这个池子里领取所有奖励。\"],\"QtgfjM\":[\"资金池创建者可以通过修改作市价格参数来调整流动性分布。 <0>了解更多\"],\"R7D79P\":[\"币对无效\"],\"R9Khdg\":[\"自动\"],\"Remaining rewards/Total\":[\"剩余奖励/总奖励\"],\"Rewards\":[\"奖励代币\"],\"RtKKbA\":[\"上一步\"],\"RvYEUJ\":[\"类似于 Curve 的做市策略,适用于合成资产、按照稳定比例兑换的资产\"],\"RxHSET\":[\"LP 余额:\"],\"S3piC2\":[\"交易哈希:\"],\"S8G1qk\":[\"单边\"],\"SXnevP\":[\"预览跨链交易\"],\"SbBMxj\":[\"资金池份额\"],\"Search by address\":[\"输入地址\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"输入百分比\"],\"Staked\":[\"已质押\"],\"Start Time\":[\"开始时间\"],\"Sti4vy\":[\"挖矿\"],\"T+qgFw\":[\"价格冲击\"],\"T0Y2+3\":[\"选择代币\"],\"T5ExxV\":[\"添加流动性获得积分\"],\"TFOxRM\":[\"分钟\"],\"TGi+jm\":[\"文档\"],\"TJBHlP\":[\"标准\"],\"TP9/K5\":[\"代币\"],\"TTlkRL\":[\"比动态滑点低\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP 代币\"],\"TizaRy\":[\"钱包不兼容\"],\"TvH4Ym\":[\"买入 \",[\"0\"],\" \",[\"1\"],\", 资金池价格下降到 \",[\"2\"]],\"Tz0i8g\":[\"设置\"],\"UE2beD\":[\"创建者\"],\"UN0Nip\":[\"奖励规则\"],\"UPXmW+\":[\"交易者\"],\"URmyfc\":[\"详情\"],\"UbRKMZ\":[\"执行中\"],\"Upcoming\":[\"待开始\"],\"Users\":[\"用户\"],\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":[\"秒\"],\"V38hNQ\":[\"单币质押挖矿\"],\"VXTSOE\":[\"适用于大部分交易对\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"服务遇到了一些问题...<0>尝试刷新\"],\"WI3lQ1\":[\"点击选择\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"选择代币\"],\"WYqq5A\":[\"已结束挖矿\"],\"WgTuci\":[\"你的仓位将在该价格全部由 \",[\"0\"],\" 组成\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"补充奖励时,单个区块奖励数量可能会有所调整\"],\"X6T02b\":[\"必须先初始化该资金池,才能添加流动性。要初始化,请选择池的起价。然后,输入流动性价格范围和充值金额。由于初始化交易,Gas 费将比通常高。\"],\"XPiFIY\":[\"是否可以更改资金池报价\"],\"XeovX3\":[\"交易详情\"],\"Xpkm7d\":[\"无 ForceStop 访问权限\"],\"Y0Knz4\":[\"只使用该交易对下的资金池,不会使用第三个币种跳转。\"],\"Y7rVy0\":[\"手续费率\"],\"Y9QDtD\":[\"您正在修改私有池的流动性。这是一项自由度极高的操作,有可能造成资金流入/流出,也有可能造成市场价格变化。请确保您清楚每一项修改的含义。\"],\"YA4hwj\":[\"价格区间\"],\"YG004A\":[[\"0\"],\" 已充值\"],\"YHc3B+\":[\"我的流动性\"],\"YHpbe1\":[\"对于\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" 价格差\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"您没有参与任何挖矿项目\"],\"You have not create any mining\":[\"暂未创建任何挖矿\"],\"Z033WN\":[\"累计手续费\"],\"Z5HWHd\":[\"在\"],\"Z7ZXbT\":[\"代币授权\"],\"Z8lGw6\":[\"份额\"],\"ZXvy7b\":[\"由 Widget 设置的额外路由费用\"],\"ZgtZpB\":[\"请重新设置开始时间,当前的设置时间太往前。\"],\"ZhEBp4\":[\"当前资金池价格\"],\"ZlKTEh\":[\"奖励 \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" 你提供的初始流动性会被燃烧。<1/>提供的资产比例越接近推荐比例 (\",[\"recommendRatioText\"],\"),燃烧比例越少。\"],\"Zm56FI\":[\"最大滑点不能超过50%\"],\"a1AzKr\":[\"适用于新资产发行,为其提供卖盘流动性\"],\"a7u1N9\":[\"价格\"],\"aGKLPO\":[\"当前公链网络支持新资金池模型\"],\"aIvv/z\":[\"该资金池的价格在你选定的区间内。你的仓位目前正在赚取手续费。\"],\"aM1tos\":[\"正在创建资金池\"],\"ab98Hp\":[\"创建者 \",[\"0\"],\" \"],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"分钟\"],\"az8lvo\":[\"关\"],\"b+KjnH\":[\"在市场价格进入到你的价格区间之前,您的仓位不能赚取交易手续费。\"],\"b2jAb+\":[\"每\"],\"bC0iyq\":[\"适用于价格波动在10%以内的稳定币\"],\"bEsfUQ\":[\"确认提交\"],\"bQ3cKo\":[\"通过代币筛选,然后选择做市池\"],\"bUUVED\":[\"资产\"],\"bXp9u3\":[\"手续费\"],\"bwSQI0\":[\"供应\"],\"c4miqE\":[\"资金池份额\"],\"c6TMm0\":[\"挖矿类型\"],\"cDWXuq\":[\"结算者\"],\"cJtosk\":[\"移除流动性\"],\"cOvZFM\":[\"动态\"],\"cmUrtC\":[\"查看教程\"],\"cnGeoo\":[\"删除\"],\"cnbRVW\":[\"初始价格 \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"初始价格\"],\"d8YnVj\":[\"指导价\"],\"dEgA5A\":[\"取消\"],\"dI46oG\":[\"自动切换网络\"],\"dJqd5x\":[\"获取 \",[\"tokenSymbol\"]],\"dUdltF\":[\"领取\"],\"dmiCGN\":[\"选择币对\"],\"dqWPbT\":[\"我已经阅读、理解并同意 <0>服务条款\"],\"dzV+zO\":[\"修改信息确认\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"小贴士:\"],\"eE0JZ4\":[\"类型\"],\"eK0eiF\":[\"初始资产比例\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"编辑\"],\"eTUF28\":[\"分钟\"],\"eVZ7bY\":[\"隐藏 TVL=0 的池子\"],\"em6LzM\":[\"交易被拒绝.\"],\"evmVGu\":[\"创建者 \",[\"0\"]],\"fKYdE9\":[\"适用于价格波动较大的交易对\"],\"fSFt4a\":[\"币对\"],\"fZ5Vnu\":[\"获得\"],\"fZFkP1\":[\"我的资金池\"],\"fgGids\":[\"授权 \",[\"0\"]],\"fqDzSu\":[\"价格\"],\"fsBGk0\":[\"余额\"],\"fxRyGG\":[\"手续费费率\"],\"g3x+cF\":[\"服务升级中, 请等待或重试\"],\"gz+9Rb\":[\"Gas 价格过低, 请调整后重试\"],\"h3PbRN\":[\"我的资金池份额\"],\"h4RLFN\":[\"RPC节点异常\"],\"h5FVz1\":[\"预计交易时长\"],\"h5pjuM\":[\"收取手续费\"],\"h7LgzN\":[\"连接钱包\"],\"hCBYHP\":[\"总手续费收入\"],\"hXzOVo\":[\"下一步\"],\"hYgDIe\":[\"创建\"],\"hcNa1G\":[\"代币数量\"],\"hdIg7i\":[\"选择模式\"],\"hom7qf\":[\"领取\"],\"i3Z+/Z\":[\"区间外\"],\"iDGO1l\":[\"免责声明\"],\"iH8pgl\":[\"返回\"],\"iLj1a9\":[\"动态滑点为 \",[\"recommendSlippage\"],\"%,当前的滑点设置高于动态滑点,这意味着你该交易的最终成交价格会比较差。\"],\"iPMIoT\":[\"输入代币数量\"],\"iaocTt\":[\"比例\"],\"j2Uisd\":[\"授权中\"],\"jMam5g\":[[\"0\"],\" 余额\"],\"jaH6JH\":[\"比默认滑点高\"],\"jjuKOj\":[\"最低价\"],\"juypHV\":[\"做市用户\"],\"kAC8rT\":[\"最高价\"],\"kNeEXg\":[\"当前价格\"],\"kdzjmC\":[\"中间价必须大于 \",[\"min\"],\",小于 100,000,000\"],\"kf83Ld\":[\"发生异常错误.\"],\"kj3p6e\":[\"每日奖励\"],\"ku//5b\":[\"秒\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"累计交易量\"],\"lDgVWA\":[\"接收\"],\"lJvbHq\":[\"选择网络\"],\"lLbR0m\":[\"简单的全价格区间作市资金池\"],\"lNYomJ\":[\"AMM V2 仓位\"],\"lQ6r7x\":[\"确认交易\"],\"lTmG/H\":[\"最低收到\"],\"lgE483\":[\"创建完成后,该价格不可更改,适用于ETH-WETH等刚兑资产\"],\"lqTDfd\":[\"滑点\"],\"lsg9Mi\":[\"设置参数\"],\"lt8yMa\":[\"发送至:\"],\"luOvdJ\":[\"已质押\"],\"m16xKo\":[\"添加\"],\"m6RmA/\":[[\"0\"],\" 余额不足\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"动态滑点是由 DODO 团队通过分析历史交易计算得出。\"],\"mObS+5\":[\"无法获取该币种价格\"],\"mYGY3B\":[\"日期\"],\"mZ4SrP\":[\"流动性资金池\"],\"me2dmq\":[\"价值(美元)\"],\"n25Lml\":[\"深度\"],\"nIrcQi\":[\"没有找到结果\"],\"nTWWCZ\":[\"低\"],\"nxRg31\":[\"选择币对\"],\"o/5/4c\":[\"挖矿一旦开始,无法终止。\"],\"o8aMNm\":[\"查找资金池\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"请勿选择非标准ERC20代币,可能导致未知错误!\"],\"p2jbcE\":[\"创建资金池\"],\"p3607o\":[\"操作中\"],\"p7/w10\":[\"交易量(24小时)\"],\"pHQq+U\":[\"设置资金池\"],\"pKjCsP\":[\"全部使用你的资金,创建者享有最大程度的调整参数的权限\"],\"pQJBKk\":[\"提供的资产比例越接近推荐比例(\",[\"phumensratiotext\"],\"),燃烧的部分越小。\"],\"pSQ1lM\":[\"MT 手续费\"],\"pY/ok7\":[\"所有链\"],\"pdZiL7\":[\"市价:\"],\"peTryP\":[\"当前不支持 \",[\"0\"],\"-\",[\"1\"],\" 币对,请重新选择。\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"确认中\"],\"qDhDFK\":[\"交易用户\"],\"qK7wuW\":[\"在冷静期无法进行清算\"],\"qLkska\":[\"设置已切换到跨链桥交易模式\"],\"qiOIiY\":[\"购买\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"总奖励\"],\"r7ScnQ\":[\"连接钱包\"],\"rAx5u1\":[\"结束时间\"],\"rH6vg9\":[\"当前没有流动性数据\"],\"rQ9c+8\":[\"当前交易数量是预估的结果。如果价格变化超过 \",[\"0\"],\",你的交易将终止。\"],\"rRDi3Y\":[\"详情\"],\"rSayea\":[\"预估年化(APY)\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"预览\"],\"sCUx8G\":[\"选择平台\"],\"sIPJGT\":[\"选择代币\"],\"sNaLCG\":[\"添加代币\"],\"sTnImq\":[\"总资金\"],\"sVlqoo\":[\"AMM V3 仓位\"],\"sjn3tj\":[\"滑点系数\"],\"sxkWRg\":[\"高级\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" 资金池代币\"],\"t+LmjM\":[\"初始价格提示\"],\"t/YqKh\":[\"提取\"],\"t3d3/V\":[\"比例是 0\"],\"tKE4Ak\":[\"跨链桥概览\"],\"tMMG40\":[[\"0\"],\"% 手续费费率\"],\"tMVAXL\":[\"SafeERC20:low-level call failed,请联系DODO团队解决。\"],\"tnRI9r\":[\"确认创建资金池\"],\"tu/fxg\":[\"领取手续费\"],\"tyGEMJ\":[\"数量\"],\"u1tnst\":[\"创建一个\"],\"uAQUqI\":[\"状态\"],\"uEoBVI\":[\"最低价\"],\"uaKP0s\":[\"与 DODO \",[\"lqanddodocomparetext\"],\" 的报价不同。\"],\"ubzjDN\":[\"实时数据\"],\"udsWDJ\":[\"未支持网络 - 请切换后进行交易\"],\"uiuMDr\":[\"输入参数查看做市模拟图\"],\"v4nCHK\":[\"支付\"],\"v4wgrk\":[\"添加失败\"],\"vH2C/2\":[\"交易\"],\"vLyv1R\":[\"隐藏\"],\"vOyUlD\":[\"在区间内\"],\"vXvgFK\":[\"添加资金有可能会被套利,请谨慎操作。\"],\"vxHMzr\":[\"合约地址\"],\"wSpNR+\":[\"该交易对没有足够的历史交易数据,已使用默认滑点值\"],\"wckWOP\":[\"管理\"],\"wdxz7K\":[\"源\"],\"wmCrk7\":[\"摸可以修改交易的截止日期,也就是链上处理交易的最长时间。请注意,在链上处理期间市场价格可能会发生变化,这可能会导致你的交易会以较低的价格被执行。\"],\"wtjDAR\":[[\"0\"],\" 授权中\"],\"x3muNy\":[\"流动性燃烧比例\"],\"x4QVeW\":[\"按照比例\"],\"x6GJ4a\":[\"最大滑点\"],\"xEbi+8\":[\"用户拒绝交易签名.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"复制链接\"],\"y4kfSV\":[\"警告\"],\"y5rS9U\":[\"迁移\"],\"yM82Jw\":[\"ForceStop 异常\"],\"yQ2kGp\":[\"更多\"],\"yQE2r9\":[\"等待中\"],\"yXm1vH\":[\"初始价格与当前市场价之间存在价差,有可能被搬砖套利,造成资产损失。\"],\"yY8wAv\":[\"小时\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"动态滑点是 \",[\"recommendSlippage\"],\"%, 当前的滑点设置可能会增加交易失败率。\"],\"yx/fMc\":[\"高\"],\"yz7wBu\":[\"关闭\"],\"yzjPpo\":[\"适用于稳定币\"],\"z9t6jM\":[\"挖矿合约地址\"],\"zA6/Yq\":[\"为避免奖励代币的损失,请确保至少存在 1 名用户参与挖矿。\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"交易截止时间\"],\"zXCpR0\":[\"领取奖励\"],\"zcVtwU\":[\"我的资金池 (PMM)\"],\"zeSosD\":[\"初始价格\"],\"zga9sT\":[\"好的\"],\"zkFuIm\":[\"总奖励 = 每日奖励数量 * 时长\"],\"znqB4T\":[\"余额不足\"],\"zwBp5t\":[\"私有池\"],\"zwWKhA\":[\"了解更多\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"滑点系数越小,交易时候的滑点越低,深度越好。\"],\"+Jkdiu\":[\"交易时长:\"],\"+uZnU3\":[\"跨链桥\"],\"/+c6tU\":[\"99% 选择此参数\"],\"/6L4mj\":[\"您的仓位为空\"],\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":[\"累计交易用户\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"交易量\"],\"/jQctM\":[\"至\"],\"/k7Ttv\":[\"获得 \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":[\"提取\"],\"0O1wzf\":[\"卖出\",[\"0\"],\" \",[\"1\"],\",资金池盘口价格涨到 \",[\"2\"]],\"0QDjxt\":[\"余额:\"],\"0RrIzN\":[\"代币选择\"],\"0S8v3W\":[\"开始时间必须晚于当前时间\"],\"0Sw1gZ\":[\"挖矿规则\"],\"0YxDPW\":[\"状态加载中...\"],\"0b0AkA\":[\"* 请注意,资金池创建完成后,费率无法修改\"],\"1+P9RR\":[\"切换至 \",[\"0\"],\" 网络\"],\"1/LP4K\":[[\"tokenB\"],\" 每个 \",[\"tokenA\"]],\"14s9LL\":[\"创建挖矿\"],\"1ABiXc\":[\"添加流动性后,你可以按照 <0>\",[\"0\"],\" 的比例从资金池中获得交易手续费分润。撤出流动性时,可以将手续费一起取出。\"],\"1PQRWr\":[\"开始时间\"],\"1QfxQT\":[\"忽略\"],\"1Qz63U\":[\"类型\"],\"1gWStS\":[\"赎回中\"],\"1yHVE+\":[\"添加\"],\"22Xs8M\":[\"充值比例\"],\"237hSL\":[\"已结束\"],\"2IZBPB\":[\"结束时间必须晚于开始时间\"],\"2vjOqX\":[\"更低的手续费率,可以吸引更多的交易者。\"],\"34w3mT\":[\"单边\"],\"3CsYwD\":[\"选择做市池\"],\"3VUfrF\":[\"选定区间\"],\"3WdxUv\":[\"不再提醒\"],\"3XBvkd\":[\"移除流动性\"],\"3dP8Wx\":[\"输入地址\"],\"3ggd2j\":[\"资金池中资产比例\"],\"4cJ0hF\":[\"奖励代币\"],\"4fL/V7\":[\"支付\"],\"4kY4C4\":[\"由于市场情况不同,市场价格与估算价格可能略有差异。\"],\"4m3nxQ\":[\"查看更多\"],\"4nzwq3\":[\"通过代币或者资金池地址查找\"],\"4ogEAw\":[\"锚定价格\"],\"4vKwIV\":[\"私有池\"],\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":[\"创建时间\"],\"54ffaC\":[\"当前网络与钱包不一致,请在钱包中切换\"],\"5CZbyC\":[\"设置价格区间\"],\"5IHTSS\":[\"全区间\"],\"5Nb8LL\":[\"*每天出块的时间并不是固定的,实际每日奖励数量可能会略有偏差\"],\"5OKrbq\":[\"由于该池使用了PMM算法,与通常的AMM池机制不同,因此初始价格的计算也与AMM不同。\"],\"5Pxzb6\":[\"预计开始区块高度{\",[\"start\"],\"},结束区块高度{\",[\"end\"],\"}。出块时间会上下波动,预计的活动时间和实际会有一定误差。\"],\"5QDjef\":[\"代币数量由初始价格计算。\"],\"5etEUX\":[\"最高价格\"],\"5nL2hY\":[\"质押代币\"],\"6+mYrD\":[\"当前价格冲击\"],\"6UYTy8\":[\"分钟\"],\"6V3Ea3\":[\"已复制\"],\"6XYkjc\":[\"修改参数\"],\"6XgEPi\":[\"小时\"],\"6lss/t\":[\"定价模式\"],\"6y2TB3\":[\"流动性\"],\"70wH1Q\":[\"APR\"],\"71gS06\":[\"我的奖励\"],\"72/M0o\":[\"输入代币符号或地址\"],\"79D0qY\":[\"当前无流动性数据\"],\"7Bj3x9\":[\"失败\"],\"7C/BwI\":[\"社区金库\"],\"7IKPTP\":[\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\"],\"7VpPHA\":[\"确认\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"手续费(24小时)\"],\"7Z4WfS\":[\"每 \",[\"1\"],\" 计 \",[\"0\"],\" \"],\"7m5+6j\":[\"初始代币\"],\"7rpoXw\":[\"该代币在\"],\"7y/8M6\":[\"请在钱包确认\"],\"88dol0\":[\"交易成功率\"],\"8OiU8L\":[\"创建资金池\"],\"8Tg/JR\":[\"自定义\"],\"8XNsbx\":[\"比动态滑点高\"],\"8Z29ZO\":[\"预计服务供应商费用\"],\"93m8jT\":[\"基础手续费\"],\"97jlEV\":[\"LP 资金\"],\"9D2g7k\":[\"DODO 的流动性是连续的,这与UniV3的离散流动性不同。以柱状图展示用来说明不同做市模式下流动性分布的区别。\"],\"9yc9F+\":[\"默认滑点是 \",[\"warnValue\"],\"%,当前滑点设置比默认滑点高,可能会导致最终成交价格较差。\"],\"A1taO8\":[\"搜索\"],\"A23gVF\":[\"参与挖矿获得积分\"],\"AOhRo6\":[\"DODO 提供多种的做市模式以满足不同资产的流动性需要\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR 计算公式:以当前奖励代币价格估算每年奖励价值 / 总挖矿资金\"],\"Active\":[\"进行中\"],\"AeZIvT\":[\"您将会收到\"],\"AghcDJ\":[\"价格冲击超过了你设置的滑点, 请提高滑点后重试\"],\"All Mining\":[\"全部挖矿\"],\"Amount of token rewards\":[\"当前挖矿获得的代币奖励\"],\"AxPAXW\":[\"未找到匹配结果\"],\"AxdOHo\":[\"交易对\"],\"B0/2ea\":[\"秒\"],\"B0YDoE\":[\"是的,我确定\"],\"B3mhDR\":[\"添加流动性后,可以获取 LP 代币。质押 LP 代币,开启挖矿。\"],\"BRi+RY\":[\"添加更多流动性\"],\"C1mcuF\":[\"此众筹池已被其他地址结算\"],\"C1qIFl\":[\"做市资金\"],\"CK1KXz\":[\"全部\"],\"CKyk7Q\":[\"返回\"],\"CMHmbm\":[\"滑点\"],\"CP1UAq\":[\"滑点系数需要大于等于 0 且小于等于 0.1\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"计算方式=当前单个区块奖励×24h出块数\"],\"CeLrge\":[\"盘口中间价\"],\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":[\"设置挖矿资金池\"],\"Copied\":[\"已复制\"],\"D1bhHv\":[\"资金池价格固定\"],\"D87pha\":[\"已关闭\"],\"DPfwMq\":[\"完成\"],\"DPi/hO\":[\"适用于价格相对稳定的交易对\"],\"DTFrUE\":[\"授权 \",[\"0\"],\" 中\"],\"DWd30U\":[\"当前价格\"],\"DZULmp\":[\"价格\"],\"Da1+Da\":[\"没有查到资金池,建议您切换网络后重试\"],\"Daily Rewards\":[\"每日奖励\"],\"Dt4Hc3\":[\"双币做市挖矿\"],\"Du6bPw\":[\"合约地址\"],\"DupCvC\":[\"添加成功\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"添加初始流动性\"],\"E6MqGy\":[\"添加做市资金\"],\"EQs1sJ\":[\"最低价格\"],\"ESQO1L\":[\"资金池地址\"],\"EU3wU4\":[\"手续费费率\"],\"EUBGvH\":[\"是否确认切换到另一个链?\"],\"EatqP4\":[\"交易记录\"],\"EcVqOR\":[[\"0\"],\" 已提交\"],\"Edit\":[\"编辑\"],\"Eif7f6\":[\"PMM 资金池\"],\"EkAv3P\":[\"集中流动性,更高的资金利用率\"],\"End Time\":[\"结束时间\"],\"Ended\":[\"已结束\"],\"Enslfm\":[\"目标\"],\"EpjpP9\":[\"已释放奖励\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"新上线的挖矿池,存入任意流动性后即可开始统计APR\"],\"F+sxb9\":[\"未授权\"],\"F18WP3\":[\"参数\"],\"F8yRdq\":[\"更多设置\"],\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"加仓\"],\"FQfStS\":[\"模拟器\"],\"FRBvjQ\":[\"交易进行中\"],\"Fdp03t\":[\"在\"],\"FrP5tr\":[\"适用于价格波动在2%以内的稳定币\"],\"GAypnX\":[\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"GGPOuT\":[\"设置当前中间价\"],\"GGWsTU\":[\"已撤单\"],\"GSt7YT\":[\"费率必须在 0.01% 到 10% 之间\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"返回\"],\"Gr2anW\":[\"交易用户 (24小时)\"],\"Gs02OK\":[\"我的仓位\"],\"H7OUPr\":[\"天\"],\"H9HlDe\":[\"分\"],\"HGf8fG\":[\"你可以设置单边池的最小卖出价格。\"],\"HTX2HV\":[\"最低收到\"],\"HXBqgG\":[\"价格输入无效\"],\"HkWY45\":[\"当前网络不支持此池类型,您可以在钱包中切换网络来创建它\"],\"HuVZMK\":[\"天\"],\"I0LXan\":[\"价格滑点:\",[\"0\"]],\"I0yi1d\":[\"充值比例由池内流动资产的比例决定,该比例不代表资产之间的兑换价格\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"市场深度不足,无法统计【{\",[\"symbols\"],\"}代币】的美元价值\"],\"Invite\":[\"邀请\"],\"IwiTcw\":[\"该池的价格不在你选定的区间内。你的仓位目前不能赚取交易手续费。\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"连接中...\"],\"J39pAJ\":[\"额外手续费\"],\"J7M/DA\":[\"锚定池\"],\"JR7wWw\":[\"回归目标\"],\"JRgkmT\":[\"调整前结束释放时间\"],\"JYKRJS\":[\"质押\"],\"JaeUyE\":[\"资金池报价与 DODO 智能路由价格相差 \",[\"lqAndDodoCompareText\"]],\"JdNn1Y\":[\"获取最优价格中...\"],\"Jh223O\":[\"选定区间无效,最低价格必须低于最高价格。\"],\"JlIjZf\":[\"做市用户\"],\"Joa5Dk\":[\"*收取费用将领取当前已分配手续费。\"],\"JuzN3b\":[\"关联众筹建池\"],\"K/Ay/d\":[\"预览交易\"],\"K/PgcA\":[\"选择跨链桥\"],\"K8rjE/\":[\"调整前每日释放奖励\"],\"KAbREa\":[\"· 不支持通缩代币\"],\"KAbcm2\":[\"成功\"],\"KAmxpM\":[\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"KRnA5J\":[\"修改资金池参数\"],\"Kb3KaW\":[\"任意比例\"],\"KkjUUb\":[\"创建完成后,您可以随时修改做市价格,适用于资产锚定价可能出现变化的情况\"],\"KlvBGJ\":[\"选择代币\"],\"KsqhWn\":[\"质押中\"],\"KvG1xW\":[\"领取中\"],\"L37FfW\":[\"创建 AMM V2 仓位\"],\"L4nQwl\":[\"适用于价格波动在0.5%以内的稳定币\"],\"LHxwaD\":[\"手续费必须大于 \",[\"0\"],\"%\"],\"LQ0J1B\":[\"灵活自定义,高度掌控流动性\"],\"LQU+Dm\":[\"风险警示\"],\"LVzIav\":[\"池子价格可调整\"],\"Lfkqg7\":[\"质押指定代币获得挖矿奖励\"],\"LhMjLm\":[\"时间\"],\"LtI9AS\":[\"所有者\"],\"M9dIDb\":[\"锚定价格是指两个代币资产之间的汇率,其中一个资产的价值由另一个锚定。例如,美元和 USDT 之间的汇率是 1。\"],\"MU9s7M\":[\"充值数额\"],\"MXQodB\":[\"禁止多跳\"],\"MZPP7t\":[\"当前仓位流动性为 0 ,没有手续费收入。\"],\"Mining Pool\":[\"挖矿合约地址\"],\"MvFS/h\":[\"还没流动性池?来创建一个!\"],\"My Mining\":[\"我的挖矿\"],\"My Pools\":[\"我的资金池\"],\"NEQTCn\":[\"资金池份额\"],\"NSCBTb\":[\"设置已切换至闪兑模式\"],\"NVAuTg\":[\"没有报价\"],\"NXZdrO\":[\"我的资金池份额\"],\"NgeSlx\":[\"查看详情\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"使用推荐的比例\"],\"Nk6ddN\":[\"质押 做市 LP 代币,获得挖矿奖励\"],\"No LP pools match your criteria\":[\"没有找到符合条件的挖矿项目\"],\"O6RUgz\":[\"手续费费率\"],\"OBdohg\":[\"添加流动性\"],\"OFjZGo\":[\"撤出\"],\"OJOe+K\":[\"适用于大部分主流币\"],\"OKZP2O\":[\"若截止前无任何参与者,则挖矿奖励任何人无法提取。\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"你的仓位将会显示在这里\"],\"OauUE6\":[\"获取价格中...\"],\"OfhWJH\":[\"重置\"],\"OgKD6h\":[\"最优价格\"],\"OjaWXx\":[\"新上线\"],\"OnDEky\":[\"LP 手续费\"],\"OuSseo\":[\"比例设定\"],\"P+K/3O\":[\"确认中\"],\"P4iKEj\":[\"初始价格需要大于 \",[\"min\"],\",小于 100,000,000\"],\"PIYEqF\":[\"按照数量\"],\"PLUB/s\":[\"手续费\"],\"PPqGw9\":[\"适用于锚定资产,没有波动\"],\"PVa3KL\":[\"仓位在\"],\"PZqJog\":[\"确认跨链交易\"],\"Q8W3SC\":[\"交易量(1天)\"],\"QNWt8A\":[\"预计时间\"],\"QNrpkx\":[\"类似 AMM 做市策略,适用于大多数币种\"],\"QR4/RH\":[\"交易预览\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"你也将从这个池子里领取所有奖励。\"],\"QtgfjM\":[\"资金池创建者可以通过修改作市价格参数来调整流动性分布。 <0>了解更多\"],\"R7D79P\":[\"币对无效\"],\"R9Khdg\":[\"自动\"],\"Remaining rewards/Total\":[\"剩余奖励/总奖励\"],\"Rewards\":[\"奖励代币\"],\"RtKKbA\":[\"上一步\"],\"RvYEUJ\":[\"类似于 Curve 的做市策略,适用于合成资产、按照稳定比例兑换的资产\"],\"RxHSET\":[\"LP 余额:\"],\"S3piC2\":[\"交易哈希:\"],\"S8G1qk\":[\"单边\"],\"SXnevP\":[\"预览跨链交易\"],\"SbBMxj\":[\"资金池份额\"],\"Search by address\":[\"输入地址\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"输入百分比\"],\"Staked\":[\"已质押\"],\"Start Time\":[\"开始时间\"],\"Sti4vy\":[\"挖矿\"],\"T+qgFw\":[\"价格冲击\"],\"T0Y2+3\":[\"选择代币\"],\"T5ExxV\":[\"添加流动性获得积分\"],\"TFOxRM\":[\"分钟\"],\"TGi+jm\":[\"文档\"],\"TJBHlP\":[\"标准\"],\"TP9/K5\":[\"代币\"],\"TTlkRL\":[\"比动态滑点低\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP 代币\"],\"TizaRy\":[\"钱包不兼容\"],\"TvH4Ym\":[\"买入 \",[\"0\"],\" \",[\"1\"],\", 资金池价格下降到 \",[\"2\"]],\"Tz0i8g\":[\"设置\"],\"UE2beD\":[\"创建者\"],\"UN0Nip\":[\"奖励规则\"],\"UPXmW+\":[\"交易者\"],\"URmyfc\":[\"详情\"],\"UbRKMZ\":[\"执行中\"],\"Upcoming\":[\"待开始\"],\"Users\":[\"用户\"],\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":[\"秒\"],\"V38hNQ\":[\"单币质押挖矿\"],\"VXTSOE\":[\"适用于大部分交易对\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"服务遇到了一些问题...<0>尝试刷新\"],\"WI3lQ1\":[\"点击选择\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"选择代币\"],\"WYqq5A\":[\"已结束挖矿\"],\"WgTuci\":[\"你的仓位将在该价格全部由 \",[\"0\"],\" 组成\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"补充奖励时,单个区块奖励数量可能会有所调整\"],\"X6T02b\":[\"必须先初始化该资金池,才能添加流动性。要初始化,请选择池的起价。然后,输入流动性价格范围和充值金额。由于初始化交易,Gas 费将比通常高。\"],\"XPiFIY\":[\"是否可以更改资金池报价\"],\"XeovX3\":[\"交易详情\"],\"Xpkm7d\":[\"无 ForceStop 访问权限\"],\"Y0Knz4\":[\"只使用该交易对下的资金池,不会使用第三个币种跳转。\"],\"Y7rVy0\":[\"手续费率\"],\"Y9QDtD\":[\"您正在修改私有池的流动性。这是一项自由度极高的操作,有可能造成资金流入/流出,也有可能造成市场价格变化。请确保您清楚每一项修改的含义。\"],\"YA4hwj\":[\"价格区间\"],\"YG004A\":[[\"0\"],\" 已充值\"],\"YHc3B+\":[\"我的流动性\"],\"YHpbe1\":[\"对于\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" 价格差\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"您没有参与任何挖矿项目\"],\"You have not create any mining\":[\"暂未创建任何挖矿\"],\"Z033WN\":[\"累计手续费\"],\"Z5HWHd\":[\"在\"],\"Z7ZXbT\":[\"代币授权\"],\"Z8lGw6\":[\"份额\"],\"ZXvy7b\":[\"由 Widget 设置的额外路由费用\"],\"ZgtZpB\":[\"请重新设置开始时间,当前的设置时间太往前。\"],\"ZhEBp4\":[\"当前资金池价格\"],\"ZlKTEh\":[\"奖励 \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" 你提供的初始流动性会被燃烧。<1/>提供的资产比例越接近推荐比例 (\",[\"recommendRatioText\"],\"),燃烧比例越少。\"],\"Zm56FI\":[\"最大滑点不能超过50%\"],\"a1AzKr\":[\"适用于新资产发行,为其提供卖盘流动性\"],\"a7u1N9\":[\"价格\"],\"aGKLPO\":[\"当前公链网络支持新资金池模型\"],\"aIvv/z\":[\"该资金池的价格在你选定的区间内。你的仓位目前正在赚取手续费。\"],\"aM1tos\":[\"正在创建资金池\"],\"ab98Hp\":[\"创建者 \",[\"0\"],\" \"],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"分钟\"],\"az8lvo\":[\"关\"],\"b+KjnH\":[\"在市场价格进入到你的价格区间之前,您的仓位不能赚取交易手续费。\"],\"b2jAb+\":[\"每\"],\"bC0iyq\":[\"适用于价格波动在10%以内的稳定币\"],\"bEsfUQ\":[\"确认提交\"],\"bQ3cKo\":[\"通过代币筛选,然后选择做市池\"],\"bUUVED\":[\"资产\"],\"bXp9u3\":[\"手续费\"],\"bwSQI0\":[\"供应\"],\"c4miqE\":[\"资金池份额\"],\"c6TMm0\":[\"挖矿类型\"],\"cDWXuq\":[\"结算者\"],\"cJtosk\":[\"移除流动性\"],\"cOvZFM\":[\"动态\"],\"cmUrtC\":[\"查看教程\"],\"cnGeoo\":[\"删除\"],\"cnbRVW\":[\"初始价格 \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"初始价格\"],\"d8YnVj\":[\"指导价\"],\"dAXusZ\":[\"仅挖矿\"],\"dEgA5A\":[\"取消\"],\"dI46oG\":[\"自动切换网络\"],\"dJqd5x\":[\"获取 \",[\"tokenSymbol\"]],\"dUdltF\":[\"领取\"],\"dmiCGN\":[\"选择币对\"],\"dqWPbT\":[\"我已经阅读、理解并同意 <0>服务条款\"],\"dzV+zO\":[\"修改信息确认\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"小贴士:\"],\"eE0JZ4\":[\"类型\"],\"eK0eiF\":[\"初始资产比例\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"编辑\"],\"eTUF28\":[\"分钟\"],\"eVZ7bY\":[\"隐藏 TVL=0 的池子\"],\"em6LzM\":[\"交易被拒绝.\"],\"evmVGu\":[\"创建者 \",[\"0\"]],\"fKYdE9\":[\"适用于价格波动较大的交易对\"],\"fSFt4a\":[\"币对\"],\"fZ5Vnu\":[\"获得\"],\"fZFkP1\":[\"我的资金池\"],\"fgGids\":[\"授权 \",[\"0\"]],\"fqDzSu\":[\"价格\"],\"fsBGk0\":[\"余额\"],\"fxRyGG\":[\"手续费费率\"],\"g3x+cF\":[\"服务升级中, 请等待或重试\"],\"gz+9Rb\":[\"Gas 价格过低, 请调整后重试\"],\"h3PbRN\":[\"我的资金池份额\"],\"h4RLFN\":[\"RPC节点异常\"],\"h5FVz1\":[\"预计交易时长\"],\"h5pjuM\":[\"收取手续费\"],\"h7LgzN\":[\"连接钱包\"],\"hCBYHP\":[\"总手续费收入\"],\"hXzOVo\":[\"下一步\"],\"hYgDIe\":[\"创建\"],\"hcNa1G\":[\"代币数量\"],\"hdIg7i\":[\"选择模式\"],\"hom7qf\":[\"领取\"],\"i3Z+/Z\":[\"区间外\"],\"iDGO1l\":[\"免责声明\"],\"iH8pgl\":[\"返回\"],\"iLj1a9\":[\"动态滑点为 \",[\"recommendSlippage\"],\"%,当前的滑点设置高于动态滑点,这意味着你该交易的最终成交价格会比较差。\"],\"iPMIoT\":[\"输入代币数量\"],\"iaocTt\":[\"比例\"],\"j2Uisd\":[\"授权中\"],\"jMam5g\":[[\"0\"],\" 余额\"],\"jaH6JH\":[\"比默认滑点高\"],\"jjuKOj\":[\"最低价\"],\"juypHV\":[\"做市用户\"],\"kAC8rT\":[\"最高价\"],\"kNeEXg\":[\"当前价格\"],\"kdzjmC\":[\"中间价必须大于 \",[\"min\"],\",小于 100,000,000\"],\"kf83Ld\":[\"发生异常错误.\"],\"kj3p6e\":[\"每日奖励\"],\"ku//5b\":[\"秒\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"累计交易量\"],\"lDgVWA\":[\"接收\"],\"lJvbHq\":[\"选择网络\"],\"lLbR0m\":[\"简单的全价格区间作市资金池\"],\"lNYomJ\":[\"AMM V2 仓位\"],\"lQ6r7x\":[\"确认交易\"],\"lTmG/H\":[\"最低收到\"],\"lgE483\":[\"创建完成后,该价格不可更改,适用于ETH-WETH等刚兑资产\"],\"lqTDfd\":[\"滑点\"],\"lsg9Mi\":[\"设置参数\"],\"lt8yMa\":[\"发送至:\"],\"luOvdJ\":[\"已质押\"],\"m16xKo\":[\"添加\"],\"m6RmA/\":[[\"0\"],\" 余额不足\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"动态滑点是由 DODO 团队通过分析历史交易计算得出。\"],\"mObS+5\":[\"无法获取该币种价格\"],\"mYGY3B\":[\"日期\"],\"mZ4SrP\":[\"流动性资金池\"],\"me2dmq\":[\"价值(美元)\"],\"n25Lml\":[\"深度\"],\"nIrcQi\":[\"没有找到结果\"],\"nTWWCZ\":[\"低\"],\"nxRg31\":[\"选择币对\"],\"o/5/4c\":[\"挖矿一旦开始,无法终止。\"],\"o8aMNm\":[\"查找资金池\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"请勿选择非标准ERC20代币,可能导致未知错误!\"],\"p2jbcE\":[\"创建资金池\"],\"p3607o\":[\"操作中\"],\"p7/w10\":[\"交易量(24小时)\"],\"pHQq+U\":[\"设置资金池\"],\"pKjCsP\":[\"全部使用你的资金,创建者享有最大程度的调整参数的权限\"],\"pQJBKk\":[\"提供的资产比例越接近推荐比例(\",[\"phumensratiotext\"],\"),燃烧的部分越小。\"],\"pSQ1lM\":[\"MT 手续费\"],\"pY/ok7\":[\"所有链\"],\"pdZiL7\":[\"市价:\"],\"peTryP\":[\"当前不支持 \",[\"0\"],\"-\",[\"1\"],\" 币对,请重新选择。\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"确认中\"],\"qDhDFK\":[\"交易用户\"],\"qK7wuW\":[\"在冷静期无法进行清算\"],\"qLkska\":[\"设置已切换到跨链桥交易模式\"],\"qiOIiY\":[\"购买\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"总奖励\"],\"r7ScnQ\":[\"连接钱包\"],\"rAx5u1\":[\"结束时间\"],\"rH6vg9\":[\"当前没有流动性数据\"],\"rQ9c+8\":[\"当前交易数量是预估的结果。如果价格变化超过 \",[\"0\"],\",你的交易将终止。\"],\"rRDi3Y\":[\"详情\"],\"rSayea\":[\"预估年化(APY)\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"预览\"],\"sCUx8G\":[\"选择平台\"],\"sIPJGT\":[\"选择代币\"],\"sNaLCG\":[\"添加代币\"],\"sTnImq\":[\"总资金\"],\"sVlqoo\":[\"AMM V3 仓位\"],\"sjn3tj\":[\"滑点系数\"],\"sleulC\":[\"流动性挖矿\"],\"sxkWRg\":[\"高级\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" 资金池代币\"],\"t+LmjM\":[\"初始价格提示\"],\"t/YqKh\":[\"提取\"],\"t3d3/V\":[\"比例是 0\"],\"tKE4Ak\":[\"跨链桥概览\"],\"tMMG40\":[[\"0\"],\"% 手续费费率\"],\"tMVAXL\":[\"SafeERC20:low-level call failed,请联系DODO团队解决。\"],\"tnRI9r\":[\"确认创建资金池\"],\"tu/fxg\":[\"领取手续费\"],\"tyGEMJ\":[\"数量\"],\"u1tnst\":[\"创建一个\"],\"uAQUqI\":[\"状态\"],\"uEoBVI\":[\"最低价\"],\"uaKP0s\":[\"与 DODO \",[\"lqanddodocomparetext\"],\" 的报价不同。\"],\"ubzjDN\":[\"实时数据\"],\"udsWDJ\":[\"未支持网络 - 请切换后进行交易\"],\"uiuMDr\":[\"输入参数查看做市模拟图\"],\"v4nCHK\":[\"支付\"],\"v4wgrk\":[\"添加失败\"],\"vH2C/2\":[\"交易\"],\"vLyv1R\":[\"隐藏\"],\"vOyUlD\":[\"在区间内\"],\"vXvgFK\":[\"添加资金有可能会被套利,请谨慎操作。\"],\"vxHMzr\":[\"合约地址\"],\"wSpNR+\":[\"该交易对没有足够的历史交易数据,已使用默认滑点值\"],\"wckWOP\":[\"管理\"],\"wdxz7K\":[\"源\"],\"wmCrk7\":[\"摸可以修改交易的截止日期,也就是链上处理交易的最长时间。请注意,在链上处理期间市场价格可能会发生变化,这可能会导致你的交易会以较低的价格被执行。\"],\"wtjDAR\":[[\"0\"],\" 授权中\"],\"x3muNy\":[\"流动性燃烧比例\"],\"x4QVeW\":[\"按照比例\"],\"x6GJ4a\":[\"最大滑点\"],\"xEbi+8\":[\"用户拒绝交易签名.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"复制链接\"],\"y4kfSV\":[\"警告\"],\"y5rS9U\":[\"迁移\"],\"yM82Jw\":[\"ForceStop 异常\"],\"yQ2kGp\":[\"更多\"],\"yQE2r9\":[\"等待中\"],\"yXm1vH\":[\"初始价格与当前市场价之间存在价差,有可能被搬砖套利,造成资产损失。\"],\"yY8wAv\":[\"小时\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"动态滑点是 \",[\"recommendSlippage\"],\"%, 当前的滑点设置可能会增加交易失败率。\"],\"yx/fMc\":[\"高\"],\"yz7wBu\":[\"关闭\"],\"yzjPpo\":[\"适用于稳定币\"],\"z9t6jM\":[\"挖矿合约地址\"],\"zA6/Yq\":[\"为避免奖励代币的损失,请确保至少存在 1 名用户参与挖矿。\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"交易截止时间\"],\"zXCpR0\":[\"领取奖励\"],\"zcVtwU\":[\"我的资金池 (PMM)\"],\"zeSosD\":[\"初始价格\"],\"zga9sT\":[\"好的\"],\"zkFuIm\":[\"总奖励 = 每日奖励数量 * 时长\"],\"znqB4T\":[\"余额不足\"],\"zwBp5t\":[\"私有池\"],\"zwWKhA\":[\"了解更多\"]}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index f340285a..9f721a2a 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -63,7 +63,7 @@ msgstr "获得 {0}" msgid "{0} pending" msgstr "{0} 等待中" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:493 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:524 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:362 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:786 msgid "Removing" @@ -134,8 +134,8 @@ msgstr "开始时间" msgid "Dismiss" msgstr "忽略" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:287 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:436 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:309 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:467 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:85 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:323 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:659 @@ -147,7 +147,7 @@ msgstr "类型" msgid "Unstaking" msgstr "赎回中" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:496 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:527 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:365 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:789 msgid "Adding" @@ -221,6 +221,10 @@ msgstr "支付" msgid "Due to the market condition, market price and estimated price may have a slight difference" msgstr "由于市场情况不同,市场价格与估算价格可能略有差异。" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:206 +msgid "View more" +msgstr "查看更多" + #: src/widgets/PoolWidget/PoolList/components/TokenAndPoolFilter.tsx:66 msgid "Search by token or pool address" msgstr "通过代币或者资金池地址查找" @@ -309,7 +313,7 @@ msgid "Pricing Model" msgstr "定价模式" #: src/widgets/PoolWidget/PoolCreate/components/DepthAndLiquidityChart.tsx:74 -#: src/widgets/PoolWidget/PoolList/index.tsx:228 +#: src/widgets/PoolWidget/PoolList/index.tsx:241 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOrMiningTabs.ts:17 msgid "Liquidity" msgstr "流动性" @@ -319,6 +323,10 @@ msgstr "流动性" msgid "APR" msgstr "APR" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:240 +msgid "My rewards" +msgstr "我的奖励" + #: src/components/TokenPicker/index.tsx:213 msgid "Enter the token symbol or address" msgstr "输入代币符号或地址" @@ -474,7 +482,7 @@ msgstr "当前挖矿获得的代币奖励" msgid "No results found" msgstr "未找到匹配结果" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:432 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:463 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:316 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:655 msgid "Pair" @@ -719,8 +727,8 @@ msgstr "更多设置" msgid "Insufficient cross-chain fees, need at least {0} {1}" msgstr "跨链费用不足,至少需要 {0} {1} " -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:340 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:440 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:371 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:471 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:112 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:214 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:319 @@ -1068,8 +1076,8 @@ msgstr "质押 做市 LP 代币,获得挖矿奖励" msgid "No LP pools match your criteria" msgstr "没有找到符合条件的挖矿项目" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:255 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:625 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:277 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:660 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:291 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:898 msgid "Fee rate" @@ -1077,7 +1085,7 @@ msgstr "手续费费率" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 -#: src/widgets/PoolWidget/PoolList/index.tsx:164 +#: src/widgets/PoolWidget/PoolList/index.tsx:176 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:165 msgid "Add Liquidity" msgstr "添加流动性" @@ -1166,8 +1174,8 @@ msgstr "仓位在" msgid "Confirm Cross Chain" msgstr "确认跨链交易" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:361 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:447 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:392 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:478 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:125 msgid "Volume (1D)" msgstr "交易量(1天)" @@ -1177,7 +1185,7 @@ msgid "Estimated Time" msgstr "预计时间" #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:20 -#: src/widgets/PoolWidget/PoolList/index.tsx:229 +#: src/widgets/PoolWidget/PoolList/index.tsx:242 msgid "Classical AMM-like pool. Suitable for most assets." msgstr "类似 AMM 做市策略,适用于大多数币种" @@ -1274,8 +1282,8 @@ msgstr "已质押" msgid "Start Time" msgstr "开始时间" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:211 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:677 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:231 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:713 #: src/widgets/PoolWidget/PoolList/components/PoolApyTooltip.tsx:190 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:247 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:954 @@ -1379,7 +1387,7 @@ msgid "Users" msgstr "用户" #. placeholder {0}: wallet.name -#: src/components/ConnectWallet/ConnectWalletDialog.tsx:154 +#: src/components/ConnectWallet/ConnectWalletDialog.tsx:155 msgid "Connect to your {0} Wallet" msgstr "连接你的{0}钱包" @@ -1681,6 +1689,10 @@ msgstr "初始价格" msgid "Guide Price" msgstr "指导价" +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1046 +msgid "Mining Only" +msgstr "仅挖矿" + #: src/components/Confirm.tsx:108 #: src/components/DateTimePickerInput/components/MobileDateTimePicker.tsx:203 #: src/components/SwitchChainDialog/index.tsx:127 @@ -1871,6 +1883,7 @@ msgstr "选择模式" #: src/widgets/MiningWidget/MiningList/operate-area/index.tsx:204 #: src/widgets/MiningWidget/OperateArea/index.tsx:74 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:453 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:124 msgid "Claim" msgstr "领取" @@ -2018,8 +2031,8 @@ msgstr "已质押" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:451 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:79 #: src/widgets/PoolWidget/PoolDetail/index.tsx:219 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:385 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:749 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:416 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:786 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:284 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:591 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1212 @@ -2213,8 +2226,8 @@ msgid "Detail" msgstr "详情" #: src/widgets/PoolWidget/PoolDetail/components/TitleInfo.tsx:239 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:310 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:443 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:341 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:474 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:100 #: src/widgets/PoolWidget/PoolList/components/TokenListPoolItem.tsx:102 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:348 @@ -2264,6 +2277,11 @@ msgstr "AMM V3 仓位" msgid "Slippage Coefficient" msgstr "滑点系数" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx:21 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:181 +msgid "Liquidity Mining" +msgstr "流动性挖矿" + #: src/components/Swap/components/SwapSettingsDialog/SlippageSetting.tsx:157 msgid "Advanced" msgstr "高级" diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx index e88e81c4..df4da13a 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx @@ -1,4 +1,11 @@ -import { alpha, Box, Button, useTheme, Tooltip } from '@dodoex/components'; +import { + alpha, + Box, + Button, + Checkbox, + useTheme, + Tooltip, +} from '@dodoex/components'; import { PoolApi, PoolType } from '@dodoex/api'; import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query'; import InfiniteScroll from 'react-infinite-scroller'; @@ -52,6 +59,22 @@ import { Share } from '@dodoex/icons'; import { MigrationTag } from './components/migationWidget'; import TokenAndPoolFilter from './components/TokenAndPoolFilter'; import { GetMigrationPairAndMining } from '../PoolOperate/types'; +import LpFeeRewardBadge from './components/LpFeeRewardBadge'; + +/** + * Returns the pool's LP fee reward bonus APY (a fraction from + * `pair.apy.lpFeeRewardApy`) when the reward activity is enabled and the pool + * actually carries a positive value; otherwise undefined. + */ +function getLpFeeRewardApy( + apy: { lpFeeRewardApy?: any } | null | undefined, + enabled: boolean, +): string | undefined { + if (!enabled) return undefined; + const value = apy?.lpFeeRewardApy; + if (value == null || value === '') return undefined; + return new BigNumber(value).gt(0) ? String(value) : undefined; +} function CardList({ lqList, @@ -65,12 +88,14 @@ function CardList({ supportAMM?: boolean; }) { const theme = useTheme(); - const { onSharePool } = useUserOptions(); + const { onSharePool, lpFeeRewardActivity } = useUserOptions(); + const lpFeeRewardEnabled = !!lpFeeRewardActivity?.activity; return ( <> {lqList?.map((lq) => { if (!lq?.pair) return null; const item = lq.pair; + const lpRewardApy = getLpFeeRewardApy(item.apy, lpFeeRewardEnabled); const baseToken = convertLiquidityTokenToTokenInfo( item.baseToken, item.chainId, @@ -196,19 +221,31 @@ function CardList({ {hasMining || hasMetromMining ? ( - ✨ Mining + {hasMining || hasMetromMining ? ( + + ✨ Mining + + ) : null} ) : ( '' @@ -292,12 +329,21 @@ function CardList({ - {baseApy} - {quoteApy ? `/${quoteApy}` : ''} + + {baseApy} + {quoteApy ? `/${quoteApy}` : ''} + + {lpRewardApy ? : null} 0; + const lpRewardApy = getLpFeeRewardApy(item.apy, lpFeeRewardEnabled); const type = item.type as PoolType; const poolType = getPoolAMMOrPMM(type); @@ -671,6 +719,7 @@ function TableList({ sx={{ display: 'flex', alignItems: 'center', + gap: 4, }} > {hasMining || hasMetromMining ? ( @@ -712,6 +761,7 @@ function TableList({ {quoteApy ? `/${quoteApy}` : ''} + {lpRewardApy ? : null} {supportAMM && ( @@ -783,10 +833,17 @@ export default function AddLiquidityList({ supportAMMIcon?: boolean; }) { const theme = useTheme(); - const { onlyChainId, supportAMMV2, supportAMMV3, notSupportPMM } = - useUserOptions(); + const { + onlyChainId, + supportAMMV2, + supportAMMV3, + notSupportPMM, + lpFeeRewardActivity, + } = useUserOptions(); const { minDevice, isMobile } = useWidgetDevice(); const queryClient = useQueryClient(); + const [miningOnly, setMiningOnly] = React.useState(false); + const hasLpFeeRewardActivity = !!lpFeeRewardActivity?.activity; const { filterTokens, @@ -858,9 +915,20 @@ export default function AddLiquidityList({ }); } + if (miningOnly && hasLpFeeRewardActivity) { + lqList = (lqList ?? []).filter( + (lq) => !!getLpFeeRewardApy(lq?.pair?.apy, true), + ); + } + const filterSmallDeviceWidth = 475; - const hasMore = fetchResult.hasNextPage && !hasFilterAddress; + // When the mining filter is active the list is fully client-side filtered, + // so disable server pagination to avoid showing a misleading "load more". + const hasMore = + fetchResult.hasNextPage && + !hasFilterAddress && + !(miningOnly && hasLpFeeRewardActivity); return ( <> @@ -961,6 +1029,37 @@ export default function AddLiquidityList({ /> )} + + {hasLpFeeRewardActivity && ( + + ) => + setMiningOnly(evt.target.checked) + } + /> + + {'🔥 '} + Mining Only + + + )} {/* list */} diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx new file mode 100644 index 00000000..63a63e38 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx @@ -0,0 +1,79 @@ +import { alpha, Box, BoxProps, Tooltip, useTheme } from '@dodoex/components'; +import { t } from '@lingui/macro'; +import BigNumber from 'bignumber.js'; +import { useUserOptions } from '../../../../components/UserOptionsProvider'; +import { formatApy } from '../../../../utils'; + +/** + * The 🔥 reward badge shown on pool rows that participate in the LP fee reward + * activity. Styled with the theme primary color (matches the design's blue + * badge) and shows the activity title/description in a tooltip on hover. + * + * `apy` is the `pair.apy.lpFeeRewardApy` fraction from the liquidity list (e.g. + * 0.241 -> "24.1%"). + */ +export default function LpFeeRewardBadge({ + apy, + sx, +}: { + apy?: string | number | null; + sx?: BoxProps['sx']; +}) { + const theme = useTheme(); + const { lpFeeRewardActivity } = useUserOptions(); + const apyText = + apy != null && apy !== '' ? formatApy(new BigNumber(apy)) : undefined; + const title = lpFeeRewardActivity?.title || t`Liquidity Mining`; + const description = lpFeeRewardActivity?.description; + + return ( + + + {`🔥 ${title}`} + + {description ? ( + + {description} + + ) : null} + + } + > + + {`🔥${apyText ? ` ${apyText}` : ''}`} + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx new file mode 100644 index 00000000..7c8c5d22 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx @@ -0,0 +1,289 @@ +import { SystemApi } from '@dodoex/api'; +import { alpha, Box, Button, QuestionTooltip, useTheme } from '@dodoex/components'; +import { Trans, t } from '@lingui/macro'; +import { useQuery } from '@tanstack/react-query'; +import BigNumber from 'bignumber.js'; +import { useUserOptions } from '../../../../components/UserOptionsProvider'; +import { useGraphQLRequests } from '../../../../hooks/useGraphQLRequests'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; +import { useWidgetDevice } from '../../../../hooks/style/useWidgetDevice'; +import { formatReadableNumber } from '../../../../utils'; +import { useClaimLpFeeRewardSubmit } from '../hooks/useClaimLpFeeRewardSubmit'; + +// Decorative vertical bands layered over the banner gradient (matches the +// design's background texture). Each band is 100px wide; gray<->white +// gradients at low opacity create a subtle shimmer. +const BANNER_BANDS: Array<{ from: string; to: string; opacity: number }> = [ + { from: '#838383', to: '#ffffff', opacity: 0.14 }, + { from: '#ffffff', to: '#838383', opacity: 0.14 }, + { from: '#838383', to: '#ffffff', opacity: 0.1 }, + { from: '#ffffff', to: '#838383', opacity: 0.1 }, + { from: '#838383', to: '#ffffff', opacity: 0.08 }, + { from: '#ffffff', to: '#838383', opacity: 0.08 }, + { from: '#838383', to: '#ffffff', opacity: 0.06 }, +]; + +function formatPoints(totalPoints: string | number | null | undefined) { + const num = new BigNumber(totalPoints ?? 0); + if (num.isNaN() || num.lte(0)) return '0.00'; + return formatReadableNumber({ input: num, showDecimals: 2 }); +} + +export default function LpFeeRewardBanner() { + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + const { lpFeeRewardActivity } = useUserOptions(); + const { account } = useWalletInfo(); + const graphQLRequests = useGraphQLRequests(); + + // Use the theme's primary color for the banner so it adapts to the host + // theme (e.g. blue for FaroSwap), and contrastText for readable foreground. + const bannerBg = theme.palette.primary.main; + const bannerColor = theme.palette.primary.contrastText; + + const activity = lpFeeRewardActivity?.activity; + + const query = graphQLRequests.getQuery( + SystemApi.graphql.fetchLpFeeRewardUserReward, + { + where: { + activity: activity ?? '', + user: account ?? '', + periodId: lpFeeRewardActivity?.periodId, + }, + }, + ); + const { data, refetch } = useQuery({ + ...query, + enabled: !!account && !!activity, + }); + + const reward = data?.lp_fee_reward_getUserReward; + const claimMutation = useClaimLpFeeRewardSubmit({ + reward, + // Refresh the reward so the status flips to CLAIMED after a successful claim. + successBack: () => { + refetch(); + }, + }); + + if (!lpFeeRewardActivity || !activity) return null; + + const { + title, + description, + viewMoreLink, + rewardTokenSymbol, + rewardTokenLogo, + myRewardsTooltip, + } = lpFeeRewardActivity; + + const claimStatus = reward?.claimStatus; + const isClaimable = claimStatus === 'CLAIMABLE'; + const isClaimed = claimStatus === 'CLAIMED'; + // CLAIMABLE / CLAIMED show the finalized claimable amount; ESTIMATING and + // NOT_ELIGIBLE show the estimated amount. + const displayPoints = formatPoints( + isClaimable || isClaimed ? reward?.claimableReward : reward?.estimatedReward, + ); + // Only CLAIMABLE enables the button (ESTIMATING/CLAIMED/NOT_ELIGIBLE disable it). + const claimDisabled = !account || !isClaimable || claimMutation.isPending; + + const rewardAmount = ( + + {rewardTokenLogo ? ( + + ) : null} + + {displayPoints} + {rewardTokenSymbol ? ` ${rewardTokenSymbol}` : ''} + + + ); + + const claimButton = ( + + ); + + return ( + + {/* decorative background bands */} + + {BANNER_BANDS.map((band, index) => ( + + ))} + + + {/* left: title + description */} + + + {`🔥 ${title ?? t`Liquidity Mining`}`} + + {(description || viewMoreLink) && ( + + {description} + {viewMoreLink ? ( + + View more + {' →'} + + ) : null} + + )} + + + {/* right: my rewards + claim */} + + + + My rewards + {myRewardsTooltip ? ( + + ) : null} + + {rewardAmount} + + {!isMobile && claimButton} + + {isMobile && claimButton} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/useClaimLpFeeRewardSubmit.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/useClaimLpFeeRewardSubmit.ts new file mode 100644 index 00000000..a67d0e73 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/hooks/useClaimLpFeeRewardSubmit.ts @@ -0,0 +1,65 @@ +import { SystemApi } from '@dodoex/api'; +import { t } from '@lingui/macro'; +import { useMutation } from '@tanstack/react-query'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; +import { useSubmission } from '../../../../hooks/Submission'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { MetadataFlag } from '../../../../hooks/Submission/types'; + +export interface LpFeeRewardClaimData { + claimContract?: string | null; + claimableRewardRaw?: string | null; + index?: number | null; + proof?: string[] | null; +} + +/** + * Submits the Merkle distributor `claim` for the LP fee reward. Only valid when + * `claimStatus === 'CLAIMABLE'`; the caller is responsible for gating on that. + */ +export function useClaimLpFeeRewardSubmit({ + reward, + successBack, +}: { + reward: LpFeeRewardClaimData | undefined; + successBack?: () => void; +}) { + const { account } = useWalletInfo(); + const submission = useSubmission(); + + return useMutation({ + mutationFn: async () => { + if ( + !account || + !reward?.claimContract || + reward.index == null || + !reward.claimableRewardRaw || + !reward.proof + ) { + return; + } + + const params = SystemApi.encode.claimLpFeeReward({ + claimContract: reward.claimContract, + index: reward.index, + account, + amount: reward.claimableRewardRaw, + proof: reward.proof, + }); + + return submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + ...params, + }, + { + metadata: { + [MetadataFlag.claimLpFeeReward]: '1', + }, + successBack, + }, + ); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx index 8a941663..34cf6826 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx @@ -22,6 +22,7 @@ import { } from '../PoolOperate/types'; import AddLiquidityList from './AddLiquidity'; import { CreatePoolBtn } from './components/CreatePoolBtn'; +import LpFeeRewardBanner from './components/LpFeeRewardBanner'; import { usePoolListFilterChainId } from './hooks/usePoolListFilterChainId'; import { TokenAndPoolFilterUserOptions } from './hooks/usePoolListFilterTokenAndPool'; import { PoolTab, usePoolListTabs } from './hooks/usePoolListTabs'; @@ -90,7 +91,18 @@ export default function PoolList({ }} ref={scrollParentRef} > - + + { handleChangePoolTab(value as PoolTab); @@ -212,7 +224,8 @@ export default function PoolList({ onModifyGspPool={onModifyGspPool} /> - + + Date: Fri, 3 Jul 2026 15:17:32 +0800 Subject: [PATCH 05/12] chore: bump @dodoex/widgets 3.20.0-alpha.8 and @dodoex/api 3.9.0-alpha.2 Bump @dodoex/api (schema + SystemApi.encode changes for LP fee reward) and point the widgets dependency at the new version. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/dodoex-api/package.json | 2 +- packages/dodoex-widgets/package.json | 4 +- packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 51 +++++++++++--------- packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 51 +++++++++++--------- 6 files changed, 61 insertions(+), 51 deletions(-) diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index 5cb657c4..e5bbd5cf 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.9.0-alpha.1", + "version": "3.9.0-alpha.2", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 5bb6e504..cf87912a 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.7", + "version": "3.20.0-alpha.8", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -58,7 +58,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "^3.9.0-alpha.1", + "@dodoex/api": "^3.9.0-alpha.2", "@dodoex/components": "^3.3.0", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "^1.35.0-alpha.2", diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index 079a0afa..8cda9bce 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\"],\"+Jkdiu\":[\"Transaction Time:\"],\"+uZnU3\":[\"Cross Chain\"],\"/+c6tU\":[\"99% Default\"],\"/6L4mj\":[\"Your position is empty\"],\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":[\"Total Number of Traders\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"Volume\"],\"/jQctM\":[\"To\"],\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":[\"Removing\"],\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":[\"Balance:\"],\"0RrIzN\":[\"Select token\"],\"0S8v3W\":[\"The start time cannot be in the past\"],\"0Sw1gZ\":[\"Staking Rules\"],\"0YxDPW\":[\"Loading info...\"],\"0b0AkA\":[\"* Please note that the Fee Rate cannot be modified after the pool is created\"],\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":[\"Create Liquidity Mining\"],\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":[\"Start Time\"],\"1QfxQT\":[\"Dismiss\"],\"1Qz63U\":[\"Pool Type\"],\"1gWStS\":[\"Unstaking\"],\"1yHVE+\":[\"Adding\"],\"22Xs8M\":[\"Deposit Ratio\"],\"237hSL\":[\"Ended\"],\"2IZBPB\":[\"The end time must be later than the start time.\"],\"2vjOqX\":[\"Pools with lower transaction fees will attract more traders.\"],\"34w3mT\":[\"Single-Token\"],\"3CsYwD\":[\"Select Pool\"],\"3VUfrF\":[\"Selected Range\"],\"3WdxUv\":[\"Do not remind again\"],\"3XBvkd\":[\"Remove Liquidity\"],\"3dP8Wx\":[\"Search by address\"],\"3ggd2j\":[\"Asset ratio within the pool\"],\"4cJ0hF\":[\"Rewards\"],\"4fL/V7\":[\"Pay\"],\"4kY4C4\":[\"Due to the market condition, market price and estimated price may have a slight difference\"],\"4m3nxQ\":[\"View more\"],\"4nzwq3\":[\"Search by token or pool address\"],\"4ogEAw\":[\"Pegged Exchange Rate\"],\"4vKwIV\":[\"Private Pool\"],\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":[\"Creation Time\"],\"54ffaC\":[\"The current network is inconsistent with the wallet - please switch in wallet\"],\"5CZbyC\":[\"Set price range\"],\"5IHTSS\":[\"Full range\"],\"5Nb8LL\":[\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\"],\"5OKrbq\":[\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\"],\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":[\"The token amount is calculated by initial price.\"],\"5etEUX\":[\"Max price\"],\"5nL2hY\":[\"Staked Tokens\"],\"6+mYrD\":[\"Current price impact\"],\"6UYTy8\":[\"Minute\"],\"6V3Ea3\":[\"Copied\"],\"6XYkjc\":[\"Edit Parameter Settings\"],\"6XgEPi\":[\"Hour\"],\"6lss/t\":[\"Pricing Model\"],\"6y2TB3\":[\"Liquidity\"],\"70wH1Q\":[\"APR\"],\"71gS06\":[\"My rewards\"],\"72/M0o\":[\"Enter the token symbol or address\"],\"79D0qY\":[\"Liquidity data not available.\"],\"7Bj3x9\":[\"Failed\"],\"7C/BwI\":[\"Community Treasury\"],\"7IKPTP\":[\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\"],\"7VpPHA\":[\"Confirm\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"Fees (24H)\"],\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":[\"Initial Tokens\"],\"7rpoXw\":[\"This token is on\"],\"7y/8M6\":[\"Please confirm in wallet\"],\"88dol0\":[\"Success Rate\"],\"8OiU8L\":[\"Pool Creation\"],\"8Tg/JR\":[\"Custom\"],\"8XNsbx\":[\"Higher than dynamic slippage\"],\"8Z29ZO\":[\"Estimated service provider fees\"],\"93m8jT\":[\"Basic Fee\"],\"97jlEV\":[\"LP Balance\"],\"9D2g7k\":[\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\"],\"9yc9F+\":[\"Default value is \",[\"warnValue\"],\"%,the current slippage setting is higher than the default value, which means you are willing to accept a worse final execution price.\"],\"A1taO8\":[\"Search\"],\"A23gVF\":[\"Points for staking LP tokens.\"],\"AOhRo6\":[\"DODO provides a variety of pool versions to suit your needs.\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR = Reward Token Value per Year / TVL\"],\"Active\":[\"Active\"],\"AeZIvT\":[\"You will receive\"],\"AghcDJ\":[\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\"],\"All Mining\":[\"All Mining\"],\"Amount of token rewards\":[\"Amount of token rewards\"],\"AxPAXW\":[\"No results found\"],\"AxdOHo\":[\"Pair\"],\"B0/2ea\":[\"s\"],\"B0YDoE\":[\"Yes, I am sure\"],\"B3mhDR\":[\"Add liquidity to obtain LP tokens for mining\"],\"BRi+RY\":[\"Add more liquidity\"],\"C1mcuF\":[\"This CP has been settled by other addrs\"],\"C1qIFl\":[\"Liquidity Supplied\"],\"CK1KXz\":[\"Max\"],\"CKyk7Q\":[\"Go back\"],\"CMHmbm\":[\"Slippage\"],\"CP1UAq\":[\"The slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"Calculation = current rewards for a single block × number of blocks in 24h\"],\"CeLrge\":[\"Mid Price\"],\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":[\"Mining Pool Setup\"],\"Copied\":[\"Copied\"],\"D1bhHv\":[\"The pool’s market-making price is fixed\"],\"D87pha\":[\"Closed\"],\"DPfwMq\":[\"Done\"],\"DPi/hO\":[\"Results in a relatively fixed price.\"],\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":[\"Current price\"],\"DZULmp\":[\"Swap Rate\"],\"Da1+Da\":[\"Pool not found. Please switch to another network and retry.\"],\"Daily Rewards\":[\"Daily Rewards\"],\"Dt4Hc3\":[\"Token Pair Mining\"],\"Du6bPw\":[\"Address\"],\"DupCvC\":[\"Added successful\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"Add Initial Liquidity\"],\"E6MqGy\":[\"Add liquidity\"],\"EQs1sJ\":[\"Min price\"],\"ESQO1L\":[\"Pool address\"],\"EU3wU4\":[\"Fee tier\"],\"EUBGvH\":[\"Are you sure swapping to another chain?\"],\"EatqP4\":[\"Swaps\"],\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":[\"Edit\"],\"Eif7f6\":[\"PMM Pool\"],\"EkAv3P\":[\"Concentrated liquidity, higher efficiency\"],\"End Time\":[\"End Time\"],\"Ended\":[\"Ended\"],\"Enslfm\":[\"Destination\"],\"EpjpP9\":[\"Released Rewards\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"The newly created mining pool can start counting APR after depositing any liquidity.\"],\"F+sxb9\":[\"Unapproved\"],\"F18WP3\":[\"Parameters\"],\"F8yRdq\":[\"More trade settings\"],\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"Add Position\"],\"FQfStS\":[\"Emulator\"],\"FRBvjQ\":[\"Transaction Pending\"],\"Fdp03t\":[\"on\"],\"FrP5tr\":[\"Suitable for stablecoins with price fluctuations within 2%\"],\"GAypnX\":[\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"GGPOuT\":[\"set current mid price\"],\"GGWsTU\":[\"Canceled\"],\"GSt7YT\":[\"The fee rate must be between 0.01% to 10%\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"Go back\"],\"Gr2anW\":[\"Traders (24H)\"],\"Gs02OK\":[\"My Positions\"],\"H7OUPr\":[\"Day\"],\"H9HlDe\":[\"minutes\"],\"HGf8fG\":[\"You can set the minimum selling price for single-token pools.\"],\"HTX2HV\":[\"Minimum received\"],\"HXBqgG\":[\"Invalid price input\"],\"HkWY45\":[\"This pool type isn't supported on your current network. You can switch networks in your wallet to create it\"],\"HuVZMK\":[\"Days\"],\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":[\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":[\"Invite\"],\"IwiTcw\":[\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"Connecting...\"],\"J39pAJ\":[\"Additional Fee\"],\"J7M/DA\":[\"Pegged\"],\"JR7wWw\":[\"Equilibrium target\"],\"JRgkmT\":[\"End release time before adjustment\"],\"JYKRJS\":[\"Stake\"],\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":[\"Fetching best price...\"],\"Jh223O\":[\"Invalid range selected. The min price must be lower than the max price.\"],\"JlIjZf\":[\"Liquidity Provider\"],\"Joa5Dk\":[\"*Collecting fees will withdraw currently available fees for you.\"],\"JuzN3b\":[\"Related CrowdPooling\"],\"K/Ay/d\":[\"Review Swap\"],\"K/PgcA\":[\"Select Cross Chain\"],\"K8rjE/\":[\"Daily rewards before adjustment\"],\"KAbREa\":[\"*Deflationary tokens are not supported\"],\"KAbcm2\":[\"Succeeded\"],\"KAmxpM\":[\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"KRnA5J\":[\"Set pool parameters\"],\"Kb3KaW\":[\"Any Ratio\"],\"KkjUUb\":[\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\"],\"KlvBGJ\":[\"Select Tokens\"],\"KsqhWn\":[\"Staking\"],\"KvG1xW\":[\"Claiming\"],\"L37FfW\":[\"Create AMM V2 Position\"],\"L4nQwl\":[\"Suitable for stablecoins with price fluctuations within 0.5%\"],\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQ0J1B\":[\"Flexible customization, take full control of liquidity\"],\"LQU+Dm\":[\"Risk Disclaimer\"],\"LVzIav\":[\"The pool’s market-making price can be adjusted\"],\"Lfkqg7\":[\"Stake tokens to receive mining rewards.\"],\"LhMjLm\":[\"Time\"],\"LtI9AS\":[\"Owner\"],\"M9dIDb\":[\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\"],\"MU9s7M\":[\"Deposit amounts\"],\"MXQodB\":[\"Disable Indirect Routing\"],\"MZPP7t\":[\"Your position has 0 liquidity, and is not earning fees.\"],\"Mining Pool\":[\"Mining Pool\"],\"MvFS/h\":[\"No pools yet? Create one!\"],\"My Mining\":[\"My Mining\"],\"My Pools\":[\"My Pools\"],\"NEQTCn\":[\"Share Of Pool\"],\"NSCBTb\":[\"The setting has been switched to swap mode\"],\"NVAuTg\":[\"Quote not available\"],\"NXZdrO\":[\"My pool share\"],\"NgeSlx\":[\"Learn More\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"Use the recommended ratio\"],\"Nk6ddN\":[\"Stake LP tokens and receive mining rewards.\"],\"No LP pools match your criteria\":[\"No LP pools match your criteria\"],\"O6RUgz\":[\"Fee rate\"],\"OBdohg\":[\"Add Liquidity\"],\"OFjZGo\":[\"Unstake\"],\"OJOe+K\":[\"Set the fee to the same as most other pools\"],\"OKZP2O\":[\"If there are no participants before the end, the rewards cannot be taken out anymore.\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"Your position will appear here.\"],\"OauUE6\":[\"Fetching Price...\"],\"OfhWJH\":[\"Reset\"],\"OgKD6h\":[\"Best offer\"],\"OjaWXx\":[\"Fresh Mining\"],\"OnDEky\":[\"LP Fee\"],\"OuSseo\":[\"Ratio Settings\"],\"P+K/3O\":[\"Confirming\"],\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":[\"Quantity model\"],\"PLUB/s\":[\"Fee\"],\"PPqGw9\":[\"Applicable to pegged assets with a fixed price and no fluctuation\"],\"PVa3KL\":[\"Position on\"],\"PZqJog\":[\"Confirm Cross Chain\"],\"Q8W3SC\":[\"Volume (1D)\"],\"QNWt8A\":[\"Estimated Time\"],\"QNrpkx\":[\"Classical AMM-like pool. Suitable for most assets.\"],\"QR4/RH\":[\"Swap summary\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"You will also claim all rewards from this pool.\"],\"QtgfjM\":[\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\"],\"R7D79P\":[\"Invalid pair\"],\"R9Khdg\":[\"Auto\"],\"Remaining rewards/Total\":[\"Remaining rewards/Total\"],\"Rewards\":[\"Rewards\"],\"RtKKbA\":[\"Last\"],\"RvYEUJ\":[\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\"],\"RxHSET\":[\"LP Balance:\"],\"S3piC2\":[\"Tx\"],\"S8G1qk\":[\"Single\"],\"SXnevP\":[\"Review Cross Chain\"],\"SbBMxj\":[\"Share of pool\"],\"Search by address\":[\"Search by address\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"Enter a percent\"],\"Staked\":[\"Staked\"],\"Start Time\":[\"Start Time\"],\"Sti4vy\":[\"Mining\"],\"T+qgFw\":[\"Price Impact\"],\"T0Y2+3\":[\"Select a token\"],\"T5ExxV\":[\"Points for LP token holders.\"],\"TFOxRM\":[\"Mins\"],\"TGi+jm\":[\"Doc\"],\"TJBHlP\":[\"Standard\"],\"TP9/K5\":[\"Token\"],\"TTlkRL\":[\"Lower than dynamic slippage\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP Tokens\"],\"TizaRy\":[\"Wallet incompatibility\"],\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":[\"Settings\"],\"UE2beD\":[\"Creator\"],\"UN0Nip\":[\"Reward Rules\"],\"UPXmW+\":[\"Trader\"],\"URmyfc\":[\"Details\"],\"UbRKMZ\":[\"Pending\"],\"Upcoming\":[\"Upcoming\"],\"Users\":[\"Users\"],\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":[\"Seconds\"],\"V38hNQ\":[\"Single-Token Stake Mining\"],\"VXTSOE\":[\"Suitable for most situations.\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"Something went wrong…<0>Refresh again\"],\"WI3lQ1\":[\"SELECT\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"Select Token\"],\"WYqq5A\":[\"End mining\"],\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"When adding rewards, the number of rewards for a single block may be adjusted\"],\"X6T02b\":[\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\"],\"XPiFIY\":[\"Can the pool price be adjusted?\"],\"XeovX3\":[\"Swap Detail\"],\"Xpkm7d\":[\"No ForceStop access\"],\"Y0Knz4\":[\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\"],\"Y7rVy0\":[\"Fee Rate\"],\"Y9QDtD\":[\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\"],\"YA4hwj\":[\"Price Range\"],\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":[\"My Liquidity\"],\"YHpbe1\":[\"For\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"You are not currently providing liquidity for any LP pools.\"],\"You have not create any mining\":[\"You have not create any mining\"],\"Z033WN\":[\"Total Swap Fee\"],\"Z5HWHd\":[\"On\"],\"Z7ZXbT\":[\"Approve\"],\"Z8lGw6\":[\"Share\"],\"ZXvy7b\":[\"Additional routing fees set by the Widget user\"],\"ZgtZpB\":[\"The start time is too soon, please set a later time\"],\"ZhEBp4\":[\"Current liquidity pool token price\"],\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":[\"Maximum slippage do not exceed 50%\"],\"a1AzKr\":[\"For those who are looking to sell tokens and only need ask-side liquidity.\"],\"a7u1N9\":[\"Price\"],\"aGKLPO\":[\"The current network supports new pool types\"],\"aIvv/z\":[\"The price of this pool is within your selected range. Your position is currently earning fees.\"],\"aM1tos\":[\"You are creating a pool\"],\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"Minutes\"],\"az8lvo\":[\"Off\"],\"b+KjnH\":[\"Your position will not earn fees or be used in trades until the market price moves into your range.\"],\"b2jAb+\":[\"per\"],\"bC0iyq\":[\"Suitable for stablecoins with price fluctuations within 10%\"],\"bEsfUQ\":[\"Confirm submission\"],\"bQ3cKo\":[\"Select pool by tokens\"],\"bUUVED\":[\"Asset\"],\"bXp9u3\":[\"Fee Revenue\"],\"bwSQI0\":[\"Supply\"],\"c4miqE\":[\"Pool share\"],\"c6TMm0\":[\"Mining Type\"],\"cDWXuq\":[\"Settler\"],\"cJtosk\":[\"Remove liquidity\"],\"cOvZFM\":[\"Dynamic\"],\"cmUrtC\":[\"SEE HOW IT WORKS\"],\"cnGeoo\":[\"Delete\"],\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"Initial Price\"],\"d8YnVj\":[\"Guide Price\"],\"dAXusZ\":[\"Mining Only\"],\"dEgA5A\":[\"Cancel\"],\"dI46oG\":[\"Auto switch network\"],\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":[\"One-Click Claim\"],\"dmiCGN\":[\"Select Token Pair\"],\"dqWPbT\":[\"I have read, understand, and agree to the <0>Terms of Service.\"],\"dzV+zO\":[\"Modify Confirmation\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"Tips:\"],\"eE0JZ4\":[\"Version\"],\"eK0eiF\":[\"Initial asset ratio\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"Edit\"],\"eTUF28\":[\"Min\"],\"eVZ7bY\":[\"Hide TVL=0 pools\"],\"em6LzM\":[\"Transaction rejected.\"],\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":[\"Results in a more volatile price.\"],\"fSFt4a\":[\"Token Pair\"],\"fZ5Vnu\":[\"Received\"],\"fZFkP1\":[\"My Pools\"],\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":[\"Rate\"],\"fsBGk0\":[\"Balance\"],\"fxRyGG\":[\"fee tier\"],\"g3x+cF\":[\"Service update, please wait and try again\"],\"gz+9Rb\":[\"Gas price is too low, please adjust in your wallet and try again\"],\"h3PbRN\":[\"My Pool Share\"],\"h4RLFN\":[\"RPC node data exception\"],\"h5FVz1\":[\"Estimated transaction time\"],\"h5pjuM\":[\"Collect fees\"],\"h7LgzN\":[\"Connect to your wallet\"],\"hCBYHP\":[\"Total Fee Revenue\"],\"hXzOVo\":[\"Next\"],\"hYgDIe\":[\"Create\"],\"hcNa1G\":[\"Token Amount\"],\"hdIg7i\":[\"Select Pool Version\"],\"hom7qf\":[\"Claim\"],\"i3Z+/Z\":[\"Out of range\"],\"iDGO1l\":[\"Disclaimer\"],\"iH8pgl\":[\"Back\"],\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":[\"Enter an amount\"],\"iaocTt\":[\"Ratio\"],\"j2Uisd\":[\"Approving\"],\"jMam5g\":[[\"0\"],\" Balance\"],\"jaH6JH\":[\"Higher than default slippage\"],\"jjuKOj\":[\"Min Price\"],\"juypHV\":[\"Liquidity Providers\"],\"kAC8rT\":[\"High price\"],\"kNeEXg\":[\"Current Price\"],\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":[\"Something went wrong.\"],\"kj3p6e\":[\"Daily Rewards\"],\"ku//5b\":[\"Second\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"Total Swap Volume\"],\"lDgVWA\":[\"Receive\"],\"lJvbHq\":[\"Select Network\"],\"lLbR0m\":[\"Simple, full-range liquidity\"],\"lNYomJ\":[\"AMM V2 Position\"],\"lQ6r7x\":[\"Confirm swap\"],\"lTmG/H\":[\"Minimum Received\"],\"lgE483\":[\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\"],\"lqTDfd\":[\"Slippage Tolerance\"],\"lsg9Mi\":[\"Parameter Settings\"],\"lt8yMa\":[\"Send to:\"],\"luOvdJ\":[\"My Staked\"],\"m16xKo\":[\"Add\"],\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\"],\"mObS+5\":[\"Failed to get price of the token\"],\"mYGY3B\":[\"Date\"],\"mZ4SrP\":[\"Liquidity Pool\"],\"me2dmq\":[\"Value (USD)\"],\"n25Lml\":[\"Depth\"],\"nIrcQi\":[\"No matching pool found\"],\"nTWWCZ\":[\"Low\"],\"nxRg31\":[\"Select pair\"],\"o/5/4c\":[\"Once Mining has started, it cannot be stopped.\"],\"o8aMNm\":[\"Select a liquidity pool\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\"],\"p2jbcE\":[\"Create Pool\"],\"p3607o\":[\"Managing\"],\"p7/w10\":[\"Volume (24H)\"],\"pHQq+U\":[\"Pool Setup\"],\"pKjCsP\":[\"100% use your own funds and enjoy the maximum degree of flexibility.\"],\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":[\"MT Fee\"],\"pY/ok7\":[\"All chains\"],\"pdZiL7\":[\"Current Market Price:\"],\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"Confirming...\"],\"qDhDFK\":[\"Traders\"],\"qK7wuW\":[\"Unable to SETTLE during the cooling-off period\"],\"qLkska\":[\"The setting has been switched to cross chain mode\"],\"qiOIiY\":[\"Buy\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"Total Rewards\"],\"r7ScnQ\":[\"Connect to a wallet\"],\"rAx5u1\":[\"End Time\"],\"rH6vg9\":[\"There is no liquidity data.\"],\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":[\"Detail\"],\"rSayea\":[\"APY\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"Preview\"],\"sCUx8G\":[\"Select Platform\"],\"sIPJGT\":[\"SELECT TOKEN\"],\"sNaLCG\":[\"Add Token\"],\"sTnImq\":[\"Total Liquidity\"],\"sVlqoo\":[\"AMM V3 Position\"],\"sjn3tj\":[\"Slippage Coefficient\"],\"sleulC\":[\"Liquidity Mining\"],\"sxkWRg\":[\"Advanced\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":[\"Initial Price Alert\"],\"t/YqKh\":[\"Remove\"],\"t3d3/V\":[\"ratio is 0\"],\"tKE4Ak\":[\"Cross Chain Summary\"],\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":[\"SafeERC20: low-level call failed. Please contact the DODO team.\"],\"tnRI9r\":[\"Pool Creation Confirmation\"],\"tu/fxg\":[\"Claim fees\"],\"tyGEMJ\":[\"Amounts\"],\"u1tnst\":[\"Create One\"],\"uAQUqI\":[\"Status\"],\"uEoBVI\":[\"Low price\"],\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":[\"Real Time\"],\"udsWDJ\":[\"Unsupported network - switch to trade\"],\"uiuMDr\":[\"Enter parameters to view the yield curve\"],\"v4nCHK\":[\"Paid\"],\"v4wgrk\":[\"Failed to add\"],\"vH2C/2\":[\"Swap\"],\"vLyv1R\":[\"Hide\"],\"vOyUlD\":[\"In range\"],\"vXvgFK\":[\"There is risk of being arbitraged if adding this liquidity.\"],\"vxHMzr\":[\"address\"],\"wSpNR+\":[\"This trading pair does not have enough historical data and has used the default dynamic slippage.\"],\"wckWOP\":[\"Manage\"],\"wdxz7K\":[\"Source\"],\"wmCrk7\":[\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\"],\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":[\"Liquidity Burn Ratio\"],\"x4QVeW\":[\"Percentage to remove\"],\"x6GJ4a\":[\"Max Slippage\"],\"xEbi+8\":[\"User denied transaction signature.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"Copy link\"],\"y4kfSV\":[\"WARNING\"],\"y5rS9U\":[\"Migrate\"],\"yM82Jw\":[\"ForceStop exception\"],\"yQ2kGp\":[\"Load more\"],\"yQE2r9\":[\"Loading\"],\"yXm1vH\":[\"The initial price is different from the current market price, which may cause your pool to be arbitraged\"],\"yY8wAv\":[\"Hours\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":[\"High\"],\"yz7wBu\":[\"Close\"],\"yzjPpo\":[\"Fees will be the same as in most other pools.\"],\"z9t6jM\":[\"Mining Pool\"],\"zA6/Yq\":[\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"Transaction Deadline\"],\"zXCpR0\":[\"Claim Rewards\"],\"zcVtwU\":[\"My Pools (PMM)\"],\"zeSosD\":[\"Starting price\"],\"zga9sT\":[\"OK\"],\"zkFuIm\":[\"Total Rewards=Daily Rewards*Duration\"],\"znqB4T\":[\"Insufficient balance\"],\"zwBp5t\":[\"Private\"],\"zwWKhA\":[\"Learn more\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\"],\"+Jkdiu\":[\"Transaction Time:\"],\"+uZnU3\":[\"Cross Chain\"],\"/+c6tU\":[\"99% Default\"],\"/6L4mj\":[\"Your position is empty\"],\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":[\"Total Number of Traders\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"Volume\"],\"/jQctM\":[\"To\"],\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":[\"Removing\"],\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":[\"Balance:\"],\"0RrIzN\":[\"Select token\"],\"0S8v3W\":[\"The start time cannot be in the past\"],\"0Sw1gZ\":[\"Staking Rules\"],\"0YxDPW\":[\"Loading info...\"],\"0b0AkA\":[\"* Please note that the Fee Rate cannot be modified after the pool is created\"],\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":[\"Create Liquidity Mining\"],\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":[\"Start Time\"],\"1QfxQT\":[\"Dismiss\"],\"1Qz63U\":[\"Pool Type\"],\"1gWStS\":[\"Unstaking\"],\"1yHVE+\":[\"Adding\"],\"22Xs8M\":[\"Deposit Ratio\"],\"237hSL\":[\"Ended\"],\"2IZBPB\":[\"The end time must be later than the start time.\"],\"2vjOqX\":[\"Pools with lower transaction fees will attract more traders.\"],\"34w3mT\":[\"Single-Token\"],\"3CsYwD\":[\"Select Pool\"],\"3VUfrF\":[\"Selected Range\"],\"3WdxUv\":[\"Do not remind again\"],\"3XBvkd\":[\"Remove Liquidity\"],\"3dP8Wx\":[\"Search by address\"],\"3ggd2j\":[\"Asset ratio within the pool\"],\"4cJ0hF\":[\"Rewards\"],\"4fL/V7\":[\"Pay\"],\"4kY4C4\":[\"Due to the market condition, market price and estimated price may have a slight difference\"],\"4m3nxQ\":[\"View more\"],\"4nzwq3\":[\"Search by token or pool address\"],\"4ogEAw\":[\"Pegged Exchange Rate\"],\"4vKwIV\":[\"Private Pool\"],\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":[\"Creation Time\"],\"54ffaC\":[\"The current network is inconsistent with the wallet - please switch in wallet\"],\"5CZbyC\":[\"Set price range\"],\"5IHTSS\":[\"Full range\"],\"5Nb8LL\":[\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\"],\"5OKrbq\":[\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\"],\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":[\"The token amount is calculated by initial price.\"],\"5etEUX\":[\"Max price\"],\"5nL2hY\":[\"Staked Tokens\"],\"6+mYrD\":[\"Current price impact\"],\"6UYTy8\":[\"Minute\"],\"6V3Ea3\":[\"Copied\"],\"6XYkjc\":[\"Edit Parameter Settings\"],\"6XgEPi\":[\"Hour\"],\"6lss/t\":[\"Pricing Model\"],\"6y2TB3\":[\"Liquidity\"],\"70wH1Q\":[\"APR\"],\"71gS06\":[\"My rewards\"],\"72/M0o\":[\"Enter the token symbol or address\"],\"79D0qY\":[\"Liquidity data not available.\"],\"7Bj3x9\":[\"Failed\"],\"7C/BwI\":[\"Community Treasury\"],\"7IKPTP\":[\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\"],\"7VpPHA\":[\"Confirm\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"Fees (24H)\"],\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":[\"Initial Tokens\"],\"7rpoXw\":[\"This token is on\"],\"7y/8M6\":[\"Please confirm in wallet\"],\"88dol0\":[\"Success Rate\"],\"8OiU8L\":[\"Pool Creation\"],\"8Tg/JR\":[\"Custom\"],\"8XNsbx\":[\"Higher than dynamic slippage\"],\"8Z29ZO\":[\"Estimated service provider fees\"],\"93m8jT\":[\"Basic Fee\"],\"97jlEV\":[\"LP Balance\"],\"9D2g7k\":[\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\"],\"9yc9F+\":[\"Default value is \",[\"warnValue\"],\"%,the current slippage setting is higher than the default value, which means you are willing to accept a worse final execution price.\"],\"A1taO8\":[\"Search\"],\"A23gVF\":[\"Points for staking LP tokens.\"],\"AOhRo6\":[\"DODO provides a variety of pool versions to suit your needs.\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR = Reward Token Value per Year / TVL\"],\"Active\":[\"Active\"],\"AeZIvT\":[\"You will receive\"],\"AghcDJ\":[\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\"],\"All Mining\":[\"All Mining\"],\"Amount of token rewards\":[\"Amount of token rewards\"],\"AxPAXW\":[\"No results found\"],\"AxdOHo\":[\"Pair\"],\"B0/2ea\":[\"s\"],\"B0YDoE\":[\"Yes, I am sure\"],\"B3mhDR\":[\"Add liquidity to obtain LP tokens for mining\"],\"BRi+RY\":[\"Add more liquidity\"],\"C1mcuF\":[\"This CP has been settled by other addrs\"],\"C1qIFl\":[\"Liquidity Supplied\"],\"CK1KXz\":[\"Max\"],\"CKyk7Q\":[\"Go back\"],\"CMHmbm\":[\"Slippage\"],\"CP1UAq\":[\"The slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"Calculation = current rewards for a single block × number of blocks in 24h\"],\"CeLrge\":[\"Mid Price\"],\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":[\"Mining Pool Setup\"],\"Copied\":[\"Copied\"],\"D1bhHv\":[\"The pool’s market-making price is fixed\"],\"D87pha\":[\"Closed\"],\"DPfwMq\":[\"Done\"],\"DPi/hO\":[\"Results in a relatively fixed price.\"],\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":[\"Current price\"],\"DZULmp\":[\"Swap Rate\"],\"Da1+Da\":[\"Pool not found. Please switch to another network and retry.\"],\"Daily Rewards\":[\"Daily Rewards\"],\"Dt4Hc3\":[\"Token Pair Mining\"],\"Du6bPw\":[\"Address\"],\"DupCvC\":[\"Added successful\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"Add Initial Liquidity\"],\"E6MqGy\":[\"Add liquidity\"],\"EQs1sJ\":[\"Min price\"],\"ESQO1L\":[\"Pool address\"],\"EU3wU4\":[\"Fee tier\"],\"EUBGvH\":[\"Are you sure swapping to another chain?\"],\"EatqP4\":[\"Swaps\"],\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":[\"Edit\"],\"Eif7f6\":[\"PMM Pool\"],\"EkAv3P\":[\"Concentrated liquidity, higher efficiency\"],\"End Time\":[\"End Time\"],\"Ended\":[\"Ended\"],\"Enslfm\":[\"Destination\"],\"EpjpP9\":[\"Released Rewards\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"The newly created mining pool can start counting APR after depositing any liquidity.\"],\"F+sxb9\":[\"Unapproved\"],\"F18WP3\":[\"Parameters\"],\"F8yRdq\":[\"More trade settings\"],\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"Add Position\"],\"FQfStS\":[\"Emulator\"],\"FRBvjQ\":[\"Transaction Pending\"],\"Fdp03t\":[\"on\"],\"FrP5tr\":[\"Suitable for stablecoins with price fluctuations within 2%\"],\"GAypnX\":[\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"GGPOuT\":[\"set current mid price\"],\"GGWsTU\":[\"Canceled\"],\"GSt7YT\":[\"The fee rate must be between 0.01% to 10%\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"Go back\"],\"Gr2anW\":[\"Traders (24H)\"],\"Gs02OK\":[\"My Positions\"],\"H7OUPr\":[\"Day\"],\"H9HlDe\":[\"minutes\"],\"HGf8fG\":[\"You can set the minimum selling price for single-token pools.\"],\"HTX2HV\":[\"Minimum received\"],\"HXBqgG\":[\"Invalid price input\"],\"HkWY45\":[\"This pool type isn't supported on your current network. You can switch networks in your wallet to create it\"],\"HuVZMK\":[\"Days\"],\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":[\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":[\"Invite\"],\"IwiTcw\":[\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"Connecting...\"],\"J39pAJ\":[\"Additional Fee\"],\"J7M/DA\":[\"Pegged\"],\"JR7wWw\":[\"Equilibrium target\"],\"JRgkmT\":[\"End release time before adjustment\"],\"JYKRJS\":[\"Stake\"],\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":[\"Fetching best price...\"],\"Jh223O\":[\"Invalid range selected. The min price must be lower than the max price.\"],\"JlIjZf\":[\"Liquidity Provider\"],\"Joa5Dk\":[\"*Collecting fees will withdraw currently available fees for you.\"],\"JuzN3b\":[\"Related CrowdPooling\"],\"K/Ay/d\":[\"Review Swap\"],\"K/PgcA\":[\"Select Cross Chain\"],\"K8rjE/\":[\"Daily rewards before adjustment\"],\"KAbREa\":[\"*Deflationary tokens are not supported\"],\"KAbcm2\":[\"Succeeded\"],\"KAmxpM\":[\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\"],\"KRnA5J\":[\"Set pool parameters\"],\"Kb3KaW\":[\"Any Ratio\"],\"KkjUUb\":[\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\"],\"KlvBGJ\":[\"Select Tokens\"],\"KsqhWn\":[\"Staking\"],\"KvG1xW\":[\"Claiming\"],\"L37FfW\":[\"Create AMM V2 Position\"],\"L4nQwl\":[\"Suitable for stablecoins with price fluctuations within 0.5%\"],\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQ0J1B\":[\"Flexible customization, take full control of liquidity\"],\"LQU+Dm\":[\"Risk Disclaimer\"],\"LVzIav\":[\"The pool’s market-making price can be adjusted\"],\"Lfkqg7\":[\"Stake tokens to receive mining rewards.\"],\"LhMjLm\":[\"Time\"],\"LtI9AS\":[\"Owner\"],\"M9dIDb\":[\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\"],\"MU9s7M\":[\"Deposit amounts\"],\"MXQodB\":[\"Disable Indirect Routing\"],\"MZPP7t\":[\"Your position has 0 liquidity, and is not earning fees.\"],\"Mining Pool\":[\"Mining Pool\"],\"MvFS/h\":[\"No pools yet? Create one!\"],\"My Mining\":[\"My Mining\"],\"My Pools\":[\"My Pools\"],\"NEQTCn\":[\"Share Of Pool\"],\"NSCBTb\":[\"The setting has been switched to swap mode\"],\"NVAuTg\":[\"Quote not available\"],\"NXZdrO\":[\"My pool share\"],\"NgeSlx\":[\"Learn More\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"Use the recommended ratio\"],\"Nk6ddN\":[\"Stake LP tokens and receive mining rewards.\"],\"No LP pools match your criteria\":[\"No LP pools match your criteria\"],\"O6RUgz\":[\"Fee rate\"],\"OBdohg\":[\"Add Liquidity\"],\"OFjZGo\":[\"Unstake\"],\"OJOe+K\":[\"Set the fee to the same as most other pools\"],\"OKZP2O\":[\"If there are no participants before the end, the rewards cannot be taken out anymore.\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"Your position will appear here.\"],\"OauUE6\":[\"Fetching Price...\"],\"OfhWJH\":[\"Reset\"],\"OgKD6h\":[\"Best offer\"],\"OjaWXx\":[\"Fresh Mining\"],\"OnDEky\":[\"LP Fee\"],\"OuSseo\":[\"Ratio Settings\"],\"P+K/3O\":[\"Confirming\"],\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":[\"Quantity model\"],\"PLUB/s\":[\"Fee\"],\"PPqGw9\":[\"Applicable to pegged assets with a fixed price and no fluctuation\"],\"PVa3KL\":[\"Position on\"],\"PZqJog\":[\"Confirm Cross Chain\"],\"Q8W3SC\":[\"Volume (1D)\"],\"QNWt8A\":[\"Estimated Time\"],\"QNrpkx\":[\"Classical AMM-like pool. Suitable for most assets.\"],\"QR4/RH\":[\"Swap summary\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"You will also claim all rewards from this pool.\"],\"QtgfjM\":[\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\"],\"R7D79P\":[\"Invalid pair\"],\"R9Khdg\":[\"Auto\"],\"Remaining rewards/Total\":[\"Remaining rewards/Total\"],\"Rewards\":[\"Rewards\"],\"RtKKbA\":[\"Last\"],\"RvYEUJ\":[\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\"],\"RxHSET\":[\"LP Balance:\"],\"S3piC2\":[\"Tx\"],\"S8G1qk\":[\"Single\"],\"SXnevP\":[\"Review Cross Chain\"],\"SbBMxj\":[\"Share of pool\"],\"Search by address\":[\"Search by address\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"Enter a percent\"],\"Staked\":[\"Staked\"],\"Start Time\":[\"Start Time\"],\"Sti4vy\":[\"Mining\"],\"T+qgFw\":[\"Price Impact\"],\"T0Y2+3\":[\"Select a token\"],\"T5ExxV\":[\"Points for LP token holders.\"],\"TFOxRM\":[\"Mins\"],\"TGi+jm\":[\"Doc\"],\"TJBHlP\":[\"Standard\"],\"TP9/K5\":[\"Token\"],\"TTlkRL\":[\"Lower than dynamic slippage\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP Tokens\"],\"TizaRy\":[\"Wallet incompatibility\"],\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":[\"Settings\"],\"UE2beD\":[\"Creator\"],\"UN0Nip\":[\"Reward Rules\"],\"UPXmW+\":[\"Trader\"],\"URmyfc\":[\"Details\"],\"UbRKMZ\":[\"Pending\"],\"Upcoming\":[\"Upcoming\"],\"Users\":[\"Users\"],\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":[\"Seconds\"],\"V38hNQ\":[\"Single-Token Stake Mining\"],\"VXTSOE\":[\"Suitable for most situations.\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"Something went wrong…<0>Refresh again\"],\"WI3lQ1\":[\"SELECT\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"Select Token\"],\"WYqq5A\":[\"End mining\"],\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"When adding rewards, the number of rewards for a single block may be adjusted\"],\"X6T02b\":[\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\"],\"XPiFIY\":[\"Can the pool price be adjusted?\"],\"XeovX3\":[\"Swap Detail\"],\"Xpkm7d\":[\"No ForceStop access\"],\"Y0Knz4\":[\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\"],\"Y7rVy0\":[\"Fee Rate\"],\"Y9QDtD\":[\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\"],\"YA4hwj\":[\"Price Range\"],\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":[\"My Liquidity\"],\"YHpbe1\":[\"For\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"You are not currently providing liquidity for any LP pools.\"],\"You have not create any mining\":[\"You have not create any mining\"],\"Z033WN\":[\"Total Swap Fee\"],\"Z5HWHd\":[\"On\"],\"Z7ZXbT\":[\"Approve\"],\"Z8lGw6\":[\"Share\"],\"ZXvy7b\":[\"Additional routing fees set by the Widget user\"],\"ZgtZpB\":[\"The start time is too soon, please set a later time\"],\"ZhEBp4\":[\"Current liquidity pool token price\"],\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":[\"Maximum slippage do not exceed 50%\"],\"a1AzKr\":[\"For those who are looking to sell tokens and only need ask-side liquidity.\"],\"a7u1N9\":[\"Price\"],\"aGKLPO\":[\"The current network supports new pool types\"],\"aIvv/z\":[\"The price of this pool is within your selected range. Your position is currently earning fees.\"],\"aM1tos\":[\"You are creating a pool\"],\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"Minutes\"],\"az8lvo\":[\"Off\"],\"b+KjnH\":[\"Your position will not earn fees or be used in trades until the market price moves into your range.\"],\"b2jAb+\":[\"per\"],\"bC0iyq\":[\"Suitable for stablecoins with price fluctuations within 10%\"],\"bEsfUQ\":[\"Confirm submission\"],\"bQ3cKo\":[\"Select pool by tokens\"],\"bUUVED\":[\"Asset\"],\"bXp9u3\":[\"Fee Revenue\"],\"bwSQI0\":[\"Supply\"],\"c4miqE\":[\"Pool share\"],\"c6TMm0\":[\"Mining Type\"],\"cDWXuq\":[\"Settler\"],\"cJtosk\":[\"Remove liquidity\"],\"cOvZFM\":[\"Dynamic\"],\"cmUrtC\":[\"SEE HOW IT WORKS\"],\"cnGeoo\":[\"Delete\"],\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"Initial Price\"],\"d8YnVj\":[\"Guide Price\"],\"dAXusZ\":[\"Mining Only\"],\"dEgA5A\":[\"Cancel\"],\"dI46oG\":[\"Auto switch network\"],\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":[\"One-Click Claim\"],\"dmiCGN\":[\"Select Token Pair\"],\"dqWPbT\":[\"I have read, understand, and agree to the <0>Terms of Service.\"],\"dzV+zO\":[\"Modify Confirmation\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"Tips:\"],\"eE0JZ4\":[\"Version\"],\"eK0eiF\":[\"Initial asset ratio\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"Edit\"],\"eTUF28\":[\"Min\"],\"eVZ7bY\":[\"Hide TVL=0 pools\"],\"em6LzM\":[\"Transaction rejected.\"],\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":[\"Results in a more volatile price.\"],\"fSFt4a\":[\"Token Pair\"],\"fZ5Vnu\":[\"Received\"],\"fZFkP1\":[\"My Pools\"],\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":[\"Rate\"],\"fsBGk0\":[\"Balance\"],\"fxRyGG\":[\"fee tier\"],\"g3x+cF\":[\"Service update, please wait and try again\"],\"gz+9Rb\":[\"Gas price is too low, please adjust in your wallet and try again\"],\"h3PbRN\":[\"My Pool Share\"],\"h4RLFN\":[\"RPC node data exception\"],\"h5FVz1\":[\"Estimated transaction time\"],\"h5pjuM\":[\"Collect fees\"],\"h7LgzN\":[\"Connect to your wallet\"],\"hCBYHP\":[\"Total Fee Revenue\"],\"hRWvpI\":[\"Claimed\"],\"hXzOVo\":[\"Next\"],\"hYgDIe\":[\"Create\"],\"hcNa1G\":[\"Token Amount\"],\"hdIg7i\":[\"Select Pool Version\"],\"hom7qf\":[\"Claim\"],\"i3Z+/Z\":[\"Out of range\"],\"iDGO1l\":[\"Disclaimer\"],\"iH8pgl\":[\"Back\"],\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":[\"Enter an amount\"],\"iaocTt\":[\"Ratio\"],\"j2Uisd\":[\"Approving\"],\"jMam5g\":[[\"0\"],\" Balance\"],\"jaH6JH\":[\"Higher than default slippage\"],\"jjuKOj\":[\"Min Price\"],\"juypHV\":[\"Liquidity Providers\"],\"kAC8rT\":[\"High price\"],\"kNeEXg\":[\"Current Price\"],\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":[\"Something went wrong.\"],\"kj3p6e\":[\"Daily Rewards\"],\"ku//5b\":[\"Second\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"Total Swap Volume\"],\"lDgVWA\":[\"Receive\"],\"lJvbHq\":[\"Select Network\"],\"lLbR0m\":[\"Simple, full-range liquidity\"],\"lNYomJ\":[\"AMM V2 Position\"],\"lQ6r7x\":[\"Confirm swap\"],\"lTmG/H\":[\"Minimum Received\"],\"lgE483\":[\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\"],\"lqTDfd\":[\"Slippage Tolerance\"],\"lsg9Mi\":[\"Parameter Settings\"],\"lt8yMa\":[\"Send to:\"],\"luOvdJ\":[\"My Staked\"],\"m16xKo\":[\"Add\"],\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\"],\"mObS+5\":[\"Failed to get price of the token\"],\"mYGY3B\":[\"Date\"],\"mZ4SrP\":[\"Liquidity Pool\"],\"me2dmq\":[\"Value (USD)\"],\"n25Lml\":[\"Depth\"],\"nIrcQi\":[\"No matching pool found\"],\"nTWWCZ\":[\"Low\"],\"nxRg31\":[\"Select pair\"],\"o/5/4c\":[\"Once Mining has started, it cannot be stopped.\"],\"o8aMNm\":[\"Select a liquidity pool\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\"],\"p2jbcE\":[\"Create Pool\"],\"p3607o\":[\"Managing\"],\"p7/w10\":[\"Volume (24H)\"],\"pHQq+U\":[\"Pool Setup\"],\"pKjCsP\":[\"100% use your own funds and enjoy the maximum degree of flexibility.\"],\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":[\"MT Fee\"],\"pY/ok7\":[\"All chains\"],\"pdZiL7\":[\"Current Market Price:\"],\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"Confirming...\"],\"qDhDFK\":[\"Traders\"],\"qK7wuW\":[\"Unable to SETTLE during the cooling-off period\"],\"qLkska\":[\"The setting has been switched to cross chain mode\"],\"qiOIiY\":[\"Buy\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"Total Rewards\"],\"r7ScnQ\":[\"Connect to a wallet\"],\"rAx5u1\":[\"End Time\"],\"rH6vg9\":[\"There is no liquidity data.\"],\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":[\"Detail\"],\"rSayea\":[\"APY\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"Preview\"],\"sCUx8G\":[\"Select Platform\"],\"sIPJGT\":[\"SELECT TOKEN\"],\"sNaLCG\":[\"Add Token\"],\"sTnImq\":[\"Total Liquidity\"],\"sVlqoo\":[\"AMM V3 Position\"],\"sjn3tj\":[\"Slippage Coefficient\"],\"sleulC\":[\"Liquidity Mining\"],\"sxkWRg\":[\"Advanced\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":[\"Initial Price Alert\"],\"t/YqKh\":[\"Remove\"],\"t3d3/V\":[\"ratio is 0\"],\"tKE4Ak\":[\"Cross Chain Summary\"],\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":[\"SafeERC20: low-level call failed. Please contact the DODO team.\"],\"tnRI9r\":[\"Pool Creation Confirmation\"],\"tu/fxg\":[\"Claim fees\"],\"tyGEMJ\":[\"Amounts\"],\"u1tnst\":[\"Create One\"],\"uAQUqI\":[\"Status\"],\"uEoBVI\":[\"Low price\"],\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":[\"Real Time\"],\"udsWDJ\":[\"Unsupported network - switch to trade\"],\"uiuMDr\":[\"Enter parameters to view the yield curve\"],\"v4nCHK\":[\"Paid\"],\"v4wgrk\":[\"Failed to add\"],\"vH2C/2\":[\"Swap\"],\"vLyv1R\":[\"Hide\"],\"vOyUlD\":[\"In range\"],\"vXvgFK\":[\"There is risk of being arbitraged if adding this liquidity.\"],\"vxHMzr\":[\"address\"],\"wSpNR+\":[\"This trading pair does not have enough historical data and has used the default dynamic slippage.\"],\"wckWOP\":[\"Manage\"],\"wdxz7K\":[\"Source\"],\"wmCrk7\":[\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\"],\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":[\"Liquidity Burn Ratio\"],\"x4QVeW\":[\"Percentage to remove\"],\"x6GJ4a\":[\"Max Slippage\"],\"xEbi+8\":[\"User denied transaction signature.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"Copy link\"],\"y4kfSV\":[\"WARNING\"],\"y5rS9U\":[\"Migrate\"],\"yM82Jw\":[\"ForceStop exception\"],\"yQ2kGp\":[\"Load more\"],\"yQE2r9\":[\"Loading\"],\"yXm1vH\":[\"The initial price is different from the current market price, which may cause your pool to be arbitraged\"],\"yY8wAv\":[\"Hours\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":[\"High\"],\"yz7wBu\":[\"Close\"],\"yzjPpo\":[\"Fees will be the same as in most other pools.\"],\"z9t6jM\":[\"Mining Pool\"],\"zA6/Yq\":[\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"Transaction Deadline\"],\"zXCpR0\":[\"Claim Rewards\"],\"zcVtwU\":[\"My Pools (PMM)\"],\"zeSosD\":[\"Starting price\"],\"zga9sT\":[\"OK\"],\"zkFuIm\":[\"Total Rewards=Daily Rewards*Duration\"],\"znqB4T\":[\"Insufficient balance\"],\"zwBp5t\":[\"Private\"],\"zwWKhA\":[\"Learn more\"]}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 0a36fcfe..74cdfdff 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -65,7 +65,7 @@ msgstr "Receive {0}" msgid "{0} pending" msgstr "{0} pending" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:524 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:540 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:362 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:786 msgid "Removing" @@ -136,8 +136,8 @@ msgstr "Start Time" msgid "Dismiss" msgstr "Dismiss" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:309 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:467 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:324 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:483 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:85 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:323 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:659 @@ -149,7 +149,7 @@ msgstr "Pool Type" msgid "Unstaking" msgstr "Unstaking" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:527 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:543 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:365 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:789 msgid "Adding" @@ -223,7 +223,7 @@ msgstr "Pay" msgid "Due to the market condition, market price and estimated price may have a slight difference" msgstr "Due to the market condition, market price and estimated price may have a slight difference" -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:206 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:231 msgid "View more" msgstr "View more" @@ -325,7 +325,7 @@ msgstr "Liquidity" msgid "APR" msgstr "APR" -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:240 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:268 msgid "My rewards" msgstr "My rewards" @@ -484,7 +484,7 @@ msgstr "Amount of token rewards" msgid "No results found" msgstr "No results found" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:463 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:479 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:316 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:655 msgid "Pair" @@ -731,8 +731,8 @@ msgstr "More trade settings" msgid "Insufficient cross-chain fees, need at least {0} {1}" msgstr "Insufficient cross-chain fees, need at least {0} {1}" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:371 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:471 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:386 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:487 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:112 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:214 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:319 @@ -1080,8 +1080,8 @@ msgstr "Stake LP tokens and receive mining rewards." msgid "No LP pools match your criteria" msgstr "No LP pools match your criteria" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:277 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:660 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:292 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:673 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:291 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:898 msgid "Fee rate" @@ -1178,8 +1178,8 @@ msgstr "Position on" msgid "Confirm Cross Chain" msgstr "Confirm Cross Chain" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:392 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:478 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:407 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:494 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:125 msgid "Volume (1D)" msgstr "Volume (1D)" @@ -1286,8 +1286,8 @@ msgstr "Staked" msgid "Start Time" msgstr "Start Time" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:231 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:713 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:246 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:726 #: src/widgets/PoolWidget/PoolList/components/PoolApyTooltip.tsx:190 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:247 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:954 @@ -1693,7 +1693,7 @@ msgstr "Initial Price" msgid "Guide Price" msgstr "Guide Price" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1046 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1059 msgid "Mining Only" msgstr "Mining Only" @@ -1855,6 +1855,10 @@ msgstr "Connect to your wallet" msgid "Total Fee Revenue" msgstr "Total Fee Revenue" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:149 +msgid "Claimed" +msgstr "Claimed" + #: src/components/DateTimePickerInput/components/MobileDateTimePicker.tsx:223 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:47 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:73 @@ -1887,7 +1891,8 @@ msgstr "Select Pool Version" #: src/widgets/MiningWidget/MiningList/operate-area/index.tsx:204 #: src/widgets/MiningWidget/OperateArea/index.tsx:74 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:453 -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:124 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:149 +#: src/widgets/PoolWidget/PoolList/hooks/useClaimLpFeeRewardSubmit.ts:51 msgid "Claim" msgstr "Claim" @@ -2035,8 +2040,8 @@ msgstr "My Staked" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:451 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:79 #: src/widgets/PoolWidget/PoolDetail/index.tsx:219 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:416 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:786 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:431 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:799 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:284 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:591 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1212 @@ -2230,8 +2235,8 @@ msgid "Detail" msgstr "Detail" #: src/widgets/PoolWidget/PoolDetail/components/TitleInfo.tsx:239 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:341 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:474 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:356 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:490 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:100 #: src/widgets/PoolWidget/PoolList/components/TokenListPoolItem.tsx:102 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:348 @@ -2281,8 +2286,8 @@ msgstr "AMM V3 Position" msgid "Slippage Coefficient" msgstr "Slippage Coefficient" -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx:21 -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:181 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx:26 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:206 msgid "Liquidity Mining" msgstr "Liquidity Mining" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index f46b0195..967d6e25 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"滑点系数越小,交易时候的滑点越低,深度越好。\"],\"+Jkdiu\":[\"交易时长:\"],\"+uZnU3\":[\"跨链桥\"],\"/+c6tU\":[\"99% 选择此参数\"],\"/6L4mj\":[\"您的仓位为空\"],\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":[\"累计交易用户\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"交易量\"],\"/jQctM\":[\"至\"],\"/k7Ttv\":[\"获得 \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":[\"提取\"],\"0O1wzf\":[\"卖出\",[\"0\"],\" \",[\"1\"],\",资金池盘口价格涨到 \",[\"2\"]],\"0QDjxt\":[\"余额:\"],\"0RrIzN\":[\"代币选择\"],\"0S8v3W\":[\"开始时间必须晚于当前时间\"],\"0Sw1gZ\":[\"挖矿规则\"],\"0YxDPW\":[\"状态加载中...\"],\"0b0AkA\":[\"* 请注意,资金池创建完成后,费率无法修改\"],\"1+P9RR\":[\"切换至 \",[\"0\"],\" 网络\"],\"1/LP4K\":[[\"tokenB\"],\" 每个 \",[\"tokenA\"]],\"14s9LL\":[\"创建挖矿\"],\"1ABiXc\":[\"添加流动性后,你可以按照 <0>\",[\"0\"],\" 的比例从资金池中获得交易手续费分润。撤出流动性时,可以将手续费一起取出。\"],\"1PQRWr\":[\"开始时间\"],\"1QfxQT\":[\"忽略\"],\"1Qz63U\":[\"类型\"],\"1gWStS\":[\"赎回中\"],\"1yHVE+\":[\"添加\"],\"22Xs8M\":[\"充值比例\"],\"237hSL\":[\"已结束\"],\"2IZBPB\":[\"结束时间必须晚于开始时间\"],\"2vjOqX\":[\"更低的手续费率,可以吸引更多的交易者。\"],\"34w3mT\":[\"单边\"],\"3CsYwD\":[\"选择做市池\"],\"3VUfrF\":[\"选定区间\"],\"3WdxUv\":[\"不再提醒\"],\"3XBvkd\":[\"移除流动性\"],\"3dP8Wx\":[\"输入地址\"],\"3ggd2j\":[\"资金池中资产比例\"],\"4cJ0hF\":[\"奖励代币\"],\"4fL/V7\":[\"支付\"],\"4kY4C4\":[\"由于市场情况不同,市场价格与估算价格可能略有差异。\"],\"4m3nxQ\":[\"查看更多\"],\"4nzwq3\":[\"通过代币或者资金池地址查找\"],\"4ogEAw\":[\"锚定价格\"],\"4vKwIV\":[\"私有池\"],\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":[\"创建时间\"],\"54ffaC\":[\"当前网络与钱包不一致,请在钱包中切换\"],\"5CZbyC\":[\"设置价格区间\"],\"5IHTSS\":[\"全区间\"],\"5Nb8LL\":[\"*每天出块的时间并不是固定的,实际每日奖励数量可能会略有偏差\"],\"5OKrbq\":[\"由于该池使用了PMM算法,与通常的AMM池机制不同,因此初始价格的计算也与AMM不同。\"],\"5Pxzb6\":[\"预计开始区块高度{\",[\"start\"],\"},结束区块高度{\",[\"end\"],\"}。出块时间会上下波动,预计的活动时间和实际会有一定误差。\"],\"5QDjef\":[\"代币数量由初始价格计算。\"],\"5etEUX\":[\"最高价格\"],\"5nL2hY\":[\"质押代币\"],\"6+mYrD\":[\"当前价格冲击\"],\"6UYTy8\":[\"分钟\"],\"6V3Ea3\":[\"已复制\"],\"6XYkjc\":[\"修改参数\"],\"6XgEPi\":[\"小时\"],\"6lss/t\":[\"定价模式\"],\"6y2TB3\":[\"流动性\"],\"70wH1Q\":[\"APR\"],\"71gS06\":[\"我的奖励\"],\"72/M0o\":[\"输入代币符号或地址\"],\"79D0qY\":[\"当前无流动性数据\"],\"7Bj3x9\":[\"失败\"],\"7C/BwI\":[\"社区金库\"],\"7IKPTP\":[\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\"],\"7VpPHA\":[\"确认\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"手续费(24小时)\"],\"7Z4WfS\":[\"每 \",[\"1\"],\" 计 \",[\"0\"],\" \"],\"7m5+6j\":[\"初始代币\"],\"7rpoXw\":[\"该代币在\"],\"7y/8M6\":[\"请在钱包确认\"],\"88dol0\":[\"交易成功率\"],\"8OiU8L\":[\"创建资金池\"],\"8Tg/JR\":[\"自定义\"],\"8XNsbx\":[\"比动态滑点高\"],\"8Z29ZO\":[\"预计服务供应商费用\"],\"93m8jT\":[\"基础手续费\"],\"97jlEV\":[\"LP 资金\"],\"9D2g7k\":[\"DODO 的流动性是连续的,这与UniV3的离散流动性不同。以柱状图展示用来说明不同做市模式下流动性分布的区别。\"],\"9yc9F+\":[\"默认滑点是 \",[\"warnValue\"],\"%,当前滑点设置比默认滑点高,可能会导致最终成交价格较差。\"],\"A1taO8\":[\"搜索\"],\"A23gVF\":[\"参与挖矿获得积分\"],\"AOhRo6\":[\"DODO 提供多种的做市模式以满足不同资产的流动性需要\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR 计算公式:以当前奖励代币价格估算每年奖励价值 / 总挖矿资金\"],\"Active\":[\"进行中\"],\"AeZIvT\":[\"您将会收到\"],\"AghcDJ\":[\"价格冲击超过了你设置的滑点, 请提高滑点后重试\"],\"All Mining\":[\"全部挖矿\"],\"Amount of token rewards\":[\"当前挖矿获得的代币奖励\"],\"AxPAXW\":[\"未找到匹配结果\"],\"AxdOHo\":[\"交易对\"],\"B0/2ea\":[\"秒\"],\"B0YDoE\":[\"是的,我确定\"],\"B3mhDR\":[\"添加流动性后,可以获取 LP 代币。质押 LP 代币,开启挖矿。\"],\"BRi+RY\":[\"添加更多流动性\"],\"C1mcuF\":[\"此众筹池已被其他地址结算\"],\"C1qIFl\":[\"做市资金\"],\"CK1KXz\":[\"全部\"],\"CKyk7Q\":[\"返回\"],\"CMHmbm\":[\"滑点\"],\"CP1UAq\":[\"滑点系数需要大于等于 0 且小于等于 0.1\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"计算方式=当前单个区块奖励×24h出块数\"],\"CeLrge\":[\"盘口中间价\"],\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":[\"设置挖矿资金池\"],\"Copied\":[\"已复制\"],\"D1bhHv\":[\"资金池价格固定\"],\"D87pha\":[\"已关闭\"],\"DPfwMq\":[\"完成\"],\"DPi/hO\":[\"适用于价格相对稳定的交易对\"],\"DTFrUE\":[\"授权 \",[\"0\"],\" 中\"],\"DWd30U\":[\"当前价格\"],\"DZULmp\":[\"价格\"],\"Da1+Da\":[\"没有查到资金池,建议您切换网络后重试\"],\"Daily Rewards\":[\"每日奖励\"],\"Dt4Hc3\":[\"双币做市挖矿\"],\"Du6bPw\":[\"合约地址\"],\"DupCvC\":[\"添加成功\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"添加初始流动性\"],\"E6MqGy\":[\"添加做市资金\"],\"EQs1sJ\":[\"最低价格\"],\"ESQO1L\":[\"资金池地址\"],\"EU3wU4\":[\"手续费费率\"],\"EUBGvH\":[\"是否确认切换到另一个链?\"],\"EatqP4\":[\"交易记录\"],\"EcVqOR\":[[\"0\"],\" 已提交\"],\"Edit\":[\"编辑\"],\"Eif7f6\":[\"PMM 资金池\"],\"EkAv3P\":[\"集中流动性,更高的资金利用率\"],\"End Time\":[\"结束时间\"],\"Ended\":[\"已结束\"],\"Enslfm\":[\"目标\"],\"EpjpP9\":[\"已释放奖励\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"新上线的挖矿池,存入任意流动性后即可开始统计APR\"],\"F+sxb9\":[\"未授权\"],\"F18WP3\":[\"参数\"],\"F8yRdq\":[\"更多设置\"],\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"加仓\"],\"FQfStS\":[\"模拟器\"],\"FRBvjQ\":[\"交易进行中\"],\"Fdp03t\":[\"在\"],\"FrP5tr\":[\"适用于价格波动在2%以内的稳定币\"],\"GAypnX\":[\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"GGPOuT\":[\"设置当前中间价\"],\"GGWsTU\":[\"已撤单\"],\"GSt7YT\":[\"费率必须在 0.01% 到 10% 之间\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"返回\"],\"Gr2anW\":[\"交易用户 (24小时)\"],\"Gs02OK\":[\"我的仓位\"],\"H7OUPr\":[\"天\"],\"H9HlDe\":[\"分\"],\"HGf8fG\":[\"你可以设置单边池的最小卖出价格。\"],\"HTX2HV\":[\"最低收到\"],\"HXBqgG\":[\"价格输入无效\"],\"HkWY45\":[\"当前网络不支持此池类型,您可以在钱包中切换网络来创建它\"],\"HuVZMK\":[\"天\"],\"I0LXan\":[\"价格滑点:\",[\"0\"]],\"I0yi1d\":[\"充值比例由池内流动资产的比例决定,该比例不代表资产之间的兑换价格\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"市场深度不足,无法统计【{\",[\"symbols\"],\"}代币】的美元价值\"],\"Invite\":[\"邀请\"],\"IwiTcw\":[\"该池的价格不在你选定的区间内。你的仓位目前不能赚取交易手续费。\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"连接中...\"],\"J39pAJ\":[\"额外手续费\"],\"J7M/DA\":[\"锚定池\"],\"JR7wWw\":[\"回归目标\"],\"JRgkmT\":[\"调整前结束释放时间\"],\"JYKRJS\":[\"质押\"],\"JaeUyE\":[\"资金池报价与 DODO 智能路由价格相差 \",[\"lqAndDodoCompareText\"]],\"JdNn1Y\":[\"获取最优价格中...\"],\"Jh223O\":[\"选定区间无效,最低价格必须低于最高价格。\"],\"JlIjZf\":[\"做市用户\"],\"Joa5Dk\":[\"*收取费用将领取当前已分配手续费。\"],\"JuzN3b\":[\"关联众筹建池\"],\"K/Ay/d\":[\"预览交易\"],\"K/PgcA\":[\"选择跨链桥\"],\"K8rjE/\":[\"调整前每日释放奖励\"],\"KAbREa\":[\"· 不支持通缩代币\"],\"KAbcm2\":[\"成功\"],\"KAmxpM\":[\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"KRnA5J\":[\"修改资金池参数\"],\"Kb3KaW\":[\"任意比例\"],\"KkjUUb\":[\"创建完成后,您可以随时修改做市价格,适用于资产锚定价可能出现变化的情况\"],\"KlvBGJ\":[\"选择代币\"],\"KsqhWn\":[\"质押中\"],\"KvG1xW\":[\"领取中\"],\"L37FfW\":[\"创建 AMM V2 仓位\"],\"L4nQwl\":[\"适用于价格波动在0.5%以内的稳定币\"],\"LHxwaD\":[\"手续费必须大于 \",[\"0\"],\"%\"],\"LQ0J1B\":[\"灵活自定义,高度掌控流动性\"],\"LQU+Dm\":[\"风险警示\"],\"LVzIav\":[\"池子价格可调整\"],\"Lfkqg7\":[\"质押指定代币获得挖矿奖励\"],\"LhMjLm\":[\"时间\"],\"LtI9AS\":[\"所有者\"],\"M9dIDb\":[\"锚定价格是指两个代币资产之间的汇率,其中一个资产的价值由另一个锚定。例如,美元和 USDT 之间的汇率是 1。\"],\"MU9s7M\":[\"充值数额\"],\"MXQodB\":[\"禁止多跳\"],\"MZPP7t\":[\"当前仓位流动性为 0 ,没有手续费收入。\"],\"Mining Pool\":[\"挖矿合约地址\"],\"MvFS/h\":[\"还没流动性池?来创建一个!\"],\"My Mining\":[\"我的挖矿\"],\"My Pools\":[\"我的资金池\"],\"NEQTCn\":[\"资金池份额\"],\"NSCBTb\":[\"设置已切换至闪兑模式\"],\"NVAuTg\":[\"没有报价\"],\"NXZdrO\":[\"我的资金池份额\"],\"NgeSlx\":[\"查看详情\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"使用推荐的比例\"],\"Nk6ddN\":[\"质押 做市 LP 代币,获得挖矿奖励\"],\"No LP pools match your criteria\":[\"没有找到符合条件的挖矿项目\"],\"O6RUgz\":[\"手续费费率\"],\"OBdohg\":[\"添加流动性\"],\"OFjZGo\":[\"撤出\"],\"OJOe+K\":[\"适用于大部分主流币\"],\"OKZP2O\":[\"若截止前无任何参与者,则挖矿奖励任何人无法提取。\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"你的仓位将会显示在这里\"],\"OauUE6\":[\"获取价格中...\"],\"OfhWJH\":[\"重置\"],\"OgKD6h\":[\"最优价格\"],\"OjaWXx\":[\"新上线\"],\"OnDEky\":[\"LP 手续费\"],\"OuSseo\":[\"比例设定\"],\"P+K/3O\":[\"确认中\"],\"P4iKEj\":[\"初始价格需要大于 \",[\"min\"],\",小于 100,000,000\"],\"PIYEqF\":[\"按照数量\"],\"PLUB/s\":[\"手续费\"],\"PPqGw9\":[\"适用于锚定资产,没有波动\"],\"PVa3KL\":[\"仓位在\"],\"PZqJog\":[\"确认跨链交易\"],\"Q8W3SC\":[\"交易量(1天)\"],\"QNWt8A\":[\"预计时间\"],\"QNrpkx\":[\"类似 AMM 做市策略,适用于大多数币种\"],\"QR4/RH\":[\"交易预览\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"你也将从这个池子里领取所有奖励。\"],\"QtgfjM\":[\"资金池创建者可以通过修改作市价格参数来调整流动性分布。 <0>了解更多\"],\"R7D79P\":[\"币对无效\"],\"R9Khdg\":[\"自动\"],\"Remaining rewards/Total\":[\"剩余奖励/总奖励\"],\"Rewards\":[\"奖励代币\"],\"RtKKbA\":[\"上一步\"],\"RvYEUJ\":[\"类似于 Curve 的做市策略,适用于合成资产、按照稳定比例兑换的资产\"],\"RxHSET\":[\"LP 余额:\"],\"S3piC2\":[\"交易哈希:\"],\"S8G1qk\":[\"单边\"],\"SXnevP\":[\"预览跨链交易\"],\"SbBMxj\":[\"资金池份额\"],\"Search by address\":[\"输入地址\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"输入百分比\"],\"Staked\":[\"已质押\"],\"Start Time\":[\"开始时间\"],\"Sti4vy\":[\"挖矿\"],\"T+qgFw\":[\"价格冲击\"],\"T0Y2+3\":[\"选择代币\"],\"T5ExxV\":[\"添加流动性获得积分\"],\"TFOxRM\":[\"分钟\"],\"TGi+jm\":[\"文档\"],\"TJBHlP\":[\"标准\"],\"TP9/K5\":[\"代币\"],\"TTlkRL\":[\"比动态滑点低\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP 代币\"],\"TizaRy\":[\"钱包不兼容\"],\"TvH4Ym\":[\"买入 \",[\"0\"],\" \",[\"1\"],\", 资金池价格下降到 \",[\"2\"]],\"Tz0i8g\":[\"设置\"],\"UE2beD\":[\"创建者\"],\"UN0Nip\":[\"奖励规则\"],\"UPXmW+\":[\"交易者\"],\"URmyfc\":[\"详情\"],\"UbRKMZ\":[\"执行中\"],\"Upcoming\":[\"待开始\"],\"Users\":[\"用户\"],\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":[\"秒\"],\"V38hNQ\":[\"单币质押挖矿\"],\"VXTSOE\":[\"适用于大部分交易对\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"服务遇到了一些问题...<0>尝试刷新\"],\"WI3lQ1\":[\"点击选择\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"选择代币\"],\"WYqq5A\":[\"已结束挖矿\"],\"WgTuci\":[\"你的仓位将在该价格全部由 \",[\"0\"],\" 组成\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"补充奖励时,单个区块奖励数量可能会有所调整\"],\"X6T02b\":[\"必须先初始化该资金池,才能添加流动性。要初始化,请选择池的起价。然后,输入流动性价格范围和充值金额。由于初始化交易,Gas 费将比通常高。\"],\"XPiFIY\":[\"是否可以更改资金池报价\"],\"XeovX3\":[\"交易详情\"],\"Xpkm7d\":[\"无 ForceStop 访问权限\"],\"Y0Knz4\":[\"只使用该交易对下的资金池,不会使用第三个币种跳转。\"],\"Y7rVy0\":[\"手续费率\"],\"Y9QDtD\":[\"您正在修改私有池的流动性。这是一项自由度极高的操作,有可能造成资金流入/流出,也有可能造成市场价格变化。请确保您清楚每一项修改的含义。\"],\"YA4hwj\":[\"价格区间\"],\"YG004A\":[[\"0\"],\" 已充值\"],\"YHc3B+\":[\"我的流动性\"],\"YHpbe1\":[\"对于\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" 价格差\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"您没有参与任何挖矿项目\"],\"You have not create any mining\":[\"暂未创建任何挖矿\"],\"Z033WN\":[\"累计手续费\"],\"Z5HWHd\":[\"在\"],\"Z7ZXbT\":[\"代币授权\"],\"Z8lGw6\":[\"份额\"],\"ZXvy7b\":[\"由 Widget 设置的额外路由费用\"],\"ZgtZpB\":[\"请重新设置开始时间,当前的设置时间太往前。\"],\"ZhEBp4\":[\"当前资金池价格\"],\"ZlKTEh\":[\"奖励 \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" 你提供的初始流动性会被燃烧。<1/>提供的资产比例越接近推荐比例 (\",[\"recommendRatioText\"],\"),燃烧比例越少。\"],\"Zm56FI\":[\"最大滑点不能超过50%\"],\"a1AzKr\":[\"适用于新资产发行,为其提供卖盘流动性\"],\"a7u1N9\":[\"价格\"],\"aGKLPO\":[\"当前公链网络支持新资金池模型\"],\"aIvv/z\":[\"该资金池的价格在你选定的区间内。你的仓位目前正在赚取手续费。\"],\"aM1tos\":[\"正在创建资金池\"],\"ab98Hp\":[\"创建者 \",[\"0\"],\" \"],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"分钟\"],\"az8lvo\":[\"关\"],\"b+KjnH\":[\"在市场价格进入到你的价格区间之前,您的仓位不能赚取交易手续费。\"],\"b2jAb+\":[\"每\"],\"bC0iyq\":[\"适用于价格波动在10%以内的稳定币\"],\"bEsfUQ\":[\"确认提交\"],\"bQ3cKo\":[\"通过代币筛选,然后选择做市池\"],\"bUUVED\":[\"资产\"],\"bXp9u3\":[\"手续费\"],\"bwSQI0\":[\"供应\"],\"c4miqE\":[\"资金池份额\"],\"c6TMm0\":[\"挖矿类型\"],\"cDWXuq\":[\"结算者\"],\"cJtosk\":[\"移除流动性\"],\"cOvZFM\":[\"动态\"],\"cmUrtC\":[\"查看教程\"],\"cnGeoo\":[\"删除\"],\"cnbRVW\":[\"初始价格 \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"初始价格\"],\"d8YnVj\":[\"指导价\"],\"dAXusZ\":[\"仅挖矿\"],\"dEgA5A\":[\"取消\"],\"dI46oG\":[\"自动切换网络\"],\"dJqd5x\":[\"获取 \",[\"tokenSymbol\"]],\"dUdltF\":[\"领取\"],\"dmiCGN\":[\"选择币对\"],\"dqWPbT\":[\"我已经阅读、理解并同意 <0>服务条款\"],\"dzV+zO\":[\"修改信息确认\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"小贴士:\"],\"eE0JZ4\":[\"类型\"],\"eK0eiF\":[\"初始资产比例\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"编辑\"],\"eTUF28\":[\"分钟\"],\"eVZ7bY\":[\"隐藏 TVL=0 的池子\"],\"em6LzM\":[\"交易被拒绝.\"],\"evmVGu\":[\"创建者 \",[\"0\"]],\"fKYdE9\":[\"适用于价格波动较大的交易对\"],\"fSFt4a\":[\"币对\"],\"fZ5Vnu\":[\"获得\"],\"fZFkP1\":[\"我的资金池\"],\"fgGids\":[\"授权 \",[\"0\"]],\"fqDzSu\":[\"价格\"],\"fsBGk0\":[\"余额\"],\"fxRyGG\":[\"手续费费率\"],\"g3x+cF\":[\"服务升级中, 请等待或重试\"],\"gz+9Rb\":[\"Gas 价格过低, 请调整后重试\"],\"h3PbRN\":[\"我的资金池份额\"],\"h4RLFN\":[\"RPC节点异常\"],\"h5FVz1\":[\"预计交易时长\"],\"h5pjuM\":[\"收取手续费\"],\"h7LgzN\":[\"连接钱包\"],\"hCBYHP\":[\"总手续费收入\"],\"hXzOVo\":[\"下一步\"],\"hYgDIe\":[\"创建\"],\"hcNa1G\":[\"代币数量\"],\"hdIg7i\":[\"选择模式\"],\"hom7qf\":[\"领取\"],\"i3Z+/Z\":[\"区间外\"],\"iDGO1l\":[\"免责声明\"],\"iH8pgl\":[\"返回\"],\"iLj1a9\":[\"动态滑点为 \",[\"recommendSlippage\"],\"%,当前的滑点设置高于动态滑点,这意味着你该交易的最终成交价格会比较差。\"],\"iPMIoT\":[\"输入代币数量\"],\"iaocTt\":[\"比例\"],\"j2Uisd\":[\"授权中\"],\"jMam5g\":[[\"0\"],\" 余额\"],\"jaH6JH\":[\"比默认滑点高\"],\"jjuKOj\":[\"最低价\"],\"juypHV\":[\"做市用户\"],\"kAC8rT\":[\"最高价\"],\"kNeEXg\":[\"当前价格\"],\"kdzjmC\":[\"中间价必须大于 \",[\"min\"],\",小于 100,000,000\"],\"kf83Ld\":[\"发生异常错误.\"],\"kj3p6e\":[\"每日奖励\"],\"ku//5b\":[\"秒\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"累计交易量\"],\"lDgVWA\":[\"接收\"],\"lJvbHq\":[\"选择网络\"],\"lLbR0m\":[\"简单的全价格区间作市资金池\"],\"lNYomJ\":[\"AMM V2 仓位\"],\"lQ6r7x\":[\"确认交易\"],\"lTmG/H\":[\"最低收到\"],\"lgE483\":[\"创建完成后,该价格不可更改,适用于ETH-WETH等刚兑资产\"],\"lqTDfd\":[\"滑点\"],\"lsg9Mi\":[\"设置参数\"],\"lt8yMa\":[\"发送至:\"],\"luOvdJ\":[\"已质押\"],\"m16xKo\":[\"添加\"],\"m6RmA/\":[[\"0\"],\" 余额不足\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"动态滑点是由 DODO 团队通过分析历史交易计算得出。\"],\"mObS+5\":[\"无法获取该币种价格\"],\"mYGY3B\":[\"日期\"],\"mZ4SrP\":[\"流动性资金池\"],\"me2dmq\":[\"价值(美元)\"],\"n25Lml\":[\"深度\"],\"nIrcQi\":[\"没有找到结果\"],\"nTWWCZ\":[\"低\"],\"nxRg31\":[\"选择币对\"],\"o/5/4c\":[\"挖矿一旦开始,无法终止。\"],\"o8aMNm\":[\"查找资金池\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"请勿选择非标准ERC20代币,可能导致未知错误!\"],\"p2jbcE\":[\"创建资金池\"],\"p3607o\":[\"操作中\"],\"p7/w10\":[\"交易量(24小时)\"],\"pHQq+U\":[\"设置资金池\"],\"pKjCsP\":[\"全部使用你的资金,创建者享有最大程度的调整参数的权限\"],\"pQJBKk\":[\"提供的资产比例越接近推荐比例(\",[\"phumensratiotext\"],\"),燃烧的部分越小。\"],\"pSQ1lM\":[\"MT 手续费\"],\"pY/ok7\":[\"所有链\"],\"pdZiL7\":[\"市价:\"],\"peTryP\":[\"当前不支持 \",[\"0\"],\"-\",[\"1\"],\" 币对,请重新选择。\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"确认中\"],\"qDhDFK\":[\"交易用户\"],\"qK7wuW\":[\"在冷静期无法进行清算\"],\"qLkska\":[\"设置已切换到跨链桥交易模式\"],\"qiOIiY\":[\"购买\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"总奖励\"],\"r7ScnQ\":[\"连接钱包\"],\"rAx5u1\":[\"结束时间\"],\"rH6vg9\":[\"当前没有流动性数据\"],\"rQ9c+8\":[\"当前交易数量是预估的结果。如果价格变化超过 \",[\"0\"],\",你的交易将终止。\"],\"rRDi3Y\":[\"详情\"],\"rSayea\":[\"预估年化(APY)\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"预览\"],\"sCUx8G\":[\"选择平台\"],\"sIPJGT\":[\"选择代币\"],\"sNaLCG\":[\"添加代币\"],\"sTnImq\":[\"总资金\"],\"sVlqoo\":[\"AMM V3 仓位\"],\"sjn3tj\":[\"滑点系数\"],\"sleulC\":[\"流动性挖矿\"],\"sxkWRg\":[\"高级\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" 资金池代币\"],\"t+LmjM\":[\"初始价格提示\"],\"t/YqKh\":[\"提取\"],\"t3d3/V\":[\"比例是 0\"],\"tKE4Ak\":[\"跨链桥概览\"],\"tMMG40\":[[\"0\"],\"% 手续费费率\"],\"tMVAXL\":[\"SafeERC20:low-level call failed,请联系DODO团队解决。\"],\"tnRI9r\":[\"确认创建资金池\"],\"tu/fxg\":[\"领取手续费\"],\"tyGEMJ\":[\"数量\"],\"u1tnst\":[\"创建一个\"],\"uAQUqI\":[\"状态\"],\"uEoBVI\":[\"最低价\"],\"uaKP0s\":[\"与 DODO \",[\"lqanddodocomparetext\"],\" 的报价不同。\"],\"ubzjDN\":[\"实时数据\"],\"udsWDJ\":[\"未支持网络 - 请切换后进行交易\"],\"uiuMDr\":[\"输入参数查看做市模拟图\"],\"v4nCHK\":[\"支付\"],\"v4wgrk\":[\"添加失败\"],\"vH2C/2\":[\"交易\"],\"vLyv1R\":[\"隐藏\"],\"vOyUlD\":[\"在区间内\"],\"vXvgFK\":[\"添加资金有可能会被套利,请谨慎操作。\"],\"vxHMzr\":[\"合约地址\"],\"wSpNR+\":[\"该交易对没有足够的历史交易数据,已使用默认滑点值\"],\"wckWOP\":[\"管理\"],\"wdxz7K\":[\"源\"],\"wmCrk7\":[\"摸可以修改交易的截止日期,也就是链上处理交易的最长时间。请注意,在链上处理期间市场价格可能会发生变化,这可能会导致你的交易会以较低的价格被执行。\"],\"wtjDAR\":[[\"0\"],\" 授权中\"],\"x3muNy\":[\"流动性燃烧比例\"],\"x4QVeW\":[\"按照比例\"],\"x6GJ4a\":[\"最大滑点\"],\"xEbi+8\":[\"用户拒绝交易签名.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"复制链接\"],\"y4kfSV\":[\"警告\"],\"y5rS9U\":[\"迁移\"],\"yM82Jw\":[\"ForceStop 异常\"],\"yQ2kGp\":[\"更多\"],\"yQE2r9\":[\"等待中\"],\"yXm1vH\":[\"初始价格与当前市场价之间存在价差,有可能被搬砖套利,造成资产损失。\"],\"yY8wAv\":[\"小时\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"动态滑点是 \",[\"recommendSlippage\"],\"%, 当前的滑点设置可能会增加交易失败率。\"],\"yx/fMc\":[\"高\"],\"yz7wBu\":[\"关闭\"],\"yzjPpo\":[\"适用于稳定币\"],\"z9t6jM\":[\"挖矿合约地址\"],\"zA6/Yq\":[\"为避免奖励代币的损失,请确保至少存在 1 名用户参与挖矿。\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"交易截止时间\"],\"zXCpR0\":[\"领取奖励\"],\"zcVtwU\":[\"我的资金池 (PMM)\"],\"zeSosD\":[\"初始价格\"],\"zga9sT\":[\"好的\"],\"zkFuIm\":[\"总奖励 = 每日奖励数量 * 时长\"],\"znqB4T\":[\"余额不足\"],\"zwBp5t\":[\"私有池\"],\"zwWKhA\":[\"了解更多\"]}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":[\"滑点系数越小,交易时候的滑点越低,深度越好。\"],\"+Jkdiu\":[\"交易时长:\"],\"+uZnU3\":[\"跨链桥\"],\"/+c6tU\":[\"99% 选择此参数\"],\"/6L4mj\":[\"您的仓位为空\"],\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":[\"累计交易用户\"],\"/POTVq\":[\"Token Info\"],\"/cF7Rs\":[\"交易量\"],\"/jQctM\":[\"至\"],\"/k7Ttv\":[\"获得 \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":[\"提取\"],\"0O1wzf\":[\"卖出\",[\"0\"],\" \",[\"1\"],\",资金池盘口价格涨到 \",[\"2\"]],\"0QDjxt\":[\"余额:\"],\"0RrIzN\":[\"代币选择\"],\"0S8v3W\":[\"开始时间必须晚于当前时间\"],\"0Sw1gZ\":[\"挖矿规则\"],\"0YxDPW\":[\"状态加载中...\"],\"0b0AkA\":[\"* 请注意,资金池创建完成后,费率无法修改\"],\"1+P9RR\":[\"切换至 \",[\"0\"],\" 网络\"],\"1/LP4K\":[[\"tokenB\"],\" 每个 \",[\"tokenA\"]],\"14s9LL\":[\"创建挖矿\"],\"1ABiXc\":[\"添加流动性后,你可以按照 <0>\",[\"0\"],\" 的比例从资金池中获得交易手续费分润。撤出流动性时,可以将手续费一起取出。\"],\"1PQRWr\":[\"开始时间\"],\"1QfxQT\":[\"忽略\"],\"1Qz63U\":[\"类型\"],\"1gWStS\":[\"赎回中\"],\"1yHVE+\":[\"添加\"],\"22Xs8M\":[\"充值比例\"],\"237hSL\":[\"已结束\"],\"2IZBPB\":[\"结束时间必须晚于开始时间\"],\"2vjOqX\":[\"更低的手续费率,可以吸引更多的交易者。\"],\"34w3mT\":[\"单边\"],\"3CsYwD\":[\"选择做市池\"],\"3VUfrF\":[\"选定区间\"],\"3WdxUv\":[\"不再提醒\"],\"3XBvkd\":[\"移除流动性\"],\"3dP8Wx\":[\"输入地址\"],\"3ggd2j\":[\"资金池中资产比例\"],\"4cJ0hF\":[\"奖励代币\"],\"4fL/V7\":[\"支付\"],\"4kY4C4\":[\"由于市场情况不同,市场价格与估算价格可能略有差异。\"],\"4m3nxQ\":[\"查看更多\"],\"4nzwq3\":[\"通过代币或者资金池地址查找\"],\"4ogEAw\":[\"锚定价格\"],\"4vKwIV\":[\"私有池\"],\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":[\"创建时间\"],\"54ffaC\":[\"当前网络与钱包不一致,请在钱包中切换\"],\"5CZbyC\":[\"设置价格区间\"],\"5IHTSS\":[\"全区间\"],\"5Nb8LL\":[\"*每天出块的时间并不是固定的,实际每日奖励数量可能会略有偏差\"],\"5OKrbq\":[\"由于该池使用了PMM算法,与通常的AMM池机制不同,因此初始价格的计算也与AMM不同。\"],\"5Pxzb6\":[\"预计开始区块高度{\",[\"start\"],\"},结束区块高度{\",[\"end\"],\"}。出块时间会上下波动,预计的活动时间和实际会有一定误差。\"],\"5QDjef\":[\"代币数量由初始价格计算。\"],\"5etEUX\":[\"最高价格\"],\"5nL2hY\":[\"质押代币\"],\"6+mYrD\":[\"当前价格冲击\"],\"6UYTy8\":[\"分钟\"],\"6V3Ea3\":[\"已复制\"],\"6XYkjc\":[\"修改参数\"],\"6XgEPi\":[\"小时\"],\"6lss/t\":[\"定价模式\"],\"6y2TB3\":[\"流动性\"],\"70wH1Q\":[\"APR\"],\"71gS06\":[\"我的奖励\"],\"72/M0o\":[\"输入代币符号或地址\"],\"79D0qY\":[\"当前无流动性数据\"],\"7Bj3x9\":[\"失败\"],\"7C/BwI\":[\"社区金库\"],\"7IKPTP\":[\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\"],\"7VpPHA\":[\"确认\"],\"7X+IbB\":[\"Powered by DODO protocol\"],\"7X40pG\":[\"手续费(24小时)\"],\"7Z4WfS\":[\"每 \",[\"1\"],\" 计 \",[\"0\"],\" \"],\"7m5+6j\":[\"初始代币\"],\"7rpoXw\":[\"该代币在\"],\"7y/8M6\":[\"请在钱包确认\"],\"88dol0\":[\"交易成功率\"],\"8OiU8L\":[\"创建资金池\"],\"8Tg/JR\":[\"自定义\"],\"8XNsbx\":[\"比动态滑点高\"],\"8Z29ZO\":[\"预计服务供应商费用\"],\"93m8jT\":[\"基础手续费\"],\"97jlEV\":[\"LP 资金\"],\"9D2g7k\":[\"DODO 的流动性是连续的,这与UniV3的离散流动性不同。以柱状图展示用来说明不同做市模式下流动性分布的区别。\"],\"9yc9F+\":[\"默认滑点是 \",[\"warnValue\"],\"%,当前滑点设置比默认滑点高,可能会导致最终成交价格较差。\"],\"A1taO8\":[\"搜索\"],\"A23gVF\":[\"参与挖矿获得积分\"],\"AOhRo6\":[\"DODO 提供多种的做市模式以满足不同资产的流动性需要\"],\"APR\":[\"APR\"],\"APR = Reward Token Value per Year / TVL\":[\"APR 计算公式:以当前奖励代币价格估算每年奖励价值 / 总挖矿资金\"],\"Active\":[\"进行中\"],\"AeZIvT\":[\"您将会收到\"],\"AghcDJ\":[\"价格冲击超过了你设置的滑点, 请提高滑点后重试\"],\"All Mining\":[\"全部挖矿\"],\"Amount of token rewards\":[\"当前挖矿获得的代币奖励\"],\"AxPAXW\":[\"未找到匹配结果\"],\"AxdOHo\":[\"交易对\"],\"B0/2ea\":[\"秒\"],\"B0YDoE\":[\"是的,我确定\"],\"B3mhDR\":[\"添加流动性后,可以获取 LP 代币。质押 LP 代币,开启挖矿。\"],\"BRi+RY\":[\"添加更多流动性\"],\"C1mcuF\":[\"此众筹池已被其他地址结算\"],\"C1qIFl\":[\"做市资金\"],\"CK1KXz\":[\"全部\"],\"CKyk7Q\":[\"返回\"],\"CMHmbm\":[\"滑点\"],\"CP1UAq\":[\"滑点系数需要大于等于 0 且小于等于 0.1\"],\"Calculation = current rewards for a single block × number of blocks in 24h\":[\"计算方式=当前单个区块奖励×24h出块数\"],\"CeLrge\":[\"盘口中间价\"],\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":[\"设置挖矿资金池\"],\"Copied\":[\"已复制\"],\"D1bhHv\":[\"资金池价格固定\"],\"D87pha\":[\"已关闭\"],\"DPfwMq\":[\"完成\"],\"DPi/hO\":[\"适用于价格相对稳定的交易对\"],\"DTFrUE\":[\"授权 \",[\"0\"],\" 中\"],\"DWd30U\":[\"当前价格\"],\"DZULmp\":[\"价格\"],\"Da1+Da\":[\"没有查到资金池,建议您切换网络后重试\"],\"Daily Rewards\":[\"每日奖励\"],\"Dt4Hc3\":[\"双币做市挖矿\"],\"Du6bPw\":[\"合约地址\"],\"DupCvC\":[\"添加成功\"],\"E0yL1z\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"E4LM3N\":[\"添加初始流动性\"],\"E6MqGy\":[\"添加做市资金\"],\"EQs1sJ\":[\"最低价格\"],\"ESQO1L\":[\"资金池地址\"],\"EU3wU4\":[\"手续费费率\"],\"EUBGvH\":[\"是否确认切换到另一个链?\"],\"EatqP4\":[\"交易记录\"],\"EcVqOR\":[[\"0\"],\" 已提交\"],\"Edit\":[\"编辑\"],\"Eif7f6\":[\"PMM 资金池\"],\"EkAv3P\":[\"集中流动性,更高的资金利用率\"],\"End Time\":[\"结束时间\"],\"Ended\":[\"已结束\"],\"Enslfm\":[\"目标\"],\"EpjpP9\":[\"已释放奖励\"],\"Es4ccw\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"Ew+VGo\":[\"新上线的挖矿池,存入任意流动性后即可开始统计APR\"],\"F+sxb9\":[\"未授权\"],\"F18WP3\":[\"参数\"],\"F8yRdq\":[\"更多设置\"],\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":[\"TVL\"],\"FQ4aT9\":[\"加仓\"],\"FQfStS\":[\"模拟器\"],\"FRBvjQ\":[\"交易进行中\"],\"Fdp03t\":[\"在\"],\"FrP5tr\":[\"适用于价格波动在2%以内的稳定币\"],\"GAypnX\":[\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"GGPOuT\":[\"设置当前中间价\"],\"GGWsTU\":[\"已撤单\"],\"GSt7YT\":[\"费率必须在 0.01% 到 10% 之间\"],\"GhrVog\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"Go back\":[\"返回\"],\"Gr2anW\":[\"交易用户 (24小时)\"],\"Gs02OK\":[\"我的仓位\"],\"H7OUPr\":[\"天\"],\"H9HlDe\":[\"分\"],\"HGf8fG\":[\"你可以设置单边池的最小卖出价格。\"],\"HTX2HV\":[\"最低收到\"],\"HXBqgG\":[\"价格输入无效\"],\"HkWY45\":[\"当前网络不支持此池类型,您可以在钱包中切换网络来创建它\"],\"HuVZMK\":[\"天\"],\"I0LXan\":[\"价格滑点:\",[\"0\"]],\"I0yi1d\":[\"充值比例由池内流动资产的比例决定,该比例不代表资产之间的兑换价格\"],\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"市场深度不足,无法统计【{\",[\"symbols\"],\"}代币】的美元价值\"],\"Invite\":[\"邀请\"],\"IwiTcw\":[\"该池的价格不在你选定的区间内。你的仓位目前不能赚取交易手续费。\"],\"J/hVSQ\":[[\"0\"]],\"J28zul\":[\"连接中...\"],\"J39pAJ\":[\"额外手续费\"],\"J7M/DA\":[\"锚定池\"],\"JR7wWw\":[\"回归目标\"],\"JRgkmT\":[\"调整前结束释放时间\"],\"JYKRJS\":[\"质押\"],\"JaeUyE\":[\"资金池报价与 DODO 智能路由价格相差 \",[\"lqAndDodoCompareText\"]],\"JdNn1Y\":[\"获取最优价格中...\"],\"Jh223O\":[\"选定区间无效,最低价格必须低于最高价格。\"],\"JlIjZf\":[\"做市用户\"],\"Joa5Dk\":[\"*收取费用将领取当前已分配手续费。\"],\"JuzN3b\":[\"关联众筹建池\"],\"K/Ay/d\":[\"预览交易\"],\"K/PgcA\":[\"选择跨链桥\"],\"K8rjE/\":[\"调整前每日释放奖励\"],\"KAbREa\":[\"· 不支持通缩代币\"],\"KAbcm2\":[\"成功\"],\"KAmxpM\":[\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\"],\"KRnA5J\":[\"修改资金池参数\"],\"Kb3KaW\":[\"任意比例\"],\"KkjUUb\":[\"创建完成后,您可以随时修改做市价格,适用于资产锚定价可能出现变化的情况\"],\"KlvBGJ\":[\"选择代币\"],\"KsqhWn\":[\"质押中\"],\"KvG1xW\":[\"领取中\"],\"L37FfW\":[\"创建 AMM V2 仓位\"],\"L4nQwl\":[\"适用于价格波动在0.5%以内的稳定币\"],\"LHxwaD\":[\"手续费必须大于 \",[\"0\"],\"%\"],\"LQ0J1B\":[\"灵活自定义,高度掌控流动性\"],\"LQU+Dm\":[\"风险警示\"],\"LVzIav\":[\"池子价格可调整\"],\"Lfkqg7\":[\"质押指定代币获得挖矿奖励\"],\"LhMjLm\":[\"时间\"],\"LtI9AS\":[\"所有者\"],\"M9dIDb\":[\"锚定价格是指两个代币资产之间的汇率,其中一个资产的价值由另一个锚定。例如,美元和 USDT 之间的汇率是 1。\"],\"MU9s7M\":[\"充值数额\"],\"MXQodB\":[\"禁止多跳\"],\"MZPP7t\":[\"当前仓位流动性为 0 ,没有手续费收入。\"],\"Mining Pool\":[\"挖矿合约地址\"],\"MvFS/h\":[\"还没流动性池?来创建一个!\"],\"My Mining\":[\"我的挖矿\"],\"My Pools\":[\"我的资金池\"],\"NEQTCn\":[\"资金池份额\"],\"NSCBTb\":[\"设置已切换至闪兑模式\"],\"NVAuTg\":[\"没有报价\"],\"NXZdrO\":[\"我的资金池份额\"],\"NgeSlx\":[\"查看详情\"],\"NjQ1e3\":[\"Users sell \",[\"0\"],\" amount: \"],\"NjdGps\":[\"使用推荐的比例\"],\"Nk6ddN\":[\"质押 做市 LP 代币,获得挖矿奖励\"],\"No LP pools match your criteria\":[\"没有找到符合条件的挖矿项目\"],\"O6RUgz\":[\"手续费费率\"],\"OBdohg\":[\"添加流动性\"],\"OFjZGo\":[\"撤出\"],\"OJOe+K\":[\"适用于大部分主流币\"],\"OKZP2O\":[\"若截止前无任何参与者,则挖矿奖励任何人无法提取。\"],\"OOZ8YT\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price. \"],\"OZUH85\":[\"你的仓位将会显示在这里\"],\"OauUE6\":[\"获取价格中...\"],\"OfhWJH\":[\"重置\"],\"OgKD6h\":[\"最优价格\"],\"OjaWXx\":[\"新上线\"],\"OnDEky\":[\"LP 手续费\"],\"OuSseo\":[\"比例设定\"],\"P+K/3O\":[\"确认中\"],\"P4iKEj\":[\"初始价格需要大于 \",[\"min\"],\",小于 100,000,000\"],\"PIYEqF\":[\"按照数量\"],\"PLUB/s\":[\"手续费\"],\"PPqGw9\":[\"适用于锚定资产,没有波动\"],\"PVa3KL\":[\"仓位在\"],\"PZqJog\":[\"确认跨链交易\"],\"Q8W3SC\":[\"交易量(1天)\"],\"QNWt8A\":[\"预计时间\"],\"QNrpkx\":[\"类似 AMM 做市策略,适用于大多数币种\"],\"QR4/RH\":[\"交易预览\"],\"QhKYKu\":[\"Unknown Source\"],\"QoOu4H\":[\"你也将从这个池子里领取所有奖励。\"],\"QtgfjM\":[\"资金池创建者可以通过修改作市价格参数来调整流动性分布。 <0>了解更多\"],\"R7D79P\":[\"币对无效\"],\"R9Khdg\":[\"自动\"],\"Remaining rewards/Total\":[\"剩余奖励/总奖励\"],\"Rewards\":[\"奖励代币\"],\"RtKKbA\":[\"上一步\"],\"RvYEUJ\":[\"类似于 Curve 的做市策略,适用于合成资产、按照稳定比例兑换的资产\"],\"RxHSET\":[\"LP 余额:\"],\"S3piC2\":[\"交易哈希:\"],\"S8G1qk\":[\"单边\"],\"SXnevP\":[\"预览跨链交易\"],\"SbBMxj\":[\"资金池份额\"],\"Search by address\":[\"输入地址\"],\"SnvLL7\":[\"This token doesn't appear on the token list.Make sure this is the token that you want to trade.\"],\"Sta9CR\":[\"输入百分比\"],\"Staked\":[\"已质押\"],\"Start Time\":[\"开始时间\"],\"Sti4vy\":[\"挖矿\"],\"T+qgFw\":[\"价格冲击\"],\"T0Y2+3\":[\"选择代币\"],\"T5ExxV\":[\"添加流动性获得积分\"],\"TFOxRM\":[\"分钟\"],\"TGi+jm\":[\"文档\"],\"TJBHlP\":[\"标准\"],\"TP9/K5\":[\"代币\"],\"TTlkRL\":[\"比动态滑点低\"],\"TVL\":[\"TVL\"],\"TY5fM3\":[\"LP 代币\"],\"TizaRy\":[\"钱包不兼容\"],\"TvH4Ym\":[\"买入 \",[\"0\"],\" \",[\"1\"],\", 资金池价格下降到 \",[\"2\"]],\"Tz0i8g\":[\"设置\"],\"UE2beD\":[\"创建者\"],\"UN0Nip\":[\"奖励规则\"],\"UPXmW+\":[\"交易者\"],\"URmyfc\":[\"详情\"],\"UbRKMZ\":[\"执行中\"],\"Upcoming\":[\"待开始\"],\"Users\":[\"用户\"],\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":[\"秒\"],\"V38hNQ\":[\"单币质押挖矿\"],\"VXTSOE\":[\"适用于大部分交易对\"],\"VgOL1Z\":[\"Add more to mint at least 1000 LP tokens\"],\"Vmw6BM\":[\"服务遇到了一些问题...<0>尝试刷新\"],\"WI3lQ1\":[\"点击选择\"],\"WJ94b8\":[\"Users buy \",[\"0\"],\" amount: \"],\"WKj93T\":[\"选择代币\"],\"WYqq5A\":[\"已结束挖矿\"],\"WgTuci\":[\"你的仓位将在该价格全部由 \",[\"0\"],\" 组成\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":[\"补充奖励时,单个区块奖励数量可能会有所调整\"],\"X6T02b\":[\"必须先初始化该资金池,才能添加流动性。要初始化,请选择池的起价。然后,输入流动性价格范围和充值金额。由于初始化交易,Gas 费将比通常高。\"],\"XPiFIY\":[\"是否可以更改资金池报价\"],\"XeovX3\":[\"交易详情\"],\"Xpkm7d\":[\"无 ForceStop 访问权限\"],\"Y0Knz4\":[\"只使用该交易对下的资金池,不会使用第三个币种跳转。\"],\"Y7rVy0\":[\"手续费率\"],\"Y9QDtD\":[\"您正在修改私有池的流动性。这是一项自由度极高的操作,有可能造成资金流入/流出,也有可能造成市场价格变化。请确保您清楚每一项修改的含义。\"],\"YA4hwj\":[\"价格区间\"],\"YG004A\":[[\"0\"],\" 已充值\"],\"YHc3B+\":[\"我的流动性\"],\"YHpbe1\":[\"对于\"],\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" 价格差\"],\"YoYsKa\":[\"The slippage coefficient needs to be greater than 0, and less than 0.1. \"],\"You are not currently providing liquidity for any LP pools.\":[\"您没有参与任何挖矿项目\"],\"You have not create any mining\":[\"暂未创建任何挖矿\"],\"Z033WN\":[\"累计手续费\"],\"Z5HWHd\":[\"在\"],\"Z7ZXbT\":[\"代币授权\"],\"Z8lGw6\":[\"份额\"],\"ZXvy7b\":[\"由 Widget 设置的额外路由费用\"],\"ZgtZpB\":[\"请重新设置开始时间,当前的设置时间太往前。\"],\"ZhEBp4\":[\"当前资金池价格\"],\"ZlKTEh\":[\"奖励 \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" 你提供的初始流动性会被燃烧。<1/>提供的资产比例越接近推荐比例 (\",[\"recommendRatioText\"],\"),燃烧比例越少。\"],\"Zm56FI\":[\"最大滑点不能超过50%\"],\"a1AzKr\":[\"适用于新资产发行,为其提供卖盘流动性\"],\"a7u1N9\":[\"价格\"],\"aGKLPO\":[\"当前公链网络支持新资金池模型\"],\"aIvv/z\":[\"该资金池的价格在你选定的区间内。你的仓位目前正在赚取手续费。\"],\"aM1tos\":[\"正在创建资金池\"],\"ab98Hp\":[\"创建者 \",[\"0\"],\" \"],\"agPptk\":[\"Medium\"],\"agRWc1\":[\"分钟\"],\"az8lvo\":[\"关\"],\"b+KjnH\":[\"在市场价格进入到你的价格区间之前,您的仓位不能赚取交易手续费。\"],\"b2jAb+\":[\"每\"],\"bC0iyq\":[\"适用于价格波动在10%以内的稳定币\"],\"bEsfUQ\":[\"确认提交\"],\"bQ3cKo\":[\"通过代币筛选,然后选择做市池\"],\"bUUVED\":[\"资产\"],\"bXp9u3\":[\"手续费\"],\"bwSQI0\":[\"供应\"],\"c4miqE\":[\"资金池份额\"],\"c6TMm0\":[\"挖矿类型\"],\"cDWXuq\":[\"结算者\"],\"cJtosk\":[\"移除流动性\"],\"cOvZFM\":[\"动态\"],\"cmUrtC\":[\"查看教程\"],\"cnGeoo\":[\"删除\"],\"cnbRVW\":[\"初始价格 \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":[\"初始价格\"],\"d8YnVj\":[\"指导价\"],\"dAXusZ\":[\"仅挖矿\"],\"dEgA5A\":[\"取消\"],\"dI46oG\":[\"自动切换网络\"],\"dJqd5x\":[\"获取 \",[\"tokenSymbol\"]],\"dUdltF\":[\"领取\"],\"dmiCGN\":[\"选择币对\"],\"dqWPbT\":[\"我已经阅读、理解并同意 <0>服务条款\"],\"dzV+zO\":[\"修改信息确认\"],\"e/bYdk\":[[\"brief\"],\" submitted\"],\"e38JNU\":[\"小贴士:\"],\"eE0JZ4\":[\"类型\"],\"eK0eiF\":[\"初始资产比例\"],\"eK6I8d\":[\"V2 & PMM\"],\"ePK91l\":[\"编辑\"],\"eTUF28\":[\"分钟\"],\"eVZ7bY\":[\"隐藏 TVL=0 的池子\"],\"em6LzM\":[\"交易被拒绝.\"],\"evmVGu\":[\"创建者 \",[\"0\"]],\"fKYdE9\":[\"适用于价格波动较大的交易对\"],\"fSFt4a\":[\"币对\"],\"fZ5Vnu\":[\"获得\"],\"fZFkP1\":[\"我的资金池\"],\"fgGids\":[\"授权 \",[\"0\"]],\"fqDzSu\":[\"价格\"],\"fsBGk0\":[\"余额\"],\"fxRyGG\":[\"手续费费率\"],\"g3x+cF\":[\"服务升级中, 请等待或重试\"],\"gz+9Rb\":[\"Gas 价格过低, 请调整后重试\"],\"h3PbRN\":[\"我的资金池份额\"],\"h4RLFN\":[\"RPC节点异常\"],\"h5FVz1\":[\"预计交易时长\"],\"h5pjuM\":[\"收取手续费\"],\"h7LgzN\":[\"连接钱包\"],\"hCBYHP\":[\"总手续费收入\"],\"hRWvpI\":[\"Claimed\"],\"hXzOVo\":[\"下一步\"],\"hYgDIe\":[\"创建\"],\"hcNa1G\":[\"代币数量\"],\"hdIg7i\":[\"选择模式\"],\"hom7qf\":[\"领取\"],\"i3Z+/Z\":[\"区间外\"],\"iDGO1l\":[\"免责声明\"],\"iH8pgl\":[\"返回\"],\"iLj1a9\":[\"动态滑点为 \",[\"recommendSlippage\"],\"%,当前的滑点设置高于动态滑点,这意味着你该交易的最终成交价格会比较差。\"],\"iPMIoT\":[\"输入代币数量\"],\"iaocTt\":[\"比例\"],\"j2Uisd\":[\"授权中\"],\"jMam5g\":[[\"0\"],\" 余额\"],\"jaH6JH\":[\"比默认滑点高\"],\"jjuKOj\":[\"最低价\"],\"juypHV\":[\"做市用户\"],\"kAC8rT\":[\"最高价\"],\"kNeEXg\":[\"当前价格\"],\"kdzjmC\":[\"中间价必须大于 \",[\"min\"],\",小于 100,000,000\"],\"kf83Ld\":[\"发生异常错误.\"],\"kj3p6e\":[\"每日奖励\"],\"ku//5b\":[\"秒\"],\"l3s5ri\":[\"Import\"],\"l4Za6X\":[\"累计交易量\"],\"lDgVWA\":[\"接收\"],\"lJvbHq\":[\"选择网络\"],\"lLbR0m\":[\"简单的全价格区间作市资金池\"],\"lNYomJ\":[\"AMM V2 仓位\"],\"lQ6r7x\":[\"确认交易\"],\"lTmG/H\":[\"最低收到\"],\"lgE483\":[\"创建完成后,该价格不可更改,适用于ETH-WETH等刚兑资产\"],\"lqTDfd\":[\"滑点\"],\"lsg9Mi\":[\"设置参数\"],\"lt8yMa\":[\"发送至:\"],\"luOvdJ\":[\"已质押\"],\"m16xKo\":[\"添加\"],\"m6RmA/\":[[\"0\"],\" 余额不足\"],\"m8r/Yx\":[\"AMM V3\"],\"mDl+W3\":[\"Import Token\"],\"mFXnIs\":[\"动态滑点是由 DODO 团队通过分析历史交易计算得出。\"],\"mObS+5\":[\"无法获取该币种价格\"],\"mYGY3B\":[\"日期\"],\"mZ4SrP\":[\"流动性资金池\"],\"me2dmq\":[\"价值(美元)\"],\"n25Lml\":[\"深度\"],\"nIrcQi\":[\"没有找到结果\"],\"nTWWCZ\":[\"低\"],\"nxRg31\":[\"选择币对\"],\"o/5/4c\":[\"挖矿一旦开始,无法终止。\"],\"o8aMNm\":[\"查找资金池\"],\"ojGQRC\":[\"This is an official appear <0/>on the token list\"],\"om+Yr9\":[\"请勿选择非标准ERC20代币,可能导致未知错误!\"],\"p2jbcE\":[\"创建资金池\"],\"p3607o\":[\"操作中\"],\"p7/w10\":[\"交易量(24小时)\"],\"pHQq+U\":[\"设置资金池\"],\"pKjCsP\":[\"全部使用你的资金,创建者享有最大程度的调整参数的权限\"],\"pQJBKk\":[\"提供的资产比例越接近推荐比例(\",[\"phumensratiotext\"],\"),燃烧的部分越小。\"],\"pSQ1lM\":[\"MT 手续费\"],\"pY/ok7\":[\"所有链\"],\"pdZiL7\":[\"市价:\"],\"peTryP\":[\"当前不支持 \",[\"0\"],\"-\",[\"1\"],\" 币对,请重新选择。\"],\"pfw0Wr\":[\"ALL\"],\"pwUZo2\":[\"确认中\"],\"qDhDFK\":[\"交易用户\"],\"qK7wuW\":[\"在冷静期无法进行清算\"],\"qLkska\":[\"设置已切换到跨链桥交易模式\"],\"qiOIiY\":[\"购买\"],\"qjbHuD\":[\"The current slippage protection coefficient set exceeds \",[\"0\"],\"%, which may result in losses.\"],\"qmYDVk\":[\"总奖励\"],\"r7ScnQ\":[\"连接钱包\"],\"rAx5u1\":[\"结束时间\"],\"rH6vg9\":[\"当前没有流动性数据\"],\"rQ9c+8\":[\"当前交易数量是预估的结果。如果价格变化超过 \",[\"0\"],\",你的交易将终止。\"],\"rRDi3Y\":[\"详情\"],\"rSayea\":[\"预估年化(APY)\"],\"rbsyJM\":[\"AMM V2\"],\"rdUucN\":[\"预览\"],\"sCUx8G\":[\"选择平台\"],\"sIPJGT\":[\"选择代币\"],\"sNaLCG\":[\"添加代币\"],\"sTnImq\":[\"总资金\"],\"sVlqoo\":[\"AMM V3 仓位\"],\"sjn3tj\":[\"滑点系数\"],\"sleulC\":[\"流动性挖矿\"],\"sxkWRg\":[\"高级\"],\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" 资金池代币\"],\"t+LmjM\":[\"初始价格提示\"],\"t/YqKh\":[\"提取\"],\"t3d3/V\":[\"比例是 0\"],\"tKE4Ak\":[\"跨链桥概览\"],\"tMMG40\":[[\"0\"],\"% 手续费费率\"],\"tMVAXL\":[\"SafeERC20:low-level call failed,请联系DODO团队解决。\"],\"tnRI9r\":[\"确认创建资金池\"],\"tu/fxg\":[\"领取手续费\"],\"tyGEMJ\":[\"数量\"],\"u1tnst\":[\"创建一个\"],\"uAQUqI\":[\"状态\"],\"uEoBVI\":[\"最低价\"],\"uaKP0s\":[\"与 DODO \",[\"lqanddodocomparetext\"],\" 的报价不同。\"],\"ubzjDN\":[\"实时数据\"],\"udsWDJ\":[\"未支持网络 - 请切换后进行交易\"],\"uiuMDr\":[\"输入参数查看做市模拟图\"],\"v4nCHK\":[\"支付\"],\"v4wgrk\":[\"添加失败\"],\"vH2C/2\":[\"交易\"],\"vLyv1R\":[\"隐藏\"],\"vOyUlD\":[\"在区间内\"],\"vXvgFK\":[\"添加资金有可能会被套利,请谨慎操作。\"],\"vxHMzr\":[\"合约地址\"],\"wSpNR+\":[\"该交易对没有足够的历史交易数据,已使用默认滑点值\"],\"wckWOP\":[\"管理\"],\"wdxz7K\":[\"源\"],\"wmCrk7\":[\"摸可以修改交易的截止日期,也就是链上处理交易的最长时间。请注意,在链上处理期间市场价格可能会发生变化,这可能会导致你的交易会以较低的价格被执行。\"],\"wtjDAR\":[[\"0\"],\" 授权中\"],\"x3muNy\":[\"流动性燃烧比例\"],\"x4QVeW\":[\"按照比例\"],\"x6GJ4a\":[\"最大滑点\"],\"xEbi+8\":[\"用户拒绝交易签名.\"],\"xiqG5c\":[\"ADD\"],\"y1eoq1\":[\"复制链接\"],\"y4kfSV\":[\"警告\"],\"y5rS9U\":[\"迁移\"],\"yM82Jw\":[\"ForceStop 异常\"],\"yQ2kGp\":[\"更多\"],\"yQE2r9\":[\"等待中\"],\"yXm1vH\":[\"初始价格与当前市场价之间存在价差,有可能被搬砖套利,造成资产损失。\"],\"yY8wAv\":[\"小时\"],\"yoR+O6\":[\"V3\"],\"yq+Q9s\":[\"动态滑点是 \",[\"recommendSlippage\"],\"%, 当前的滑点设置可能会增加交易失败率。\"],\"yx/fMc\":[\"高\"],\"yz7wBu\":[\"关闭\"],\"yzjPpo\":[\"适用于稳定币\"],\"z9t6jM\":[\"挖矿合约地址\"],\"zA6/Yq\":[\"为避免奖励代币的损失,请确保至少存在 1 名用户参与挖矿。\"],\"zABfk1\":[\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\"],\"zSMRJ/\":[\"交易截止时间\"],\"zXCpR0\":[\"领取奖励\"],\"zcVtwU\":[\"我的资金池 (PMM)\"],\"zeSosD\":[\"初始价格\"],\"zga9sT\":[\"好的\"],\"zkFuIm\":[\"总奖励 = 每日奖励数量 * 时长\"],\"znqB4T\":[\"余额不足\"],\"zwBp5t\":[\"私有池\"],\"zwWKhA\":[\"了解更多\"]}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index 9f721a2a..45bc13b8 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -63,7 +63,7 @@ msgstr "获得 {0}" msgid "{0} pending" msgstr "{0} 等待中" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:524 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:540 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:362 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:786 msgid "Removing" @@ -134,8 +134,8 @@ msgstr "开始时间" msgid "Dismiss" msgstr "忽略" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:309 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:467 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:324 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:483 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:85 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:323 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:659 @@ -147,7 +147,7 @@ msgstr "类型" msgid "Unstaking" msgstr "赎回中" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:527 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:543 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:365 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:789 msgid "Adding" @@ -221,7 +221,7 @@ msgstr "支付" msgid "Due to the market condition, market price and estimated price may have a slight difference" msgstr "由于市场情况不同,市场价格与估算价格可能略有差异。" -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:206 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:231 msgid "View more" msgstr "查看更多" @@ -323,7 +323,7 @@ msgstr "流动性" msgid "APR" msgstr "APR" -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:240 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:268 msgid "My rewards" msgstr "我的奖励" @@ -482,7 +482,7 @@ msgstr "当前挖矿获得的代币奖励" msgid "No results found" msgstr "未找到匹配结果" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:463 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:479 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:316 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:655 msgid "Pair" @@ -727,8 +727,8 @@ msgstr "更多设置" msgid "Insufficient cross-chain fees, need at least {0} {1}" msgstr "跨链费用不足,至少需要 {0} {1} " -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:371 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:471 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:386 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:487 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:112 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:214 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:319 @@ -1076,8 +1076,8 @@ msgstr "质押 做市 LP 代币,获得挖矿奖励" msgid "No LP pools match your criteria" msgstr "没有找到符合条件的挖矿项目" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:277 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:660 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:292 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:673 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:291 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:898 msgid "Fee rate" @@ -1174,8 +1174,8 @@ msgstr "仓位在" msgid "Confirm Cross Chain" msgstr "确认跨链交易" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:392 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:478 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:407 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:494 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:125 msgid "Volume (1D)" msgstr "交易量(1天)" @@ -1282,8 +1282,8 @@ msgstr "已质押" msgid "Start Time" msgstr "开始时间" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:231 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:713 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:246 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:726 #: src/widgets/PoolWidget/PoolList/components/PoolApyTooltip.tsx:190 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:247 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:954 @@ -1689,7 +1689,7 @@ msgstr "初始价格" msgid "Guide Price" msgstr "指导价" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1046 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1059 msgid "Mining Only" msgstr "仅挖矿" @@ -1851,6 +1851,10 @@ msgstr "连接钱包" msgid "Total Fee Revenue" msgstr "总手续费收入" +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:149 +msgid "Claimed" +msgstr "" + #: src/components/DateTimePickerInput/components/MobileDateTimePicker.tsx:223 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:47 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:73 @@ -1883,7 +1887,8 @@ msgstr "选择模式" #: src/widgets/MiningWidget/MiningList/operate-area/index.tsx:204 #: src/widgets/MiningWidget/OperateArea/index.tsx:74 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:453 -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:124 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:149 +#: src/widgets/PoolWidget/PoolList/hooks/useClaimLpFeeRewardSubmit.ts:51 msgid "Claim" msgstr "领取" @@ -2031,8 +2036,8 @@ msgstr "已质押" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:451 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:79 #: src/widgets/PoolWidget/PoolDetail/index.tsx:219 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:416 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:786 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:431 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:799 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:284 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:591 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1212 @@ -2226,8 +2231,8 @@ msgid "Detail" msgstr "详情" #: src/widgets/PoolWidget/PoolDetail/components/TitleInfo.tsx:239 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:341 -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:474 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:356 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:490 #: src/widgets/PoolWidget/PoolList/components/LoadingCard.tsx:100 #: src/widgets/PoolWidget/PoolList/components/TokenListPoolItem.tsx:102 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:348 @@ -2277,8 +2282,8 @@ msgstr "AMM V3 仓位" msgid "Slippage Coefficient" msgstr "滑点系数" -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx:21 -#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:181 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBadge.tsx:26 +#: src/widgets/PoolWidget/PoolList/components/LpFeeRewardBanner.tsx:206 msgid "Liquidity Mining" msgstr "流动性挖矿" From 1693b26da3bc7e338c1714ccc863ffc253f183cc Mon Sep 17 00:00:00 2001 From: JunJie Date: Fri, 17 Jul 2026 11:21:29 +0800 Subject: [PATCH 06/12] fix(pharos): use PROS symbol for Pharos mainnet basic token Pharos mainnet's native token symbol is PROS (testnets keep PHRS). Bump @dodoex/api 3.9.0-alpha.3 and @dodoex/widgets 3.20.0-alpha.9, and point the widgets dependency at the new api version. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/dodoex-api/package.json | 2 +- packages/dodoex-api/src/chainConfig/basicToken.ts | 6 +++--- packages/dodoex-widgets/package.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index e5bbd5cf..a0e82089 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.9.0-alpha.2", + "version": "3.9.0-alpha.3", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-api/src/chainConfig/basicToken.ts b/packages/dodoex-api/src/chainConfig/basicToken.ts index b235d35a..870b2282 100644 --- a/packages/dodoex-api/src/chainConfig/basicToken.ts +++ b/packages/dodoex-api/src/chainConfig/basicToken.ts @@ -209,9 +209,9 @@ export const basicTokenMap: { }, [ChainId.PHAROS]: { ...DEFAULT_BASIC_TOKEN, - symbol: 'PHRS', - name: 'PHRS', - wrappedTokenSymbol: 'WPHRS', + symbol: 'PROS', + name: 'PROS', + wrappedTokenSymbol: 'WPROS', wrappedTokenAddress: '0x52c48d4213107b20bc583832b0d951fb9ca8f0b0', }, [ChainId.STABLE_TESTNET]: { diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index cf87912a..04f74a5d 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.8", + "version": "3.20.0-alpha.9", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -58,7 +58,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "^3.9.0-alpha.2", + "@dodoex/api": "^3.9.0-alpha.3", "@dodoex/components": "^3.3.0", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "^1.35.0-alpha.2", From baac141edfdec4b90e021e7585bbed57d7afd4ae Mon Sep 17 00:00:00 2001 From: JunJie Date: Mon, 7 Sep 2026 10:57:32 +0800 Subject: [PATCH 07/12] test(widgets): support React 19 hook tests --- packages/dodoex-widgets/e2e/default.test.tsx | 3 +-- packages/dodoex-widgets/package.json | 1 - .../hooks/Bridge/useFetchRoutePriceBridge.test.ts | 12 +++++++++--- .../src/hooks/Chain/useChainList.test.ts | 2 +- .../src/hooks/Swap/useFetchFiatPrice.test.ts | 5 ++++- .../src/hooks/Swap/useFetchRoutePrice.test.ts | 12 +++++++++--- .../src/hooks/Swap/useMarginAmount.test.ts | 2 +- .../src/hooks/Token/useFindTokenByAddress.test.ts | 6 +++--- .../src/hooks/Token/useSelectChainList.test.ts | 12 ++++++------ .../src/hooks/Token/useTokenList.test.ts | 2 +- .../src/hooks/Token/useTokenStatus.test.ts | 2 +- 11 files changed, 36 insertions(+), 23 deletions(-) diff --git a/packages/dodoex-widgets/e2e/default.test.tsx b/packages/dodoex-widgets/e2e/default.test.tsx index f766a8a2..d764dc6c 100644 --- a/packages/dodoex-widgets/e2e/default.test.tsx +++ b/packages/dodoex-widgets/e2e/default.test.tsx @@ -6,12 +6,11 @@ import '@ethersproject/providers'; import 'jest-environment-hardhat/dist/jsdom'; import '@testing-library/jest-dom'; -import { render, screen } from '@testing-library/react'; +import { act, render, screen } from '@testing-library/react'; import React from 'react'; import { SwapWidget } from '../src/index'; import { connectWalletBtn, swapReviewBtn } from '../src/constants/testId'; -import { act } from '@testing-library/react-hooks'; describe('default', () => { it('waiting for the wallet to connect', async () => { diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 04f74a5d..59decf98 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -130,7 +130,6 @@ "@svgr/rollup": "^6.2.1", "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^16.0.1", - "@testing-library/react-hooks": "^8.0.1", "@types/d3": "7.4.3", "@types/identicon.js": "^2.3.1", "@types/jest": "^29.0.3", diff --git a/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.test.ts b/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.test.ts index a764c897..4a378dbc 100644 --- a/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.test.ts +++ b/packages/dodoex-widgets/src/hooks/Bridge/useFetchRoutePriceBridge.test.ts @@ -3,7 +3,7 @@ import { RoutePriceStatus, } from './useFetchRoutePriceBridge'; import tokenList from '../../constants/tokenList'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import axios from 'axios'; const tokenEther = tokenList[0]; @@ -104,7 +104,10 @@ describe('useFetchRoutePriceBridge: request success', () => { }), ); - it('Returns params', () => { + it('Returns params', async () => { + await waitFor(() => + expect(result.current.status).toBe(RoutePriceStatus.Success), + ); const { status, bridgeRouteList } = result.current; expect(status).toBe(RoutePriceStatus.Success); expect(bridgeRouteList.length).toBe(1); @@ -155,7 +158,10 @@ describe('useFetchRoutePrice: request failed', () => { }), ); - it('Returns params', () => { + it('Returns params', async () => { + await waitFor(() => + expect(result.current.status).toBe(RoutePriceStatus.Failed), + ); const { status } = result.current; expect(status).toBe(RoutePriceStatus.Failed); }); diff --git a/packages/dodoex-widgets/src/hooks/Chain/useChainList.test.ts b/packages/dodoex-widgets/src/hooks/Chain/useChainList.test.ts index ac5fae4d..9a6a433f 100644 --- a/packages/dodoex-widgets/src/hooks/Chain/useChainList.test.ts +++ b/packages/dodoex-widgets/src/hooks/Chain/useChainList.test.ts @@ -1,4 +1,4 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { isEqual } from 'lodash'; import { chainListMap } from '../../constants/chainList'; import { useChainList } from './useChainList'; diff --git a/packages/dodoex-widgets/src/hooks/Swap/useFetchFiatPrice.test.ts b/packages/dodoex-widgets/src/hooks/Swap/useFetchFiatPrice.test.ts index 6eaeac4f..00e5ca05 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useFetchFiatPrice.test.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useFetchFiatPrice.test.ts @@ -1,6 +1,6 @@ import { useFetchFiatPrice } from './useFetchFiatPrice'; import tokenList from '../../constants/tokenList'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import BigNumber from 'bignumber.js'; import axios from 'axios'; @@ -42,6 +42,9 @@ describe('useFetchFiatPrice', () => { ); it('toFiatPrice & fromFiatPrice', async () => { + await waitFor(() => + expect(result.current.toFiatPrice).toBe('1285.86000000'), + ); const { toFiatPrice, fromFiatPrice } = result.current; expect(toFiatPrice).toBe('1285.86000000'); expect(fromFiatPrice).toBe('1.23'); diff --git a/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.test.ts b/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.test.ts index e1c3e339..d02b8ce8 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.test.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.test.ts @@ -1,6 +1,6 @@ import { useFetchRoutePrice, RoutePriceStatus } from './useFetchRoutePrice'; import tokenList from '../../constants/tokenList'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import BigNumber from 'bignumber.js'; import axios from 'axios'; @@ -54,7 +54,10 @@ describe('useFetchRoutePrice: request success', () => { }), ); - it('Returns params', () => { + it('Returns params', async () => { + await waitFor(() => + expect(result.current.status).toBe(RoutePriceStatus.Success), + ); const { status, rawBrief } = result.current; const { resAmount, @@ -122,7 +125,10 @@ describe('useFetchRoutePrice: request failed', () => { }), ); - it('Returns params', () => { + it('Returns params', async () => { + await waitFor(() => + expect(result.current.status).toBe(RoutePriceStatus.Failed), + ); const { status } = result.current; expect(status).toBe(RoutePriceStatus.Failed); }); diff --git a/packages/dodoex-widgets/src/hooks/Swap/useMarginAmount.test.ts b/packages/dodoex-widgets/src/hooks/Swap/useMarginAmount.test.ts index cf6f76c2..d9f85cb7 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useMarginAmount.test.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useMarginAmount.test.ts @@ -1,6 +1,6 @@ import { useMarginAmount } from './useMarginAmount'; import tokenList from '../../constants/tokenList'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; jest.mock('@web3-react/core', () => ({ useWeb3React: () => ({ diff --git a/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.test.ts b/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.test.ts index 06ecb23d..13da9594 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.test.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useFindTokenByAddress.test.ts @@ -1,14 +1,14 @@ import tokenList from '../../constants/tokenList'; import useFindTokenByAddress from './useFindTokenByAddress'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; jest.mock('../useTokenState', () => ({ useTokenState: () => ({ tokenList, }), })); -jest.mock('@web3-react/core', () => ({ - useWeb3React: () => ({ +jest.mock('../ConnectWallet/useWalletInfo', () => ({ + useWalletInfo: () => ({ chainId: 1, }), })); diff --git a/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.test.ts b/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.test.ts index 7585b250..21bc6b52 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.test.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useSelectChainList.test.ts @@ -1,21 +1,21 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { isEqual } from 'lodash'; import { chainListMap } from '../../constants/chainList'; import { useSelectChainList } from './useSelectChainList'; -import { useWeb3React } from '@web3-react/core'; +import { useWalletInfo } from '../ConnectWallet/useWalletInfo'; import tokenList from '../../constants/tokenList'; const allChainList = Array.from(chainListMap.values()); -jest.mock('@web3-react/core', () => ({ - useWeb3React: jest.fn(() => ({ +jest.mock('../ConnectWallet/useWalletInfo', () => ({ + useWalletInfo: jest.fn(() => ({ chainId: 1, })), })); jest.mock('../useTokenState', () => ({ getAllTokenList: jest.fn(() => tokenList), - useTokenState: (fn: any) => fn(), + useTokenState: () => ({}), })); jest.mock('../../components/UserOptionsProvider', () => ({ @@ -40,7 +40,7 @@ describe('useSelectChainList:default', () => { it('test net', () => { const testChainId = 5; ( - useWeb3React as unknown as jest.Mock< + useWalletInfo as unknown as jest.Mock< { chainId: number; }, diff --git a/packages/dodoex-widgets/src/hooks/Token/useTokenList.test.ts b/packages/dodoex-widgets/src/hooks/Token/useTokenList.test.ts index 1e4a3be4..d3a36de4 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useTokenList.test.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useTokenList.test.ts @@ -1,6 +1,6 @@ import tokenList from '../../constants/tokenList'; import useTokenList, { getFuzzySearchTokenSort } from './useTokenList'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import useTokenListFetchBalance from './useTokenListFetchBalance'; jest.mock('../../components/UserOptionsProvider', () => ({ diff --git a/packages/dodoex-widgets/src/hooks/Token/useTokenStatus.test.ts b/packages/dodoex-widgets/src/hooks/Token/useTokenStatus.test.ts index 22dea54f..952813d2 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useTokenStatus.test.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useTokenStatus.test.ts @@ -1,5 +1,5 @@ import { TokenInfo } from './type'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import BigNumber from 'bignumber.js'; import { useTokenStatus } from './useTokenStatus'; import { useMutation, useQuery } from '@tanstack/react-query'; From 507c86a7a57ee441dd2765df92000f6ef12bd6a3 Mon Sep 17 00:00:00 2001 From: JunJie Date: Mon, 7 Sep 2026 11:01:24 +0800 Subject: [PATCH 08/12] fix(widgets): avoid chained provider subscriptions --- .../Connectors/JsonRpcConnector.ts | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/packages/dodoex-widgets/src/hooks/ConnectWallet/Connectors/JsonRpcConnector.ts b/packages/dodoex-widgets/src/hooks/ConnectWallet/Connectors/JsonRpcConnector.ts index d645a6b5..75dc076f 100644 --- a/packages/dodoex-widgets/src/hooks/ConnectWallet/Connectors/JsonRpcConnector.ts +++ b/packages/dodoex-widgets/src/hooks/ConnectWallet/Connectors/JsonRpcConnector.ts @@ -25,28 +25,27 @@ export default class JsonRpcConnector extends Connector { this.provider = provider; } const eventProvider = provider ?? customProvider; - eventProvider - .on('connect', ({ chainId }: ProviderConnectInfo): void => { - setTimeout(() => { - this.actions.update({ chainId: parseChainId(chainId) }); - }); - }) - .on('disconnect', (error: ProviderRpcError): void => { - setTimeout(() => { - this.onError?.(error); - this.actions.resetState(); - }); - }) - .on('chainChanged', (chainId: string): void => { - setTimeout(() => { - this.actions.update({ chainId: parseChainId(chainId) }); - }); - }) - .on('accountsChanged', (accounts: string[]): void => { - setTimeout(() => { - this.actions.update({ accounts }); - }); + eventProvider.on('connect', ({ chainId }: ProviderConnectInfo): void => { + setTimeout(() => { + this.actions.update({ chainId: parseChainId(chainId) }); }); + }); + eventProvider.on('disconnect', (error: ProviderRpcError): void => { + setTimeout(() => { + this.onError?.(error); + this.actions.resetState(); + }); + }); + eventProvider.on('chainChanged', (chainId: string): void => { + setTimeout(() => { + this.actions.update({ chainId: parseChainId(chainId) }); + }); + }); + eventProvider.on('accountsChanged', (accounts: string[]): void => { + setTimeout(() => { + this.actions.update({ accounts }); + }); + }); } private async activateAccounts(): Promise { From 793f015b95f41fcc52df6e94605e299b9d9d1b62 Mon Sep 17 00:00:00 2001 From: JunJie Date: Mon, 7 Sep 2026 11:06:24 +0800 Subject: [PATCH 09/12] chore(widgets): release 3.20.0-alpha.10 --- packages/dodoex-widgets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 59decf98..89f24954 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.9", + "version": "3.20.0-alpha.10", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", From 2c46a0d9e59b92a6b18a66e37b3e96d44657f152 Mon Sep 17 00:00:00 2001 From: JunJie Date: Wed, 9 Sep 2026 18:16:15 +0800 Subject: [PATCH 10/12] feat(widgets): support external pool selection --- packages/dodoex-widgets/package.json | 2 +- .../src/components/Widget/index.tsx | 8 +- packages/dodoex-widgets/src/index.tsx | 5 +- packages/dodoex-widgets/src/locales/en-US.po | 8 +- packages/dodoex-widgets/src/locales/zh-CN.po | 8 +- .../PoolWidget/PoolList/AddLiquidity.tsx | 44 +++- .../src/widgets/PoolWidget/PoolList/index.tsx | 236 +++++++++--------- .../src/widgets/PoolWidget/index.tsx | 24 +- 8 files changed, 202 insertions(+), 133 deletions(-) diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 89f24954..d3ed813a 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.10", + "version": "3.20.0-alpha.11", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-widgets/src/components/Widget/index.tsx b/packages/dodoex-widgets/src/components/Widget/index.tsx index 776e9827..196f8f98 100644 --- a/packages/dodoex-widgets/src/components/Widget/index.tsx +++ b/packages/dodoex-widgets/src/components/Widget/index.tsx @@ -76,9 +76,7 @@ export interface LpFeeRewardActivity { } export interface WidgetProps - extends Web3ConnectorsProps, - InitTokenListProps, - ExecutionProps { + extends Web3ConnectorsProps, InitTokenListProps, ExecutionProps { apikey?: string; theme?: PartialDeep; colorMode?: PaletteMode; @@ -112,6 +110,10 @@ export interface WidgetProps /** Liquidity mining (LP fee reward) activity config shown on the pool list page. */ lpFeeRewardActivity?: LpFeeRewardActivity; executionDialogExtra?: any; + /** Pool address to preselect in the Pool widget's Add Liquidity search. */ + poolAddress?: string; + /** Called when the pool selected in Add Liquidity search changes or is removed. */ + onPoolAddressChange?: (address?: string) => void; /** When the winding status changes, no pop-up window will be displayed. */ noSubmissionDialog?: boolean; diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index 13581c02..3d2d47c8 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -73,7 +73,10 @@ export function SwapWidget(props: SwapWidgetProps) { export function PoolWidget(props: SwapWidgetProps) { return ( - + ); } diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 74cdfdff..73077328 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -315,7 +315,7 @@ msgid "Pricing Model" msgstr "Pricing Model" #: src/widgets/PoolWidget/PoolCreate/components/DepthAndLiquidityChart.tsx:74 -#: src/widgets/PoolWidget/PoolList/index.tsx:241 +#: src/widgets/PoolWidget/PoolList/index.tsx:247 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOrMiningTabs.ts:17 msgid "Liquidity" msgstr "Liquidity" @@ -1089,7 +1089,7 @@ msgstr "Fee rate" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 -#: src/widgets/PoolWidget/PoolList/index.tsx:176 +#: src/widgets/PoolWidget/PoolList/index.tsx:180 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:165 msgid "Add Liquidity" msgstr "Add Liquidity" @@ -1189,7 +1189,7 @@ msgid "Estimated Time" msgstr "Estimated Time" #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:20 -#: src/widgets/PoolWidget/PoolList/index.tsx:242 +#: src/widgets/PoolWidget/PoolList/index.tsx:248 msgid "Classical AMM-like pool. Suitable for most assets." msgstr "Classical AMM-like pool. Suitable for most assets." @@ -1693,7 +1693,7 @@ msgstr "Initial Price" msgid "Guide Price" msgstr "Guide Price" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1059 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1099 msgid "Mining Only" msgstr "Mining Only" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index 45bc13b8..3061e0ab 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -313,7 +313,7 @@ msgid "Pricing Model" msgstr "定价模式" #: src/widgets/PoolWidget/PoolCreate/components/DepthAndLiquidityChart.tsx:74 -#: src/widgets/PoolWidget/PoolList/index.tsx:241 +#: src/widgets/PoolWidget/PoolList/index.tsx:247 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOrMiningTabs.ts:17 msgid "Liquidity" msgstr "流动性" @@ -1085,7 +1085,7 @@ msgstr "手续费费率" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 -#: src/widgets/PoolWidget/PoolList/index.tsx:176 +#: src/widgets/PoolWidget/PoolList/index.tsx:180 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:165 msgid "Add Liquidity" msgstr "添加流动性" @@ -1185,7 +1185,7 @@ msgid "Estimated Time" msgstr "预计时间" #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:20 -#: src/widgets/PoolWidget/PoolList/index.tsx:242 +#: src/widgets/PoolWidget/PoolList/index.tsx:248 msgid "Classical AMM-like pool. Suitable for most assets." msgstr "类似 AMM 做市策略,适用于大多数币种" @@ -1689,7 +1689,7 @@ msgstr "初始价格" msgid "Guide Price" msgstr "指导价" -#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1059 +#: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:1099 msgid "Mining Only" msgstr "仅挖矿" diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx index df4da13a..69f5b0f3 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/AddLiquidity.tsx @@ -819,6 +819,8 @@ export default function AddLiquidityList({ tokenAndPoolFilter, getMigrationPairAndMining, supportAMMIcon, + poolAddress, + onPoolAddressChange, }: { scrollParentRef: React.MutableRefObject; account?: string; @@ -831,6 +833,8 @@ export default function AddLiquidityList({ tokenAndPoolFilter?: TokenAndPoolFilterUserOptions; getMigrationPairAndMining?: GetMigrationPairAndMining; supportAMMIcon?: boolean; + poolAddress?: string; + onPoolAddressChange?: (address?: string) => void; }) { const theme = useTheme(); const { @@ -842,6 +846,7 @@ export default function AddLiquidityList({ } = useUserOptions(); const { minDevice, isMobile } = useWidgetDevice(); const queryClient = useQueryClient(); + const graphQLRequests = useGraphQLRequests(); const [miningOnly, setMiningOnly] = React.useState(false); const hasLpFeeRewardActivity = !!lpFeeRewardActivity?.activity; @@ -872,7 +877,38 @@ export default function AddLiquidityList({ }, }; - const graphQLRequests = useGraphQLRequests(); + // Resolve an externally supplied address into the same pool filter used by + // the picker. This also keeps the widget usable when the address is changed + // by the host application after mount. + React.useEffect(() => { + let active = true; + if (!poolAddress) { + handleChangeFilterAddress([]); + return () => { + active = false; + }; + } + const query = graphQLRequests.getInfiniteQuery( + PoolApi.graphql.fetchLiquidityList, + 'currentPage', + { + where: { + ...defaultQueryFilter, + filterState: { + address: poolAddress, + ...defaultQueryFilter.filterState, + }, + }, + }, + ); + queryClient.fetchQuery(query).then((result) => { + const lqList = result.liquidity_list?.lqList; + if (active && lqList?.length) handleChangeFilterAddress(lqList); + }); + return () => { + active = false; + }; + }, [poolAddress]); const query = graphQLRequests.getInfiniteQuery( PoolApi.graphql.fetchLiquidityList, @@ -997,6 +1033,7 @@ export default function AddLiquidityList({ list={lqList} onClick={() => { handleChangeFilterAddress(lqList); + onPoolAddressChange?.(lqList[0]?.pair?.id ?? undefined); onClose(); }} /> @@ -1018,7 +1055,10 @@ export default function AddLiquidityList({ {hasFilterAddress ? ( handleChangeFilterAddress([])} + onDeleteTag={() => { + handleChangeFilterAddress([]); + onPoolAddressChange?.(undefined); + }} /> ) : ( '' diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx index 34cf6826..605d8e87 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/index.tsx @@ -52,6 +52,8 @@ export default function PoolList({ showMigrationPairAndMining, supportAMMIcon, onModifyGspPool, + poolAddress, + onPoolAddressChange, }: { params?: Page['params']; scrollRef?: React.RefObject; @@ -60,6 +62,8 @@ export default function PoolList({ showMigrationPairAndMining?: ShowMigrationPairAndMining; supportAMMIcon?: boolean; onModifyGspPool?: OnModifyGspPool; + poolAddress?: string; + onPoolAddressChange?: (address?: string) => void; }) { const { isMobile } = useWidgetDevice(); @@ -103,127 +107,129 @@ export default function PoolList({ > { - handleChangePoolTab(value as PoolTab); - }} - sx={ - isMobile - ? {} - : { - display: 'flex', - flexDirection: 'column', - borderRadius: 16, - backgroundColor: 'background.paper', - flex: 1, - overflow: 'hidden', - height: 'max-content', - maxHeight: '100%', - } - } - className={isMobile ? undefined : 'gradient-card-border'} - > - { + handleChangePoolTab(value as PoolTab); + }} + sx={ + isMobile + ? {} + : { + display: 'flex', + flexDirection: 'column', + borderRadius: 16, + backgroundColor: 'background.paper', + flex: 1, + overflow: 'hidden', + height: 'max-content', + maxHeight: '100%', + } + } + className={isMobile ? undefined : 'gradient-card-border'} + > + + {account ? ( + + ) : ( + - {account ? ( - + Add Liquidity + + )} + + + + - ) : ( - - Add Liquidity - - )} - - - - - - - - - - - + + + + + + + void; +} = {}) { const { routerPage } = useUserOptions(); const pageLocal = useRouterStore((state) => state.page); const page = routerPage ?? pageLocal; switch (page?.type) { case PageType.Pool: - return ).params} />; + return ( + ).params} + poolAddress={poolAddress} + onPoolAddressChange={onPoolAddressChange} + /> + ); case PageType.CreatePool: return ; case PageType.ModifyPool: @@ -45,6 +57,12 @@ export function Pool() { /> ); default: - return )?.params} />; + return ( + )?.params} + poolAddress={poolAddress} + onPoolAddressChange={onPoolAddressChange} + /> + ); } } From f2e7635d831bc19656feca6b4f6d293eeb09e184 Mon Sep 17 00:00:00 2001 From: JunJie Date: Fri, 11 Sep 2026 16:28:42 +0800 Subject: [PATCH 11/12] feat: resolve AMM V2 router by pool --- packages/dodoex-widgets/package.json | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 34 +++++++-------- packages/dodoex-widgets/src/locales/zh-CN.po | 34 +++++++-------- .../PoolWidget/PoolOperate/AddPoolOperate.tsx | 26 ++++++------ .../PoolOperate/RemovePoolOperate.tsx | 6 ++- .../hooks/useRemoveLiquidityTokenStatus.ts | 20 +++++---- .../PoolWidget/hooks/useAMMV2AddLiquidity.ts | 8 ++-- .../hooks/useAMMV2RemoveLiquidity.ts | 8 ++-- .../src/widgets/PoolWidget/utils.ts | 42 +++++++++++++++++++ 9 files changed, 116 insertions(+), 64 deletions(-) diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index d3ed813a..d0059f15 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.11", + "version": "3.20.0-alpha.12", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 73077328..6b2a7ba3 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -56,7 +56,7 @@ msgid "To" msgstr "To" #. placeholder {0}: receiveWrapped ? basicToken?.symbol : basicToken?.wrappedTokenSymbol -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:432 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:434 msgid "Receive {0}" msgstr "Receive {0}" @@ -193,7 +193,7 @@ msgid "Do not remind again" msgstr "Do not remind again" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:372 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:281 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:283 msgid "Remove Liquidity" msgstr "Remove Liquidity" @@ -888,8 +888,8 @@ msgstr "End release time before adjustment" msgid "Stake" msgstr "Stake" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:303 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:602 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:305 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:604 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." @@ -1090,7 +1090,7 @@ msgstr "Fee rate" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 #: src/widgets/PoolWidget/PoolList/index.tsx:180 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:165 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:166 msgid "Add Liquidity" msgstr "Add Liquidity" @@ -1407,7 +1407,7 @@ msgstr "Single-Token Stake Mining" msgid "Suitable for most situations." msgstr "Suitable for most situations." -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:149 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:150 msgid "Add more to mint at least 1000 LP tokens" msgstr "Add more to mint at least 1000 LP tokens" @@ -1624,8 +1624,8 @@ msgstr "per" msgid "Suitable for stablecoins with price fluctuations within 10%" msgstr "Suitable for stablecoins with price fluctuations within 10%" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:297 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:596 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:299 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:598 msgid "Confirm submission" msgstr "Confirm submission" @@ -1642,7 +1642,7 @@ msgid "Fee Revenue" msgstr "Fee Revenue" #: src/widgets/PoolWidget/AMMV2Create/index.tsx:384 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:144 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:145 msgid "Supply" msgstr "Supply" @@ -1982,7 +1982,7 @@ msgid "Total Swap Volume" msgstr "Total Swap Volume" #: src/components/Swap/SwapOrderHistory/index.tsx:99 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:468 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:470 msgid "Receive" msgstr "Receive" @@ -2045,7 +2045,7 @@ msgstr "My Staked" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:284 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:591 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1212 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:144 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:145 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:15 msgid "Add" msgstr "Add" @@ -2313,7 +2313,7 @@ msgstr "Initial Price Alert" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:598 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1199 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:248 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 msgid "Remove" msgstr "Remove" @@ -2398,8 +2398,8 @@ msgstr "Hide" msgid "In range" msgstr "In range" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:306 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:605 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:308 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:607 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "There is risk of being arbitraged if adding this liquidity." @@ -2459,7 +2459,7 @@ msgid "WARNING" msgstr "WARNING" #: src/widgets/PoolWidget/PoolList/components/migationWidget.tsx:53 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:556 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:558 msgid "Migrate" msgstr "Migrate" @@ -2547,8 +2547,8 @@ msgstr "Total Rewards=Daily Rewards*Duration" #: src/components/Swap/index.tsx:753 #: src/components/TokenStatusButton.tsx:18 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:146 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:248 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:147 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 msgid "Insufficient balance" msgstr "Insufficient balance" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index 3061e0ab..0f1d4206 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -54,7 +54,7 @@ msgid "To" msgstr "至" #. placeholder {0}: receiveWrapped ? basicToken?.symbol : basicToken?.wrappedTokenSymbol -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:432 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:434 msgid "Receive {0}" msgstr "获得 {0}" @@ -191,7 +191,7 @@ msgid "Do not remind again" msgstr "不再提醒" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:372 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:281 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:283 msgid "Remove Liquidity" msgstr "移除流动性" @@ -884,8 +884,8 @@ msgstr "调整前结束释放时间" msgid "Stake" msgstr "质押" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:303 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:602 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:305 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:604 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "资金池报价与 DODO 智能路由价格相差 {lqAndDodoCompareText}" @@ -1086,7 +1086,7 @@ msgstr "手续费费率" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 #: src/widgets/PoolWidget/PoolList/index.tsx:180 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:165 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:166 msgid "Add Liquidity" msgstr "添加流动性" @@ -1403,7 +1403,7 @@ msgstr "单币质押挖矿" msgid "Suitable for most situations." msgstr "适用于大部分交易对" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:149 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:150 msgid "Add more to mint at least 1000 LP tokens" msgstr "" @@ -1620,8 +1620,8 @@ msgstr "每" msgid "Suitable for stablecoins with price fluctuations within 10%" msgstr "适用于价格波动在10%以内的稳定币" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:297 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:596 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:299 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:598 msgid "Confirm submission" msgstr "确认提交" @@ -1638,7 +1638,7 @@ msgid "Fee Revenue" msgstr "手续费" #: src/widgets/PoolWidget/AMMV2Create/index.tsx:384 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:144 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:145 msgid "Supply" msgstr "供应" @@ -1978,7 +1978,7 @@ msgid "Total Swap Volume" msgstr "累计交易量" #: src/components/Swap/SwapOrderHistory/index.tsx:99 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:468 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:470 msgid "Receive" msgstr "接收" @@ -2041,7 +2041,7 @@ msgstr "已质押" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:284 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:591 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1212 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:144 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:145 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:15 msgid "Add" msgstr "添加" @@ -2309,7 +2309,7 @@ msgstr "初始价格提示" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:598 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1199 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:248 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 msgid "Remove" msgstr "提取" @@ -2394,8 +2394,8 @@ msgstr "隐藏" msgid "In range" msgstr "在区间内" -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:306 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:605 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:308 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:607 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "添加资金有可能会被套利,请谨慎操作。" @@ -2455,7 +2455,7 @@ msgid "WARNING" msgstr "警告" #: src/widgets/PoolWidget/PoolList/components/migationWidget.tsx:53 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:556 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:558 msgid "Migrate" msgstr "迁移" @@ -2543,8 +2543,8 @@ msgstr "总奖励 = 每日奖励数量 * 时长" #: src/components/Swap/index.tsx:753 #: src/components/TokenStatusButton.tsx:18 -#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:146 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:248 +#: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:147 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 msgid "Insufficient balance" msgstr "余额不足" diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx index 0be719bd..fb8e7ffa 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx @@ -20,12 +20,8 @@ import { SLIPPAGE_PROTECTION } from '../../../constants/pool'; import ErrorMessageDialog from '../../../components/ErrorMessageDialog'; import ConfirmDialog from '../AMMV2Create/ConfirmDialog'; import { useQuery } from '@tanstack/react-query'; -import { poolApi } from '../utils'; +import { getAMMV2RouterAddress, poolApi } from '../utils'; import { useAMMV2AddLiquidity } from '../hooks/useAMMV2AddLiquidity'; -import { - getUniswapV2Router02ContractAddressByChainId, - getUniswapV2Router02FixedFeeContractAddressByChainId, -} from '@dodoex/dodo-contract-request'; import { usePrevious } from '../../MiningWidget/hooks/usePrevious'; import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; import { useSlipper } from './components/SlippageSetting'; @@ -72,6 +68,11 @@ export function AddPoolOperate({ ?.plus(feeRateQuery.data?.lpFeeRate ?? 0) ?.toNumber(); const isAMMV2 = pool?.type === 'AMMV2'; + const ammV2RouterQuery = useQuery({ + queryKey: ['amm-v2-router', pool?.chainId, pool?.address], + enabled: isAMMV2 && !!pool?.chainId && !!pool?.address, + queryFn: () => getAMMV2RouterAddress(pool?.chainId, pool?.address), + }); const [showConfirmAMMV2, setShowConfirmAMMV2] = React.useState(false); const { slipper, setSlipper, slipperValue, resetSlipper } = useSlipper({ address: pool?.address, @@ -97,19 +98,16 @@ export function AddPoolOperate({ const { isShowCompare, lqAndDodoCompareText, isWarnCompare } = useComparePrice(pool?.baseToken, pool?.quoteToken, midPrice); - const proxyContract = isAMMV2 - ? pool.chainId - ? getUniswapV2Router02ContractAddressByChainId(pool.chainId) || - getUniswapV2Router02FixedFeeContractAddressByChainId(pool.chainId) - : undefined - : undefined; + const proxyContract = isAMMV2 ? ammV2RouterQuery.data ?? '' : undefined; const baseTokenStatus = useTokenStatus(pool?.baseToken, { amount: baseAmount, contractAddress: proxyContract, + skipQuery: isAMMV2 && !proxyContract, }); const quoteTokenStatus = useTokenStatus(pool?.quoteToken, { amount: quoteAmount, contractAddress: proxyContract, + skipQuery: isAMMV2 && !proxyContract, }); // 计算添加流动性后得到LpToken数量,低于1000会revert,需要在前端拦截 // uint256 baseInputRatio = DecimalMath.divFloor(baseInput, baseReserve); @@ -139,7 +137,10 @@ export function AddPoolOperate({ !!balanceInfo.loading || !!balanceInfo.error || amountCheckedDisabled || - feeRateQuery.isLoading; + feeRateQuery.isLoading || + ammV2RouterQuery.isLoading || + ammV2RouterQuery.isError || + (isAMMV2 && !proxyContract); let submitBtnText = isAMMV2 ? t`Supply` : t`Add`; if (isOverBalance) { @@ -179,6 +180,7 @@ export function AddPoolOperate({ baseAmount, quoteAmount, fee: feeNumber, + poolAddress: pool?.address, isExists: true, slippage: slipperValue, submittedBack: () => { diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx index 447ce24f..cdd17b11 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx @@ -224,7 +224,7 @@ export function RemovePoolOperate({ }) : undefined; - const { baseTokenStatus, quoteTokenStatus } = useRemoveLiquidityTokenStatus({ + const { baseTokenStatus, quoteTokenStatus, routerLoading } = useRemoveLiquidityTokenStatus({ pool, baseAmount, quoteAmount, @@ -243,7 +243,8 @@ export function RemovePoolOperate({ !!withdrawInfo.error || withdrawInfo.loading || !!withdrawInfo.receiveAmountBg?.lte(0) || - feeRateQuery.isLoading; + feeRateQuery.isLoading || + routerLoading; const submitBtnText = isOverBalance ? t`Insufficient balance` : t`Remove`; @@ -271,6 +272,7 @@ export function RemovePoolOperate({ liquidityAmount: liquidityAmountWei, slippage: slipperValue, fee: feeRate, + poolAddress: pool?.address, submittedBack, }); const submitLq = () => { diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/hooks/useRemoveLiquidityTokenStatus.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/hooks/useRemoveLiquidityTokenStatus.ts index ee6858ae..4aef0d0c 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/hooks/useRemoveLiquidityTokenStatus.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/hooks/useRemoveLiquidityTokenStatus.ts @@ -1,12 +1,10 @@ import { ChainId, contractConfig } from '@dodoex/api'; -import { - getUniswapV2Router02ContractAddressByChainId, - getUniswapV2Router02FixedFeeContractAddressByChainId, -} from '@dodoex/dodo-contract-request'; +import { useQuery } from '@tanstack/react-query'; import BigNumber from 'bignumber.js'; import { useTokenStatus } from '../../../../hooks/Token/useTokenStatus'; import { usePoolBalanceInfo } from '../../hooks/usePoolBalanceInfo'; import { OperatePool } from '../types'; +import { getAMMV2RouterAddress } from '../../utils'; export function useRemoveLiquidityTokenStatus({ pool, @@ -23,13 +21,16 @@ export function useRemoveLiquidityTokenStatus({ let proxyContractAddress = ''; const isAMMV2 = pool?.type === 'AMMV2'; + const ammV2RouterQuery = useQuery({ + queryKey: ['amm-v2-router', chainId, pool?.address], + enabled: isAMMV2 && !!chainId && !!pool?.address, + queryFn: () => getAMMV2RouterAddress(chainId, pool?.address), + }); if (chainId) { proxyContractAddress = contractConfig[chainId as ChainId].DODO_V1_PAIR_PROXY ?? ''; if (isAMMV2) { - proxyContractAddress = - getUniswapV2Router02ContractAddressByChainId(chainId) || - getUniswapV2Router02FixedFeeContractAddressByChainId(pool.chainId); + proxyContractAddress = ammV2RouterQuery.data ?? ''; } } const baseLpTokenId = pool?.baseLpToken?.id ?? ''; @@ -81,5 +82,10 @@ export function useRemoveLiquidityTokenStatus({ return { baseTokenStatus, quoteTokenStatus, + routerLoading: + isAMMV2 && + (ammV2RouterQuery.isLoading || + ammV2RouterQuery.isError || + !ammV2RouterQuery.data), }; } diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts index a660a70c..3d44332f 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts @@ -16,10 +16,10 @@ import { encodeUniswapV2Router02FixedFeeAddLiquidity, encodeUniswapV2Router02FixedFeeAddLiquidityETH, getUniswapV2Router02ContractAddressByChainId, - getUniswapV2Router02FixedFeeContractAddressByChainId, } from '@dodoex/dodo-contract-request'; import { useUserOptions } from '../../../components/UserOptionsProvider'; import { useMessageState } from '../../../hooks/useMessageState'; +import { getAMMV2RouterAddress } from '../utils'; export function useAMMV2AddLiquidity({ baseToken, @@ -28,6 +28,7 @@ export function useAMMV2AddLiquidity({ quoteAmount, slippage, fee, + poolAddress, isExists, successBack, submittedBack, @@ -38,6 +39,7 @@ export function useAMMV2AddLiquidity({ quoteAmount: string; slippage: number; fee: number | undefined; + poolAddress?: string; isExists?: boolean; successBack?: () => void; submittedBack?: () => void; @@ -64,10 +66,8 @@ export function useAMMV2AddLiquidity({ const basicTokenAddressLow = basicToken.address.toLowerCase(); const dynamicFeeContractAddress = getUniswapV2Router02ContractAddressByChainId(chainId); - const fixedFeeContractAddress = - getUniswapV2Router02FixedFeeContractAddressByChainId(chainId); const isFixedFee = !dynamicFeeContractAddress; - const to = dynamicFeeContractAddress || fixedFeeContractAddress; + const to = await getAMMV2RouterAddress(chainId, poolAddress); if (!to) { throw new Error('AMMV2 contract address is not valid.'); } diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts index 5ea02a35..943be2bf 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts @@ -5,7 +5,6 @@ import { encodeUniswapV2Router02RemoveLiquidity, encodeUniswapV2Router02RemoveLiquidityETH, getUniswapV2Router02ContractAddressByChainId, - getUniswapV2Router02FixedFeeContractAddressByChainId, } from '@dodoex/dodo-contract-request'; import { t } from '@lingui/macro'; import { useLingui } from '@lingui/react'; @@ -19,6 +18,7 @@ import { TokenInfo } from '../../../hooks/Token'; import { toWei } from '../../../utils'; import { useUserOptions } from '../../../components/UserOptionsProvider'; import { useMessageState } from '../../../hooks/useMessageState'; +import { getAMMV2RouterAddress } from '../utils'; export function useAMMV2RemoveLiquidity({ baseToken, @@ -28,6 +28,7 @@ export function useAMMV2RemoveLiquidity({ liquidityAmount, slippage, fee, + poolAddress, submittedBack, }: { baseToken: TokenInfo | undefined; @@ -37,6 +38,7 @@ export function useAMMV2RemoveLiquidity({ liquidityAmount: string; slippage: number; fee: number | undefined; + poolAddress?: string; submittedBack?: () => void; }) { const submission = useSubmission(); @@ -61,10 +63,8 @@ export function useAMMV2RemoveLiquidity({ const basicTokenAddressLow = basicToken.address.toLowerCase(); const dynamicFeeContractAddress = getUniswapV2Router02ContractAddressByChainId(chainId); - const fixedFeeContractAddress = - getUniswapV2Router02FixedFeeContractAddressByChainId(chainId); const isFixedFee = !dynamicFeeContractAddress; - const to = dynamicFeeContractAddress || fixedFeeContractAddress; + const to = await getAMMV2RouterAddress(chainId, poolAddress); if (!to) { throw new Error('AMMV2 contract address is not valid.'); } diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts index 529a35d0..d58b4f56 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts @@ -5,6 +5,7 @@ import { OperatePool } from './PoolOperate/types'; import { getUniswapV2FactoryContractAddressByChainId, getUniswapV2Router02ContractAddressByChainId, + getUniswapV2Router02FixedFeeContractAddressByChainId, } from '@dodoex/dodo-contract-request'; export const poolApi = new PoolApi({ @@ -15,6 +16,47 @@ export const ammV3Api = new AMMV3Api({ contractRequests, }); +const LP_MT_CURATOR_ROUTER = '0x728e1Fd63Fa38b350B206bFC2d60a351EBb9A995'; +const LP_MT_CURATOR_ABI = ['function lpMtCurator() view returns (address)']; + +function isMissingLpMtCurator(error: unknown) { + return ( + typeof error === 'object' && + error !== null && + 'code' in error && + error.code === 'CALL_EXCEPTION' + ); +} + +export async function getAMMV2RouterAddress( + chainId: number | undefined, + poolAddress: string | undefined, +) { + if (!chainId) return undefined; + + if (poolAddress) { + try { + const pool = contractRequests.getContract( + chainId, + poolAddress, + LP_MT_CURATOR_ABI, + ); + await pool.lpMtCurator(); + return LP_MT_CURATOR_ROUTER; + } catch (error) { + if (!isMissingLpMtCurator(error)) { + throw error; + } + // Standard AMM V2 pools do not implement lpMtCurator. + } + } + + return ( + getUniswapV2Router02ContractAddressByChainId(chainId) || + getUniswapV2Router02FixedFeeContractAddressByChainId(chainId) + ); +} + export type FetchLiquidityListLqList = ExcludeNone< ReturnType< Exclude<(typeof PoolApi.graphql.fetchLiquidityList)['__apiType'], undefined> From 35c40bc1680f2b9337f19030b7ae72710cfd56bd Mon Sep 17 00:00:00 2001 From: JunJie Date: Mon, 28 Sep 2026 11:48:51 +0800 Subject: [PATCH 12/12] fix(pool): update removal limits and curator router --- packages/dodoex-widgets/package.json | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 18 +++++++++--------- packages/dodoex-widgets/src/locales/zh-CN.po | 18 +++++++++--------- .../PoolOperate/RemovePoolOperate.tsx | 5 +++++ .../src/widgets/PoolWidget/utils.ts | 2 +- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index d0059f15..93dedd0a 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.20.0-alpha.12", + "version": "3.20.0-alpha.14", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 6b2a7ba3..5dc70d48 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -56,7 +56,7 @@ msgid "To" msgstr "To" #. placeholder {0}: receiveWrapped ? basicToken?.symbol : basicToken?.wrappedTokenSymbol -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:434 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:439 msgid "Receive {0}" msgstr "Receive {0}" @@ -193,7 +193,7 @@ msgid "Do not remind again" msgstr "Do not remind again" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:372 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:283 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:288 msgid "Remove Liquidity" msgstr "Remove Liquidity" @@ -889,7 +889,7 @@ msgid "Stake" msgstr "Stake" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:305 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:604 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:609 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." @@ -1625,7 +1625,7 @@ msgid "Suitable for stablecoins with price fluctuations within 10%" msgstr "Suitable for stablecoins with price fluctuations within 10%" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:299 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:598 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:603 msgid "Confirm submission" msgstr "Confirm submission" @@ -1982,7 +1982,7 @@ msgid "Total Swap Volume" msgstr "Total Swap Volume" #: src/components/Swap/SwapOrderHistory/index.tsx:99 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:470 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:475 msgid "Receive" msgstr "Receive" @@ -2313,7 +2313,7 @@ msgstr "Initial Price Alert" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:598 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1199 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:254 msgid "Remove" msgstr "Remove" @@ -2399,7 +2399,7 @@ msgid "In range" msgstr "In range" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:308 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:607 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:612 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "There is risk of being arbitraged if adding this liquidity." @@ -2459,7 +2459,7 @@ msgid "WARNING" msgstr "WARNING" #: src/widgets/PoolWidget/PoolList/components/migationWidget.tsx:53 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:558 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:563 msgid "Migrate" msgstr "Migrate" @@ -2548,7 +2548,7 @@ msgstr "Total Rewards=Daily Rewards*Duration" #: src/components/Swap/index.tsx:753 #: src/components/TokenStatusButton.tsx:18 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:147 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:254 msgid "Insufficient balance" msgstr "Insufficient balance" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index 0f1d4206..eb096005 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -54,7 +54,7 @@ msgid "To" msgstr "至" #. placeholder {0}: receiveWrapped ? basicToken?.symbol : basicToken?.wrappedTokenSymbol -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:434 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:439 msgid "Receive {0}" msgstr "获得 {0}" @@ -191,7 +191,7 @@ msgid "Do not remind again" msgstr "不再提醒" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:372 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:283 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:288 msgid "Remove Liquidity" msgstr "移除流动性" @@ -885,7 +885,7 @@ msgid "Stake" msgstr "质押" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:305 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:604 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:609 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "资金池报价与 DODO 智能路由价格相差 {lqAndDodoCompareText}" @@ -1621,7 +1621,7 @@ msgid "Suitable for stablecoins with price fluctuations within 10%" msgstr "适用于价格波动在10%以内的稳定币" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:299 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:598 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:603 msgid "Confirm submission" msgstr "确认提交" @@ -1978,7 +1978,7 @@ msgid "Total Swap Volume" msgstr "累计交易量" #: src/components/Swap/SwapOrderHistory/index.tsx:99 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:470 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:475 msgid "Receive" msgstr "接收" @@ -2309,7 +2309,7 @@ msgstr "初始价格提示" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:598 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1199 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:254 msgid "Remove" msgstr "提取" @@ -2395,7 +2395,7 @@ msgid "In range" msgstr "在区间内" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:308 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:607 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:612 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "添加资金有可能会被套利,请谨慎操作。" @@ -2455,7 +2455,7 @@ msgid "WARNING" msgstr "警告" #: src/widgets/PoolWidget/PoolList/components/migationWidget.tsx:53 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:558 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:563 msgid "Migrate" msgstr "迁移" @@ -2544,7 +2544,7 @@ msgstr "总奖励 = 每日奖励数量 * 时长" #: src/components/Swap/index.tsx:753 #: src/components/TokenStatusButton.tsx:18 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:147 -#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:249 +#: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:254 msgid "Insufficient balance" msgstr "余额不足" diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx index cdd17b11..b6aaaec7 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx @@ -84,6 +84,11 @@ export function RemovePoolOperate({ pool, maxBaseAmount: baseOverride, maxQuoteAmount: quoteOverride, + // Removing liquidity must clamp the paired amount to the current + // maximum balance. This is especially important for the 100% shortcut, + // where deriving the other token amount can otherwise overshoot due to + // precision rounding. + isRemove: true, }); const [baseAmountDelay, setBaseAmountDelay] = React.useState(''); const [quoteAmountDelay, setQuoteAmountDelay] = React.useState(''); diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts index d58b4f56..f80debeb 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts @@ -16,7 +16,7 @@ export const ammV3Api = new AMMV3Api({ contractRequests, }); -const LP_MT_CURATOR_ROUTER = '0x728e1Fd63Fa38b350B206bFC2d60a351EBb9A995'; +const LP_MT_CURATOR_ROUTER = '0x14f06FE99a1264825C99FB1C8E05A90036e89d0A'; const LP_MT_CURATOR_ABI = ['function lpMtCurator() view returns (address)']; function isMissingLpMtCurator(error: unknown) {