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
@@ -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
  // ========================================