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
@@ -0,0 +1,515 @@
1
+ import { ethers, Wallet, Contract, Interface } from 'ethers';
2
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../utils/bundle-helpers.js';
3
+ import { ADDRESSES, ZERO_ADDRESS } from '../../shared/constants/index.js';
4
+ import { MULTICALL3_ABI, ERC20_ABI } from '../../abis/common.js';
5
+ import { FourClient } from '../../shared/clients/four.js';
6
+ import { getBundleErrorMessage } from '../errors.js';
7
+ import { getTxType, getGasPriceConfig, shouldExtractProfit, calculateProfit, getProfitRecipient, getBribeAmount, } from '../config-helpers.js';
8
+ import { createSignProvider, signBribeTransaction } from '../sign-context-helpers.js';
9
+ import { trySell } from '../../contracts/tm.js';
10
+ import { createChainContext, createWallets, loginFourClient, resolveTokenImage } from './core-helpers.js';
11
+ import { TokenManagerHelper3 as Helper3Abi } from '../../abis/contracts/index.js';
12
+ // ✅ 常量
13
+ const MULTICALL3_ADDRESS = ADDRESSES.BSC.Multicall3;
14
+ // ✅ TM2 扩展 ABI(包含创建代币方法和事件)
15
+ import { TM2_ABI as _TM2_ABI } from '../../abis/common.js';
16
+ const TM2_ABI = [
17
+ ..._TM2_ABI,
18
+ 'function createToken(bytes args, bytes signature) payable',
19
+ 'event TokenCreate(address indexed creator, address indexed token, uint256 timestamp)',
20
+ ];
21
+ const PLATFORM_CREATE_FEE = ethers.parseEther('0.01');
22
+ // ✅ 本地 getGasLimit(FourAnyConfig 支持 bigint gasLimit)
23
+ function getGasLimit(config, defaultGas = 800000) {
24
+ if (config.gasLimit !== undefined) {
25
+ return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
26
+ }
27
+ const multiplier = config.gasLimitMultiplier ?? 1.0;
28
+ return BigInt(Math.ceil(defaultGas * multiplier));
29
+ }
30
+ export async function createTokenWithBundleBuyMerkle(params) {
31
+ const { privateKeys, buyAmounts, tokenInfo, config } = params;
32
+ // ⚠️ 限制: 只支持创建者买入,不支持其他钱包
33
+ if (privateKeys.length !== 1) {
34
+ throw new Error('只支持创建者买入,privateKeys 只能有1个元素');
35
+ }
36
+ if (buyAmounts.length !== 1) {
37
+ throw new Error('只支持买入一次,buyAmounts 只能有1个元素');
38
+ }
39
+ const creatorKey = privateKeys[0];
40
+ // ✅ 使用公共 BSC RPC 节点(支持浏览器 CORS)
41
+ // 48.club 的 RPC 不支持浏览器跨域访问,所以使用公共节点进行余额查询和 gas 估算
42
+ const rpcUrl = config.rpcUrl || 'https://bsc-dataseed.binance.org';
43
+ const { provider, chainId } = createChainContext(rpcUrl);
44
+ const devWallet = new Wallet(creatorKey, provider);
45
+ const fourClient = new FourClient({ baseUrl: config.fourApiUrl });
46
+ const accessToken = await loginFourClient(devWallet, fourClient);
47
+ const imgUrl = await resolveTokenImage(fourClient, tokenInfo, accessToken);
48
+ // ✅ 兼容:历史调用可能把 Dev 首买金额塞在 buyAmounts[0],而不是 tokenInfo.preSale
49
+ // Four 官方 API/链上 createArg 使用 preSale 表达“创建者预购金额”
50
+ const effectivePreSaleStr = tokenInfo.preSale && String(tokenInfo.preSale).trim().length > 0
51
+ ? String(tokenInfo.preSale)
52
+ : String(buyAmounts[0] ?? '0');
53
+ const createResp = await fourClient.createToken(accessToken, {
54
+ name: tokenInfo.name,
55
+ shortName: tokenInfo.symbol,
56
+ desc: tokenInfo.description,
57
+ imgUrl,
58
+ launchTime: Date.now(),
59
+ label: tokenInfo.label || 'Meme',
60
+ webUrl: tokenInfo.webUrl,
61
+ twitterUrl: tokenInfo.twitterUrl,
62
+ telegramUrl: tokenInfo.telegramUrl,
63
+ preSale: effectivePreSaleStr || '0',
64
+ onlyMPC: false,
65
+ // ✅ AntiSniperFeeMode(开盘高税模式)
66
+ ...(tokenInfo.feePlan ? { feePlan: true } : {}),
67
+ // ✅ 税币配置(Tax Token, creatorType=5)
68
+ ...(tokenInfo.tokenTaxInfo ? { tokenTaxInfo: tokenInfo.tokenTaxInfo } : {}),
69
+ lpTradingFee: 0.0025,
70
+ symbol: 'BNB',
71
+ totalSupply: 1000000000,
72
+ raisedAmount: 24,
73
+ saleRate: 0.8,
74
+ reserveRate: 0,
75
+ funGroup: false,
76
+ clickFun: false,
77
+ });
78
+ const gasPrice = await getOptimizedGasPrice(provider, getGasPriceConfig(config));
79
+ const nonceManager = new NonceManager(provider);
80
+ const txType = getTxType(config);
81
+ const signedTxs = [];
82
+ const tmCreateAddr = ADDRESSES.BSC.TokenManagerOriginal;
83
+ // ✅ 单笔交易: 和 Four.meme 官网一样
84
+ // 计算利润
85
+ const extractProfit = shouldExtractProfit();
86
+ // ✅ 对 create 流程来说,“买入金额”就是 preSale(创建者预购)
87
+ const originalBuyAmount = ethers.parseEther(effectivePreSaleStr || '0');
88
+ const profitAmount = extractProfit ? calculateProfit(originalBuyAmount).profit : 0n;
89
+ // ✅ 获取贿赂金额
90
+ const bribeAmount = getBribeAmount(config);
91
+ const needBribeTx = bribeAmount > 0n;
92
+ const b0AmountWei = ethers.parseEther(params.b0Amount ?? '0');
93
+ const preSaleWei = effectivePreSaleStr ? ethers.parseEther(effectivePreSaleStr) : 0n;
94
+ // ✅ 关键修复:
95
+ // createToken 的预购金额由 createArg.preSale 决定;因此这里只需要支付:创建费 + b0Amount + preSale
96
+ // 不要把“其它买入金额”额外塞进 msg.value,否则会被合约退回,造成“看起来没买到”的误解。
97
+ const valueWei = PLATFORM_CREATE_FEE + b0AmountWei + preSaleWei;
98
+ const tmCreate = new ethers.Contract(tmCreateAddr, TM2_ABI, devWallet);
99
+ const createTxUnsigned = await tmCreate.createToken.populateTransaction(createResp.createArg, createResp.signature, {
100
+ value: valueWei,
101
+ });
102
+ // ✅ 贿赂交易放在首位(由 devWallet 发送)
103
+ let bribeNonce;
104
+ if (needBribeTx) {
105
+ bribeNonce = await nonceManager.getNextNonce(devWallet);
106
+ signedTxs.push(await signBribeTransaction(devWallet, bribeAmount, bribeNonce, gasPrice, chainId, txType));
107
+ }
108
+ const createTxRequest = {
109
+ ...createTxUnsigned,
110
+ from: devWallet.address,
111
+ nonce: await nonceManager.getNextNonce(devWallet),
112
+ gasLimit: getGasLimit(config, 1500000),
113
+ gasPrice,
114
+ chainId,
115
+ type: getTxType(config),
116
+ value: valueWei,
117
+ };
118
+ signedTxs.push(await devWallet.signTransaction(createTxRequest));
119
+ // ✅ 利润多跳转账(强制 2 跳中转)
120
+ let profitHopWallets;
121
+ if (extractProfit && profitAmount > 0n) {
122
+ const profitNonce = await nonceManager.getNextNonce(devWallet);
123
+ const profitHopResult = await buildProfitHopTransactions({
124
+ provider,
125
+ payerWallet: devWallet,
126
+ profitAmount,
127
+ profitRecipient: getProfitRecipient(),
128
+ hopCount: PROFIT_HOP_COUNT,
129
+ gasPrice,
130
+ chainId,
131
+ txType,
132
+ startNonce: profitNonce,
133
+ });
134
+ signedTxs.push(...profitHopResult.signedTransactions);
135
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
136
+ }
137
+ nonceManager.clearTemp();
138
+ // ⚠️ 只返回签名交易,不提交
139
+ // 构建元数据
140
+ const metadata = extractProfit && profitAmount > 0n
141
+ ? {
142
+ totalBuyAmount: ethers.formatEther(originalBuyAmount),
143
+ profitAmount: ethers.formatEther(profitAmount),
144
+ profitRecipient: getProfitRecipient(),
145
+ buyerCount: 1,
146
+ }
147
+ : undefined;
148
+ return {
149
+ signedTransactions: signedTxs,
150
+ tokenAddress: ZERO_ADDRESS, // ⚠️ 占位符,实际地址需要等交易确认后从事件解析
151
+ profitHopWallets, // ✅ 返回利润多跳钱包
152
+ metadata,
153
+ };
154
+ }
155
+ export async function batchBuyWithBundleMerkle(params) {
156
+ const { privateKeys, buyAmounts, tokenAddress, config } = params;
157
+ if (privateKeys.length === 0 || buyAmounts.length !== privateKeys.length) {
158
+ throw new Error(getBundleErrorMessage('KEY_AMOUNT_MISMATCH'));
159
+ }
160
+ const { provider, chainId } = createChainContext(config.rpcUrl);
161
+ const txType = getTxType(config);
162
+ const buyers = createWallets(privateKeys, provider);
163
+ // ✅ 优化:并行初始化 nonceManager 和获取 gasPrice
164
+ const [nonceManager, gasPrice] = await Promise.all([
165
+ Promise.resolve(new NonceManager(provider)),
166
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
167
+ ]);
168
+ const buyFlow = await executeBuyFlow({
169
+ wallets: buyers,
170
+ buyAmounts,
171
+ tokenAddress,
172
+ config,
173
+ provider,
174
+ nonceManager,
175
+ contractAddress: ADDRESSES.BSC.TokenManagerOriginal,
176
+ gasPrice,
177
+ chainId,
178
+ profitMode: { type: 'aggregated', payer: buyers[0] },
179
+ txType,
180
+ });
181
+ nonceManager.clearTemp();
182
+ return {
183
+ signedTransactions: buyFlow.signedTxs,
184
+ profitHopWallets: buyFlow.profitHopWallets, // ✅ 返回利润多跳钱包
185
+ metadata: buyFlow.metadata,
186
+ };
187
+ }
188
+ export async function batchSellWithBundleMerkle(params) {
189
+ const { privateKeys, sellAmounts, tokenAddress, minOutputAmounts, config } = params;
190
+ if (privateKeys.length === 0 || sellAmounts.length !== privateKeys.length) {
191
+ throw new Error(getBundleErrorMessage('SELL_KEY_AMOUNT_MISMATCH'));
192
+ }
193
+ const { provider, chainId } = createChainContext(config.rpcUrl);
194
+ const txType = getTxType(config);
195
+ const sellers = createWallets(privateKeys, provider);
196
+ // ✅ 优化:并行初始化 nonceManager 和获取 gasPrice
197
+ const [nonceManager, gasPrice] = await Promise.all([
198
+ Promise.resolve(new NonceManager(provider)),
199
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
200
+ ]);
201
+ const sellFlow = await executeSellFlow({
202
+ wallets: sellers,
203
+ sellAmounts,
204
+ tokenAddress,
205
+ minOutputAmounts,
206
+ config,
207
+ provider,
208
+ nonceManager,
209
+ contractAddress: ADDRESSES.BSC.TokenManagerOriginal,
210
+ gasPrice,
211
+ chainId,
212
+ rpcUrl: config.rpcUrl,
213
+ txType,
214
+ });
215
+ nonceManager.clearTemp();
216
+ return {
217
+ signedTransactions: sellFlow.signedTxs,
218
+ profitHopWallets: sellFlow.profitHopWallets, // ✅ 返回利润多跳钱包
219
+ };
220
+ }
221
+ async function executeBuyFlow(options) {
222
+ const { wallets, buyAmounts, tokenAddress, config, provider, nonceManager, contractAddress, gasPrice, chainId, profitMode, txType, } = options;
223
+ const extractProfit = shouldExtractProfit();
224
+ const analysis = analyzeBuyFunds(buyAmounts, extractProfit);
225
+ const finalGasLimit = getGasLimit(config);
226
+ // ✅ 获取贿赂金额
227
+ const bribeAmount = getBribeAmount(config);
228
+ const needBribeTx = bribeAmount > 0n;
229
+ const payer = profitMode.type === 'aggregated' ? (profitMode.payer ?? wallets[0]) : wallets[0];
230
+ // ✅ 贿赂交易放在首位
231
+ const signedTxs = [];
232
+ let bribeNonceOffset = 0;
233
+ if (needBribeTx) {
234
+ const bribeNonce = await nonceManager.getNextNonce(payer);
235
+ signedTxs.push(await signBribeTransaction(payer, bribeAmount, bribeNonce, gasPrice, chainId, txType));
236
+ bribeNonceOffset = 1; // payer 的买入交易 nonce 需要偏移
237
+ }
238
+ // ✅ 优化:并行执行 populateBuyTransactions 和批量获取 nonces(JSON-RPC 批量请求)
239
+ const [unsignedBuys, nonces] = await Promise.all([
240
+ populateBuyTransactions({
241
+ buyers: wallets,
242
+ contractAddress,
243
+ tokenAddress,
244
+ fundsList: analysis.fundsList,
245
+ }),
246
+ nonceManager.getNextNoncesForWallets(wallets), // ✅ 批量获取 nonce
247
+ ]);
248
+ // ✅ 调整 payer 的 nonce(如果有贿赂交易,需要偏移)
249
+ const payerIndex = wallets.findIndex((w) => w.address.toLowerCase() === payer.address.toLowerCase());
250
+ const adjustedNonces = nonces.map((n, i) => (i === payerIndex ? n + bribeNonceOffset : n));
251
+ // ✅ 并行签名所有买入交易
252
+ const signedBuys = await Promise.all(unsignedBuys.map((unsigned, index) => wallets[index].signTransaction({
253
+ ...unsigned,
254
+ from: wallets[index].address,
255
+ nonce: adjustedNonces[index],
256
+ gasLimit: finalGasLimit,
257
+ gasPrice,
258
+ chainId,
259
+ type: txType,
260
+ value: analysis.fundsList[index],
261
+ })));
262
+ signedTxs.push(...signedBuys);
263
+ // ✅ 利润多跳转账(强制 2 跳中转)
264
+ let profitHopWallets;
265
+ if (extractProfit && analysis.totalProfit > 0n && profitMode.type === 'aggregated') {
266
+ const profitNonce = await nonceManager.getNextNonce(payer);
267
+ const profitHopResult = await buildProfitHopTransactions({
268
+ provider,
269
+ payerWallet: payer,
270
+ profitAmount: analysis.totalProfit,
271
+ profitRecipient: getProfitRecipient(),
272
+ hopCount: PROFIT_HOP_COUNT,
273
+ gasPrice,
274
+ chainId,
275
+ txType,
276
+ startNonce: profitNonce,
277
+ });
278
+ signedTxs.push(...profitHopResult.signedTransactions);
279
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
280
+ }
281
+ const metadata = buildBuyMetadata(extractProfit, analysis.totalBuyAmount, analysis.totalProfit, wallets.length);
282
+ return { signedTxs, metadata, profitHopWallets }; // ✅ 返回利润多跳钱包
283
+ }
284
+ async function executeSellFlow(options) {
285
+ const { wallets, sellAmounts, tokenAddress, minOutputAmounts, config, provider, nonceManager, contractAddress, gasPrice, chainId, rpcUrl, txType, } = options;
286
+ const amountsWei = sellAmounts.map((amount) => ethers.parseUnits(amount, 18));
287
+ const finalGasLimit = getGasLimit(config);
288
+ const extractProfit = shouldExtractProfit();
289
+ // ✅ 获取贿赂金额
290
+ const bribeAmount = getBribeAmount(config);
291
+ const needBribeTx = bribeAmount > 0n;
292
+ // ✅ 优化:并行执行 resolveSellOutputs、ensureSellerBalances 和批量获取 nonces(已移除授权检查)
293
+ const [sellOutputs, , nonces] = await Promise.all([
294
+ resolveSellOutputs({
295
+ minOutputAmounts,
296
+ sellers: wallets,
297
+ amountsWei,
298
+ rpcUrl,
299
+ tokenAddress,
300
+ }),
301
+ ensureSellerBalances({ provider, tokenAddress, sellers: wallets, amountsWei }),
302
+ nonceManager.getNextNoncesForWallets(wallets), // ✅ 批量获取 nonce(JSON-RPC 批量请求)
303
+ ]);
304
+ // ✅ 找出收益最多的钱包作为 payer(贿赂和利润都由它发送)
305
+ const { totalProfit, payer } = summarizeSellProfits(sellOutputs.quotedOutputs, wallets);
306
+ const payerWallet = payer ?? wallets[0];
307
+ const payerIndex = wallets.findIndex((w) => w.address.toLowerCase() === payerWallet.address.toLowerCase());
308
+ // ✅ 贿赂交易放在首位
309
+ const signedTxs = [];
310
+ let bribeNonceOffset = 0;
311
+ if (needBribeTx) {
312
+ const bribeNonce = nonces[payerIndex];
313
+ signedTxs.push(await signBribeTransaction(payerWallet, bribeAmount, bribeNonce, gasPrice, chainId, txType));
314
+ bribeNonceOffset = 1;
315
+ }
316
+ // ✅ 调整 payer 的 nonce(如果有贿赂交易,需要偏移)
317
+ const adjustedNonces = nonces.map((n, i) => (i === payerIndex ? n + bribeNonceOffset : n));
318
+ // ✅ 构建未签名交易
319
+ const unsignedSells = await populateSellTransactions({
320
+ sellers: wallets,
321
+ contractAddress,
322
+ tokenAddress,
323
+ amountsWei,
324
+ minOuts: sellOutputs.minOuts,
325
+ });
326
+ // ✅ 并行签名所有卖出交易
327
+ const signedSells = await Promise.all(unsignedSells.map((unsigned, index) => wallets[index].signTransaction({
328
+ ...unsigned,
329
+ from: wallets[index].address,
330
+ nonce: adjustedNonces[index],
331
+ gasLimit: finalGasLimit,
332
+ gasPrice,
333
+ chainId,
334
+ type: txType,
335
+ })));
336
+ signedTxs.push(...signedSells);
337
+ // ✅ 利润多跳转账(强制 2 跳中转)
338
+ const profitHopWallets = await appendAggregatedProfitTransfer({
339
+ extractProfit,
340
+ totalProfit,
341
+ payer: payerWallet,
342
+ nonceManager,
343
+ provider,
344
+ gasPrice,
345
+ chainId,
346
+ txType,
347
+ signedTxs,
348
+ baseNonce: adjustedNonces[payerIndex] + 1, // ✅ 传入基础 nonce
349
+ });
350
+ return { signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
351
+ }
352
+ function analyzeBuyFunds(buyAmounts, extractProfit) {
353
+ const fundsList = [];
354
+ const profitList = [];
355
+ let totalProfit = 0n;
356
+ let totalBuyAmount = 0n;
357
+ buyAmounts.forEach((amount) => {
358
+ const originalAmount = ethers.parseEther(amount);
359
+ totalBuyAmount += originalAmount;
360
+ if (extractProfit) {
361
+ const { remaining, profit } = calculateProfit(originalAmount);
362
+ fundsList.push(remaining);
363
+ profitList.push(profit);
364
+ totalProfit += profit;
365
+ }
366
+ else {
367
+ fundsList.push(originalAmount);
368
+ profitList.push(0n);
369
+ }
370
+ });
371
+ return { fundsList, profitList, totalProfit, totalBuyAmount };
372
+ }
373
+ async function populateBuyTransactions(params) {
374
+ const { buyers, contractAddress, tokenAddress, fundsList } = params;
375
+ const contracts = buyers.map((wallet) => new ethers.Contract(contractAddress, TM2_ABI, wallet));
376
+ return Promise.all(contracts.map((contract, index) => contract.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyers[index].address, fundsList[index], 0n, {
377
+ value: fundsList[index],
378
+ })));
379
+ }
380
+ function buildBuyMetadata(extractProfit, totalBuyAmount, totalProfit, buyerCount) {
381
+ if (!extractProfit || totalBuyAmount <= 0n || totalProfit <= 0n) {
382
+ return undefined;
383
+ }
384
+ return {
385
+ totalBuyAmount: ethers.formatEther(totalBuyAmount),
386
+ profitAmount: ethers.formatEther(totalProfit),
387
+ profitRecipient: getProfitRecipient(),
388
+ buyerCount,
389
+ };
390
+ }
391
+ /**
392
+ * ✅ 使用 Multicall3 批量获取卖出报价(单次 RPC)
393
+ * 比 Promise.all 更高效,N 个报价只需 1 次网络请求
394
+ */
395
+ async function resolveSellOutputs(params) {
396
+ const { minOutputAmounts, sellers, amountsWei, rpcUrl, tokenAddress } = params;
397
+ // 如果已提供 minOutputAmounts,直接使用,跳过报价查询
398
+ if (minOutputAmounts && minOutputAmounts.length === sellers.length) {
399
+ const minOuts = minOutputAmounts.map((m) => (typeof m === 'string' ? ethers.parseEther(m) : m));
400
+ const quotedOutputs = minOuts.map((value) => (value * 100n) / 95n);
401
+ return { minOuts, quotedOutputs };
402
+ }
403
+ // 如果只有 1 个,直接调用(避免 multicall 开销)
404
+ if (amountsWei.length === 1) {
405
+ try {
406
+ const result = await trySell('BSC', rpcUrl, tokenAddress, amountsWei[0]);
407
+ const quotedOutputs = [result.funds];
408
+ // ✅ 已移除滑点保护:minOuts 固定为 0
409
+ const minOuts = [0n];
410
+ return { minOuts, quotedOutputs };
411
+ }
412
+ catch {
413
+ return { minOuts: [0n], quotedOutputs: [0n] };
414
+ }
415
+ }
416
+ // ✅ 使用 Multicall3 批量获取报价
417
+ const provider = createSignProvider(rpcUrl, 56, 'BSC');
418
+ const helper3Address = ADDRESSES.BSC.TokenManagerHelper3;
419
+ const helper3Iface = new Interface(Helper3Abi);
420
+ const multicall = new Contract(MULTICALL3_ADDRESS, MULTICALL3_ABI, provider);
421
+ // 构建批量调用
422
+ const calls = amountsWei.map((amount) => ({
423
+ target: helper3Address,
424
+ allowFailure: true, // 允许单个失败
425
+ callData: helper3Iface.encodeFunctionData('trySell', [tokenAddress, amount]),
426
+ }));
427
+ try {
428
+ const results = await multicall.aggregate3.staticCall(calls);
429
+ const quotedOutputs = results.map((r) => {
430
+ if (r.success && r.returnData && r.returnData !== '0x') {
431
+ try {
432
+ const decoded = helper3Iface.decodeFunctionResult('trySell', r.returnData);
433
+ // trySell 返回 (tokenManager, quote, funds, fee),我们需要 funds
434
+ return BigInt(decoded.funds);
435
+ }
436
+ catch {
437
+ return 0n;
438
+ }
439
+ }
440
+ return 0n;
441
+ });
442
+ // ✅ 已移除滑点保护:minOuts 固定为 0
443
+ const minOuts = quotedOutputs.map(() => 0n);
444
+ return { minOuts, quotedOutputs };
445
+ }
446
+ catch {
447
+ // Multicall 失败,回退到并行调用
448
+ const quotedOutputs = await Promise.all(amountsWei.map(async (amount) => {
449
+ try {
450
+ const result = await trySell('BSC', rpcUrl, tokenAddress, amount);
451
+ return result.funds;
452
+ }
453
+ catch {
454
+ return 0n;
455
+ }
456
+ }));
457
+ // ✅ 已移除滑点保护:minOuts 固定为 0
458
+ const minOuts = quotedOutputs.map(() => 0n);
459
+ return { minOuts, quotedOutputs };
460
+ }
461
+ }
462
+ async function ensureSellerBalances(params) {
463
+ const { provider, tokenAddress, sellers, amountsWei } = params;
464
+ const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
465
+ const balances = await Promise.all(sellers.map((wallet) => tokenContract.balanceOf(wallet.address)));
466
+ for (let i = 0; i < sellers.length; i++) {
467
+ if (balances[i] < amountsWei[i]) {
468
+ throw new Error(`钱包 ${i} 代币余额不足:需要 ${ethers.formatUnits(amountsWei[i], 18)},实际 ${ethers.formatUnits(balances[i], 18)}`);
469
+ }
470
+ }
471
+ }
472
+ // ✅ 已移除 ensureSellAllowances(前端负责确保授权)
473
+ async function populateSellTransactions(params) {
474
+ const { sellers, contractAddress, tokenAddress, amountsWei, minOuts } = params;
475
+ const contracts = sellers.map((wallet) => new ethers.Contract(contractAddress, TM2_ABI, wallet));
476
+ return Promise.all(contracts.map((contract, index) => contract.sellToken.populateTransaction(0n, tokenAddress, amountsWei[index], minOuts[index])));
477
+ }
478
+ function summarizeSellProfits(quotedOutputs, sellers) {
479
+ let totalProfit = 0n;
480
+ let maxRevenue = 0n;
481
+ let payer;
482
+ quotedOutputs.forEach((output, index) => {
483
+ if (output <= 0n) {
484
+ return;
485
+ }
486
+ const { profit } = calculateProfit(output);
487
+ totalProfit += profit;
488
+ if (output > maxRevenue) {
489
+ maxRevenue = output;
490
+ payer = sellers[index];
491
+ }
492
+ });
493
+ return { totalProfit, payer };
494
+ }
495
+ async function appendAggregatedProfitTransfer(params) {
496
+ const { extractProfit, totalProfit, payer, nonceManager, provider, gasPrice, chainId, txType, signedTxs, baseNonce } = params;
497
+ if (!extractProfit || totalProfit <= 0n || !payer) {
498
+ return undefined;
499
+ }
500
+ // ✅ 利润多跳转账(强制 2 跳中转)
501
+ const profitNonce = baseNonce ?? (await nonceManager.getNextNonce(payer));
502
+ const profitHopResult = await buildProfitHopTransactions({
503
+ provider,
504
+ payerWallet: payer,
505
+ profitAmount: totalProfit,
506
+ profitRecipient: getProfitRecipient(),
507
+ hopCount: PROFIT_HOP_COUNT,
508
+ gasPrice,
509
+ chainId,
510
+ txType,
511
+ startNonce: profitNonce,
512
+ });
513
+ signedTxs.push(...profitHopResult.signedTransactions);
514
+ return profitHopResult.hopWallets; // ✅ 返回利润多跳钱包
515
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * PancakeSwap 官方 Router 交易模块
3
+ *
4
+ * ✅ 使用官方 PancakeSwap V2/V3 Router(非代理合约)
5
+ * - V2 Router: 0x10ED43C718714eb63d5aA57B78B54704E256024E
6
+ * - V3 Router: 0x13f4EA83D0bd40E75C8222255bc855a974568Dd4
7
+ * - V3 Quoter: 0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997
8
+ */
9
+ import type { FourPancakeProxyBatchBuySignParams, FourPancakeProxyBatchBuyResult, FourPancakeProxyBatchSellSignParams, FourPancakeProxyBatchSellResult, FourPancakeProxyApprovalParams, FourPancakeProxyApprovalBatchParams, FourPancakeProxyApprovalBatchResult } from './types.js';
10
+ /**
11
+ * ✅ 授权代币给 PancakeSwap Router(根据 routeType 选择 V2/V3)
12
+ */
13
+ export declare function approveFourPancakeProxy(params: FourPancakeProxyApprovalParams): Promise<{
14
+ txHash: string;
15
+ approved: boolean;
16
+ }>;
17
+ /**
18
+ * ✅ 批量授权代币给 PancakeSwap Router
19
+ */
20
+ export declare function approveFourPancakeProxyBatch(params: FourPancakeProxyApprovalBatchParams): Promise<FourPancakeProxyApprovalBatchResult>;
21
+ /**
22
+ * ✅ 使用 PancakeSwap 官方 Router 批量购买代币
23
+ */
24
+ export declare function fourPancakeProxyBatchBuyMerkle(params: FourPancakeProxyBatchBuySignParams): Promise<FourPancakeProxyBatchBuyResult>;
25
+ /**
26
+ * ✅ 使用 PancakeSwap 官方 Router 批量卖出代币
27
+ */
28
+ export declare function fourPancakeProxyBatchSellMerkle(params: FourPancakeProxyBatchSellSignParams): Promise<FourPancakeProxyBatchSellResult>;