four-flap-meme-sdk 2.2.18 → 2.2.20

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