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
@@ -6,9 +6,9 @@
6
6
  *
7
7
  * 只生成签名,由调用方决定如何提交
8
8
  */
9
- import { ethers, Contract, JsonRpcProvider } from 'ethers';
9
+ import { ethers, Contract } from 'ethers';
10
10
  import { getCachedProvider, createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, calculateProfitAmountByUserType, getProfitRecipient, } from './utils.js';
11
- import { UNIFIED_DELEGATE_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, FLAP_PORTAL_ADDRESS, WOKB_ADDRESS, V3_FEE_TIERS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, ERC20_ABI, XLAYER_RPC_URL, XLAYER_CHAIN_ID, } from './constants.js';
11
+ import { UNIFIED_DELEGATE_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, FLAP_PORTAL_ADDRESS, WOKB_ADDRESS, V3_FEE_TIERS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, ERC20_ABI, XLAYER_RPC_URL, } from './constants.js';
12
12
  import { quoteV2, quoteV3 } from '../../../utils/quote-helpers.js';
13
13
  // ========================================
14
14
  // 路由地址获取
@@ -39,7 +39,7 @@ function getDefaultRouter(tradeType) {
39
39
  async function quoteSellOutput(totalSellAmount, tokenAddress, tradeType, fee, rpcUrl) {
40
40
  if (totalSellAmount <= 0n)
41
41
  return 0n;
42
- const provider = new JsonRpcProvider(rpcUrl || XLAYER_RPC_URL, { chainId: XLAYER_CHAIN_ID, name: 'xlayer', ensAddress: undefined });
42
+ const provider = getCachedProvider(rpcUrl || XLAYER_RPC_URL);
43
43
  try {
44
44
  switch (tradeType) {
45
45
  case 'FLAP': {
@@ -51,7 +51,7 @@ async function quoteSellOutput(totalSellAmount, tokenAddress, tradeType, fee, rp
51
51
  return BigInt(okbOut.toString());
52
52
  }
53
53
  catch {
54
- console.warn(`[Bundle Sell] FLAP quoteSell 失败,尝试 quoteExactInput...`);
54
+ // fallback to quoteExactInput
55
55
  }
56
56
  // 再尝试 quoteExactInput
57
57
  try {
@@ -63,7 +63,7 @@ async function quoteSellOutput(totalSellAmount, tokenAddress, tradeType, fee, rp
63
63
  return BigInt(okbOut.toString());
64
64
  }
65
65
  catch {
66
- console.warn(`[Bundle Sell] FLAP quoteExactInput 失败,尝试 V2...`);
66
+ // fallback to V2
67
67
  }
68
68
  // 回退到 V2
69
69
  const v2Result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, totalSellAmount, 'XLAYER');
@@ -93,10 +93,9 @@ async function quoteSellOutput(totalSellAmount, tokenAddress, tradeType, fee, rp
93
93
  }
94
94
  }
95
95
  }
96
- catch (error) {
97
- console.error(`[Bundle Sell] 报价失败:`, error);
96
+ catch {
97
+ // quote failed, return 0
98
98
  }
99
- console.warn(`[Bundle Sell] 无法获取报价,利润计算可能不准确`);
100
99
  return 0n;
101
100
  }
102
101
  // ========================================
@@ -107,8 +106,8 @@ async function getTokenBalances(wallets, tokenAddress) {
107
106
  if (!provider)
108
107
  throw new Error('Wallet has no provider');
109
108
  const tokenContract = new Contract(tokenAddress, ERC20_ABI, provider);
110
- const balances = await Promise.all(wallets.map(w => tokenContract.balanceOf(w.address)));
111
- return balances.map(b => BigInt(b.toString()));
109
+ const balances = await Promise.all(wallets.map((w) => tokenContract.balanceOf(w.address)));
110
+ return balances.map((b) => BigInt(b.toString()));
112
111
  }
113
112
  // ========================================
114
113
  // FLAP 内盘卖出
@@ -124,18 +123,22 @@ function buildFlapSellCalls(wallets, sellAmounts, tokenAddress) {
124
123
  continue;
125
124
  // ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
126
125
  // outputToken = 0x0 表示卖出换取原生代币 (OKB)
127
- const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
126
+ const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
127
+ {
128
128
  inputToken: tokenAddress,
129
129
  outputToken: ethers.ZeroAddress, // 0x0 = OKB
130
130
  inputAmount: amount,
131
131
  minOutputAmount: 0n, // 无滑点保护
132
132
  permitData: '0x', // 无 permit
133
- }]);
134
- const batchCalls = [{
133
+ },
134
+ ]);
135
+ const batchCalls = [
136
+ {
135
137
  target: FLAP_PORTAL_ADDRESS,
136
138
  value: 0n,
137
139
  data: portalCallData,
138
- }];
140
+ },
141
+ ];
139
142
  const callData = delegateInterface.encodeFunctionData('executeBatch', [batchCalls]);
140
143
  calls.push({
141
144
  target: wallet.address, // 以钱包身份调用,OKB 收益会到钱包
@@ -160,11 +163,7 @@ function buildV2SellCalls(wallets, sellAmounts, tokenAddress, routerAddress) {
160
163
  if (amount <= 0n)
161
164
  continue;
162
165
  // 使用 UnifiedDelegate 的 executeSellV2 函数
163
- const callData = delegateInterface.encodeFunctionData('executeSellV2', [
164
- routerAddress,
165
- path,
166
- amount,
167
- ]);
166
+ const callData = delegateInterface.encodeFunctionData('executeSellV2', [routerAddress, path, amount]);
168
167
  calls.push({
169
168
  target: wallet.address,
170
169
  allowFailure: false,
@@ -215,46 +214,6 @@ function buildSellCalls(wallets, sellAmounts, tokenAddress, tradeType, routerAdd
215
214
  return buildV3SellCalls(wallets, sellAmounts, tokenAddress, routerAddress, fee);
216
215
  }
217
216
  }
218
- // ========================================
219
- // 批量卖出主函数
220
- // ========================================
221
- /**
222
- * 批量卖出 - 生成签名后的交易
223
- *
224
- * @param params 卖出参数
225
- * @returns 签名后的交易和元数据
226
- *
227
- * @example
228
- * // FLAP 内盘卖出
229
- * const result = await bundleSell({
230
- * mainPrivateKey: '0x...',
231
- * privateKeys: ['0x...', '0x...'],
232
- * sellPercent: 100, // 卖出 100%
233
- * tokenAddress: '0x...',
234
- * tradeType: 'FLAP',
235
- * });
236
- *
237
- * @example
238
- * // V2 卖出
239
- * const result = await bundleSell({
240
- * mainPrivateKey: '0x...',
241
- * privateKeys: ['0x...', '0x...'],
242
- * sellPercent: 50, // 卖出 50%
243
- * tokenAddress: '0x...',
244
- * tradeType: 'V2',
245
- * });
246
- *
247
- * @example
248
- * // V3 卖出(默认)
249
- * const result = await bundleSell({
250
- * mainPrivateKey: '0x...',
251
- * privateKeys: ['0x...', '0x...'],
252
- * sellAmounts: ['100', '200'], // 指定数量
253
- * tokenAddress: '0x...',
254
- * tradeType: 'V3',
255
- * fee: 2500,
256
- * });
257
- */
258
217
  export async function bundleSell(params) {
259
218
  const { mainPrivateKey, privateKeys, sellAmounts, sellPercent, tokenAddress, tokenDecimals = 18, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', // ✅ 用户类型(影响利润率)
260
219
  config, } = params;
@@ -266,17 +225,15 @@ export async function bundleSell(params) {
266
225
  // 同步操作 - 批量创建钱包
267
226
  // ========================================
268
227
  const mainWallet = createWallet(mainPrivateKey, provider);
269
- const wallets = privateKeys.map(pk => createWallet(pk, provider));
228
+ const wallets = privateKeys.map((pk) => createWallet(pk, provider));
270
229
  const profitRecipient = getProfitRecipient(config);
271
230
  // 确定需要授权的钱包
272
- const mainWalletIndex = wallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
273
- const allWallets = mainWalletIndex === -1
274
- ? [mainWallet, ...wallets]
275
- : wallets;
231
+ const mainWalletIndex = wallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
232
+ const allWallets = mainWalletIndex === -1 ? [mainWallet, ...wallets] : wallets;
276
233
  // ========================================
277
234
  // 并行获取所有异步数据
278
235
  // ========================================
279
- const allAddresses = allWallets.map(w => w.address);
236
+ const allAddresses = allWallets.map((w) => w.address);
280
237
  // 判断是否需要查询代币余额
281
238
  const needBalanceQuery = !sellAmounts || sellAmounts.length !== wallets.length;
282
239
  // 构建并行请求
@@ -303,13 +260,13 @@ export async function bundleSell(params) {
303
260
  let sellAmountsWei;
304
261
  if (sellAmounts && sellAmounts.length === wallets.length) {
305
262
  // 直接解析指定的卖出数量
306
- sellAmountsWei = sellAmounts.map(amt => ethers.parseUnits(amt, tokenDecimals));
263
+ sellAmountsWei = sellAmounts.map((amt) => ethers.parseUnits(amt, tokenDecimals));
307
264
  }
308
265
  else if (tokenBalances) {
309
266
  // 使用查询到的余额
310
267
  if (sellPercent !== undefined && sellPercent > 0) {
311
268
  const percent = Math.min(100, Math.max(0, sellPercent));
312
- sellAmountsWei = tokenBalances.map(b => (b * BigInt(percent)) / 100n);
269
+ sellAmountsWei = tokenBalances.map((b) => (b * BigInt(percent)) / 100n);
313
270
  }
314
271
  else {
315
272
  sellAmountsWei = tokenBalances;
@@ -324,9 +281,7 @@ export async function bundleSell(params) {
324
281
  // 1. 先获取报价:卖出 totalSellAmount 代币能得到多少 OKB
325
282
  const estimatedOkbOut = await quoteSellOutput(totalSellAmount, tokenAddress, tradeType, fee, config?.rpcUrl);
326
283
  // 2. 基于预估的 OKB 输出计算利润(单边模式,isDoubleMode = false)
327
- const profitAmount = estimatedOkbOut > 0n
328
- ? calculateProfitAmountByUserType(estimatedOkbOut, userType, false)
329
- : 0n;
284
+ const profitAmount = estimatedOkbOut > 0n ? calculateProfitAmountByUserType(estimatedOkbOut, userType, false) : 0n;
330
285
  // ========================================
331
286
  // 同步构建授权和调用
332
287
  // ========================================
@@ -365,10 +320,7 @@ export async function bundleSell(params) {
365
320
  target: wallets[i].address,
366
321
  allowFailure: false,
367
322
  value: 0n,
368
- callData: delegateInterface.encodeFunctionData('transferAmount', [
369
- profitRecipient,
370
- walletProfit,
371
- ]),
323
+ callData: delegateInterface.encodeFunctionData('transferAmount', [profitRecipient, walletProfit]),
372
324
  });
373
325
  }
374
326
  }
@@ -9,28 +9,7 @@
9
9
  * 支持 FLAP 内盘、V2 和 V3 三种交易类型
10
10
  * 只生成签名,由调用方决定如何提交
11
11
  */
12
- import type { BundleSwapParams as BaseBundleSwapParams, BundleBatchSwapParams as BaseBundleBatchSwapParams, BundleSwapResult, TradeType, EIP7702Config } from './types.js';
13
- export interface BundleSwapParams extends BaseBundleSwapParams {
14
- /** 用户类型(影响利润率) */
15
- userType?: UserType;
16
- /**
17
- * 是否使用资金利用率模式(默认 false)
18
- * - false(普通模式): 卖家卖出 OKB 留在卖家账户,买家用自己预存的 OKB 买入
19
- * - true(资金利用率模式): 卖家卖出的 OKB 通过多跳转账给买家,买家用收到的 OKB 买入
20
- */
21
- useFundUtilization?: boolean;
22
- }
23
- export interface BundleBatchSwapParams extends BaseBundleBatchSwapParams {
24
- /** 用户类型(影响利润率) */
25
- userType?: UserType;
26
- /**
27
- * 是否使用资金利用率模式(默认 false)
28
- * - false(普通模式): 卖家卖出 OKB 留在卖家账户,买家用自己预存的 OKB 买入
29
- * - true(资金利用率模式): 卖家卖出的 OKB 通过多跳转账给买家,买家用收到的 OKB 买入
30
- */
31
- useFundUtilization?: boolean;
32
- }
33
- import { type UserType } from './utils.js';
12
+ import type { BundleBatchSwapParams, BundleMultiSwapParams, BundleMultiSwapResult, BundleSwapParams, BundleSwapResult } from './types.js';
34
13
  /**
35
14
  * 捆绑换手 - 生成签名后的交易
36
15
  *
@@ -48,6 +27,7 @@ import { type UserType } from './utils.js';
48
27
  * hopCount: 2,
49
28
  * });
50
29
  */
30
+ export type { BundleSwapParams, BundleBatchSwapParams } from './types.js';
51
31
  export declare function bundleSwap(params: BundleSwapParams): Promise<BundleSwapResult>;
52
32
  /**
53
33
  * 批量换手(一卖多买)- 生成签名后的交易
@@ -66,49 +46,7 @@ export declare function bundleSwap(params: BundleSwapParams): Promise<BundleSwap
66
46
  * });
67
47
  */
68
48
  export declare function bundleBatchSwap(params: BundleBatchSwapParams): Promise<BundleSwapResult>;
69
- export interface BundleMultiSwapParams {
70
- /** Payer 钱包私钥(支付 Gas 费) */
71
- mainPrivateKey: string;
72
- /** 卖出钱包私钥列表 */
73
- sellerPrivateKeys: string[];
74
- /** 买入钱包私钥列表 */
75
- buyerPrivateKeys: string[];
76
- /** 买入总金额 (OKB) */
77
- totalBuyAmount: string;
78
- /** 代币地址 */
79
- tokenAddress: string;
80
- /** 代币精度 */
81
- tokenDecimals?: number;
82
- /** 卖出百分比(1-100,默认 100) */
83
- sellPercent?: number;
84
- /** 交易类型:FLAP 内盘 / V2 / V3(默认 V3) */
85
- tradeType?: TradeType;
86
- /** 路由地址(可选,根据 tradeType 自动选择) */
87
- routerAddress?: string;
88
- /** V3 费率(可选,默认 2500,仅 V3 使用) */
89
- fee?: number;
90
- /** 用户类型(影响利润率) */
91
- userType?: UserType;
92
- /** 配置 */
93
- config?: EIP7702Config;
94
- }
95
- export interface BundleMultiSwapResult {
96
- /** 签名后的交易 */
97
- signedTransaction: string;
98
- /** 元数据 */
99
- metadata: {
100
- payerAddress: string;
101
- sellerAddresses: string[];
102
- buyerAddresses: string[];
103
- sellerCount: number;
104
- buyerCount: number;
105
- totalBuyAmount: string;
106
- totalSellAmount: string;
107
- profitAmount: string;
108
- profitRecipient: string;
109
- userType: string;
110
- };
111
- }
49
+ export type { BundleMultiSwapParams, BundleMultiSwapResult } from './types.js';
112
50
  /**
113
51
  * 多对多换手 - 多个卖家 + 多个买家
114
52
  *
@@ -9,10 +9,10 @@
9
9
  * 支持 FLAP 内盘、V2 和 V3 三种交易类型
10
10
  * 只生成签名,由调用方决定如何提交
11
11
  */
12
- import { ethers, Contract, JsonRpcProvider } from 'ethers';
12
+ import { ethers, Contract } from 'ethers';
13
13
  import { quoteV2, quoteV3 } from '../../../utils/quote-helpers.js';
14
14
  import { getCachedProvider, createWallet, signAuthorization, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, calculateProfitAmountByUserType, calculateProfitAmountByTxCount, getProfitRecipient, generateRandomWallets, } from './utils.js';
15
- import { UNIFIED_DELEGATE_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, FLAP_PORTAL_ADDRESS, WOKB_ADDRESS, V3_FEE_TIERS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, ERC20_ABI, XLAYER_RPC_URL, XLAYER_CHAIN_ID, } from './constants.js';
15
+ import { UNIFIED_DELEGATE_ADDRESS, POTATOSWAP_V2_ROUTER, POTATOSWAP_V3_ROUTER, FLAP_PORTAL_ADDRESS, WOKB_ADDRESS, V3_FEE_TIERS, UNIFIED_DELEGATE_ABI, FLAP_PORTAL_ABI, ERC20_ABI, XLAYER_RPC_URL, } from './constants.js';
16
16
  // ========================================
17
17
  // 路由地址获取
18
18
  // ========================================
@@ -50,7 +50,7 @@ function truncateDecimals(value, decimals = 18) {
50
50
  async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl) {
51
51
  if (sellAmount <= 0n)
52
52
  return 0n;
53
- const provider = new JsonRpcProvider(rpcUrl || XLAYER_RPC_URL, { chainId: XLAYER_CHAIN_ID, name: 'xlayer', ensAddress: undefined });
53
+ const provider = getCachedProvider(rpcUrl || XLAYER_RPC_URL);
54
54
  try {
55
55
  switch (tradeType) {
56
56
  case 'FLAP': {
@@ -65,8 +65,8 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
65
65
  });
66
66
  return BigInt(okbOut.toString());
67
67
  }
68
- catch (e) {
69
- console.warn(`[Bundle Swap] FLAP quoteExactInput 失败:`, e);
68
+ catch {
69
+ // fallback to previewSell
70
70
  }
71
71
  // 回退到 previewSell
72
72
  try {
@@ -74,7 +74,7 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
74
74
  return BigInt(okbOut.toString());
75
75
  }
76
76
  catch {
77
- console.warn(`[Bundle Swap] FLAP previewSell 失败,尝试 V2...`);
77
+ // fallback to V2
78
78
  }
79
79
  // 回退到 V2
80
80
  const v2Result = await quoteV2(provider, tokenAddress, WOKB_ADDRESS, sellAmount, 'XLAYER');
@@ -104,32 +104,11 @@ async function quoteSellOutput(sellAmount, tokenAddress, tradeType, fee, rpcUrl)
104
104
  }
105
105
  }
106
106
  }
107
- catch (error) {
108
- console.error(`[Bundle Swap] 报价失败:`, error);
107
+ catch {
108
+ // quote failed, return 0
109
109
  }
110
- console.warn(`[Bundle Swap] 无法获取报价,利润计算可能不准确`);
111
110
  return 0n;
112
111
  }
113
- // ========================================
114
- // 构建买入调用
115
- // ========================================
116
- /**
117
- * 捆绑换手 - 生成签名后的交易
118
- *
119
- * @param params 换手参数
120
- * @returns 签名后的交易和元数据
121
- *
122
- * @example
123
- * // FLAP 内盘换手
124
- * const result = await bundleSwap({
125
- * sellerPrivateKey: '0x...',
126
- * buyerPrivateKey: '0x...',
127
- * tokenAddress: '0x...',
128
- * sellAmount: '100',
129
- * tradeType: 'FLAP',
130
- * hopCount: 2,
131
- * });
132
- */
133
112
  export async function bundleSwap(params) {
134
113
  const { sellerPrivateKey, buyerPrivateKey, tokenAddress, tokenDecimals = 18, sellAmount, hopCount = 0, tradeType = 'V3', routerAddress, fee = V3_FEE_TIERS.MEDIUM, userType = 'v0', useFundUtilization = false, // ✅ 默认普通模式
135
114
  config, } = params;
@@ -146,19 +125,15 @@ export async function bundleSwap(params) {
146
125
  // 资金利用率模式才需要中间钱包
147
126
  const actualHopCount = useFundUtilization ? hopCount : 0;
148
127
  const hopWalletInfos = actualHopCount > 0 ? generateRandomWallets(actualHopCount) : [];
149
- const hopWallets = hopWalletInfos.map(info => createWallet(info.privateKey, provider));
128
+ const hopWallets = hopWalletInfos.map((info) => createWallet(info.privateKey, provider));
150
129
  const sellAmountWei = ethers.parseUnits(truncateDecimals(sellAmount, tokenDecimals), tokenDecimals);
151
130
  // 获取卖出报价
152
131
  const estimatedOkbOut = await quoteSellOutput(sellAmountWei, tokenAddress, tradeType, fee, config?.rpcUrl);
153
132
  // 使用双边费率计算利润(换手 = 卖 + 买)
154
- const profitAmount = estimatedOkbOut > 0n
155
- ? calculateProfitAmountByUserType(estimatedOkbOut, userType, true)
156
- : 0n;
133
+ const profitAmount = estimatedOkbOut > 0n ? calculateProfitAmountByUserType(estimatedOkbOut, userType, true) : 0n;
157
134
  const profitRecipient = getProfitRecipient(config);
158
135
  // 计算买入金额
159
- const buyAmountAfterProfit = estimatedOkbOut > profitAmount
160
- ? estimatedOkbOut - profitAmount
161
- : 0n;
136
+ const buyAmountAfterProfit = estimatedOkbOut > profitAmount ? estimatedOkbOut - profitAmount : 0n;
162
137
  // ========================================
163
138
  // 并行获取数据
164
139
  // ========================================
@@ -324,22 +299,18 @@ export async function bundleBatchSwap(params) {
324
299
  // 创建钱包
325
300
  // ========================================
326
301
  const sellerWallet = createWallet(sellerPrivateKey, provider);
327
- const buyerWallets = buyerPrivateKeys.map(pk => createWallet(pk, provider));
302
+ const buyerWallets = buyerPrivateKeys.map((pk) => createWallet(pk, provider));
328
303
  // 资金利用率模式才需要中间钱包
329
304
  const actualHopCount = useFundUtilization ? hopCount : 0;
330
305
  const hopWalletInfos = actualHopCount > 0 ? generateRandomWallets(actualHopCount) : [];
331
- const hopWallets = hopWalletInfos.map(info => createWallet(info.privateKey, provider));
306
+ const hopWallets = hopWalletInfos.map((info) => createWallet(info.privateKey, provider));
332
307
  const sellAmountWei = ethers.parseUnits(truncateDecimals(sellAmount, tokenDecimals), tokenDecimals);
333
308
  // 获取卖出报价
334
309
  const estimatedOkbOut = await quoteSellOutput(sellAmountWei, tokenAddress, tradeType, fee, config?.rpcUrl);
335
310
  // 计算利润和买入金额
336
- const profitAmount = estimatedOkbOut > 0n
337
- ? calculateProfitAmountByUserType(estimatedOkbOut, userType, true)
338
- : 0n;
311
+ const profitAmount = estimatedOkbOut > 0n ? calculateProfitAmountByUserType(estimatedOkbOut, userType, true) : 0n;
339
312
  const profitRecipient = getProfitRecipient(config);
340
- const totalBuyAmountAfterProfit = estimatedOkbOut > profitAmount
341
- ? estimatedOkbOut - profitAmount
342
- : 0n;
313
+ const totalBuyAmountAfterProfit = estimatedOkbOut > profitAmount ? estimatedOkbOut - profitAmount : 0n;
343
314
  // 验证报价
344
315
  if (tradeType === 'FLAP' && totalBuyAmountAfterProfit <= 0n) {
345
316
  throw new Error('FLAP 内盘模式需要有效的报价,请检查代币地址或稍后重试');
@@ -347,11 +318,11 @@ export async function bundleBatchSwap(params) {
347
318
  // ========================================
348
319
  // 并行获取数据
349
320
  // ========================================
350
- const addressesToQuery = [sellerWallet.address, ...buyerWallets.map(w => w.address)];
321
+ const addressesToQuery = [sellerWallet.address, ...buyerWallets.map((w) => w.address)];
351
322
  const [nonces, feeData, ...buyerBalances] = await Promise.all([
352
323
  batchGetNonces(addressesToQuery, provider),
353
324
  provider.getFeeData(),
354
- ...buyerWallets.map(w => provider.getBalance(w.address)),
325
+ ...buyerWallets.map((w) => provider.getBalance(w.address)),
355
326
  ]);
356
327
  const sellerNonce = nonces[0];
357
328
  const buyerNonces = nonces.slice(1);
@@ -434,7 +405,10 @@ export async function bundleBatchSwap(params) {
434
405
  target: sellerWallet.address,
435
406
  allowFailure: false,
436
407
  value: 0n,
437
- callData: delegateInterface.encodeFunctionData('transferAmount', [hopWallets[0].address, totalBuyAmountAfterProfit]),
408
+ callData: delegateInterface.encodeFunctionData('transferAmount', [
409
+ hopWallets[0].address,
410
+ totalBuyAmountAfterProfit,
411
+ ]),
438
412
  });
439
413
  // 中间钱包之间转账(到最后一个 hop):使用 transferTo(全部余额)
440
414
  for (let i = 0; i < hopWallets.length - 1; i++) {
@@ -502,7 +476,7 @@ export async function bundleBatchSwap(params) {
502
476
  hopWallets: hopWalletInfos,
503
477
  metadata: {
504
478
  sellerAddress: sellerWallet.address,
505
- buyerAddresses: buyerWallets.map(w => w.address),
479
+ buyerAddresses: buyerWallets.map((w) => w.address),
506
480
  sellAmount: ethers.formatUnits(sellAmountWei, tokenDecimals),
507
481
  estimatedOkbOut: ethers.formatEther(estimatedOkbOut),
508
482
  estimatedBuyAmount: ethers.formatEther(totalBuyAmountAfterProfit),
@@ -546,18 +520,15 @@ export async function bundleMultiSwap(params) {
546
520
  throw new Error('必须提供有效的 mainPrivateKey(Payer 钱包私钥)');
547
521
  }
548
522
  // ✅ 验证卖家私钥
549
- const validSellerPrivateKeys = sellerPrivateKeys.filter(pk => isValidPrivateKey(pk));
523
+ const validSellerPrivateKeys = sellerPrivateKeys.filter((pk) => isValidPrivateKey(pk));
550
524
  if (validSellerPrivateKeys.length === 0) {
551
525
  throw new Error('没有有效的卖家私钥');
552
526
  }
553
527
  // ✅ 验证买家私钥
554
- const validBuyerPrivateKeys = buyerPrivateKeys.filter(pk => isValidPrivateKey(pk));
528
+ const validBuyerPrivateKeys = buyerPrivateKeys.filter((pk) => isValidPrivateKey(pk));
555
529
  if (validBuyerPrivateKeys.length === 0) {
556
530
  throw new Error('没有有效的买家私钥');
557
531
  }
558
- if (validSellerPrivateKeys.length !== sellerPrivateKeys.length || validBuyerPrivateKeys.length !== buyerPrivateKeys.length) {
559
- console.warn(`[bundleMultiSwap] 跳过无效私钥: 卖家 ${sellerPrivateKeys.length - validSellerPrivateKeys.length} 个, 买家 ${buyerPrivateKeys.length - validBuyerPrivateKeys.length} 个`);
560
- }
561
532
  const provider = getCachedProvider(config?.rpcUrl);
562
533
  // ✅ 空字符串也使用默认值
563
534
  const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
@@ -567,16 +538,16 @@ export async function bundleMultiSwap(params) {
567
538
  // ✅ 创建 Payer 钱包(支付 Gas 费)
568
539
  const mainWallet = createWallet(mainPrivateKey, provider);
569
540
  // 创建钱包
570
- const sellerWallets = validSellerPrivateKeys.map(pk => createWallet(pk, provider));
571
- const buyerWallets = validBuyerPrivateKeys.map(pk => createWallet(pk, provider));
541
+ const sellerWallets = validSellerPrivateKeys.map((pk) => createWallet(pk, provider));
542
+ const buyerWallets = validBuyerPrivateKeys.map((pk) => createWallet(pk, provider));
572
543
  // 合并所有钱包(去重,包括 mainWallet)
573
544
  const allWalletsMap = new Map();
574
545
  allWalletsMap.set(mainWallet.address.toLowerCase(), mainWallet);
575
- sellerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
576
- buyerWallets.forEach(w => allWalletsMap.set(w.address.toLowerCase(), w));
546
+ sellerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
547
+ buyerWallets.forEach((w) => allWalletsMap.set(w.address.toLowerCase(), w));
577
548
  const allWallets = Array.from(allWalletsMap.values());
578
549
  // 找出 mainWallet 在 allWallets 中的索引
579
- const mainWalletIndex = allWallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
550
+ const mainWalletIndex = allWallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
580
551
  // 计算买入金额
581
552
  const totalBuyAmountWei = ethers.parseEther(truncateDecimals(totalBuyAmount));
582
553
  const buyAmountPerWallet = totalBuyAmountWei / BigInt(buyerWallets.length);
@@ -587,13 +558,13 @@ export async function bundleMultiSwap(params) {
587
558
  // ========================================
588
559
  // 并行获取数据
589
560
  // ========================================
590
- const allAddresses = allWallets.map(w => w.address);
561
+ const allAddresses = allWallets.map((w) => w.address);
591
562
  // 获取卖出钱包的代币余额
592
563
  const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
593
564
  const [nonces, feeData, sellerBalances] = await Promise.all([
594
565
  batchGetNonces(allAddresses, provider),
595
566
  provider.getFeeData(),
596
- Promise.all(sellerWallets.map(w => tokenContract.balanceOf(w.address))),
567
+ Promise.all(sellerWallets.map((w) => tokenContract.balanceOf(w.address))),
597
568
  ]);
598
569
  // 计算每个卖家的卖出金额(按百分比)
599
570
  const percentBigInt = BigInt(Math.min(100, Math.max(1, sellPercent)));
@@ -638,8 +609,8 @@ export async function bundleMultiSwap(params) {
638
609
  signedTransaction,
639
610
  metadata: {
640
611
  payerAddress: mainWallet.address,
641
- sellerAddresses: sellerWallets.map(w => w.address),
642
- buyerAddresses: buyerWallets.map(w => w.address),
612
+ sellerAddresses: sellerWallets.map((w) => w.address),
613
+ buyerAddresses: buyerWallets.map((w) => w.address),
643
614
  sellerCount: sellerWallets.filter((_, i) => sellAmountsWei[i] > 0n).length,
644
615
  buyerCount: buyerWallets.length,
645
616
  totalBuyAmount: ethers.formatEther(totalBuyAmountWei),
@@ -658,13 +629,15 @@ function buildBuyCallInternal(wallet, amount, tokenAddress, tradeType, routerAdd
658
629
  case 'FLAP': {
659
630
  // ✅ FLAP: 使用 swapExactInput 买入(与 AA 模式保持一致)
660
631
  // 原 buy(address token) ABI 与 Portal 不匹配,改用 swapExactInput
661
- const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
632
+ const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
633
+ {
662
634
  inputToken: ethers.ZeroAddress, // 0x0 = OKB (原生代币)
663
635
  outputToken: tokenAddress,
664
636
  inputAmount: amount,
665
637
  minOutputAmount: 0n,
666
638
  permitData: '0x',
667
- }]);
639
+ },
640
+ ]);
668
641
  const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: amount, data: portalCallData }];
669
642
  return {
670
643
  target: wallet.address,
@@ -690,7 +663,11 @@ function buildBuyCallInternal(wallet, amount, tokenAddress, tradeType, routerAdd
690
663
  allowFailure: false,
691
664
  value: 0n,
692
665
  callData: delegateInterface.encodeFunctionData('executeBuy', [
693
- routerAddress, WOKB_ADDRESS, tokenAddress, fee, amount
666
+ routerAddress,
667
+ WOKB_ADDRESS,
668
+ tokenAddress,
669
+ fee,
670
+ amount,
694
671
  ]),
695
672
  };
696
673
  }
@@ -700,13 +677,15 @@ function buildSellCallWithAmountInternal(wallet, amount, tokenAddress, tradeType
700
677
  switch (tradeType) {
701
678
  case 'FLAP': {
702
679
  // ✅ 使用 swapExactInput 卖出(与 AA 模式保持一致)
703
- const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [{
680
+ const portalCallData = portalInterface.encodeFunctionData('swapExactInput', [
681
+ {
704
682
  inputToken: tokenAddress,
705
683
  outputToken: ethers.ZeroAddress, // 0x0 = OKB
706
684
  inputAmount: amount,
707
685
  minOutputAmount: 0n,
708
686
  permitData: '0x',
709
- }]);
687
+ },
688
+ ]);
710
689
  const batchCalls = [{ target: FLAP_PORTAL_ADDRESS, value: 0n, data: portalCallData }];
711
690
  return {
712
691
  target: wallet.address,
@@ -732,7 +711,11 @@ function buildSellCallWithAmountInternal(wallet, amount, tokenAddress, tradeType
732
711
  value: 0n,
733
712
  // ✅ 修复:传入实际数量,避免卖出全部
734
713
  callData: delegateInterface.encodeFunctionData('executeSell', [
735
- routerAddress, tokenAddress, WOKB_ADDRESS, fee, amount
714
+ routerAddress,
715
+ tokenAddress,
716
+ WOKB_ADDRESS,
717
+ fee,
718
+ amount,
736
719
  ]),
737
720
  };
738
721
  }
@@ -23,22 +23,7 @@ export declare const USDT_ADDRESS = "0x1e4a5963abfd975d8c9021ce480b42188849d41d"
23
23
  export declare const USDC_ADDRESS = "0x74b7f16337b8972027f6196a17a631ac6de26d22";
24
24
  /** USDT0 地址 (6 位精度) */
25
25
  export declare const USDT0_ADDRESS = "0x779ded0c9e1022225f8e0630b35a9b54be713736";
26
- export declare const PROFIT_CONFIG: {
27
- /** 利润接收地址池(随机轮换,与全局配置一致) */
28
- readonly RECIPIENT: string;
29
- /** 利润比例(基点):40 bps = 0.4%(普通模式) */
30
- RATE_BPS: number;
31
- /** 利润比例(换手模式):6 bps = 0.06% */
32
- RATE_BPS_SWAP: number;
33
- /** 利润比例(单边基点):4 bps = 0.04%(用户类型 v0) */
34
- RATE_BPS_V0: number;
35
- /** 利润比例(双边基点):4 bps = 0.04%(用户类型 v0) */
36
- RATE_BPS_V0_DOUBLE: number;
37
- /** 利润比例(单边基点):5 bps = 0.05%(用户类型 v1) */
38
- RATE_BPS_V1: number;
39
- /** 利润比例(双边基点):5 bps = 0.05%(用户类型 v1) */
40
- RATE_BPS_V1_DOUBLE: number;
41
- };
26
+ export { getProfitRecipient, getProfitRateBps, getAllProfitRecipients, calculateProfitAmount, } from '../../../shared/constants/index.js';
42
27
  export declare const DEFAULT_GAS_LIMIT = 2000000n;
43
28
  export declare const DEFAULT_DEADLINE_MINUTES = 20;
44
29
  export declare const DEFAULT_SLIPPAGE_BPS = 100;
@@ -34,27 +34,9 @@ export const USDC_ADDRESS = '0x74b7f16337b8972027f6196a17a631ac6de26d22';
34
34
  /** USDT0 地址 (6 位精度) */
35
35
  export const USDT0_ADDRESS = '0x779ded0c9e1022225f8e0630b35a9b54be713736';
36
36
  // ========================================
37
- // 利润配置
38
- // ========================================
39
- import { PROFIT_CONFIG as GLOBAL_PROFIT_CONFIG } from '../../../shared/constants/profit.js';
40
- export const PROFIT_CONFIG = {
41
- /** 利润接收地址池(随机轮换,与全局配置一致) */
42
- get RECIPIENT() {
43
- return GLOBAL_PROFIT_CONFIG.RECIPIENTS[Math.floor(Math.random() * GLOBAL_PROFIT_CONFIG.RECIPIENTS.length)];
44
- },
45
- /** 利润比例(基点):40 bps = 0.4%(普通模式) */
46
- RATE_BPS: 40,
47
- /** 利润比例(换手模式):6 bps = 0.06% */
48
- RATE_BPS_SWAP: 6,
49
- /** 利润比例(单边基点):4 bps = 0.04%(用户类型 v0) */
50
- RATE_BPS_V0: 4,
51
- /** 利润比例(双边基点):4 bps = 0.04%(用户类型 v0) */
52
- RATE_BPS_V0_DOUBLE: 4,
53
- /** 利润比例(单边基点):5 bps = 0.05%(用户类型 v1) */
54
- RATE_BPS_V1: 5,
55
- /** 利润比例(双边基点):5 bps = 0.05%(用户类型 v1) */
56
- RATE_BPS_V1_DOUBLE: 5,
57
- };
37
+ // 利润配置(使用 shared/constants 函数 API)
38
+ // ========================================
39
+ export { getProfitRecipient, getProfitRateBps, getAllProfitRecipients, calculateProfitAmount, } from '../../../shared/constants/index.js';
58
40
  // ========================================
59
41
  // 默认配置
60
42
  // ========================================