four-flap-meme-sdk 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/__tests__/subpath-exports.test.js +64 -0
  2. package/dist/chains/bsc/iro.d.ts +5 -0
  3. package/dist/chains/bsc/iro.js +4 -0
  4. package/dist/chains/eni/flat-aliases.d.ts +10 -0
  5. package/dist/chains/eni/flat-aliases.js +8 -0
  6. package/dist/chains/eni/index.d.ts +1 -0
  7. package/dist/chains/eni/index.js +1 -0
  8. package/dist/chains/index.d.ts +13 -0
  9. package/dist/chains/index.js +13 -0
  10. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
  11. package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
  12. package/dist/chains/xlayer/eip7702/index.d.ts +1 -0
  13. package/dist/chains/xlayer/eip7702/index.js +1 -0
  14. package/dist/chains/xlayer/index.d.ts +3 -2
  15. package/dist/chains/xlayer/index.js +4 -7
  16. package/dist/flap/index.d.ts +10 -0
  17. package/dist/flap/index.js +8 -0
  18. package/dist/merkle/index.d.ts +12 -0
  19. package/dist/merkle/index.js +11 -0
  20. package/dist/shared/constants/index.d.ts +2 -0
  21. package/dist/shared/index.d.ts +2 -0
  22. package/dist/vanity/index.d.ts +5 -0
  23. package/dist/vanity/index.js +5 -0
  24. package/package.json +93 -2
  25. package/dist/chains/bsc/four/disperse.d.ts +0 -12
  26. package/dist/chains/bsc/four/disperse.js +0 -470
  27. package/dist/chains/bsc/four/pairwise.d.ts +0 -7
  28. package/dist/chains/bsc/four/pairwise.js +0 -308
  29. package/dist/chains/bsc/four/submit/blockrazor.d.ts +0 -18
  30. package/dist/chains/bsc/four/submit/blockrazor.js +0 -86
  31. package/dist/chains/bsc/four/submit/direct.d.ts +0 -66
  32. package/dist/chains/bsc/four/submit/direct.js +0 -452
  33. package/dist/chains/bsc/four/submit/helpers.d.ts +0 -18
  34. package/dist/chains/bsc/four/submit/helpers.js +0 -57
  35. package/dist/chains/bsc/four/submit/index.d.ts +0 -12
  36. package/dist/chains/bsc/four/submit/index.js +0 -11
  37. package/dist/chains/bsc/four/submit/merkle.d.ts +0 -18
  38. package/dist/chains/bsc/four/submit/merkle.js +0 -74
  39. package/dist/chains/bsc/four/submit/types.d.ts +0 -143
  40. package/dist/chains/bsc/four/swap/index.d.ts +0 -32
  41. package/dist/chains/bsc/four/swap/index.js +0 -829
  42. package/dist/chains/bsc/four/swap/types.d.ts +0 -70
  43. package/dist/chains/bsc/four/swap/types.js +0 -1
  44. package/dist/chains/bsc/four/sweep.d.ts +0 -13
  45. package/dist/chains/bsc/four/sweep.js +0 -788
  46. package/dist/chains/bsc/four/utils/index.d.ts +0 -20
  47. package/dist/chains/bsc/four/utils/index.js +0 -1558
  48. package/dist/chains/bsc/four/utils/types.d.ts +0 -1
  49. package/dist/chains/bsc/four/utils/types.js +0 -1
  50. package/dist/chains/bsc/pancake/bundle-buy-first/index.d.ts +0 -8
  51. package/dist/chains/bsc/pancake/bundle-buy-first/index.js +0 -907
  52. package/dist/chains/bsc/pancake/bundle-buy-first/types.d.ts +0 -73
  53. package/dist/chains/bsc/pancake/bundle-buy-first/types.js +0 -1
  54. package/dist/chains/bsc/pancake/bundle-swap/helpers.d.ts +0 -102
  55. package/dist/chains/bsc/pancake/bundle-swap/helpers.js +0 -572
  56. package/dist/chains/bsc/pancake/bundle-swap/index.d.ts +0 -50
  57. package/dist/chains/bsc/pancake/bundle-swap/index.js +0 -1066
  58. package/dist/chains/bsc/pancake/bundle-swap/types.d.ts +0 -202
  59. package/dist/chains/bsc/pancake/bundle-swap/types.js +0 -3
  60. package/dist/chains/xlayer/eip7702/bundle-swap/index.d.ts +0 -72
  61. package/dist/chains/xlayer/eip7702/bundle-swap/index.js +0 -921
  62. package/dist/chains/xlayer/eip7702/bundle-swap/types.d.ts +0 -65
  63. package/dist/chains/xlayer/eip7702/bundle-swap/types.js +0 -1
  64. package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.d.ts +0 -128
  65. package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.js +0 -857
  66. package/dist/chains/xlayer/eip7702/multi-hop-transfer/types.d.ts +0 -85
  67. package/dist/chains/xlayer/eip7702/multi-hop-transfer/types.js +0 -1
  68. package/dist/chains/xlayer/eip7702/volume/index.d.ts +0 -96
  69. package/dist/chains/xlayer/eip7702/volume/index.js +0 -793
  70. package/dist/chains/xlayer/eip7702/volume/types.d.ts +0 -124
  71. package/dist/chains/xlayer/eip7702/volume/types.js +0 -1
  72. package/dist/chains/xlayer/eoa/types-core.d.ts +0 -363
  73. package/dist/chains/xlayer/eoa/types-core.js +0 -53
  74. package/dist/chains/xlayer/eoa/types-create.d.ts +0 -413
  75. package/dist/chains/xlayer/eoa/types-create.js +0 -9
  76. package/dist/chains/xlayer/eoa/types-volume.d.ts +0 -209
  77. package/dist/chains/xlayer/eoa/types-volume.js +0 -13
  78. package/dist/dex/direct-router/index.d.ts +0 -70
  79. package/dist/dex/direct-router/index.js +0 -1410
  80. package/dist/dex/direct-router/types.d.ts +0 -81
  81. package/dist/dex/direct-router/types.js +0 -1
  82. package/dist/shared/abis/TaxToken.json +0 -969
  83. package/dist/shared/abis/TokenManager.json +0 -836
  84. package/dist/shared/abis/TokenManager2.json +0 -136
  85. package/dist/shared/abis/TokenManagerHelper3.json +0 -993
  86. package/dist/shared/abis 2/TaxToken.json +0 -105
  87. package/dist/shared/abis 2/TokenManager.json +0 -836
  88. package/dist/shared/abis 2/TokenManager2.json +0 -60
  89. package/dist/shared/abis 2/TokenManagerHelper3.json +0 -993
  90. package/dist/shared/abis 2/common.d.ts +0 -85
  91. package/dist/shared/abis 2/common.js +0 -254
  92. package/dist/shared/abis 2/index.d.ts +0 -8
  93. package/dist/shared/abis 2/index.js +0 -8
  94. package/dist/shared/clients 2/blockrazor.d.ts +0 -314
  95. package/dist/shared/clients 2/blockrazor.js +0 -596
  96. package/dist/shared/clients 2/club48.d.ts +0 -154
  97. package/dist/shared/clients 2/club48.js +0 -331
  98. package/dist/shared/clients 2/emitservice.d.ts +0 -47
  99. package/dist/shared/clients 2/emitservice.js +0 -44
  100. package/dist/shared/clients 2/four.d.ts +0 -132
  101. package/dist/shared/clients 2/four.js +0 -281
  102. package/dist/shared/clients 2/merkle.d.ts +0 -210
  103. package/dist/shared/clients 2/merkle.js +0 -400
  104. package/dist/shared/flap/__tests__/curve.test.d.ts +0 -1
  105. package/dist/shared/flap/__tests__/curve.test.js +0 -85
  106. package/dist/shared/flap/portal/index.d.ts +0 -12
  107. package/dist/shared/flap/portal/index.js +0 -11
  108. package/dist/shared/flap/portal/portal.d.ts +0 -47
  109. package/dist/shared/flap/portal/portal.js +0 -218
  110. package/dist/shared/flap/portal/types.d.ts +0 -227
  111. package/dist/shared/flap/portal/types.js +0 -80
  112. package/dist/shared/flap/portal/writer.d.ts +0 -121
  113. package/dist/shared/flap/portal/writer.js +0 -265
  114. package/dist/shared/flap/portal-bundle-merkle/core/index.d.ts +0 -18
  115. package/dist/shared/flap/portal-bundle-merkle/core/index.js +0 -938
  116. package/dist/shared/flap/portal-bundle-merkle/core/types.d.ts +0 -1
  117. package/dist/shared/flap/portal-bundle-merkle/core/types.js +0 -1
  118. package/dist/shared/flap/portal-bundle-merkle/swap/index.d.ts +0 -42
  119. package/dist/shared/flap/portal-bundle-merkle/swap/index.js +0 -1448
  120. package/dist/shared/flap/portal-bundle-merkle/swap/types.d.ts +0 -84
  121. package/dist/shared/flap/portal-bundle-merkle/swap/types.js +0 -1
  122. package/dist/shared/flap/portal-bundle-merkle/utils/index.d.ts +0 -17
  123. package/dist/shared/flap/portal-bundle-merkle/utils/index.js +0 -1024
  124. package/dist/shared/flap/portal-bundle-merkle/utils/types.d.ts +0 -16
  125. package/dist/shared/flap/portal-bundle-merkle/utils/types.js +0 -1
  126. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +0 -100
  127. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +0 -133
  128. package/dist/shared/flap 2/__tests__/curve.test.d.ts +0 -1
  129. package/dist/shared/flap 2/__tests__/curve.test.js +0 -85
  130. package/dist/shared/flap 2/abi.d.ts +0 -4
  131. package/dist/shared/flap 2/abi.js +0 -4
  132. package/dist/shared/flap 2/constants.d.ts +0 -128
  133. package/dist/shared/flap 2/constants.js +0 -143
  134. package/dist/shared/flap 2/curve.d.ts +0 -33
  135. package/dist/shared/flap 2/curve.js +0 -84
  136. package/dist/shared/flap 2/errors.d.ts +0 -37
  137. package/dist/shared/flap 2/errors.js +0 -114
  138. package/dist/shared/flap 2/index.d.ts +0 -22
  139. package/dist/shared/flap 2/index.js +0 -33
  140. package/dist/shared/flap 2/ipfs.d.ts +0 -21
  141. package/dist/shared/flap 2/ipfs.js +0 -38
  142. package/dist/shared/flap 2/meta.d.ts +0 -30
  143. package/dist/shared/flap 2/meta.js +0 -195
  144. package/dist/shared/flap 2/permit.d.ts +0 -16
  145. package/dist/shared/flap 2/permit.js +0 -67
  146. package/dist/shared/flap 2/pinata.d.ts +0 -40
  147. package/dist/shared/flap 2/pinata.js +0 -106
  148. package/dist/shared/flap 2/portal-bundle-merkle/config.d.ts +0 -79
  149. package/dist/shared/flap 2/portal-bundle-merkle/config.js +0 -133
  150. package/dist/shared/flap 2/portal-bundle-merkle/core.d.ts +0 -18
  151. package/dist/shared/flap 2/portal-bundle-merkle/core.js +0 -938
  152. package/dist/shared/flap 2/portal-bundle-merkle/create-to-dex.d.ts +0 -125
  153. package/dist/shared/flap 2/portal-bundle-merkle/create-to-dex.js +0 -665
  154. package/dist/shared/flap 2/portal-bundle-merkle/curve-to-dex.d.ts +0 -88
  155. package/dist/shared/flap 2/portal-bundle-merkle/curve-to-dex.js +0 -446
  156. package/dist/shared/flap 2/portal-bundle-merkle/index.d.ts +0 -14
  157. package/dist/shared/flap 2/portal-bundle-merkle/index.js +0 -26
  158. package/dist/shared/flap 2/portal-bundle-merkle/pancake-proxy.d.ts +0 -28
  159. package/dist/shared/flap 2/portal-bundle-merkle/pancake-proxy.js +0 -701
  160. package/dist/shared/flap 2/portal-bundle-merkle/private.d.ts +0 -17
  161. package/dist/shared/flap 2/portal-bundle-merkle/private.js +0 -549
  162. package/dist/shared/flap 2/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
  163. package/dist/shared/flap 2/portal-bundle-merkle/swap-buy-first.js +0 -831
  164. package/dist/shared/flap 2/portal-bundle-merkle/swap.d.ts +0 -201
  165. package/dist/shared/flap 2/portal-bundle-merkle/swap.js +0 -1359
  166. package/dist/shared/flap 2/portal-bundle-merkle/types.d.ts +0 -358
  167. package/dist/shared/flap 2/portal-bundle-merkle/types.js +0 -1
  168. package/dist/shared/flap 2/portal-bundle-merkle/utils.d.ts +0 -89
  169. package/dist/shared/flap 2/portal-bundle-merkle/utils.js +0 -963
  170. package/dist/shared/flap 2/portal-bundle.d.ts +0 -119
  171. package/dist/shared/flap 2/portal-bundle.js +0 -584
  172. package/dist/shared/flap 2/portal.d.ts +0 -392
  173. package/dist/shared/flap 2/portal.js +0 -559
  174. package/dist/shared/flap 2/vanity.d.ts +0 -48
  175. package/dist/shared/flap 2/vanity.js +0 -110
  176. package/dist/shared/flap 2/vault.d.ts +0 -240
  177. package/dist/shared/flap 2/vault.js +0 -366
  178. package/dist/shared/four 2/index.d.ts +0 -7
  179. package/dist/shared/four 2/index.js +0 -22
  180. package/dist/shared/four 2/tax-token.d.ts +0 -176
  181. package/dist/shared/four 2/tax-token.js +0 -302
  182. package/dist/shared/index 2.js +0 -10
  183. package/dist/shared/index.d 2.ts +0 -10
  184. package/dist/types/distribute.d.ts +0 -72
  185. package/dist/types/distribute.js +0 -1
  186. package/dist/types 2/errors.d.ts +0 -27
  187. package/dist/types 2/errors.js +0 -34
  188. package/dist/utils/__tests__/errors.test.d.ts +0 -1
  189. package/dist/utils/__tests__/errors.test.js +0 -76
  190. package/dist/utils/airdrop-sweep-types.d.ts +0 -1
  191. package/dist/utils/airdrop-sweep-types.js +0 -1
  192. package/dist/utils/erc20/index.d.ts +0 -242
  193. package/dist/utils/erc20/index.js +0 -645
  194. package/dist/utils/erc20/types.d.ts +0 -77
  195. package/dist/utils/erc20/types.js +0 -1
  196. package/dist/utils/erc20-types.d.ts +0 -1
  197. package/dist/utils/erc20-types.js +0 -1
  198. package/dist/utils/holders-maker/helpers.d.ts +0 -43
  199. package/dist/utils/holders-maker/helpers.js +0 -371
  200. package/dist/utils/holders-maker/index.d.ts +0 -26
  201. package/dist/utils/holders-maker/index.js +0 -218
  202. package/dist/utils/holders-maker/types.d.ts +0 -72
  203. package/dist/utils/holders-maker/types.js +0 -4
  204. package/dist/utils/holders-maker-types.d.ts +0 -1
  205. package/dist/utils/holders-maker-types.js +0 -1
  206. package/dist/utils/lp-inspect/index.d.ts +0 -44
  207. package/dist/utils/lp-inspect/index.js +0 -937
  208. package/dist/utils/lp-inspect/types.d.ts +0 -100
  209. package/dist/utils/lp-inspect/types.js +0 -1
  210. package/dist/utils/lp-inspect-types.d.ts +0 -1
  211. package/dist/utils/lp-inspect-types.js +0 -1
  212. package/dist/utils/private-sale-types.d.ts +0 -1
  213. package/dist/utils/private-sale-types.js +0 -1
  214. package/dist/utils/quote-helpers/index.d.ts +0 -107
  215. package/dist/utils/quote-helpers/index.js +0 -346
  216. package/dist/utils/quote-helpers/types.d.ts +0 -16
  217. package/dist/utils/quote-helpers/types.js +0 -1
  218. package/dist/utils/quote-helpers-types.d.ts +0 -1
  219. package/dist/utils/quote-helpers-types.js +0 -1
  220. /package/dist/{chains/bsc/four/submit/types.js → __tests__/subpath-exports.test.d.ts} +0 -0
@@ -1,100 +0,0 @@
1
- export interface DexConfig {
2
- name: string;
3
- v2Factory?: string;
4
- v3Factory?: string;
5
- v2Router?: string;
6
- v3Router?: string;
7
- quoterV2?: string;
8
- enabled: boolean;
9
- }
10
- export interface ChainDexConfig {
11
- wrappedNative: string;
12
- wrappedNativeSymbol: string;
13
- stableCoins: Array<{
14
- address: string;
15
- symbol: string;
16
- decimals: number;
17
- }>;
18
- dexes: Record<string, DexConfig>;
19
- }
20
- export interface PoolPairInfo {
21
- quoteToken: string;
22
- quoteSymbol: string;
23
- quoteDecimals: number;
24
- pairAddress: string;
25
- reserveToken: string;
26
- reserveQuote: string;
27
- reserveQuoteRaw?: bigint;
28
- reserveTokenRaw?: bigint;
29
- poolRatio?: string;
30
- }
31
- export interface V3PoolInfo extends PoolPairInfo {
32
- fee: number;
33
- }
34
- export interface DexPoolInfo {
35
- dexName: string;
36
- dexKey: string;
37
- v2Pairs: PoolPairInfo[];
38
- v3Pools: V3PoolInfo[];
39
- }
40
- export interface BestPoolInfo {
41
- dex: string;
42
- dexKey: string;
43
- version: 'v2' | 'v3';
44
- fee?: number;
45
- quoteToken: string;
46
- quoteSymbol: string;
47
- quoteDecimals: number;
48
- pairAddress: string;
49
- liquidity: string;
50
- liquidityRaw: bigint;
51
- reserveToken?: string;
52
- reserveTokenRaw?: bigint;
53
- poolRatio?: string;
54
- }
55
- export type LPPlatform = 'FOUR' | 'FLAP' | 'DAOAAS' | 'PANCAKESWAP_V2' | 'PANCAKESWAP_V3' | 'UNISWAP_V2' | 'UNISWAP_V3' | 'IROSWAP_V2' | 'MULTI_DEX' | 'UNKNOWN';
56
- /** LP 信息返回类型 */
57
- export interface LPInfo {
58
- platform: LPPlatform;
59
- decimals?: number;
60
- totalSupply?: string;
61
- totalSupplyRaw?: bigint;
62
- taxRate?: number;
63
- four?: {
64
- helper: string;
65
- reserveNative?: string;
66
- offerTokens?: string;
67
- lastPrice?: string;
68
- };
69
- flap?: {
70
- quoteToken?: string;
71
- quoteSymbol?: string;
72
- quoteDecimals?: number;
73
- reserveNative?: string;
74
- circulatingSupply?: string;
75
- price?: string;
76
- taxRate?: number;
77
- };
78
- daoaas?: {
79
- quoteToken?: string;
80
- quoteSymbol?: string;
81
- quoteDecimals?: number;
82
- reserveNative?: string;
83
- circulatingSupply?: string;
84
- price?: string;
85
- status?: number;
86
- };
87
- allPools: DexPoolInfo[];
88
- bestPools: BestPoolInfo[];
89
- }
90
- import type { FlapChain } from '../../shared/flap/portal.js';
91
- export interface InspectOptions {
92
- chain: 'BSC' | 'MONAD' | 'XLAYER' | 'ENI';
93
- rpcUrl: string;
94
- flapChain?: FlapChain;
95
- v3FeeTiers?: number[];
96
- customDexConfig?: Partial<ChainDexConfig>;
97
- multicall3?: string;
98
- debug?: boolean;
99
- formatBalances?: boolean;
100
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export type { DexConfig, ChainDexConfig, PoolPairInfo, V3PoolInfo, DexPoolInfo, BestPoolInfo, LPPlatform, LPInfo, InspectOptions, } from '../shared/foundation/types/lp-inspect.js';
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export type { PrivateSaleSignConfig, PrivateSaleTransferParams, BatchPrivateSaleParams, PrivateSaleResult, } from '../shared/foundation/types/private-sale.js';
@@ -1 +0,0 @@
1
- export {};
@@ -1,107 +0,0 @@
1
- import type { QuoteParams, QuoteResult } from './types.js';
2
- export type { QuoteParams, QuoteResult } from './types.js';
3
- /** 支持的链 */
4
- export type SupportedChain = keyof typeof QUOTE_CONFIG;
5
- /**
6
- * V2/V3 报价工具函数
7
- *
8
- * 提供统一的代币报价功能,支持:
9
- * - V2 Router 报价(直接路径 + 多跳路径)
10
- * - V3 Quoter 报价(多费率尝试 + 多跳路径)
11
- * - ERC20 → 原生代币转换报价
12
- */
13
- import { JsonRpcProvider } from 'ethers';
14
- /** V3 常用费率档位 */
15
- export declare const V3_FEE_TIERS: number[];
16
- /** 各链的报价配置 */
17
- export declare const QUOTE_CONFIG: {
18
- readonly BSC: {
19
- readonly v2Router: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
20
- readonly v3Quoter: "0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997";
21
- readonly wrappedNative: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
22
- readonly stableCoins: readonly ["0x55d398326f99059fF775485246999027B3197955", "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"];
23
- };
24
- readonly MONAD: {
25
- readonly v2Router: "0xb1bc24c34e88f7d43d5923034e3a14b24daacff9";
26
- readonly v3Quoter: "";
27
- readonly wrappedNative: "0x3bd359c1119da7da1d913d1c4d2b7c461115433a";
28
- readonly stableCoins: readonly [];
29
- };
30
- readonly XLAYER: {
31
- readonly v2Router: "0x881fb2f98c13d521009464e7d1cbf16e1b394e8e";
32
- readonly v3Quoter: "0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e";
33
- readonly wrappedNative: "0xe538905cf8410324e03a5a23c1c177a474d59b2b";
34
- readonly stableCoins: readonly ["0x1E4a5963aBFD975d8c9021ce480b42188849D41d", "0x74b7f16337b8972027f6196a17a631ac6de26d22", "0x779ded0c9e1022225f8e0630b35a9b54be713736"];
35
- };
36
- readonly ENI: {
37
- readonly v2Router: "0x97ed8be49d9a8b86247090aa41e908e76b8fcf22";
38
- readonly v3Quoter: "";
39
- readonly wrappedNative: "0x6d1e851446f4d004ae2a72f9afed85e8829a205e";
40
- readonly stableCoins: readonly ["0xDC1a8A35b0BaA3229b13f348ED708a2fd50b5e3a", "0xaFF944b96c1BAEA587159ec446280E468B32ee15"];
41
- };
42
- };
43
- /**
44
- * V2 报价(直接路径 + 多跳路径)
45
- * ✅ 优化:并行尝试直接路径和多跳路径
46
- *
47
- * @param provider - Provider 实例
48
- * @param tokenIn - 输入代币地址
49
- * @param tokenOut - 输出代币地址
50
- * @param amountIn - 输入数量(wei)
51
- * @param chain - 链名称
52
- * @returns 报价结果
53
- */
54
- export declare function quoteV2(provider: JsonRpcProvider, tokenIn: string, tokenOut: string, amountIn: bigint, chain: string, routerOverride?: string): Promise<QuoteResult>;
55
- /**
56
- * V3 报价(多费率尝试 + 多跳路径)
57
- * ✅ 优化:并行尝试多个费率
58
- *
59
- * @param provider - Provider 实例
60
- * @param tokenIn - 输入代币地址
61
- * @param tokenOut - 输出代币地址
62
- * @param amountIn - 输入数量(wei)
63
- * @param chain - 链名称
64
- * @param preferredFee - 优先尝试的费率(可选)
65
- * @returns 报价结果
66
- */
67
- export declare function quoteV3(provider: JsonRpcProvider, tokenIn: string, tokenOut: string, amountIn: bigint, chain: string, preferredFee?: number): Promise<QuoteResult>;
68
- /**
69
- * 统一报价接口(根据版本自动选择 V2 或 V3)
70
- *
71
- * @param params - 报价参数
72
- * @returns 报价结果
73
- */
74
- export declare function quote(params: QuoteParams): Promise<QuoteResult>;
75
- /**
76
- * 获取 ERC20 代币 → 原生代币(WBNB/WMON 等)的报价
77
- *
78
- * @param provider - Provider 实例
79
- * @param tokenAddress - ERC20 代币地址
80
- * @param tokenAmount - 代币数量(wei)
81
- * @param chain - 链名称
82
- * @param version - 'v2' | 'v3'
83
- * @param fee - V3 费率档位(仅 V3 时使用)
84
- * @param routerOverride - V2 时使用指定 Router(如 IROSwap,用于利润报价)
85
- * @returns 等值的原生代币数量(wei),失败返回 0n
86
- */
87
- export declare function getTokenToNativeQuote(provider: JsonRpcProvider, tokenAddress: string, tokenAmount: bigint, chain: string, version?: 'v2' | 'v3', fee?: number, routerOverride?: string): Promise<bigint>;
88
- /**
89
- * 获取原生代币 → ERC20 代币的报价
90
- *
91
- * @param provider - Provider 实例
92
- * @param tokenAddress - ERC20 代币地址
93
- * @param nativeAmount - 原生代币数量(wei)
94
- * @param chain - 链名称
95
- * @param version - 'v2' | 'v3'
96
- * @param fee - V3 费率档位(仅 V3 时使用)
97
- * @returns 等值的 ERC20 代币数量(wei),失败返回 0n
98
- */
99
- export declare function getNativeToTokenQuote(provider: JsonRpcProvider, tokenAddress: string, nativeAmount: bigint, chain: string, version?: 'v2' | 'v3', fee?: number): Promise<bigint>;
100
- /**
101
- * 获取链的包装原生代币地址
102
- */
103
- export declare function getWrappedNativeAddress(chain: string): string;
104
- /**
105
- * 获取链的稳定币列表
106
- */
107
- export declare function getStableCoins(chain: string): string[];
@@ -1,346 +0,0 @@
1
- /**
2
- * V2/V3 报价工具函数
3
- *
4
- * 提供统一的代币报价功能,支持:
5
- * - V2 Router 报价(直接路径 + 多跳路径)
6
- * - V3 Quoter 报价(多费率尝试 + 多跳路径)
7
- * - ERC20 → 原生代币转换报价
8
- */
9
- import { ethers, Contract } from 'ethers';
10
- import { V2_ROUTER_QUOTE_ABI, V3_QUOTER_ABI } from '../../shared/abis/common.js';
11
- // ============================================================================
12
- // 常量配置
13
- // ============================================================================
14
- // ✅ V2_ROUTER_ABI 和 V3_QUOTER_ABI 从公共模块导入
15
- const V2_ROUTER_ABI = V2_ROUTER_QUOTE_ABI;
16
- /** V3 常用费率档位 */
17
- export const V3_FEE_TIERS = [100, 500, 2500, 10000]; // 0.01%, 0.05%, 0.25%, 1%
18
- /** 各链的报价配置 */
19
- export const QUOTE_CONFIG = {
20
- BSC: {
21
- v2Router: '0x10ED43C718714eb63d5aA57B78B54704E256024E', // PancakeSwap V2 Router
22
- v3Quoter: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997', // PancakeSwap V3 Quoter
23
- wrappedNative: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB
24
- stableCoins: [
25
- '0x55d398326f99059fF775485246999027B3197955', // USDT
26
- '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', // USDC
27
- '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD
28
- ],
29
- },
30
- MONAD: {
31
- v2Router: '0xb1bc24c34e88f7d43d5923034e3a14b24daacff9', // PancakeSwap V2
32
- v3Quoter: '', // TODO: 添加 Monad V3 Quoter
33
- wrappedNative: '0x3bd359c1119da7da1d913d1c4d2b7c461115433a', // WMON
34
- stableCoins: [],
35
- },
36
- XLAYER: {
37
- v2Router: '0x881fb2f98c13d521009464e7d1cbf16e1b394e8e', // PotatoSwap V2
38
- v3Quoter: '0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e', // ✅ PotatoSwap V3 QuoterV2
39
- wrappedNative: '0xe538905cf8410324e03a5a23c1c177a474d59b2b', // WOKB
40
- stableCoins: [
41
- '0x1E4a5963aBFD975d8c9021ce480b42188849D41d', // USDT
42
- '0x74b7f16337b8972027f6196a17a631ac6de26d22', // USDC
43
- '0x779ded0c9e1022225f8e0630b35a9b54be713736', // USD₮0
44
- ],
45
- },
46
- ENI: {
47
- v2Router: '0x97ed8be49d9a8b86247090aa41e908e76b8fcf22', // DSWAP V2 Router
48
- v3Quoter: '',
49
- wrappedNative: '0x6d1e851446f4d004ae2a72f9afed85e8829a205e', // WEGAS
50
- stableCoins: [
51
- '0xDC1a8A35b0BaA3229b13f348ED708a2fd50b5e3a', // USDT (18 decimals)
52
- '0xaFF944b96c1BAEA587159ec446280E468B32ee15', // USDC (18 decimals)
53
- ],
54
- },
55
- };
56
- // ============================================================================
57
- // V2 报价
58
- // ============================================================================
59
- /**
60
- * V2 报价(直接路径 + 多跳路径)
61
- * ✅ 优化:并行尝试直接路径和多跳路径
62
- *
63
- * @param provider - Provider 实例
64
- * @param tokenIn - 输入代币地址
65
- * @param tokenOut - 输出代币地址
66
- * @param amountIn - 输入数量(wei)
67
- * @param chain - 链名称
68
- * @returns 报价结果
69
- */
70
- export async function quoteV2(provider, tokenIn, tokenOut, amountIn, chain, routerOverride) {
71
- if (amountIn <= 0n) {
72
- return { amountOut: 0n };
73
- }
74
- const chainUpper = chain.toUpperCase();
75
- const config = QUOTE_CONFIG[chainUpper];
76
- if (!config) {
77
- console.warn(`[quoteV2] 不支持的链: ${chain}`);
78
- return { amountOut: 0n };
79
- }
80
- const routerAddress = routerOverride || config.v2Router;
81
- const router = new Contract(routerAddress, V2_ROUTER_ABI, provider);
82
- const tokenInLower = tokenIn.toLowerCase();
83
- const tokenOutLower = tokenOut.toLowerCase();
84
- // ✅ 构建所有可能的路径
85
- const paths = [];
86
- // 直接路径
87
- paths.push([tokenIn, tokenOut]);
88
- // 多跳路径(通过稳定币)
89
- for (const stableCoin of config.stableCoins) {
90
- const stableLower = stableCoin.toLowerCase();
91
- if (tokenInLower !== stableLower && tokenOutLower !== stableLower) {
92
- paths.push([tokenIn, stableCoin, tokenOut]);
93
- }
94
- }
95
- // ✅ 并行尝试所有路径
96
- console.log(`[quoteV2] 输入: ${amountIn} wei, tokenIn=${tokenIn}, tokenOut=${tokenOut}`);
97
- const quotePromises = paths.map(async (path) => {
98
- try {
99
- const amounts = await router.getAmountsOut(amountIn, path);
100
- const amountOut = amounts[amounts.length - 1];
101
- console.log(`[quoteV2] 路径 ${path.map(p => p.slice(0, 10) + '...').join(' → ')}: ${amountOut} wei`);
102
- return { amountOut, path, success: amountOut > 0n };
103
- }
104
- catch (e) {
105
- console.log(`[quoteV2] 路径失败 ${path.map(p => p.slice(0, 10) + '...').join(' → ')}: ${e.message?.slice(0, 50)}`);
106
- return { amountOut: 0n, path, success: false };
107
- }
108
- });
109
- const results = await Promise.all(quotePromises);
110
- // 找到第一个成功的结果(优先直接路径)
111
- for (const result of results) {
112
- if (result.success) {
113
- console.log(`[quoteV2] 路径成功 (${result.path.length === 2 ? '直接' : '多跳'}): ${ethers.formatEther(result.amountOut)}`);
114
- return { amountOut: result.amountOut, path: result.path };
115
- }
116
- }
117
- console.warn(`[quoteV2] 所有路径均失败`);
118
- return { amountOut: 0n };
119
- }
120
- // ============================================================================
121
- // V3 报价
122
- // ============================================================================
123
- /**
124
- * V3 报价(多费率尝试 + 多跳路径)
125
- * ✅ 优化:并行尝试多个费率
126
- *
127
- * @param provider - Provider 实例
128
- * @param tokenIn - 输入代币地址
129
- * @param tokenOut - 输出代币地址
130
- * @param amountIn - 输入数量(wei)
131
- * @param chain - 链名称
132
- * @param preferredFee - 优先尝试的费率(可选)
133
- * @returns 报价结果
134
- */
135
- export async function quoteV3(provider, tokenIn, tokenOut, amountIn, chain, preferredFee) {
136
- if (amountIn <= 0n) {
137
- return { amountOut: 0n };
138
- }
139
- const chainUpper = chain.toUpperCase();
140
- const config = QUOTE_CONFIG[chainUpper];
141
- if (!config) {
142
- console.warn(`[quoteV3] 不支持的链: ${chain}`);
143
- return { amountOut: 0n };
144
- }
145
- if (!config.v3Quoter) {
146
- console.warn(`[quoteV3] 该链不支持 V3 Quoter: ${chain}`);
147
- return { amountOut: 0n };
148
- }
149
- const quoter = new Contract(config.v3Quoter, V3_QUOTER_ABI, provider);
150
- const tokenInLower = tokenIn.toLowerCase();
151
- const tokenOutLower = tokenOut.toLowerCase();
152
- // 如果指定了费率,优先尝试;否则尝试所有费率
153
- const feesToTry = preferredFee ? [preferredFee, ...V3_FEE_TIERS.filter(f => f !== preferredFee)] : V3_FEE_TIERS;
154
- console.log(`[quoteV3] 开始报价: tokenIn=${tokenIn.slice(0, 10)}..., tokenOut=${tokenOut.slice(0, 10)}..., feesToTry=${feesToTry}`);
155
- // ✅ 策略 1:并行尝试所有费率的直接路径
156
- const directQuotePromises = feesToTry.map(async (fee) => {
157
- try {
158
- const result = await quoter.quoteExactInputSingle.staticCall({
159
- tokenIn,
160
- tokenOut,
161
- amountIn,
162
- fee,
163
- sqrtPriceLimitX96: 0n
164
- });
165
- const amountOut = Array.isArray(result) ? result[0] : result;
166
- return { amountOut: amountOut || 0n, fee, success: amountOut && amountOut > 0n };
167
- }
168
- catch {
169
- return { amountOut: 0n, fee, success: false };
170
- }
171
- });
172
- const directResults = await Promise.all(directQuotePromises);
173
- // 按费率优先级返回第一个成功的结果
174
- for (const result of directResults) {
175
- if (result.success) {
176
- console.log(`[quoteV3] 直接路径成功 (fee=${result.fee}): ${ethers.formatEther(result.amountOut)}`);
177
- return { amountOut: result.amountOut, fee: result.fee };
178
- }
179
- }
180
- // ✅ 策略 2:并行尝试多跳路径(通过稳定币)
181
- const validStableCoins = config.stableCoins.filter(sc => {
182
- const stableLower = sc.toLowerCase();
183
- return tokenInLower !== stableLower && tokenOutLower !== stableLower;
184
- });
185
- // 并行尝试所有稳定币的第一跳
186
- const firstHopPromises = validStableCoins.flatMap(stableCoin => feesToTry.map(async (fee1) => {
187
- try {
188
- const midResult = await quoter.quoteExactInputSingle.staticCall({
189
- tokenIn,
190
- tokenOut: stableCoin,
191
- amountIn,
192
- fee: fee1,
193
- sqrtPriceLimitX96: 0n
194
- });
195
- const midAmount = Array.isArray(midResult) ? midResult[0] : midResult;
196
- return { midAmount: midAmount || 0n, stableCoin, fee1, success: midAmount && midAmount > 0n };
197
- }
198
- catch {
199
- return { midAmount: 0n, stableCoin, fee1, success: false };
200
- }
201
- }));
202
- const firstHopResults = await Promise.all(firstHopPromises);
203
- const successfulFirstHops = firstHopResults.filter(r => r.success);
204
- // 对成功的第一跳,并行尝试第二跳
205
- const stableFees = [100, 500, 2500];
206
- const secondHopPromises = successfulFirstHops.flatMap(hop => stableFees.map(async (fee2) => {
207
- try {
208
- const finalResult = await quoter.quoteExactInputSingle.staticCall({
209
- tokenIn: hop.stableCoin,
210
- tokenOut,
211
- amountIn: hop.midAmount,
212
- fee: fee2,
213
- sqrtPriceLimitX96: 0n
214
- });
215
- const amountOut = Array.isArray(finalResult) ? finalResult[0] : finalResult;
216
- return { amountOut: amountOut || 0n, fee1: hop.fee1, fee2, success: amountOut && amountOut > 0n };
217
- }
218
- catch {
219
- return { amountOut: 0n, fee1: hop.fee1, fee2, success: false };
220
- }
221
- }));
222
- const secondHopResults = await Promise.all(secondHopPromises);
223
- // 返回第一个成功的多跳结果
224
- for (const result of secondHopResults) {
225
- if (result.success) {
226
- console.log(`[quoteV3] 多跳路径成功 (${result.fee1}→${result.fee2}): ${ethers.formatEther(result.amountOut)}`);
227
- return { amountOut: result.amountOut, fee: result.fee1 };
228
- }
229
- }
230
- console.warn(`[quoteV3] 所有路径均失败`);
231
- return { amountOut: 0n };
232
- }
233
- // ============================================================================
234
- // 统一报价接口
235
- // ============================================================================
236
- /**
237
- * 统一报价接口(根据版本自动选择 V2 或 V3)
238
- *
239
- * @param params - 报价参数
240
- * @returns 报价结果
241
- */
242
- export async function quote(params) {
243
- const { provider, tokenIn, tokenOut, amountIn, chain, version = 'v2', fee, routerOverride } = params;
244
- if (version === 'v3') {
245
- return quoteV3(provider, tokenIn, tokenOut, amountIn, chain, fee);
246
- }
247
- return quoteV2(provider, tokenIn, tokenOut, amountIn, chain, routerOverride);
248
- }
249
- // ============================================================================
250
- // 代币 → 原生代币报价
251
- // ============================================================================
252
- /**
253
- * 获取 ERC20 代币 → 原生代币(WBNB/WMON 等)的报价
254
- *
255
- * @param provider - Provider 实例
256
- * @param tokenAddress - ERC20 代币地址
257
- * @param tokenAmount - 代币数量(wei)
258
- * @param chain - 链名称
259
- * @param version - 'v2' | 'v3'
260
- * @param fee - V3 费率档位(仅 V3 时使用)
261
- * @param routerOverride - V2 时使用指定 Router(如 IROSwap,用于利润报价)
262
- * @returns 等值的原生代币数量(wei),失败返回 0n
263
- */
264
- export async function getTokenToNativeQuote(provider, tokenAddress, tokenAmount, chain, version = 'v2', fee, routerOverride) {
265
- if (tokenAmount <= 0n)
266
- return 0n;
267
- const chainUpper = chain.toUpperCase();
268
- const config = QUOTE_CONFIG[chainUpper];
269
- if (!config) {
270
- console.warn(`[getTokenToNativeQuote] 不支持的链: ${chain}`);
271
- return 0n;
272
- }
273
- const tokenLower = tokenAddress.toLowerCase();
274
- const wrappedNativeLower = config.wrappedNative.toLowerCase();
275
- // 如果代币本身就是包装原生代币,直接返回
276
- if (tokenLower === wrappedNativeLower) {
277
- return tokenAmount;
278
- }
279
- const result = await quote({
280
- provider,
281
- tokenIn: tokenAddress,
282
- tokenOut: config.wrappedNative,
283
- amountIn: tokenAmount,
284
- chain,
285
- version,
286
- fee,
287
- routerOverride
288
- });
289
- return result.amountOut;
290
- }
291
- /**
292
- * 获取原生代币 → ERC20 代币的报价
293
- *
294
- * @param provider - Provider 实例
295
- * @param tokenAddress - ERC20 代币地址
296
- * @param nativeAmount - 原生代币数量(wei)
297
- * @param chain - 链名称
298
- * @param version - 'v2' | 'v3'
299
- * @param fee - V3 费率档位(仅 V3 时使用)
300
- * @returns 等值的 ERC20 代币数量(wei),失败返回 0n
301
- */
302
- export async function getNativeToTokenQuote(provider, tokenAddress, nativeAmount, chain, version = 'v2', fee) {
303
- if (nativeAmount <= 0n)
304
- return 0n;
305
- const chainUpper = chain.toUpperCase();
306
- const config = QUOTE_CONFIG[chainUpper];
307
- if (!config) {
308
- console.warn(`[getNativeToTokenQuote] 不支持的链: ${chain}`);
309
- return 0n;
310
- }
311
- const tokenLower = tokenAddress.toLowerCase();
312
- const wrappedNativeLower = config.wrappedNative.toLowerCase();
313
- // 如果代币本身就是包装原生代币,直接返回
314
- if (tokenLower === wrappedNativeLower) {
315
- return nativeAmount;
316
- }
317
- const result = await quote({
318
- provider,
319
- tokenIn: config.wrappedNative,
320
- tokenOut: tokenAddress,
321
- amountIn: nativeAmount,
322
- chain,
323
- version,
324
- fee
325
- });
326
- return result.amountOut;
327
- }
328
- // ============================================================================
329
- // 工具函数
330
- // ============================================================================
331
- /**
332
- * 获取链的包装原生代币地址
333
- */
334
- export function getWrappedNativeAddress(chain) {
335
- const chainUpper = chain.toUpperCase();
336
- const config = QUOTE_CONFIG[chainUpper];
337
- return config?.wrappedNative || '';
338
- }
339
- /**
340
- * 获取链的稳定币列表
341
- */
342
- export function getStableCoins(chain) {
343
- const chainUpper = chain.toUpperCase();
344
- const config = QUOTE_CONFIG[chainUpper];
345
- return config?.stableCoins ? [...config.stableCoins] : [];
346
- }
@@ -1,16 +0,0 @@
1
- import type { JsonRpcProvider } from 'ethers';
2
- export interface QuoteParams {
3
- provider: JsonRpcProvider;
4
- tokenIn: string;
5
- tokenOut: string;
6
- amountIn: bigint;
7
- chain: string;
8
- version?: 'v2' | 'v3';
9
- fee?: number;
10
- routerOverride?: string;
11
- }
12
- export interface QuoteResult {
13
- amountOut: bigint;
14
- path?: string[];
15
- fee?: number;
16
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export type { SupportedChain, QuoteParams, QuoteResult, } from '../shared/foundation/types/quote-helpers.js';
@@ -1 +0,0 @@
1
- export {};