four-flap-meme-sdk 2.2.2 → 2.2.3

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 +86 -278
  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 +101 -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 +83 -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 +77 -0
  339. package/dist/shared/flap/portal-create-token.js +214 -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
@@ -7,6 +7,7 @@
7
7
  * 3. 买到毕业(代币上 DEX)
8
8
  * 4. 多个钱包在 PancakeSwap(外盘)继续买入
9
9
  */
10
+ import type { TaxVaultConfig } from '../vault.js';
10
11
  import { type FlapSignConfig } from './config.js';
11
12
  import type { MerkleSignedResult } from './types.js';
12
13
  export type CreateToDexChain = 'bsc' | 'xlayer' | 'base';
@@ -75,17 +76,21 @@ export interface FlapCreateToDexParams {
75
76
  dexId?: number;
76
77
  /** V4 参数:LP 费率档位(0=STANDARD 0.25%, 1=LOW 0.01%, 2=HIGH 1%) */
77
78
  lpFeeProfile?: number;
78
- /** Tax Token V2 高级税收配置(启用后使用 newTokenV5) */
79
+ /** Tax Token V2/V3 高级税收配置(启用后使用 newTokenV6 TOKEN_TAXED_V3) */
79
80
  taxV2Config?: {
80
81
  taxDuration: number;
81
82
  antiFarmerDuration: number;
83
+ buyTaxRate?: number;
84
+ sellTaxRate?: number;
85
+ dividendToken?: string;
86
+ commissionReceiver?: string;
82
87
  mktBps: number;
83
88
  deflationBps: number;
84
89
  dividendBps: number;
85
90
  lpBps: number;
86
91
  minimumShareBalance?: number;
87
92
  /** ✅ Tax Vault 金库配置(可选) */
88
- vaultConfig?: import('../vault.js').TaxVaultConfig;
93
+ vaultConfig?: TaxVaultConfig;
89
94
  };
90
95
  /** V3 扩展 ID */
91
96
  extensionID?: string;
@@ -8,67 +8,67 @@
8
8
  * 4. 多个钱包在 PancakeSwap(外盘)继续买入
9
9
  */
10
10
  import { ethers, Contract, Wallet } from 'ethers';
11
- import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
11
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
12
12
  import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from '../constants.js';
13
- import { buildNewTokenV6WithVaultParams, VAULT_PORTAL_ADDRESSES, VAULT_PORTAL_ABI } from '../vault.js';
14
- import { PROFIT_CONFIG, ZERO_ADDRESS } from '../../../utils/constants.js';
13
+ import { normalizeTaxLaunchConfig, populateCreateTokenTransaction, } from '../portal-create-token.js';
14
+ import { ZERO_ADDRESS } from '../../../shared/constants/index.js';
15
15
  import { GAS_LIMITS } from '../../constants/index.js';
16
- import { getGasPriceConfig, getTxType, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, PORTAL_ABI } from './config.js';
16
+ import { getGasPriceConfig, getTxType, getProfitRecipient, getProfitRateBps, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, PORTAL_ABI, } from './config.js';
17
17
  // ==================== ERC20 ABI ====================
18
18
  const ERC20_ABI = [
19
19
  {
20
- type: "function",
21
- name: "approve",
20
+ type: 'function',
21
+ name: 'approve',
22
22
  inputs: [
23
- { name: "spender", type: "address" },
24
- { name: "amount", type: "uint256" }
23
+ { name: 'spender', type: 'address' },
24
+ { name: 'amount', type: 'uint256' },
25
25
  ],
26
- outputs: [{ name: "", type: "bool" }],
27
- stateMutability: "nonpayable"
28
- }
26
+ outputs: [{ name: '', type: 'bool' }],
27
+ stateMutability: 'nonpayable',
28
+ },
29
29
  ];
30
30
  // ==================== PancakeSwap Router ABI ====================
31
31
  const PANCAKE_ROUTER_ABI = [
32
32
  {
33
- type: "function",
34
- name: "exactInputSingle",
33
+ type: 'function',
34
+ name: 'exactInputSingle',
35
35
  inputs: [
36
36
  {
37
- name: "params",
38
- type: "tuple",
37
+ name: 'params',
38
+ type: 'tuple',
39
39
  components: [
40
- { name: "tokenIn", type: "address" },
41
- { name: "tokenOut", type: "address" },
42
- { name: "fee", type: "uint24" },
43
- { name: "recipient", type: "address" },
44
- { name: "amountIn", type: "uint256" },
45
- { name: "amountOutMinimum", type: "uint256" },
46
- { name: "sqrtPriceLimitX96", type: "uint160" }
47
- ]
48
- }
40
+ { name: 'tokenIn', type: 'address' },
41
+ { name: 'tokenOut', type: 'address' },
42
+ { name: 'fee', type: 'uint24' },
43
+ { name: 'recipient', type: 'address' },
44
+ { name: 'amountIn', type: 'uint256' },
45
+ { name: 'amountOutMinimum', type: 'uint256' },
46
+ { name: 'sqrtPriceLimitX96', type: 'uint160' },
47
+ ],
48
+ },
49
49
  ],
50
- outputs: [{ name: "amountOut", type: "uint256" }],
51
- stateMutability: "payable"
50
+ outputs: [{ name: 'amountOut', type: 'uint256' }],
51
+ stateMutability: 'payable',
52
52
  },
53
53
  {
54
- type: "function",
55
- name: "multicall",
56
- inputs: [{ name: "data", type: "bytes[]" }],
57
- outputs: [{ name: "results", type: "bytes[]" }],
58
- stateMutability: "payable"
54
+ type: 'function',
55
+ name: 'multicall',
56
+ inputs: [{ name: 'data', type: 'bytes[]' }],
57
+ outputs: [{ name: 'results', type: 'bytes[]' }],
58
+ stateMutability: 'payable',
59
59
  },
60
60
  {
61
- type: "function",
62
- name: "swapExactTokensForTokens",
61
+ type: 'function',
62
+ name: 'swapExactTokensForTokens',
63
63
  inputs: [
64
- { name: "amountIn", type: "uint256" },
65
- { name: "amountOutMin", type: "uint256" },
66
- { name: "path", type: "address[]" },
67
- { name: "to", type: "address" }
64
+ { name: 'amountIn', type: 'uint256' },
65
+ { name: 'amountOutMin', type: 'uint256' },
66
+ { name: 'path', type: 'address[]' },
67
+ { name: 'to', type: 'address' },
68
68
  ],
69
- outputs: [{ name: "amountOut", type: "uint256" }],
70
- stateMutability: "payable"
71
- }
69
+ outputs: [{ name: 'amountOut', type: 'uint256' }],
70
+ stateMutability: 'payable',
71
+ },
72
72
  ];
73
73
  // ==================== DEX 地址常量 ====================
74
74
  const DEX_ADDRESSES = {
@@ -85,7 +85,7 @@ const DEX_ADDRESSES = {
85
85
  // ✅ Base 使用 Uniswap V3 SwapRouter02
86
86
  UNISWAP_SMART_ROUTER: '0x2626664c2603336E57B271c5C0b26F421741e481',
87
87
  WETH: '0x4200000000000000000000000000000000000006',
88
- }
88
+ },
89
89
  };
90
90
  // ==================== 链常量 ====================
91
91
  // 获取链配置
@@ -102,8 +102,7 @@ function getChainConfig(chain) {
102
102
  }
103
103
  // ==================== 工具函数 ====================
104
104
  /** 构建 ERC20 approve 交易 */
105
- async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amount, nonce, gasPrice, txType, chainId = 56 // ✅ 添加 chainId 参数
106
- ) {
105
+ async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amount, nonce, gasPrice, txType, chainId = 56) {
107
106
  const erc20Interface = new ethers.Interface(ERC20_ABI);
108
107
  const data = erc20Interface.encodeFunctionData('approve', [spenderAddress, amount]);
109
108
  const tx = {
@@ -111,9 +110,9 @@ async function buildApproveTransaction(wallet, tokenAddress, spenderAddress, amo
111
110
  data,
112
111
  from: wallet.address,
113
112
  nonce,
114
- gasLimit: BigInt(100000), // approve 交易 gas 较低
113
+ gasLimit: BigInt(100_000), // approve 交易 gas 较低
115
114
  chainId,
116
- type: txType
115
+ type: txType,
117
116
  };
118
117
  if (txType === 2) {
119
118
  const priorityFee = gasPrice / 10n === 0n ? 1n : gasPrice / 10n;
@@ -167,11 +166,11 @@ function parseQuoteAmount(amount, useNativeToken, quoteTokenDecimals) {
167
166
  * 若 SDK 这里再次 splitAmount,会导致实际 buyAmount 与 UI/预期不一致,并引发余额不足(insufficient funds)。
168
167
  */
169
168
  function resolveBuyerAmounts(buyers, totalAmountStr, useNativeToken, quoteTokenDecimals) {
170
- const provided = buyers.map(b => b?.buyAmount).filter(v => v != null && String(v).trim() !== '');
169
+ const provided = buyers.map((b) => b?.buyAmount).filter((v) => v != null && String(v).trim() !== '');
171
170
  const allProvided = provided.length === buyers.length;
172
171
  if (allProvided) {
173
172
  // ✅ 所有买家都显式提供了 buyAmount:按传入金额构建,但要修正“浮点/四舍五入导致总和偏差”
174
- const amounts = buyers.map(b => parseQuoteAmount(String(b.buyAmount), useNativeToken, quoteTokenDecimals));
173
+ const amounts = buyers.map((b) => parseQuoteAmount(String(b.buyAmount), useNativeToken, quoteTokenDecimals));
175
174
  const totalWei = parseQuoteAmount(totalAmountStr, useNativeToken, quoteTokenDecimals);
176
175
  const sum = amounts.reduce((a, b) => a + b, 0n);
177
176
  const delta = totalWei - sum;
@@ -201,7 +200,7 @@ function resolveBuyerAmounts(buyers, totalAmountStr, useNativeToken, quoteTokenD
201
200
  * 5. 利润多跳转账
202
201
  */
203
202
  export async function flapBundleCreateToDex(params) {
204
- const { chain, devPrivateKey, tokenInfo, tokenAddress, quoteToken, quoteTokenDecimals = 18, curveBuyers, curveTotalBuyAmount, enableDexBuy = false, dexBuyers = [], dexTotalBuyAmount, dexPoolType = 'v3', v3Fee = 2500, config } = params;
203
+ const { chain, devPrivateKey, tokenInfo, tokenAddress, quoteToken, quoteTokenDecimals = 18, curveBuyers, curveTotalBuyAmount, enableDexBuy = false, dexBuyers = [], dexTotalBuyAmount, dexPoolType = 'v3', v3Fee = 2500, config, } = params;
205
204
  // 验证参数
206
205
  if (curveBuyers.length === 0) {
207
206
  throw new Error('至少需要一个内盘买入钱包');
@@ -235,34 +234,30 @@ export async function flapBundleCreateToDex(params) {
235
234
  // 创建 Provider
236
235
  const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
237
236
  chainId,
238
- name: chain.toUpperCase()
237
+ name: chain.toUpperCase(),
239
238
  });
240
239
  const portalAddress = FLAP_PORTAL_ADDRESSES[chain.toUpperCase()];
241
240
  const originalPortalAddress = FLAP_ORIGINAL_PORTAL_ADDRESSES[chain.toUpperCase()];
242
241
  const nonceManager = new NonceManager(provider);
243
242
  // 创建钱包实例
244
243
  const devWallet = new Wallet(devPrivateKey, provider);
245
- const curveWallets = curveBuyers.map(b => ({
244
+ const curveWallets = curveBuyers.map((b) => ({
246
245
  wallet: new Wallet(b.privateKey, provider),
247
- buyAmount: b.buyAmount
246
+ buyAmount: b.buyAmount,
248
247
  }));
249
- const dexWallets = (enableDexBuy ? dexBuyers : []).map(b => ({
248
+ const dexWallets = (enableDexBuy ? dexBuyers : []).map((b) => ({
250
249
  wallet: new Wallet(b.privateKey, provider),
251
- buyAmount: b.buyAmount
250
+ buyAmount: b.buyAmount,
252
251
  }));
253
252
  // ✅ 并行获取 gasPrice + 所有钱包 nonces
254
- const allWallets = [
255
- devWallet,
256
- ...curveWallets.map(c => c.wallet),
257
- ...dexWallets.map(d => d.wallet)
258
- ];
253
+ const allWallets = [devWallet, ...curveWallets.map((c) => c.wallet), ...dexWallets.map((d) => d.wallet)];
259
254
  const uniqueWallets = allWallets.filter((w, i) => {
260
255
  const addr = w.address.toLowerCase();
261
- return allWallets.findIndex(x => x.address.toLowerCase() === addr) === i;
256
+ return allWallets.findIndex((x) => x.address.toLowerCase() === addr) === i;
262
257
  });
263
258
  const [gasPrice, noncesArray] = await Promise.all([
264
259
  getOptimizedGasPrice(provider, getGasPriceConfig(config)),
265
- nonceManager.getNextNoncesForWallets(uniqueWallets)
260
+ nonceManager.getNextNoncesForWallets(uniqueWallets),
266
261
  ]);
267
262
  // 构建 nonces Map
268
263
  const noncesMap = new Map();
@@ -282,9 +277,8 @@ export async function flapBundleCreateToDex(params) {
282
277
  dexBuyAmounts = resolveBuyerAmounts(dexBuyers, dexTotalBuyAmount, useNativeToken, quoteTokenDecimals);
283
278
  }
284
279
  // ✅ 计算利润
285
- const totalBuyAmount = curveBuyAmounts.reduce((a, b) => a + b, 0n)
286
- + dexBuyAmounts.reduce((a, b) => a + b, 0n);
287
- const profitAmount = (totalBuyAmount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
280
+ const totalBuyAmount = curveBuyAmounts.reduce((a, b) => a + b, 0n) + dexBuyAmounts.reduce((a, b) => a + b, 0n);
281
+ const profitAmount = (totalBuyAmount * BigInt(getProfitRateBps())) / 10000n;
288
282
  // ==================== 构建交易 ====================
289
283
  const allTransactions = [];
290
284
  // 使用第一个内盘买家作为贿赂支付者(提高 bundle 打包优先级)
@@ -301,7 +295,7 @@ export async function flapBundleCreateToDex(params) {
301
295
  gasPrice,
302
296
  gasLimit: GAS_LIMITS.BRIBE,
303
297
  chainId,
304
- type: txType
298
+ type: txType,
305
299
  });
306
300
  allTransactions.push(bribeTx);
307
301
  }
@@ -311,137 +305,37 @@ export async function flapBundleCreateToDex(params) {
311
305
  const devNonce = noncesMap.get(devAddr);
312
306
  noncesMap.set(devAddr, devNonce + 1);
313
307
  const originalPortal = new Contract(originalPortalAddress, PORTAL_ABI, devWallet);
314
- // 判断使用哪个版本的 newToken
315
- // V5: 提供了 taxV2Config(Tax Token V2 高级税收分配)
316
- // V4: 提供了 dexId lpFeeProfile(支持 DEX 选择和 LP 费率配置)
317
- // V3: 提供了 extensionID(支持扩展数据)
318
- // V2: 默认
319
- const useV5 = params.taxV2Config !== undefined && (params.taxRate ?? 0) > 0;
320
- const useV4 = !useV5 && (params.dexId !== undefined || params.lpFeeProfile !== undefined);
321
- const useV3 = !useV5 && !useV4 && !!params.extensionID;
322
- let createUnsigned;
323
- if (useV5) {
324
- // V5: Tax Token V2 高级税收分配
325
- const tv2 = params.taxV2Config;
326
- // 验证税收分配总计必须为 10000
327
- const total = tv2.mktBps + tv2.deflationBps + tv2.dividendBps + tv2.lpBps;
328
- if (total !== 10000) {
329
- throw new Error(`Tax distribution must sum to 10000 (100%), got ${total}`);
330
- }
331
- // ✅ 判断是否使用金库模式(VaultPortal.newTokenV6WithVault + TOKEN_TAXED_V3)
332
- const hasVault = tv2.vaultConfig && tv2.vaultConfig.vaultType !== 'none';
333
- if (hasVault) {
334
- // ✅ 金库模式:通过 VaultPortal.newTokenV6WithVault 创建代币
335
- const chainKey = chain.toUpperCase();
336
- const vaultPortalAddr = VAULT_PORTAL_ADDRESSES[chainKey];
337
- if (!vaultPortalAddr) {
338
- throw new Error(`链 "${chain}" 不支持 Tax Vault 金库功能`);
339
- }
340
- const vaultPortal = new Contract(vaultPortalAddr, VAULT_PORTAL_ABI, devWallet);
341
- const v6Params = buildNewTokenV6WithVaultParams({
342
- tokenInfo,
343
- taxV2: tv2,
344
- chain: chainKey,
345
- salt: params.salt ?? ('0x' + '00'.repeat(32)),
346
- taxRate: params.taxRate ?? 0,
347
- dexThresh: params.dexThresh,
348
- migratorType: params.migratorType,
349
- quoteToken: inputToken,
350
- quoteAmt: 0n,
351
- dexId: params.dexId,
352
- lpFeeProfile: params.lpFeeProfile,
353
- });
354
- createUnsigned = await vaultPortal.newTokenV6WithVault.populateTransaction(v6Params);
355
- }
356
- else {
357
- // 标准 V5: Portal.newTokenV5(无金库)
358
- createUnsigned = await originalPortal.newTokenV5.populateTransaction({
359
- name: tokenInfo.name,
360
- symbol: tokenInfo.symbol,
361
- meta: tokenInfo.meta,
362
- dexThresh: (params.dexThresh ?? 1) & 0xff,
363
- salt: params.salt ?? '0x' + '00'.repeat(32),
364
- taxRate: (params.taxRate ?? 0) & 0xffff,
365
- migratorType: (params.migratorType ?? 0) & 0xff,
366
- quoteToken: inputToken,
367
- quoteAmt: 0n,
368
- beneficiary: devWallet.address,
369
- permitData: '0x',
370
- extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
371
- extensionData: params.extensionData ?? '0x',
372
- dexId: (params.dexId ?? 0) & 0xff,
373
- lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff,
374
- taxDuration: BigInt(tv2.taxDuration),
375
- antiFarmerDuration: BigInt(tv2.antiFarmerDuration),
376
- mktBps: tv2.mktBps & 0xffff,
377
- deflationBps: tv2.deflationBps & 0xffff,
378
- dividendBps: tv2.dividendBps & 0xffff,
379
- lpBps: tv2.lpBps & 0xffff,
380
- minimumShareBalance: BigInt(tv2.minimumShareBalance ?? 10000) * (10n ** 18n),
381
- });
382
- }
383
- }
384
- else if (useV4) {
385
- // V4: 支持 DEX ID 和 LP 费率配置(用于选择池子费率)
386
- createUnsigned = await originalPortal.newTokenV4.populateTransaction({
387
- name: tokenInfo.name,
388
- symbol: tokenInfo.symbol,
389
- meta: tokenInfo.meta,
390
- dexThresh: (params.dexThresh ?? 1) & 0xff,
391
- salt: params.salt ?? '0x' + '00'.repeat(32),
392
- taxRate: (params.taxRate ?? 0) & 0xffff,
393
- migratorType: (params.migratorType ?? 0) & 0xff,
394
- quoteToken: inputToken,
395
- quoteAmt: 0n,
396
- beneficiary: devWallet.address,
397
- permitData: '0x',
398
- extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
399
- extensionData: params.extensionData ?? '0x',
400
- dexId: (params.dexId ?? 0) & 0xff,
401
- lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff
402
- });
403
- }
404
- else if (useV3) {
405
- // V3: 支持扩展数据
406
- createUnsigned = await originalPortal.newTokenV3.populateTransaction({
407
- name: tokenInfo.name,
408
- symbol: tokenInfo.symbol,
409
- meta: tokenInfo.meta,
410
- dexThresh: (params.dexThresh ?? 1) & 0xff,
411
- salt: params.salt ?? '0x' + '00'.repeat(32),
412
- taxRate: (params.taxRate ?? 0) & 0xffff,
413
- migratorType: (params.migratorType ?? 0) & 0xff,
414
- quoteToken: inputToken,
415
- quoteAmt: 0n,
416
- beneficiary: devWallet.address,
417
- permitData: '0x',
418
- extensionID: params.extensionID,
419
- extensionData: params.extensionData ?? '0x'
420
- });
421
- }
422
- else {
423
- // V2: 基础版本
424
- createUnsigned = await originalPortal.newTokenV2.populateTransaction({
425
- name: tokenInfo.name,
426
- symbol: tokenInfo.symbol,
427
- meta: tokenInfo.meta,
428
- dexThresh: (params.dexThresh ?? 1) & 0xff,
429
- salt: params.salt ?? '0x' + '00'.repeat(32),
430
- taxRate: (params.taxRate ?? 0) & 0xffff,
431
- migratorType: (params.migratorType ?? 0) & 0xff,
432
- quoteToken: inputToken,
433
- quoteAmt: 0n,
434
- beneficiary: devWallet.address,
435
- permitData: '0x'
436
- });
437
- }
308
+ const normalizedTax = normalizeTaxLaunchConfig(params.taxV2Config, params.taxRate);
309
+ const isTaxLaunch = !!normalizedTax || (params.taxRate ?? 0) > 0;
310
+ const hasVault = !!normalizedTax?.vaultConfig && normalizedTax.vaultConfig.vaultType !== 'none';
311
+ const useV3Standard = !isTaxLaunch &&
312
+ !hasVault &&
313
+ (params.lpFeeProfile !== undefined || params.dexId !== undefined);
314
+ const createUnsigned = await populateCreateTokenTransaction({
315
+ chain,
316
+ devWallet,
317
+ originalPortal,
318
+ tokenInfo,
319
+ quoteToken: inputToken,
320
+ beneficiary: devWallet.address,
321
+ dexThresh: params.dexThresh,
322
+ salt: params.salt,
323
+ migratorType: params.migratorType,
324
+ taxRate: params.taxRate,
325
+ dexId: params.dexId,
326
+ lpFeeProfile: params.lpFeeProfile,
327
+ extensionID: params.extensionID,
328
+ extensionData: params.extensionData,
329
+ useV3Standard,
330
+ taxConfig: normalizedTax,
331
+ });
438
332
  const createTx = {
439
333
  ...createUnsigned,
440
334
  from: devWallet.address,
441
335
  nonce: devNonce,
442
336
  gasLimit: finalGasLimit,
443
337
  chainId,
444
- type: txType
338
+ type: txType,
445
339
  };
446
340
  if (txType === 2) {
447
341
  createTx.maxFeePerGas = gasPrice;
@@ -463,8 +357,7 @@ export async function flapBundleCreateToDex(params) {
463
357
  if (!useNativeToken) {
464
358
  const approveNonce = noncesMap.get(addr);
465
359
  noncesMap.set(addr, approveNonce + 1);
466
- const approveTx = await buildApproveTransaction(wallet, quoteToken, portalAddress, curveBuyAmounts[i], approveNonce, gasPrice, txType, chainId // ✅ 传递 chainId
467
- );
360
+ const approveTx = await buildApproveTransaction(wallet, quoteToken, portalAddress, curveBuyAmounts[i], approveNonce, gasPrice, txType, chainId);
468
361
  signedTxs.push(approveTx);
469
362
  }
470
363
  // 构建买入交易
@@ -480,16 +373,18 @@ export async function flapBundleCreateToDex(params) {
480
373
  inputAmount: curveBuyAmounts[i],
481
374
  minOutputAmount: 0n,
482
375
  permitData: '0x', // 不使用 permit,使用链上 approve
483
- extensionData
376
+ extensionData,
484
377
  }, useNativeToken ? { value: curveBuyAmounts[i] } : {});
485
378
  // 最后一个买家触发毕业,需要更多 gas
486
379
  const isLastBuyer = i === curveWallets.length - 1;
487
380
  // ⚠️ 触发毕业(创建 Pancake V3 池 + Mint 初始流动性)会非常耗 gas。
488
381
  // 链上成功样例 0x29b173... 的 gasLimit=8,000,000,gasUsed≈6,647,149。
489
382
  // Flap 官方示例脚本也使用 last_buy=8_000_000。
490
- const LAST_BUY_GAS_LIMIT = BigInt(8000000);
383
+ const LAST_BUY_GAS_LIMIT = BigInt(8_000_000);
491
384
  const buyGasLimit = isLastBuyer
492
- ? (finalGasLimit > LAST_BUY_GAS_LIMIT ? finalGasLimit : LAST_BUY_GAS_LIMIT)
385
+ ? finalGasLimit > LAST_BUY_GAS_LIMIT
386
+ ? finalGasLimit
387
+ : LAST_BUY_GAS_LIMIT
493
388
  : finalGasLimit;
494
389
  const tx = {
495
390
  ...unsigned,
@@ -498,7 +393,7 @@ export async function flapBundleCreateToDex(params) {
498
393
  gasLimit: buyGasLimit,
499
394
  chainId,
500
395
  type: txType,
501
- value: useNativeToken ? curveBuyAmounts[i] : 0n
396
+ value: useNativeToken ? curveBuyAmounts[i] : 0n,
502
397
  };
503
398
  if (txType === 2) {
504
399
  tx.maxFeePerGas = gasPrice;
@@ -513,11 +408,11 @@ export async function flapBundleCreateToDex(params) {
513
408
  });
514
409
  const curveBuyResults = await Promise.all(curveBuyTxPromises);
515
410
  // 展平数组:每个钱包可能有 [approve, buy] 或只有 [buy]
516
- curveBuyResults.forEach(txs => allTransactions.push(...txs));
411
+ curveBuyResults.forEach((txs) => allTransactions.push(...txs));
517
412
  // 4. 外盘买入交易(直接调用 PancakeSwap Router)
518
413
  // ✅ 重要修改:直接调用 PancakeSwap SmartRouter
519
414
  // 参考官方代码: flap-bundle-release/app/v2/pvp/001_launch_buy.ts
520
- //
415
+ //
521
416
  // ⚠️ 关键:税代币(migratorType=1)毕业到 V2 池,必须用 swapExactTokensForTokens
522
417
  // 普通代币(migratorType=0)毕业到 V3 池,使用 exactInputSingle
523
418
  if (enableDexBuy && dexWallets.length > 0) {
@@ -540,7 +435,7 @@ export async function flapBundleCreateToDex(params) {
540
435
  // migratorType === 1 (V2_MIGRATOR) → 毕业到 V2 池 → 必须使用 V2 买入
541
436
  // migratorType === 0 (V3_MIGRATOR) → 毕业到 V3 池 → 使用 V3 买入
542
437
  // 参考: flap-bundle-release 中税代币使用 PoolType.V2,普通代币使用 PoolType.V3
543
- const effectiveDexPoolType = (params.migratorType === 1) ? 'v2' : (dexPoolType || 'v3');
438
+ const effectiveDexPoolType = params.migratorType === 1 ? 'v2' : dexPoolType || 'v3';
544
439
  // 获取 V3 费率(仅 V3 池使用)
545
440
  const dexV3Fee = actualV3Fee;
546
441
  const dexBuyTxPromises = dexWallets.map(async ({ wallet }, i) => {
@@ -569,7 +464,7 @@ export async function flapBundleCreateToDex(params) {
569
464
  buyAmount,
570
465
  0n, // amountOutMin: 不设置滑点保护(Bundle 中可以接受)
571
466
  [tokenIn, tokenAddress], // path: WBNB/QuoteToken → Token
572
- wallet.address // recipient
467
+ wallet.address, // recipient
573
468
  ]);
574
469
  multicallData = routerInterface.encodeFunctionData('multicall', [[swapData]]);
575
470
  }
@@ -582,14 +477,14 @@ export async function flapBundleCreateToDex(params) {
582
477
  recipient: wallet.address,
583
478
  amountIn: buyAmount,
584
479
  amountOutMinimum: 0n, // 不设置滑点保护(Bundle 中可以接受)
585
- sqrtPriceLimitX96: 0n
480
+ sqrtPriceLimitX96: 0n,
586
481
  };
587
482
  const exactInputSingleData = routerInterface.encodeFunctionData('exactInputSingle', [exactInputSingleParams]);
588
483
  multicallData = routerInterface.encodeFunctionData('multicall', [[exactInputSingleData]]);
589
484
  }
590
485
  // ⚠️ Pancake SmartRouter 外盘买的 gas 不能太小,否则 bundle 预执行会直接失败。
591
486
  // Flap 官方示例配置 dex_buy=5_000_000(flap-bundle-release/app/configs/global.ts)。
592
- const DEX_BUY_GAS_LIMIT = BigInt(8000000);
487
+ const DEX_BUY_GAS_LIMIT = BigInt(8_000_000);
593
488
  const tx = {
594
489
  to: smartRouterAddress,
595
490
  data: multicallData,
@@ -597,7 +492,7 @@ export async function flapBundleCreateToDex(params) {
597
492
  gasLimit: DEX_BUY_GAS_LIMIT,
598
493
  chainId,
599
494
  type: txType,
600
- value: useNativeToken ? buyAmount : 0n
495
+ value: useNativeToken ? buyAmount : 0n,
601
496
  };
602
497
  if (txType === 2) {
603
498
  tx.maxFeePerGas = gasPrice;
@@ -612,7 +507,7 @@ export async function flapBundleCreateToDex(params) {
612
507
  });
613
508
  const dexBuyResults = await Promise.all(dexBuyTxPromises);
614
509
  // 展平数组:每个钱包可能有 [approve, buy] 或只有 [buy]
615
- dexBuyResults.forEach(txs => allTransactions.push(...txs));
510
+ dexBuyResults.forEach((txs) => allTransactions.push(...txs));
616
511
  }
617
512
  // 5. 利润多跳转账
618
513
  let profitHopWallets;
@@ -630,7 +525,7 @@ export async function flapBundleCreateToDex(params) {
630
525
  gasPrice,
631
526
  chainId,
632
527
  txType,
633
- startNonce: profitNonce
528
+ startNonce: profitNonce,
634
529
  });
635
530
  allTransactions.push(...profitResult.signedTransactions);
636
531
  profitHopWallets = profitResult.hopWallets;
@@ -647,7 +542,7 @@ export async function flapBundleCreateToDex(params) {
647
542
  enableDexBuy,
648
543
  dexBuyerCount: dexBuyers.length,
649
544
  dexTotalBuy: dexBuyAmounts.length > 0 ? ethers.formatEther(dexBuyAmounts.reduce((a, b) => a + b, 0n)) : '0',
650
- profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined
651
- }
545
+ profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
546
+ },
652
547
  };
653
548
  }