four-flap-meme-sdk 2.2.2 → 2.2.4

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 (472) 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.d.ts +1 -0
  5. package/dist/__tests__/subpath-exports.test.js +64 -0
  6. package/dist/abis/common.d.ts +85 -0
  7. package/dist/abis/common.js +264 -0
  8. package/dist/abis/contracts/TaxToken.json +969 -0
  9. package/dist/abis/contracts/TokenManager2.json +136 -0
  10. package/dist/abis/contracts/index.d.ts +5 -0
  11. package/dist/abis/contracts/index.js +5 -0
  12. package/dist/abis/flap/index.d.ts +3 -0
  13. package/dist/abis/flap/index.js +3 -0
  14. package/dist/abis/flap/portal-events.d.ts +6 -0
  15. package/dist/abis/flap/portal-events.js +17 -0
  16. package/dist/abis/flap/portal.d.ts +6 -0
  17. package/dist/abis/flap/portal.js +37 -0
  18. package/dist/abis/flap/vault.d.ts +171 -0
  19. package/dist/abis/flap/vault.js +91 -0
  20. package/dist/abis/index.d.ts +8 -0
  21. package/dist/abis/index.js +11 -0
  22. package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
  23. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  24. package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
  25. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  26. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  27. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  28. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  29. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  30. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  31. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  32. package/dist/bundle-core/config-helpers.d.ts +36 -0
  33. package/dist/bundle-core/config-helpers.js +57 -0
  34. package/dist/bundle-core/errors.d.ts +50 -0
  35. package/dist/bundle-core/errors.js +35 -0
  36. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  37. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  38. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  39. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  40. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  41. package/dist/bundle-core/four-meme/core.js +515 -0
  42. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  43. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  44. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  45. package/dist/bundle-core/four-meme/private.js +465 -0
  46. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  47. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  48. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  49. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  50. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  51. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  52. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  53. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  54. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  55. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  56. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  57. package/dist/bundle-core/four-meme/swap.js +505 -0
  58. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  59. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  60. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  61. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  62. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  63. package/dist/bundle-core/four-meme/types/index.js +1 -0
  64. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  65. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  66. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  67. package/dist/bundle-core/four-meme/types.js +1 -0
  68. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  69. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  70. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  71. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  72. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  73. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  74. package/dist/bundle-core/index.d.ts +8 -0
  75. package/dist/bundle-core/index.js +8 -0
  76. package/dist/bundle-core/internal.d.ts +21 -0
  77. package/dist/bundle-core/internal.js +182 -0
  78. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  79. package/dist/bundle-core/sign-context-helpers.js +67 -0
  80. package/dist/bundle-core/submit.d.ts +293 -0
  81. package/dist/bundle-core/submit.js +727 -0
  82. package/dist/bundle-core/types/index.d.ts +8 -0
  83. package/dist/bundle-core/types/index.js +1 -0
  84. package/dist/bundle-core/types.d.ts +1 -0
  85. package/dist/bundle-core/types.js +1 -0
  86. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  87. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
  88. package/dist/chains/bsc/four/config.d.ts +5 -67
  89. package/dist/chains/bsc/four/config.js +2 -114
  90. package/dist/chains/bsc/four/core.d.ts +1 -4
  91. package/dist/chains/bsc/four/core.js +1 -592
  92. package/dist/chains/bsc/four/index.d.ts +6 -6
  93. package/dist/chains/bsc/four/index.js +6 -6
  94. package/dist/chains/bsc/four/internal.d.ts +2 -46
  95. package/dist/chains/bsc/four/internal.js +2 -239
  96. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  97. package/dist/chains/bsc/four/pancake-proxy.js +1 -687
  98. package/dist/chains/bsc/four/private.d.ts +1 -27
  99. package/dist/chains/bsc/four/private.js +1 -477
  100. package/dist/chains/bsc/four/submit.d.ts +2 -315
  101. package/dist/chains/bsc/four/submit.js +2 -752
  102. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  103. package/dist/chains/bsc/four/swap-buy-first.js +2 -507
  104. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  105. package/dist/chains/bsc/four/swap-internal.js +1 -18
  106. package/dist/chains/bsc/four/swap.d.ts +2 -144
  107. package/dist/chains/bsc/four/swap.js +2 -766
  108. package/dist/chains/bsc/four/types.d.ts +1 -476
  109. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  110. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  111. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  112. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  113. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  114. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  115. package/dist/chains/bsc/four/utils.d.ts +5 -18
  116. package/dist/chains/bsc/four/utils.js +5 -1552
  117. package/dist/chains/bsc/iro.d.ts +5 -0
  118. package/dist/chains/bsc/iro.js +4 -0
  119. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  120. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  121. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  122. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -212
  123. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  124. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  125. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  126. package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
  127. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  128. package/dist/chains/bsc/pancake/index.js +1 -3
  129. package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
  130. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  131. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  132. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  133. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  134. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  135. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  136. package/dist/chains/eni/batch-router/transfer.js +55 -25
  137. package/dist/chains/eni/batch-router/utils.js +32 -6
  138. package/dist/chains/eni/bundler/sign.js +5 -6
  139. package/dist/chains/eni/bundler/submit.js +1 -4
  140. package/dist/chains/eni/constants.js +1 -1
  141. package/dist/chains/eni/flat-aliases.d.ts +10 -0
  142. package/dist/chains/eni/flat-aliases.js +8 -0
  143. package/dist/chains/eni/index.d.ts +2 -1
  144. package/dist/chains/eni/index.js +1 -0
  145. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  146. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  147. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  148. package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
  149. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
  150. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  151. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  152. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  153. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  154. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
  155. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  156. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  157. package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
  158. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  159. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  160. package/dist/chains/eni/platforms/iro/index.js +4 -4
  161. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  162. package/dist/chains/eni/platforms/iro/token.js +107 -31
  163. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  164. package/dist/chains/eni/submit.d.ts +43 -0
  165. package/dist/chains/eni/submit.js +286 -0
  166. package/dist/chains/index.d.ts +13 -0
  167. package/dist/chains/index.js +13 -0
  168. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  169. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
  170. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  171. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  172. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -59
  173. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  174. package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
  175. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  176. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
  177. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  178. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  179. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
  180. package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
  181. package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
  182. package/dist/chains/xlayer/eip7702/index.js +28 -81
  183. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  184. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  185. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  186. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
  187. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  188. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  189. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  190. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  191. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  192. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  193. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  194. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  195. package/dist/chains/xlayer/eip7702/volume.js +89 -164
  196. package/dist/chains/xlayer/eoa/constants.js +1 -1
  197. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  198. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  199. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  200. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  201. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
  202. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  203. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
  204. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  205. package/dist/chains/xlayer/eoa/index.js +8 -23
  206. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  207. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  208. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  209. package/dist/chains/xlayer/eoa/types.js +1 -3
  210. package/dist/chains/xlayer/index.d.ts +3 -2
  211. package/dist/chains/xlayer/index.js +4 -7
  212. package/dist/contracts/helper3.d.ts +20 -5
  213. package/dist/contracts/helper3.js +56 -20
  214. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  215. package/dist/contracts/tm-bundle-helpers.js +72 -0
  216. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  217. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
  218. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
  219. package/dist/contracts/tm-bundle-merkle/config.js +2 -114
  220. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  221. package/dist/contracts/tm-bundle-merkle/core.js +1 -591
  222. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  223. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  224. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
  225. package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
  226. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  227. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
  228. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  229. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  230. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  231. package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
  232. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  233. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
  234. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  235. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  236. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  237. package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
  238. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  239. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  240. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  241. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  242. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  243. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  244. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  245. package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
  246. package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
  247. package/dist/contracts/tm-bundle.d.ts +3 -51
  248. package/dist/contracts/tm-bundle.js +108 -177
  249. package/dist/contracts/tm.d.ts +3 -2
  250. package/dist/contracts/tm.js +37 -32
  251. package/dist/contracts/tm1.js +9 -4
  252. package/dist/contracts/tm2.js +9 -4
  253. package/dist/dex/direct-router-helpers.d.ts +264 -0
  254. package/dist/dex/direct-router-helpers.js +539 -0
  255. package/dist/dex/direct-router.d.ts +3 -125
  256. package/dist/dex/direct-router.js +237 -666
  257. package/dist/dex/types.d.ts +81 -0
  258. package/dist/dex/types.js +1 -0
  259. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  260. package/dist/exports/root-bundle-and-tooling.js +30 -0
  261. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  262. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  263. package/dist/exports/root-foundations.d.ts +35 -0
  264. package/dist/exports/root-foundations.js +70 -0
  265. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  266. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  267. package/dist/flap/index.d.ts +10 -0
  268. package/dist/flap/index.js +8 -0
  269. package/dist/flows/create.d.ts +2 -1
  270. package/dist/flows/create.js +6 -6
  271. package/dist/flows/index.d.ts +1 -0
  272. package/dist/flows/index.js +1 -0
  273. package/dist/index.d.ts +20 -85
  274. package/dist/index.js +20 -215
  275. package/dist/merkle/index.d.ts +12 -0
  276. package/dist/merkle/index.js +11 -0
  277. package/dist/shared/abis/common.d.ts +2 -83
  278. package/dist/shared/abis/common.js +2 -252
  279. package/dist/shared/abis/index.d.ts +5 -6
  280. package/dist/shared/abis/index.js +5 -7
  281. package/dist/shared/clients/blockrazor.js +39 -25
  282. package/dist/shared/clients/club48.d.ts +2 -2
  283. package/dist/shared/clients/club48.js +34 -29
  284. package/dist/shared/clients/emitservice.js +2 -0
  285. package/dist/shared/clients/four.d.ts +21 -6
  286. package/dist/shared/clients/four.js +29 -24
  287. package/dist/shared/clients/index.d.ts +8 -0
  288. package/dist/shared/clients/index.js +8 -0
  289. package/dist/shared/clients/merkle.js +27 -34
  290. package/dist/shared/constants/addresses.d.ts +1 -1
  291. package/dist/shared/constants/addresses.js +11 -2
  292. package/dist/shared/constants/chains.d.ts +1 -1
  293. package/dist/shared/constants/chains.js +1 -1
  294. package/dist/shared/constants/gas.d.ts +1 -1
  295. package/dist/shared/constants/gas.js +2 -6
  296. package/dist/shared/constants/index.d.ts +3 -0
  297. package/dist/shared/constants/index.js +1 -0
  298. package/dist/shared/constants/quote.d.ts +30 -0
  299. package/dist/shared/constants/quote.js +37 -0
  300. package/dist/shared/flap/abi.js +1 -1
  301. package/dist/shared/flap/constants.d.ts +1 -2
  302. package/dist/shared/flap/constants.js +2 -3
  303. package/dist/shared/flap/curve.js +3 -0
  304. package/dist/shared/flap/errors.d.ts +1 -4
  305. package/dist/shared/flap/errors.js +20 -1
  306. package/dist/shared/flap/index.d.ts +5 -4
  307. package/dist/shared/flap/index.js +5 -4
  308. package/dist/shared/flap/meta.d.ts +22 -18
  309. package/dist/shared/flap/meta.js +12 -17
  310. package/dist/shared/flap/permit.js +5 -2
  311. package/dist/shared/flap/pinata.d.ts +22 -6
  312. package/dist/shared/flap/pinata.js +21 -26
  313. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  314. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  315. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  316. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  317. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  318. package/dist/shared/flap/portal-bundle-merkle/core.js +96 -277
  319. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +7 -2
  320. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +107 -206
  321. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  322. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  323. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  324. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  325. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  326. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  327. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  328. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  329. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  330. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  331. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  332. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  333. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  334. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +88 -9
  335. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  336. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  337. package/dist/shared/flap/portal-bundle.js +55 -56
  338. package/dist/shared/flap/portal-create-token.d.ts +80 -0
  339. package/dist/shared/flap/portal-create-token.js +257 -0
  340. package/dist/shared/flap/portal.d.ts +14 -3
  341. package/dist/shared/flap/portal.js +50 -25
  342. package/dist/shared/flap/vanity.d.ts +1 -5
  343. package/dist/shared/flap/vanity.js +6 -17
  344. package/dist/shared/flap/vault.d.ts +17 -124
  345. package/dist/shared/flap/vault.js +67 -148
  346. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  347. package/dist/shared/foundation/dex/v3-path.js +35 -0
  348. package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
  349. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  350. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  351. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  352. package/dist/shared/foundation/index.d.ts +13 -0
  353. package/dist/shared/foundation/index.js +12 -0
  354. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  355. package/dist/shared/foundation/nonce/nonce-manager.js +183 -0
  356. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  357. package/dist/shared/foundation/normalize-unknown.js +29 -0
  358. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  359. package/dist/shared/foundation/sdk-logger.js +12 -0
  360. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  361. package/dist/shared/foundation/tx/build-request.js +25 -0
  362. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  363. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  364. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  365. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  366. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  367. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  368. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  369. package/dist/shared/foundation/types/erc20.js +1 -0
  370. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  371. package/dist/shared/foundation/types/holders-maker.js +1 -0
  372. package/dist/shared/foundation/types/index.d.ts +7 -0
  373. package/dist/shared/foundation/types/index.js +1 -0
  374. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  375. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  376. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  377. package/dist/shared/foundation/types/multicall.js +1 -0
  378. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  379. package/dist/shared/foundation/types/private-sale.js +1 -0
  380. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  381. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  382. package/dist/shared/four/tax-token.d.ts +1 -1
  383. package/dist/shared/four/tax-token.js +27 -7
  384. package/dist/shared/index.d.ts +6 -0
  385. package/dist/shared/index.js +4 -0
  386. package/dist/types/errors.d.ts +27 -0
  387. package/dist/types/errors.js +34 -0
  388. package/dist/utils/airdrop-sweep.d.ts +4 -76
  389. package/dist/utils/airdrop-sweep.js +42 -55
  390. package/dist/utils/bundle-helpers.d.ts +9 -243
  391. package/dist/utils/bundle-helpers.js +10 -584
  392. package/dist/utils/constants.d.ts +5 -61
  393. package/dist/utils/constants.js +5 -80
  394. package/dist/utils/contract-factory.d.ts +2 -4
  395. package/dist/utils/contract-factory.js +25 -18
  396. package/dist/utils/erc20.d.ts +7 -89
  397. package/dist/utils/erc20.js +94 -125
  398. package/dist/utils/errors.d.ts +12 -1
  399. package/dist/utils/errors.js +60 -1
  400. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  401. package/dist/utils/holders-maker/addresses.js +15 -0
  402. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  403. package/dist/utils/holders-maker/buy-tx.js +278 -0
  404. package/dist/utils/holders-maker/constants.d.ts +6 -0
  405. package/dist/utils/holders-maker/constants.js +7 -0
  406. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  407. package/dist/utils/holders-maker/disperse.js +90 -0
  408. package/dist/utils/holders-maker/routing.d.ts +4 -0
  409. package/dist/utils/holders-maker/routing.js +45 -0
  410. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  411. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  412. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  413. package/dist/utils/holders-maker-helpers.js +9 -0
  414. package/dist/utils/holders-maker.d.ts +2 -138
  415. package/dist/utils/holders-maker.js +26 -661
  416. package/dist/utils/hop-chains.d.ts +35 -0
  417. package/dist/utils/hop-chains.js +215 -0
  418. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  419. package/dist/utils/lp-inspect-helpers.js +109 -0
  420. package/dist/utils/lp-inspect.d.ts +2 -112
  421. package/dist/utils/lp-inspect.js +73 -223
  422. package/dist/utils/mpcExclusive.d.ts +2 -5
  423. package/dist/utils/mpcExclusive.js +4 -3
  424. package/dist/utils/private-sale.d.ts +2 -58
  425. package/dist/utils/private-sale.js +4 -15
  426. package/dist/utils/provider-factory.d.ts +4 -0
  427. package/dist/utils/provider-factory.js +10 -0
  428. package/dist/utils/quote-helpers.d.ts +4 -45
  429. package/dist/utils/quote-helpers.js +17 -74
  430. package/dist/utils/stealth-transfer.d.ts +2 -28
  431. package/dist/utils/stealth-transfer.js +31 -15
  432. package/dist/utils/swap-helpers.d.ts +2 -15
  433. package/dist/utils/swap-helpers.js +6 -11
  434. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  435. package/dist/utils/types/airdrop-sweep.js +1 -0
  436. package/dist/utils/types/contract-factory.d.ts +1 -0
  437. package/dist/utils/types/contract-factory.js +1 -0
  438. package/dist/utils/types/erc20.d.ts +1 -0
  439. package/dist/utils/types/erc20.js +1 -0
  440. package/dist/utils/types/errors.d.ts +1 -0
  441. package/dist/utils/types/errors.js +1 -0
  442. package/dist/utils/types/holders-maker.d.ts +1 -0
  443. package/dist/utils/types/holders-maker.js +1 -0
  444. package/dist/utils/types/hop-chains.d.ts +8 -0
  445. package/dist/utils/types/hop-chains.js +1 -0
  446. package/dist/utils/types/index.d.ts +13 -0
  447. package/dist/utils/types/index.js +1 -0
  448. package/dist/utils/types/lp-inspect.d.ts +1 -0
  449. package/dist/utils/types/lp-inspect.js +1 -0
  450. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  451. package/dist/utils/types/mpc-exclusive.js +1 -0
  452. package/dist/utils/types/private-sale.d.ts +1 -0
  453. package/dist/utils/types/private-sale.js +1 -0
  454. package/dist/utils/types/quote-helpers.d.ts +1 -0
  455. package/dist/utils/types/quote-helpers.js +1 -0
  456. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  457. package/dist/utils/types/stealth-transfer.js +1 -0
  458. package/dist/utils/types/wallet.d.ts +25 -0
  459. package/dist/utils/types/wallet.js +1 -0
  460. package/dist/utils/wallet.d.ts +2 -25
  461. package/dist/utils/wallet.js +13 -10
  462. package/dist/vanity/index.d.ts +5 -0
  463. package/dist/vanity/index.js +5 -0
  464. package/package.json +160 -4
  465. package/src/abis/contracts/TaxToken.json +969 -0
  466. package/src/abis/contracts/TokenManager.json +836 -0
  467. package/src/abis/contracts/TokenManager2.json +136 -0
  468. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  469. package/dist/shared/abis/TaxToken.json +0 -105
  470. package/dist/shared/abis/TokenManager2.json +0 -60
  471. /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
  472. /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
@@ -1,591 +1 @@
1
- import { ethers, Wallet, Contract, Interface } from 'ethers';
2
- import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../utils/bundle-helpers.js';
3
- import { ADDRESSES, BLOCKRAZOR_BUILDER_EOA, ZERO_ADDRESS } from '../../utils/constants.js';
4
- import { MULTICALL3_ABI, ERC20_ABI } from '../../shared/abis/common.js';
5
- import { FourClient, buildLoginMessage } from '../../shared/clients/four.js';
6
- import { getErrorMessage, getTxType, getGasPriceConfig, shouldExtractProfit, calculateProfit, getProfitRecipient, getBribeAmount } from './config.js';
7
- import { trySell } from '../tm.js';
8
- import Helper3Abi from '../../shared/abis/TokenManagerHelper3.json' with { type: 'json' };
9
- // ✅ 常量
10
- const MULTICALL3_ADDRESS = ADDRESSES.BSC.Multicall3;
11
- // ✅ TM2 扩展 ABI(包含创建代币方法和事件)
12
- import { TM2_ABI as _TM2_ABI } from '../../shared/abis/common.js';
13
- const TM2_ABI = [
14
- ..._TM2_ABI,
15
- 'function createToken(bytes args, bytes signature) payable',
16
- 'event TokenCreate(address indexed creator, address indexed token, uint256 timestamp)'
17
- ];
18
- const PLATFORM_CREATE_FEE = ethers.parseEther('0.01');
19
- const CHAIN_ID = 56;
20
- // ✅ 本地 getGasLimit(FourAnyConfig 支持 bigint gasLimit)
21
- function getGasLimit(config, defaultGas = 800000) {
22
- if (config.gasLimit !== undefined) {
23
- return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
24
- }
25
- const multiplier = config.gasLimitMultiplier ?? 1.0;
26
- return BigInt(Math.ceil(defaultGas * multiplier));
27
- }
28
- export async function createTokenWithBundleBuyMerkle(params) {
29
- const { privateKeys, buyAmounts, tokenInfo, config } = params;
30
- // ⚠️ 限制: 只支持创建者买入,不支持其他钱包
31
- if (privateKeys.length !== 1) {
32
- throw new Error('只支持创建者买入,privateKeys 只能有1个元素');
33
- }
34
- if (buyAmounts.length !== 1) {
35
- throw new Error('只支持买入一次,buyAmounts 只能有1个元素');
36
- }
37
- const creatorKey = privateKeys[0];
38
- // ✅ 使用公共 BSC RPC 节点(支持浏览器 CORS)
39
- // 48.club 的 RPC 不支持浏览器跨域访问,所以使用公共节点进行余额查询和 gas 估算
40
- const rpcUrl = config.rpcUrl || 'https://bsc-dataseed.binance.org';
41
- const { provider, chainId } = createChainContext(rpcUrl);
42
- const devWallet = new Wallet(creatorKey, provider);
43
- const fourClient = new FourClient({ baseUrl: config.fourApiUrl });
44
- // 🔍 检查创建者余额
45
- const creatorBalance = await provider.getBalance(devWallet.address);
46
- const estimatedB0 = ethers.parseEther(params.b0Amount ?? '0');
47
- const estimatedPreSale = tokenInfo.preSale ? ethers.parseEther(tokenInfo.preSale) : 0n;
48
- // 计算总需求:创建费用 + b0Amount + preSale + 买入金额 + gas预估
49
- const buyAmount = ethers.parseEther(buyAmounts[0]);
50
- let totalRequired = PLATFORM_CREATE_FEE + estimatedB0 + estimatedPreSale + buyAmount;
51
- totalRequired += ethers.parseEther('0.01'); // 预留 0.01 BNB 作为 gas
52
- if (creatorBalance < totalRequired) {
53
- console.warn(`⚠️ 余额可能不足!当前: ${ethers.formatEther(creatorBalance)} BNB, 需要: ${ethers.formatEther(totalRequired)} BNB`);
54
- }
55
- const accessToken = await loginFourClient(devWallet, fourClient);
56
- const imgUrl = await resolveTokenImage(fourClient, tokenInfo, accessToken);
57
- // ✅ 兼容:历史调用可能把 Dev 首买金额塞在 buyAmounts[0],而不是 tokenInfo.preSale
58
- // Four 官方 API/链上 createArg 使用 preSale 表达“创建者预购金额”
59
- const effectivePreSaleStr = (tokenInfo.preSale && String(tokenInfo.preSale).trim().length > 0 ? String(tokenInfo.preSale) : String(buyAmounts[0] ?? '0'));
60
- const createResp = await fourClient.createToken(accessToken, {
61
- name: tokenInfo.name,
62
- shortName: tokenInfo.symbol,
63
- desc: tokenInfo.description,
64
- imgUrl,
65
- launchTime: Date.now(),
66
- label: tokenInfo.label || 'Meme',
67
- webUrl: tokenInfo.webUrl,
68
- twitterUrl: tokenInfo.twitterUrl,
69
- telegramUrl: tokenInfo.telegramUrl,
70
- preSale: effectivePreSaleStr || '0',
71
- onlyMPC: false,
72
- // ✅ AntiSniperFeeMode(开盘高税模式)
73
- ...(tokenInfo.feePlan ? { feePlan: true } : {}),
74
- // ✅ 税币配置(Tax Token, creatorType=5)
75
- ...(tokenInfo.tokenTaxInfo ? { tokenTaxInfo: tokenInfo.tokenTaxInfo } : {}),
76
- lpTradingFee: 0.0025,
77
- symbol: 'BNB',
78
- totalSupply: 1000000000,
79
- raisedAmount: 24,
80
- saleRate: 0.8,
81
- reserveRate: 0,
82
- funGroup: false,
83
- clickFun: false,
84
- });
85
- const gasPrice = await getOptimizedGasPrice(provider, getGasPriceConfig(config));
86
- const nonceManager = new NonceManager(provider);
87
- const txType = getTxType(config);
88
- const signedTxs = [];
89
- const tmCreateAddr = ADDRESSES.BSC.TokenManagerOriginal;
90
- // ✅ 单笔交易: 和 Four.meme 官网一样
91
- // 计算利润
92
- const extractProfit = shouldExtractProfit(config);
93
- // ✅ 对 create 流程来说,“买入金额”就是 preSale(创建者预购)
94
- const originalBuyAmount = ethers.parseEther(effectivePreSaleStr || '0');
95
- let actualBuyFunds;
96
- let profitAmount;
97
- if (extractProfit) {
98
- const { remaining, profit } = calculateProfit(originalBuyAmount, config);
99
- actualBuyFunds = remaining;
100
- profitAmount = profit;
101
- }
102
- else {
103
- actualBuyFunds = originalBuyAmount;
104
- profitAmount = 0n;
105
- }
106
- // ✅ 获取贿赂金额
107
- const bribeAmount = getBribeAmount(config);
108
- const needBribeTx = bribeAmount > 0n;
109
- const b0AmountWei = ethers.parseEther(params.b0Amount ?? '0');
110
- const preSaleWei = effectivePreSaleStr ? ethers.parseEther(effectivePreSaleStr) : 0n;
111
- // ✅ 关键修复:
112
- // createToken 的预购金额由 createArg.preSale 决定;因此这里只需要支付:创建费 + b0Amount + preSale
113
- // 不要把“其它买入金额”额外塞进 msg.value,否则会被合约退回,造成“看起来没买到”的误解。
114
- const valueWei = PLATFORM_CREATE_FEE + b0AmountWei + preSaleWei;
115
- const tmCreate = new ethers.Contract(tmCreateAddr, TM2_ABI, devWallet);
116
- const createTxUnsigned = await tmCreate.createToken.populateTransaction(createResp.createArg, createResp.signature, { value: valueWei });
117
- // ✅ 贿赂交易放在首位(由 devWallet 发送)
118
- let bribeNonce;
119
- if (needBribeTx) {
120
- bribeNonce = await nonceManager.getNextNonce(devWallet);
121
- const bribeTx = await devWallet.signTransaction({
122
- to: BLOCKRAZOR_BUILDER_EOA,
123
- value: bribeAmount,
124
- nonce: bribeNonce,
125
- gasPrice,
126
- gasLimit: 21000n,
127
- chainId,
128
- type: txType
129
- });
130
- signedTxs.push(bribeTx);
131
- }
132
- const createTxRequest = {
133
- ...createTxUnsigned,
134
- from: devWallet.address,
135
- nonce: await nonceManager.getNextNonce(devWallet),
136
- gasLimit: getGasLimit(config, 1500000),
137
- gasPrice,
138
- chainId,
139
- type: getTxType(config),
140
- value: valueWei
141
- };
142
- signedTxs.push(await devWallet.signTransaction(createTxRequest));
143
- // ✅ 利润多跳转账(强制 2 跳中转)
144
- let profitHopWallets;
145
- if (extractProfit && profitAmount > 0n) {
146
- const profitNonce = await nonceManager.getNextNonce(devWallet);
147
- const profitHopResult = await buildProfitHopTransactions({
148
- provider,
149
- payerWallet: devWallet,
150
- profitAmount,
151
- profitRecipient: getProfitRecipient(),
152
- hopCount: PROFIT_HOP_COUNT,
153
- gasPrice,
154
- chainId,
155
- txType,
156
- startNonce: profitNonce
157
- });
158
- signedTxs.push(...profitHopResult.signedTransactions);
159
- profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
160
- }
161
- nonceManager.clearTemp();
162
- // ⚠️ 只返回签名交易,不提交
163
- // 构建元数据
164
- const metadata = extractProfit && profitAmount > 0n ? {
165
- totalBuyAmount: ethers.formatEther(originalBuyAmount),
166
- profitAmount: ethers.formatEther(profitAmount),
167
- profitRecipient: getProfitRecipient(),
168
- buyerCount: 1
169
- } : undefined;
170
- return {
171
- signedTransactions: signedTxs,
172
- tokenAddress: ZERO_ADDRESS, // ⚠️ 占位符,实际地址需要等交易确认后从事件解析
173
- profitHopWallets, // ✅ 返回利润多跳钱包
174
- metadata
175
- };
176
- }
177
- export async function batchBuyWithBundleMerkle(params) {
178
- const { privateKeys, buyAmounts, tokenAddress, config } = params;
179
- if (privateKeys.length === 0 || buyAmounts.length !== privateKeys.length) {
180
- throw new Error(getErrorMessage('KEY_AMOUNT_MISMATCH'));
181
- }
182
- const { provider, chainId } = createChainContext(config.rpcUrl);
183
- const txType = getTxType(config);
184
- const buyers = createWallets(privateKeys, provider);
185
- // ✅ 优化:并行初始化 nonceManager 和获取 gasPrice
186
- const [nonceManager, gasPrice] = await Promise.all([
187
- Promise.resolve(new NonceManager(provider)),
188
- getOptimizedGasPrice(provider, getGasPriceConfig(config))
189
- ]);
190
- const buyFlow = await executeBuyFlow({
191
- wallets: buyers,
192
- buyAmounts,
193
- tokenAddress,
194
- config,
195
- provider,
196
- nonceManager,
197
- contractAddress: ADDRESSES.BSC.TokenManagerOriginal,
198
- gasPrice,
199
- chainId,
200
- profitMode: { type: 'aggregated', payer: buyers[0] },
201
- txType
202
- });
203
- nonceManager.clearTemp();
204
- return {
205
- signedTransactions: buyFlow.signedTxs,
206
- profitHopWallets: buyFlow.profitHopWallets, // ✅ 返回利润多跳钱包
207
- metadata: buyFlow.metadata
208
- };
209
- }
210
- export async function batchSellWithBundleMerkle(params) {
211
- const { privateKeys, sellAmounts, tokenAddress, minOutputAmounts, config } = params;
212
- if (privateKeys.length === 0 || sellAmounts.length !== privateKeys.length) {
213
- throw new Error(getErrorMessage('SELL_KEY_AMOUNT_MISMATCH'));
214
- }
215
- const { provider, chainId } = createChainContext(config.rpcUrl);
216
- const txType = getTxType(config);
217
- const sellers = createWallets(privateKeys, provider);
218
- // ✅ 优化:并行初始化 nonceManager 和获取 gasPrice
219
- const [nonceManager, gasPrice] = await Promise.all([
220
- Promise.resolve(new NonceManager(provider)),
221
- getOptimizedGasPrice(provider, getGasPriceConfig(config))
222
- ]);
223
- const sellFlow = await executeSellFlow({
224
- wallets: sellers,
225
- sellAmounts,
226
- tokenAddress,
227
- minOutputAmounts,
228
- config,
229
- provider,
230
- nonceManager,
231
- contractAddress: ADDRESSES.BSC.TokenManagerOriginal,
232
- gasPrice,
233
- chainId,
234
- rpcUrl: config.rpcUrl,
235
- txType
236
- });
237
- nonceManager.clearTemp();
238
- return {
239
- signedTransactions: sellFlow.signedTxs,
240
- profitHopWallets: sellFlow.profitHopWallets // ✅ 返回利润多跳钱包
241
- };
242
- }
243
- function createChainContext(rpcUrl) {
244
- const provider = new ethers.JsonRpcProvider(rpcUrl, {
245
- chainId: CHAIN_ID,
246
- name: 'BSC'
247
- });
248
- return { provider, chainId: CHAIN_ID };
249
- }
250
- function createWallets(privateKeys, provider) {
251
- return privateKeys.map((key) => new Wallet(key, provider));
252
- }
253
- async function loginFourClient(wallet, fourClient) {
254
- const nonce = await fourClient.generateNonce({
255
- accountAddress: wallet.address,
256
- verifyType: 'LOGIN',
257
- networkCode: 'BSC'
258
- });
259
- const loginSignature = await wallet.signMessage(buildLoginMessage(nonce));
260
- return fourClient.loginDex({
261
- region: 'WEB',
262
- langType: 'EN',
263
- verifyInfo: {
264
- address: wallet.address,
265
- networkCode: 'BSC',
266
- signature: loginSignature,
267
- verifyType: 'LOGIN'
268
- },
269
- walletName: 'MetaMask'
270
- });
271
- }
272
- async function resolveTokenImage(fourClient, tokenInfo, accessToken) {
273
- if (tokenInfo.imageUrl) {
274
- return tokenInfo.imageUrl;
275
- }
276
- if (tokenInfo.imageFile) {
277
- return fourClient.uploadImage(accessToken, tokenInfo.imageFile);
278
- }
279
- throw new Error(getErrorMessage('IMAGE_REQUIRED'));
280
- }
281
- async function executeBuyFlow(options) {
282
- const { wallets, buyAmounts, tokenAddress, config, provider, nonceManager, contractAddress, gasPrice, chainId, profitMode, txType } = options;
283
- const extractProfit = shouldExtractProfit(config);
284
- const analysis = analyzeBuyFunds(buyAmounts, config, extractProfit);
285
- const finalGasLimit = getGasLimit(config);
286
- // ✅ 获取贿赂金额
287
- const bribeAmount = getBribeAmount(config);
288
- const needBribeTx = bribeAmount > 0n;
289
- const payer = profitMode.type === 'aggregated' ? (profitMode.payer ?? wallets[0]) : wallets[0];
290
- // ✅ 贿赂交易放在首位
291
- const signedTxs = [];
292
- let bribeNonceOffset = 0;
293
- if (needBribeTx) {
294
- const bribeNonce = await nonceManager.getNextNonce(payer);
295
- const bribeTx = await payer.signTransaction({
296
- to: BLOCKRAZOR_BUILDER_EOA,
297
- value: bribeAmount,
298
- nonce: bribeNonce,
299
- gasPrice,
300
- gasLimit: 21000n,
301
- chainId,
302
- type: txType
303
- });
304
- signedTxs.push(bribeTx);
305
- bribeNonceOffset = 1; // payer 的买入交易 nonce 需要偏移
306
- }
307
- // ✅ 优化:并行执行 populateBuyTransactions 和批量获取 nonces(JSON-RPC 批量请求)
308
- const [unsignedBuys, nonces] = await Promise.all([
309
- populateBuyTransactions({
310
- buyers: wallets,
311
- contractAddress,
312
- tokenAddress,
313
- fundsList: analysis.fundsList
314
- }),
315
- nonceManager.getNextNoncesForWallets(wallets) // ✅ 批量获取 nonce
316
- ]);
317
- // ✅ 调整 payer 的 nonce(如果有贿赂交易,需要偏移)
318
- const payerIndex = wallets.findIndex(w => w.address.toLowerCase() === payer.address.toLowerCase());
319
- const adjustedNonces = nonces.map((n, i) => i === payerIndex ? n + bribeNonceOffset : n);
320
- // ✅ 并行签名所有买入交易
321
- const signedBuys = await Promise.all(unsignedBuys.map((unsigned, index) => wallets[index].signTransaction({
322
- ...unsigned,
323
- from: wallets[index].address,
324
- nonce: adjustedNonces[index],
325
- gasLimit: finalGasLimit,
326
- gasPrice,
327
- chainId,
328
- type: txType,
329
- value: analysis.fundsList[index]
330
- })));
331
- signedTxs.push(...signedBuys);
332
- // ✅ 利润多跳转账(强制 2 跳中转)
333
- let profitHopWallets;
334
- if (extractProfit && analysis.totalProfit > 0n && profitMode.type === 'aggregated') {
335
- const profitNonce = await nonceManager.getNextNonce(payer);
336
- const profitHopResult = await buildProfitHopTransactions({
337
- provider,
338
- payerWallet: payer,
339
- profitAmount: analysis.totalProfit,
340
- profitRecipient: getProfitRecipient(),
341
- hopCount: PROFIT_HOP_COUNT,
342
- gasPrice,
343
- chainId,
344
- txType,
345
- startNonce: profitNonce
346
- });
347
- signedTxs.push(...profitHopResult.signedTransactions);
348
- profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
349
- }
350
- const metadata = buildBuyMetadata(extractProfit, analysis.totalBuyAmount, analysis.totalProfit, wallets.length);
351
- return { signedTxs, metadata, profitHopWallets }; // ✅ 返回利润多跳钱包
352
- }
353
- async function executeSellFlow(options) {
354
- const { wallets, sellAmounts, tokenAddress, minOutputAmounts, config, provider, nonceManager, contractAddress, gasPrice, chainId, rpcUrl, txType } = options;
355
- const amountsWei = sellAmounts.map((amount) => ethers.parseUnits(amount, 18));
356
- const finalGasLimit = getGasLimit(config);
357
- const extractProfit = shouldExtractProfit(config);
358
- // ✅ 获取贿赂金额
359
- const bribeAmount = getBribeAmount(config);
360
- const needBribeTx = bribeAmount > 0n;
361
- // ✅ 优化:并行执行 resolveSellOutputs、ensureSellerBalances 和批量获取 nonces(已移除授权检查)
362
- const [sellOutputs, , nonces] = await Promise.all([
363
- resolveSellOutputs({
364
- minOutputAmounts,
365
- sellers: wallets,
366
- amountsWei,
367
- rpcUrl,
368
- tokenAddress
369
- }),
370
- ensureSellerBalances({ provider, tokenAddress, sellers: wallets, amountsWei }),
371
- nonceManager.getNextNoncesForWallets(wallets) // ✅ 批量获取 nonce(JSON-RPC 批量请求)
372
- ]);
373
- // ✅ 找出收益最多的钱包作为 payer(贿赂和利润都由它发送)
374
- const { totalProfit, payer } = summarizeSellProfits(sellOutputs.quotedOutputs, wallets, config);
375
- const payerWallet = payer ?? wallets[0];
376
- const payerIndex = wallets.findIndex(w => w.address.toLowerCase() === payerWallet.address.toLowerCase());
377
- // ✅ 贿赂交易放在首位
378
- const signedTxs = [];
379
- let bribeNonceOffset = 0;
380
- if (needBribeTx) {
381
- const bribeNonce = nonces[payerIndex];
382
- const bribeTx = await payerWallet.signTransaction({
383
- to: BLOCKRAZOR_BUILDER_EOA,
384
- value: bribeAmount,
385
- nonce: bribeNonce,
386
- gasPrice,
387
- gasLimit: 21000n,
388
- chainId,
389
- type: txType
390
- });
391
- signedTxs.push(bribeTx);
392
- bribeNonceOffset = 1;
393
- }
394
- // ✅ 调整 payer 的 nonce(如果有贿赂交易,需要偏移)
395
- const adjustedNonces = nonces.map((n, i) => i === payerIndex ? n + bribeNonceOffset : n);
396
- // ✅ 构建未签名交易
397
- const unsignedSells = await populateSellTransactions({
398
- sellers: wallets,
399
- contractAddress,
400
- tokenAddress,
401
- amountsWei,
402
- minOuts: sellOutputs.minOuts
403
- });
404
- // ✅ 并行签名所有卖出交易
405
- const signedSells = await Promise.all(unsignedSells.map((unsigned, index) => wallets[index].signTransaction({
406
- ...unsigned,
407
- from: wallets[index].address,
408
- nonce: adjustedNonces[index],
409
- gasLimit: finalGasLimit,
410
- gasPrice,
411
- chainId,
412
- type: txType
413
- })));
414
- signedTxs.push(...signedSells);
415
- // ✅ 利润多跳转账(强制 2 跳中转)
416
- const profitHopWallets = await appendAggregatedProfitTransfer({
417
- extractProfit,
418
- totalProfit,
419
- payer: payerWallet,
420
- nonceManager,
421
- provider,
422
- gasPrice,
423
- chainId,
424
- txType,
425
- signedTxs,
426
- baseNonce: adjustedNonces[payerIndex] + 1 // ✅ 传入基础 nonce
427
- });
428
- return { signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
429
- }
430
- function analyzeBuyFunds(buyAmounts, config, extractProfit) {
431
- const fundsList = [];
432
- const profitList = [];
433
- let totalProfit = 0n;
434
- let totalBuyAmount = 0n;
435
- buyAmounts.forEach((amount) => {
436
- const originalAmount = ethers.parseEther(amount);
437
- totalBuyAmount += originalAmount;
438
- if (extractProfit) {
439
- const { remaining, profit } = calculateProfit(originalAmount, config);
440
- fundsList.push(remaining);
441
- profitList.push(profit);
442
- totalProfit += profit;
443
- }
444
- else {
445
- fundsList.push(originalAmount);
446
- profitList.push(0n);
447
- }
448
- });
449
- return { fundsList, profitList, totalProfit, totalBuyAmount };
450
- }
451
- async function populateBuyTransactions(params) {
452
- const { buyers, contractAddress, tokenAddress, fundsList } = params;
453
- const contracts = buyers.map((wallet) => new ethers.Contract(contractAddress, TM2_ABI, wallet));
454
- return Promise.all(contracts.map((contract, index) => contract.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyers[index].address, fundsList[index], 0n, { value: fundsList[index] })));
455
- }
456
- function buildBuyMetadata(extractProfit, totalBuyAmount, totalProfit, buyerCount) {
457
- if (!extractProfit || totalBuyAmount <= 0n || totalProfit <= 0n) {
458
- return undefined;
459
- }
460
- return {
461
- totalBuyAmount: ethers.formatEther(totalBuyAmount),
462
- profitAmount: ethers.formatEther(totalProfit),
463
- profitRecipient: getProfitRecipient(),
464
- buyerCount
465
- };
466
- }
467
- /**
468
- * ✅ 使用 Multicall3 批量获取卖出报价(单次 RPC)
469
- * 比 Promise.all 更高效,N 个报价只需 1 次网络请求
470
- */
471
- async function resolveSellOutputs(params) {
472
- const { minOutputAmounts, sellers, amountsWei, rpcUrl, tokenAddress } = params;
473
- // 如果已提供 minOutputAmounts,直接使用,跳过报价查询
474
- if (minOutputAmounts && minOutputAmounts.length === sellers.length) {
475
- const minOuts = minOutputAmounts.map((m) => (typeof m === 'string' ? ethers.parseEther(m) : m));
476
- const quotedOutputs = minOuts.map((value) => (value * 100n) / 95n);
477
- return { minOuts, quotedOutputs };
478
- }
479
- // 如果只有 1 个,直接调用(避免 multicall 开销)
480
- if (amountsWei.length === 1) {
481
- try {
482
- const result = await trySell('BSC', rpcUrl, tokenAddress, amountsWei[0]);
483
- const quotedOutputs = [result.funds];
484
- // ✅ 已移除滑点保护:minOuts 固定为 0
485
- const minOuts = [0n];
486
- return { minOuts, quotedOutputs };
487
- }
488
- catch {
489
- return { minOuts: [0n], quotedOutputs: [0n] };
490
- }
491
- }
492
- // ✅ 使用 Multicall3 批量获取报价
493
- const provider = new ethers.JsonRpcProvider(rpcUrl, { chainId: 56, name: 'BSC' });
494
- const helper3Address = ADDRESSES.BSC.TokenManagerHelper3;
495
- const helper3Iface = new Interface(Helper3Abi);
496
- const multicall = new Contract(MULTICALL3_ADDRESS, MULTICALL3_ABI, provider);
497
- // 构建批量调用
498
- const calls = amountsWei.map(amount => ({
499
- target: helper3Address,
500
- allowFailure: true, // 允许单个失败
501
- callData: helper3Iface.encodeFunctionData('trySell', [tokenAddress, amount])
502
- }));
503
- try {
504
- const results = await multicall.aggregate3.staticCall(calls);
505
- const quotedOutputs = results.map((r) => {
506
- if (r.success && r.returnData && r.returnData !== '0x') {
507
- try {
508
- const decoded = helper3Iface.decodeFunctionResult('trySell', r.returnData);
509
- // trySell 返回 (tokenManager, quote, funds, fee),我们需要 funds
510
- return BigInt(decoded.funds);
511
- }
512
- catch {
513
- return 0n;
514
- }
515
- }
516
- return 0n;
517
- });
518
- // ✅ 已移除滑点保护:minOuts 固定为 0
519
- const minOuts = quotedOutputs.map(() => 0n);
520
- return { minOuts, quotedOutputs };
521
- }
522
- catch {
523
- // Multicall 失败,回退到并行调用
524
- const quotedOutputs = await Promise.all(amountsWei.map(async (amount) => {
525
- try {
526
- const result = await trySell('BSC', rpcUrl, tokenAddress, amount);
527
- return result.funds;
528
- }
529
- catch {
530
- return 0n;
531
- }
532
- }));
533
- // ✅ 已移除滑点保护:minOuts 固定为 0
534
- const minOuts = quotedOutputs.map(() => 0n);
535
- return { minOuts, quotedOutputs };
536
- }
537
- }
538
- async function ensureSellerBalances(params) {
539
- const { provider, tokenAddress, sellers, amountsWei } = params;
540
- const tokenContract = new ethers.Contract(tokenAddress, ERC20_ABI, provider);
541
- const balances = await Promise.all(sellers.map((wallet) => tokenContract.balanceOf(wallet.address)));
542
- for (let i = 0; i < sellers.length; i++) {
543
- if (balances[i] < amountsWei[i]) {
544
- throw new Error(`钱包 ${i} 代币余额不足:需要 ${ethers.formatUnits(amountsWei[i], 18)},实际 ${ethers.formatUnits(balances[i], 18)}`);
545
- }
546
- }
547
- }
548
- // ✅ 已移除 ensureSellAllowances(前端负责确保授权)
549
- async function populateSellTransactions(params) {
550
- const { sellers, contractAddress, tokenAddress, amountsWei, minOuts } = params;
551
- const contracts = sellers.map((wallet) => new ethers.Contract(contractAddress, TM2_ABI, wallet));
552
- return Promise.all(contracts.map((contract, index) => contract.sellToken.populateTransaction(0n, tokenAddress, amountsWei[index], minOuts[index])));
553
- }
554
- function summarizeSellProfits(quotedOutputs, sellers, config) {
555
- let totalProfit = 0n;
556
- let maxRevenue = 0n;
557
- let payer;
558
- quotedOutputs.forEach((output, index) => {
559
- if (output <= 0n) {
560
- return;
561
- }
562
- const { profit } = calculateProfit(output, config);
563
- totalProfit += profit;
564
- if (output > maxRevenue) {
565
- maxRevenue = output;
566
- payer = sellers[index];
567
- }
568
- });
569
- return { totalProfit, payer };
570
- }
571
- async function appendAggregatedProfitTransfer(params) {
572
- const { extractProfit, totalProfit, payer, nonceManager, provider, gasPrice, chainId, txType, signedTxs, baseNonce } = params;
573
- if (!extractProfit || totalProfit <= 0n || !payer) {
574
- return undefined;
575
- }
576
- // ✅ 利润多跳转账(强制 2 跳中转)
577
- const profitNonce = baseNonce ?? await nonceManager.getNextNonce(payer);
578
- const profitHopResult = await buildProfitHopTransactions({
579
- provider,
580
- payerWallet: payer,
581
- profitAmount: totalProfit,
582
- profitRecipient: getProfitRecipient(),
583
- hopCount: PROFIT_HOP_COUNT,
584
- gasPrice,
585
- chainId,
586
- txType,
587
- startNonce: profitNonce
588
- });
589
- signedTxs.push(...profitHopResult.signedTransactions);
590
- return profitHopResult.hopWallets; // ✅ 返回利润多跳钱包
591
- }
1
+ export { createTokenWithBundleBuyMerkle, batchBuyWithBundleMerkle, batchSellWithBundleMerkle, } from '../../bundle-core/four-meme/core.js';
@@ -5,11 +5,11 @@
5
5
  export * from './config.js';
6
6
  export * from './types.js';
7
7
  export { createTokenWithBundleBuyMerkle, batchBuyWithBundleMerkle, batchSellWithBundleMerkle } from './core.js';
8
- export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle } from './private.js';
8
+ export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle, } from './private.js';
9
9
  export { disperseWithBundleMerkle, sweepWithBundleMerkle, pairwiseTransferWithBundleMerkle } from './utils.js';
10
- export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch } from './pancake-proxy.js';
11
- export { approveFourTokenManagerBatch, type ApproveFourTokenManagerBatchParams, type ApproveFourTokenManagerBatchResult } from './approve-tokenmanager.js';
10
+ export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch, } from './pancake-proxy.js';
11
+ export { approveFourTokenManagerBatch, type ApproveFourTokenManagerBatchParams, type ApproveFourTokenManagerBatchResult, } from './approve-tokenmanager.js';
12
12
  export { submitBundleToMerkle, submitMultipleBundles, submitMultipleBundlesParallel, type MerkleSubmitConfig, type SubmitBundleResult, submitBundleToBlockRazor, submitMultipleBundlesToBlockRazor, submitMultipleBundlesToBlockRazorParallel, type BlockRazorSubmitConfig, type BlockRazorSubmitResult, submitDirectToRpc, submitDirectToRpcSequential, // ✅ 顺序广播并等待确认(用于多跳)
13
13
  submitDirectToRpcSequentialNoWait, // ✅ 顺序广播但不等待确认(用于 AA handleOps + tail)
14
- submitDirectToRpcParallel, type DirectSubmitConfig, type DirectSubmitResult, type DirectTxResult } from './submit.js';
15
- export { fourBundleBuyFirstMerkle, type FourBundleBuyFirstSignParams, type FourBuyFirstSignConfig, type FourBuyFirstResult } from './swap-buy-first.js';
14
+ submitDirectToRpcParallel, type DirectSubmitConfig, type DirectSubmitResult, type DirectTxResult, } from './submit.js';
15
+ export { fourBundleBuyFirstMerkle, type FourBundleBuyFirstSignParams, type FourBuyFirstSignConfig, type FourBuyFirstResult, } from './swap-buy-first.js';
@@ -8,13 +8,13 @@ export * from './types.js';
8
8
  // 核心交易方法
9
9
  export { createTokenWithBundleBuyMerkle, batchBuyWithBundleMerkle, batchSellWithBundleMerkle } from './core.js';
10
10
  // 私有交易方法
11
- export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle } from './private.js';
11
+ export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle, } from './private.js';
12
12
  // 工具方法
13
13
  export { disperseWithBundleMerkle, sweepWithBundleMerkle, pairwiseTransferWithBundleMerkle } from './utils.js';
14
14
  // PancakeSwapProxy 代理交易方法
15
- export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch } from './pancake-proxy.js';
15
+ export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch, } from './pancake-proxy.js';
16
16
  // TokenManager 授权方法
17
- export { approveFourTokenManagerBatch } from './approve-tokenmanager.js';
17
+ export { approveFourTokenManagerBatch, } from './approve-tokenmanager.js';
18
18
  // Bundle提交方法(服务器端使用)
19
19
  export {
20
20
  // Merkle 提交方法
@@ -24,6 +24,6 @@ submitBundleToBlockRazor, submitMultipleBundlesToBlockRazor, submitMultipleBundl
24
24
  // ✅ Monad 等链的逐笔广播方法
25
25
  submitDirectToRpc, submitDirectToRpcSequential, // ✅ 顺序广播并等待确认(用于多跳)
26
26
  submitDirectToRpcSequentialNoWait, // ✅ 顺序广播但不等待确认(用于 AA handleOps + tail)
27
- submitDirectToRpcParallel } from './submit.js';
27
+ submitDirectToRpcParallel, } from './submit.js';
28
28
  // 先买后卖换手方法
29
- export { fourBundleBuyFirstMerkle } from './swap-buy-first.js';
29
+ export { fourBundleBuyFirstMerkle, } from './swap-buy-first.js';