four-flap-meme-sdk 2.2.8 → 2.2.11

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