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
@@ -1,112 +1,16 @@
1
+ /**
2
+ * tm-bundle - 主函数
3
+ */
1
4
  import { ethers, Wallet, JsonRpcProvider } from 'ethers';
2
- import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA } from '../shared/clients/club48.js';
3
- import { ADDRESSES, PROFIT_CONFIG } from '../utils/constants.js';
4
- import { GAS_LIMITS } from '../shared/constants/index.js';
5
+ import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA, } from '../shared/clients/club48.js';
6
+ import { ADDRESSES } from '../shared/constants/index.js';
7
+ import { GAS_LIMITS, getProfitRateBps, getProfitRecipient } from '../shared/constants/index.js';
5
8
  import { buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../utils/bundle-helpers.js';
6
- import TM2Abi from '../shared/abis/TokenManager2.json' with { type: 'json' };
9
+ import TM2Abi from '../abis/contracts/TokenManager2.json' with { type: 'json' };
7
10
  import { FourClient, buildLoginMessage } from '../shared/clients/four.js';
8
11
  import { trySell } from './tm.js';
9
- /**
10
- * four.meme Bundle 交易方法
11
- * 使用 48.club Bundle 服务实现原子化交易
12
- */
13
- // 错误信息国际化
14
- const ERRORS = {
15
- NO_PRIVATE_KEY: {
16
- en: 'At least 1 private key (creator) is required',
17
- zh: '至少需要 1 个私钥(创建者)'
18
- },
19
- AMOUNT_MISMATCH: {
20
- en: (buyCount, buyerCount) => `Buy amount count (${buyCount}) must equal buyer count (${buyerCount})`,
21
- zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})`
22
- },
23
- IMAGE_REQUIRED: {
24
- en: 'Either imageUrl or imageFile must be provided',
25
- zh: '必须提供 imageUrl 或 imageFile'
26
- },
27
- KEY_AMOUNT_MISMATCH: {
28
- en: 'Private key count and amount count must match',
29
- zh: '私钥和购买金额数量必须一致'
30
- },
31
- SELL_KEY_AMOUNT_MISMATCH: {
32
- en: 'Private key count and sell amount count must match',
33
- zh: '私钥和卖出数量必须一致'
34
- }
35
- };
36
- // 获取错误信息(根据环境语言)
37
- function getErrorMessage(key, ...args) {
38
- const lang = (process.env.LANG || process.env.LANGUAGE || 'en').toLowerCase().includes('zh') ? 'zh' : 'en';
39
- const message = ERRORS[key][lang];
40
- return typeof message === 'function' ? message(...args) : message;
41
- }
42
- // ========================================
43
- // 辅助函数
44
- // ========================================
45
- /**
46
- * 等待交易上链(不使用 club48 客户端)
47
- */
48
- async function waitForBundleWithProvider(provider, firstTxSigned, bundleUuid) {
49
- const maxAttempts = 60; // 最多等待 60 秒
50
- for (let i = 0; i < maxAttempts; i++) {
51
- await new Promise(resolve => setTimeout(resolve, 1000));
52
- try {
53
- const txHash = ethers.keccak256(firstTxSigned);
54
- const receipt = await provider.getTransactionReceipt(txHash);
55
- if (receipt) {
56
- if (receipt.status === 1) {
57
- return { status: 'INCLUDED', includedBlock: receipt.blockNumber };
58
- }
59
- else {
60
- return { status: 'FAILED' };
61
- }
62
- }
63
- }
64
- catch (error) {
65
- // 继续等待
66
- }
67
- }
68
- return { status: 'PENDING' };
69
- }
70
- // ========================================
71
- // 辅助函数:估算 gas 并应用配置
72
- // ========================================
73
- /**
74
- * 估算 gas 并应用用户配置的倍数
75
- */
76
- async function estimateGasWithMultiplier(provider, txRequest, multiplier) {
77
- const estimated = await provider.estimateGas(txRequest);
78
- const mult = multiplier ?? 1.2; // 默认 20% 安全余量
79
- return BigInt(Math.ceil(Number(estimated) * mult));
80
- }
81
- /**
82
- * 获取交易类型(用户可配置)
83
- */
84
- function getTxType(config) {
85
- return config.txType ?? 0; // 默认 Legacy (type 0),适用于 48.club/BSC
86
- }
87
- /**
88
- * 构建完整的交易请求(包含 gas 估算和交易类型)
89
- */
90
- async function buildTxRequest(provider, unsigned, from, nonce, gasPrice, config, value) {
91
- const gasLimit = await estimateGasWithMultiplier(provider, { ...unsigned, from, value }, config.gasLimitMultiplier);
92
- return {
93
- ...unsigned,
94
- from,
95
- nonce,
96
- gasLimit,
97
- gasPrice,
98
- chainId: 56,
99
- type: getTxType(config)
100
- };
101
- }
102
- /**
103
- * four.meme: 创建代币 + 捆绑购买
104
- *
105
- * 用户只需传入:
106
- * - dev 私钥 + N 个买家私钥
107
- * - 对应的购买金额
108
- * - 代币基本信息
109
- */
12
+ import { getErrorMessage, waitForBundleWithProvider, } from './tm-bundle-helpers.js';
13
+ const TM2_ABI = TM2Abi;
110
14
  export async function createTokenWithBundleBuy(params) {
111
15
  const { privateKeys, buyAmounts, tokenInfo, config } = params;
112
16
  if (privateKeys.length === 0) {
@@ -122,7 +26,7 @@ export async function createTokenWithBundleBuy(params) {
122
26
  if (!config.customSubmitFn) {
123
27
  club48 = new Club48Client({
124
28
  endpoint: 'https://puissant-bsc.48.club',
125
- explorerEndpoint: config.club48ExplorerEndpoint
29
+ explorerEndpoint: config.club48ExplorerEndpoint,
126
30
  });
127
31
  }
128
32
  const fourClient = new FourClient({ baseUrl: config.fourApiUrl });
@@ -130,7 +34,7 @@ export async function createTokenWithBundleBuy(params) {
130
34
  const nonce = await fourClient.generateNonce({
131
35
  accountAddress: devWallet.address,
132
36
  verifyType: 'LOGIN',
133
- networkCode: 'BSC'
37
+ networkCode: 'BSC',
134
38
  });
135
39
  const loginSignature = await devWallet.signMessage(buildLoginMessage(nonce));
136
40
  const accessToken = await fourClient.loginDex({
@@ -140,9 +44,9 @@ export async function createTokenWithBundleBuy(params) {
140
44
  address: devWallet.address,
141
45
  networkCode: 'BSC',
142
46
  signature: loginSignature,
143
- verifyType: 'LOGIN'
47
+ verifyType: 'LOGIN',
144
48
  },
145
- walletName: 'MetaMask'
49
+ walletName: 'MetaMask',
146
50
  });
147
51
  // 2. 上传图片(如果需要)
148
52
  let imgUrl = tokenInfo.imageUrl || '';
@@ -210,13 +114,15 @@ export async function createTokenWithBundleBuy(params) {
210
114
  const b0AmountWei = ethers.parseEther(b0AmountStr);
211
115
  const preSaleWei = tokenInfo.preSale ? ethers.parseEther(tokenInfo.preSale) : 0n;
212
116
  const valueWei = b0AmountWei + preSaleWei;
213
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, devWallet);
214
- const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, { value: valueWei });
117
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, devWallet);
118
+ const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, {
119
+ value: valueWei,
120
+ });
215
121
  // 估算 gas 并添加 20% 安全余量
216
122
  const estimatedCreateGas = await provider.estimateGas({
217
123
  ...createTxUnsigned,
218
124
  from: devWallet.address,
219
- value: valueWei
125
+ value: valueWei,
220
126
  });
221
127
  const createGasLimit = (estimatedCreateGas * 120n) / 100n;
222
128
  const createTxRequest = {
@@ -226,14 +132,14 @@ export async function createTokenWithBundleBuy(params) {
226
132
  gasLimit: createGasLimit,
227
133
  gasPrice: gasPrice,
228
134
  chainId: 56,
229
- type: 0 // Legacy transaction (required for BSC on 48.club)
135
+ type: 0, // Legacy transaction (required for BSC on 48.club)
230
136
  };
231
137
  const signedCreateTx = await devWallet.signTransaction(createTxRequest);
232
138
  signedTxs.push(signedCreateTx);
233
139
  // 4.2 购买交易
234
140
  const buyTxs = [];
235
141
  const profitTxs = [];
236
- const buyAmountsWei = buyAmounts.map(a => ethers.parseEther(a));
142
+ const buyAmountsWei = buyAmounts.map((a) => ethers.parseEther(a));
237
143
  // 🔍 找出买入金额最多的买家(由他支付所有利润)
238
144
  let maxBuyerIndex = 0;
239
145
  let maxAmount = buyAmountsWei[0];
@@ -244,13 +150,13 @@ export async function createTokenWithBundleBuy(params) {
244
150
  }
245
151
  }
246
152
  // ✅ 并行构建所有购买交易
247
- const buyerWallets = privateKeys.slice(1).map(pk => new Wallet(pk, provider));
153
+ const buyerWallets = privateKeys.slice(1).map((pk) => new Wallet(pk, provider));
248
154
  // 并行获取所有买家的 nonce
249
- const buyerNonces = await Promise.all(buyerWallets.map(w => getNextNonce(w)));
155
+ const buyerNonces = await Promise.all(buyerWallets.map((w) => getNextNonce(w)));
250
156
  // 并行构建未签名交易和估算 gas
251
157
  const buyTxDataList = await Promise.all(buyAmountsWei.map(async (fundsWei, i) => {
252
158
  const buyerWallet = buyerWallets[i];
253
- const buyTm2 = new ethers.Contract(tmAddr, TM2Abi, buyerWallet);
159
+ const buyTm2 = new ethers.Contract(tmAddr, TM2_ABI, buyerWallet);
254
160
  const buyTxUnsigned = await buyTm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
255
161
  // 估算 gas 并添加 20% 安全余量
256
162
  let buyGasLimit;
@@ -258,7 +164,7 @@ export async function createTokenWithBundleBuy(params) {
258
164
  const estimatedBuyGas = await provider.estimateGas({
259
165
  ...buyTxUnsigned,
260
166
  from: buyerWallet.address,
261
- value: fundsWei
167
+ value: fundsWei,
262
168
  });
263
169
  buyGasLimit = (estimatedBuyGas * 120n) / 100n;
264
170
  }
@@ -275,7 +181,7 @@ export async function createTokenWithBundleBuy(params) {
275
181
  nonce: buyerNonces[i],
276
182
  gasLimit: data.buyGasLimit,
277
183
  gasPrice: gasPrice,
278
- chainId: 56
184
+ chainId: 56,
279
185
  };
280
186
  return data.buyerWallet.signTransaction(buyTxRequest);
281
187
  }));
@@ -283,7 +189,7 @@ export async function createTokenWithBundleBuy(params) {
283
189
  buyTxs.push(...signedBuyTxList);
284
190
  // ✅ 聚合利润:由买入最多的人支付总利润(强制 2 跳中转)
285
191
  const totalBuyAmount = buyAmountsWei.reduce((sum, amount) => sum + amount, 0n);
286
- const totalProfitAmount = (totalBuyAmount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
192
+ const totalProfitAmount = (totalBuyAmount * BigInt(getProfitRateBps('normal'))) / 10000n;
287
193
  let profitHopWallets;
288
194
  if (totalProfitAmount > 0n) {
289
195
  const payerWallet = new Wallet(privateKeys[maxBuyerIndex + 1], provider);
@@ -292,12 +198,12 @@ export async function createTokenWithBundleBuy(params) {
292
198
  provider,
293
199
  payerWallet,
294
200
  profitAmount: totalProfitAmount,
295
- profitRecipient: PROFIT_CONFIG.RECIPIENT,
201
+ profitRecipient: getProfitRecipient(),
296
202
  hopCount: PROFIT_HOP_COUNT,
297
203
  gasPrice,
298
204
  chainId: 56,
299
205
  txType: 0,
300
- startNonce: profitNonce
206
+ startNonce: profitNonce,
301
207
  });
302
208
  signedTxs.push(...profitHopResult.signedTransactions);
303
209
  profitTxs.push(...profitHopResult.signedTransactions);
@@ -312,7 +218,7 @@ export async function createTokenWithBundleBuy(params) {
312
218
  gasLimit: GAS_LIMITS.BRIBE,
313
219
  chainId: 56,
314
220
  type: 0, // Legacy transaction
315
- nonce: await getNextNonce(devWallet)
221
+ nonce: await getNextNonce(devWallet),
316
222
  });
317
223
  signedTxs.push(tipTx);
318
224
  }
@@ -325,10 +231,14 @@ export async function createTokenWithBundleBuy(params) {
325
231
  else if (config.spPrivateKey) {
326
232
  await sendBatchPrivateTransactions(signedTxs, config.spPrivateKey, config.club48Endpoint || 'https://puissant-bsc.48.club', {
327
233
  spMode: config.spMode ?? 'timestampPersonalSign',
328
- spVMode: config.spVMode
234
+ spVMode: config.spVMode,
329
235
  });
330
236
  // 批量提交不返回 bundleUuid,使用第一笔交易的 hash 作为标识
331
- bundleUuid = ethers.keccak256(signedTxs[0]);
237
+ const firstHash = ethers.Transaction.from(signedTxs[0]).hash;
238
+ if (!firstHash) {
239
+ throw new Error('无法解析首笔已签名交易的 hash(48SP 批量提交)');
240
+ }
241
+ bundleUuid = firstHash;
332
242
  }
333
243
  else {
334
244
  // ✅ 直接提交到 48.club Bundle(仅服务器端可用)
@@ -338,11 +248,11 @@ export async function createTokenWithBundleBuy(params) {
338
248
  bundleUuid = await club48.sendBundle({
339
249
  txs: signedTxs,
340
250
  maxBlockNumber: (await provider.getBlockNumber()) + (config.bundleBlockOffset ?? 100),
341
- noMerge: config.noMerge
251
+ noMerge: config.noMerge,
342
252
  }, {
343
253
  spMode: config.spMode ?? 'timestampPersonalSign',
344
254
  spPrivateKey: config.spPrivateKey || privateKeys[0],
345
- spVMode: config.spVMode
255
+ spVMode: config.spVMode,
346
256
  });
347
257
  }
348
258
  // 6. 等待完成
@@ -363,7 +273,7 @@ export async function createTokenWithBundleBuy(params) {
363
273
  if (createTxHash) {
364
274
  const receipt = await provider.getTransactionReceipt(createTxHash);
365
275
  if (receipt && receipt.logs) {
366
- const tm2Interface = new ethers.Interface(TM2Abi);
276
+ const tm2Interface = new ethers.Interface(TM2_ABI);
367
277
  for (const log of receipt.logs) {
368
278
  try {
369
279
  const parsed = tm2Interface.parseLog({ topics: log.topics, data: log.data });
@@ -372,15 +282,15 @@ export async function createTokenWithBundleBuy(params) {
372
282
  break;
373
283
  }
374
284
  }
375
- catch (e) {
285
+ catch (_e) {
376
286
  // 忽略无法解析的日志
377
287
  }
378
288
  }
379
289
  }
380
290
  }
381
291
  }
382
- catch (e) {
383
- console.warn('Failed to parse token address from receipt:', e);
292
+ catch {
293
+ // ignore receipt parse errors
384
294
  }
385
295
  }
386
296
  return {
@@ -390,7 +300,7 @@ export async function createTokenWithBundleBuy(params) {
390
300
  createTx: signedCreateTx,
391
301
  buyTxs,
392
302
  profitTxs,
393
- profitHopWallets // ✅ 返回利润多跳钱包
303
+ profitHopWallets, // ✅ 返回利润多跳钱包
394
304
  };
395
305
  }
396
306
  /**
@@ -404,7 +314,7 @@ export async function batchBuyWithBundle(params) {
404
314
  const provider = new JsonRpcProvider(config.rpcUrl);
405
315
  const club48 = new Club48Client({
406
316
  endpoint: config.club48Endpoint,
407
- explorerEndpoint: config.club48ExplorerEndpoint
317
+ explorerEndpoint: config.club48ExplorerEndpoint,
408
318
  });
409
319
  const blockOffset = config.bundleBlockOffset ?? 100;
410
320
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
@@ -424,8 +334,8 @@ export async function batchBuyWithBundle(params) {
424
334
  return onchain;
425
335
  };
426
336
  // ✅ 并行处理所有买家
427
- const wallets = privateKeys.map(pk => new Wallet(pk, provider));
428
- const fundsWeiList = buyAmounts.map(a => ethers.parseEther(a));
337
+ const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
338
+ const fundsWeiList = buyAmounts.map((a) => ethers.parseEther(a));
429
339
  // 找出买入最多的买家(由他支付所有利润)
430
340
  let maxBuyerIndex = 0;
431
341
  let maxFunds = fundsWeiList[0];
@@ -436,7 +346,7 @@ export async function batchBuyWithBundle(params) {
436
346
  }
437
347
  }
438
348
  // 并行获取所有钱包的初始 nonce
439
- const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
349
+ const initialNonces = await Promise.all(wallets.map((w) => w.getNonce()));
440
350
  // 为每个钱包分配 nonce(普通钱包1个,利润支付者2个)
441
351
  const nonceMap = new Map();
442
352
  wallets.forEach((w, i) => {
@@ -451,14 +361,14 @@ export async function batchBuyWithBundle(params) {
451
361
  // 并行构建未签名交易和估算 gas
452
362
  const txDataList = await Promise.all(wallets.map(async (buyerWallet, i) => {
453
363
  const fundsWei = fundsWeiList[i];
454
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, buyerWallet);
364
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, buyerWallet);
455
365
  const buyTxUnsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
456
366
  let gasLimit;
457
367
  try {
458
368
  const estimatedGas = await provider.estimateGas({
459
369
  ...buyTxUnsigned,
460
370
  from: buyerWallet.address,
461
- value: fundsWei
371
+ value: fundsWei,
462
372
  });
463
373
  gasLimit = (estimatedGas * 120n) / 100n;
464
374
  }
@@ -468,21 +378,21 @@ export async function batchBuyWithBundle(params) {
468
378
  return { buyTxUnsigned, gasLimit, buyerWallet, fundsWei };
469
379
  }));
470
380
  // 并行签名所有买入交易
471
- const signedBuyTxList = await Promise.all(txDataList.map(async (data, i) => {
381
+ const signedBuyTxList = await Promise.all(txDataList.map(async (data) => {
472
382
  const buyTxRequest = {
473
383
  ...data.buyTxUnsigned,
474
384
  from: data.buyerWallet.address,
475
385
  nonce: getNextNonceLocal(data.buyerWallet),
476
386
  gasLimit: data.gasLimit,
477
387
  gasPrice: gasPrice,
478
- chainId: 56
388
+ chainId: 56,
479
389
  };
480
390
  return data.buyerWallet.signTransaction(buyTxRequest);
481
391
  }));
482
392
  signedTxs.push(...signedBuyTxList);
483
393
  // ✅ 聚合利润:由买入最多的人支付总利润(强制 2 跳中转)
484
394
  const totalFunds = fundsWeiList.reduce((sum, f) => sum + f, 0n);
485
- const totalProfit = (totalFunds * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
395
+ const totalProfit = (totalFunds * BigInt(getProfitRateBps('normal'))) / 10000n;
486
396
  let profitHopWallets;
487
397
  if (totalProfit > 0n) {
488
398
  const payerWallet = wallets[maxBuyerIndex];
@@ -491,12 +401,12 @@ export async function batchBuyWithBundle(params) {
491
401
  provider,
492
402
  payerWallet,
493
403
  profitAmount: totalProfit,
494
- profitRecipient: PROFIT_CONFIG.RECIPIENT,
404
+ profitRecipient: getProfitRecipient(),
495
405
  hopCount: PROFIT_HOP_COUNT,
496
406
  gasPrice,
497
407
  chainId: 56,
498
408
  txType: 0,
499
- startNonce: profitNonce
409
+ startNonce: profitNonce,
500
410
  });
501
411
  signedTxs.push(...profitHopResult.signedTransactions);
502
412
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -511,18 +421,18 @@ export async function batchBuyWithBundle(params) {
511
421
  gasLimit: GAS_LIMITS.BRIBE,
512
422
  chainId: 56,
513
423
  type: 0, // Legacy transaction
514
- nonce: await getNextNonce(tipWallet)
424
+ nonce: await getNextNonce(tipWallet),
515
425
  });
516
426
  signedTxs.unshift(tipTx);
517
427
  }
518
428
  const bundleUuid = await club48.sendBundle({
519
429
  txs: signedTxs,
520
430
  maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
521
- noMerge: config.noMerge
431
+ noMerge: config.noMerge,
522
432
  }, {
523
433
  spMode: config.spMode ?? 'timestampPersonalSign',
524
434
  spPrivateKey: config.spPrivateKey || privateKeys[0],
525
- spVMode: config.spVMode
435
+ spVMode: config.spVMode,
526
436
  });
527
437
  const status = await club48.waitForBundle(bundleUuid);
528
438
  return { bundleUuid, status, buyTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
@@ -538,7 +448,7 @@ export async function batchSellWithBundle(params) {
538
448
  const provider = new JsonRpcProvider(config.rpcUrl);
539
449
  const club48 = new Club48Client({
540
450
  endpoint: config.club48Endpoint,
541
- explorerEndpoint: config.club48ExplorerEndpoint
451
+ explorerEndpoint: config.club48ExplorerEndpoint,
542
452
  });
543
453
  const blockOffset = config.bundleBlockOffset ?? 100;
544
454
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
@@ -558,8 +468,8 @@ export async function batchSellWithBundle(params) {
558
468
  return onchain;
559
469
  };
560
470
  // ✅ 并行处理所有卖家
561
- const wallets = privateKeys.map(pk => new Wallet(pk, provider));
562
- const amountsWei = sellAmounts.map(a => ethers.parseUnits(a, 18));
471
+ const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
472
+ const amountsWei = sellAmounts.map((a) => ethers.parseUnits(a, 18));
563
473
  // 并行预估所有卖出能获得的 BNB
564
474
  const estimatedBnbOuts = await Promise.all(amountsWei.map(async (amountWei) => {
565
475
  try {
@@ -580,7 +490,7 @@ export async function batchSellWithBundle(params) {
580
490
  }
581
491
  }
582
492
  // 并行获取所有钱包的初始 nonce
583
- const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
493
+ const initialNonces = await Promise.all(wallets.map((w) => w.getNonce()));
584
494
  const nonceMap = new Map();
585
495
  wallets.forEach((w, i) => {
586
496
  nonceMap.set(w.address.toLowerCase(), initialNonces[i]);
@@ -594,13 +504,13 @@ export async function batchSellWithBundle(params) {
594
504
  // 并行构建未签名交易和估算 gas
595
505
  const txDataList = await Promise.all(wallets.map(async (sellerWallet, i) => {
596
506
  const amountWei = amountsWei[i];
597
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, sellerWallet);
507
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, sellerWallet);
598
508
  const sellTxUnsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, 0n);
599
509
  let gasLimit;
600
510
  try {
601
511
  const estimatedGas = await provider.estimateGas({
602
512
  ...sellTxUnsigned,
603
- from: sellerWallet.address
513
+ from: sellerWallet.address,
604
514
  });
605
515
  gasLimit = (estimatedGas * 120n) / 100n;
606
516
  }
@@ -610,21 +520,21 @@ export async function batchSellWithBundle(params) {
610
520
  return { sellTxUnsigned, gasLimit, sellerWallet };
611
521
  }));
612
522
  // 并行签名所有卖出交易
613
- const signedSellTxList = await Promise.all(txDataList.map(async (data, i) => {
523
+ const signedSellTxList = await Promise.all(txDataList.map(async (data) => {
614
524
  const sellTxRequest = {
615
525
  ...data.sellTxUnsigned,
616
526
  from: data.sellerWallet.address,
617
527
  nonce: getNextNonceLocal(data.sellerWallet),
618
528
  gasLimit: data.gasLimit,
619
529
  gasPrice: gasPrice,
620
- chainId: 56
530
+ chainId: 56,
621
531
  };
622
532
  return data.sellerWallet.signTransaction(sellTxRequest);
623
533
  }));
624
534
  signedTxs.push(...signedSellTxList);
625
535
  // ✅ 聚合利润:由收益最高的人支付总利润(强制 2 跳中转)
626
536
  const totalBnbOut = estimatedBnbOuts.reduce((sum, b) => sum + b, 0n);
627
- const totalProfit = (totalBnbOut * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
537
+ const totalProfit = (totalBnbOut * BigInt(getProfitRateBps('normal'))) / 10000n;
628
538
  let profitHopWallets;
629
539
  if (totalProfit > 0n) {
630
540
  const payerWallet = wallets[maxSellerIndex];
@@ -633,12 +543,12 @@ export async function batchSellWithBundle(params) {
633
543
  provider,
634
544
  payerWallet,
635
545
  profitAmount: totalProfit,
636
- profitRecipient: PROFIT_CONFIG.RECIPIENT,
546
+ profitRecipient: getProfitRecipient(),
637
547
  hopCount: PROFIT_HOP_COUNT,
638
548
  gasPrice,
639
549
  chainId: 56,
640
550
  txType: 0,
641
- startNonce: profitNonce
551
+ startNonce: profitNonce,
642
552
  });
643
553
  signedTxs.push(...profitHopResult.signedTransactions);
644
554
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -653,18 +563,18 @@ export async function batchSellWithBundle(params) {
653
563
  gasLimit: GAS_LIMITS.BRIBE,
654
564
  chainId: 56,
655
565
  type: 0, // Legacy transaction
656
- nonce: await getNextNonce(tipWallet)
566
+ nonce: await getNextNonce(tipWallet),
657
567
  });
658
568
  signedTxs.unshift(tipTx);
659
569
  }
660
570
  const bundleUuid = await club48.sendBundle({
661
571
  txs: signedTxs,
662
572
  maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
663
- noMerge: config.noMerge
573
+ noMerge: config.noMerge,
664
574
  }, {
665
575
  spMode: config.spMode ?? 'timestampPersonalSign',
666
576
  spPrivateKey: config.spPrivateKey || privateKeys[0],
667
- spVMode: config.spVMode
577
+ spVMode: config.spVMode,
668
578
  });
669
579
  const status = await club48.waitForBundle(bundleUuid);
670
580
  return { bundleUuid, status, sellTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
@@ -678,12 +588,20 @@ export async function fourPrivateBuy(params) {
678
588
  const gasPrice = await club48.getMinGasPrice();
679
589
  const fundsWei = ethers.parseEther(funds);
680
590
  const minAmount = 0n;
681
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, wallet);
591
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, wallet);
682
592
  const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, to ?? wallet.address, fundsWei, minAmount, { value: fundsWei });
683
593
  // 估算 gas 并添加 20% 安全余量
684
594
  const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address, value: fundsWei });
685
595
  const gasLimit = (estimatedGas * 120n) / 100n;
686
- const req = { ...unsigned, from: wallet.address, nonce: await wallet.getNonce(), gasLimit, gasPrice, chainId: 56, type: 0 };
596
+ const req = {
597
+ ...unsigned,
598
+ from: wallet.address,
599
+ nonce: await wallet.getNonce(),
600
+ gasLimit,
601
+ gasPrice,
602
+ chainId: 56,
603
+ type: 0,
604
+ };
687
605
  const signed = await wallet.signTransaction(req);
688
606
  if (spPrivateKey)
689
607
  return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
@@ -698,12 +616,20 @@ export async function fourPrivateSell(params) {
698
616
  const gasPrice = await club48.getMinGasPrice();
699
617
  const amountWei = ethers.parseUnits(amount, 18);
700
618
  const minOut = minFunds ?? 0n;
701
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, wallet);
619
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, wallet);
702
620
  const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
703
621
  // 估算 gas 并添加 20% 安全余量
704
622
  const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address });
705
623
  const gasLimit = (estimatedGas * 120n) / 100n;
706
- const req = { ...unsigned, from: wallet.address, nonce: await wallet.getNonce(), gasLimit, gasPrice, chainId: 56, type: 0 };
624
+ const req = {
625
+ ...unsigned,
626
+ from: wallet.address,
627
+ nonce: await wallet.getNonce(),
628
+ gasLimit,
629
+ gasPrice,
630
+ chainId: 56,
631
+ type: 0,
632
+ };
707
633
  const signed = await wallet.signTransaction(req);
708
634
  if (spPrivateKey)
709
635
  return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
@@ -717,18 +643,20 @@ export async function fourBatchPrivateBuy(params) {
717
643
  const club48 = new Club48Client({ endpoint: club48Endpoint, explorerEndpoint: club48ExplorerEndpoint });
718
644
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
719
645
  // ✅ 并行处理
720
- const wallets = privateKeys.map(pk => new Wallet(pk, provider));
721
- const fundsWeiList = fundsList.map(f => ethers.parseEther(f));
646
+ const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
647
+ const fundsWeiList = fundsList.map((f) => ethers.parseEther(f));
722
648
  // 并行获取 gasPrice 和所有 nonce
723
649
  const [gasPrice, nonces] = await Promise.all([
724
650
  club48.getMinGasPrice(),
725
- Promise.all(wallets.map(w => w.getNonce()))
651
+ Promise.all(wallets.map((w) => w.getNonce())),
726
652
  ]);
727
653
  // 并行构建未签名交易和估算 gas
728
654
  const txDataList = await Promise.all(wallets.map(async (w, i) => {
729
655
  const fundsWei = fundsWeiList[i];
730
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, w);
731
- const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, { value: fundsWei });
656
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, w);
657
+ const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, {
658
+ value: fundsWei,
659
+ });
732
660
  let gasLimit;
733
661
  try {
734
662
  const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address, value: fundsWei });
@@ -748,7 +676,7 @@ export async function fourBatchPrivateBuy(params) {
748
676
  gasLimit: data.gasLimit,
749
677
  gasPrice,
750
678
  chainId: 56,
751
- type: 0
679
+ type: 0,
752
680
  };
753
681
  return data.wallet.signTransaction(req);
754
682
  }));
@@ -756,11 +684,14 @@ export async function fourBatchPrivateBuy(params) {
756
684
  return await sendBatchPrivateTransactions(signedTxs, spPrivateKey, club48Endpoint || 'https://puissant-bsc.48.club');
757
685
  }
758
686
  // 无 48SP:走 bundle 提交通道
759
- const bundleUuid = await club48.sendBundle({ txs: signedTxs, maxBlockNumber: (await provider.getBlockNumber()) + 100 });
687
+ const bundleUuid = await club48.sendBundle({
688
+ txs: signedTxs,
689
+ maxBlockNumber: (await provider.getBlockNumber()) + 100,
690
+ });
760
691
  return !!bundleUuid;
761
692
  }
762
693
  export async function fourBatchPrivateSell(params) {
763
- const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach } = params;
694
+ const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach, } = params;
764
695
  if (privateKeys.length !== amounts.length)
765
696
  throw new Error('privateKeys and amounts length mismatch');
766
697
  const provider = new JsonRpcProvider(rpcUrl);
@@ -768,17 +699,17 @@ export async function fourBatchPrivateSell(params) {
768
699
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
769
700
  const minOut = minFundsEach ?? 0n;
770
701
  // ✅ 并行处理
771
- const wallets = privateKeys.map(pk => new Wallet(pk, provider));
772
- const amountsWei = amounts.map(a => ethers.parseUnits(a, 18));
702
+ const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
703
+ const amountsWei = amounts.map((a) => ethers.parseUnits(a, 18));
773
704
  // 并行获取 gasPrice 和所有 nonce
774
705
  const [gasPrice, nonces] = await Promise.all([
775
706
  club48.getMinGasPrice(),
776
- Promise.all(wallets.map(w => w.getNonce()))
707
+ Promise.all(wallets.map((w) => w.getNonce())),
777
708
  ]);
778
709
  // 并行构建未签名交易和估算 gas
779
710
  const txDataList = await Promise.all(wallets.map(async (w, i) => {
780
711
  const amountWei = amountsWei[i];
781
- const tm2 = new ethers.Contract(tmAddr, TM2Abi, w);
712
+ const tm2 = new ethers.Contract(tmAddr, TM2_ABI, w);
782
713
  const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
783
714
  let gasLimit;
784
715
  try {
@@ -799,7 +730,7 @@ export async function fourBatchPrivateSell(params) {
799
730
  gasLimit: data.gasLimit,
800
731
  gasPrice,
801
732
  chainId: 56,
802
- type: 0
733
+ type: 0,
803
734
  };
804
735
  return data.wallet.signTransaction(req);
805
736
  }));
@@ -1,5 +1,6 @@
1
- import { BytesLike, JsonRpcProvider, Wallet } from 'ethers';
2
- export type Providerish = JsonRpcProvider;
1
+ import { BytesLike, Wallet } from 'ethers';
2
+ import { createBscProvider } from '../utils/provider-factory.js';
3
+ export type Providerish = ReturnType<typeof createBscProvider>;
3
4
  export type Signerish = Wallet;
4
5
  export type CreateOnChainParams = {
5
6
  chain: 'BSC';