four-flap-meme-sdk 1.9.49 → 2.1.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 (567) 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/__tests__/subpath-exports.test.js +34 -0
  5. package/dist/abis/common.js +74 -68
  6. package/dist/abis/flap/vault.js +9 -7
  7. package/dist/abis/index.d.ts +3 -4
  8. package/dist/abis/index.js +3 -4
  9. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  10. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  11. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  12. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  13. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  14. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  15. package/dist/bundle-core/config-helpers.d.ts +36 -0
  16. package/dist/bundle-core/config-helpers.js +57 -0
  17. package/dist/bundle-core/errors.d.ts +50 -0
  18. package/dist/bundle-core/errors.js +34 -0
  19. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  20. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  21. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  22. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  23. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  24. package/dist/bundle-core/four-meme/core.js +515 -0
  25. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  26. package/dist/{shared 2/flap/portal-bundle-merkle/pancake-proxy.js → bundle-core/four-meme/pancake-proxy.js} +277 -299
  27. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  28. package/dist/bundle-core/four-meme/private.js +465 -0
  29. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  30. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  31. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  32. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  33. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  34. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  35. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  36. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  37. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  38. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  39. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  40. package/dist/{chains/bsc/four/swap/index.js → bundle-core/four-meme/swap.js} +84 -408
  41. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  42. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  43. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  44. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  45. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  46. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  47. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  48. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  49. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  50. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  51. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  52. package/dist/bundle-core/index.d.ts +8 -0
  53. package/dist/bundle-core/index.js +8 -0
  54. package/dist/bundle-core/internal.d.ts +21 -0
  55. package/dist/bundle-core/internal.js +182 -0
  56. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  57. package/dist/bundle-core/sign-context-helpers.js +67 -0
  58. package/dist/bundle-core/submit.d.ts +293 -0
  59. package/dist/bundle-core/submit.js +727 -0
  60. package/dist/bundle-core/types/index.d.ts +8 -0
  61. package/dist/bundle-core/types.d.ts +1 -0
  62. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  63. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
  64. package/dist/chains/bsc/four/config.d.ts +5 -70
  65. package/dist/chains/bsc/four/config.js +2 -115
  66. package/dist/chains/bsc/four/core.d.ts +1 -4
  67. package/dist/chains/bsc/four/core.js +1 -589
  68. package/dist/chains/bsc/four/index.d.ts +6 -6
  69. package/dist/chains/bsc/four/index.js +6 -6
  70. package/dist/chains/bsc/four/internal.d.ts +2 -50
  71. package/dist/chains/bsc/four/internal.js +2 -237
  72. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  73. package/dist/chains/bsc/four/pancake-proxy.js +1 -688
  74. package/dist/chains/bsc/four/private.d.ts +1 -27
  75. package/dist/chains/bsc/four/private.js +1 -477
  76. package/dist/chains/bsc/four/submit.d.ts +2 -315
  77. package/dist/chains/bsc/four/submit.js +2 -746
  78. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  79. package/dist/chains/bsc/four/swap-buy-first.js +2 -506
  80. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  81. package/dist/chains/bsc/four/swap-internal.js +1 -18
  82. package/dist/chains/bsc/four/swap.d.ts +2 -144
  83. package/dist/chains/bsc/four/swap.js +2 -760
  84. package/dist/chains/bsc/four/types.d.ts +1 -476
  85. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  86. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  87. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  88. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  89. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  90. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  91. package/dist/chains/bsc/four/utils.d.ts +5 -18
  92. package/dist/chains/bsc/four/utils.js +5 -1534
  93. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  94. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  95. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  96. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
  97. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  98. package/dist/chains/bsc/pancake/{bundle-swap/helpers.js → bundle-swap-helpers.js} +63 -70
  99. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  100. package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
  101. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  102. package/dist/chains/bsc/pancake/index.js +1 -3
  103. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  104. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  105. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  106. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  107. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  108. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  109. package/dist/chains/eni/batch-router/transfer.js +54 -23
  110. package/dist/chains/eni/batch-router/utils.js +32 -6
  111. package/dist/chains/eni/bundler/sign.js +4 -4
  112. package/dist/chains/eni/bundler/submit.js +1 -4
  113. package/dist/chains/eni/constants.js +1 -1
  114. package/dist/chains/eni/index.d.ts +1 -1
  115. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  116. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  117. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  118. package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
  119. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
  120. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  121. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  122. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  123. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  124. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
  125. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  126. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  127. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  128. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  129. package/dist/chains/eni/platforms/iro/index.js +4 -4
  130. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  131. package/dist/chains/eni/platforms/iro/token.js +107 -31
  132. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  133. package/dist/chains/eni/submit.js +5 -13
  134. package/dist/chains/index.d.ts +13 -0
  135. package/dist/chains/index.js +13 -0
  136. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  137. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
  138. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  139. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  140. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
  141. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  142. package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
  143. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  144. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
  145. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  146. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  147. package/dist/chains/xlayer/eip7702/index.d.ts +29 -46
  148. package/dist/chains/xlayer/eip7702/index.js +27 -81
  149. package/dist/chains/xlayer/eip7702/{multi-hop-transfer/types.d.ts → multi-hop-transfer-helpers.d.ts} +17 -23
  150. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  151. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
  152. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  153. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  154. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  155. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  156. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  157. package/dist/chains/xlayer/eip7702/{volume/types.d.ts → volume-helpers.d.ts} +41 -17
  158. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  159. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  160. package/dist/chains/xlayer/eip7702/volume.js +83 -158
  161. package/dist/chains/xlayer/eoa/constants.js +1 -1
  162. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  163. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  164. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  165. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  166. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
  167. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  168. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
  169. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  170. package/dist/chains/xlayer/eoa/index.js +8 -23
  171. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  172. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  173. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  174. package/dist/chains/xlayer/eoa/types.js +1 -3
  175. package/dist/contracts/helper3.d.ts +20 -17
  176. package/dist/contracts/helper3.js +56 -20
  177. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  178. package/dist/contracts/tm-bundle-helpers.js +72 -0
  179. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  180. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
  181. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
  182. package/dist/contracts/tm-bundle-merkle/config.js +2 -115
  183. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  184. package/dist/contracts/tm-bundle-merkle/core.js +1 -588
  185. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  186. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  187. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
  188. package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
  189. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  190. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
  191. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  192. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  193. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  194. package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
  195. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  196. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
  197. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  198. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  199. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  200. package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
  201. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  202. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  203. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  204. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  205. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  206. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  207. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  208. package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
  209. package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
  210. package/dist/contracts/tm-bundle.d.ts +3 -51
  211. package/dist/contracts/tm-bundle.js +102 -142
  212. package/dist/contracts/tm.d.ts +3 -2
  213. package/dist/contracts/tm.js +36 -32
  214. package/dist/contracts/tm1.js +9 -4
  215. package/dist/contracts/tm2.js +9 -4
  216. package/dist/dex/direct-router-helpers.d.ts +264 -0
  217. package/dist/dex/direct-router-helpers.js +539 -0
  218. package/dist/dex/direct-router.d.ts +3 -125
  219. package/dist/dex/direct-router.js +237 -652
  220. package/dist/dex/{direct-router/types.d.ts → types.d.ts} +1 -1
  221. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  222. package/dist/exports/root-bundle-and-tooling.js +30 -0
  223. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  224. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  225. package/dist/exports/root-foundations.d.ts +35 -0
  226. package/dist/exports/root-foundations.js +70 -0
  227. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  228. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  229. package/dist/flap/index.d.ts +10 -0
  230. package/dist/flap/index.js +8 -0
  231. package/dist/flows/create.d.ts +2 -2
  232. package/dist/flows/create.js +6 -6
  233. package/dist/flows/index.d.ts +1 -0
  234. package/dist/flows/index.js +1 -0
  235. package/dist/index.d.ts +20 -91
  236. package/dist/index.js +20 -215
  237. package/dist/shared/abis/common.d.ts +2 -83
  238. package/dist/shared/abis/common.js +2 -252
  239. package/dist/shared/abis/index.d.ts +5 -6
  240. package/dist/shared/abis/index.js +5 -7
  241. package/dist/shared/clients/blockrazor.js +41 -24
  242. package/dist/shared/clients/club48.js +30 -26
  243. package/dist/shared/clients/emitservice.js +2 -0
  244. package/dist/shared/clients/four.js +23 -18
  245. package/dist/shared/clients/index.d.ts +8 -0
  246. package/dist/shared/clients/index.js +8 -0
  247. package/dist/shared/clients/merkle.js +26 -30
  248. package/dist/shared/constants/addresses.d.ts +1 -1
  249. package/dist/shared/constants/addresses.js +11 -2
  250. package/dist/shared/constants/chains.d.ts +1 -1
  251. package/dist/shared/constants/chains.js +1 -1
  252. package/dist/shared/constants/gas.d.ts +1 -1
  253. package/dist/shared/constants/gas.js +2 -6
  254. package/dist/shared/constants/index.d.ts +3 -0
  255. package/dist/shared/constants/index.js +1 -0
  256. package/dist/shared/constants/quote.d.ts +30 -0
  257. package/dist/shared/constants/quote.js +37 -0
  258. package/dist/shared/flap/abi.js +1 -1
  259. package/dist/shared/flap/constants.d.ts +1 -1
  260. package/dist/shared/flap/constants.js +2 -2
  261. package/dist/shared/flap/curve.js +3 -0
  262. package/dist/shared/flap/errors.d.ts +1 -4
  263. package/dist/shared/flap/errors.js +21 -3
  264. package/dist/shared/flap/index.d.ts +2 -2
  265. package/dist/shared/flap/index.js +2 -2
  266. package/dist/shared/flap/meta.d.ts +16 -18
  267. package/dist/shared/flap/meta.js +14 -26
  268. package/dist/shared/flap/permit.js +6 -5
  269. package/dist/shared/flap/pinata.d.ts +9 -2
  270. package/dist/shared/flap/pinata.js +20 -18
  271. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  272. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  273. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  274. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  275. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  276. package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
  277. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
  278. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  279. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  280. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  281. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  282. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  283. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  284. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  285. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  286. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  287. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  288. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  289. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  290. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  291. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
  292. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  293. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  294. package/dist/shared/flap/portal-bundle.js +54 -42
  295. package/dist/shared/flap/portal.js +32 -10
  296. package/dist/shared/flap/vanity.js +4 -7
  297. package/dist/shared/flap/vault.d.ts +1 -1
  298. package/dist/shared/flap/vault.js +54 -48
  299. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  300. package/dist/shared/foundation/dex/v3-path.js +35 -0
  301. package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
  302. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  303. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  304. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  305. package/dist/shared/foundation/index.d.ts +13 -0
  306. package/dist/shared/foundation/index.js +12 -0
  307. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  308. package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
  309. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  310. package/dist/shared/foundation/normalize-unknown.js +29 -0
  311. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  312. package/dist/shared/foundation/sdk-logger.js +12 -0
  313. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  314. package/dist/shared/foundation/tx/build-request.js +25 -0
  315. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  316. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  317. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  318. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  319. package/dist/{utils/erc20/types.d.ts → shared/foundation/types/erc20.d.ts} +7 -19
  320. package/dist/{utils/holders-maker/types.d.ts → shared/foundation/types/holders-maker.d.ts} +4 -12
  321. package/dist/shared/foundation/types/index.d.ts +7 -0
  322. package/dist/{utils/lp-inspect/types.d.ts → shared/foundation/types/lp-inspect.d.ts} +4 -2
  323. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  324. package/dist/shared/foundation/types/multicall.js +1 -0
  325. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  326. package/dist/shared/foundation/types/private-sale.js +1 -0
  327. package/dist/{utils/quote-helpers/types.d.ts → shared/foundation/types/quote-helpers.d.ts} +1 -0
  328. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  329. package/dist/shared/four/tax-token.d.ts +1 -1
  330. package/dist/shared/four/tax-token.js +27 -7
  331. package/dist/shared/index.d.ts +6 -0
  332. package/dist/shared/index.js +4 -0
  333. package/dist/utils/airdrop-sweep.d.ts +4 -76
  334. package/dist/utils/airdrop-sweep.js +38 -52
  335. package/dist/utils/bundle-helpers.d.ts +9 -243
  336. package/dist/utils/bundle-helpers.js +10 -584
  337. package/dist/utils/constants.d.ts +5 -61
  338. package/dist/utils/constants.js +5 -80
  339. package/dist/utils/contract-factory.d.ts +2 -4
  340. package/dist/utils/contract-factory.js +25 -18
  341. package/dist/utils/erc20.d.ts +8 -90
  342. package/dist/utils/erc20.js +94 -153
  343. package/dist/utils/errors.d.ts +10 -22
  344. package/dist/utils/errors.js +61 -79
  345. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  346. package/dist/utils/holders-maker/addresses.js +15 -0
  347. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  348. package/dist/utils/holders-maker/buy-tx.js +278 -0
  349. package/dist/utils/holders-maker/constants.d.ts +6 -0
  350. package/dist/utils/holders-maker/constants.js +7 -0
  351. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  352. package/dist/utils/holders-maker/disperse.js +90 -0
  353. package/dist/utils/holders-maker/routing.d.ts +4 -0
  354. package/dist/utils/holders-maker/routing.js +45 -0
  355. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  356. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  357. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  358. package/dist/utils/holders-maker-helpers.js +9 -0
  359. package/dist/utils/holders-maker.d.ts +2 -138
  360. package/dist/utils/holders-maker.js +23 -651
  361. package/dist/utils/hop-chains.d.ts +35 -0
  362. package/dist/utils/hop-chains.js +215 -0
  363. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  364. package/dist/utils/lp-inspect-helpers.js +109 -0
  365. package/dist/utils/lp-inspect.d.ts +2 -112
  366. package/dist/utils/lp-inspect.js +63 -195
  367. package/dist/utils/mpcExclusive.d.ts +2 -5
  368. package/dist/utils/mpcExclusive.js +4 -3
  369. package/dist/utils/private-sale.d.ts +2 -58
  370. package/dist/utils/private-sale.js +2 -7
  371. package/dist/utils/provider-factory.d.ts +4 -0
  372. package/dist/utils/provider-factory.js +10 -0
  373. package/dist/utils/quote-helpers.d.ts +4 -45
  374. package/dist/utils/quote-helpers.js +15 -65
  375. package/dist/utils/stealth-transfer.d.ts +2 -28
  376. package/dist/utils/stealth-transfer.js +30 -14
  377. package/dist/utils/swap-helpers.d.ts +0 -3
  378. package/dist/utils/swap-helpers.js +6 -9
  379. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  380. package/dist/utils/types/airdrop-sweep.js +1 -0
  381. package/dist/utils/types/contract-factory.d.ts +1 -0
  382. package/dist/utils/types/contract-factory.js +1 -0
  383. package/dist/utils/types/erc20.d.ts +1 -0
  384. package/dist/utils/types/erc20.js +1 -0
  385. package/dist/utils/types/errors.d.ts +1 -0
  386. package/dist/utils/types/errors.js +1 -0
  387. package/dist/utils/types/holders-maker.d.ts +1 -0
  388. package/dist/utils/types/holders-maker.js +1 -0
  389. package/dist/utils/types/hop-chains.d.ts +8 -0
  390. package/dist/utils/types/hop-chains.js +1 -0
  391. package/dist/utils/types/index.d.ts +13 -0
  392. package/dist/utils/types/index.js +1 -0
  393. package/dist/utils/types/lp-inspect.d.ts +1 -0
  394. package/dist/utils/types/lp-inspect.js +1 -0
  395. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  396. package/dist/utils/types/mpc-exclusive.js +1 -0
  397. package/dist/utils/types/private-sale.d.ts +1 -0
  398. package/dist/utils/types/private-sale.js +1 -0
  399. package/dist/utils/types/quote-helpers.d.ts +1 -0
  400. package/dist/utils/types/quote-helpers.js +1 -0
  401. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  402. package/dist/utils/types/stealth-transfer.js +1 -0
  403. package/dist/utils/types/wallet.d.ts +25 -0
  404. package/dist/utils/types/wallet.js +1 -0
  405. package/dist/utils/wallet.d.ts +2 -25
  406. package/dist/utils/wallet.js +9 -10
  407. package/package.json +120 -2
  408. package/src/abis/contracts/TaxToken.json +969 -0
  409. package/src/abis/contracts/TokenManager.json +836 -0
  410. package/src/abis/contracts/TokenManager2.json +136 -0
  411. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  412. package/dist/chains/bsc/four/submit/blockrazor.d.ts +0 -18
  413. package/dist/chains/bsc/four/submit/blockrazor.js +0 -86
  414. package/dist/chains/bsc/four/submit/direct.d.ts +0 -66
  415. package/dist/chains/bsc/four/submit/direct.js +0 -452
  416. package/dist/chains/bsc/four/submit/helpers.d.ts +0 -18
  417. package/dist/chains/bsc/four/submit/helpers.js +0 -57
  418. package/dist/chains/bsc/four/submit/index.d.ts +0 -12
  419. package/dist/chains/bsc/four/submit/index.js +0 -11
  420. package/dist/chains/bsc/four/submit/merkle.d.ts +0 -18
  421. package/dist/chains/bsc/four/submit/merkle.js +0 -74
  422. package/dist/chains/bsc/four/submit/types.d.ts +0 -143
  423. package/dist/chains/bsc/four/swap/index.d.ts +0 -32
  424. package/dist/chains/bsc/four/swap/types.d.ts +0 -70
  425. package/dist/chains/bsc/four/utils/index.d.ts +0 -20
  426. package/dist/chains/bsc/four/utils/index.js +0 -1558
  427. package/dist/chains/bsc/pancake/bundle-buy-first/index.d.ts +0 -8
  428. package/dist/chains/bsc/pancake/bundle-buy-first/index.js +0 -907
  429. package/dist/chains/bsc/pancake/bundle-buy-first/types.d.ts +0 -73
  430. package/dist/chains/bsc/pancake/bundle-swap/helpers.d.ts +0 -102
  431. package/dist/chains/bsc/pancake/bundle-swap/index.d.ts +0 -50
  432. package/dist/chains/bsc/pancake/bundle-swap/index.js +0 -1066
  433. package/dist/chains/bsc/pancake/bundle-swap/types.d.ts +0 -202
  434. package/dist/chains/bsc/pancake/bundle-swap/types.js +0 -3
  435. package/dist/chains/xlayer/eip7702/bundle-swap/index.d.ts +0 -72
  436. package/dist/chains/xlayer/eip7702/bundle-swap/index.js +0 -921
  437. package/dist/chains/xlayer/eip7702/bundle-swap/types.d.ts +0 -65
  438. package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.d.ts +0 -128
  439. package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.js +0 -857
  440. package/dist/chains/xlayer/eip7702/volume/index.d.ts +0 -96
  441. package/dist/chains/xlayer/eip7702/volume/index.js +0 -793
  442. package/dist/dex/direct-router/index.d.ts +0 -70
  443. package/dist/dex/direct-router/index.js +0 -1410
  444. package/dist/shared/abis/TaxToken.json +0 -969
  445. package/dist/shared/abis/TokenManager.json +0 -836
  446. package/dist/shared/abis/TokenManager2.json +0 -136
  447. package/dist/shared/abis/TokenManagerHelper3.json +0 -993
  448. package/dist/shared/flap/__tests__/curve.test.js +0 -85
  449. package/dist/shared/flap/portal/index.d.ts +0 -12
  450. package/dist/shared/flap/portal/index.js +0 -11
  451. package/dist/shared/flap/portal/portal.d.ts +0 -47
  452. package/dist/shared/flap/portal/portal.js +0 -218
  453. package/dist/shared/flap/portal/types.d.ts +0 -227
  454. package/dist/shared/flap/portal/types.js +0 -80
  455. package/dist/shared/flap/portal/writer.d.ts +0 -121
  456. package/dist/shared/flap/portal/writer.js +0 -265
  457. package/dist/shared/flap/portal-bundle-merkle/core/index.d.ts +0 -18
  458. package/dist/shared/flap/portal-bundle-merkle/core/index.js +0 -938
  459. package/dist/shared/flap/portal-bundle-merkle/swap/index.d.ts +0 -42
  460. package/dist/shared/flap/portal-bundle-merkle/swap/index.js +0 -1448
  461. package/dist/shared/flap/portal-bundle-merkle/swap/types.d.ts +0 -84
  462. package/dist/shared/flap/portal-bundle-merkle/utils/index.d.ts +0 -17
  463. package/dist/shared/flap/portal-bundle-merkle/utils/index.js +0 -1024
  464. package/dist/shared/flap/portal-bundle-merkle/utils/types.d.ts +0 -16
  465. package/dist/shared 2/abis/TaxToken.json +0 -105
  466. package/dist/shared 2/abis/TokenManager.json +0 -836
  467. package/dist/shared 2/abis/TokenManager2.json +0 -60
  468. package/dist/shared 2/abis/TokenManagerHelper3.json +0 -993
  469. package/dist/shared 2/abis/common.d.ts +0 -85
  470. package/dist/shared 2/abis/common.js +0 -254
  471. package/dist/shared 2/abis/index.d.ts +0 -8
  472. package/dist/shared 2/abis/index.js +0 -8
  473. package/dist/shared 2/clients/blockrazor.d.ts +0 -314
  474. package/dist/shared 2/clients/blockrazor.js +0 -596
  475. package/dist/shared 2/clients/club48.d.ts +0 -154
  476. package/dist/shared 2/clients/club48.js +0 -331
  477. package/dist/shared 2/clients/emitservice.d.ts +0 -47
  478. package/dist/shared 2/clients/emitservice.js +0 -44
  479. package/dist/shared 2/clients/four.d.ts +0 -132
  480. package/dist/shared 2/clients/four.js +0 -281
  481. package/dist/shared 2/clients/merkle.d.ts +0 -210
  482. package/dist/shared 2/clients/merkle.js +0 -400
  483. package/dist/shared 2/flap/__tests__/curve.test.js +0 -85
  484. package/dist/shared 2/flap/abi.d.ts +0 -4
  485. package/dist/shared 2/flap/abi.js +0 -4
  486. package/dist/shared 2/flap/constants.d.ts +0 -128
  487. package/dist/shared 2/flap/constants.js +0 -143
  488. package/dist/shared 2/flap/curve.d.ts +0 -33
  489. package/dist/shared 2/flap/curve.js +0 -84
  490. package/dist/shared 2/flap/errors.d.ts +0 -37
  491. package/dist/shared 2/flap/errors.js +0 -114
  492. package/dist/shared 2/flap/index.d.ts +0 -22
  493. package/dist/shared 2/flap/index.js +0 -33
  494. package/dist/shared 2/flap/ipfs.d.ts +0 -21
  495. package/dist/shared 2/flap/ipfs.js +0 -38
  496. package/dist/shared 2/flap/meta.d.ts +0 -30
  497. package/dist/shared 2/flap/meta.js +0 -195
  498. package/dist/shared 2/flap/permit.d.ts +0 -16
  499. package/dist/shared 2/flap/permit.js +0 -67
  500. package/dist/shared 2/flap/pinata.d.ts +0 -40
  501. package/dist/shared 2/flap/pinata.js +0 -106
  502. package/dist/shared 2/flap/portal-bundle-merkle/config.d.ts +0 -79
  503. package/dist/shared 2/flap/portal-bundle-merkle/config.js +0 -133
  504. package/dist/shared 2/flap/portal-bundle-merkle/core.d.ts +0 -18
  505. package/dist/shared 2/flap/portal-bundle-merkle/core.js +0 -938
  506. package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.d.ts +0 -125
  507. package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.js +0 -665
  508. package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.d.ts +0 -88
  509. package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.js +0 -446
  510. package/dist/shared 2/flap/portal-bundle-merkle/index.d.ts +0 -14
  511. package/dist/shared 2/flap/portal-bundle-merkle/index.js +0 -26
  512. package/dist/shared 2/flap/portal-bundle-merkle/pancake-proxy.d.ts +0 -28
  513. package/dist/shared 2/flap/portal-bundle-merkle/private.d.ts +0 -17
  514. package/dist/shared 2/flap/portal-bundle-merkle/private.js +0 -549
  515. package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
  516. package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.js +0 -831
  517. package/dist/shared 2/flap/portal-bundle-merkle/swap.d.ts +0 -201
  518. package/dist/shared 2/flap/portal-bundle-merkle/swap.js +0 -1359
  519. package/dist/shared 2/flap/portal-bundle-merkle/types.d.ts +0 -358
  520. package/dist/shared 2/flap/portal-bundle-merkle/utils.d.ts +0 -89
  521. package/dist/shared 2/flap/portal-bundle-merkle/utils.js +0 -963
  522. package/dist/shared 2/flap/portal-bundle.d.ts +0 -119
  523. package/dist/shared 2/flap/portal-bundle.js +0 -584
  524. package/dist/shared 2/flap/portal.d.ts +0 -392
  525. package/dist/shared 2/flap/portal.js +0 -559
  526. package/dist/shared 2/flap/vanity.d.ts +0 -48
  527. package/dist/shared 2/flap/vanity.js +0 -110
  528. package/dist/shared 2/flap/vault.d.ts +0 -240
  529. package/dist/shared 2/flap/vault.js +0 -366
  530. package/dist/shared 2/four/index.d.ts +0 -7
  531. package/dist/shared 2/four/index.js +0 -22
  532. package/dist/shared 2/four/tax-token.d.ts +0 -176
  533. package/dist/shared 2/four/tax-token.js +0 -302
  534. package/dist/shared 2/index.d.ts +0 -10
  535. package/dist/shared 2/index.js +0 -10
  536. package/dist/utils/__tests__/errors.test.js +0 -76
  537. package/dist/utils/erc20/index.d.ts +0 -242
  538. package/dist/utils/erc20/index.js +0 -645
  539. package/dist/utils/holders-maker/helpers.d.ts +0 -43
  540. package/dist/utils/holders-maker/helpers.js +0 -371
  541. package/dist/utils/holders-maker/index.d.ts +0 -26
  542. package/dist/utils/holders-maker/index.js +0 -218
  543. package/dist/utils/holders-maker/types.js +0 -4
  544. package/dist/utils/lp-inspect/index.d.ts +0 -44
  545. package/dist/utils/lp-inspect/index.js +0 -937
  546. package/dist/utils/quote-helpers/index.d.ts +0 -107
  547. package/dist/utils/quote-helpers/index.js +0 -346
  548. /package/dist/{chains/bsc/four/submit/types.js → __tests__/subpath-exports.test.d.ts} +0 -0
  549. /package/dist/{chains/bsc/four/swap/types.js → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
  550. /package/dist/{chains/bsc/four/utils/types.d.ts → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
  551. /package/dist/{chains/bsc/four/utils/types.js → bundle-core/__tests__/sign-context-helpers.test.d.ts} +0 -0
  552. /package/dist/{chains/bsc/pancake/bundle-buy-first/types.js → bundle-core/__tests__/sign-fixture.test.d.ts} +0 -0
  553. /package/dist/{chains/xlayer/eip7702/multi-hop-transfer/types.js → bundle-core/four-meme/types/buy-first.js} +0 -0
  554. /package/dist/{chains/xlayer/eip7702/volume/types.js → bundle-core/four-meme/types/core-flow.js} +0 -0
  555. /package/dist/{dex/direct-router/types.js → bundle-core/four-meme/types/index.js} +0 -0
  556. /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/four-meme/types/swap-internal.js} +0 -0
  557. /package/dist/{chains/xlayer/eip7702/bundle-swap → bundle-core/four-meme}/types.js +0 -0
  558. /package/dist/{shared/flap/__tests__/curve.test.d.ts → bundle-core/types/index.js} +0 -0
  559. /package/dist/{shared 2/flap/portal-bundle-merkle → bundle-core}/types.js +0 -0
  560. /package/dist/{shared/flap/portal-bundle-merkle/core/types.d.ts → chains/xlayer/eip7702/multi-hop-transfer-helpers.js} +0 -0
  561. /package/dist/{shared/flap/portal-bundle-merkle/core → dex}/types.js +0 -0
  562. /package/dist/shared/{flap/portal-bundle-merkle/swap/types.js → foundation/tx/wallet-sign-patch.d.ts} +0 -0
  563. /package/dist/shared/{flap/portal-bundle-merkle/utils/types.js → foundation/types/airdrop-sweep.js} +0 -0
  564. /package/dist/{utils/__tests__/errors.test.d.ts → shared/foundation/types/erc20.js} +0 -0
  565. /package/dist/{utils/erc20/types.js → shared/foundation/types/holders-maker.js} +0 -0
  566. /package/dist/{utils/lp-inspect/types.js → shared/foundation/types/index.js} +0 -0
  567. /package/dist/{utils/quote-helpers/types.js → shared/foundation/types/lp-inspect.js} +0 -0
@@ -1,16 +1,5 @@
1
1
  /**
2
- * EIP-7702 XLayer 刷量功能
3
- *
4
- * 支持两种模式:
5
- * 1. 无币模式 (Wash): 单钱包买入+卖出,不需要预先持有代币
6
- * 2. 捆绑模式 (Bundle): 多钱包批量买入 + 批量卖出
7
- *
8
- * 支持池子类型:
9
- * - FLAP: 内盘 (Flap Portal)
10
- * - V2: PotatoSwap V2 外盘
11
- * - V3: PotatoSwap V3 外盘
12
- *
13
- * 只生成签名,由调用方决定如何提交
2
+ * volume - 主函数
14
3
  */
15
4
  import { ethers, Contract } from 'ethers';
16
5
  import { getCachedProvider, createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, calculateProfitAmountByTxCount, getProfitRecipient, } from './utils.js';
@@ -18,40 +7,7 @@ import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, FLAP_P
18
7
  import { bundleBuy } from './bundle-buy.js';
19
8
  import { bundleSell } from './bundle-sell.js';
20
9
  import { bundleSwap } from './bundle-swap.js';
21
- /**
22
- * 截断小数位数,避免 parseEther/parseUnits 报错
23
- * @param value 数值字符串
24
- * @param decimals 保留的小数位数(默认 18)
25
- */
26
- function truncateDecimals(value, decimals = 18) {
27
- if (!value || value === '0')
28
- return value;
29
- const parts = String(value).split('.');
30
- if (parts.length === 1)
31
- return value;
32
- const intPart = parts[0] || '0';
33
- const decPart = (parts[1] || '').slice(0, decimals);
34
- return decPart ? `${intPart}.${decPart}` : intPart;
35
- }
36
- /**
37
- * 无币刷量 - 每个钱包执行买入+卖出
38
- *
39
- * 核心逻辑:[利润刮取] + [钱包1买入] + [钱包1卖出] + [钱包2买入] + [钱包2卖出] + ...
40
- *
41
- * 特点:
42
- * - 钱包不需要预先持有代币
43
- * - 每个钱包在同一笔交易中完成买入和卖出
44
- * - 利润从主钱包统一支付
45
- *
46
- * @example
47
- * const result = await washVolume({
48
- * privateKeys: ['0x...', '0x...'],
49
- * tokenAddress: '0x...',
50
- * buyAmountPerWallet: '0.01',
51
- * sellPercent: 100,
52
- * poolType: 'V3',
53
- * });
54
- */
10
+ import { truncateDecimals, } from './volume-helpers.js';
55
11
  export async function washVolume(params) {
56
12
  const { mainPrivateKey, privateKeys, tokenAddress, tokenDecimals = 18, buyAmountPerWallet, sellPercent = 100, poolType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', // ✅ 用户类型(影响利润率)
57
13
  config, } = params;
@@ -69,14 +25,10 @@ export async function washVolume(params) {
69
25
  if (!isValidPrivateKey(mainPrivateKey)) {
70
26
  throw new Error('mainPrivateKey 格式无效');
71
27
  }
72
- const validPrivateKeys = privateKeys.filter(pk => isValidPrivateKey(pk));
28
+ const validPrivateKeys = privateKeys.filter((pk) => isValidPrivateKey(pk));
73
29
  if (validPrivateKeys.length === 0) {
74
30
  throw new Error('没有有效的私钥(私钥必须是 0x 开头的 66 位或 64 位十六进制字符串)');
75
31
  }
76
- if (validPrivateKeys.length !== privateKeys.length) {
77
- console.warn(`[washVolume] 跳过 ${privateKeys.length - validPrivateKeys.length} 个无效私钥`);
78
- }
79
- // 使用验证后的私钥
80
32
  const actualPrivateKeys = validPrivateKeys;
81
33
  const provider = getCachedProvider(config?.rpcUrl);
82
34
  // ✅ 空字符串也使用默认值
@@ -88,7 +40,7 @@ export async function washVolume(params) {
88
40
  // ✅ 创建 Payer 钱包(支付 Gas 费)
89
41
  const mainWallet = createWallet(mainPrivateKey, provider);
90
42
  // 创建交易钱包(使用验证后的私钥)
91
- const wallets = actualPrivateKeys.map(pk => createWallet(pk, provider));
43
+ const wallets = actualPrivateKeys.map((pk) => createWallet(pk, provider));
92
44
  // 计算金额(无币刷量:每个钱包 1买 + 1卖 = 2笔交易)
93
45
  const buyAmountWei = ethers.parseEther(truncateDecimals(buyAmountPerWallet));
94
46
  const totalBuyAmount = buyAmountWei * BigInt(wallets.length);
@@ -101,21 +53,20 @@ export async function washVolume(params) {
101
53
  // ========================================
102
54
  const allWalletsMap = new Map();
103
55
  allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
104
- wallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
56
+ wallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
105
57
  const allWallets = Array.from(allWalletsMap.values());
106
58
  // 找出 mainWallet 在 allWallets 中的索引
107
- const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
59
+ const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
108
60
  // ========================================
109
61
  // 并行获取数据
110
62
  // ========================================
111
- const allAddresses = allWallets.map(w => w.address);
63
+ const allAddresses = allWallets.map((w) => w.address);
112
64
  // ✅ 对所有模式,使用【总金额报价 + 按比例分配】
113
65
  // 因为所有钱包在同一笔交易中执行,会累积影响价格
114
66
  // 这确保了「买多少就卖多少」,避免清空钱包预存代币
115
67
  let estimatedTokenAmounts = [];
116
68
  const totalBuyWei = buyAmountWei * BigInt(wallets.length);
117
69
  if (poolType === 'FLAP') {
118
- console.log(`[washVolume] FLAP 总金额报价: ${wallets.length} 个钱包, 每个 ${buyAmountWei} wei, 总计 ${totalBuyWei} wei`);
119
70
  try {
120
71
  const portalContract = new Contract(FLAP_PORTAL_ADDRESS, FLAP_PORTAL_ABI, provider);
121
72
  // ✅ 使用 previewBuy(与 AA 模式一致),降级到 quoteExactInput
@@ -123,21 +74,16 @@ export async function washVolume(params) {
123
74
  let totalTokenAmount = 0n;
124
75
  try {
125
76
  totalTokenAmount = await portalContract.previewBuy(tokenAddress, totalBuyWei);
126
- console.log(`[washVolume] FLAP previewBuy 总预估: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币`);
127
77
  }
128
- catch (previewErr) {
129
- console.warn(`[washVolume] previewBuy 失败,尝试 quoteExactInput:`, previewErr);
78
+ catch {
130
79
  try {
131
- // ✅ 降级到 quoteExactInput(与 AA 模式相同的降级策略)
132
80
  totalTokenAmount = await portalContract.quoteExactInput.staticCall({
133
81
  inputToken: ethers.ZeroAddress, // OKB
134
82
  outputToken: tokenAddress, // Token
135
83
  inputAmount: totalBuyWei,
136
84
  });
137
- console.log(`[washVolume] FLAP quoteExactInput 总预估: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币`);
138
85
  }
139
- catch (quoteErr) {
140
- console.warn(`[washVolume] quoteExactInput 也失败:`, quoteErr);
86
+ catch {
141
87
  totalTokenAmount = 0n;
142
88
  }
143
89
  }
@@ -154,27 +100,23 @@ export async function washVolume(params) {
154
100
  return sharePerWallet;
155
101
  });
156
102
  }
157
- console.log(`[washVolume] FLAP 代币分配:`, estimatedTokenAmounts.map(a => a.toString()));
158
103
  }
159
- catch (e) {
160
- console.warn(`[washVolume] FLAP 报价失败:`, e);
104
+ catch {
105
+ // FLAP quote failed
161
106
  }
162
107
  }
163
108
  else if (poolType === 'V2' || poolType === 'V3') {
164
109
  // ✅ V2/V3 外盘模式:通过报价获取预估代币数量,确保买卖对等
165
- console.log(`[washVolume] ${poolType} 总金额报价: ${wallets.length} 个钱包, 每个 ${buyAmountWei} wei, 总计 ${totalBuyWei} wei`);
166
110
  try {
167
111
  const { quoteV2, quoteV3 } = await import('../../../utils/quote-helpers.js');
168
112
  let totalTokenAmount = 0n;
169
113
  if (poolType === 'V3') {
170
114
  const result = await quoteV3(provider, WOKB_ADDRESS, tokenAddress, totalBuyWei, 'XLAYER', fee);
171
115
  totalTokenAmount = result.amountOut;
172
- console.log(`[washVolume] V3 报价成功: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币 (fee: ${fee})`);
173
116
  }
174
117
  else {
175
118
  const result = await quoteV2(provider, WOKB_ADDRESS, tokenAddress, totalBuyWei, 'XLAYER');
176
119
  totalTokenAmount = result.amountOut;
177
- console.log(`[washVolume] V2 报价成功: ${totalBuyWei} wei OKB -> ${totalTokenAmount} wei 代币`);
178
120
  }
179
121
  // 均分到每个钱包
180
122
  if (totalBuyWei > 0n && totalTokenAmount > 0n) {
@@ -187,22 +129,17 @@ export async function washVolume(params) {
187
129
  allocated += sharePerWallet;
188
130
  return sharePerWallet;
189
131
  });
190
- console.log(`[washVolume] ${poolType} 代币分配:`, estimatedTokenAmounts.map(a => a.toString()));
191
132
  }
192
133
  }
193
- catch (e) {
194
- console.warn(`[washVolume] ${poolType} 报价失败,将使用 sellPercent 模式:`, e);
134
+ catch {
135
+ // V2/V3 quote failed
195
136
  }
196
137
  }
197
- const [nonces, feeData] = await Promise.all([
198
- batchGetNonces(allAddresses, provider),
199
- provider.getFeeData(),
200
- ]);
138
+ const [nonces, feeData] = await Promise.all([batchGetNonces(allAddresses, provider), provider.getFeeData()]);
201
139
  // ========================================
202
140
  // 同步签署授权
203
141
  // ========================================
204
- const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, mainWalletIndex // mainWallet 是交易发起者
205
- );
142
+ const authorizations = signAuthorizationsWithNonces(allWallets, nonces, delegateAddress, mainWalletIndex);
206
143
  // ========================================
207
144
  // 构建调用
208
145
  // ========================================
@@ -251,25 +188,13 @@ export async function washVolume(params) {
251
188
  },
252
189
  };
253
190
  }
191
+ // ========================================
192
+ // 捆绑刷量 (Bundle Mode)
193
+ // ========================================
254
194
  /**
255
195
  * 捆绑刷量 - 多钱包批量买入 + 批量卖出
256
196
  *
257
197
  * 核心逻辑:[利润刮取] + [买入Ops...] + [卖出Ops...]
258
- *
259
- * 特点:
260
- * - 买入和卖出可以使用不同的钱包
261
- * - 所有操作在一笔交易中原子执行
262
- * - 卖出钱包需要预先持有代币
263
- *
264
- * @example
265
- * const result = await bundleVolume({
266
- * buyerPrivateKeys: ['0x...', '0x...'],
267
- * buyAmounts: ['0.01', '0.02'],
268
- * sellerPrivateKeys: ['0x...'],
269
- * sellPercent: 100,
270
- * tokenAddress: '0x...',
271
- * poolType: 'FLAP',
272
- * });
273
198
  */
274
199
  export async function bundleVolume(params) {
275
200
  const { mainPrivateKey, buyerPrivateKeys, buyAmounts, sellerPrivateKeys, sellAmounts, sellPercent = 100, tokenAddress, tokenDecimals = 18, poolType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', // ✅ 用户类型(影响利润率)
@@ -297,13 +222,10 @@ export async function bundleVolume(params) {
297
222
  throw new Error('没有有效的买家私钥');
298
223
  }
299
224
  // ✅ 验证卖家私钥
300
- const validSellerPrivateKeys = sellerPrivateKeys.filter(pk => isValidPrivateKey(pk));
225
+ const validSellerPrivateKeys = sellerPrivateKeys.filter((pk) => isValidPrivateKey(pk));
301
226
  if (validSellerPrivateKeys.length === 0) {
302
227
  throw new Error('没有有效的卖家私钥');
303
228
  }
304
- if (validBuyerPrivateKeys.length !== buyerPrivateKeys.length || validSellerPrivateKeys.length !== sellerPrivateKeys.length) {
305
- console.warn(`[bundleVolume] 跳过无效私钥: 买家 ${buyerPrivateKeys.length - validBuyerPrivateKeys.length} 个, 卖家 ${sellerPrivateKeys.length - validSellerPrivateKeys.length} 个`);
306
- }
307
229
  const provider = getCachedProvider(config?.rpcUrl);
308
230
  // ✅ 空字符串也使用默认值
309
231
  const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
@@ -313,18 +235,18 @@ export async function bundleVolume(params) {
313
235
  // ✅ 创建 Payer 钱包(支付 Gas 费)
314
236
  const mainWallet = createWallet(mainPrivateKey, provider);
315
237
  // 创建钱包(使用验证后的私钥)
316
- const buyerWallets = validBuyerPrivateKeys.map(pk => createWallet(pk, provider));
317
- const sellerWallets = validSellerPrivateKeys.map(pk => createWallet(pk, provider));
238
+ const buyerWallets = validBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
239
+ const sellerWallets = validSellerPrivateKeys.map((pk) => createWallet(pk, provider));
318
240
  // 合并所有钱包(去重,包括 mainWallet)
319
241
  const allWalletsMap = new Map();
320
242
  allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
321
- buyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
322
- sellerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
243
+ buyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
244
+ sellerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
323
245
  const allWallets = Array.from(allWalletsMap.values());
324
246
  // 找出 mainWallet 在 allWallets 中的索引
325
- const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
247
+ const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
326
248
  // 计算买入金额(使用验证后的金额数组)
327
- const buyAmountsWei = validBuyAmounts.map(amt => ethers.parseEther(truncateDecimals(amt)));
249
+ const buyAmountsWei = validBuyAmounts.map((amt) => ethers.parseEther(truncateDecimals(amt)));
328
250
  const totalBuyAmount = buyAmountsWei.reduce((sum, amt) => sum + amt, 0n);
329
251
  // ✅ 计算利润(捆绑刷量:买家数 + 卖家数 = 总交易数)
330
252
  const totalTxCount = buyerWallets.length + sellerWallets.length;
@@ -333,16 +255,13 @@ export async function bundleVolume(params) {
333
255
  // ========================================
334
256
  // 并行获取数据
335
257
  // ========================================
336
- const allAddresses = allWallets.map(w => w.address);
258
+ const allAddresses = allWallets.map((w) => w.address);
337
259
  // 获取卖出钱包的代币余额(如果需要)
338
260
  const needBalanceQuery = !sellAmounts || sellAmounts.length !== sellerWallets.length;
339
- const parallelPromises = [
340
- batchGetNonces(allAddresses, provider),
341
- provider.getFeeData(),
342
- ];
261
+ const parallelPromises = [batchGetNonces(allAddresses, provider), provider.getFeeData()];
343
262
  if (needBalanceQuery && sellerWallets.length > 0) {
344
263
  const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
345
- parallelPromises.push(Promise.all(sellerWallets.map(w => tokenContract.balanceOf(w.address))));
264
+ parallelPromises.push(Promise.all(sellerWallets.map((w) => tokenContract.balanceOf(w.address))));
346
265
  }
347
266
  const results = await Promise.all(parallelPromises);
348
267
  const nonces = results[0];
@@ -351,12 +270,9 @@ export async function bundleVolume(params) {
351
270
  let sellAmountsWei;
352
271
  if (sellAmounts && sellAmounts.length === sellerWallets.length) {
353
272
  // ✅ 如果有指定卖出金额,直接使用
354
- sellAmountsWei = sellAmounts.map(amt => ethers.parseUnits(truncateDecimals(amt, tokenDecimals), tokenDecimals));
273
+ sellAmountsWei = sellAmounts.map((amt) => ethers.parseUnits(truncateDecimals(amt, tokenDecimals), tokenDecimals));
355
274
  }
356
275
  else if (needBalanceQuery && results[2]) {
357
- // ✅ 没有指定卖出金额,需要根据买入金额预估应卖出的代币数量
358
- const balances = results[2].map(b => typeof b === 'bigint' ? b : BigInt(b.toString()));
359
- const totalSellerBalance = balances.reduce((sum, b) => sum + b, 0n);
360
276
  // ✅ 根据 poolType 预估买入能获得的代币数量
361
277
  let estimatedTokenAmount = 0n;
362
278
  try {
@@ -365,36 +281,28 @@ export async function bundleVolume(params) {
365
281
  const portalContract = new ethers.Contract(FLAP_PORTAL_ADDRESS, FLAP_PORTAL_ABI, provider);
366
282
  try {
367
283
  estimatedTokenAmount = await portalContract.previewBuy(tokenAddress, totalBuyAmount);
368
- console.log(`[bundleVolume] FLAP previewBuy: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
369
284
  }
370
- catch (previewErr) {
371
- console.warn(`[bundleVolume] previewBuy 失败,尝试 quoteBuy:`, previewErr);
285
+ catch {
372
286
  try {
373
287
  estimatedTokenAmount = await portalContract.quoteBuy(tokenAddress, totalBuyAmount);
374
- console.log(`[bundleVolume] FLAP quoteBuy: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
375
288
  }
376
- catch (quoteBuyErr) {
377
- console.warn(`[bundleVolume] quoteBuy 失败,尝试 quoteExactInput:`, quoteBuyErr);
289
+ catch {
378
290
  try {
379
291
  estimatedTokenAmount = await portalContract.quoteExactInput.staticCall({
380
292
  inputToken: ethers.ZeroAddress,
381
293
  outputToken: tokenAddress,
382
294
  inputAmount: totalBuyAmount,
383
295
  });
384
- console.log(`[bundleVolume] FLAP quoteExactInput: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
385
296
  }
386
- catch (quoteErr) {
387
- console.warn(`[bundleVolume] quoteExactInput 也失败,尝试 V2 路由作为终极兜底:`, quoteErr);
297
+ catch {
388
298
  try {
389
- // 终极兜底:当内盘接口全部失效时,尝试使用 V2 代码进行报价
390
299
  const v2Router = new ethers.Contract(POTATOSWAP_V2_ROUTER, V2_ROUTER_ABI, provider);
391
300
  const path = [WOKB_ADDRESS, tokenAddress];
392
301
  const amounts = await v2Router.getAmountsOut(totalBuyAmount, path);
393
302
  estimatedTokenAmount = amounts[amounts.length - 1];
394
- console.log(`[bundleVolume] FLAP 终极回退 V2 quote: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
395
303
  }
396
- catch (v2Err) {
397
- console.warn(`[bundleVolume] 终极回退 V2 quote 也失败:`, v2Err);
304
+ catch {
305
+ // all quote paths failed
398
306
  }
399
307
  }
400
308
  }
@@ -412,7 +320,7 @@ export async function bundleVolume(params) {
412
320
  else {
413
321
  // V3: 使用 V3 Quoter
414
322
  const v3Quoter = new ethers.Contract('0x27d52F6D9Ed2eBb3E6a4c0Af6b1f5dc85A4d5b2C', [
415
- 'function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96)) external returns (uint256 amountOut)'
323
+ 'function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96)) external returns (uint256 amountOut)',
416
324
  ], provider);
417
325
  estimatedTokenAmount = await v3Quoter.quoteExactInputSingle.staticCall({
418
326
  tokenIn: WOKB_ADDRESS,
@@ -422,15 +330,14 @@ export async function bundleVolume(params) {
422
330
  sqrtPriceLimitX96: 0n,
423
331
  });
424
332
  }
425
- console.log(`[bundleVolume] ${poolType} quote: ${totalBuyAmount} wei OKB -> ${estimatedTokenAmount} wei 代币`);
426
333
  }
427
- catch (quoteErr) {
428
- console.warn(`[bundleVolume] ${poolType} 报价失败:`, quoteErr);
334
+ catch {
335
+ // pool quote failed
429
336
  }
430
337
  }
431
338
  }
432
- catch (e) {
433
- console.warn(`[bundleVolume] 报价预估失败:`, e);
339
+ catch {
340
+ // quote estimate failed
434
341
  }
435
342
  // ✅ 修正卖出数量计算逻辑:卖出数额仅基于本次交易买入的代币预估值,忽略原有余额
436
343
  const percentBigInt = BigInt(Math.min(100, Math.max(0, sellPercent)));
@@ -460,11 +367,9 @@ export async function bundleVolume(params) {
460
367
  }
461
368
  });
462
369
  }
463
- console.log(`[bundleVolume] 每个卖家随机分配的卖出量:`, walletSellAmounts.map(a => a.toString()));
464
370
  }
465
371
  // ✅ 修复:不再重复应用 sellPercent,因为 totalToSell 已经按 sellPercent 计算过了
466
372
  sellAmountsWei = walletSellAmounts;
467
- console.log(`[bundleVolume] 最终卖出数量 (sellPercent=${sellPercent}%):`, sellAmountsWei.map(a => a.toString()));
468
373
  }
469
374
  else {
470
375
  // ✅ 即使没有余额查询结果,也初始化数组
@@ -525,11 +430,10 @@ export async function bundleVolume(params) {
525
430
  },
526
431
  };
527
432
  }
528
- /**
529
- * 生成单轮刷量签名(买入 + 卖出分开)
530
- *
531
- * 注意:买入和卖出是两笔独立交易
532
- */
433
+ // ========================================
434
+ // 单轮刷量(买入+卖出分开签名)
435
+ // ========================================
436
+ /** 生成单轮刷量签名(买入 + 卖出分开,两笔独立交易) */
533
437
  export async function singleRoundVolume(params) {
534
438
  const { privateKeys, tokenAddress, tokenDecimals = 18, buyAmountPerWallet, sellPercent = 100, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, config, } = params;
535
439
  const mainPrivateKey = privateKeys[0];
@@ -567,12 +471,10 @@ export async function singleRoundVolume(params) {
567
471
  },
568
472
  };
569
473
  }
570
- /**
571
- * 生成多轮刷量签名
572
- *
573
- * 注意:由于 nonce 问题,只能预生成第一轮
574
- * 后续轮次需要在前一轮交易确认后才能生成
575
- */
474
+ // ========================================
475
+ // 多轮刷量
476
+ // ========================================
477
+ /** 生成多轮刷量签名(由于 nonce 限制,仅预生成第一轮) */
576
478
  export async function makeVolume(params) {
577
479
  const { privateKeys, tokenAddress, tokenDecimals = 18, buyAmountPerRound, rounds, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, onProgress, config, } = params;
578
480
  const buyAmountPerWallet = (parseFloat(buyAmountPerRound) / privateKeys.length).toString();
@@ -603,9 +505,10 @@ export async function makeVolume(params) {
603
505
  },
604
506
  };
605
507
  }
606
- /**
607
- * 生成换手刷量签名
608
- */
508
+ // ========================================
509
+ // 换手刷量
510
+ // ========================================
511
+ /** 生成换手刷量签名 */
609
512
  export async function makeVolumeWithSwap(params) {
610
513
  const { sellerPrivateKey, buyerPrivateKey, tokenAddress, tokenDecimals = 18, sellAmount, hopCount = 2, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, config, } = params;
611
514
  const result = await bundleSwap({
@@ -648,13 +551,15 @@ function buildBuyCall(wallet, amount, tokenAddress, poolType, routerAddress, fee
648
551
  case 'FLAP': {
649
552
  // ✅ 修复:使用 swapExactInput 代替 buy 函数,明确指定 inputAmount
650
553
  // buy(token) 依赖 msg.value,当 value=0n 时会失败
651
- const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
554
+ const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
555
+ {
652
556
  inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
653
557
  outputToken: tokenAddress,
654
558
  inputAmount: amount,
655
559
  minOutputAmount: 0n,
656
560
  permitData: '0x',
657
- }]);
561
+ },
562
+ ]);
658
563
  const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: amount, data: portalCallData }];
659
564
  return {
660
565
  target: wallet.address,
@@ -680,7 +585,11 @@ function buildBuyCall(wallet, amount, tokenAddress, poolType, routerAddress, fee
680
585
  allowFailure: false,
681
586
  value: 0n,
682
587
  callData: delegateInterface.encodeFunctionData('executeBuy', [
683
- routerAddress, WOKB_ADDRESS, tokenAddress, fee, amount
588
+ routerAddress,
589
+ WOKB_ADDRESS,
590
+ tokenAddress,
591
+ fee,
592
+ amount,
684
593
  ]),
685
594
  };
686
595
  }
@@ -695,13 +604,15 @@ tokenAddress, sellPercent, tokenDecimals, poolType, routerAddress, fee, delegate
695
604
  // ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
696
605
  // 注意:inputAmount=0 会失败,FLAP 需要先获取余额再调用
697
606
  // 这里需要传入实际的代币余额,外层调用者应该提前查询
698
- const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
607
+ const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
608
+ {
699
609
  inputToken: tokenAddress,
700
610
  outputToken: ethers.ZeroAddress, // 0x0 = OKB
701
611
  inputAmount: 1n, // 占位符,如果调用 buildSellCall 时不指定 amount,通常意味逻辑上有问题
702
612
  minOutputAmount: 0n,
703
613
  permitData: '0x',
704
- }]);
614
+ },
615
+ ]);
705
616
  const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
706
617
  return {
707
618
  target: wallet.address,
@@ -717,7 +628,11 @@ tokenAddress, sellPercent, tokenDecimals, poolType, routerAddress, fee, delegate
717
628
  target: wallet.address,
718
629
  allowFailure: false,
719
630
  value: 0n,
720
- callData: delegateInterface.encodeFunctionData('executeSellV2', [routerAddress, path, sellPercent === 100 ? 0 : amount]),
631
+ callData: delegateInterface.encodeFunctionData('executeSellV2', [
632
+ routerAddress,
633
+ path,
634
+ sellPercent === 100 ? 0 : amount,
635
+ ]),
721
636
  };
722
637
  }
723
638
  case 'V3': {
@@ -727,7 +642,11 @@ tokenAddress, sellPercent, tokenDecimals, poolType, routerAddress, fee, delegate
727
642
  allowFailure: false,
728
643
  value: 0n,
729
644
  callData: delegateInterface.encodeFunctionData('executeSell', [
730
- routerAddress, tokenAddress, WOKB_ADDRESS, fee, sellPercent === 100 ? 0 : amount
645
+ routerAddress,
646
+ tokenAddress,
647
+ WOKB_ADDRESS,
648
+ fee,
649
+ sellPercent === 100 ? 0 : amount,
731
650
  ]),
732
651
  };
733
652
  }
@@ -737,13 +656,15 @@ function buildSellCallWithAmount(wallet, amount, tokenAddress, poolType, routerA
737
656
  switch (poolType) {
738
657
  case 'FLAP': {
739
658
  // ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
740
- const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
659
+ const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
660
+ {
741
661
  inputToken: tokenAddress,
742
662
  outputToken: ethers.ZeroAddress, // 0x0 = OKB
743
663
  inputAmount: amount,
744
664
  minOutputAmount: 0n,
745
665
  permitData: '0x',
746
- }]);
666
+ },
667
+ ]);
747
668
  const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
748
669
  return {
749
670
  target: wallet.address,
@@ -767,7 +688,11 @@ function buildSellCallWithAmount(wallet, amount, tokenAddress, poolType, routerA
767
688
  allowFailure: false,
768
689
  value: 0n,
769
690
  callData: delegateInterface.encodeFunctionData('executeSell', [
770
- routerAddress, tokenAddress, WOKB_ADDRESS, fee, amount
691
+ routerAddress,
692
+ tokenAddress,
693
+ WOKB_ADDRESS,
694
+ fee,
695
+ amount,
771
696
  ]),
772
697
  };
773
698
  }
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * ⚠️ 通用常量请使用 shared/constants,此文件仅包含 XLayer 特有的配置
8
8
  */
9
- import { CHAINS, ADDRESSES, GAS_LIMITS, GAS_CONFIG, ZERO_ADDRESS as SHARED_ZERO_ADDRESS } from '../../../shared/constants/index.js';
9
+ import { CHAINS, ADDRESSES, GAS_LIMITS, GAS_CONFIG, ZERO_ADDRESS as SHARED_ZERO_ADDRESS, } from '../../../shared/constants/index.js';
10
10
  // ============================================================================
11
11
  // 从 shared/constants 重新导出(向后兼容)
12
12
  // ============================================================================
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * XLayer AA DEX 工具函数
3
3
  */
4
- import { PROFIT_CONFIG } from '../../../utils/constants.js';
4
+ import { getProfitRecipient, getProfitRateBps } from '../../../shared/constants/index.js';
5
5
  export function getDexDeadline(minutes = 20) {
6
6
  return Math.floor(Date.now() / 1000) + minutes * 60;
7
7
  }
@@ -14,9 +14,9 @@ export function calculateProfitWei(amountWei, profitBps) {
14
14
  }
15
15
  export function resolveProfitSettings(config) {
16
16
  const extractProfit = config?.extractProfit !== false;
17
- const profitBpsRaw = config?.profitBps ?? PROFIT_CONFIG.RATE_BPS_SWAP;
18
- const profitBps = Math.max(0, Math.min(10000, Number(profitBpsRaw)));
19
- const profitRecipient = config?.profitRecipient ?? PROFIT_CONFIG.RECIPIENT;
17
+ const profitBpsRaw = config?.profitBps ?? getProfitRateBps('bundleSwap');
18
+ const profitBps = Math.max(0, Math.min(10_000, Number(profitBpsRaw)));
19
+ const profitRecipient = config?.profitRecipient ?? getProfitRecipient();
20
20
  return { extractProfit, profitBps, profitRecipient };
21
21
  }
22
22
  function shuffle(arr) {
@@ -36,7 +36,7 @@ export function splitAmount(totalAmount, count) {
36
36
  return new Array(count).fill(0n);
37
37
  const weights = [];
38
38
  for (let i = 0; i < count; i++) {
39
- const w = BigInt(500000 + Math.floor(Math.random() * 1000000));
39
+ const w = BigInt(500_000 + Math.floor(Math.random() * 1_000_000));
40
40
  weights.push(w);
41
41
  }
42
42
  const totalWeight = weights.reduce((a, b) => a + b, 0n);