four-flap-meme-sdk 2.2.8 → 2.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/README.en.md +6 -41
  2. package/README.md +0 -31
  3. package/README.zh-CN.md +6 -41
  4. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +26 -1
  5. package/dist/chains/bsc/four/approve-tokenmanager.js +113 -1
  6. package/dist/chains/bsc/four/config.d.ts +67 -5
  7. package/dist/chains/bsc/four/config.js +114 -2
  8. package/dist/chains/bsc/four/core.d.ts +4 -1
  9. package/dist/chains/bsc/four/core.js +592 -1
  10. package/dist/chains/bsc/four/index.d.ts +6 -6
  11. package/dist/chains/bsc/four/index.js +6 -6
  12. package/dist/chains/bsc/four/internal.d.ts +46 -2
  13. package/dist/chains/bsc/four/internal.js +239 -2
  14. package/dist/chains/bsc/four/pancake-proxy.d.ts +28 -1
  15. package/dist/chains/bsc/four/pancake-proxy.js +687 -1
  16. package/dist/chains/bsc/four/private.d.ts +27 -1
  17. package/dist/chains/bsc/four/private.js +477 -1
  18. package/dist/chains/bsc/four/submit.d.ts +315 -2
  19. package/dist/chains/bsc/four/submit.js +752 -2
  20. package/dist/chains/bsc/four/swap-buy-first.d.ts +55 -2
  21. package/dist/chains/bsc/four/swap-buy-first.js +507 -2
  22. package/dist/chains/bsc/four/swap-internal.d.ts +3 -1
  23. package/dist/chains/bsc/four/swap-internal.js +18 -1
  24. package/dist/chains/bsc/four/swap.d.ts +144 -2
  25. package/dist/chains/bsc/four/swap.js +766 -2
  26. package/dist/chains/bsc/four/types.d.ts +476 -1
  27. package/dist/chains/bsc/four/utils.d.ts +18 -5
  28. package/dist/chains/bsc/four/utils.js +1552 -5
  29. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +91 -1
  30. package/dist/chains/bsc/pancake/bundle-buy-first.js +212 -97
  31. package/dist/chains/bsc/pancake/bundle-swap.d.ts +79 -1
  32. package/dist/chains/bsc/pancake/bundle-swap.js +726 -114
  33. package/dist/chains/bsc/pancake/index.d.ts +2 -4
  34. package/dist/chains/bsc/pancake/index.js +3 -1
  35. package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
  36. package/dist/chains/bsc/platforms/iro/factory.js +1 -3
  37. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  38. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  39. package/dist/chains/bsc/platforms/iro/pool.js +10 -31
  40. package/dist/chains/bsc/platforms/iro/token.js +1 -4
  41. package/dist/chains/eni/batch-router/bundle-approve.js +3 -4
  42. package/dist/chains/eni/batch-router/transfer.js +25 -55
  43. package/dist/chains/eni/batch-router/utils.js +6 -32
  44. package/dist/chains/eni/bundler/sign.js +6 -5
  45. package/dist/chains/eni/bundler/submit.js +4 -1
  46. package/dist/chains/eni/constants.js +1 -1
  47. package/dist/chains/eni/index.d.ts +1 -2
  48. package/dist/chains/eni/index.js +0 -1
  49. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  50. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  51. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  52. package/dist/chains/eni/platforms/daoaas/meta.js +6 -9
  53. package/dist/chains/eni/platforms/daoaas/portal-direct.js +44 -28
  54. package/dist/chains/eni/platforms/daoaas/portal.js +6 -10
  55. package/dist/chains/eni/platforms/dswap/liquidity.js +26 -58
  56. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  57. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  58. package/dist/chains/eni/platforms/fair-launch/launcher.js +46 -87
  59. package/dist/chains/eni/platforms/fair-launch/pool.js +1 -4
  60. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  61. package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
  62. package/dist/chains/eni/platforms/iro/factory.js +1 -3
  63. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  64. package/dist/chains/eni/platforms/iro/index.js +4 -4
  65. package/dist/chains/eni/platforms/iro/pool.js +26 -90
  66. package/dist/chains/eni/platforms/iro/token.js +31 -107
  67. package/dist/chains/eni/platforms/iro/whitelist.js +18 -6
  68. package/dist/chains/index.d.ts +0 -13
  69. package/dist/chains/index.js +0 -13
  70. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +26 -2
  71. package/dist/chains/xlayer/eip7702/bundle-approve.js +21 -11
  72. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +6 -2
  73. package/dist/chains/xlayer/eip7702/bundle-buy.js +51 -13
  74. package/dist/chains/xlayer/eip7702/bundle-create.js +59 -93
  75. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +6 -2
  76. package/dist/chains/xlayer/eip7702/bundle-sell.js +111 -29
  77. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +65 -3
  78. package/dist/chains/xlayer/eip7702/bundle-swap.js +245 -51
  79. package/dist/chains/xlayer/eip7702/constants.d.ts +16 -1
  80. package/dist/chains/xlayer/eip7702/constants.js +21 -3
  81. package/dist/chains/xlayer/eip7702/index.d.ts +46 -28
  82. package/dist/chains/xlayer/eip7702/index.js +81 -28
  83. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +203 -2
  84. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +307 -63
  85. package/dist/chains/xlayer/eip7702/types.d.ts +0 -88
  86. package/dist/chains/xlayer/eip7702/utils.d.ts +3 -0
  87. package/dist/chains/xlayer/eip7702/utils.js +28 -23
  88. package/dist/chains/xlayer/eip7702/volume.d.ts +184 -6
  89. package/dist/chains/xlayer/eip7702/volume.js +164 -89
  90. package/dist/chains/xlayer/eoa/constants.js +1 -1
  91. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  92. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +95 -1
  93. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +299 -66
  94. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  95. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +23 -18
  96. package/dist/chains/xlayer/eoa/index.d.ts +6 -10
  97. package/dist/chains/xlayer/eoa/index.js +23 -8
  98. package/dist/chains/xlayer/eoa/portal-ops.js +2 -7
  99. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  100. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  101. package/dist/chains/xlayer/eoa/types.js +3 -1
  102. package/dist/chains/xlayer/index.d.ts +2 -3
  103. package/dist/chains/xlayer/index.js +7 -4
  104. package/dist/contracts/helper3.d.ts +5 -20
  105. package/dist/contracts/helper3.js +20 -56
  106. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +26 -1
  107. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +113 -1
  108. package/dist/contracts/tm-bundle-merkle/config.d.ts +67 -5
  109. package/dist/contracts/tm-bundle-merkle/config.js +114 -2
  110. package/dist/contracts/tm-bundle-merkle/core.d.ts +4 -1
  111. package/dist/contracts/tm-bundle-merkle/core.js +591 -1
  112. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  113. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  114. package/dist/contracts/tm-bundle-merkle/internal.d.ts +46 -2
  115. package/dist/contracts/tm-bundle-merkle/internal.js +238 -2
  116. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +28 -1
  117. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +686 -1
  118. package/dist/contracts/tm-bundle-merkle/private.d.ts +27 -1
  119. package/dist/contracts/tm-bundle-merkle/private.js +476 -1
  120. package/dist/contracts/tm-bundle-merkle/submit.d.ts +314 -3
  121. package/dist/contracts/tm-bundle-merkle/submit.js +928 -3
  122. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +55 -2
  123. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +506 -2
  124. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +3 -1
  125. package/dist/contracts/tm-bundle-merkle/swap-internal.js +18 -1
  126. package/dist/contracts/tm-bundle-merkle/swap.d.ts +144 -2
  127. package/dist/contracts/tm-bundle-merkle/swap.js +764 -2
  128. package/dist/contracts/tm-bundle-merkle/types.d.ts +476 -1
  129. package/dist/contracts/tm-bundle-merkle/utils.d.ts +18 -6
  130. package/dist/contracts/tm-bundle-merkle/utils.js +1501 -6
  131. package/dist/contracts/tm-bundle.d.ts +51 -3
  132. package/dist/contracts/tm-bundle.js +177 -108
  133. package/dist/contracts/tm.d.ts +2 -3
  134. package/dist/contracts/tm.js +32 -37
  135. package/dist/contracts/tm1.js +4 -9
  136. package/dist/contracts/tm2.js +4 -9
  137. package/dist/dex/direct-router.d.ts +125 -3
  138. package/dist/dex/direct-router.js +666 -237
  139. package/dist/flows/create.d.ts +1 -2
  140. package/dist/flows/create.js +6 -6
  141. package/dist/index.d.ts +87 -20
  142. package/dist/index.js +217 -20
  143. package/dist/shared/abis/TaxToken.json +105 -0
  144. package/dist/shared/abis/TokenManager2.json +60 -0
  145. package/dist/shared/abis/common.d.ts +83 -2
  146. package/dist/shared/abis/common.js +254 -2
  147. package/dist/shared/abis/index.d.ts +6 -5
  148. package/dist/shared/abis/index.js +7 -5
  149. package/dist/shared/clients/blockrazor.js +25 -39
  150. package/dist/shared/clients/club48.d.ts +2 -2
  151. package/dist/shared/clients/club48.js +29 -34
  152. package/dist/shared/clients/emitservice.js +0 -2
  153. package/dist/shared/clients/four.d.ts +6 -21
  154. package/dist/shared/clients/four.js +24 -29
  155. package/dist/shared/clients/merkle.js +34 -27
  156. package/dist/shared/constants/addresses.d.ts +1 -1
  157. package/dist/shared/constants/addresses.js +2 -11
  158. package/dist/shared/constants/chains.d.ts +1 -1
  159. package/dist/shared/constants/chains.js +1 -1
  160. package/dist/shared/constants/gas.d.ts +1 -1
  161. package/dist/shared/constants/gas.js +6 -2
  162. package/dist/shared/constants/index.d.ts +0 -3
  163. package/dist/shared/constants/index.js +0 -1
  164. package/dist/shared/flap/abi.js +1 -1
  165. package/dist/shared/flap/constants.d.ts +2 -1
  166. package/dist/shared/flap/constants.js +4 -3
  167. package/dist/shared/flap/curve.js +0 -3
  168. package/dist/shared/flap/errors.d.ts +4 -1
  169. package/dist/shared/flap/errors.js +1 -20
  170. package/dist/shared/flap/index.d.ts +5 -4
  171. package/dist/shared/flap/index.js +5 -4
  172. package/dist/shared/flap/launch-v6.d.ts +127 -0
  173. package/dist/shared/flap/launch-v6.js +123 -0
  174. package/dist/shared/flap/meta.d.ts +18 -22
  175. package/dist/shared/flap/meta.js +17 -12
  176. package/dist/shared/flap/permit.js +2 -5
  177. package/dist/shared/flap/pinata.d.ts +6 -22
  178. package/dist/shared/flap/pinata.js +26 -21
  179. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +72 -3
  180. package/dist/shared/flap/portal-bundle-merkle/config.js +124 -4
  181. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +4 -0
  182. package/dist/shared/flap/portal-bundle-merkle/core.js +151 -142
  183. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +4 -17
  184. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +86 -86
  185. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +92 -100
  186. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +7 -11
  187. package/dist/shared/flap/portal-bundle-merkle/index.js +7 -4
  188. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +68 -71
  189. package/dist/shared/flap/portal-bundle-merkle/private.js +114 -61
  190. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +64 -1
  191. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +247 -66
  192. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +71 -2
  193. package/dist/shared/flap/portal-bundle-merkle/swap.js +410 -103
  194. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +12 -88
  195. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +80 -1
  196. package/dist/shared/flap/portal-bundle-merkle/utils.js +265 -145
  197. package/dist/shared/flap/portal-bundle.js +56 -55
  198. package/dist/shared/flap/portal-create-token.d.ts +19 -37
  199. package/dist/shared/flap/portal-create-token.js +124 -121
  200. package/dist/shared/flap/portal.d.ts +2 -1
  201. package/dist/shared/flap/portal.js +28 -36
  202. package/dist/shared/flap/vanity.d.ts +6 -6
  203. package/dist/shared/flap/vanity.js +21 -15
  204. package/dist/shared/flap/vault.d.ts +93 -25
  205. package/dist/shared/flap/vault.js +126 -75
  206. package/dist/shared/four/tax-token.d.ts +1 -1
  207. package/dist/shared/four/tax-token.js +7 -27
  208. package/dist/shared/index.d.ts +0 -6
  209. package/dist/shared/index.js +0 -4
  210. package/dist/utils/airdrop-sweep.d.ts +76 -4
  211. package/dist/utils/airdrop-sweep.js +55 -42
  212. package/dist/utils/bundle-helpers.d.ts +243 -9
  213. package/dist/utils/bundle-helpers.js +584 -10
  214. package/dist/utils/constants.d.ts +61 -5
  215. package/dist/utils/constants.js +80 -5
  216. package/dist/utils/contract-factory.d.ts +4 -2
  217. package/dist/utils/contract-factory.js +18 -25
  218. package/dist/utils/erc20.d.ts +89 -7
  219. package/dist/utils/erc20.js +125 -94
  220. package/dist/utils/errors.d.ts +1 -12
  221. package/dist/utils/errors.js +1 -60
  222. package/dist/utils/holders-maker.d.ts +138 -2
  223. package/dist/utils/holders-maker.js +661 -26
  224. package/dist/utils/lp-inspect.d.ts +112 -2
  225. package/dist/utils/lp-inspect.js +223 -73
  226. package/dist/utils/mpcExclusive.d.ts +5 -2
  227. package/dist/utils/mpcExclusive.js +3 -4
  228. package/dist/utils/private-sale.d.ts +58 -2
  229. package/dist/utils/private-sale.js +15 -4
  230. package/dist/utils/provider-factory.d.ts +0 -4
  231. package/dist/utils/provider-factory.js +0 -10
  232. package/dist/utils/quote-helpers.d.ts +45 -4
  233. package/dist/utils/quote-helpers.js +74 -17
  234. package/dist/utils/stealth-transfer.d.ts +28 -2
  235. package/dist/utils/stealth-transfer.js +15 -31
  236. package/dist/utils/swap-helpers.d.ts +15 -2
  237. package/dist/utils/swap-helpers.js +11 -6
  238. package/dist/utils/wallet.d.ts +25 -2
  239. package/dist/utils/wallet.js +10 -13
  240. package/package.json +4 -160
  241. package/dist/__tests__/subpath-exports.test.d.ts +0 -1
  242. package/dist/__tests__/subpath-exports.test.js +0 -64
  243. package/dist/abis/common.d.ts +0 -85
  244. package/dist/abis/common.js +0 -264
  245. package/dist/abis/contracts/TaxToken.json +0 -969
  246. package/dist/abis/contracts/TokenManager2.json +0 -136
  247. package/dist/abis/contracts/index.d.ts +0 -5
  248. package/dist/abis/contracts/index.js +0 -5
  249. package/dist/abis/flap/index.d.ts +0 -3
  250. package/dist/abis/flap/index.js +0 -3
  251. package/dist/abis/flap/portal-events.d.ts +0 -6
  252. package/dist/abis/flap/portal-events.js +0 -17
  253. package/dist/abis/flap/portal.d.ts +0 -6
  254. package/dist/abis/flap/portal.js +0 -37
  255. package/dist/abis/flap/vault.d.ts +0 -171
  256. package/dist/abis/flap/vault.js +0 -91
  257. package/dist/abis/index.d.ts +0 -8
  258. package/dist/abis/index.js +0 -11
  259. package/dist/bundle-core/__tests__/config-helpers.test.d.ts +0 -1
  260. package/dist/bundle-core/__tests__/config-helpers.test.js +0 -28
  261. package/dist/bundle-core/__tests__/facade-parity.test.d.ts +0 -1
  262. package/dist/bundle-core/__tests__/facade-parity.test.js +0 -33
  263. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +0 -1
  264. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +0 -60
  265. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +0 -1
  266. package/dist/bundle-core/__tests__/sign-fixture.test.js +0 -220
  267. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +0 -10
  268. package/dist/bundle-core/__tests__/sign-fixtures.js +0 -16
  269. package/dist/bundle-core/config-helpers.d.ts +0 -36
  270. package/dist/bundle-core/config-helpers.js +0 -57
  271. package/dist/bundle-core/errors.d.ts +0 -50
  272. package/dist/bundle-core/errors.js +0 -35
  273. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +0 -7
  274. package/dist/bundle-core/four-meme/approve-tokenmanager.js +0 -99
  275. package/dist/bundle-core/four-meme/core-helpers.d.ts +0 -8
  276. package/dist/bundle-core/four-meme/core-helpers.js +0 -40
  277. package/dist/bundle-core/four-meme/core.d.ts +0 -4
  278. package/dist/bundle-core/four-meme/core.js +0 -515
  279. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +0 -28
  280. package/dist/bundle-core/four-meme/pancake-proxy.js +0 -679
  281. package/dist/bundle-core/four-meme/private.d.ts +0 -27
  282. package/dist/bundle-core/four-meme/private.js +0 -465
  283. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +0 -2
  284. package/dist/bundle-core/four-meme/sign-context-helpers.js +0 -2
  285. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +0 -8
  286. package/dist/bundle-core/four-meme/swap-buy-first.js +0 -493
  287. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +0 -6
  288. package/dist/bundle-core/four-meme/swap-hop-helpers.js +0 -63
  289. package/dist/bundle-core/four-meme/swap-internal.d.ts +0 -3
  290. package/dist/bundle-core/four-meme/swap-internal.js +0 -18
  291. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +0 -27
  292. package/dist/bundle-core/four-meme/swap-sign-helpers.js +0 -105
  293. package/dist/bundle-core/four-meme/swap.d.ts +0 -17
  294. package/dist/bundle-core/four-meme/swap.js +0 -505
  295. package/dist/bundle-core/four-meme/types/buy-first.d.ts +0 -50
  296. package/dist/bundle-core/four-meme/types/buy-first.js +0 -1
  297. package/dist/bundle-core/four-meme/types/core-flow.d.ts +0 -63
  298. package/dist/bundle-core/four-meme/types/core-flow.js +0 -1
  299. package/dist/bundle-core/four-meme/types/index.d.ts +0 -600
  300. package/dist/bundle-core/four-meme/types/index.js +0 -1
  301. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +0 -19
  302. package/dist/bundle-core/four-meme/types/swap-internal.js +0 -1
  303. package/dist/bundle-core/four-meme/types.d.ts +0 -1
  304. package/dist/bundle-core/four-meme/types.js +0 -1
  305. package/dist/bundle-core/four-meme/utils-disperse.d.ts +0 -7
  306. package/dist/bundle-core/four-meme/utils-disperse.js +0 -396
  307. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +0 -8
  308. package/dist/bundle-core/four-meme/utils-pairwise.js +0 -328
  309. package/dist/bundle-core/four-meme/utils-sweep.d.ts +0 -8
  310. package/dist/bundle-core/four-meme/utils-sweep.js +0 -744
  311. package/dist/bundle-core/index.d.ts +0 -8
  312. package/dist/bundle-core/index.js +0 -8
  313. package/dist/bundle-core/internal.d.ts +0 -21
  314. package/dist/bundle-core/internal.js +0 -182
  315. package/dist/bundle-core/sign-context-helpers.d.ts +0 -25
  316. package/dist/bundle-core/sign-context-helpers.js +0 -67
  317. package/dist/bundle-core/submit.d.ts +0 -293
  318. package/dist/bundle-core/submit.js +0 -727
  319. package/dist/bundle-core/types/index.d.ts +0 -8
  320. package/dist/bundle-core/types/index.js +0 -1
  321. package/dist/bundle-core/types.d.ts +0 -1
  322. package/dist/bundle-core/types.js +0 -1
  323. package/dist/chains/bsc/four/utils-disperse.d.ts +0 -1
  324. package/dist/chains/bsc/four/utils-disperse.js +0 -1
  325. package/dist/chains/bsc/four/utils-pairwise.d.ts +0 -1
  326. package/dist/chains/bsc/four/utils-pairwise.js +0 -1
  327. package/dist/chains/bsc/four/utils-sweep.d.ts +0 -1
  328. package/dist/chains/bsc/four/utils-sweep.js +0 -1
  329. package/dist/chains/bsc/iro.d.ts +0 -5
  330. package/dist/chains/bsc/iro.js +0 -4
  331. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +0 -159
  332. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +0 -117
  333. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +0 -241
  334. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +0 -565
  335. package/dist/chains/eni/flat-aliases.d.ts +0 -10
  336. package/dist/chains/eni/flat-aliases.js +0 -8
  337. package/dist/chains/eni/submit.d.ts +0 -43
  338. package/dist/chains/eni/submit.js +0 -286
  339. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +0 -13
  340. package/dist/chains/xlayer/eip7702/flat-aliases.js +0 -10
  341. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +0 -79
  342. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +0 -1
  343. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +0 -26
  344. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +0 -57
  345. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +0 -148
  346. package/dist/chains/xlayer/eip7702/volume-helpers.js +0 -48
  347. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +0 -126
  348. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +0 -228
  349. package/dist/contracts/tm-bundle-helpers.d.ts +0 -88
  350. package/dist/contracts/tm-bundle-helpers.js +0 -72
  351. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +0 -1
  352. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +0 -1
  353. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +0 -1
  354. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +0 -1
  355. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +0 -1
  356. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +0 -1
  357. package/dist/dex/direct-router-helpers.d.ts +0 -264
  358. package/dist/dex/direct-router-helpers.js +0 -539
  359. package/dist/dex/types.d.ts +0 -81
  360. package/dist/dex/types.js +0 -1
  361. package/dist/exports/root-bundle-and-tooling.d.ts +0 -27
  362. package/dist/exports/root-bundle-and-tooling.js +0 -30
  363. package/dist/exports/root-eni-and-bsc-iro.d.ts +0 -26
  364. package/dist/exports/root-eni-and-bsc-iro.js +0 -66
  365. package/dist/exports/root-foundations.d.ts +0 -35
  366. package/dist/exports/root-foundations.js +0 -70
  367. package/dist/exports/root-swap-dex-and-xlayer.d.ts +0 -30
  368. package/dist/exports/root-swap-dex-and-xlayer.js +0 -78
  369. package/dist/flap/index.d.ts +0 -10
  370. package/dist/flap/index.js +0 -8
  371. package/dist/flows/index.d.ts +0 -1
  372. package/dist/flows/index.js +0 -1
  373. package/dist/merkle/index.d.ts +0 -12
  374. package/dist/merkle/index.js +0 -11
  375. package/dist/shared/clients/index.d.ts +0 -8
  376. package/dist/shared/clients/index.js +0 -8
  377. package/dist/shared/constants/quote.d.ts +0 -30
  378. package/dist/shared/constants/quote.js +0 -37
  379. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +0 -32
  380. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +0 -83
  381. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +0 -125
  382. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +0 -113
  383. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +0 -149
  384. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +0 -259
  385. package/dist/shared/foundation/dex/v3-path.d.ts +0 -6
  386. package/dist/shared/foundation/dex/v3-path.js +0 -35
  387. package/dist/shared/foundation/gas/bundle-gas.d.ts +0 -49
  388. package/dist/shared/foundation/gas/bundle-gas.js +0 -93
  389. package/dist/shared/foundation/gas/profit-hop.d.ts +0 -20
  390. package/dist/shared/foundation/gas/profit-hop.js +0 -72
  391. package/dist/shared/foundation/index.d.ts +0 -13
  392. package/dist/shared/foundation/index.js +0 -12
  393. package/dist/shared/foundation/nonce/nonce-manager.d.ts +0 -17
  394. package/dist/shared/foundation/nonce/nonce-manager.js +0 -183
  395. package/dist/shared/foundation/normalize-unknown.d.ts +0 -9
  396. package/dist/shared/foundation/normalize-unknown.js +0 -29
  397. package/dist/shared/foundation/sdk-logger.d.ts +0 -13
  398. package/dist/shared/foundation/sdk-logger.js +0 -12
  399. package/dist/shared/foundation/tx/build-request.d.ts +0 -17
  400. package/dist/shared/foundation/tx/build-request.js +0 -25
  401. package/dist/shared/foundation/tx/sign-batch.d.ts +0 -5
  402. package/dist/shared/foundation/tx/sign-batch.js +0 -26
  403. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +0 -1
  404. package/dist/shared/foundation/tx/wallet-sign-patch.js +0 -18
  405. package/dist/shared/foundation/types/airdrop-sweep.d.ts +0 -79
  406. package/dist/shared/foundation/types/airdrop-sweep.js +0 -1
  407. package/dist/shared/foundation/types/erc20.d.ts +0 -65
  408. package/dist/shared/foundation/types/erc20.js +0 -1
  409. package/dist/shared/foundation/types/holders-maker.d.ts +0 -64
  410. package/dist/shared/foundation/types/holders-maker.js +0 -1
  411. package/dist/shared/foundation/types/index.d.ts +0 -7
  412. package/dist/shared/foundation/types/index.js +0 -1
  413. package/dist/shared/foundation/types/lp-inspect.d.ts +0 -102
  414. package/dist/shared/foundation/types/lp-inspect.js +0 -1
  415. package/dist/shared/foundation/types/multicall.d.ts +0 -5
  416. package/dist/shared/foundation/types/multicall.js +0 -1
  417. package/dist/shared/foundation/types/private-sale.d.ts +0 -35
  418. package/dist/shared/foundation/types/private-sale.js +0 -1
  419. package/dist/shared/foundation/types/quote-helpers.d.ts +0 -17
  420. package/dist/shared/foundation/types/quote-helpers.js +0 -1
  421. package/dist/types/errors.d.ts +0 -27
  422. package/dist/types/errors.js +0 -34
  423. package/dist/utils/holders-maker/addresses.d.ts +0 -12
  424. package/dist/utils/holders-maker/addresses.js +0 -15
  425. package/dist/utils/holders-maker/buy-tx.d.ts +0 -44
  426. package/dist/utils/holders-maker/buy-tx.js +0 -278
  427. package/dist/utils/holders-maker/constants.d.ts +0 -6
  428. package/dist/utils/holders-maker/constants.js +0 -7
  429. package/dist/utils/holders-maker/disperse.d.ts +0 -18
  430. package/dist/utils/holders-maker/disperse.js +0 -90
  431. package/dist/utils/holders-maker/routing.d.ts +0 -4
  432. package/dist/utils/holders-maker/routing.js +0 -45
  433. package/dist/utils/holders-maker/transfer-tx.d.ts +0 -4
  434. package/dist/utils/holders-maker/transfer-tx.js +0 -67
  435. package/dist/utils/holders-maker-helpers.d.ts +0 -9
  436. package/dist/utils/holders-maker-helpers.js +0 -9
  437. package/dist/utils/hop-chains.d.ts +0 -35
  438. package/dist/utils/hop-chains.js +0 -215
  439. package/dist/utils/lp-inspect-helpers.d.ts +0 -9
  440. package/dist/utils/lp-inspect-helpers.js +0 -109
  441. package/dist/utils/types/airdrop-sweep.d.ts +0 -1
  442. package/dist/utils/types/airdrop-sweep.js +0 -1
  443. package/dist/utils/types/contract-factory.d.ts +0 -1
  444. package/dist/utils/types/contract-factory.js +0 -1
  445. package/dist/utils/types/erc20.d.ts +0 -1
  446. package/dist/utils/types/erc20.js +0 -1
  447. package/dist/utils/types/errors.d.ts +0 -1
  448. package/dist/utils/types/errors.js +0 -1
  449. package/dist/utils/types/holders-maker.d.ts +0 -1
  450. package/dist/utils/types/holders-maker.js +0 -1
  451. package/dist/utils/types/hop-chains.d.ts +0 -8
  452. package/dist/utils/types/hop-chains.js +0 -1
  453. package/dist/utils/types/index.d.ts +0 -13
  454. package/dist/utils/types/index.js +0 -1
  455. package/dist/utils/types/lp-inspect.d.ts +0 -1
  456. package/dist/utils/types/lp-inspect.js +0 -1
  457. package/dist/utils/types/mpc-exclusive.d.ts +0 -5
  458. package/dist/utils/types/mpc-exclusive.js +0 -1
  459. package/dist/utils/types/private-sale.d.ts +0 -1
  460. package/dist/utils/types/private-sale.js +0 -1
  461. package/dist/utils/types/quote-helpers.d.ts +0 -1
  462. package/dist/utils/types/quote-helpers.js +0 -1
  463. package/dist/utils/types/stealth-transfer.d.ts +0 -44
  464. package/dist/utils/types/stealth-transfer.js +0 -1
  465. package/dist/utils/types/wallet.d.ts +0 -25
  466. package/dist/utils/types/wallet.js +0 -1
  467. package/dist/vanity/index.d.ts +0 -5
  468. package/dist/vanity/index.js +0 -5
  469. package/src/abis/contracts/TaxToken.json +0 -969
  470. package/src/abis/contracts/TokenManager.json +0 -836
  471. package/src/abis/contracts/TokenManager2.json +0 -136
  472. package/src/abis/contracts/TokenManagerHelper3.json +0 -993
  473. /package/dist/{abis/contracts → shared/abis}/TokenManager.json +0 -0
  474. /package/dist/{abis/contracts → shared/abis}/TokenManagerHelper3.json +0 -0
@@ -1,16 +1,112 @@
1
- /**
2
- * tm-bundle - 主函数
3
- */
4
1
  import { ethers, Wallet, JsonRpcProvider } from 'ethers';
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';
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';
8
5
  import { buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../utils/bundle-helpers.js';
9
- import TM2Abi from '../abis/contracts/TokenManager2.json' with { type: 'json' };
6
+ import TM2Abi from '../shared/abis/TokenManager2.json' with { type: 'json' };
10
7
  import { FourClient, buildLoginMessage } from '../shared/clients/four.js';
11
8
  import { trySell } from './tm.js';
12
- import { getErrorMessage, waitForBundleWithProvider, } from './tm-bundle-helpers.js';
13
- const TM2_ABI = TM2Abi;
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
+ */
14
110
  export async function createTokenWithBundleBuy(params) {
15
111
  const { privateKeys, buyAmounts, tokenInfo, config } = params;
16
112
  if (privateKeys.length === 0) {
@@ -26,7 +122,7 @@ export async function createTokenWithBundleBuy(params) {
26
122
  if (!config.customSubmitFn) {
27
123
  club48 = new Club48Client({
28
124
  endpoint: 'https://puissant-bsc.48.club',
29
- explorerEndpoint: config.club48ExplorerEndpoint,
125
+ explorerEndpoint: config.club48ExplorerEndpoint
30
126
  });
31
127
  }
32
128
  const fourClient = new FourClient({ baseUrl: config.fourApiUrl });
@@ -34,7 +130,7 @@ export async function createTokenWithBundleBuy(params) {
34
130
  const nonce = await fourClient.generateNonce({
35
131
  accountAddress: devWallet.address,
36
132
  verifyType: 'LOGIN',
37
- networkCode: 'BSC',
133
+ networkCode: 'BSC'
38
134
  });
39
135
  const loginSignature = await devWallet.signMessage(buildLoginMessage(nonce));
40
136
  const accessToken = await fourClient.loginDex({
@@ -44,9 +140,9 @@ export async function createTokenWithBundleBuy(params) {
44
140
  address: devWallet.address,
45
141
  networkCode: 'BSC',
46
142
  signature: loginSignature,
47
- verifyType: 'LOGIN',
143
+ verifyType: 'LOGIN'
48
144
  },
49
- walletName: 'MetaMask',
145
+ walletName: 'MetaMask'
50
146
  });
51
147
  // 2. 上传图片(如果需要)
52
148
  let imgUrl = tokenInfo.imageUrl || '';
@@ -114,15 +210,13 @@ export async function createTokenWithBundleBuy(params) {
114
210
  const b0AmountWei = ethers.parseEther(b0AmountStr);
115
211
  const preSaleWei = tokenInfo.preSale ? ethers.parseEther(tokenInfo.preSale) : 0n;
116
212
  const valueWei = b0AmountWei + preSaleWei;
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
- });
213
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, devWallet);
214
+ const createTxUnsigned = await tm2.createToken.populateTransaction(createResp.createArg, createResp.signature, { value: valueWei });
121
215
  // 估算 gas 并添加 20% 安全余量
122
216
  const estimatedCreateGas = await provider.estimateGas({
123
217
  ...createTxUnsigned,
124
218
  from: devWallet.address,
125
- value: valueWei,
219
+ value: valueWei
126
220
  });
127
221
  const createGasLimit = (estimatedCreateGas * 120n) / 100n;
128
222
  const createTxRequest = {
@@ -132,14 +226,14 @@ export async function createTokenWithBundleBuy(params) {
132
226
  gasLimit: createGasLimit,
133
227
  gasPrice: gasPrice,
134
228
  chainId: 56,
135
- type: 0, // Legacy transaction (required for BSC on 48.club)
229
+ type: 0 // Legacy transaction (required for BSC on 48.club)
136
230
  };
137
231
  const signedCreateTx = await devWallet.signTransaction(createTxRequest);
138
232
  signedTxs.push(signedCreateTx);
139
233
  // 4.2 购买交易
140
234
  const buyTxs = [];
141
235
  const profitTxs = [];
142
- const buyAmountsWei = buyAmounts.map((a) => ethers.parseEther(a));
236
+ const buyAmountsWei = buyAmounts.map(a => ethers.parseEther(a));
143
237
  // 🔍 找出买入金额最多的买家(由他支付所有利润)
144
238
  let maxBuyerIndex = 0;
145
239
  let maxAmount = buyAmountsWei[0];
@@ -150,13 +244,13 @@ export async function createTokenWithBundleBuy(params) {
150
244
  }
151
245
  }
152
246
  // ✅ 并行构建所有购买交易
153
- const buyerWallets = privateKeys.slice(1).map((pk) => new Wallet(pk, provider));
247
+ const buyerWallets = privateKeys.slice(1).map(pk => new Wallet(pk, provider));
154
248
  // 并行获取所有买家的 nonce
155
- const buyerNonces = await Promise.all(buyerWallets.map((w) => getNextNonce(w)));
249
+ const buyerNonces = await Promise.all(buyerWallets.map(w => getNextNonce(w)));
156
250
  // 并行构建未签名交易和估算 gas
157
251
  const buyTxDataList = await Promise.all(buyAmountsWei.map(async (fundsWei, i) => {
158
252
  const buyerWallet = buyerWallets[i];
159
- const buyTm2 = new ethers.Contract(tmAddr, TM2_ABI, buyerWallet);
253
+ const buyTm2 = new ethers.Contract(tmAddr, TM2Abi, buyerWallet);
160
254
  const buyTxUnsigned = await buyTm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
161
255
  // 估算 gas 并添加 20% 安全余量
162
256
  let buyGasLimit;
@@ -164,7 +258,7 @@ export async function createTokenWithBundleBuy(params) {
164
258
  const estimatedBuyGas = await provider.estimateGas({
165
259
  ...buyTxUnsigned,
166
260
  from: buyerWallet.address,
167
- value: fundsWei,
261
+ value: fundsWei
168
262
  });
169
263
  buyGasLimit = (estimatedBuyGas * 120n) / 100n;
170
264
  }
@@ -181,7 +275,7 @@ export async function createTokenWithBundleBuy(params) {
181
275
  nonce: buyerNonces[i],
182
276
  gasLimit: data.buyGasLimit,
183
277
  gasPrice: gasPrice,
184
- chainId: 56,
278
+ chainId: 56
185
279
  };
186
280
  return data.buyerWallet.signTransaction(buyTxRequest);
187
281
  }));
@@ -189,7 +283,7 @@ export async function createTokenWithBundleBuy(params) {
189
283
  buyTxs.push(...signedBuyTxList);
190
284
  // ✅ 聚合利润:由买入最多的人支付总利润(强制 2 跳中转)
191
285
  const totalBuyAmount = buyAmountsWei.reduce((sum, amount) => sum + amount, 0n);
192
- const totalProfitAmount = (totalBuyAmount * BigInt(getProfitRateBps('normal'))) / 10000n;
286
+ const totalProfitAmount = (totalBuyAmount * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
193
287
  let profitHopWallets;
194
288
  if (totalProfitAmount > 0n) {
195
289
  const payerWallet = new Wallet(privateKeys[maxBuyerIndex + 1], provider);
@@ -198,12 +292,12 @@ export async function createTokenWithBundleBuy(params) {
198
292
  provider,
199
293
  payerWallet,
200
294
  profitAmount: totalProfitAmount,
201
- profitRecipient: getProfitRecipient(),
295
+ profitRecipient: PROFIT_CONFIG.RECIPIENT,
202
296
  hopCount: PROFIT_HOP_COUNT,
203
297
  gasPrice,
204
298
  chainId: 56,
205
299
  txType: 0,
206
- startNonce: profitNonce,
300
+ startNonce: profitNonce
207
301
  });
208
302
  signedTxs.push(...profitHopResult.signedTransactions);
209
303
  profitTxs.push(...profitHopResult.signedTransactions);
@@ -218,7 +312,7 @@ export async function createTokenWithBundleBuy(params) {
218
312
  gasLimit: GAS_LIMITS.BRIBE,
219
313
  chainId: 56,
220
314
  type: 0, // Legacy transaction
221
- nonce: await getNextNonce(devWallet),
315
+ nonce: await getNextNonce(devWallet)
222
316
  });
223
317
  signedTxs.push(tipTx);
224
318
  }
@@ -231,14 +325,10 @@ export async function createTokenWithBundleBuy(params) {
231
325
  else if (config.spPrivateKey) {
232
326
  await sendBatchPrivateTransactions(signedTxs, config.spPrivateKey, config.club48Endpoint || 'https://puissant-bsc.48.club', {
233
327
  spMode: config.spMode ?? 'timestampPersonalSign',
234
- spVMode: config.spVMode,
328
+ spVMode: config.spVMode
235
329
  });
236
330
  // 批量提交不返回 bundleUuid,使用第一笔交易的 hash 作为标识
237
- const firstHash = ethers.Transaction.from(signedTxs[0]).hash;
238
- if (!firstHash) {
239
- throw new Error('无法解析首笔已签名交易的 hash(48SP 批量提交)');
240
- }
241
- bundleUuid = firstHash;
331
+ bundleUuid = ethers.keccak256(signedTxs[0]);
242
332
  }
243
333
  else {
244
334
  // ✅ 直接提交到 48.club Bundle(仅服务器端可用)
@@ -248,11 +338,11 @@ export async function createTokenWithBundleBuy(params) {
248
338
  bundleUuid = await club48.sendBundle({
249
339
  txs: signedTxs,
250
340
  maxBlockNumber: (await provider.getBlockNumber()) + (config.bundleBlockOffset ?? 100),
251
- noMerge: config.noMerge,
341
+ noMerge: config.noMerge
252
342
  }, {
253
343
  spMode: config.spMode ?? 'timestampPersonalSign',
254
344
  spPrivateKey: config.spPrivateKey || privateKeys[0],
255
- spVMode: config.spVMode,
345
+ spVMode: config.spVMode
256
346
  });
257
347
  }
258
348
  // 6. 等待完成
@@ -273,7 +363,7 @@ export async function createTokenWithBundleBuy(params) {
273
363
  if (createTxHash) {
274
364
  const receipt = await provider.getTransactionReceipt(createTxHash);
275
365
  if (receipt && receipt.logs) {
276
- const tm2Interface = new ethers.Interface(TM2_ABI);
366
+ const tm2Interface = new ethers.Interface(TM2Abi);
277
367
  for (const log of receipt.logs) {
278
368
  try {
279
369
  const parsed = tm2Interface.parseLog({ topics: log.topics, data: log.data });
@@ -282,15 +372,15 @@ export async function createTokenWithBundleBuy(params) {
282
372
  break;
283
373
  }
284
374
  }
285
- catch (_e) {
375
+ catch (e) {
286
376
  // 忽略无法解析的日志
287
377
  }
288
378
  }
289
379
  }
290
380
  }
291
381
  }
292
- catch {
293
- // ignore receipt parse errors
382
+ catch (e) {
383
+ console.warn('Failed to parse token address from receipt:', e);
294
384
  }
295
385
  }
296
386
  return {
@@ -300,7 +390,7 @@ export async function createTokenWithBundleBuy(params) {
300
390
  createTx: signedCreateTx,
301
391
  buyTxs,
302
392
  profitTxs,
303
- profitHopWallets, // ✅ 返回利润多跳钱包
393
+ profitHopWallets // ✅ 返回利润多跳钱包
304
394
  };
305
395
  }
306
396
  /**
@@ -314,7 +404,7 @@ export async function batchBuyWithBundle(params) {
314
404
  const provider = new JsonRpcProvider(config.rpcUrl);
315
405
  const club48 = new Club48Client({
316
406
  endpoint: config.club48Endpoint,
317
- explorerEndpoint: config.club48ExplorerEndpoint,
407
+ explorerEndpoint: config.club48ExplorerEndpoint
318
408
  });
319
409
  const blockOffset = config.bundleBlockOffset ?? 100;
320
410
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
@@ -334,8 +424,8 @@ export async function batchBuyWithBundle(params) {
334
424
  return onchain;
335
425
  };
336
426
  // ✅ 并行处理所有买家
337
- const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
338
- const fundsWeiList = buyAmounts.map((a) => ethers.parseEther(a));
427
+ const wallets = privateKeys.map(pk => new Wallet(pk, provider));
428
+ const fundsWeiList = buyAmounts.map(a => ethers.parseEther(a));
339
429
  // 找出买入最多的买家(由他支付所有利润)
340
430
  let maxBuyerIndex = 0;
341
431
  let maxFunds = fundsWeiList[0];
@@ -346,7 +436,7 @@ export async function batchBuyWithBundle(params) {
346
436
  }
347
437
  }
348
438
  // 并行获取所有钱包的初始 nonce
349
- const initialNonces = await Promise.all(wallets.map((w) => w.getNonce()));
439
+ const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
350
440
  // 为每个钱包分配 nonce(普通钱包1个,利润支付者2个)
351
441
  const nonceMap = new Map();
352
442
  wallets.forEach((w, i) => {
@@ -361,14 +451,14 @@ export async function batchBuyWithBundle(params) {
361
451
  // 并行构建未签名交易和估算 gas
362
452
  const txDataList = await Promise.all(wallets.map(async (buyerWallet, i) => {
363
453
  const fundsWei = fundsWeiList[i];
364
- const tm2 = new ethers.Contract(tmAddr, TM2_ABI, buyerWallet);
454
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, buyerWallet);
365
455
  const buyTxUnsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyerWallet.address, fundsWei, 0n, { value: fundsWei });
366
456
  let gasLimit;
367
457
  try {
368
458
  const estimatedGas = await provider.estimateGas({
369
459
  ...buyTxUnsigned,
370
460
  from: buyerWallet.address,
371
- value: fundsWei,
461
+ value: fundsWei
372
462
  });
373
463
  gasLimit = (estimatedGas * 120n) / 100n;
374
464
  }
@@ -378,21 +468,21 @@ export async function batchBuyWithBundle(params) {
378
468
  return { buyTxUnsigned, gasLimit, buyerWallet, fundsWei };
379
469
  }));
380
470
  // 并行签名所有买入交易
381
- const signedBuyTxList = await Promise.all(txDataList.map(async (data) => {
471
+ const signedBuyTxList = await Promise.all(txDataList.map(async (data, i) => {
382
472
  const buyTxRequest = {
383
473
  ...data.buyTxUnsigned,
384
474
  from: data.buyerWallet.address,
385
475
  nonce: getNextNonceLocal(data.buyerWallet),
386
476
  gasLimit: data.gasLimit,
387
477
  gasPrice: gasPrice,
388
- chainId: 56,
478
+ chainId: 56
389
479
  };
390
480
  return data.buyerWallet.signTransaction(buyTxRequest);
391
481
  }));
392
482
  signedTxs.push(...signedBuyTxList);
393
483
  // ✅ 聚合利润:由买入最多的人支付总利润(强制 2 跳中转)
394
484
  const totalFunds = fundsWeiList.reduce((sum, f) => sum + f, 0n);
395
- const totalProfit = (totalFunds * BigInt(getProfitRateBps('normal'))) / 10000n;
485
+ const totalProfit = (totalFunds * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
396
486
  let profitHopWallets;
397
487
  if (totalProfit > 0n) {
398
488
  const payerWallet = wallets[maxBuyerIndex];
@@ -401,12 +491,12 @@ export async function batchBuyWithBundle(params) {
401
491
  provider,
402
492
  payerWallet,
403
493
  profitAmount: totalProfit,
404
- profitRecipient: getProfitRecipient(),
494
+ profitRecipient: PROFIT_CONFIG.RECIPIENT,
405
495
  hopCount: PROFIT_HOP_COUNT,
406
496
  gasPrice,
407
497
  chainId: 56,
408
498
  txType: 0,
409
- startNonce: profitNonce,
499
+ startNonce: profitNonce
410
500
  });
411
501
  signedTxs.push(...profitHopResult.signedTransactions);
412
502
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -421,18 +511,18 @@ export async function batchBuyWithBundle(params) {
421
511
  gasLimit: GAS_LIMITS.BRIBE,
422
512
  chainId: 56,
423
513
  type: 0, // Legacy transaction
424
- nonce: await getNextNonce(tipWallet),
514
+ nonce: await getNextNonce(tipWallet)
425
515
  });
426
516
  signedTxs.unshift(tipTx);
427
517
  }
428
518
  const bundleUuid = await club48.sendBundle({
429
519
  txs: signedTxs,
430
520
  maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
431
- noMerge: config.noMerge,
521
+ noMerge: config.noMerge
432
522
  }, {
433
523
  spMode: config.spMode ?? 'timestampPersonalSign',
434
524
  spPrivateKey: config.spPrivateKey || privateKeys[0],
435
- spVMode: config.spVMode,
525
+ spVMode: config.spVMode
436
526
  });
437
527
  const status = await club48.waitForBundle(bundleUuid);
438
528
  return { bundleUuid, status, buyTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
@@ -448,7 +538,7 @@ export async function batchSellWithBundle(params) {
448
538
  const provider = new JsonRpcProvider(config.rpcUrl);
449
539
  const club48 = new Club48Client({
450
540
  endpoint: config.club48Endpoint,
451
- explorerEndpoint: config.club48ExplorerEndpoint,
541
+ explorerEndpoint: config.club48ExplorerEndpoint
452
542
  });
453
543
  const blockOffset = config.bundleBlockOffset ?? 100;
454
544
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
@@ -468,8 +558,8 @@ export async function batchSellWithBundle(params) {
468
558
  return onchain;
469
559
  };
470
560
  // ✅ 并行处理所有卖家
471
- const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
472
- const amountsWei = sellAmounts.map((a) => ethers.parseUnits(a, 18));
561
+ const wallets = privateKeys.map(pk => new Wallet(pk, provider));
562
+ const amountsWei = sellAmounts.map(a => ethers.parseUnits(a, 18));
473
563
  // 并行预估所有卖出能获得的 BNB
474
564
  const estimatedBnbOuts = await Promise.all(amountsWei.map(async (amountWei) => {
475
565
  try {
@@ -490,7 +580,7 @@ export async function batchSellWithBundle(params) {
490
580
  }
491
581
  }
492
582
  // 并行获取所有钱包的初始 nonce
493
- const initialNonces = await Promise.all(wallets.map((w) => w.getNonce()));
583
+ const initialNonces = await Promise.all(wallets.map(w => w.getNonce()));
494
584
  const nonceMap = new Map();
495
585
  wallets.forEach((w, i) => {
496
586
  nonceMap.set(w.address.toLowerCase(), initialNonces[i]);
@@ -504,13 +594,13 @@ export async function batchSellWithBundle(params) {
504
594
  // 并行构建未签名交易和估算 gas
505
595
  const txDataList = await Promise.all(wallets.map(async (sellerWallet, i) => {
506
596
  const amountWei = amountsWei[i];
507
- const tm2 = new ethers.Contract(tmAddr, TM2_ABI, sellerWallet);
597
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, sellerWallet);
508
598
  const sellTxUnsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, 0n);
509
599
  let gasLimit;
510
600
  try {
511
601
  const estimatedGas = await provider.estimateGas({
512
602
  ...sellTxUnsigned,
513
- from: sellerWallet.address,
603
+ from: sellerWallet.address
514
604
  });
515
605
  gasLimit = (estimatedGas * 120n) / 100n;
516
606
  }
@@ -520,21 +610,21 @@ export async function batchSellWithBundle(params) {
520
610
  return { sellTxUnsigned, gasLimit, sellerWallet };
521
611
  }));
522
612
  // 并行签名所有卖出交易
523
- const signedSellTxList = await Promise.all(txDataList.map(async (data) => {
613
+ const signedSellTxList = await Promise.all(txDataList.map(async (data, i) => {
524
614
  const sellTxRequest = {
525
615
  ...data.sellTxUnsigned,
526
616
  from: data.sellerWallet.address,
527
617
  nonce: getNextNonceLocal(data.sellerWallet),
528
618
  gasLimit: data.gasLimit,
529
619
  gasPrice: gasPrice,
530
- chainId: 56,
620
+ chainId: 56
531
621
  };
532
622
  return data.sellerWallet.signTransaction(sellTxRequest);
533
623
  }));
534
624
  signedTxs.push(...signedSellTxList);
535
625
  // ✅ 聚合利润:由收益最高的人支付总利润(强制 2 跳中转)
536
626
  const totalBnbOut = estimatedBnbOuts.reduce((sum, b) => sum + b, 0n);
537
- const totalProfit = (totalBnbOut * BigInt(getProfitRateBps('normal'))) / 10000n;
627
+ const totalProfit = (totalBnbOut * BigInt(PROFIT_CONFIG.RATE_BPS)) / 10000n;
538
628
  let profitHopWallets;
539
629
  if (totalProfit > 0n) {
540
630
  const payerWallet = wallets[maxSellerIndex];
@@ -543,12 +633,12 @@ export async function batchSellWithBundle(params) {
543
633
  provider,
544
634
  payerWallet,
545
635
  profitAmount: totalProfit,
546
- profitRecipient: getProfitRecipient(),
636
+ profitRecipient: PROFIT_CONFIG.RECIPIENT,
547
637
  hopCount: PROFIT_HOP_COUNT,
548
638
  gasPrice,
549
639
  chainId: 56,
550
640
  txType: 0,
551
- startNonce: profitNonce,
641
+ startNonce: profitNonce
552
642
  });
553
643
  signedTxs.push(...profitHopResult.signedTransactions);
554
644
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -563,18 +653,18 @@ export async function batchSellWithBundle(params) {
563
653
  gasLimit: GAS_LIMITS.BRIBE,
564
654
  chainId: 56,
565
655
  type: 0, // Legacy transaction
566
- nonce: await getNextNonce(tipWallet),
656
+ nonce: await getNextNonce(tipWallet)
567
657
  });
568
658
  signedTxs.unshift(tipTx);
569
659
  }
570
660
  const bundleUuid = await club48.sendBundle({
571
661
  txs: signedTxs,
572
662
  maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
573
- noMerge: config.noMerge,
663
+ noMerge: config.noMerge
574
664
  }, {
575
665
  spMode: config.spMode ?? 'timestampPersonalSign',
576
666
  spPrivateKey: config.spPrivateKey || privateKeys[0],
577
- spVMode: config.spVMode,
667
+ spVMode: config.spVMode
578
668
  });
579
669
  const status = await club48.waitForBundle(bundleUuid);
580
670
  return { bundleUuid, status, sellTxs: signedTxs, profitHopWallets }; // ✅ 返回利润多跳钱包
@@ -588,20 +678,12 @@ export async function fourPrivateBuy(params) {
588
678
  const gasPrice = await club48.getMinGasPrice();
589
679
  const fundsWei = ethers.parseEther(funds);
590
680
  const minAmount = 0n;
591
- const tm2 = new ethers.Contract(tmAddr, TM2_ABI, wallet);
681
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, wallet);
592
682
  const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, to ?? wallet.address, fundsWei, minAmount, { value: fundsWei });
593
683
  // 估算 gas 并添加 20% 安全余量
594
684
  const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address, value: fundsWei });
595
685
  const gasLimit = (estimatedGas * 120n) / 100n;
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
- };
686
+ const req = { ...unsigned, from: wallet.address, nonce: await wallet.getNonce(), gasLimit, gasPrice, chainId: 56, type: 0 };
605
687
  const signed = await wallet.signTransaction(req);
606
688
  if (spPrivateKey)
607
689
  return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
@@ -616,20 +698,12 @@ export async function fourPrivateSell(params) {
616
698
  const gasPrice = await club48.getMinGasPrice();
617
699
  const amountWei = ethers.parseUnits(amount, 18);
618
700
  const minOut = minFunds ?? 0n;
619
- const tm2 = new ethers.Contract(tmAddr, TM2_ABI, wallet);
701
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, wallet);
620
702
  const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
621
703
  // 估算 gas 并添加 20% 安全余量
622
704
  const estimatedGas = await provider.estimateGas({ ...unsigned, from: wallet.address });
623
705
  const gasLimit = (estimatedGas * 120n) / 100n;
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
- };
706
+ const req = { ...unsigned, from: wallet.address, nonce: await wallet.getNonce(), gasLimit, gasPrice, chainId: 56, type: 0 };
633
707
  const signed = await wallet.signTransaction(req);
634
708
  if (spPrivateKey)
635
709
  return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
@@ -643,20 +717,18 @@ export async function fourBatchPrivateBuy(params) {
643
717
  const club48 = new Club48Client({ endpoint: club48Endpoint, explorerEndpoint: club48ExplorerEndpoint });
644
718
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
645
719
  // ✅ 并行处理
646
- const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
647
- const fundsWeiList = fundsList.map((f) => ethers.parseEther(f));
720
+ const wallets = privateKeys.map(pk => new Wallet(pk, provider));
721
+ const fundsWeiList = fundsList.map(f => ethers.parseEther(f));
648
722
  // 并行获取 gasPrice 和所有 nonce
649
723
  const [gasPrice, nonces] = await Promise.all([
650
724
  club48.getMinGasPrice(),
651
- Promise.all(wallets.map((w) => w.getNonce())),
725
+ Promise.all(wallets.map(w => w.getNonce()))
652
726
  ]);
653
727
  // 并行构建未签名交易和估算 gas
654
728
  const txDataList = await Promise.all(wallets.map(async (w, i) => {
655
729
  const fundsWei = fundsWeiList[i];
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
- });
730
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, w);
731
+ const unsigned = await tm2.buyTokenAMAP.populateTransaction(0n, tokenAddress, w.address, fundsWei, 0n, { value: fundsWei });
660
732
  let gasLimit;
661
733
  try {
662
734
  const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address, value: fundsWei });
@@ -676,7 +748,7 @@ export async function fourBatchPrivateBuy(params) {
676
748
  gasLimit: data.gasLimit,
677
749
  gasPrice,
678
750
  chainId: 56,
679
- type: 0,
751
+ type: 0
680
752
  };
681
753
  return data.wallet.signTransaction(req);
682
754
  }));
@@ -684,14 +756,11 @@ export async function fourBatchPrivateBuy(params) {
684
756
  return await sendBatchPrivateTransactions(signedTxs, spPrivateKey, club48Endpoint || 'https://puissant-bsc.48.club');
685
757
  }
686
758
  // 无 48SP:走 bundle 提交通道
687
- const bundleUuid = await club48.sendBundle({
688
- txs: signedTxs,
689
- maxBlockNumber: (await provider.getBlockNumber()) + 100,
690
- });
759
+ const bundleUuid = await club48.sendBundle({ txs: signedTxs, maxBlockNumber: (await provider.getBlockNumber()) + 100 });
691
760
  return !!bundleUuid;
692
761
  }
693
762
  export async function fourBatchPrivateSell(params) {
694
- const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach, } = params;
763
+ const { rpcUrl, privateKeys, amounts, tokenAddress, club48Endpoint, club48ExplorerEndpoint, spPrivateKey, minFundsEach } = params;
695
764
  if (privateKeys.length !== amounts.length)
696
765
  throw new Error('privateKeys and amounts length mismatch');
697
766
  const provider = new JsonRpcProvider(rpcUrl);
@@ -699,17 +768,17 @@ export async function fourBatchPrivateSell(params) {
699
768
  const tmAddr = ADDRESSES.BSC.TokenManagerOriginal;
700
769
  const minOut = minFundsEach ?? 0n;
701
770
  // ✅ 并行处理
702
- const wallets = privateKeys.map((pk) => new Wallet(pk, provider));
703
- const amountsWei = amounts.map((a) => ethers.parseUnits(a, 18));
771
+ const wallets = privateKeys.map(pk => new Wallet(pk, provider));
772
+ const amountsWei = amounts.map(a => ethers.parseUnits(a, 18));
704
773
  // 并行获取 gasPrice 和所有 nonce
705
774
  const [gasPrice, nonces] = await Promise.all([
706
775
  club48.getMinGasPrice(),
707
- Promise.all(wallets.map((w) => w.getNonce())),
776
+ Promise.all(wallets.map(w => w.getNonce()))
708
777
  ]);
709
778
  // 并行构建未签名交易和估算 gas
710
779
  const txDataList = await Promise.all(wallets.map(async (w, i) => {
711
780
  const amountWei = amountsWei[i];
712
- const tm2 = new ethers.Contract(tmAddr, TM2_ABI, w);
781
+ const tm2 = new ethers.Contract(tmAddr, TM2Abi, w);
713
782
  const unsigned = await tm2.sellToken.populateTransaction(0n, tokenAddress, amountWei, minOut);
714
783
  let gasLimit;
715
784
  try {
@@ -730,7 +799,7 @@ export async function fourBatchPrivateSell(params) {
730
799
  gasLimit: data.gasLimit,
731
800
  gasPrice,
732
801
  chainId: 56,
733
- type: 0,
802
+ type: 0
734
803
  };
735
804
  return data.wallet.signTransaction(req);
736
805
  }));
@@ -1,6 +1,5 @@
1
- import { BytesLike, Wallet } from 'ethers';
2
- import { createBscProvider } from '../utils/provider-factory.js';
3
- export type Providerish = ReturnType<typeof createBscProvider>;
1
+ import { BytesLike, JsonRpcProvider, Wallet } from 'ethers';
2
+ export type Providerish = JsonRpcProvider;
4
3
  export type Signerish = Wallet;
5
4
  export type CreateOnChainParams = {
6
5
  chain: 'BSC';