four-flap-meme-sdk 1.9.49 → 2.0.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 (530) hide show
  1. package/README.en.md +41 -6
  2. package/README.md +31 -0
  3. package/README.zh-CN.md +41 -6
  4. package/dist/abis/common.js +74 -68
  5. package/dist/abis/flap/vault.js +9 -7
  6. package/dist/abis/index.d.ts +3 -4
  7. package/dist/abis/index.js +3 -4
  8. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  9. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  10. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  11. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  12. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  13. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  14. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  15. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  16. package/dist/bundle-core/config-helpers.d.ts +36 -0
  17. package/dist/bundle-core/config-helpers.js +57 -0
  18. package/dist/bundle-core/errors.d.ts +50 -0
  19. package/dist/bundle-core/errors.js +34 -0
  20. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  21. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  22. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  23. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  24. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  25. package/dist/bundle-core/four-meme/core.js +515 -0
  26. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  27. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  28. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  29. package/dist/bundle-core/four-meme/private.js +465 -0
  30. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  31. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  32. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  33. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  34. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  35. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  36. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  37. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  38. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  39. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  40. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  41. package/dist/bundle-core/four-meme/swap.js +505 -0
  42. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  43. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  44. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  45. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  46. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  47. package/dist/bundle-core/four-meme/types/index.js +1 -0
  48. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  49. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  50. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  51. package/dist/bundle-core/four-meme/types.js +1 -0
  52. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  53. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  54. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  55. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  56. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  57. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  58. package/dist/bundle-core/index.d.ts +8 -0
  59. package/dist/bundle-core/index.js +8 -0
  60. package/dist/bundle-core/internal.d.ts +21 -0
  61. package/dist/bundle-core/internal.js +182 -0
  62. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  63. package/dist/bundle-core/sign-context-helpers.js +67 -0
  64. package/dist/bundle-core/submit.d.ts +293 -0
  65. package/dist/bundle-core/submit.js +727 -0
  66. package/dist/bundle-core/types/index.d.ts +8 -0
  67. package/dist/bundle-core/types/index.js +1 -0
  68. package/dist/bundle-core/types.d.ts +1 -0
  69. package/dist/bundle-core/types.js +1 -0
  70. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  71. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
  72. package/dist/chains/bsc/four/config.d.ts +5 -70
  73. package/dist/chains/bsc/four/config.js +2 -115
  74. package/dist/chains/bsc/four/core.d.ts +1 -4
  75. package/dist/chains/bsc/four/core.js +1 -589
  76. package/dist/chains/bsc/four/disperse.d.ts +12 -0
  77. package/dist/chains/bsc/four/disperse.js +470 -0
  78. package/dist/chains/bsc/four/index.d.ts +6 -6
  79. package/dist/chains/bsc/four/index.js +6 -6
  80. package/dist/chains/bsc/four/internal.d.ts +2 -50
  81. package/dist/chains/bsc/four/internal.js +2 -237
  82. package/dist/chains/bsc/four/pairwise.d.ts +7 -0
  83. package/dist/chains/bsc/four/pairwise.js +308 -0
  84. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  85. package/dist/chains/bsc/four/pancake-proxy.js +1 -688
  86. package/dist/chains/bsc/four/private.d.ts +1 -27
  87. package/dist/chains/bsc/four/private.js +1 -477
  88. package/dist/chains/bsc/four/submit.d.ts +2 -315
  89. package/dist/chains/bsc/four/submit.js +2 -746
  90. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  91. package/dist/chains/bsc/four/swap-buy-first.js +2 -506
  92. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  93. package/dist/chains/bsc/four/swap-internal.js +1 -18
  94. package/dist/chains/bsc/four/swap.d.ts +2 -144
  95. package/dist/chains/bsc/four/swap.js +2 -760
  96. package/dist/chains/bsc/four/sweep.d.ts +13 -0
  97. package/dist/chains/bsc/four/sweep.js +788 -0
  98. package/dist/chains/bsc/four/types.d.ts +1 -476
  99. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  100. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  101. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  102. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  103. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  104. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  105. package/dist/chains/bsc/four/utils.d.ts +5 -18
  106. package/dist/chains/bsc/four/utils.js +5 -1534
  107. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  109. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  110. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
  111. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  112. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  113. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  114. package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
  115. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  116. package/dist/chains/bsc/pancake/index.js +1 -3
  117. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  118. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  119. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  120. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  121. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  122. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  123. package/dist/chains/eni/batch-router/transfer.js +54 -23
  124. package/dist/chains/eni/batch-router/utils.js +32 -6
  125. package/dist/chains/eni/bundler/sign.js +4 -4
  126. package/dist/chains/eni/bundler/submit.js +1 -4
  127. package/dist/chains/eni/constants.js +1 -1
  128. package/dist/chains/eni/index.d.ts +1 -1
  129. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  130. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  131. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  132. package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
  133. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
  134. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  135. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  136. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  137. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  138. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
  139. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  140. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  141. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  142. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  143. package/dist/chains/eni/platforms/iro/index.js +4 -4
  144. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  145. package/dist/chains/eni/platforms/iro/token.js +107 -31
  146. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  147. package/dist/chains/eni/submit.js +5 -13
  148. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  149. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
  150. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  151. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  152. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
  153. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  154. package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
  155. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  156. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
  157. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  158. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  159. package/dist/chains/xlayer/eip7702/index.d.ts +27 -46
  160. package/dist/chains/xlayer/eip7702/index.js +27 -81
  161. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  162. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  163. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  164. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
  165. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  166. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  167. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  168. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  169. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  170. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  171. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  172. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  173. package/dist/chains/xlayer/eip7702/volume.js +83 -158
  174. package/dist/chains/xlayer/eoa/constants.js +1 -1
  175. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  176. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  177. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  178. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  179. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
  180. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  181. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
  182. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  183. package/dist/chains/xlayer/eoa/index.js +8 -23
  184. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  185. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  186. package/dist/chains/xlayer/eoa/types-core.d.ts +363 -0
  187. package/dist/chains/xlayer/eoa/types-core.js +53 -0
  188. package/dist/chains/xlayer/eoa/types-create.d.ts +413 -0
  189. package/dist/chains/xlayer/eoa/types-create.js +9 -0
  190. package/dist/chains/xlayer/eoa/types-volume.d.ts +209 -0
  191. package/dist/chains/xlayer/eoa/types-volume.js +13 -0
  192. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  193. package/dist/chains/xlayer/eoa/types.js +1 -3
  194. package/dist/contracts/helper3.d.ts +20 -17
  195. package/dist/contracts/helper3.js +56 -20
  196. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  197. package/dist/contracts/tm-bundle-helpers.js +72 -0
  198. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  199. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
  200. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
  201. package/dist/contracts/tm-bundle-merkle/config.js +2 -115
  202. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  203. package/dist/contracts/tm-bundle-merkle/core.js +1 -588
  204. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  205. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  206. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
  207. package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
  208. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  209. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
  210. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  211. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  212. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  213. package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
  214. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  215. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
  216. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  217. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  218. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  219. package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
  220. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  221. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  222. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  223. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  224. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  225. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  226. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  227. package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
  228. package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
  229. package/dist/contracts/tm-bundle.d.ts +3 -51
  230. package/dist/contracts/tm-bundle.js +102 -142
  231. package/dist/contracts/tm.d.ts +3 -2
  232. package/dist/contracts/tm.js +36 -32
  233. package/dist/contracts/tm1.js +9 -4
  234. package/dist/contracts/tm2.js +9 -4
  235. package/dist/dex/direct-router-helpers.d.ts +264 -0
  236. package/dist/dex/direct-router-helpers.js +539 -0
  237. package/dist/dex/direct-router.d.ts +3 -125
  238. package/dist/dex/direct-router.js +237 -652
  239. package/dist/dex/types.d.ts +81 -0
  240. package/dist/dex/types.js +1 -0
  241. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  242. package/dist/exports/root-bundle-and-tooling.js +30 -0
  243. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  244. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  245. package/dist/exports/root-foundations.d.ts +35 -0
  246. package/dist/exports/root-foundations.js +70 -0
  247. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  248. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  249. package/dist/flows/create.d.ts +2 -2
  250. package/dist/flows/create.js +6 -6
  251. package/dist/flows/index.d.ts +1 -0
  252. package/dist/flows/index.js +1 -0
  253. package/dist/index.d.ts +20 -91
  254. package/dist/index.js +20 -215
  255. package/dist/shared/abis/common.d.ts +2 -83
  256. package/dist/shared/abis/common.js +2 -252
  257. package/dist/shared/abis/index.d.ts +5 -6
  258. package/dist/shared/abis/index.js +5 -7
  259. package/dist/shared/clients/blockrazor.js +41 -24
  260. package/dist/shared/clients/club48.js +30 -26
  261. package/dist/shared/clients/emitservice.js +2 -0
  262. package/dist/shared/clients/four.js +23 -18
  263. package/dist/shared/clients/index.d.ts +8 -0
  264. package/dist/shared/clients/index.js +8 -0
  265. package/dist/shared/clients/merkle.js +26 -30
  266. package/dist/shared/constants/addresses.d.ts +1 -1
  267. package/dist/shared/constants/addresses.js +11 -2
  268. package/dist/shared/constants/chains.d.ts +1 -1
  269. package/dist/shared/constants/chains.js +1 -1
  270. package/dist/shared/constants/gas.d.ts +1 -1
  271. package/dist/shared/constants/gas.js +2 -6
  272. package/dist/shared/constants/index.d.ts +1 -0
  273. package/dist/shared/constants/index.js +1 -0
  274. package/dist/shared/constants/quote.d.ts +30 -0
  275. package/dist/shared/constants/quote.js +37 -0
  276. package/dist/shared/flap/__tests__/curve.test.js +3 -3
  277. package/dist/shared/flap/abi.js +1 -1
  278. package/dist/shared/flap/constants.d.ts +1 -1
  279. package/dist/shared/flap/constants.js +2 -2
  280. package/dist/shared/flap/curve.js +3 -0
  281. package/dist/shared/flap/errors.d.ts +1 -4
  282. package/dist/shared/flap/errors.js +21 -3
  283. package/dist/shared/flap/index.d.ts +2 -2
  284. package/dist/shared/flap/index.js +2 -2
  285. package/dist/shared/flap/meta.d.ts +16 -18
  286. package/dist/shared/flap/meta.js +14 -26
  287. package/dist/shared/flap/permit.js +6 -5
  288. package/dist/shared/flap/pinata.d.ts +9 -2
  289. package/dist/shared/flap/pinata.js +20 -18
  290. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  291. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  292. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  293. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  294. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  295. package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
  296. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
  297. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  298. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  299. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  300. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  301. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  302. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  303. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  304. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  305. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  306. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  307. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  308. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  309. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  310. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
  311. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +100 -0
  312. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +133 -0
  313. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  314. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  315. package/dist/shared/flap/portal-bundle.js +54 -42
  316. package/dist/shared/flap/portal.js +32 -10
  317. package/dist/shared/flap/vanity.js +4 -7
  318. package/dist/shared/flap/vault.d.ts +1 -1
  319. package/dist/shared/flap/vault.js +54 -48
  320. package/dist/shared/flap 2/__tests__/curve.test.d.ts +1 -0
  321. package/dist/shared/flap 2/portal-bundle-merkle/types.js +1 -0
  322. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  323. package/dist/shared/foundation/dex/v3-path.js +35 -0
  324. package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
  325. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  326. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  327. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  328. package/dist/shared/foundation/index.d.ts +13 -0
  329. package/dist/shared/foundation/index.js +12 -0
  330. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  331. package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
  332. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  333. package/dist/shared/foundation/normalize-unknown.js +29 -0
  334. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  335. package/dist/shared/foundation/sdk-logger.js +12 -0
  336. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  337. package/dist/shared/foundation/tx/build-request.js +25 -0
  338. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  339. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  340. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  341. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  342. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  343. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  344. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  345. package/dist/shared/foundation/types/erc20.js +1 -0
  346. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  347. package/dist/shared/foundation/types/holders-maker.js +1 -0
  348. package/dist/shared/foundation/types/index.d.ts +7 -0
  349. package/dist/shared/foundation/types/index.js +1 -0
  350. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  351. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  352. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  353. package/dist/shared/foundation/types/multicall.js +1 -0
  354. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  355. package/dist/shared/foundation/types/private-sale.js +1 -0
  356. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  357. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  358. package/dist/shared/four/tax-token.d.ts +1 -1
  359. package/dist/shared/four/tax-token.js +27 -7
  360. package/dist/shared/index.d.ts +4 -0
  361. package/dist/shared/index.js +4 -0
  362. package/dist/types/distribute.d.ts +72 -0
  363. package/dist/types/distribute.js +1 -0
  364. package/dist/types 2/errors.d.ts +27 -0
  365. package/dist/types 2/errors.js +34 -0
  366. package/dist/utils/airdrop-sweep-types.d.ts +1 -0
  367. package/dist/utils/airdrop-sweep-types.js +1 -0
  368. package/dist/utils/airdrop-sweep.d.ts +4 -76
  369. package/dist/utils/airdrop-sweep.js +38 -52
  370. package/dist/utils/bundle-helpers.d.ts +9 -243
  371. package/dist/utils/bundle-helpers.js +10 -584
  372. package/dist/utils/constants.d.ts +5 -61
  373. package/dist/utils/constants.js +5 -80
  374. package/dist/utils/contract-factory.d.ts +2 -4
  375. package/dist/utils/contract-factory.js +25 -18
  376. package/dist/utils/erc20-types.d.ts +1 -0
  377. package/dist/utils/erc20-types.js +1 -0
  378. package/dist/utils/erc20.d.ts +8 -90
  379. package/dist/utils/erc20.js +94 -153
  380. package/dist/utils/errors.d.ts +10 -22
  381. package/dist/utils/errors.js +61 -79
  382. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  383. package/dist/utils/holders-maker/addresses.js +15 -0
  384. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  385. package/dist/utils/holders-maker/buy-tx.js +278 -0
  386. package/dist/utils/holders-maker/constants.d.ts +6 -0
  387. package/dist/utils/holders-maker/constants.js +7 -0
  388. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  389. package/dist/utils/holders-maker/disperse.js +90 -0
  390. package/dist/utils/holders-maker/routing.d.ts +4 -0
  391. package/dist/utils/holders-maker/routing.js +45 -0
  392. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  393. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  394. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  395. package/dist/utils/holders-maker-helpers.js +9 -0
  396. package/dist/utils/holders-maker-types.d.ts +1 -0
  397. package/dist/utils/holders-maker-types.js +1 -0
  398. package/dist/utils/holders-maker.d.ts +2 -138
  399. package/dist/utils/holders-maker.js +23 -651
  400. package/dist/utils/hop-chains.d.ts +35 -0
  401. package/dist/utils/hop-chains.js +215 -0
  402. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  403. package/dist/utils/lp-inspect-helpers.js +109 -0
  404. package/dist/utils/lp-inspect-types.d.ts +1 -0
  405. package/dist/utils/lp-inspect-types.js +1 -0
  406. package/dist/utils/lp-inspect.d.ts +2 -112
  407. package/dist/utils/lp-inspect.js +63 -195
  408. package/dist/utils/mpcExclusive.d.ts +2 -5
  409. package/dist/utils/mpcExclusive.js +4 -3
  410. package/dist/utils/private-sale-types.d.ts +1 -0
  411. package/dist/utils/private-sale-types.js +1 -0
  412. package/dist/utils/private-sale.d.ts +2 -58
  413. package/dist/utils/private-sale.js +2 -7
  414. package/dist/utils/provider-factory.d.ts +4 -0
  415. package/dist/utils/provider-factory.js +10 -0
  416. package/dist/utils/quote-helpers-types.d.ts +1 -0
  417. package/dist/utils/quote-helpers-types.js +1 -0
  418. package/dist/utils/quote-helpers.d.ts +4 -45
  419. package/dist/utils/quote-helpers.js +15 -65
  420. package/dist/utils/stealth-transfer.d.ts +2 -28
  421. package/dist/utils/stealth-transfer.js +30 -14
  422. package/dist/utils/swap-helpers.d.ts +0 -3
  423. package/dist/utils/swap-helpers.js +6 -9
  424. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  425. package/dist/utils/types/airdrop-sweep.js +1 -0
  426. package/dist/utils/types/contract-factory.d.ts +1 -0
  427. package/dist/utils/types/contract-factory.js +1 -0
  428. package/dist/utils/types/erc20.d.ts +1 -0
  429. package/dist/utils/types/erc20.js +1 -0
  430. package/dist/utils/types/errors.d.ts +1 -0
  431. package/dist/utils/types/errors.js +1 -0
  432. package/dist/utils/types/holders-maker.d.ts +1 -0
  433. package/dist/utils/types/holders-maker.js +1 -0
  434. package/dist/utils/types/hop-chains.d.ts +8 -0
  435. package/dist/utils/types/hop-chains.js +1 -0
  436. package/dist/utils/types/index.d.ts +13 -0
  437. package/dist/utils/types/index.js +1 -0
  438. package/dist/utils/types/lp-inspect.d.ts +1 -0
  439. package/dist/utils/types/lp-inspect.js +1 -0
  440. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  441. package/dist/utils/types/mpc-exclusive.js +1 -0
  442. package/dist/utils/types/private-sale.d.ts +1 -0
  443. package/dist/utils/types/private-sale.js +1 -0
  444. package/dist/utils/types/quote-helpers.d.ts +1 -0
  445. package/dist/utils/types/quote-helpers.js +1 -0
  446. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  447. package/dist/utils/types/stealth-transfer.js +1 -0
  448. package/dist/utils/types/wallet.d.ts +25 -0
  449. package/dist/utils/types/wallet.js +1 -0
  450. package/dist/utils/wallet.d.ts +2 -25
  451. package/dist/utils/wallet.js +9 -10
  452. package/package.json +55 -2
  453. package/src/abis/contracts/TaxToken.json +969 -0
  454. package/src/abis/contracts/TokenManager.json +836 -0
  455. package/src/abis/contracts/TokenManager2.json +136 -0
  456. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  457. /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
  458. /package/dist/{shared 2/flap/portal-bundle-merkle/types.js → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
  459. /package/dist/{shared 2/abis → shared/abis 2}/TaxToken.json +0 -0
  460. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager.json +0 -0
  461. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager2.json +0 -0
  462. /package/dist/{shared 2/abis → shared/abis 2}/TokenManagerHelper3.json +0 -0
  463. /package/dist/{shared 2/abis → shared/abis 2}/common.d.ts +0 -0
  464. /package/dist/{shared 2/abis → shared/abis 2}/common.js +0 -0
  465. /package/dist/{shared 2/abis → shared/abis 2}/index.d.ts +0 -0
  466. /package/dist/{shared 2/abis → shared/abis 2}/index.js +0 -0
  467. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.d.ts +0 -0
  468. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.js +0 -0
  469. /package/dist/{shared 2/clients → shared/clients 2}/club48.d.ts +0 -0
  470. /package/dist/{shared 2/clients → shared/clients 2}/club48.js +0 -0
  471. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.d.ts +0 -0
  472. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.js +0 -0
  473. /package/dist/{shared 2/clients → shared/clients 2}/four.d.ts +0 -0
  474. /package/dist/{shared 2/clients → shared/clients 2}/four.js +0 -0
  475. /package/dist/{shared 2/clients → shared/clients 2}/merkle.d.ts +0 -0
  476. /package/dist/{shared 2/clients → shared/clients 2}/merkle.js +0 -0
  477. /package/dist/{shared 2/flap → shared/flap 2}/__tests__/curve.test.js +0 -0
  478. /package/dist/{shared 2/flap → shared/flap 2}/abi.d.ts +0 -0
  479. /package/dist/{shared 2/flap → shared/flap 2}/abi.js +0 -0
  480. /package/dist/{shared 2/flap → shared/flap 2}/constants.d.ts +0 -0
  481. /package/dist/{shared 2/flap → shared/flap 2}/constants.js +0 -0
  482. /package/dist/{shared 2/flap → shared/flap 2}/curve.d.ts +0 -0
  483. /package/dist/{shared 2/flap → shared/flap 2}/curve.js +0 -0
  484. /package/dist/{shared 2/flap → shared/flap 2}/errors.d.ts +0 -0
  485. /package/dist/{shared 2/flap → shared/flap 2}/errors.js +0 -0
  486. /package/dist/{shared 2/flap → shared/flap 2}/index.d.ts +0 -0
  487. /package/dist/{shared 2/flap → shared/flap 2}/index.js +0 -0
  488. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.d.ts +0 -0
  489. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.js +0 -0
  490. /package/dist/{shared 2/flap → shared/flap 2}/meta.d.ts +0 -0
  491. /package/dist/{shared 2/flap → shared/flap 2}/meta.js +0 -0
  492. /package/dist/{shared 2/flap → shared/flap 2}/permit.d.ts +0 -0
  493. /package/dist/{shared 2/flap → shared/flap 2}/permit.js +0 -0
  494. /package/dist/{shared 2/flap → shared/flap 2}/pinata.d.ts +0 -0
  495. /package/dist/{shared 2/flap → shared/flap 2}/pinata.js +0 -0
  496. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.d.ts +0 -0
  497. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.js +0 -0
  498. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.d.ts +0 -0
  499. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.js +0 -0
  500. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.d.ts +0 -0
  501. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.js +0 -0
  502. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
  503. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.js +0 -0
  504. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.d.ts +0 -0
  505. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.js +0 -0
  506. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
  507. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.js +0 -0
  508. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.d.ts +0 -0
  509. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.js +0 -0
  510. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.d.ts +0 -0
  511. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.js +0 -0
  512. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.d.ts +0 -0
  513. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.js +0 -0
  514. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/types.d.ts +0 -0
  515. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.d.ts +0 -0
  516. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.js +0 -0
  517. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.d.ts +0 -0
  518. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.js +0 -0
  519. /package/dist/{shared 2/flap → shared/flap 2}/portal.d.ts +0 -0
  520. /package/dist/{shared 2/flap → shared/flap 2}/portal.js +0 -0
  521. /package/dist/{shared 2/flap → shared/flap 2}/vanity.d.ts +0 -0
  522. /package/dist/{shared 2/flap → shared/flap 2}/vanity.js +0 -0
  523. /package/dist/{shared 2/flap → shared/flap 2}/vault.d.ts +0 -0
  524. /package/dist/{shared 2/flap → shared/flap 2}/vault.js +0 -0
  525. /package/dist/{shared 2/four → shared/four 2}/index.d.ts +0 -0
  526. /package/dist/{shared 2/four → shared/four 2}/index.js +0 -0
  527. /package/dist/{shared 2/four → shared/four 2}/tax-token.d.ts +0 -0
  528. /package/dist/{shared 2/four → shared/four 2}/tax-token.js +0 -0
  529. /package/dist/{shared 2/index.d.ts → shared/index 2.js} +0 -0
  530. /package/dist/{shared 2/index.js → shared/index.d 2.ts} +0 -0
@@ -1,233 +1,19 @@
1
1
  /**
2
- * XLayer EOA 模式批量换手
3
- *
4
- * 专门为 XLayer 链设计,不影响 BSC 链的逻辑
5
- * - 使用 PotatoSwap V3 Quoter
6
- * - 使用 WOKB 作为 Wrapped Native Token
7
- * - 支持多跳转账和利润刮取
2
+ * eoa-bundle-swap - 主函数
8
3
  */
9
4
  import { ethers, Contract, Wallet } from 'ethers';
10
5
  import { calculateSellAmount } from '../../../utils/swap-helpers.js';
11
- import { NonceManager, getDeadline, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
12
- import { PROFIT_CONFIG, BLOCKRAZOR_BUILDER_EOA } from '../../../utils/constants.js';
13
- import { GAS_LIMITS, CHAINS } from '../../../shared/constants/index.js';
14
- import { quoteV2, quoteV3 } from '../../../utils/quote-helpers.js';
15
- import { V2_ROUTER_ABI, V3_ROUTER02_ABI } from '../../../shared/abis/common.js';
16
- import { generateWallets } from '../../../utils/wallet.js';
17
- // ✅ 从 XLayer 常量导入正确的路由地址
18
- import { POTATOSWAP_V2_ROUTER, POTATOSWAP_SWAP_ROUTER02, WOKB as WOKB_CONST } from './constants.js';
19
- // ==================== XLayer 专用常量 ====================
20
- const XLAYER_CHAIN_ID = CHAINS.XLAYER.chainId;
21
- const XLAYER_CHAIN_NAME = CHAINS.XLAYER.name;
22
- const WOKB_ADDRESS = ethers.getAddress(WOKB_CONST);
23
- // ✅ 强制校验和,避免大小写错误导致的 bad address checksum
24
- const POTATO_V2_ROUTER = ethers.getAddress(POTATOSWAP_V2_ROUTER);
25
- const POTATO_V3_ROUTER = ethers.getAddress(POTATOSWAP_SWAP_ROUTER02); // ✅ SwapRouter02 用于 V3 交易
26
- const NATIVE_TRANSFER_GAS_LIMIT = GAS_LIMITS.NATIVE_TRANSFER;
27
- const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
28
- // ==================== 工具函数 ====================
29
- function createXLayerContext(config) {
30
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
31
- chainId: XLAYER_CHAIN_ID,
32
- name: 'XLayer'
33
- });
34
- return { chainId: XLAYER_CHAIN_ID, provider };
35
- }
36
- function getGasLimit(config, defaultGas = 800000) {
37
- if (config.gasLimit !== undefined) {
38
- return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
39
- }
40
- const multiplier = config.gasLimitMultiplier ?? 1.0;
41
- return BigInt(Math.ceil(defaultGas * multiplier));
42
- }
43
- async function getGasPrice(provider, config) {
44
- const feeData = await provider.getFeeData();
45
- let gasPrice = feeData.gasPrice || ethers.parseUnits('0.1', 'gwei');
46
- if (config.minGasPriceGwei) {
47
- const minGas = ethers.parseUnits(config.minGasPriceGwei.toString(), 'gwei');
48
- if (gasPrice < minGas)
49
- gasPrice = minGas;
50
- }
51
- if (config.maxGasPriceGwei) {
52
- const maxGas = ethers.parseUnits(config.maxGasPriceGwei.toString(), 'gwei');
53
- if (gasPrice > maxGas)
54
- gasPrice = maxGas;
55
- }
56
- return gasPrice;
57
- }
58
- function getProfitRateBps(userType) {
59
- if (userType === 'v0')
60
- return PROFIT_CONFIG.RATE_BPS_V0;
61
- if (userType === 'v1')
62
- return PROFIT_CONFIG.RATE_BPS_V1;
63
- return PROFIT_CONFIG.RATE_BPS_V0;
64
- }
65
- function calculateProfitAmount(estimatedOutput, userType) {
66
- if (estimatedOutput <= 0n)
67
- return 0n;
68
- const rateBps = getProfitRateBps(userType);
69
- return (estimatedOutput * BigInt(rateBps)) / 10000n;
70
- }
71
- // ==================== 报价函数 ====================
72
- async function quoteSellOutput(provider, routeParams, sellAmountWei) {
73
- if (routeParams.routeType === 'v2') {
74
- const { v2Path } = routeParams;
75
- const tokenIn = v2Path[0];
76
- const tokenOut = v2Path[v2Path.length - 1];
77
- const result = await quoteV2(provider, tokenIn, tokenOut, sellAmountWei, XLAYER_CHAIN_NAME);
78
- if (result.amountOut > 0n) {
79
- return result.amountOut;
80
- }
81
- throw new Error('V2 报价失败');
82
- }
83
- if (routeParams.routeType === 'v3-single') {
84
- const params = routeParams;
85
- const result = await quoteV3(provider, params.v3TokenIn, params.v3TokenOut, sellAmountWei, XLAYER_CHAIN_NAME, params.v3Fee);
86
- if (result.amountOut > 0n) {
87
- return result.amountOut;
88
- }
89
- // ❗️兜底:如果 V3 报价失败且提供了 v2Path,则尝试 V2 报价(避免因为无对应费率池导致失败)
90
- if (params.v2Path && params.v2Path.length >= 2) {
91
- const tokenIn = params.v2Path[0];
92
- const tokenOut = params.v2Path[params.v2Path.length - 1];
93
- const v2Result = await quoteV2(provider, tokenIn, tokenOut, sellAmountWei, XLAYER_CHAIN_NAME);
94
- if (v2Result.amountOut > 0n) {
95
- return v2Result.amountOut;
96
- }
97
- }
98
- throw new Error(`V3 单跳报价失败: tokenIn=${params.v3TokenIn}, tokenOut=${params.v3TokenOut}, fee=${params.v3Fee}`);
99
- }
100
- if (routeParams.routeType === 'v3-multi') {
101
- const params = routeParams;
102
- const tokenIn = params.v3ExactTokenIn;
103
- const result = await quoteV3(provider, tokenIn, WOKB_ADDRESS, sellAmountWei, XLAYER_CHAIN_NAME);
104
- if (result.amountOut > 0n) {
105
- return result.amountOut;
106
- }
107
- // ❗️兜底:如果 V3 多跳失败且提供 v2Path,则尝试 V2 报价
108
- if (params.v2Path && params.v2Path.length >= 2) {
109
- const tokenInV2 = params.v2Path[0];
110
- const tokenOutV2 = params.v2Path[params.v2Path.length - 1];
111
- const v2Result = await quoteV2(provider, tokenInV2, tokenOutV2, sellAmountWei, XLAYER_CHAIN_NAME);
112
- if (v2Result.amountOut > 0n) {
113
- return v2Result.amountOut;
114
- }
115
- }
116
- throw new Error(`V3 多跳报价失败`);
117
- }
118
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
119
- throw new Error(`不支持的路由类型: ${routeParams.routeType}`);
120
- }
121
- async function getERC20ToOkbQuote(provider, tokenAddress, tokenAmount, version = 'v2', fee) {
122
- if (tokenAmount <= 0n)
123
- return 0n;
124
- const tokenLower = tokenAddress.toLowerCase();
125
- const wokbLower = WOKB_ADDRESS.toLowerCase();
126
- if (tokenLower === wokbLower)
127
- return tokenAmount;
128
- if (version === 'v3') {
129
- const result = await quoteV3(provider, tokenAddress, WOKB_ADDRESS, tokenAmount, XLAYER_CHAIN_NAME, fee);
130
- if (result.amountOut > 0n) {
131
- return result.amountOut;
132
- }
133
- return 0n;
134
- }
135
- const result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, tokenAmount, XLAYER_CHAIN_NAME);
136
- if (result.amountOut > 0n) {
137
- return result.amountOut;
138
- }
139
- return 0n;
140
- }
141
- function generateDisperseHopPaths(targetAddresses, hopCount, provider) {
142
- if (hopCount <= 0) {
143
- return targetAddresses.map(addr => ({
144
- targetAddress: addr,
145
- hopWallets: [],
146
- hopWalletsInfo: []
147
- }));
148
- }
149
- return targetAddresses.map(targetAddress => {
150
- const hopWalletsInfo = generateWallets(hopCount);
151
- const hopWallets = hopWalletsInfo.map(w => new Wallet(w.privateKey, provider));
152
- return { targetAddress, hopWallets, hopWalletsInfo };
153
- });
154
- }
155
- async function buildNativeHopChain(payer, path, finalAmount, gasPrice, txType, payerNonce) {
156
- const signedTxs = [];
157
- const hopCount = path.hopWallets.length;
158
- if (hopCount === 0) {
159
- const tx = {
160
- to: path.targetAddress,
161
- value: finalAmount,
162
- nonce: payerNonce,
163
- gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
164
- chainId: XLAYER_CHAIN_ID,
165
- type: txType
166
- };
167
- if (txType === 2) {
168
- tx.maxFeePerGas = gasPrice;
169
- tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
170
- }
171
- else {
172
- tx.gasPrice = gasPrice;
173
- }
174
- signedTxs.push(await payer.signTransaction(tx));
175
- return signedTxs;
176
- }
177
- const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
178
- const amountsPerHop = [];
179
- for (let i = 0; i < hopCount; i++) {
180
- const remainingHops = hopCount - i;
181
- amountsPerHop.push(finalAmount + hopGasCost * BigInt(remainingHops));
182
- }
183
- // payer → hop1
184
- const firstTx = {
185
- to: path.hopWallets[0].address,
186
- value: amountsPerHop[0],
187
- nonce: payerNonce,
188
- gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
189
- chainId: XLAYER_CHAIN_ID,
190
- type: txType
191
- };
192
- if (txType === 2) {
193
- firstTx.maxFeePerGas = gasPrice;
194
- firstTx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
195
- }
196
- else {
197
- firstTx.gasPrice = gasPrice;
198
- }
199
- signedTxs.push(await payer.signTransaction(firstTx));
200
- // hop1 → hop2 → ... → target
201
- for (let i = 0; i < hopCount; i++) {
202
- const fromWallet = path.hopWallets[i];
203
- const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
204
- const amount = i === hopCount - 1 ? finalAmount : amountsPerHop[i + 1];
205
- const tx = {
206
- to: toAddress,
207
- value: amount,
208
- nonce: 0,
209
- gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
210
- chainId: XLAYER_CHAIN_ID,
211
- type: txType
212
- };
213
- if (txType === 2) {
214
- tx.maxFeePerGas = gasPrice;
215
- tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
216
- }
217
- else {
218
- tx.gasPrice = gasPrice;
219
- }
220
- signedTxs.push(await fromWallet.signTransaction(tx));
221
- }
222
- return signedTxs;
223
- }
224
- // ==================== XLayer 快捷批量换手 ====================
6
+ import { NonceManager, getDeadline, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
7
+ import { BLOCKRAZOR_BUILDER_EOA, getProfitRecipient } from '../../../shared/constants/index.js';
8
+ import { GAS_LIMITS } from '../../../shared/constants/index.js';
9
+ import { V2_ROUTER_ABI, V3_ROUTER02_ABI } from '../../../abis/common.js';
10
+ import { NATIVE_TRANSFER_GAS_LIMIT, POTATO_V2_ROUTER, POTATO_V3_ROUTER, WOKB_ADDRESS, XLAYER_CHAIN_ID, ZERO_ADDRESS, buildNativeHopChain, calculateProfitAmount, createXLayerContext, generateDisperseHopPaths, getERC20ToOkbQuote, getGasLimit, getGasPrice, quoteSellOutput, } from './eoa-bundle-swap-helpers.js';
225
11
  export async function xlayerQuickBatchSwapMerkle(params) {
226
- const { sellerPrivateKey, sellAmount, sellPercentage, buyerPrivateKeys, buyerRatios, buyerAmounts, tokenAddress, routeParams, config, quoteToken, quoteTokenDecimals = 18, disperseHopCount = 0, startNonces } = params;
12
+ const { sellerPrivateKey, sellAmount, sellPercentage, buyerPrivateKeys, buyerRatios, buyerAmounts, tokenAddress, routeParams, config, quoteToken, quoteTokenDecimals = 18, disperseHopCount = 0, startNonces, } = params;
227
13
  const useNativeToken = !quoteToken || quoteToken === ZERO_ADDRESS;
228
14
  const context = createXLayerContext(config);
229
15
  const seller = new Wallet(sellerPrivateKey, context.provider);
230
- const buyers = buyerPrivateKeys.map(pk => new Wallet(pk, context.provider));
16
+ const buyers = buyerPrivateKeys.map((pk) => new Wallet(pk, context.provider));
231
17
  // 校验卖出路径输出代币
232
18
  let sellOutputToken;
233
19
  if (routeParams.routeType === 'v2') {
@@ -256,7 +42,7 @@ export async function xlayerQuickBatchSwapMerkle(params) {
256
42
  const txType = config.txType ?? 0;
257
43
  const [gasPrice, sellAmountResult] = await Promise.all([
258
44
  getGasPrice(context.provider, config),
259
- calculateSellAmount(context.provider, tokenAddress, seller.address, sellAmount, sellPercentage)
45
+ calculateSellAmount(context.provider, tokenAddress, seller.address, sellAmount, sellPercentage),
260
46
  ]);
261
47
  const { amount: sellAmountWei, decimals } = sellAmountResult;
262
48
  // 获取卖出报价
@@ -276,22 +62,18 @@ export async function xlayerQuickBatchSwapMerkle(params) {
276
62
  // 计算每个买方分到的金额
277
63
  let transferAmountsWei;
278
64
  if (buyerAmounts && buyerAmounts.length === buyers.length) {
279
- transferAmountsWei = buyerAmounts.map(amt => useNativeToken ? ethers.parseEther(amt) : ethers.parseUnits(amt, quoteTokenDecimals));
65
+ transferAmountsWei = buyerAmounts.map((amt) => useNativeToken ? ethers.parseEther(amt) : ethers.parseUnits(amt, quoteTokenDecimals));
280
66
  }
281
67
  else if (buyerRatios && buyerRatios.length === buyers.length) {
282
- transferAmountsWei = buyerRatios.map(ratio => (distributableAmount * BigInt(Math.round(ratio * 10000))) / 10000n);
68
+ transferAmountsWei = buyerRatios.map((ratio) => (distributableAmount * BigInt(Math.round(ratio * 10000))) / 10000n);
283
69
  }
284
70
  else {
285
71
  throw new Error('必须提供 buyerRatios 或 buyerAmounts');
286
72
  }
287
73
  // 获取贿赂金额
288
- const bribeAmount = config.bribeAmount && config.bribeAmount > 0
289
- ? ethers.parseEther(String(config.bribeAmount))
290
- : 0n;
74
+ const bribeAmount = config.bribeAmount && config.bribeAmount > 0 ? ethers.parseEther(String(config.bribeAmount)) : 0n;
291
75
  // 规划 Nonce
292
- let sellerNonce = startNonces && startNonces.length > 0
293
- ? startNonces[0]
294
- : await nonceManager.getNextNonce(seller);
76
+ let sellerNonce = startNonces && startNonces.length > 0 ? startNonces[0] : await nonceManager.getNextNonce(seller);
295
77
  const deadline = getDeadline();
296
78
  // 1. 贿赂交易
297
79
  let bribeTx = null;
@@ -303,7 +85,7 @@ export async function xlayerQuickBatchSwapMerkle(params) {
303
85
  gasPrice,
304
86
  gasLimit: GAS_LIMITS.BRIBE,
305
87
  chainId: XLAYER_CHAIN_ID,
306
- type: txType
88
+ type: txType,
307
89
  });
308
90
  }
309
91
  // 2. 卖出交易
@@ -322,15 +104,17 @@ export async function xlayerQuickBatchSwapMerkle(params) {
322
104
  else if (routeParams.routeType === 'v3-single') {
323
105
  const { v3TokenIn, v3TokenOut, v3Fee } = routeParams;
324
106
  const v3RouterSeller = new Contract(POTATO_V3_ROUTER, V3_ROUTER02_ABI, seller);
325
- const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [{
107
+ const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
108
+ {
326
109
  tokenIn: v3TokenIn,
327
110
  tokenOut: v3TokenOut,
328
111
  fee: v3Fee,
329
112
  recipient: useNativeToken ? POTATO_V3_ROUTER : seller.address,
330
113
  amountIn: sellAmountWei,
331
114
  amountOutMinimum: 0n,
332
- sqrtPriceLimitX96: 0n
333
- }]);
115
+ sqrtPriceLimitX96: 0n,
116
+ },
117
+ ]);
334
118
  if (useNativeToken) {
335
119
  const sellUnwrapData = v3RouterIface.encodeFunctionData('unwrapWETH9', [0n, seller.address]);
336
120
  sellUnsigned = await v3RouterSeller.multicall.populateTransaction(deadline, [sellSwapData, sellUnwrapData]);
@@ -349,13 +133,13 @@ export async function xlayerQuickBatchSwapMerkle(params) {
349
133
  gasLimit: finalGasLimit,
350
134
  gasPrice,
351
135
  chainId: XLAYER_CHAIN_ID,
352
- type: txType
136
+ type: txType,
353
137
  });
354
138
  // 3. 转账交易
355
139
  const buyerGasCost = gasPrice * finalGasLimit;
356
- const hopPaths = generateDisperseHopPaths(buyers.map(b => b.address), disperseHopCount, context.provider);
140
+ const hopPaths = generateDisperseHopPaths(buyers.map((b) => b.address), disperseHopCount, context.provider);
357
141
  const allHopWallets = [];
358
- hopPaths.forEach(path => allHopWallets.push(...path.hopWalletsInfo));
142
+ hopPaths.forEach((path) => allHopWallets.push(...path.hopWalletsInfo));
359
143
  let transferTxs;
360
144
  if (disperseHopCount === 0) {
361
145
  const transferNonces = buyers.map((_, i) => sellerNonce + i);
@@ -369,7 +153,7 @@ export async function xlayerQuickBatchSwapMerkle(params) {
369
153
  gasPrice,
370
154
  gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
371
155
  chainId: XLAYER_CHAIN_ID,
372
- type: txType
156
+ type: txType,
373
157
  });
374
158
  }));
375
159
  }
@@ -385,7 +169,7 @@ export async function xlayerQuickBatchSwapMerkle(params) {
385
169
  // 4. 买入交易
386
170
  const buyerNonces = startNonces && startNonces.length > 1
387
171
  ? startNonces.slice(1)
388
- : await Promise.all(buyers.map(buyer => nonceManager.getNextNonce(buyer)));
172
+ : await Promise.all(buyers.map((buyer) => nonceManager.getNextNonce(buyer)));
389
173
  const signedBuys = await Promise.all(buyers.map(async (buyer, i) => {
390
174
  const buyAmount = transferAmountsWei[i];
391
175
  const buyValue = useNativeToken ? buyAmount : 0n;
@@ -404,15 +188,17 @@ export async function xlayerQuickBatchSwapMerkle(params) {
404
188
  else if (routeParams.routeType === 'v3-single') {
405
189
  const { v3TokenIn, v3TokenOut, v3Fee } = routeParams;
406
190
  const v3RouterBuyer = new Contract(POTATO_V3_ROUTER, V3_ROUTER02_ABI, buyer);
407
- const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [{
191
+ const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
192
+ {
408
193
  tokenIn: v3TokenOut,
409
194
  tokenOut: v3TokenIn,
410
195
  fee: v3Fee,
411
196
  recipient: buyer.address,
412
197
  amountIn: buyAmount,
413
198
  amountOutMinimum: 0n,
414
- sqrtPriceLimitX96: 0n
415
- }]);
199
+ sqrtPriceLimitX96: 0n,
200
+ },
201
+ ]);
416
202
  buyUnsigned = await v3RouterBuyer.multicall.populateTransaction(deadline, [buySwapData], { value: buyValue });
417
203
  }
418
204
  else {
@@ -425,7 +211,7 @@ export async function xlayerQuickBatchSwapMerkle(params) {
425
211
  gasLimit: finalGasLimit,
426
212
  gasPrice,
427
213
  chainId: XLAYER_CHAIN_ID,
428
- type: txType
214
+ type: txType,
429
215
  });
430
216
  }));
431
217
  nonceManager.clearTemp();
@@ -443,12 +229,12 @@ export async function xlayerQuickBatchSwapMerkle(params) {
443
229
  provider: context.provider,
444
230
  payerWallet: seller,
445
231
  profitAmount,
446
- profitRecipient: PROFIT_CONFIG.RECIPIENT,
232
+ profitRecipient: getProfitRecipient(),
447
233
  hopCount: PROFIT_HOP_COUNT,
448
234
  gasPrice,
449
235
  chainId: XLAYER_CHAIN_ID,
450
236
  txType,
451
- startNonce: sellerNonce++
237
+ startNonce: sellerNonce++,
452
238
  });
453
239
  signedTransactions.push(...profitHopResult.signedTransactions);
454
240
  profitHopWallets = profitHopResult.hopWallets;
@@ -459,19 +245,19 @@ export async function xlayerQuickBatchSwapMerkle(params) {
459
245
  profitHopWallets,
460
246
  metadata: {
461
247
  sellerAddress: seller.address,
462
- buyerAddresses: buyers.map(b => b.address),
248
+ buyerAddresses: buyers.map((b) => b.address),
463
249
  sellAmount: ethers.formatUnits(sellAmountWei, decimals),
464
250
  estimatedOutput: ethers.formatEther(estimatedOutput),
465
- transferAmounts: transferAmountsWei.map(amt => ethers.formatEther(amt)),
251
+ transferAmounts: transferAmountsWei.map((amt) => ethers.formatEther(amt)),
466
252
  profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
467
253
  useNativeToken,
468
- disperseHopCount: disperseHopCount > 0 ? disperseHopCount : undefined
469
- }
254
+ disperseHopCount: disperseHopCount > 0 ? disperseHopCount : undefined,
255
+ },
470
256
  };
471
257
  }
472
258
  // ==================== XLayer 交叉换手 ====================
473
259
  export async function xlayerCrossSwapMerkle(params) {
474
- const { sellerPrivateKeys, sellAmounts, buyerPrivateKeys, tokenAddress, routeParams, config, quoteToken, quoteTokenDecimals = 18, buyersPerSell, disperseHopCount = 0, startNonces: inputNonces } = params;
260
+ const { sellerPrivateKeys, sellAmounts, buyerPrivateKeys, tokenAddress, routeParams, config, quoteToken, quoteTokenDecimals = 18, buyersPerSell, disperseHopCount = 0, startNonces: inputNonces, } = params;
475
261
  if (sellerPrivateKeys.length === 0)
476
262
  throw new Error('至少需要一个卖方');
477
263
  if (sellerPrivateKeys.length !== sellAmounts.length)
@@ -480,8 +266,8 @@ export async function xlayerCrossSwapMerkle(params) {
480
266
  throw new Error('至少需要一个买方');
481
267
  const context = createXLayerContext(config);
482
268
  const nonceManager = new NonceManager(context.provider);
483
- const allSellerWallets = sellerPrivateKeys.map(pk => new Wallet(pk, context.provider));
484
- const allBuyerWallets = buyerPrivateKeys.map(pk => new Wallet(pk, context.provider));
269
+ const allSellerWallets = sellerPrivateKeys.map((pk) => new Wallet(pk, context.provider));
270
+ const allBuyerWallets = buyerPrivateKeys.map((pk) => new Wallet(pk, context.provider));
485
271
  // ✅ 优先使用前端传入的 nonce,避免 nonce 不同步
486
272
  const addressToNonce = new Map();
487
273
  for (const wallet of allSellerWallets) {
@@ -512,9 +298,7 @@ export async function xlayerCrossSwapMerkle(params) {
512
298
  const rounds = [];
513
299
  let buyerCursor = 0;
514
300
  const buyerBatchSize = Math.max(1, buyersPerSell ?? buyerPrivateKeys.length);
515
- const bribeAmount = config.bribeAmount && config.bribeAmount > 0
516
- ? ethers.parseEther(String(config.bribeAmount))
517
- : 0n;
301
+ const bribeAmount = config.bribeAmount && config.bribeAmount > 0 ? ethers.parseEther(String(config.bribeAmount)) : 0n;
518
302
  const hasBribe = bribeAmount > 0n;
519
303
  for (let i = 0; i < sellerPrivateKeys.length; i++) {
520
304
  const sellerPk = sellerPrivateKeys[i];
@@ -529,7 +313,7 @@ export async function xlayerCrossSwapMerkle(params) {
529
313
  buyerCursor++;
530
314
  }
531
315
  const sellerNonce = addressToNonce.get(sellerWallet.address);
532
- const roundBuyerNonces = roundBuyerWallets.map(w => {
316
+ const roundBuyerNonces = roundBuyerWallets.map((w) => {
533
317
  const nonce = addressToNonce.get(w.address);
534
318
  addressToNonce.set(w.address, nonce + 1);
535
319
  return nonce;
@@ -555,7 +339,7 @@ export async function xlayerCrossSwapMerkle(params) {
555
339
  quoteToken,
556
340
  quoteTokenDecimals,
557
341
  disperseHopCount,
558
- startNonces
342
+ startNonces,
559
343
  });
560
344
  addressToNonce.set(sellerWallet.address, sellerNonce + sellerNonceConsumed);
561
345
  allSigned.push(...res.signedTransactions);
@@ -567,7 +351,7 @@ export async function xlayerCrossSwapMerkle(params) {
567
351
  sellerAddress: res.metadata?.sellerAddress || '',
568
352
  buyerAddresses: res.metadata?.buyerAddresses || [],
569
353
  sellAmount,
570
- bundleHash: undefined
354
+ bundleHash: undefined,
571
355
  });
572
356
  }
573
357
  nonceManager.clearTemp();
@@ -575,7 +359,7 @@ export async function xlayerCrossSwapMerkle(params) {
575
359
  signedTransactions: allSigned,
576
360
  rounds,
577
361
  disperseHopWallets: allDisperse.length > 0 ? allDisperse : undefined,
578
- profitHopWallets: allProfit.length > 0 ? allProfit : undefined
362
+ profitHopWallets: allProfit.length > 0 ? allProfit : undefined,
579
363
  };
580
364
  }
581
365
  /**
@@ -589,7 +373,7 @@ export async function xlayerCrossSwapMerkle(params) {
589
373
  * 交易顺序:卖1 → 买1 → 卖2 → 买2 → ... (交替执行)
590
374
  */
591
375
  export async function xlayerPureCrossSwapMerkle(params) {
592
- const { sellerPrivateKeys, sellAmounts, buyerPrivateKeys, buyAmounts, tokenAddress, routeParams, config, quoteToken, startNonces: inputNonces } = params;
376
+ const { sellerPrivateKeys, sellAmounts, buyerPrivateKeys, buyAmounts, tokenAddress, routeParams, config, quoteToken, startNonces: inputNonces, } = params;
593
377
  if (sellerPrivateKeys.length === 0)
594
378
  throw new Error('至少需要一个卖方');
595
379
  if (sellerPrivateKeys.length !== sellAmounts.length)
@@ -601,8 +385,8 @@ export async function xlayerPureCrossSwapMerkle(params) {
601
385
  const context = createXLayerContext(config);
602
386
  const nonceManager = new NonceManager(context.provider);
603
387
  const useNativeToken = !quoteToken || quoteToken === ZERO_ADDRESS;
604
- const sellers = sellerPrivateKeys.map(pk => new Wallet(pk, context.provider));
605
- const buyers = buyerPrivateKeys.map(pk => new Wallet(pk, context.provider));
388
+ const sellers = sellerPrivateKeys.map((pk) => new Wallet(pk, context.provider));
389
+ const buyers = buyerPrivateKeys.map((pk) => new Wallet(pk, context.provider));
606
390
  // 获取 nonce
607
391
  const addressToNonce = new Map();
608
392
  for (const wallet of [...sellers, ...buyers]) {
@@ -618,7 +402,7 @@ export async function xlayerPureCrossSwapMerkle(params) {
618
402
  }
619
403
  const [gasPrice, finalGasLimit] = await Promise.all([
620
404
  getGasPrice(context.provider, config),
621
- Promise.resolve(getGasLimit(config))
405
+ Promise.resolve(getGasLimit(config)),
622
406
  ]);
623
407
  const txType = config.txType ?? 0;
624
408
  const deadline = getDeadline();
@@ -646,15 +430,17 @@ export async function xlayerPureCrossSwapMerkle(params) {
646
430
  else if (routeParams.routeType === 'v3-single') {
647
431
  const { v3TokenIn, v3TokenOut, v3Fee } = routeParams;
648
432
  const v3Router = new Contract(POTATO_V3_ROUTER, V3_ROUTER02_ABI, seller);
649
- const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [{
433
+ const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
434
+ {
650
435
  tokenIn: v3TokenIn,
651
436
  tokenOut: v3TokenOut,
652
437
  fee: v3Fee,
653
438
  recipient: useNativeToken ? POTATO_V3_ROUTER : seller.address,
654
439
  amountIn: sellAmountWei,
655
440
  amountOutMinimum: 0n,
656
- sqrtPriceLimitX96: 0n
657
- }]);
441
+ sqrtPriceLimitX96: 0n,
442
+ },
443
+ ]);
658
444
  if (useNativeToken) {
659
445
  const sellUnwrapData = v3RouterIface.encodeFunctionData('unwrapWETH9', [0n, seller.address]);
660
446
  sellUnsigned = await v3Router.multicall.populateTransaction(deadline, [sellSwapData, sellUnwrapData]);
@@ -673,7 +459,7 @@ export async function xlayerPureCrossSwapMerkle(params) {
673
459
  gasLimit: finalGasLimit,
674
460
  gasPrice,
675
461
  chainId: XLAYER_CHAIN_ID,
676
- type: txType
462
+ type: txType,
677
463
  });
678
464
  signedTransactions.push(signedSell);
679
465
  }
@@ -700,15 +486,17 @@ export async function xlayerPureCrossSwapMerkle(params) {
700
486
  else if (routeParams.routeType === 'v3-single') {
701
487
  const { v3TokenIn, v3TokenOut, v3Fee } = routeParams;
702
488
  const v3Router = new Contract(POTATO_V3_ROUTER, V3_ROUTER02_ABI, buyer);
703
- const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [{
489
+ const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
490
+ {
704
491
  tokenIn: v3TokenOut, // 买入时反过来
705
492
  tokenOut: v3TokenIn,
706
493
  fee: v3Fee,
707
494
  recipient: buyer.address,
708
495
  amountIn: buyAmountWei,
709
496
  amountOutMinimum: 0n,
710
- sqrtPriceLimitX96: 0n
711
- }]);
497
+ sqrtPriceLimitX96: 0n,
498
+ },
499
+ ]);
712
500
  buyUnsigned = await v3Router.multicall.populateTransaction(deadline, [buySwapData], { value: buyValue });
713
501
  }
714
502
  else {
@@ -721,17 +509,17 @@ export async function xlayerPureCrossSwapMerkle(params) {
721
509
  gasLimit: finalGasLimit,
722
510
  gasPrice,
723
511
  chainId: XLAYER_CHAIN_ID,
724
- type: txType
512
+ type: txType,
725
513
  });
726
514
  signedTransactions.push(signedBuy);
727
515
  }
728
516
  return {
729
517
  signedTransactions,
730
518
  metadata: {
731
- sellerAddresses: sellers.map(s => s.address),
732
- buyerAddresses: buyers.map(b => b.address),
519
+ sellerAddresses: sellers.map((s) => s.address),
520
+ buyerAddresses: buyers.map((b) => b.address),
733
521
  sellAmounts,
734
- buyAmounts
735
- }
522
+ buyAmounts,
523
+ },
736
524
  };
737
525
  }
@@ -11,7 +11,7 @@
11
11
  * 支持池子类型:V2, V3
12
12
  */
13
13
  import { Wallet } from 'ethers';
14
- import type { DirectRouterSignConfig } from '../../../dex/direct-router.js';
14
+ import type { DirectRouterSignConfig } from '../../../dex/types.js';
15
15
  export type EoaWashPoolType = 'V2' | 'V3';
16
16
  export interface EoaWashVolumeParams {
17
17
  /** 代币地址 */
@@ -11,7 +11,8 @@
11
11
  * 支持池子类型:V2, V3
12
12
  */
13
13
  import { ethers, Wallet, Contract } from 'ethers';
14
- import { directV2BatchBuy, directV2BatchSell, directV3BatchBuy, directV3BatchSell } from '../../../dex/direct-router.js';
14
+ import { createXLayerProvider } from '../../../utils/provider-factory.js';
15
+ import { directV2BatchBuy, directV2BatchSell, directV3BatchBuy, directV3BatchSell, } from '../../../dex/direct-router.js';
15
16
  import { getProfitRecipient } from '../../../shared/constants/index.js';
16
17
  // ============================================================================
17
18
  // 辅助函数
@@ -54,8 +55,8 @@ export async function signEoaWashBuyTransactions(params) {
54
55
  throw new Error('[signEoaWashBuyTransactions] 私钥数量与买入金额数量不一致');
55
56
  }
56
57
  // 创建钱包
57
- const provider = new ethers.JsonRpcProvider(config.rpcUrl);
58
- const wallets = privateKeys.map(pk => new Wallet(pk, provider));
58
+ const provider = createXLayerProvider(config.rpcUrl);
59
+ const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
59
60
  let result;
60
61
  if (poolType === 'V2') {
61
62
  result = await directV2BatchBuy({
@@ -69,7 +70,7 @@ export async function signEoaWashBuyTransactions(params) {
69
70
  config: {
70
71
  ...config,
71
72
  skipProfit: true, // 买入时不刮取利润(卖出时刮取)
72
- }
73
+ },
73
74
  });
74
75
  }
75
76
  else {
@@ -86,7 +87,7 @@ export async function signEoaWashBuyTransactions(params) {
86
87
  config: {
87
88
  ...config,
88
89
  skipProfit: true, // 买入时不刮取利润(卖出时刮取)
89
- }
90
+ },
90
91
  });
91
92
  }
92
93
  return {
@@ -106,13 +107,13 @@ export async function signEoaWashBuyTransactions(params) {
106
107
  */
107
108
  export async function signEoaWashSellTransactions(params, wallets, tokenDecimals) {
108
109
  const { tokenAddress, poolType, routerAddress, quoteToken, config } = params;
109
- const provider = new ethers.JsonRpcProvider(config.rpcUrl);
110
+ const provider = createXLayerProvider(config.rpcUrl);
110
111
  // 获取代币精度
111
- const decimals = tokenDecimals ?? await getTokenDecimals(provider, tokenAddress);
112
+ const decimals = tokenDecimals ?? (await getTokenDecimals(provider, tokenAddress));
112
113
  // 查询所有钱包的代币余额
113
- const balancesWei = await Promise.all(wallets.map(w => getTokenBalance(provider, tokenAddress, w.address)));
114
+ const balancesWei = await Promise.all(wallets.map((w) => getTokenBalance(provider, tokenAddress, w.address)));
114
115
  // 转换为格式化金额
115
- const sellAmounts = balancesWei.map(balance => {
116
+ const sellAmounts = balancesWei.map((balance) => {
116
117
  if (balance <= 0n)
117
118
  return '0';
118
119
  return ethers.formatUnits(balance, decimals);
@@ -123,7 +124,6 @@ export async function signEoaWashSellTransactions(params, wallets, tokenDecimals
123
124
  .filter(({ amt }) => parseFloat(amt) > 0)
124
125
  .map(({ i }) => i);
125
126
  if (validIndices.length === 0) {
126
- console.warn('[signEoaWashSellTransactions] 所有钱包余额为 0,无法卖出');
127
127
  return {
128
128
  signedTransactions: [],
129
129
  profitHopWallets: [],
@@ -131,8 +131,8 @@ export async function signEoaWashSellTransactions(params, wallets, tokenDecimals
131
131
  profitRecipient: getProfitRecipient(),
132
132
  };
133
133
  }
134
- const validPrivateKeys = validIndices.map(i => wallets[i].privateKey);
135
- const validSellAmounts = validIndices.map(i => sellAmounts[i]);
134
+ const validPrivateKeys = validIndices.map((i) => wallets[i].privateKey);
135
+ const validSellAmounts = validIndices.map((i) => sellAmounts[i]);
136
136
  let result;
137
137
  if (poolType === 'V2') {
138
138
  result = await directV2BatchSell({
@@ -145,7 +145,7 @@ export async function signEoaWashSellTransactions(params, wallets, tokenDecimals
145
145
  config: {
146
146
  ...config,
147
147
  // ✅ 卖出时正常刮取利润(XLayer 不使用多跳,直接转账)
148
- }
148
+ },
149
149
  });
150
150
  }
151
151
  else {
@@ -161,7 +161,7 @@ export async function signEoaWashSellTransactions(params, wallets, tokenDecimals
161
161
  config: {
162
162
  ...config,
163
163
  // ✅ 卖出时正常刮取利润(XLayer 不使用多跳,直接转账)
164
- }
164
+ },
165
165
  });
166
166
  }
167
167
  return {