four-flap-meme-sdk 2.2.19 → 3.0.0

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 (519) hide show
  1. package/dist/{shared/abis → abis}/common.d.ts +1 -1
  2. package/dist/{shared/abis → abis}/common.js +75 -91
  3. package/dist/abis/contracts/TaxToken.json +969 -0
  4. package/dist/abis/contracts/TokenManager2.json +136 -0
  5. package/dist/{shared/abis → abis/contracts}/index.d.ts +0 -1
  6. package/dist/{shared/abis → abis/contracts}/index.js +0 -2
  7. package/dist/abis/flap/index.d.ts +5 -0
  8. package/dist/abis/flap/index.js +5 -0
  9. package/dist/abis/flap/portal-eip7702.d.ts +4 -0
  10. package/dist/abis/flap/portal-eip7702.js +39 -0
  11. package/dist/abis/flap/portal-events.d.ts +6 -0
  12. package/dist/abis/flap/portal-events.js +17 -0
  13. package/dist/abis/flap/portal-merkle.d.ts +4 -0
  14. package/dist/abis/flap/portal-merkle.js +25 -0
  15. package/dist/abis/flap/portal.d.ts +6 -0
  16. package/dist/abis/flap/portal.js +37 -0
  17. package/dist/abis/flap/vault.d.ts +171 -0
  18. package/dist/abis/flap/vault.js +91 -0
  19. package/dist/abis/index.d.ts +6 -0
  20. package/dist/abis/index.js +9 -0
  21. package/dist/bundle/config-helpers.d.ts +37 -0
  22. package/dist/bundle/config-helpers.js +58 -0
  23. package/dist/bundle/errors.d.ts +50 -0
  24. package/dist/bundle/errors.js +38 -0
  25. package/dist/bundle/four-meme/approve-tokenmanager.d.ts +7 -0
  26. package/dist/bundle/four-meme/approve-tokenmanager.js +99 -0
  27. package/dist/bundle/four-meme/core-helpers.d.ts +8 -0
  28. package/dist/bundle/four-meme/core-helpers.js +41 -0
  29. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/core.d.ts +1 -1
  30. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/core.js +74 -150
  31. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/pancake-proxy.d.ts +1 -1
  32. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/pancake-proxy.js +85 -92
  33. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/private.d.ts +1 -1
  34. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/private.js +48 -59
  35. package/dist/bundle/four-meme/sign-context-helpers.d.ts +2 -0
  36. package/dist/bundle/four-meme/sign-context-helpers.js +2 -0
  37. package/dist/bundle/four-meme/swap-buy-first.d.ts +8 -0
  38. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap-buy-first.js +56 -108
  39. package/dist/bundle/four-meme/swap-hop-helpers.d.ts +6 -0
  40. package/dist/bundle/four-meme/swap-hop-helpers.js +63 -0
  41. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap-internal.js +4 -4
  42. package/dist/bundle/four-meme/swap-sign-helpers.d.ts +28 -0
  43. package/dist/bundle/four-meme/swap-sign-helpers.js +105 -0
  44. package/dist/bundle/four-meme/swap.d.ts +17 -0
  45. package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap.js +84 -345
  46. package/dist/{contracts/tm-bundle-merkle/swap-buy-first.d.ts → bundle/four-meme/types/buy-first.d.ts} +11 -18
  47. package/dist/bundle/four-meme/types/core-flow.d.ts +63 -0
  48. package/dist/bundle/four-meme/types/core-flow.js +1 -0
  49. package/dist/{contracts/tm-bundle-merkle/types.d.ts → bundle/four-meme/types/index.d.ts} +130 -6
  50. package/dist/bundle/four-meme/types/index.js +1 -0
  51. package/dist/bundle/four-meme/types/swap-internal.d.ts +19 -0
  52. package/dist/bundle/four-meme/types/swap-internal.js +1 -0
  53. package/dist/bundle/four-meme/types.d.ts +1 -0
  54. package/dist/bundle/four-meme/utils-disperse.d.ts +7 -0
  55. package/dist/bundle/four-meme/utils-disperse.js +396 -0
  56. package/dist/bundle/four-meme/utils-pairwise.d.ts +8 -0
  57. package/dist/bundle/four-meme/utils-pairwise.js +328 -0
  58. package/dist/bundle/four-meme/utils-sweep.d.ts +8 -0
  59. package/dist/bundle/four-meme/utils-sweep.js +744 -0
  60. package/dist/bundle/index.d.ts +8 -0
  61. package/dist/bundle/index.js +8 -0
  62. package/dist/bundle/internal.d.ts +16 -0
  63. package/dist/bundle/internal.js +160 -0
  64. package/dist/bundle/sign-context-helpers.d.ts +26 -0
  65. package/dist/bundle/sign-context-helpers.js +63 -0
  66. package/dist/{contracts/tm-bundle-merkle → bundle}/submit.d.ts +6 -27
  67. package/dist/{contracts/tm-bundle-merkle → bundle}/submit.js +116 -313
  68. package/dist/bundle/types/index.d.ts +8 -0
  69. package/dist/bundle/types/index.js +1 -0
  70. package/dist/bundle/types.d.ts +1 -0
  71. package/dist/bundle/types.js +1 -0
  72. package/dist/chains/bsc/constants.js +1 -1
  73. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  74. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
  75. package/dist/chains/bsc/four/config.d.ts +5 -67
  76. package/dist/chains/bsc/four/config.js +2 -114
  77. package/dist/chains/bsc/four/core.d.ts +1 -4
  78. package/dist/chains/bsc/four/core.js +1 -592
  79. package/dist/chains/bsc/four/index.d.ts +6 -6
  80. package/dist/chains/bsc/four/index.js +6 -6
  81. package/dist/chains/bsc/four/internal.d.ts +2 -46
  82. package/dist/chains/bsc/four/internal.js +2 -239
  83. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  84. package/dist/chains/bsc/four/pancake-proxy.js +1 -687
  85. package/dist/chains/bsc/four/private.d.ts +1 -27
  86. package/dist/chains/bsc/four/private.js +1 -477
  87. package/dist/chains/bsc/four/submit.d.ts +2 -315
  88. package/dist/chains/bsc/four/submit.js +2 -752
  89. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  90. package/dist/chains/bsc/four/swap-buy-first.js +2 -507
  91. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  92. package/dist/chains/bsc/four/swap-internal.js +1 -18
  93. package/dist/chains/bsc/four/swap.d.ts +2 -144
  94. package/dist/chains/bsc/four/swap.js +2 -766
  95. package/dist/chains/bsc/four/types.d.ts +1 -476
  96. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  97. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  98. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  99. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  100. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  101. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  102. package/dist/chains/bsc/four/utils.d.ts +5 -18
  103. package/dist/chains/bsc/four/utils.js +5 -1552
  104. package/dist/chains/bsc/iro.d.ts +5 -0
  105. package/dist/chains/bsc/iro.js +4 -0
  106. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +155 -0
  107. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +80 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  109. package/dist/chains/bsc/pancake/bundle-buy-first.js +99 -214
  110. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  111. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  112. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  113. package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
  114. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  115. package/dist/chains/bsc/pancake/index.js +1 -3
  116. package/dist/chains/bsc/platforms/iro/constants.js +1 -1
  117. package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
  118. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  119. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  120. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  121. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  122. package/dist/chains/bsc/platforms/iro/token.js +5 -2
  123. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  124. package/dist/chains/eni/batch-router/transfer.js +57 -27
  125. package/dist/chains/eni/batch-router/utils.js +32 -6
  126. package/dist/chains/eni/bundler/sign.js +5 -6
  127. package/dist/chains/eni/bundler/submit.js +1 -4
  128. package/dist/chains/eni/constants.js +2 -2
  129. package/dist/chains/eni/flat-aliases.d.ts +10 -0
  130. package/dist/chains/eni/flat-aliases.js +8 -0
  131. package/dist/chains/eni/index.d.ts +2 -1
  132. package/dist/chains/eni/index.js +1 -0
  133. package/dist/chains/eni/platforms/daoaas/create.js +3 -3
  134. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  135. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  136. package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
  137. package/dist/chains/eni/platforms/daoaas/portal-direct.js +29 -45
  138. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  139. package/dist/chains/eni/platforms/dswap/liquidity.js +59 -27
  140. package/dist/chains/eni/platforms/fair-launch/constants.js +1 -1
  141. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  142. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  143. package/dist/chains/eni/platforms/fair-launch/launcher.js +88 -47
  144. package/dist/chains/eni/platforms/fair-launch/pool.js +5 -2
  145. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  146. package/dist/chains/eni/platforms/iro/constants.d.ts +1 -1
  147. package/dist/chains/eni/platforms/iro/constants.js +2 -2
  148. package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
  149. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  150. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  151. package/dist/chains/eni/platforms/iro/index.js +4 -4
  152. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  153. package/dist/chains/eni/platforms/iro/token.js +108 -32
  154. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  155. package/dist/chains/eni/submit.d.ts +43 -0
  156. package/dist/chains/eni/submit.js +287 -0
  157. package/dist/chains/index.d.ts +13 -0
  158. package/dist/chains/index.js +13 -0
  159. package/dist/chains/monad/constants.js +1 -1
  160. package/dist/chains/xlayer/constants.d.ts +5 -0
  161. package/dist/chains/xlayer/constants.js +1 -1
  162. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  163. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
  164. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  165. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  166. package/dist/chains/xlayer/eip7702/bundle-create.js +104 -74
  167. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  168. package/dist/chains/xlayer/eip7702/bundle-sell.js +30 -112
  169. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  170. package/dist/chains/xlayer/eip7702/bundle-swap.js +52 -246
  171. package/dist/chains/xlayer/eip7702/constants.d.ts +11 -26
  172. package/dist/chains/xlayer/eip7702/constants.js +15 -68
  173. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
  174. package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
  175. package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
  176. package/dist/chains/xlayer/eip7702/index.js +28 -81
  177. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  178. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  179. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  180. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +64 -308
  181. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  182. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +58 -0
  183. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  184. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  185. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  186. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  187. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  188. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  189. package/dist/chains/xlayer/eip7702/volume.js +89 -164
  190. package/dist/chains/xlayer/eoa/constants.d.ts +1 -1
  191. package/dist/chains/xlayer/eoa/constants.js +2 -16
  192. package/dist/chains/xlayer/eoa/dex-helpers.d.ts +1 -1
  193. package/dist/chains/xlayer/eoa/dex-helpers.js +7 -37
  194. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  195. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  196. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  197. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
  198. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  199. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
  200. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  201. package/dist/chains/xlayer/eoa/index.js +8 -23
  202. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  203. package/dist/chains/xlayer/eoa/router-manager.js +5 -4
  204. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  205. package/dist/chains/xlayer/eoa/types.js +1 -3
  206. package/dist/chains/xlayer/index.d.ts +3 -2
  207. package/dist/chains/xlayer/index.js +4 -7
  208. package/dist/core/amount/split-by-weight.d.ts +5 -0
  209. package/dist/core/amount/split-by-weight.js +35 -0
  210. package/dist/{shared → core}/clients/blockrazor.d.ts +4 -8
  211. package/dist/{shared → core}/clients/blockrazor.js +43 -35
  212. package/dist/{shared → core}/clients/club48.d.ts +2 -2
  213. package/dist/{shared → core}/clients/club48.js +36 -30
  214. package/dist/{shared → core}/clients/emitservice.js +2 -0
  215. package/dist/{shared → core}/clients/four.d.ts +21 -6
  216. package/dist/{shared → core}/clients/four.js +29 -24
  217. package/dist/core/clients/index.d.ts +8 -0
  218. package/dist/core/clients/index.js +8 -0
  219. package/dist/{shared → core}/clients/merkle.d.ts +4 -3
  220. package/dist/{shared → core}/clients/merkle.js +30 -47
  221. package/dist/{shared → core}/constants/addresses.d.ts +27 -1
  222. package/dist/{shared → core}/constants/addresses.js +39 -2
  223. package/dist/{shared → core}/constants/chains.d.ts +1 -1
  224. package/dist/{shared → core}/constants/chains.js +1 -1
  225. package/dist/{shared → core}/constants/gas.d.ts +1 -1
  226. package/dist/{shared → core}/constants/gas.js +2 -6
  227. package/dist/{shared → core}/constants/index.d.ts +5 -2
  228. package/dist/{shared → core}/constants/index.js +3 -2
  229. package/dist/core/constants/quote.d.ts +30 -0
  230. package/dist/core/constants/quote.js +37 -0
  231. package/dist/core/dex/v3-path.d.ts +6 -0
  232. package/dist/core/dex/v3-path.js +35 -0
  233. package/dist/core/erc20/decimals.d.ts +7 -0
  234. package/dist/core/erc20/decimals.js +24 -0
  235. package/dist/{utils → core}/erc20.d.ts +7 -89
  236. package/dist/{utils → core}/erc20.js +99 -130
  237. package/dist/core/foundation.d.ts +15 -0
  238. package/dist/core/foundation.js +14 -0
  239. package/dist/core/gas/bundle-gas.d.ts +49 -0
  240. package/dist/core/gas/bundle-gas.js +93 -0
  241. package/dist/core/gas/profit-hop.d.ts +20 -0
  242. package/dist/core/gas/profit-hop.js +72 -0
  243. package/dist/core/index.d.ts +5 -0
  244. package/dist/core/index.js +5 -0
  245. package/dist/core/legacy-types/errors.d.ts +27 -0
  246. package/dist/core/legacy-types/errors.js +34 -0
  247. package/dist/core/nonce/nonce-manager.d.ts +19 -0
  248. package/dist/core/nonce/nonce-manager.js +217 -0
  249. package/dist/core/normalize-unknown.d.ts +9 -0
  250. package/dist/core/normalize-unknown.js +29 -0
  251. package/dist/core/sdk-logger.d.ts +13 -0
  252. package/dist/core/sdk-logger.js +12 -0
  253. package/dist/core/shared-abis/common.d.ts +4 -0
  254. package/dist/core/shared-abis/common.js +4 -0
  255. package/dist/core/shared-abis/index.d.ts +5 -0
  256. package/dist/core/shared-abis/index.js +5 -0
  257. package/dist/core/tx/build-request.d.ts +17 -0
  258. package/dist/core/tx/build-request.js +25 -0
  259. package/dist/core/tx/sign-batch.d.ts +5 -0
  260. package/dist/core/tx/sign-batch.js +26 -0
  261. package/dist/core/tx/wallet-sign-patch.d.ts +1 -0
  262. package/dist/core/tx/wallet-sign-patch.js +18 -0
  263. package/dist/core/types/airdrop-sweep.d.ts +79 -0
  264. package/dist/core/types/airdrop-sweep.js +1 -0
  265. package/dist/core/types/erc20.d.ts +65 -0
  266. package/dist/core/types/erc20.js +1 -0
  267. package/dist/core/types/holders-maker.d.ts +64 -0
  268. package/dist/core/types/holders-maker.js +1 -0
  269. package/dist/core/types/index.d.ts +7 -0
  270. package/dist/core/types/index.js +1 -0
  271. package/dist/{utils → core/types}/lp-inspect.d.ts +4 -52
  272. package/dist/core/types/lp-inspect.js +1 -0
  273. package/dist/core/types/multicall.d.ts +5 -0
  274. package/dist/core/types/multicall.js +1 -0
  275. package/dist/core/types/private-sale.d.ts +35 -0
  276. package/dist/core/types/private-sale.js +1 -0
  277. package/dist/core/types/quote-helpers.d.ts +17 -0
  278. package/dist/core/types/quote-helpers.js +1 -0
  279. package/dist/core/types-erc20.d.ts +1 -0
  280. package/dist/core/types-erc20.js +1 -0
  281. package/dist/core/wallet/generate.d.ts +5 -0
  282. package/dist/core/wallet/generate.js +8 -0
  283. package/dist/domains/dex/direct-router-helpers.d.ts +269 -0
  284. package/dist/domains/dex/direct-router-helpers.js +536 -0
  285. package/dist/domains/dex/direct-router.d.ts +28 -0
  286. package/dist/{dex → domains/dex}/direct-router.js +246 -674
  287. package/dist/domains/dex/types.d.ts +81 -0
  288. package/dist/domains/dex/types.js +1 -0
  289. package/dist/{shared → domains}/flap/abi.js +1 -1
  290. package/dist/{shared → domains}/flap/constants.d.ts +1 -2
  291. package/dist/{shared → domains}/flap/constants.js +3 -4
  292. package/dist/{shared → domains}/flap/curve.js +3 -0
  293. package/dist/{shared → domains}/flap/errors.d.ts +1 -4
  294. package/dist/{shared → domains}/flap/errors.js +20 -1
  295. package/dist/domains/flap/index.d.ts +7 -0
  296. package/dist/domains/flap/index.js +5 -0
  297. package/dist/{shared → domains}/flap/meta.d.ts +22 -18
  298. package/dist/{shared → domains}/flap/meta.js +32 -24
  299. package/dist/{shared/flap/index.d.ts → domains/flap/module.d.ts} +4 -5
  300. package/dist/{shared/flap/index.js → domains/flap/module.js} +4 -5
  301. package/dist/{shared → domains}/flap/permit.js +10 -3
  302. package/dist/{shared → domains}/flap/pinata.d.ts +22 -6
  303. package/dist/{shared → domains}/flap/pinata.js +21 -26
  304. package/dist/domains/flap/portal-bundle-merkle/config.d.ts +10 -0
  305. package/dist/domains/flap/portal-bundle-merkle/config.js +13 -0
  306. package/dist/domains/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  307. package/dist/domains/flap/portal-bundle-merkle/core-helpers.js +83 -0
  308. package/dist/{shared → domains}/flap/portal-bundle-merkle/core.d.ts +0 -4
  309. package/dist/{shared → domains}/flap/portal-bundle-merkle/core.js +168 -175
  310. package/dist/{shared → domains}/flap/portal-bundle-merkle/create-to-dex.d.ts +17 -4
  311. package/dist/{shared → domains}/flap/portal-bundle-merkle/create-to-dex.js +97 -118
  312. package/dist/{shared → domains}/flap/portal-bundle-merkle/curve-to-dex.js +105 -123
  313. package/dist/domains/flap/portal-bundle-merkle/index.d.ts +18 -0
  314. package/dist/{shared → domains}/flap/portal-bundle-merkle/index.js +4 -7
  315. package/dist/{shared → domains}/flap/portal-bundle-merkle/pancake-proxy.js +73 -70
  316. package/dist/{shared → domains}/flap/portal-bundle-merkle/private.js +63 -116
  317. package/dist/domains/flap/portal-bundle-merkle/swap-batch.d.ts +8 -0
  318. package/dist/domains/flap/portal-bundle-merkle/swap-batch.js +227 -0
  319. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  320. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  321. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first.d.ts +2 -0
  322. package/dist/{shared → domains}/flap/portal-bundle-merkle/swap-buy-first.js +69 -288
  323. package/dist/domains/flap/portal-bundle-merkle/swap-cross.d.ts +9 -0
  324. package/dist/domains/flap/portal-bundle-merkle/swap-cross.js +139 -0
  325. package/dist/domains/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  326. package/dist/domains/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  327. package/dist/domains/flap/portal-bundle-merkle/swap-planning.d.ts +70 -0
  328. package/dist/domains/flap/portal-bundle-merkle/swap-planning.js +182 -0
  329. package/dist/domains/flap/portal-bundle-merkle/swap-quick-batch.d.ts +16 -0
  330. package/dist/domains/flap/portal-bundle-merkle/swap-quick-batch.js +327 -0
  331. package/dist/domains/flap/portal-bundle-merkle/swap-single.d.ts +2 -0
  332. package/dist/domains/flap/portal-bundle-merkle/swap-single.js +184 -0
  333. package/dist/domains/flap/portal-bundle-merkle/swap-types.d.ts +101 -0
  334. package/dist/domains/flap/portal-bundle-merkle/swap-types.js +1 -0
  335. package/dist/domains/flap/portal-bundle-merkle/swap.d.ts +8 -0
  336. package/dist/domains/flap/portal-bundle-merkle/swap.js +7 -0
  337. package/dist/{shared → domains}/flap/portal-bundle-merkle/types.d.ts +88 -12
  338. package/dist/domains/flap/portal-bundle-merkle/types.js +1 -0
  339. package/dist/domains/flap/portal-bundle-merkle/utils.d.ts +10 -0
  340. package/dist/{shared → domains}/flap/portal-bundle-merkle/utils.js +145 -265
  341. package/dist/{shared → domains}/flap/portal-bundle.d.ts +2 -2
  342. package/dist/{shared → domains}/flap/portal-bundle.js +84 -79
  343. package/dist/domains/flap/portal-create-token.d.ts +81 -0
  344. package/dist/domains/flap/portal-create-token.js +255 -0
  345. package/dist/{shared → domains}/flap/portal.d.ts +1 -2
  346. package/dist/{shared → domains}/flap/portal.js +36 -28
  347. package/dist/{shared → domains}/flap/vanity.d.ts +6 -6
  348. package/dist/{shared → domains}/flap/vanity.js +15 -21
  349. package/dist/{shared → domains}/flap/vault.d.ts +25 -93
  350. package/dist/{shared → domains}/flap/vault.js +77 -127
  351. package/dist/{flows → domains/flows}/create.d.ts +2 -1
  352. package/dist/{flows → domains/flows}/create.js +8 -8
  353. package/dist/domains/flows/index.d.ts +9 -0
  354. package/dist/domains/flows/index.js +9 -0
  355. package/dist/{contracts → domains/four/contracts}/helper3.d.ts +20 -5
  356. package/dist/{contracts → domains/four/contracts}/helper3.js +56 -20
  357. package/dist/domains/four/contracts/tm-bundle-helpers.d.ts +88 -0
  358. package/dist/domains/four/contracts/tm-bundle-helpers.js +73 -0
  359. package/dist/{contracts → domains/four/contracts}/tm-bundle.d.ts +4 -52
  360. package/dist/{contracts → domains/four/contracts}/tm-bundle.js +122 -189
  361. package/dist/{contracts → domains/four/contracts}/tm.d.ts +10 -8
  362. package/dist/{contracts → domains/four/contracts}/tm.js +39 -35
  363. package/dist/{contracts → domains/four/contracts}/tm1.js +9 -4
  364. package/dist/{contracts → domains/four/contracts}/tm2.js +10 -5
  365. package/dist/domains/four/index.d.ts +7 -0
  366. package/dist/domains/four/index.js +7 -0
  367. package/dist/{shared → domains}/four/tax-token.d.ts +1 -1
  368. package/dist/{shared → domains}/four/tax-token.js +31 -10
  369. package/dist/domains/holders/holders-maker-helpers.d.ts +9 -0
  370. package/dist/domains/holders/holders-maker-helpers.js +9 -0
  371. package/dist/domains/holders/holders-maker.d.ts +18 -0
  372. package/dist/domains/holders/holders-maker.js +324 -0
  373. package/dist/domains/holders/index.d.ts +1 -0
  374. package/dist/domains/holders/index.js +1 -0
  375. package/dist/domains/holders/internal/addresses.d.ts +12 -0
  376. package/dist/domains/holders/internal/addresses.js +15 -0
  377. package/dist/domains/holders/internal/buy-tx.d.ts +44 -0
  378. package/dist/domains/holders/internal/buy-tx.js +278 -0
  379. package/dist/domains/holders/internal/constants.d.ts +6 -0
  380. package/dist/domains/holders/internal/constants.js +7 -0
  381. package/dist/domains/holders/internal/disperse.d.ts +18 -0
  382. package/dist/domains/holders/internal/disperse.js +90 -0
  383. package/dist/domains/holders/internal/routing.d.ts +4 -0
  384. package/dist/domains/holders/internal/routing.js +45 -0
  385. package/dist/domains/holders/internal/transfer-tx.d.ts +4 -0
  386. package/dist/domains/holders/internal/transfer-tx.js +67 -0
  387. package/dist/domains/holders/types.d.ts +1 -0
  388. package/dist/domains/holders/types.js +1 -0
  389. package/dist/domains/lp-inspect/index.d.ts +1 -0
  390. package/dist/domains/lp-inspect/index.js +1 -0
  391. package/dist/domains/lp-inspect/lp-inspect-helpers.d.ts +9 -0
  392. package/dist/domains/lp-inspect/lp-inspect-helpers.js +109 -0
  393. package/dist/domains/lp-inspect/lp-inspect.d.ts +40 -0
  394. package/dist/{utils → domains/lp-inspect}/lp-inspect.js +78 -293
  395. package/dist/domains/lp-inspect/types.d.ts +1 -0
  396. package/dist/domains/lp-inspect/types.js +1 -0
  397. package/dist/domains/merkle/index.d.ts +12 -0
  398. package/dist/domains/merkle/index.js +11 -0
  399. package/dist/domains/private-sale/index.d.ts +1 -0
  400. package/dist/domains/private-sale/index.js +1 -0
  401. package/dist/domains/private-sale/private-sale.d.ts +34 -0
  402. package/dist/{utils → domains/private-sale}/private-sale.js +5 -16
  403. package/dist/domains/private-sale/types.d.ts +1 -0
  404. package/dist/domains/private-sale/types.js +1 -0
  405. package/dist/domains/quote/index.d.ts +1 -0
  406. package/dist/domains/quote/index.js +1 -0
  407. package/dist/{utils → domains/quote}/quote-helpers.d.ts +4 -45
  408. package/dist/{utils → domains/quote}/quote-helpers.js +17 -74
  409. package/dist/domains/quote/types.d.ts +1 -0
  410. package/dist/domains/quote/types.js +1 -0
  411. package/dist/domains/vanity/index.d.ts +5 -0
  412. package/dist/domains/vanity/index.js +5 -0
  413. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  414. package/dist/exports/root-bundle-and-tooling.js +30 -0
  415. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  416. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  417. package/dist/exports/root-foundations.d.ts +35 -0
  418. package/dist/exports/root-foundations.js +70 -0
  419. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  420. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  421. package/dist/index.d.ts +17 -88
  422. package/dist/index.js +17 -218
  423. package/dist/utils/airdrop-sweep.d.ts +4 -76
  424. package/dist/utils/airdrop-sweep.js +42 -55
  425. package/dist/utils/bundle-helpers.d.ts +9 -243
  426. package/dist/utils/bundle-helpers.js +10 -584
  427. package/dist/utils/constants.d.ts +5 -61
  428. package/dist/utils/constants.js +5 -80
  429. package/dist/utils/contract-factory.d.ts +2 -4
  430. package/dist/utils/contract-factory.js +25 -18
  431. package/dist/utils/errors.d.ts +12 -1
  432. package/dist/utils/errors.js +60 -1
  433. package/dist/utils/hop-chains.d.ts +35 -0
  434. package/dist/utils/hop-chains.js +215 -0
  435. package/dist/utils/index.d.ts +5 -0
  436. package/dist/utils/index.js +5 -0
  437. package/dist/utils/mpcExclusive.d.ts +2 -5
  438. package/dist/utils/mpcExclusive.js +4 -3
  439. package/dist/utils/provider-factory.d.ts +4 -0
  440. package/dist/utils/provider-factory.js +10 -0
  441. package/dist/utils/stealth-transfer.d.ts +2 -28
  442. package/dist/utils/stealth-transfer.js +41 -21
  443. package/dist/utils/swap-helpers.d.ts +2 -15
  444. package/dist/utils/swap-helpers.js +7 -12
  445. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  446. package/dist/utils/types/airdrop-sweep.js +1 -0
  447. package/dist/utils/types/contract-factory.d.ts +1 -0
  448. package/dist/utils/types/contract-factory.js +1 -0
  449. package/dist/utils/types/errors.d.ts +1 -0
  450. package/dist/utils/types/errors.js +1 -0
  451. package/dist/utils/types/hop-chains.d.ts +8 -0
  452. package/dist/utils/types/hop-chains.js +1 -0
  453. package/dist/utils/types/index.d.ts +13 -0
  454. package/dist/utils/types/index.js +1 -0
  455. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  456. package/dist/utils/types/mpc-exclusive.js +1 -0
  457. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  458. package/dist/utils/types/stealth-transfer.js +1 -0
  459. package/dist/utils/types/wallet.d.ts +25 -0
  460. package/dist/utils/types/wallet.js +1 -0
  461. package/dist/utils/wallet.d.ts +4 -25
  462. package/dist/utils/wallet.js +27 -22
  463. package/package.json +96 -2
  464. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +0 -26
  465. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +0 -113
  466. package/dist/contracts/tm-bundle-merkle/config.d.ts +0 -70
  467. package/dist/contracts/tm-bundle-merkle/config.js +0 -114
  468. package/dist/contracts/tm-bundle-merkle/index.d.ts +0 -15
  469. package/dist/contracts/tm-bundle-merkle/index.js +0 -29
  470. package/dist/contracts/tm-bundle-merkle/internal.d.ts +0 -48
  471. package/dist/contracts/tm-bundle-merkle/internal.js +0 -240
  472. package/dist/contracts/tm-bundle-merkle/swap.d.ts +0 -146
  473. package/dist/contracts/tm-bundle-merkle/utils.d.ts +0 -20
  474. package/dist/contracts/tm-bundle-merkle/utils.js +0 -1503
  475. package/dist/dex/direct-router.d.ts +0 -150
  476. package/dist/shared/abis/TaxToken.json +0 -105
  477. package/dist/shared/abis/TokenManager2.json +0 -60
  478. package/dist/shared/flap/graduated-dex.d.ts +0 -1
  479. package/dist/shared/flap/graduated-dex.js +0 -1
  480. package/dist/shared/flap/launch-v6.d.ts +0 -132
  481. package/dist/shared/flap/launch-v6.js +0 -137
  482. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +0 -79
  483. package/dist/shared/flap/portal-bundle-merkle/config.js +0 -133
  484. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +0 -14
  485. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
  486. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +0 -201
  487. package/dist/shared/flap/portal-bundle-merkle/swap.js +0 -1359
  488. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +0 -89
  489. package/dist/shared/flap/portal-create-token.d.ts +0 -63
  490. package/dist/shared/flap/portal-create-token.js +0 -258
  491. package/dist/shared/four/index.d.ts +0 -7
  492. package/dist/shared/four/index.js +0 -22
  493. package/dist/shared/index.d.ts +0 -10
  494. package/dist/shared/index.js +0 -10
  495. package/dist/utils/holders-maker.d.ts +0 -154
  496. package/dist/utils/holders-maker.js +0 -945
  497. package/dist/utils/pcs-infinity-cl.d.ts +0 -65
  498. package/dist/utils/pcs-infinity-cl.js +0 -426
  499. package/dist/utils/private-sale.d.ts +0 -90
  500. /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
  501. /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
  502. /package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/swap-internal.d.ts +0 -0
  503. /package/dist/{shared/flap/portal-bundle-merkle/types.js → bundle/four-meme/types/buy-first.js} +0 -0
  504. /package/dist/{contracts/tm-bundle-merkle → bundle/four-meme}/types.js +0 -0
  505. /package/dist/{shared → core}/clients/emitservice.d.ts +0 -0
  506. /package/dist/{shared → core}/constants/profit.d.ts +0 -0
  507. /package/dist/{shared → core}/constants/profit.js +0 -0
  508. /package/dist/{dex → domains/dex}/index.d.ts +0 -0
  509. /package/dist/{dex → domains/dex}/index.js +0 -0
  510. /package/dist/{shared → domains}/flap/abi.d.ts +0 -0
  511. /package/dist/{shared → domains}/flap/curve.d.ts +0 -0
  512. /package/dist/{shared → domains}/flap/ipfs.d.ts +0 -0
  513. /package/dist/{shared → domains}/flap/ipfs.js +0 -0
  514. /package/dist/{shared → domains}/flap/permit.d.ts +0 -0
  515. /package/dist/{shared → domains}/flap/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
  516. /package/dist/{shared → domains}/flap/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
  517. /package/dist/{shared → domains}/flap/portal-bundle-merkle/private.d.ts +0 -0
  518. /package/dist/{contracts → domains/four/contracts}/tm1.d.ts +0 -0
  519. /package/dist/{contracts → domains/four/contracts}/tm2.d.ts +0 -0
@@ -4,11 +4,13 @@
4
4
  * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
5
5
  */
6
6
  import { ethers, Contract, Wallet } from 'ethers';
7
- import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../utils/bundle-helpers.js';
8
- import { ADDRESSES, BLOCKRAZOR_BUILDER_EOA, PROFIT_CONFIG } from '../../utils/constants.js';
7
+ import { createSignProvider } from '../sign-context-helpers.js';
8
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../utils/bundle-helpers.js';
9
+ import { ADDRESSES, BLOCKRAZOR_BUILDER_EOA, CHAINS, getProfitRateBps as getSharedProfitRateBps, } from '../../core/constants/index.js';
9
10
  import { TM_ABI, HELPER3_ABI, TM_ADDRESS } from './swap-internal.js';
10
- import { getTxType, getGasPriceConfig, getProfitRecipient, getBribeAmount } from './config.js';
11
- import { trySell } from '../tm.js';
11
+ import { getTxType, getGasPriceConfig, getProfitRecipient, getBribeAmount, } from '../config-helpers.js';
12
+ import { trySell } from '../../domains/four/contracts/tm.js';
13
+ import { splitAmountByWeight as splitAmount } from '../../core/amount/split-by-weight.js';
12
14
  // ✅ 本地 getGasLimit(FourAnyConfig 支持 bigint gasLimit)
13
15
  function getGasLimit(config, defaultGas = 800000) {
14
16
  if (config.gasLimit !== undefined) {
@@ -31,9 +33,9 @@ const MAX_SWAP_TX_COUNT = MAX_BUNDLE_SIGNATURES - BRIBE_TX_COUNT - PROFIT_TX_COU
31
33
  */
32
34
  function getProfitRatePerTxBps(userType) {
33
35
  if (userType === 'v1') {
34
- return PROFIT_CONFIG.RATE_BPS_V1_DOUBLE;
36
+ return getSharedProfitRateBps('v1Double');
35
37
  }
36
- return PROFIT_CONFIG.RATE_BPS_V0_DOUBLE; // v0 或默认
38
+ return getSharedProfitRateBps('v0Double');
37
39
  }
38
40
  /**
39
41
  * 验证买卖笔数
@@ -51,49 +53,10 @@ function validateSwapCounts(buyCount, sellCount) {
51
53
  `最大签名数为 ${MAX_BUNDLE_SIGNATURES}(${BRIBE_TX_COUNT} 贿赂 + ${PROFIT_TX_COUNT} 利润 + ${MAX_SWAP_TX_COUNT} 买卖)`);
52
54
  }
53
55
  }
54
- /**
55
- * ✅ 将金额随机拆分成多份(更自然,不像机器人)
56
- * 每份金额在平均值的 50%-150% 之间随机浮动
57
- */
58
- function splitAmount(totalAmount, count) {
59
- if (count <= 0) {
60
- throw new Error('拆分份数必须大于 0');
61
- }
62
- if (count === 1) {
63
- return [totalAmount];
64
- }
65
- // 生成随机权重(0.5 - 1.5 之间)
66
- const weights = [];
67
- for (let i = 0; i < count; i++) {
68
- // 随机值在 0.5 - 1.5 之间,使每份金额有 ±50% 的浮动
69
- weights.push(0.5 + Math.random());
70
- }
71
- // 计算权重总和
72
- const totalWeight = weights.reduce((a, b) => a + b, 0);
73
- // 根据权重分配金额
74
- const amounts = [];
75
- let allocated = 0n;
76
- for (let i = 0; i < count - 1; i++) {
77
- // 按权重比例分配
78
- const ratio = weights[i] / totalWeight;
79
- const amount = BigInt(Math.floor(Number(totalAmount) * ratio));
80
- amounts.push(amount);
81
- allocated += amount;
82
- }
83
- // 最后一份分配剩余的全部(确保总和精确)
84
- amounts.push(totalAmount - allocated);
85
- // 随机打乱顺序(让大小金额交错出现)
86
- for (let i = amounts.length - 1; i > 0; i--) {
87
- const j = Math.floor(Math.random() * (i + 1));
88
- [amounts[i], amounts[j]] = [amounts[j], amounts[i]];
89
- }
90
- return amounts;
91
- }
92
56
  export async function fourBundleBuyFirstMerkle(params) {
93
- const { buyerPrivateKey, buyerPrivateKeys, buyerFunds, buyerFundsPercentage, sellerPrivateKey, sellerPrivateKeys, tokenAddress, config, buyCount: _buyCount, sellCount: _sellCount } = params;
57
+ const { buyerPrivateKey, buyerPrivateKeys, buyerFunds, buyerFundsPercentage, sellerPrivateKey, sellerPrivateKeys, tokenAddress, config, buyCount: _buyCount, sellCount: _sellCount, } = params;
94
58
  // ✅ 判断是否为多钱包模式
95
- const isMultiWalletMode = !!(buyerPrivateKeys && buyerPrivateKeys.length > 0) ||
96
- !!(sellerPrivateKeys && sellerPrivateKeys.length > 0);
59
+ const isMultiWalletMode = !!(buyerPrivateKeys && buyerPrivateKeys.length > 0) || !!(sellerPrivateKeys && sellerPrivateKeys.length > 0);
97
60
  const buyCount = _buyCount ?? 1;
98
61
  const sellCount = _sellCount ?? 1;
99
62
  // ✅ 多钱包模式:使用单独的处理逻辑
@@ -103,7 +66,7 @@ export async function fourBundleBuyFirstMerkle(params) {
103
66
  sellerPrivateKeys: sellerPrivateKeys || (sellerPrivateKey ? [sellerPrivateKey] : []),
104
67
  tokenAddress,
105
68
  buyerFunds,
106
- config
69
+ config,
107
70
  });
108
71
  }
109
72
  // ✅ 单钱包模式(向后兼容)
@@ -114,11 +77,8 @@ export async function fourBundleBuyFirstMerkle(params) {
114
77
  // ✅ 计算利润比例(根据 userType 动态调整)
115
78
  const totalTxCount = buyCount + sellCount;
116
79
  const profitRateBps = getProfitRatePerTxBps(config.userType) * totalTxCount;
117
- const chainIdNum = config.chainId ?? 56;
118
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
119
- chainId: chainIdNum,
120
- name: 'BSC'
121
- });
80
+ const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
81
+ const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
122
82
  const buyer = new Wallet(buyerPrivateKey, provider);
123
83
  const seller = new Wallet(sellerPrivateKey, provider);
124
84
  const sameAddress = buyer.address.toLowerCase() === seller.address.toLowerCase();
@@ -129,7 +89,7 @@ export async function fourBundleBuyFirstMerkle(params) {
129
89
  // ✅ 优化:第一批并行 - buyerBalance、gasPrice
130
90
  const [buyerBalance, gasPrice] = await Promise.all([
131
91
  provider.getBalance(buyer.address),
132
- getOptimizedGasPrice(provider, getGasPriceConfig(config))
92
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
133
93
  ]);
134
94
  // 计算买方投入资金
135
95
  let buyerFundsWei;
@@ -149,14 +109,11 @@ export async function fourBundleBuyFirstMerkle(params) {
149
109
  }
150
110
  // ✅ 优化:第二批并行 - buyQuote、sellerTokenBal、decimals
151
111
  const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
152
- const erc20 = new Contract(tokenAddress, [
153
- 'function balanceOf(address) view returns (uint256)',
154
- 'function decimals() view returns (uint8)'
155
- ], provider);
112
+ const erc20 = new Contract(tokenAddress, ['function balanceOf(address) view returns (uint256)', 'function decimals() view returns (uint8)'], provider);
156
113
  const [buyQuote, sellerTokenBal, decimals] = await Promise.all([
157
114
  helper3.tryBuy(tokenAddress, 0n, buyerFundsWei),
158
115
  erc20.balanceOf(seller.address),
159
- erc20.decimals()
116
+ erc20.decimals(),
160
117
  ]);
161
118
  const estimatedTokenAmount = buyQuote.estimatedAmount ?? buyQuote[2];
162
119
  if (!estimatedTokenAmount || estimatedTokenAmount <= 0n) {
@@ -180,8 +137,8 @@ export async function fourBundleBuyFirstMerkle(params) {
180
137
  const bribeAmount = getBribeAmount(config);
181
138
  const needBribeTx = bribeAmount > 0n;
182
139
  // ✅ 构建多笔买入和卖出交易
183
- const buyUnsignedPromises = buyAmountsWei.map(amount => tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, amount, 0n, { value: amount }));
184
- const sellUnsignedPromises = sellAmountsWei.map(amount => tmSeller.sellToken.populateTransaction(0n, tokenAddress, amount, 0n));
140
+ const buyUnsignedPromises = buyAmountsWei.map((amount) => tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, amount, 0n, { value: amount }));
141
+ const sellUnsignedPromises = sellAmountsWei.map((amount) => tmSeller.sellToken.populateTransaction(0n, tokenAddress, amount, 0n));
185
142
  // ✅ 规划多笔交易 nonce(与 Flap 一致,不含授权)
186
143
  const multiNoncePlan = await planMultiNonces({
187
144
  buyer,
@@ -191,12 +148,12 @@ export async function fourBundleBuyFirstMerkle(params) {
191
148
  extractProfit,
192
149
  needBribeTx,
193
150
  sameAddress,
194
- nonceManager
151
+ nonceManager,
195
152
  });
196
153
  const [sellResult, buyUnsignedArray, sellUnsignedArray] = await Promise.all([
197
154
  trySell('BSC', config.rpcUrl, tokenAddress, sellAmountWei),
198
155
  Promise.all(buyUnsignedPromises),
199
- Promise.all(sellUnsignedPromises)
156
+ Promise.all(sellUnsignedPromises),
200
157
  ]);
201
158
  const estimatedSellFunds = sellResult.funds;
202
159
  const profitAmount = extractProfit ? (estimatedSellFunds * BigInt(profitRateBps)) / 10000n : 0n;
@@ -209,8 +166,8 @@ export async function fourBundleBuyFirstMerkle(params) {
209
166
  nonce: multiNoncePlan.bribeNonce,
210
167
  gasPrice,
211
168
  gasLimit: 21000n,
212
- chainId: chainIdNum,
213
- type: txType
169
+ chainId: BigInt(chainIdNum),
170
+ type: txType,
214
171
  });
215
172
  }
216
173
  // ✅ 并行签名所有买入和卖出交易
@@ -220,9 +177,9 @@ export async function fourBundleBuyFirstMerkle(params) {
220
177
  nonce: multiNoncePlan.buyerNonces[i],
221
178
  gasLimit: finalGasLimit,
222
179
  gasPrice,
223
- chainId: chainIdNum,
180
+ chainId: BigInt(chainIdNum),
224
181
  type: txType,
225
- value: buyAmountsWei[i]
182
+ value: buyAmountsWei[i],
226
183
  }));
227
184
  const sellSignPromises = sellUnsignedArray.map((unsigned, i) => seller.signTransaction({
228
185
  ...unsigned,
@@ -230,14 +187,11 @@ export async function fourBundleBuyFirstMerkle(params) {
230
187
  nonce: multiNoncePlan.sellerNonces[i],
231
188
  gasLimit: finalGasLimit,
232
189
  gasPrice,
233
- chainId: chainIdNum,
190
+ chainId: BigInt(chainIdNum),
234
191
  type: txType,
235
- value: 0n
192
+ value: 0n,
236
193
  }));
237
- const [signedBuys, signedSells] = await Promise.all([
238
- Promise.all(buySignPromises),
239
- Promise.all(sellSignPromises)
240
- ]);
194
+ const [signedBuys, signedSells] = await Promise.all([Promise.all(buySignPromises), Promise.all(sellSignPromises)]);
241
195
  nonceManager.clearTemp();
242
196
  // ✅ 组装交易列表:贿赂 → 买入(多笔) → 卖出(多笔)(与 Flap 一致)
243
197
  const allTransactions = [];
@@ -256,7 +210,7 @@ export async function fourBundleBuyFirstMerkle(params) {
256
210
  gasPrice,
257
211
  chainId: chainIdNum,
258
212
  txType,
259
- startNonce: multiNoncePlan.profitNonce
213
+ startNonce: multiNoncePlan.profitNonce,
260
214
  });
261
215
  allTransactions.push(...profitHopResult.signedTransactions);
262
216
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -274,16 +228,16 @@ export async function fourBundleBuyFirstMerkle(params) {
274
228
  buyCount,
275
229
  sellCount,
276
230
  // ✅ 返回每笔交易的具体金额(随机分配后的数组)
277
- buyAmounts: buyAmountsWei.map(amt => ethers.formatEther(amt)),
278
- sellAmounts: sellAmountsWei.map(amt => ethers.formatUnits(amt, decimals))
279
- }
231
+ buyAmounts: buyAmountsWei.map((amt) => ethers.formatEther(amt)),
232
+ sellAmounts: sellAmountsWei.map((amt) => ethers.formatUnits(amt, decimals)),
233
+ },
280
234
  };
281
235
  }
282
236
  /**
283
237
  * ✅ 规划多笔交易 nonce(与 Flap 一致)
284
238
  * 交易顺序:贿赂 → 买入(多笔) → 卖出(多笔) → 利润
285
239
  */
286
- async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProfit, needBribeTx, sameAddress, nonceManager }) {
240
+ async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProfit, needBribeTx, sameAddress, nonceManager, }) {
287
241
  const profitNonceCount = extractProfit ? 1 : 0;
288
242
  if (sameAddress) {
289
243
  // 同一地址:贿赂(可选) + 买入(多笔) + 卖出(多笔) + 利润(可选)
@@ -306,7 +260,7 @@ async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProf
306
260
  const sellerTxCount = bribeTxCount + sellCount + profitNonceCount;
307
261
  const [buyerNonces, sellerNoncesAll] = await Promise.all([
308
262
  nonceManager.getNextNonceBatch(buyer, buyCount),
309
- nonceManager.getNextNonceBatch(seller, sellerTxCount)
263
+ nonceManager.getNextNonceBatch(seller, sellerTxCount),
310
264
  ]);
311
265
  let idx = 0;
312
266
  const bribeNonce = needBribeTx ? sellerNoncesAll[idx++] : undefined;
@@ -335,15 +289,12 @@ async function fourBundleBuyFirstMultiWallet(params) {
335
289
  // ✅ 计算利润比例(根据 userType 动态调整)
336
290
  const totalTxCount = buyCount + sellCount;
337
291
  const profitRateBps = getProfitRatePerTxBps(config.userType) * totalTxCount;
338
- const chainIdNum = config.chainId ?? 56;
339
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
340
- chainId: chainIdNum,
341
- name: 'BSC'
342
- });
292
+ const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
293
+ const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
343
294
  const nonceManager = new NonceManager(provider);
344
295
  // 创建所有钱包实例
345
- const buyers = buyerPrivateKeys.map(pk => new Wallet(pk, provider));
346
- const sellers = sellerPrivateKeys.map(pk => new Wallet(pk, provider));
296
+ const buyers = buyerPrivateKeys.map((pk) => new Wallet(pk, provider));
297
+ const sellers = sellerPrivateKeys.map((pk) => new Wallet(pk, provider));
347
298
  // 使用第一个卖方作为主卖方(支付贿赂和利润)
348
299
  const mainSeller = sellers[0];
349
300
  // ✅ 计算总交易金额
@@ -360,13 +311,11 @@ async function fourBundleBuyFirstMultiWallet(params) {
360
311
  const needBribeTx = bribeAmount > 0n;
361
312
  // ✅ 第一批并行:报价 + Gas价格 + 代币精度
362
313
  const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
363
- const erc20 = new Contract(tokenAddress, [
364
- 'function decimals() view returns (uint8)'
365
- ], provider);
314
+ const erc20 = new Contract(tokenAddress, ['function decimals() view returns (uint8)'], provider);
366
315
  const [buyQuote, gasPrice, decimals] = await Promise.all([
367
316
  helper3.tryBuy(tokenAddress, 0n, totalFundsWei),
368
317
  getOptimizedGasPrice(provider, getGasPriceConfig(config)),
369
- erc20.decimals()
318
+ erc20.decimals(),
370
319
  ]);
371
320
  const estimatedTokenAmount = buyQuote.estimatedAmount ?? buyQuote[2];
372
321
  if (!estimatedTokenAmount || estimatedTokenAmount <= 0n) {
@@ -379,15 +328,14 @@ async function fourBundleBuyFirstMultiWallet(params) {
379
328
  // ✅ 第二批并行:估算利润 + 获取所有钱包 nonces
380
329
  // 预先计算所有唯一钱包地址(去重)
381
330
  const allWallets = [...sellers, ...buyers];
382
- const uniqueAddresses = new Set(allWallets.map(w => w.address.toLowerCase()));
383
331
  const uniqueWallets = allWallets.filter((w, i) => {
384
332
  const addr = w.address.toLowerCase();
385
- const firstIdx = allWallets.findIndex(x => x.address.toLowerCase() === addr);
333
+ const firstIdx = allWallets.findIndex((x) => x.address.toLowerCase() === addr);
386
334
  return firstIdx === i;
387
335
  });
388
336
  const [sellResult, noncesArray] = await Promise.all([
389
337
  trySell('BSC', config.rpcUrl, tokenAddress, estimatedTokenAmount),
390
- nonceManager.getNextNoncesForWallets(uniqueWallets)
338
+ nonceManager.getNextNoncesForWallets(uniqueWallets),
391
339
  ]);
392
340
  // 构建 nonces Map
393
341
  const noncesMap = new Map();
@@ -411,20 +359,20 @@ async function fourBundleBuyFirstMultiWallet(params) {
411
359
  nonce: bribeNonce,
412
360
  gasPrice,
413
361
  gasLimit: 21000n,
414
- chainId: chainIdNum,
415
- type: txType
362
+ chainId: BigInt(chainIdNum),
363
+ type: txType,
416
364
  });
417
365
  }
418
366
  // 2. 预分配所有 nonces(同步操作,避免竞态)
419
367
  const buyerNonces = [];
420
368
  const sellerNonces = [];
421
- buyers.forEach(buyer => {
369
+ buyers.forEach((buyer) => {
422
370
  const addr = buyer.address.toLowerCase();
423
371
  const nonce = noncesMap.get(addr);
424
372
  buyerNonces.push(nonce);
425
373
  noncesMap.set(addr, nonce + 1);
426
374
  });
427
- sellers.forEach(seller => {
375
+ sellers.forEach((seller) => {
428
376
  const addr = seller.address.toLowerCase();
429
377
  const nonce = noncesMap.get(addr);
430
378
  sellerNonces.push(nonce);
@@ -440,9 +388,9 @@ async function fourBundleBuyFirstMultiWallet(params) {
440
388
  nonce: buyerNonces[i],
441
389
  gasLimit: finalGasLimit,
442
390
  gasPrice,
443
- chainId: chainIdNum,
391
+ chainId: BigInt(chainIdNum),
444
392
  type: txType,
445
- value: buyAmountsWei[i]
393
+ value: buyAmountsWei[i],
446
394
  });
447
395
  });
448
396
  // 4. 并行构建所有卖出交易
@@ -455,16 +403,16 @@ async function fourBundleBuyFirstMultiWallet(params) {
455
403
  nonce: sellerNonces[i],
456
404
  gasLimit: finalGasLimit,
457
405
  gasPrice,
458
- chainId: chainIdNum,
406
+ chainId: BigInt(chainIdNum),
459
407
  type: txType,
460
- value: 0n
408
+ value: 0n,
461
409
  });
462
410
  });
463
411
  // ✅ 并行签名所有交易(贿赂 + 买入 + 卖出)
464
412
  const [bribeTx, signedBuys, signedSells] = await Promise.all([
465
413
  bribeTxPromise,
466
414
  Promise.all(buyTxPromises),
467
- Promise.all(sellTxPromises)
415
+ Promise.all(sellTxPromises),
468
416
  ]);
469
417
  // 组装交易顺序:贿赂 → 买入 → 卖出
470
418
  if (bribeTx)
@@ -484,7 +432,7 @@ async function fourBundleBuyFirstMultiWallet(params) {
484
432
  gasPrice,
485
433
  chainId: chainIdNum,
486
434
  txType,
487
- startNonce: profitNonce
435
+ startNonce: profitNonce,
488
436
  });
489
437
  allTransactions.push(...profitHopResult.signedTransactions);
490
438
  profitHopWallets = profitHopResult.hopWallets;
@@ -494,15 +442,15 @@ async function fourBundleBuyFirstMultiWallet(params) {
494
442
  signedTransactions: allTransactions,
495
443
  profitHopWallets,
496
444
  metadata: {
497
- buyerAddress: buyers.map(b => b.address).join(','),
498
- sellerAddress: sellers.map(s => s.address).join(','),
445
+ buyerAddress: buyers.map((b) => b.address).join(','),
446
+ sellerAddress: sellers.map((s) => s.address).join(','),
499
447
  buyAmount: ethers.formatEther(totalFundsWei),
500
448
  sellAmount: ethers.formatUnits(estimatedTokenAmount, decimals),
501
449
  profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
502
450
  buyCount,
503
451
  sellCount,
504
- buyAmounts: buyAmountsWei.map(amt => ethers.formatEther(amt)),
505
- sellAmounts: sellAmountsWei.map(amt => ethers.formatUnits(amt, decimals))
506
- }
452
+ buyAmounts: buyAmountsWei.map((amt) => ethers.formatEther(amt)),
453
+ sellAmounts: sellAmountsWei.map((amt) => ethers.formatUnits(amt, decimals)),
454
+ },
507
455
  };
508
456
  }
@@ -0,0 +1,6 @@
1
+ import { Wallet, type JsonRpcProvider } from 'ethers';
2
+ import type { DisperseHopPath } from './types.js';
3
+ export declare const NATIVE_TRANSFER_GAS_LIMIT = 21055n;
4
+ export type { DisperseHopPath } from './types.js';
5
+ export declare function generateDisperseHopPaths(targetAddresses: string[], hopCount: number, provider: JsonRpcProvider): DisperseHopPath[];
6
+ export declare function buildNativeHopChain(payer: Wallet, path: DisperseHopPath, finalAmount: bigint, gasPrice: bigint, chainId: number, txType: 0 | 2, payerNonce: number): Promise<string[]>;
@@ -0,0 +1,63 @@
1
+ import { Wallet } from 'ethers';
2
+ import { generateWallets } from '../../utils/wallet.js';
3
+ export const NATIVE_TRANSFER_GAS_LIMIT = 21055n;
4
+ export function generateDisperseHopPaths(targetAddresses, hopCount, provider) {
5
+ if (hopCount <= 0) {
6
+ return targetAddresses.map((addr) => ({
7
+ targetAddress: addr,
8
+ hopWallets: [],
9
+ hopWalletsInfo: [],
10
+ }));
11
+ }
12
+ return targetAddresses.map((targetAddress) => {
13
+ const hopWalletsInfo = generateWallets(hopCount);
14
+ const hopWallets = hopWalletsInfo.map((w) => new Wallet(w.privateKey, provider));
15
+ return { targetAddress, hopWallets, hopWalletsInfo };
16
+ });
17
+ }
18
+ export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, chainId, txType, payerNonce) {
19
+ const signedTxs = [];
20
+ const hopCount = path.hopWallets.length;
21
+ if (hopCount === 0) {
22
+ signedTxs.push(await payer.signTransaction({
23
+ to: path.targetAddress,
24
+ value: finalAmount,
25
+ nonce: payerNonce,
26
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
27
+ gasPrice,
28
+ chainId,
29
+ type: txType,
30
+ }));
31
+ return signedTxs;
32
+ }
33
+ const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
34
+ const amountsPerHop = [];
35
+ for (let i = 0; i < hopCount; i++) {
36
+ const remainingHops = hopCount - i;
37
+ amountsPerHop.push(finalAmount + hopGasCost * BigInt(remainingHops));
38
+ }
39
+ signedTxs.push(await payer.signTransaction({
40
+ to: path.hopWallets[0].address,
41
+ value: amountsPerHop[0],
42
+ nonce: payerNonce,
43
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
44
+ gasPrice,
45
+ chainId,
46
+ type: txType,
47
+ }));
48
+ for (let i = 0; i < hopCount; i++) {
49
+ const fromWallet = path.hopWallets[i];
50
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
51
+ const amount = i === hopCount - 1 ? finalAmount : amountsPerHop[i + 1];
52
+ signedTxs.push(await fromWallet.signTransaction({
53
+ to: toAddress,
54
+ value: amount,
55
+ nonce: 0,
56
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
57
+ gasPrice,
58
+ chainId,
59
+ type: txType,
60
+ }));
61
+ }
62
+ return signedTxs;
63
+ }
@@ -1,18 +1,18 @@
1
1
  // 共享的 Swap 内部常量与 ABI
2
2
  // ✅ 从公共模块重新导出
3
- import { TM2_ABI, HELPER3_ABI as _HELPER3_ABI } from '../../shared/abis/common.js';
4
- import { ADDRESSES } from '../../utils/constants.js';
3
+ import { TM2_ABI, HELPER3_ABI as _HELPER3_ABI } from '../../abis/common.js';
4
+ import { ADDRESSES } from '../../core/constants/index.js';
5
5
  // ✅ Four.meme 内盘 ABI(与公共 TM2_ABI 扩展)
6
6
  export const TM_ABI = [
7
7
  ...TM2_ABI,
8
8
  'function sellToken(uint256 origin, address token, uint256 amount, uint256 minFunds) returns (uint256)',
9
- 'function buyTokenAMAP(uint256 origin, address token, address to, uint256 funds, uint256 minAmount) payable returns (uint256)'
9
+ 'function buyTokenAMAP(uint256 origin, address token, address to, uint256 funds, uint256 minAmount) payable returns (uint256)',
10
10
  ];
11
11
  // ✅ Helper3 ABI(与公共 HELPER3_ABI 扩展)
12
12
  export const HELPER3_ABI = [
13
13
  ..._HELPER3_ABI,
14
14
  'function tryBuy(address token, uint256 amount, uint256 funds) view returns (address tokenManager, address quote, uint256 estimatedAmount, uint256 estimatedCost, uint256 estimatedFee, uint256 amountMsgValue, uint256 amountApproval, uint256 amountFunds)',
15
- 'function trySell(address token, uint256 amount) view returns (address tokenManager, address quote, uint256 funds, uint256 fee)'
15
+ 'function trySell(address token, uint256 amount) view returns (address tokenManager, address quote, uint256 funds, uint256 fee)',
16
16
  ];
17
17
  // ✅ Four.meme 使用 TokenManagerOriginal(代理合约已移除)
18
18
  export const TM_ADDRESS = ADDRESSES.BSC.TokenManagerOriginal;
@@ -0,0 +1,28 @@
1
+ import { Wallet, type JsonRpcProvider } from 'ethers';
2
+ import { type CommonBundleConfig } from '../../utils/bundle-helpers.js';
3
+ import type { FourSwapSignConfig, SellerNoncePlan, UserType } from './types.js';
4
+ export type { SellerNoncePlan } from './types.js';
5
+ export declare function getFourSwapProfitRateBps(userType?: UserType): number;
6
+ export declare function needsTmTokenApproval(currentAllowance: bigint, decimals: number): boolean;
7
+ export declare function countSellerNonceSlots(needBribeTx: boolean, needApproval: boolean, includeProfit: boolean): number;
8
+ export declare function planSellerNonces(sellerNonces: number[], needBribeTx: boolean, needApproval: boolean, extractProfit: boolean): SellerNoncePlan;
9
+ export declare function signTmMaxApprovalTx(seller: Wallet, tokenAddress: string, approvalNonce: number, gasPrice: bigint, chainIdNum: number, txType: 0 | 2): Promise<string>;
10
+ export declare function quoteFourSwapSellFunds(provider: JsonRpcProvider, tokenAddress: string, sellAmountWei: bigint): Promise<bigint>;
11
+ export declare function fetchFourSwapSellQuoteAndAllowance(provider: JsonRpcProvider, tokenAddress: string, sellerAddress: string, sellAmountWei: bigint): Promise<{
12
+ sellFunds: bigint;
13
+ allowance: bigint;
14
+ }>;
15
+ export declare function fetchFourSwapSellQuoteAllowanceAndBalances(provider: JsonRpcProvider, tokenAddress: string, sellerAddress: string, sellAmountWei: bigint, buyerAddresses: string[]): Promise<{
16
+ sellFunds: bigint;
17
+ allowance: bigint;
18
+ buyerBalances: bigint[];
19
+ }>;
20
+ export declare function toCommonBundleConfig(config: FourSwapSignConfig): CommonBundleConfig;
21
+ export type FourSwapGasContext = {
22
+ chainIdNum: number;
23
+ provider: JsonRpcProvider;
24
+ bundleConfig: CommonBundleConfig;
25
+ finalGasLimit: bigint;
26
+ txType: 0 | 2;
27
+ };
28
+ export declare function createFourSwapGasContext(config: FourSwapSignConfig): FourSwapGasContext;
@@ -0,0 +1,105 @@
1
+ import { ethers, Contract } from 'ethers';
2
+ import { getGasLimit } from '../../utils/bundle-helpers.js';
3
+ import { ADDRESSES, CHAINS } from '../../core/constants/index.js';
4
+ import { getProfitRateBps as getSharedProfitRateBps } from '../../core/constants/index.js';
5
+ import { getTxType } from '../config-helpers.js';
6
+ import { createSignProvider } from '../sign-context-helpers.js';
7
+ import { HELPER3_ABI, TM_ADDRESS } from './swap-internal.js';
8
+ const APPROVE_INTERFACE = new ethers.Interface(['function approve(address,uint256) returns (bool)']);
9
+ const ERC20_ALLOWANCE_ABI = ['function allowance(address,address) view returns (uint256)'];
10
+ export function getFourSwapProfitRateBps(userType) {
11
+ if (userType === 'v0')
12
+ return getSharedProfitRateBps('v0Single');
13
+ if (userType === 'v1')
14
+ return getSharedProfitRateBps('v1Single');
15
+ return getSharedProfitRateBps('v0Single');
16
+ }
17
+ export function needsTmTokenApproval(currentAllowance, decimals) {
18
+ const threshold = ethers.parseUnits('1000000000', decimals);
19
+ return currentAllowance < threshold;
20
+ }
21
+ export function countSellerNonceSlots(needBribeTx, needApproval, includeProfit) {
22
+ let count = 1;
23
+ if (needBribeTx)
24
+ count++;
25
+ if (needApproval)
26
+ count++;
27
+ if (includeProfit)
28
+ count++;
29
+ return count;
30
+ }
31
+ export function planSellerNonces(sellerNonces, needBribeTx, needApproval, extractProfit) {
32
+ let idx = 0;
33
+ const plan = { sellerNonce: sellerNonces[0] };
34
+ if (needBribeTx)
35
+ plan.bribeNonce = sellerNonces[idx++];
36
+ if (needApproval)
37
+ plan.approvalNonce = sellerNonces[idx++];
38
+ plan.sellerNonce = sellerNonces[idx++];
39
+ if (extractProfit)
40
+ plan.profitNonce = sellerNonces[idx];
41
+ return plan;
42
+ }
43
+ export async function signTmMaxApprovalTx(seller, tokenAddress, approvalNonce, gasPrice, chainIdNum, txType) {
44
+ const approveData = APPROVE_INTERFACE.encodeFunctionData('approve', [TM_ADDRESS, ethers.MaxUint256]);
45
+ return seller.signTransaction({
46
+ to: tokenAddress,
47
+ data: approveData,
48
+ value: 0n,
49
+ nonce: approvalNonce,
50
+ gasLimit: 80000n,
51
+ gasPrice,
52
+ chainId: chainIdNum,
53
+ type: txType,
54
+ });
55
+ }
56
+ export async function quoteFourSwapSellFunds(provider, tokenAddress, sellAmountWei) {
57
+ const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
58
+ const sellQuote = await helper3.trySell(tokenAddress, sellAmountWei);
59
+ return sellQuote.funds;
60
+ }
61
+ export async function fetchFourSwapSellQuoteAndAllowance(provider, tokenAddress, sellerAddress, sellAmountWei) {
62
+ const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
63
+ const erc20 = new Contract(tokenAddress, ERC20_ALLOWANCE_ABI, provider);
64
+ const [sellQuote, allowance] = await Promise.all([
65
+ helper3.trySell(tokenAddress, sellAmountWei),
66
+ erc20.allowance(sellerAddress, TM_ADDRESS),
67
+ ]);
68
+ return { sellFunds: sellQuote.funds, allowance };
69
+ }
70
+ export async function fetchFourSwapSellQuoteAllowanceAndBalances(provider, tokenAddress, sellerAddress, sellAmountWei, buyerAddresses) {
71
+ const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
72
+ const erc20 = new Contract(tokenAddress, ERC20_ALLOWANCE_ABI, provider);
73
+ const [sellQuote, allowance, ...buyerBalances] = await Promise.all([
74
+ helper3.trySell(tokenAddress, sellAmountWei),
75
+ erc20.allowance(sellerAddress, TM_ADDRESS),
76
+ ...buyerAddresses.map((addr) => provider.getBalance(addr)),
77
+ ]);
78
+ return {
79
+ sellFunds: sellQuote.funds,
80
+ allowance,
81
+ buyerBalances,
82
+ };
83
+ }
84
+ export function toCommonBundleConfig(config) {
85
+ return {
86
+ minGasPriceGwei: config.minGasPriceGwei,
87
+ maxGasPriceGwei: config.maxGasPriceGwei,
88
+ gasLimit: typeof config.gasLimit === 'bigint' ? Number(config.gasLimit) : config.gasLimit,
89
+ gasLimitMultiplier: config.gasLimitMultiplier,
90
+ txType: config.txType,
91
+ chainId: config.chainId,
92
+ };
93
+ }
94
+ export function createFourSwapGasContext(config) {
95
+ const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
96
+ const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
97
+ const bundleConfig = toCommonBundleConfig(config);
98
+ return {
99
+ chainIdNum,
100
+ provider,
101
+ bundleConfig,
102
+ finalGasLimit: getGasLimit(bundleConfig),
103
+ txType: getTxType(bundleConfig),
104
+ };
105
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)
3
+ */
4
+ import type { FourBatchSwapResult, FourBatchSwapSignParams, FourBundleSwapSignParams, FourQuickBatchSwapResult, FourQuickBatchSwapSignParams, FourSwapResult } from './types.js';
5
+ export type { UserType, FourSwapSignConfig, FourSwapConfig, FourBundleSwapSignParams, FourBundleSwapParams, FourSwapResult, FourBatchSwapSignParams, FourBatchSwapResult, FourQuickBatchSwapSignParams, FourQuickBatchSwapResult, } from './types.js';
6
+ /**
7
+ * Four内盘捆绑换手
8
+ */
9
+ export declare function fourBundleSwapMerkle(params: FourBundleSwapSignParams): Promise<FourSwapResult>;
10
+ /**
11
+ * Four 内盘批量换手(一卖多买)
12
+ */
13
+ export declare function fourBatchSwapMerkle(params: FourBatchSwapSignParams): Promise<FourBatchSwapResult>;
14
+ /**
15
+ * Four 内盘快捷批量换手(资金利用率模式)
16
+ */
17
+ export declare function fourQuickBatchSwapMerkle(params: FourQuickBatchSwapSignParams): Promise<FourQuickBatchSwapResult>;