four-flap-meme-sdk 3.0.0 → 4.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 (446) hide show
  1. package/dist/bundle/four-meme/approve-tokenmanager.d.ts +2 -2
  2. package/dist/bundle/four-meme/approve-tokenmanager.js +3 -3
  3. package/dist/bundle/four-meme/core/buy-flow.d.ts +5 -0
  4. package/dist/bundle/four-meme/core/buy-flow.js +147 -0
  5. package/dist/bundle/four-meme/core/constants.d.ts +6 -0
  6. package/dist/bundle/four-meme/core/constants.js +15 -0
  7. package/dist/bundle/four-meme/core/create-token.d.ts +5 -0
  8. package/dist/bundle/four-meme/core/create-token.js +137 -0
  9. package/dist/bundle/four-meme/core/index.d.ts +14 -0
  10. package/dist/bundle/four-meme/core/index.js +14 -0
  11. package/dist/bundle/four-meme/core/sell-flow.d.ts +5 -0
  12. package/dist/bundle/four-meme/core/sell-flow.js +240 -0
  13. package/dist/bundle/four-meme/core-helpers.js +1 -1
  14. package/dist/bundle/four-meme/core.d.ts +7 -4
  15. package/dist/bundle/four-meme/core.js +5 -513
  16. package/dist/bundle/four-meme/pancake-proxy/approve.d.ts +15 -0
  17. package/dist/bundle/four-meme/pancake-proxy/approve.js +113 -0
  18. package/dist/bundle/four-meme/pancake-proxy/buy.d.ts +8 -0
  19. package/dist/bundle/four-meme/pancake-proxy/buy.js +143 -0
  20. package/dist/bundle/four-meme/pancake-proxy/constants.d.ts +25 -0
  21. package/dist/bundle/four-meme/pancake-proxy/constants.js +14 -0
  22. package/dist/bundle/four-meme/pancake-proxy/helpers.d.ts +45 -0
  23. package/dist/bundle/four-meme/pancake-proxy/helpers.js +232 -0
  24. package/dist/bundle/four-meme/pancake-proxy/index.d.ts +15 -0
  25. package/dist/bundle/four-meme/pancake-proxy/index.js +15 -0
  26. package/dist/bundle/four-meme/pancake-proxy/sell.d.ts +8 -0
  27. package/dist/bundle/four-meme/pancake-proxy/sell.js +194 -0
  28. package/dist/bundle/four-meme/pancake-proxy.d.ts +4 -20
  29. package/dist/bundle/four-meme/pancake-proxy.js +3 -670
  30. package/dist/bundle/four-meme/private/buy.d.ts +16 -0
  31. package/dist/bundle/four-meme/private/buy.js +225 -0
  32. package/dist/bundle/four-meme/private/index.d.ts +11 -0
  33. package/dist/bundle/four-meme/private/index.js +11 -0
  34. package/dist/bundle/four-meme/private/sell.d.ts +18 -0
  35. package/dist/bundle/four-meme/private/sell.js +245 -0
  36. package/dist/bundle/four-meme/private.d.ts +5 -25
  37. package/dist/bundle/four-meme/private.js +5 -463
  38. package/dist/bundle/four-meme/swap/batch.d.ts +8 -0
  39. package/dist/bundle/four-meme/swap/batch.js +170 -0
  40. package/dist/bundle/four-meme/swap/bundle.d.ts +8 -0
  41. package/dist/bundle/four-meme/swap/bundle.js +147 -0
  42. package/dist/bundle/four-meme/swap/index.d.ts +14 -0
  43. package/dist/bundle/four-meme/swap/index.js +13 -0
  44. package/dist/bundle/four-meme/swap/quick-batch.d.ts +8 -0
  45. package/dist/bundle/four-meme/swap/quick-batch.js +206 -0
  46. package/dist/bundle/four-meme/swap-buy-first/helpers.d.ts +20 -0
  47. package/dist/bundle/four-meme/swap-buy-first/helpers.js +39 -0
  48. package/dist/bundle/four-meme/swap-buy-first/index.d.ts +12 -0
  49. package/dist/bundle/four-meme/swap-buy-first/index.js +11 -0
  50. package/dist/bundle/four-meme/swap-buy-first/multi-wallet.d.ts +20 -0
  51. package/dist/bundle/four-meme/swap-buy-first/multi-wallet.js +198 -0
  52. package/dist/bundle/four-meme/swap-buy-first/single.d.ts +7 -0
  53. package/dist/bundle/four-meme/swap-buy-first/single.js +232 -0
  54. package/dist/bundle/four-meme/swap-buy-first.d.ts +4 -3
  55. package/dist/bundle/four-meme/swap-buy-first.js +4 -451
  56. package/dist/bundle/four-meme/swap-hop-helpers.d.ts +2 -2
  57. package/dist/bundle/four-meme/swap-sign-helpers.d.ts +2 -2
  58. package/dist/bundle/four-meme/swap-sign-helpers.js +1 -1
  59. package/dist/bundle/four-meme/swap.d.ts +4 -14
  60. package/dist/bundle/four-meme/swap.js +4 -502
  61. package/dist/bundle/four-meme/types/index.d.ts +1 -1
  62. package/dist/bundle/four-meme/utils-disperse.d.ts +1 -1
  63. package/dist/bundle/four-meme/utils-disperse.js +1 -1
  64. package/dist/bundle/four-meme/utils-pairwise.d.ts +1 -1
  65. package/dist/bundle/four-meme/utils-pairwise.js +1 -1
  66. package/dist/bundle/four-meme/utils-sweep/context.d.ts +39 -0
  67. package/dist/bundle/four-meme/utils-sweep/context.js +7 -0
  68. package/dist/bundle/four-meme/utils-sweep/erc20-no-hop.d.ts +5 -0
  69. package/dist/bundle/four-meme/utils-sweep/erc20-no-hop.js +162 -0
  70. package/dist/bundle/four-meme/utils-sweep/index.d.ts +13 -0
  71. package/dist/bundle/four-meme/utils-sweep/index.js +13 -0
  72. package/dist/bundle/four-meme/utils-sweep/main.d.ts +8 -0
  73. package/dist/bundle/four-meme/utils-sweep/main.js +114 -0
  74. package/dist/bundle/four-meme/utils-sweep/native-no-hop.d.ts +5 -0
  75. package/dist/bundle/four-meme/utils-sweep/native-no-hop.js +156 -0
  76. package/dist/bundle/four-meme/utils-sweep/with-hops.d.ts +6 -0
  77. package/dist/bundle/four-meme/utils-sweep/with-hops.js +382 -0
  78. package/dist/bundle/four-meme/utils-sweep.d.ts +3 -4
  79. package/dist/bundle/four-meme/utils-sweep.js +3 -740
  80. package/dist/bundle/internal.d.ts +2 -2
  81. package/dist/bundle/sign-context-helpers.d.ts +1 -26
  82. package/dist/bundle/sign-context-helpers.js +1 -63
  83. package/dist/bundle/submit/blockrazor.d.ts +94 -0
  84. package/dist/bundle/submit/blockrazor.js +122 -0
  85. package/dist/bundle/submit/direct.d.ts +118 -0
  86. package/dist/bundle/submit/direct.js +484 -0
  87. package/dist/bundle/submit/helpers.d.ts +7 -0
  88. package/dist/bundle/submit/helpers.js +15 -0
  89. package/dist/bundle/submit/index.d.ts +14 -0
  90. package/dist/bundle/submit/index.js +14 -0
  91. package/dist/bundle/submit/merkle.d.ts +84 -0
  92. package/dist/bundle/submit/merkle.js +121 -0
  93. package/dist/bundle/submit.d.ts +3 -286
  94. package/dist/bundle/submit.js +3 -724
  95. package/dist/chains/bsc/four/types.d.ts +1 -1
  96. package/dist/chains/bsc/index.d.ts +1 -1
  97. package/dist/chains/bsc/index.js +2 -0
  98. package/dist/chains/bsc/pancake/bundle-buy-first-build.d.ts +25 -0
  99. package/dist/chains/bsc/pancake/bundle-buy-first-build.js +177 -0
  100. package/dist/chains/bsc/pancake/bundle-buy-first-constants.d.ts +30 -0
  101. package/dist/chains/bsc/pancake/bundle-buy-first-constants.js +24 -0
  102. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +11 -149
  103. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +12 -74
  104. package/dist/chains/bsc/pancake/bundle-buy-first-multi-wallet.d.ts +9 -0
  105. package/dist/chains/bsc/pancake/bundle-buy-first-multi-wallet.js +225 -0
  106. package/dist/chains/bsc/pancake/bundle-buy-first-plan.d.ts +14 -0
  107. package/dist/chains/bsc/pancake/bundle-buy-first-plan.js +64 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first-profit.d.ts +12 -0
  109. package/dist/chains/bsc/pancake/bundle-buy-first-profit.js +22 -0
  110. package/dist/chains/bsc/pancake/bundle-buy-first-quote.d.ts +15 -0
  111. package/dist/chains/bsc/pancake/bundle-buy-first-quote.js +122 -0
  112. package/dist/chains/bsc/pancake/bundle-buy-first-types.d.ts +179 -0
  113. package/dist/chains/bsc/pancake/bundle-buy-first-types.js +1 -0
  114. package/dist/chains/bsc/pancake/bundle-buy-first-validate.d.ts +2 -0
  115. package/dist/chains/bsc/pancake/bundle-buy-first-validate.js +41 -0
  116. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -1
  117. package/dist/chains/bsc/pancake/bundle-buy-first.js +8 -578
  118. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +11 -239
  119. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +12 -564
  120. package/dist/chains/bsc/pancake/bundle-swap-types.d.ts +183 -0
  121. package/dist/chains/bsc/pancake/bundle-swap-types.js +17 -0
  122. package/dist/chains/bsc/pancake/bundle-swap.d.ts +10 -132
  123. package/dist/chains/bsc/pancake/bundle-swap.js +12 -1003
  124. package/dist/chains/bsc/pancake/hop-chain.d.ts +18 -0
  125. package/dist/chains/bsc/pancake/hop-chain.js +227 -0
  126. package/dist/chains/bsc/pancake/quote.d.ts +14 -0
  127. package/dist/chains/bsc/pancake/quote.js +84 -0
  128. package/dist/chains/bsc/pancake/swap-batch.d.ts +42 -0
  129. package/dist/chains/bsc/pancake/swap-batch.js +283 -0
  130. package/dist/chains/bsc/pancake/swap-build.d.ts +19 -0
  131. package/dist/chains/bsc/pancake/swap-build.js +226 -0
  132. package/dist/chains/bsc/pancake/swap-cross.d.ts +42 -0
  133. package/dist/chains/bsc/pancake/swap-cross.js +140 -0
  134. package/dist/chains/bsc/pancake/swap-quick.d.ts +54 -0
  135. package/dist/chains/bsc/pancake/swap-quick.js +424 -0
  136. package/dist/chains/bsc/pancake/swap-single.d.ts +2 -0
  137. package/dist/chains/bsc/pancake/swap-single.js +182 -0
  138. package/dist/chains/bsc/platforms/four/index.d.ts +21 -3
  139. package/dist/chains/bsc/platforms/four/index.js +28 -3
  140. package/dist/chains/eni/batch-router/transfer-disperse.d.ts +37 -0
  141. package/dist/chains/eni/batch-router/transfer-disperse.js +302 -0
  142. package/dist/chains/eni/batch-router/transfer-shared.d.ts +9 -0
  143. package/dist/chains/eni/batch-router/transfer-shared.js +10 -0
  144. package/dist/chains/eni/batch-router/transfer-sweep.d.ts +51 -0
  145. package/dist/chains/eni/batch-router/transfer-sweep.js +364 -0
  146. package/dist/chains/eni/batch-router/transfer.d.ts +4 -74
  147. package/dist/chains/eni/batch-router/transfer.js +2 -647
  148. package/dist/chains/eni/index.d.ts +2 -0
  149. package/dist/chains/eni/index.js +4 -0
  150. package/dist/chains/eni/platforms/daoaas/portal-direct-profit.d.ts +17 -0
  151. package/dist/chains/eni/platforms/daoaas/portal-direct-profit.js +30 -0
  152. package/dist/chains/eni/platforms/daoaas/portal-direct-submit.d.ts +12 -0
  153. package/dist/chains/eni/platforms/daoaas/portal-direct-submit.js +396 -0
  154. package/dist/chains/eni/platforms/daoaas/portal-direct-tx.d.ts +20 -0
  155. package/dist/chains/eni/platforms/daoaas/portal-direct-tx.js +165 -0
  156. package/dist/chains/eni/platforms/daoaas/portal-direct.d.ts +3 -32
  157. package/dist/chains/eni/platforms/daoaas/portal-direct.js +3 -571
  158. package/dist/chains/eni/submit.js +1 -1
  159. package/dist/chains/xlayer/constants.d.ts +0 -2
  160. package/dist/chains/xlayer/constants.js +0 -2
  161. package/dist/chains/xlayer/eip7702/auth.d.ts +16 -0
  162. package/dist/chains/xlayer/eip7702/auth.js +81 -0
  163. package/dist/chains/xlayer/eip7702/bundle-create-buy.d.ts +22 -0
  164. package/dist/chains/xlayer/eip7702/bundle-create-buy.js +201 -0
  165. package/dist/chains/xlayer/eip7702/bundle-create-helpers.d.ts +114 -0
  166. package/dist/chains/xlayer/eip7702/bundle-create-helpers.js +139 -0
  167. package/dist/chains/xlayer/eip7702/bundle-create-to-dex.d.ts +24 -0
  168. package/dist/chains/xlayer/eip7702/bundle-create-to-dex.js +233 -0
  169. package/dist/chains/xlayer/eip7702/bundle-create.d.ts +3 -35
  170. package/dist/chains/xlayer/eip7702/bundle-create.js +3 -746
  171. package/dist/chains/xlayer/eip7702/bundle-graduate-buy.d.ts +22 -0
  172. package/dist/chains/xlayer/eip7702/bundle-graduate-buy.js +214 -0
  173. package/dist/chains/xlayer/eip7702/bundle-sell.js +1 -1
  174. package/dist/chains/xlayer/eip7702/bundle-swap-batch.d.ts +31 -0
  175. package/dist/chains/xlayer/eip7702/bundle-swap-batch.js +216 -0
  176. package/dist/chains/xlayer/eip7702/bundle-swap-helpers.d.ts +21 -0
  177. package/dist/chains/xlayer/eip7702/bundle-swap-helpers.js +206 -0
  178. package/dist/chains/xlayer/eip7702/bundle-swap-multi.d.ts +33 -0
  179. package/dist/chains/xlayer/eip7702/bundle-swap-multi.js +146 -0
  180. package/dist/chains/xlayer/eip7702/bundle-swap-single.d.ts +31 -0
  181. package/dist/chains/xlayer/eip7702/bundle-swap-single.js +177 -0
  182. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +6 -61
  183. package/dist/chains/xlayer/eip7702/bundle-swap.js +3 -712
  184. package/dist/chains/xlayer/eip7702/bytes.d.ts +4 -0
  185. package/dist/chains/xlayer/eip7702/bytes.js +31 -0
  186. package/dist/chains/xlayer/eip7702/gas.d.ts +19 -0
  187. package/dist/chains/xlayer/eip7702/gas.js +152 -0
  188. package/dist/chains/xlayer/eip7702/multi-hop-transfer-disperse.d.ts +5 -0
  189. package/dist/chains/xlayer/eip7702/multi-hop-transfer-disperse.js +196 -0
  190. package/dist/chains/xlayer/eip7702/multi-hop-transfer-pairwise.d.ts +5 -0
  191. package/dist/chains/xlayer/eip7702/multi-hop-transfer-pairwise.js +188 -0
  192. package/dist/chains/xlayer/eip7702/multi-hop-transfer-sweep.d.ts +5 -0
  193. package/dist/chains/xlayer/eip7702/multi-hop-transfer-sweep.js +220 -0
  194. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +8 -4
  195. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +5 -591
  196. package/dist/chains/xlayer/eip7702/profit.d.ts +32 -0
  197. package/dist/chains/xlayer/eip7702/profit.js +59 -0
  198. package/dist/chains/xlayer/eip7702/provider.d.ts +3 -0
  199. package/dist/chains/xlayer/eip7702/provider.js +17 -0
  200. package/dist/chains/xlayer/eip7702/time.d.ts +2 -0
  201. package/dist/chains/xlayer/eip7702/time.js +10 -0
  202. package/dist/chains/xlayer/eip7702/tx-build.d.ts +10 -0
  203. package/dist/chains/xlayer/eip7702/tx-build.js +128 -0
  204. package/dist/chains/xlayer/eip7702/utils.d.ts +19 -85
  205. package/dist/chains/xlayer/eip7702/utils.js +19 -484
  206. package/dist/chains/xlayer/eip7702/volume-bundle.d.ts +13 -0
  207. package/dist/chains/xlayer/eip7702/volume-bundle.js +250 -0
  208. package/dist/chains/xlayer/eip7702/volume-internal.d.ts +13 -0
  209. package/dist/chains/xlayer/eip7702/volume-internal.js +169 -0
  210. package/dist/chains/xlayer/eip7702/volume-make.d.ts +8 -0
  211. package/dist/chains/xlayer/eip7702/volume-make.js +38 -0
  212. package/dist/chains/xlayer/eip7702/volume-single-round.d.ts +17 -0
  213. package/dist/chains/xlayer/eip7702/volume-single-round.js +44 -0
  214. package/dist/chains/xlayer/eip7702/volume-swap.d.ts +18 -0
  215. package/dist/chains/xlayer/eip7702/volume-swap.js +30 -0
  216. package/dist/chains/xlayer/eip7702/volume-wash.d.ts +8 -0
  217. package/dist/chains/xlayer/eip7702/volume-wash.js +191 -0
  218. package/dist/chains/xlayer/eip7702/volume.d.ts +7 -35
  219. package/dist/chains/xlayer/eip7702/volume.js +5 -697
  220. package/dist/chains/xlayer/eip7702/wallet.d.ts +6 -0
  221. package/dist/chains/xlayer/eip7702/wallet.js +17 -0
  222. package/dist/chains/xlayer/eoa/aa-types.d.ts +176 -0
  223. package/dist/chains/xlayer/eoa/aa-types.js +6 -0
  224. package/dist/chains/xlayer/eoa/constants.d.ts +0 -2
  225. package/dist/chains/xlayer/eoa/constants.js +0 -2
  226. package/dist/chains/xlayer/eoa/context.d.ts +8 -0
  227. package/dist/chains/xlayer/eoa/context.js +23 -0
  228. package/dist/chains/xlayer/eoa/encoders.d.ts +147 -0
  229. package/dist/chains/xlayer/eoa/encoders.js +147 -0
  230. package/dist/chains/xlayer/eoa/eoa-bundle-swap-cross.d.ts +5 -0
  231. package/dist/chains/xlayer/eoa/eoa-bundle-swap-cross.js +113 -0
  232. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +10 -123
  233. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +10 -225
  234. package/dist/chains/xlayer/eoa/eoa-bundle-swap-pure.d.ts +50 -0
  235. package/dist/chains/xlayer/eoa/eoa-bundle-swap-pure.js +170 -0
  236. package/dist/chains/xlayer/eoa/eoa-bundle-swap-quick.d.ts +5 -0
  237. package/dist/chains/xlayer/eoa/eoa-bundle-swap-quick.js +257 -0
  238. package/dist/chains/xlayer/eoa/eoa-bundle-swap-types.d.ts +99 -0
  239. package/dist/chains/xlayer/eoa/eoa-bundle-swap-types.js +11 -0
  240. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +5 -47
  241. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +3 -522
  242. package/dist/chains/xlayer/eoa/eoa-types.d.ts +776 -0
  243. package/dist/chains/xlayer/eoa/eoa-types.js +6 -0
  244. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +8 -0
  245. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +8 -0
  246. package/dist/chains/xlayer/eoa/format.d.ts +34 -0
  247. package/dist/chains/xlayer/eoa/format.js +56 -0
  248. package/dist/chains/xlayer/eoa/hop-chain.d.ts +4 -0
  249. package/dist/chains/xlayer/eoa/hop-chain.js +87 -0
  250. package/dist/chains/xlayer/eoa/nonce-map.d.ts +20 -0
  251. package/dist/chains/xlayer/eoa/nonce-map.js +51 -0
  252. package/dist/chains/xlayer/eoa/portal-ops.d.ts +9 -292
  253. package/dist/chains/xlayer/eoa/portal-ops.js +9 -486
  254. package/dist/chains/xlayer/eoa/query.d.ts +117 -0
  255. package/dist/chains/xlayer/eoa/query.js +285 -0
  256. package/dist/chains/xlayer/eoa/quote.d.ts +6 -0
  257. package/dist/chains/xlayer/eoa/quote.js +90 -0
  258. package/dist/chains/xlayer/eoa/types.d.ts +9 -959
  259. package/dist/chains/xlayer/eoa/types.js +9 -49
  260. package/dist/core/clients/blockrazor.js +1 -1
  261. package/dist/core/clients/merkle.js +1 -1
  262. package/dist/core/erc20/allowances.d.ts +104 -0
  263. package/dist/core/erc20/allowances.js +205 -0
  264. package/dist/core/erc20/approve.d.ts +141 -0
  265. package/dist/core/erc20/approve.js +325 -0
  266. package/dist/core/erc20/helpers.d.ts +20 -0
  267. package/dist/core/erc20/helpers.js +109 -0
  268. package/dist/core/erc20/index.d.ts +13 -0
  269. package/dist/core/erc20/index.js +12 -0
  270. package/dist/core/gas/bundle-gas.d.ts +6 -1
  271. package/dist/core/index.d.ts +1 -1
  272. package/dist/core/index.js +1 -1
  273. package/dist/core/quote/index.d.ts +1 -0
  274. package/dist/core/quote/index.js +1 -0
  275. package/dist/core/quote/quote-helpers.d.ts +78 -0
  276. package/dist/core/quote/quote-helpers.js +289 -0
  277. package/dist/core/quote/types.d.ts +1 -0
  278. package/dist/core/quote/types.js +1 -0
  279. package/dist/core/sign-context-helpers.d.ts +29 -0
  280. package/dist/core/sign-context-helpers.js +63 -0
  281. package/dist/domains/dex/direct-router-helpers.d.ts +16 -268
  282. package/dist/domains/dex/direct-router-helpers.js +16 -535
  283. package/dist/domains/dex/direct-router-types.d.ts +104 -0
  284. package/dist/domains/dex/direct-router-types.js +81 -0
  285. package/dist/domains/dex/direct-router-v2-buy.d.ts +2 -0
  286. package/dist/domains/dex/direct-router-v2-buy.js +249 -0
  287. package/dist/domains/dex/direct-router-v2-sell.d.ts +5 -0
  288. package/dist/domains/dex/direct-router-v2-sell.js +270 -0
  289. package/dist/domains/dex/direct-router-v2.d.ts +9 -0
  290. package/dist/domains/dex/direct-router-v2.js +9 -0
  291. package/dist/domains/dex/direct-router-v3.d.ts +17 -0
  292. package/dist/domains/dex/direct-router-v3.js +432 -0
  293. package/dist/domains/dex/direct-router.d.ts +11 -26
  294. package/dist/domains/dex/direct-router.js +10 -977
  295. package/dist/domains/dex/dyo-encode.d.ts +62 -0
  296. package/dist/domains/dex/dyo-encode.js +124 -0
  297. package/dist/domains/dex/profit.d.ts +24 -0
  298. package/dist/domains/dex/profit.js +86 -0
  299. package/dist/domains/dex/provider.d.ts +10 -0
  300. package/dist/domains/dex/provider.js +27 -0
  301. package/dist/domains/dex/quote.d.ts +7 -0
  302. package/dist/domains/dex/quote.js +52 -0
  303. package/dist/domains/dex/router.d.ts +56 -0
  304. package/dist/domains/dex/router.js +193 -0
  305. package/dist/domains/flap/portal-bundle/batch.d.ts +9 -0
  306. package/dist/domains/flap/portal-bundle/batch.js +193 -0
  307. package/dist/domains/flap/portal-bundle/create.d.ts +5 -0
  308. package/dist/domains/flap/portal-bundle/create.js +153 -0
  309. package/dist/domains/flap/portal-bundle/helpers.d.ts +32 -0
  310. package/dist/domains/flap/portal-bundle/helpers.js +50 -0
  311. package/dist/domains/flap/portal-bundle/index.d.ts +16 -0
  312. package/dist/domains/flap/portal-bundle/index.js +15 -0
  313. package/dist/domains/flap/portal-bundle/private.d.ts +5 -0
  314. package/dist/domains/flap/portal-bundle/private.js +198 -0
  315. package/dist/domains/flap/portal-bundle/types.d.ts +102 -0
  316. package/dist/domains/flap/portal-bundle/types.js +1 -0
  317. package/dist/domains/flap/portal-bundle-merkle/core-batch.d.ts +13 -0
  318. package/dist/domains/flap/portal-bundle-merkle/core-batch.js +376 -0
  319. package/dist/domains/flap/portal-bundle-merkle/core-helpers.d.ts +75 -7
  320. package/dist/domains/flap/portal-bundle-merkle/core-helpers.js +259 -20
  321. package/dist/domains/flap/portal-bundle-merkle/core.d.ts +2 -13
  322. package/dist/domains/flap/portal-bundle-merkle/core.js +12 -629
  323. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/constants.d.ts +70 -0
  324. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/constants.js +90 -0
  325. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/index.d.ts +12 -0
  326. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/index.js +11 -0
  327. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/main.d.ts +15 -0
  328. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/main.js +432 -0
  329. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/types.d.ts +113 -0
  330. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/types.js +4 -0
  331. package/dist/domains/flap/portal-bundle-merkle/create-to-dex.d.ts +4 -127
  332. package/dist/domains/flap/portal-bundle-merkle/create-to-dex.js +4 -527
  333. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/constants.d.ts +42 -0
  334. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/constants.js +81 -0
  335. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/index.d.ts +12 -0
  336. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/index.js +11 -0
  337. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/main.d.ts +15 -0
  338. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/main.js +339 -0
  339. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/types.d.ts +72 -0
  340. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/types.js +4 -0
  341. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex.d.ts +4 -85
  342. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex.js +4 -425
  343. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/approve.d.ts +12 -0
  344. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/approve.js +102 -0
  345. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/buy.d.ts +5 -0
  346. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/buy.js +135 -0
  347. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/helpers.d.ts +52 -0
  348. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/helpers.js +267 -0
  349. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/index.d.ts +14 -0
  350. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/index.js +14 -0
  351. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/sell.d.ts +5 -0
  352. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/sell.js +195 -0
  353. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy.d.ts +3 -24
  354. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy.js +3 -700
  355. package/dist/domains/flap/portal-bundle-merkle/private/buy.d.ts +9 -0
  356. package/dist/domains/flap/portal-bundle-merkle/private/buy.js +188 -0
  357. package/dist/domains/flap/portal-bundle-merkle/private/helpers.d.ts +36 -0
  358. package/dist/domains/flap/portal-bundle-merkle/private/helpers.js +127 -0
  359. package/dist/domains/flap/portal-bundle-merkle/private/index.d.ts +12 -0
  360. package/dist/domains/flap/portal-bundle-merkle/private/index.js +12 -0
  361. package/dist/domains/flap/portal-bundle-merkle/private/sell.d.ts +9 -0
  362. package/dist/domains/flap/portal-bundle-merkle/private/sell.js +191 -0
  363. package/dist/domains/flap/portal-bundle-merkle/private.d.ts +5 -15
  364. package/dist/domains/flap/portal-bundle-merkle/private.js +5 -494
  365. package/dist/domains/flap/portal-bundle-merkle/swap-batch.js +3 -2
  366. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-chain.d.ts +4 -0
  367. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-chain.js +43 -0
  368. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-constants.d.ts +13 -0
  369. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-constants.js +21 -0
  370. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +11 -121
  371. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.js +11 -109
  372. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-multi-wallet.d.ts +20 -0
  373. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-multi-wallet.js +223 -0
  374. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-plan.d.ts +32 -0
  375. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-plan.js +66 -0
  376. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-profit.d.ts +22 -0
  377. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-profit.js +22 -0
  378. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-quote.d.ts +51 -0
  379. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-quote.js +149 -0
  380. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-types.d.ts +87 -0
  381. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-types.js +1 -0
  382. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first.js +5 -404
  383. package/dist/domains/flap/portal-bundle-merkle/swap-helpers.d.ts +0 -1
  384. package/dist/domains/flap/portal-bundle-merkle/swap-helpers.js +0 -7
  385. package/dist/domains/flap/portal-bundle-merkle/swap-planning.js +1 -1
  386. package/dist/domains/flap/portal-bundle-merkle/swap-quick-batch.js +3 -2
  387. package/dist/domains/flap/portal-bundle-merkle/swap-single.js +3 -2
  388. package/dist/domains/flap/portal-bundle-merkle/utils/disperse.d.ts +2 -0
  389. package/dist/domains/flap/portal-bundle-merkle/utils/disperse.js +275 -0
  390. package/dist/domains/flap/portal-bundle-merkle/utils/index.d.ts +11 -0
  391. package/dist/domains/flap/portal-bundle-merkle/utils/index.js +11 -0
  392. package/dist/domains/flap/portal-bundle-merkle/utils/sweep.d.ts +9 -0
  393. package/dist/domains/flap/portal-bundle-merkle/utils/sweep.js +570 -0
  394. package/dist/domains/flap/portal-bundle-merkle/utils.d.ts +5 -8
  395. package/dist/domains/flap/portal-bundle-merkle/utils.js +5 -841
  396. package/dist/domains/flap/portal-bundle.d.ts +5 -117
  397. package/dist/domains/flap/portal-bundle.js +5 -587
  398. package/dist/domains/flap/portal.d.ts +13 -404
  399. package/dist/domains/flap/portal.js +12 -619
  400. package/dist/domains/flap/reader.d.ts +51 -0
  401. package/dist/domains/flap/reader.js +275 -0
  402. package/dist/domains/flap/types.d.ts +246 -0
  403. package/dist/domains/flap/types.js +104 -0
  404. package/dist/domains/flap/vault/constants.d.ts +220 -0
  405. package/dist/domains/flap/vault/constants.js +173 -0
  406. package/dist/domains/flap/vault/encode.d.ts +39 -0
  407. package/dist/domains/flap/vault/encode.js +135 -0
  408. package/dist/domains/flap/vault/index.d.ts +15 -0
  409. package/dist/domains/flap/vault/index.js +14 -0
  410. package/dist/domains/flap/vault/query.d.ts +40 -0
  411. package/dist/domains/flap/vault/query.js +104 -0
  412. package/dist/domains/flap/vault/types.d.ts +147 -0
  413. package/dist/domains/flap/vault/types.js +29 -0
  414. package/dist/domains/flap/vault.d.ts +3 -413
  415. package/dist/domains/flap/vault.js +3 -467
  416. package/dist/domains/flap/writer.d.ts +124 -0
  417. package/dist/domains/flap/writer.js +255 -0
  418. package/dist/domains/four/contracts/tm-bundle-batch.d.ts +35 -0
  419. package/dist/domains/four/contracts/tm-bundle-batch.js +286 -0
  420. package/dist/domains/four/contracts/tm-bundle-create.d.ts +2 -0
  421. package/dist/domains/four/contracts/tm-bundle-create.js +304 -0
  422. package/dist/domains/four/contracts/tm-bundle-helpers.d.ts +2 -1
  423. package/dist/domains/four/contracts/tm-bundle-helpers.js +3 -0
  424. package/dist/domains/four/contracts/tm-bundle-private.d.ts +36 -0
  425. package/dist/domains/four/contracts/tm-bundle-private.js +164 -0
  426. package/dist/domains/four/contracts/tm-bundle.d.ts +10 -71
  427. package/dist/domains/four/contracts/tm-bundle.js +9 -738
  428. package/dist/domains/lp-inspect/inspect-helpers.d.ts +25 -0
  429. package/dist/domains/lp-inspect/inspect-helpers.js +343 -0
  430. package/dist/domains/lp-inspect/inspect.d.ts +8 -0
  431. package/dist/domains/lp-inspect/inspect.js +332 -0
  432. package/dist/domains/lp-inspect/lp-inspect.d.ts +9 -37
  433. package/dist/domains/lp-inspect/lp-inspect.js +9 -775
  434. package/dist/domains/lp-inspect/registry.d.ts +43 -0
  435. package/dist/domains/lp-inspect/registry.js +127 -0
  436. package/dist/domains/merkle/index.d.ts +1 -1
  437. package/dist/exports/root-bundle-and-tooling.d.ts +9 -1
  438. package/dist/exports/root-bundle-and-tooling.js +8 -1
  439. package/dist/exports/root-foundations.d.ts +1 -1
  440. package/dist/exports/root-foundations.js +1 -1
  441. package/dist/exports/root-swap-dex-and-xlayer.d.ts +4 -4
  442. package/dist/exports/root-swap-dex-and-xlayer.js +4 -4
  443. package/dist/index.d.ts +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/utils/swap-helpers.js +1 -1
  446. package/package.json +1 -81
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)— 单卖单买流程
3
+ */
4
+ import { ethers, Contract, Wallet } from 'ethers';
5
+ import { countSellerNonceSlots, createFourSwapGasContext, fetchFourSwapSellQuoteAndAllowance, getFourSwapProfitRateBps, needsTmTokenApproval, planSellerNonces, signTmMaxApprovalTx, } from '../swap-sign-helpers.js';
6
+ import { signBribeTransaction } from '../../../core/sign-context-helpers.js';
7
+ import { calculateSellAmount } from '../../../utils/swap-helpers.js';
8
+ import { NonceManager, getOptimizedGasPrice, getGasPriceConfig, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
9
+ import { getBribeAmount, getProfitRecipient } from '../../config-helpers.js';
10
+ import { TM_ABI, TM_ADDRESS } from '../swap-internal.js';
11
+ /**
12
+ * Four内盘捆绑换手
13
+ */
14
+ export async function fourBundleSwapMerkle(params) {
15
+ const { sellerPrivateKey, sellAmount, sellPercentage, buyerPrivateKey, tokenAddress, config, startNonces, // ✅ 可选:前端预获取的 nonces
16
+ } = params;
17
+ const { chainIdNum, provider, bundleConfig, finalGasLimit, txType } = createFourSwapGasContext(config);
18
+ const seller = new Wallet(sellerPrivateKey, provider);
19
+ const buyer = new Wallet(buyerPrivateKey, provider);
20
+ const nonceManager = new NonceManager(provider);
21
+ // ✅ 优化:第一批并行 - calculateSellAmount、gasPrice
22
+ const [sellAmountResult, gasPrice] = await Promise.all([
23
+ calculateSellAmount(provider, tokenAddress, seller.address, sellAmount, sellPercentage),
24
+ getOptimizedGasPrice(provider, getGasPriceConfig(bundleConfig)),
25
+ ]);
26
+ const { amount: sellAmountWei, decimals } = sellAmountResult;
27
+ const [{ sellFunds: sellerWillGetBNB, allowance: currentAllowance }, buyerBalance] = await Promise.all([
28
+ fetchFourSwapSellQuoteAndAllowance(provider, tokenAddress, seller.address, sellAmountWei),
29
+ provider.getBalance(buyer.address),
30
+ ]);
31
+ const buyerFunds = sellerWillGetBNB;
32
+ // 验证买方余额
33
+ const reserveGas = ethers.parseEther((config.reserveGasBNB || 0.0005).toString());
34
+ const requiredBalance = buyerFunds + reserveGas;
35
+ if (buyerBalance < requiredBalance) {
36
+ throw new Error(`买方余额不足:\n` +
37
+ ` - 需要: ${ethers.formatEther(requiredBalance)} BNB\n` +
38
+ ` - 实际: ${ethers.formatEther(buyerBalance)} BNB`);
39
+ }
40
+ // 检查是否需要授权
41
+ const needApproval = needsTmTokenApproval(currentAllowance, decimals);
42
+ // 利润配置
43
+ const extractProfit = true;
44
+ const profitRateBps = getFourSwapProfitRateBps(config.userType);
45
+ const profitAmount = extractProfit && sellerWillGetBNB > 0n ? (sellerWillGetBNB * BigInt(profitRateBps)) / 10000n : 0n;
46
+ // ✅ 获取贿赂金额
47
+ const bribeAmount = getBribeAmount(config);
48
+ const needBribeTx = bribeAmount > 0n;
49
+ // ✅ 优化:第三批并行 - 构建交易、获取 nonces
50
+ const tmSeller = new Contract(TM_ADDRESS, TM_ABI, seller);
51
+ const tmBuyer = new Contract(TM_ADDRESS, TM_ABI, buyer);
52
+ const sellerNonceCount = countSellerNonceSlots(needBribeTx, needApproval, extractProfit);
53
+ // ✅ 优化:使用批量 nonce 获取(JSON-RPC 批量请求)
54
+ // 如果前端传入了 startNonces,直接使用;否则从链上获取
55
+ const [sellUnsigned, buyUnsigned, noncesResult] = await Promise.all([
56
+ tmSeller.sellToken.populateTransaction(0n, tokenAddress, sellAmountWei, 0n),
57
+ tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, buyerFunds, 0n, { value: buyerFunds }),
58
+ (async () => {
59
+ // ✅ 如果前端传入了 startNonces,直接使用(性能优化)
60
+ if (startNonces && startNonces.length >= 2) {
61
+ const sellerNonces = Array.from({ length: sellerNonceCount }, (_, i) => startNonces[0] + i);
62
+ const buyerNonce = startNonces[1];
63
+ return { sellerNonces, buyerNonce };
64
+ }
65
+ // 否则从链上获取
66
+ const initialNonces = await nonceManager.getNextNoncesForWallets([seller, buyer]);
67
+ const sellerNonces = Array.from({ length: sellerNonceCount }, (_, i) => initialNonces[0] + i);
68
+ const buyerNonce = initialNonces[1];
69
+ return { sellerNonces, buyerNonce };
70
+ })(),
71
+ ]);
72
+ const { sellerNonces, buyerNonce } = noncesResult;
73
+ const noncePlan = planSellerNonces(sellerNonces, needBribeTx, needApproval, extractProfit);
74
+ const signPromises = [];
75
+ if (needBribeTx && noncePlan.bribeNonce !== undefined) {
76
+ signPromises.push(signBribeTransaction(seller, bribeAmount, noncePlan.bribeNonce, gasPrice, chainIdNum, txType));
77
+ }
78
+ if (needApproval && noncePlan.approvalNonce !== undefined) {
79
+ signPromises.push(signTmMaxApprovalTx(seller, tokenAddress, noncePlan.approvalNonce, gasPrice, chainIdNum, txType));
80
+ }
81
+ signPromises.push(seller.signTransaction({
82
+ ...sellUnsigned,
83
+ from: seller.address,
84
+ nonce: noncePlan.sellerNonce,
85
+ gasLimit: finalGasLimit,
86
+ gasPrice,
87
+ chainId: chainIdNum,
88
+ type: txType,
89
+ }), buyer.signTransaction({
90
+ ...buyUnsigned,
91
+ from: buyer.address,
92
+ nonce: buyerNonce,
93
+ gasLimit: finalGasLimit,
94
+ gasPrice,
95
+ chainId: chainIdNum,
96
+ type: txType,
97
+ value: buyerFunds,
98
+ }));
99
+ const signedTxs = await Promise.all(signPromises);
100
+ let signIdx = 0;
101
+ let bribeTx = null;
102
+ let approvalTx = null;
103
+ if (needBribeTx)
104
+ bribeTx = signedTxs[signIdx++];
105
+ if (needApproval)
106
+ approvalTx = signedTxs[signIdx++];
107
+ const signedSell = signedTxs[signIdx++];
108
+ const signedBuy = signedTxs[signIdx];
109
+ const profitNonce = noncePlan.profitNonce;
110
+ nonceManager.clearTemp();
111
+ // ✅ 组装交易列表:贿赂 → 授权 → 卖出 → 买入
112
+ const allTransactions = [];
113
+ if (bribeTx)
114
+ allTransactions.push(bribeTx);
115
+ if (approvalTx)
116
+ allTransactions.push(approvalTx);
117
+ allTransactions.push(signedSell, signedBuy);
118
+ // ✅ 利润多跳转账(强制 2 跳中转)
119
+ let profitHopWallets;
120
+ if (extractProfit && profitAmount > 0n && profitNonce !== undefined) {
121
+ const profitHopResult = await buildProfitHopTransactions({
122
+ provider,
123
+ payerWallet: seller,
124
+ profitAmount: profitAmount,
125
+ profitRecipient: getProfitRecipient(),
126
+ hopCount: PROFIT_HOP_COUNT,
127
+ gasPrice,
128
+ chainId: chainIdNum,
129
+ txType,
130
+ startNonce: profitNonce,
131
+ });
132
+ allTransactions.push(...profitHopResult.signedTransactions);
133
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
134
+ }
135
+ return {
136
+ signedTransactions: allTransactions,
137
+ profitHopWallets, // ✅ 导出利润多跳钱包
138
+ metadata: {
139
+ sellerAddress: seller.address,
140
+ buyerAddress: buyer.address,
141
+ sellAmount: ethers.formatUnits(sellAmountWei, decimals),
142
+ buyAmount: ethers.formatEther(buyerFunds),
143
+ hasApproval: !!approvalTx,
144
+ profitAmount: extractProfit ? ethers.formatEther(profitAmount) : undefined,
145
+ },
146
+ };
147
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)barrel
3
+ *
4
+ * 原超长文件按流程拆分为:
5
+ * - bundle.ts:单卖单买流程(fourBundleSwapMerkle)
6
+ * - batch.ts:一卖多买流程(fourBatchSwapMerkle)
7
+ * - quick-batch.ts:资金利用率模式流程(fourQuickBatchSwapMerkle)
8
+ *
9
+ * 对外 export 符号与路径保持不变。
10
+ */
11
+ export { fourBundleSwapMerkle } from './bundle.js';
12
+ export { fourBatchSwapMerkle } from './batch.js';
13
+ export { fourQuickBatchSwapMerkle } from './quick-batch.js';
14
+ export type { UserType, FourSwapSignConfig, FourSwapConfig, FourBundleSwapSignParams, FourBundleSwapParams, FourSwapResult, FourBatchSwapSignParams, FourBatchSwapResult, FourQuickBatchSwapSignParams, FourQuickBatchSwapResult, } from '../types/index.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)barrel
3
+ *
4
+ * 原超长文件按流程拆分为:
5
+ * - bundle.ts:单卖单买流程(fourBundleSwapMerkle)
6
+ * - batch.ts:一卖多买流程(fourBatchSwapMerkle)
7
+ * - quick-batch.ts:资金利用率模式流程(fourQuickBatchSwapMerkle)
8
+ *
9
+ * 对外 export 符号与路径保持不变。
10
+ */
11
+ export { fourBundleSwapMerkle } from './bundle.js';
12
+ export { fourBatchSwapMerkle } from './batch.js';
13
+ export { fourQuickBatchSwapMerkle } from './quick-batch.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Four.meme 内盘快捷批量换手(Merkle Bundle)— 资金利用率模式流程
3
+ */
4
+ import type { FourQuickBatchSwapResult, FourQuickBatchSwapSignParams } from '../types/index.js';
5
+ /**
6
+ * Four 内盘快捷批量换手(资金利用率模式)
7
+ */
8
+ export declare function fourQuickBatchSwapMerkle(params: FourQuickBatchSwapSignParams): Promise<FourQuickBatchSwapResult>;
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Four.meme 内盘快捷批量换手(Merkle Bundle)— 资金利用率模式流程
3
+ */
4
+ import { ethers, Contract, Wallet } from 'ethers';
5
+ import { createFourSwapGasContext, getFourSwapProfitRateBps, quoteFourSwapSellFunds, } from '../swap-sign-helpers.js';
6
+ import { generateDisperseHopPaths, buildNativeHopChain, NATIVE_TRANSFER_GAS_LIMIT } from '../swap-hop-helpers.js';
7
+ import { signBribeTransaction } from '../../../core/sign-context-helpers.js';
8
+ import { calculateSellAmount } from '../../../utils/swap-helpers.js';
9
+ import { NonceManager, getOptimizedGasPrice, getGasPriceConfig, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
10
+ import { getBribeAmount, getProfitRecipient } from '../../config-helpers.js';
11
+ import { TM_ABI, TM_ADDRESS } from '../swap-internal.js';
12
+ /**
13
+ * Four 内盘快捷批量换手(资金利用率模式)
14
+ */
15
+ export async function fourQuickBatchSwapMerkle(params) {
16
+ const { sellerPrivateKey, sellAmount, sellPercentage, buyerPrivateKeys, buyerRatios, buyerAmounts, tokenAddress, config, disperseHopCount = 0, // ✅ 转账多跳数(默认0=直接转账)
17
+ startNonces, // ✅ 可选:前端预获取的 nonces
18
+ } = params;
19
+ // ✅ 动态计算最大买方数量(根据多跳数)
20
+ // 固定开销: 贿赂(1) + 卖出(1) + 利润多跳(PROFIT_HOP_COUNT + 1)
21
+ // 转账(N*(H+1)) + 买入(N) = N*(H+2)
22
+ const fixedOverhead = 1 + 1 + PROFIT_HOP_COUNT + 1;
23
+ const maxTxs = 50 - fixedOverhead;
24
+ let MAX_BUYERS = Math.floor(maxTxs / (disperseHopCount + 2));
25
+ MAX_BUYERS = Math.max(1, MAX_BUYERS);
26
+ if (buyerPrivateKeys.length === 0) {
27
+ throw new Error('至少需要一个买方钱包');
28
+ }
29
+ if (buyerPrivateKeys.length > MAX_BUYERS) {
30
+ throw new Error(`资金利用率模式(${disperseHopCount}跳)买方钱包数量超过限制: ${buyerPrivateKeys.length} > ${MAX_BUYERS}`);
31
+ }
32
+ // ✅ 校验分配模式
33
+ if (!buyerRatios && !buyerAmounts) {
34
+ throw new Error('必须提供 buyerRatios 或 buyerAmounts');
35
+ }
36
+ if (buyerRatios && buyerRatios.length !== buyerPrivateKeys.length) {
37
+ throw new Error(`buyerRatios 长度 (${buyerRatios.length}) 与 buyerPrivateKeys 长度 (${buyerPrivateKeys.length}) 不匹配`);
38
+ }
39
+ if (buyerAmounts && buyerAmounts.length !== buyerPrivateKeys.length) {
40
+ throw new Error(`buyerAmounts 长度 (${buyerAmounts.length}) 与 buyerPrivateKeys 长度 (${buyerPrivateKeys.length}) 不匹配`);
41
+ }
42
+ const { chainIdNum, provider, bundleConfig, finalGasLimit, txType } = createFourSwapGasContext(config);
43
+ const seller = new Wallet(sellerPrivateKey, provider);
44
+ const buyers = buyerPrivateKeys.map((pk) => new Wallet(pk, provider));
45
+ const nonceManager = new NonceManager(provider);
46
+ // ✅ 并行获取:卖出数量、gasPrice
47
+ const [sellAmountResult, gasPrice] = await Promise.all([
48
+ calculateSellAmount(provider, tokenAddress, seller.address, sellAmount, sellPercentage),
49
+ getOptimizedGasPrice(provider, getGasPriceConfig(bundleConfig)),
50
+ ]);
51
+ const { amount: sellAmountWei, decimals } = sellAmountResult;
52
+ const estimatedBNBOut = await quoteFourSwapSellFunds(provider, tokenAddress, sellAmountWei);
53
+ // ✅ 计算利润(根据 userType 动态调整)
54
+ const profitRateBps = getFourSwapProfitRateBps(config.userType);
55
+ const profitAmount = estimatedBNBOut > 0n ? (estimatedBNBOut * BigInt(profitRateBps)) / 10000n : 0n;
56
+ const distributableAmount = estimatedBNBOut - profitAmount;
57
+ // ✅ 计算每个买方分到的金额
58
+ let transferAmountsWei;
59
+ if (buyerAmounts && buyerAmounts.length === buyers.length) {
60
+ // 数量模式
61
+ transferAmountsWei = buyerAmounts.map((amt) => ethers.parseEther(amt));
62
+ const totalTransfer = transferAmountsWei.reduce((a, b) => a + b, 0n);
63
+ if (totalTransfer > distributableAmount) {
64
+ throw new Error(`指定的买入总金额超过可分配金额 (${ethers.formatEther(distributableAmount)} BNB)`);
65
+ }
66
+ }
67
+ else if (buyerRatios && buyerRatios.length === buyers.length) {
68
+ // 比例模式
69
+ transferAmountsWei = buyerRatios.map((ratio) => {
70
+ return (distributableAmount * BigInt(Math.round(ratio * 10000))) / 10000n;
71
+ });
72
+ }
73
+ else {
74
+ throw new Error('必须提供 buyerRatios 或 buyerAmounts');
75
+ }
76
+ // ✅ 获取贿赂金额
77
+ const bribeAmount = getBribeAmount(config);
78
+ // ✅ 验证主钱包余额
79
+ const sellerBalance = await seller.provider.getBalance(seller.address);
80
+ // 主钱包只需要支付:贿赂 + Gas(卖出后有 BNB 可用于转账和利润)
81
+ const sellerGasCost = gasPrice * (21000n + finalGasLimit + 21000n * BigInt(buyers.length) + 21000n);
82
+ const sellerRequired = bribeAmount + sellerGasCost;
83
+ if (sellerBalance < sellerRequired) {
84
+ throw new Error(`主钱包 BNB 余额不足: 需要约 ${ethers.formatEther(sellerRequired)} BNB (贿赂: ${ethers.formatEther(bribeAmount)}, Gas: ${ethers.formatEther(sellerGasCost)}), 实际 ${ethers.formatEther(sellerBalance)} BNB`);
85
+ }
86
+ // ==================== 规划 Nonce ====================
87
+ // ✅ 如果前端传入了 startNonces,直接使用(性能优化)
88
+ let sellerNonce = startNonces && startNonces.length > 0 ? startNonces[0] : await nonceManager.getNextNonce(seller);
89
+ // ==================== 1. 贿赂交易 ====================
90
+ let bribeTx = null;
91
+ if (bribeAmount > 0n) {
92
+ bribeTx = await signBribeTransaction(seller, bribeAmount, sellerNonce, gasPrice, chainIdNum, txType);
93
+ sellerNonce++;
94
+ }
95
+ // ==================== 2. 卖出交易 ====================
96
+ const tmSeller = new Contract(TM_ADDRESS, TM_ABI, seller);
97
+ const sellUnsigned = await tmSeller.sellToken.populateTransaction(0n, tokenAddress, sellAmountWei, 0n);
98
+ const signedSell = await seller.signTransaction({
99
+ ...sellUnsigned,
100
+ from: seller.address,
101
+ nonce: sellerNonce++,
102
+ gasLimit: finalGasLimit,
103
+ gasPrice,
104
+ chainId: chainIdNum,
105
+ type: txType,
106
+ });
107
+ // ==================== 3. 转账交易(支持多跳)====================
108
+ const reserveGas = ethers.parseEther((config.reserveGasBNB || 0.0005).toString());
109
+ const buyerGasCost = gasPrice * finalGasLimit;
110
+ // ✅ 生成多跳路径
111
+ const hopPaths = generateDisperseHopPaths(buyers.map((b) => b.address), disperseHopCount, provider);
112
+ // 收集所有中间钱包信息
113
+ const allHopWallets = [];
114
+ hopPaths.forEach((path) => {
115
+ allHopWallets.push(...path.hopWalletsInfo);
116
+ });
117
+ let transferTxs;
118
+ if (disperseHopCount === 0) {
119
+ // ✅ 无多跳:直接转账
120
+ const transferNonces = buyers.map((_, i) => sellerNonce + i);
121
+ sellerNonce += buyers.length;
122
+ transferTxs = await Promise.all(buyers.map((buyer, i) => {
123
+ const transferValue = transferAmountsWei[i] + reserveGas + buyerGasCost;
124
+ return seller.signTransaction({
125
+ to: buyer.address,
126
+ value: transferValue,
127
+ nonce: transferNonces[i],
128
+ gasPrice,
129
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
130
+ chainId: chainIdNum,
131
+ type: txType,
132
+ });
133
+ }));
134
+ }
135
+ else {
136
+ // ✅ 有多跳:构建多跳转账链
137
+ // ✅ 修复:payer 每次只发送 1 笔交易(到第一个hop钱包),hop钱包用自己的nonce=0
138
+ const hopChains = await Promise.all(hopPaths.map((path, i) => {
139
+ const finalAmount = transferAmountsWei[i] + reserveGas + buyerGasCost;
140
+ const payerNonce = sellerNonce + i; // ✅ payer 每个 buyer 只用 1 个 nonce
141
+ return buildNativeHopChain(seller, path, finalAmount, gasPrice, chainIdNum, txType, payerNonce);
142
+ }));
143
+ transferTxs = hopChains.flat();
144
+ sellerNonce += buyers.length; // ✅ payer 只增加 buyers.length 个 nonce
145
+ }
146
+ // ==================== 4. 买入交易 ====================
147
+ // ✅ 如果前端传入了 startNonces,使用 buyer 部分(从索引 1 开始)
148
+ const buyerNonces = startNonces && startNonces.length > 1
149
+ ? startNonces.slice(1)
150
+ : await Promise.all(buyers.map((buyer) => nonceManager.getNextNonce(buyer)));
151
+ const signedBuys = await Promise.all(buyers.map(async (buyer, i) => {
152
+ const buyAmount = transferAmountsWei[i];
153
+ const tmBuyer = new Contract(TM_ADDRESS, TM_ABI, buyer);
154
+ const buyUnsigned = await tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, buyAmount, 0n, { value: buyAmount });
155
+ return buyer.signTransaction({
156
+ ...buyUnsigned,
157
+ from: buyer.address,
158
+ nonce: buyerNonces[i],
159
+ gasLimit: finalGasLimit,
160
+ gasPrice,
161
+ chainId: chainIdNum,
162
+ type: txType,
163
+ value: buyAmount,
164
+ });
165
+ }));
166
+ nonceManager.clearTemp();
167
+ // ==================== 组装交易数组 ====================
168
+ const signedTransactions = [];
169
+ if (bribeTx)
170
+ signedTransactions.push(bribeTx);
171
+ signedTransactions.push(signedSell);
172
+ signedTransactions.push(...transferTxs);
173
+ signedTransactions.push(...signedBuys);
174
+ // ==================== 5. 利润多跳转账(强制 2 跳中转)====================
175
+ let profitHopWallets;
176
+ if (profitAmount > 0n) {
177
+ const profitHopResult = await buildProfitHopTransactions({
178
+ provider,
179
+ payerWallet: seller,
180
+ profitAmount: profitAmount,
181
+ profitRecipient: getProfitRecipient(),
182
+ hopCount: PROFIT_HOP_COUNT,
183
+ gasPrice,
184
+ chainId: chainIdNum,
185
+ txType,
186
+ startNonce: sellerNonce++,
187
+ });
188
+ signedTransactions.push(...profitHopResult.signedTransactions);
189
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
190
+ // 多跳交易已签名
191
+ }
192
+ return {
193
+ signedTransactions,
194
+ disperseHopWallets: allHopWallets.length > 0 ? allHopWallets : undefined, // ✅ 返回转账多跳钱包
195
+ profitHopWallets, // ✅ 返回利润多跳钱包
196
+ metadata: {
197
+ sellerAddress: seller.address,
198
+ buyerAddresses: buyers.map((b) => b.address),
199
+ sellAmount: ethers.formatUnits(sellAmountWei, decimals),
200
+ estimatedBNBOut: ethers.formatEther(estimatedBNBOut),
201
+ transferAmounts: transferAmountsWei.map((amt) => ethers.formatEther(amt)),
202
+ profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
203
+ disperseHopCount: disperseHopCount > 0 ? disperseHopCount : undefined, // ✅ 返回多跳数
204
+ },
205
+ };
206
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Four.meme 内盘先买后卖 — 常量与校验辅助
3
+ */
4
+ import type { UserType } from '../types/index.js';
5
+ /** 最大 Bundle 签名数 */
6
+ export declare const MAX_BUNDLE_SIGNATURES = 50;
7
+ /** 贿赂交易数 */
8
+ export declare const BRIBE_TX_COUNT = 1;
9
+ /** 利润中转交易数(支付者 1 笔 + 中转钱包 PROFIT_HOP_COUNT 笔 + 最终接收 1 笔) */
10
+ export declare const PROFIT_TX_COUNT: number;
11
+ /** 最大买卖交易数 */
12
+ export declare const MAX_SWAP_TX_COUNT: number;
13
+ /**
14
+ * 根据 userType 获取每笔交易的利润率
15
+ */
16
+ export declare function getProfitRatePerTxBps(userType?: UserType): number;
17
+ /**
18
+ * 验证买卖笔数
19
+ */
20
+ export declare function validateSwapCounts(buyCount: number, sellCount: number): void;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Four.meme 内盘先买后卖 — 常量与校验辅助
3
+ */
4
+ import { PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
5
+ import { getProfitRateBps as getSharedProfitRateBps } from '../../../core/constants/index.js';
6
+ // ==================== 多笔买卖常量 ====================
7
+ /** 最大 Bundle 签名数 */
8
+ export const MAX_BUNDLE_SIGNATURES = 50;
9
+ /** 贿赂交易数 */
10
+ export const BRIBE_TX_COUNT = 1;
11
+ /** 利润中转交易数(支付者 1 笔 + 中转钱包 PROFIT_HOP_COUNT 笔 + 最终接收 1 笔) */
12
+ export const PROFIT_TX_COUNT = PROFIT_HOP_COUNT + 2; // 2 + 2 = 4
13
+ /** 最大买卖交易数 */
14
+ export const MAX_SWAP_TX_COUNT = MAX_BUNDLE_SIGNATURES - BRIBE_TX_COUNT - PROFIT_TX_COUNT; // 50 - 1 - 4 = 45
15
+ /**
16
+ * 根据 userType 获取每笔交易的利润率
17
+ */
18
+ export function getProfitRatePerTxBps(userType) {
19
+ if (userType === 'v1') {
20
+ return getSharedProfitRateBps('v1Double');
21
+ }
22
+ return getSharedProfitRateBps('v0Double');
23
+ }
24
+ /**
25
+ * 验证买卖笔数
26
+ */
27
+ export function validateSwapCounts(buyCount, sellCount) {
28
+ if (buyCount < 1) {
29
+ throw new Error(`买入笔数必须至少为 1,当前为 ${buyCount}`);
30
+ }
31
+ if (sellCount < 1) {
32
+ throw new Error(`卖出笔数必须至少为 1,当前为 ${sellCount}`);
33
+ }
34
+ const totalSwaps = buyCount + sellCount;
35
+ if (totalSwaps > MAX_SWAP_TX_COUNT) {
36
+ throw new Error(`买卖笔数总和 (${totalSwaps}) 超出限制 (${MAX_SWAP_TX_COUNT}),` +
37
+ `最大签名数为 ${MAX_BUNDLE_SIGNATURES}(${BRIBE_TX_COUNT} 贿赂 + ${PROFIT_TX_COUNT} 利润 + ${MAX_SWAP_TX_COUNT} 买卖)`);
38
+ }
39
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖 barrel
3
+ *
4
+ * 原超长文件按职责拆分为:
5
+ * - helpers.ts:常量与校验辅助
6
+ * - single.ts:单钱包模式(fourBundleBuyFirstMerkle)
7
+ * - multi-wallet.ts:多钱包模式
8
+ *
9
+ * 对外 export 符号与路径保持不变。
10
+ */
11
+ export { fourBundleBuyFirstMerkle } from './single.js';
12
+ export type { FourBuyFirstSignConfig, FourBuyFirstConfig, FourBundleBuyFirstSignParams, FourBundleBuyFirstParams, FourBuyFirstResult, } from '../types/index.js';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖 barrel
3
+ *
4
+ * 原超长文件按职责拆分为:
5
+ * - helpers.ts:常量与校验辅助
6
+ * - single.ts:单钱包模式(fourBundleBuyFirstMerkle)
7
+ * - multi-wallet.ts:多钱包模式
8
+ *
9
+ * 对外 export 符号与路径保持不变。
10
+ */
11
+ export { fourBundleBuyFirstMerkle } from './single.js';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖 — 多钱包模式
3
+ */
4
+ import type { FourBuyFirstSignConfig, FourBuyFirstResult } from '../types/index.js';
5
+ interface FourMultiWalletParams {
6
+ buyerPrivateKeys: string[];
7
+ sellerPrivateKeys: string[];
8
+ tokenAddress: string;
9
+ buyerFunds?: string;
10
+ config: FourBuyFirstSignConfig;
11
+ }
12
+ /**
13
+ * ✅ Four 多钱包捆绑换手
14
+ * - 多个买方钱包执行买入(每个钱包1笔)
15
+ * - 多个卖方钱包执行卖出(每个钱包1笔)
16
+ * - 买入总价值 = 卖出总价值
17
+ * - ✅ 优化:最大化并行操作
18
+ */
19
+ export declare function fourBundleBuyFirstMultiWallet(params: FourMultiWalletParams): Promise<FourBuyFirstResult>;
20
+ export {};