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,198 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖 — 多钱包模式
3
+ */
4
+ import { getGasLimit } from '../../../core/gas/bundle-gas.js';
5
+ import { ethers, Contract, Wallet } from 'ethers';
6
+ import { createSignProvider } from '../../../core/sign-context-helpers.js';
7
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
8
+ import { ADDRESSES, BLOCKRAZOR_BUILDER_EOA, CHAINS } from '../../../core/constants/index.js';
9
+ import { TM_ABI, HELPER3_ABI, TM_ADDRESS } from '../swap-internal.js';
10
+ import { getTxType, getGasPriceConfig, getProfitRecipient, getBribeAmount } from '../../config-helpers.js';
11
+ import { trySell } from '../../../domains/four/contracts/tm.js';
12
+ import { splitAmountByWeight as splitAmount } from '../../../core/amount/split-by-weight.js';
13
+ import { getProfitRatePerTxBps, validateSwapCounts } from './helpers.js';
14
+ /**
15
+ * ✅ Four 多钱包捆绑换手
16
+ * - 多个买方钱包执行买入(每个钱包1笔)
17
+ * - 多个卖方钱包执行卖出(每个钱包1笔)
18
+ * - 买入总价值 = 卖出总价值
19
+ * - ✅ 优化:最大化并行操作
20
+ */
21
+ export async function fourBundleBuyFirstMultiWallet(params) {
22
+ const { buyerPrivateKeys, sellerPrivateKeys, tokenAddress, buyerFunds, config } = params;
23
+ const buyCount = buyerPrivateKeys.length;
24
+ const sellCount = sellerPrivateKeys.length;
25
+ if (buyCount === 0)
26
+ throw new Error('买方钱包数量不能为0');
27
+ if (sellCount === 0)
28
+ throw new Error('卖方钱包数量不能为0');
29
+ // 验证总交易数不超过限制
30
+ validateSwapCounts(buyCount, sellCount);
31
+ // ✅ 计算利润比例(根据 userType 动态调整)
32
+ const totalTxCount = buyCount + sellCount;
33
+ const profitRateBps = getProfitRatePerTxBps(config.userType) * totalTxCount;
34
+ const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
35
+ const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
36
+ const nonceManager = new NonceManager(provider);
37
+ // 创建所有钱包实例
38
+ const buyers = buyerPrivateKeys.map((pk) => new Wallet(pk, provider));
39
+ const sellers = sellerPrivateKeys.map((pk) => new Wallet(pk, provider));
40
+ // 使用第一个卖方作为主卖方(支付贿赂和利润)
41
+ const mainSeller = sellers[0];
42
+ // ✅ 计算总交易金额
43
+ if (!buyerFunds) {
44
+ throw new Error('多钱包模式必须提供 buyerFunds(总交易金额)');
45
+ }
46
+ const totalFundsWei = ethers.parseEther(String(buyerFunds));
47
+ if (totalFundsWei <= 0n) {
48
+ throw new Error('交易金额必须大于0');
49
+ }
50
+ const finalGasLimit = getGasLimit(config, 800000);
51
+ const txType = getTxType(config);
52
+ const bribeAmount = getBribeAmount(config);
53
+ const needBribeTx = bribeAmount > 0n;
54
+ // ✅ 第一批并行:报价 + Gas价格 + 代币精度
55
+ const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
56
+ const erc20 = new Contract(tokenAddress, ['function decimals() view returns (uint8)'], provider);
57
+ const [buyQuote, gasPrice, decimals] = await Promise.all([
58
+ helper3.tryBuy(tokenAddress, 0n, totalFundsWei),
59
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
60
+ erc20.decimals(),
61
+ ]);
62
+ const estimatedTokenAmount = buyQuote.estimatedAmount ?? buyQuote[2];
63
+ if (!estimatedTokenAmount || estimatedTokenAmount <= 0n) {
64
+ throw new Error('报价失败:无法估算可买入的代币数量');
65
+ }
66
+ // ✅ 将总金额平均分配给买方
67
+ const buyAmountsWei = splitAmount(totalFundsWei, buyCount);
68
+ // ✅ 将代币平均分配给卖方
69
+ const sellAmountsWei = splitAmount(estimatedTokenAmount, sellCount);
70
+ // ✅ 第二批并行:估算利润 + 获取所有钱包 nonces
71
+ // 预先计算所有唯一钱包地址(去重)
72
+ const allWallets = [...sellers, ...buyers];
73
+ const uniqueWallets = allWallets.filter((w, i) => {
74
+ const addr = w.address.toLowerCase();
75
+ const firstIdx = allWallets.findIndex((x) => x.address.toLowerCase() === addr);
76
+ return firstIdx === i;
77
+ });
78
+ const [sellResult, noncesArray] = await Promise.all([
79
+ trySell('BSC', config.rpcUrl, tokenAddress, estimatedTokenAmount),
80
+ nonceManager.getNextNoncesForWallets(uniqueWallets),
81
+ ]);
82
+ // 构建 nonces Map
83
+ const noncesMap = new Map();
84
+ uniqueWallets.forEach((wallet, i) => {
85
+ noncesMap.set(wallet.address.toLowerCase(), noncesArray[i]);
86
+ });
87
+ const estimatedSellFunds = sellResult.funds;
88
+ const profitAmount = (estimatedSellFunds * BigInt(profitRateBps)) / 10000n;
89
+ // ✅ 第三批并行:构建并签名所有交易
90
+ const allTransactions = [];
91
+ const tm = new Contract(TM_ADDRESS, TM_ABI, provider);
92
+ // 1. 贿赂交易(由主卖方支付)- 先处理以确定 nonce 偏移
93
+ let bribeTxPromise = null;
94
+ if (needBribeTx) {
95
+ const mainSellerAddr = mainSeller.address.toLowerCase();
96
+ const bribeNonce = noncesMap.get(mainSellerAddr);
97
+ noncesMap.set(mainSellerAddr, bribeNonce + 1);
98
+ bribeTxPromise = mainSeller.signTransaction({
99
+ to: BLOCKRAZOR_BUILDER_EOA,
100
+ value: bribeAmount,
101
+ nonce: bribeNonce,
102
+ gasPrice,
103
+ gasLimit: 21000n,
104
+ chainId: BigInt(chainIdNum),
105
+ type: txType,
106
+ });
107
+ }
108
+ // 2. 预分配所有 nonces(同步操作,避免竞态)
109
+ const buyerNonces = [];
110
+ const sellerNonces = [];
111
+ buyers.forEach((buyer) => {
112
+ const addr = buyer.address.toLowerCase();
113
+ const nonce = noncesMap.get(addr);
114
+ buyerNonces.push(nonce);
115
+ noncesMap.set(addr, nonce + 1);
116
+ });
117
+ sellers.forEach((seller) => {
118
+ const addr = seller.address.toLowerCase();
119
+ const nonce = noncesMap.get(addr);
120
+ sellerNonces.push(nonce);
121
+ noncesMap.set(addr, nonce + 1);
122
+ });
123
+ // 3. 并行构建所有买入交易
124
+ const buyTxPromises = buyers.map(async (buyer, i) => {
125
+ const tmBuyer = tm.connect(buyer);
126
+ const unsigned = await tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, buyAmountsWei[i], 0n, { value: buyAmountsWei[i] });
127
+ return buyer.signTransaction({
128
+ ...unsigned,
129
+ from: buyer.address,
130
+ nonce: buyerNonces[i],
131
+ gasLimit: finalGasLimit,
132
+ gasPrice,
133
+ chainId: BigInt(chainIdNum),
134
+ type: txType,
135
+ value: buyAmountsWei[i],
136
+ });
137
+ });
138
+ // 4. 并行构建所有卖出交易
139
+ const sellTxPromises = sellers.map(async (seller, i) => {
140
+ const tmSeller = tm.connect(seller);
141
+ const unsigned = await tmSeller.sellToken.populateTransaction(0n, tokenAddress, sellAmountsWei[i], 0n);
142
+ return seller.signTransaction({
143
+ ...unsigned,
144
+ from: seller.address,
145
+ nonce: sellerNonces[i],
146
+ gasLimit: finalGasLimit,
147
+ gasPrice,
148
+ chainId: BigInt(chainIdNum),
149
+ type: txType,
150
+ value: 0n,
151
+ });
152
+ });
153
+ // ✅ 并行签名所有交易(贿赂 + 买入 + 卖出)
154
+ const [bribeTx, signedBuys, signedSells] = await Promise.all([
155
+ bribeTxPromise,
156
+ Promise.all(buyTxPromises),
157
+ Promise.all(sellTxPromises),
158
+ ]);
159
+ // 组装交易顺序:贿赂 → 买入 → 卖出
160
+ if (bribeTx)
161
+ allTransactions.push(bribeTx);
162
+ allTransactions.push(...signedBuys, ...signedSells);
163
+ // 5. 利润多跳转账(由主卖方支付)
164
+ let profitHopWallets;
165
+ if (profitAmount > 0n) {
166
+ const mainSellerAddr = mainSeller.address.toLowerCase();
167
+ const profitNonce = noncesMap.get(mainSellerAddr);
168
+ const profitHopResult = await buildProfitHopTransactions({
169
+ provider,
170
+ payerWallet: mainSeller,
171
+ profitAmount,
172
+ profitRecipient: getProfitRecipient(),
173
+ hopCount: PROFIT_HOP_COUNT,
174
+ gasPrice,
175
+ chainId: chainIdNum,
176
+ txType,
177
+ startNonce: profitNonce,
178
+ });
179
+ allTransactions.push(...profitHopResult.signedTransactions);
180
+ profitHopWallets = profitHopResult.hopWallets;
181
+ }
182
+ nonceManager.clearTemp();
183
+ return {
184
+ signedTransactions: allTransactions,
185
+ profitHopWallets,
186
+ metadata: {
187
+ buyerAddress: buyers.map((b) => b.address).join(','),
188
+ sellerAddress: sellers.map((s) => s.address).join(','),
189
+ buyAmount: ethers.formatEther(totalFundsWei),
190
+ sellAmount: ethers.formatUnits(estimatedTokenAmount, decimals),
191
+ profitAmount: profitAmount > 0n ? ethers.formatEther(profitAmount) : undefined,
192
+ buyCount,
193
+ sellCount,
194
+ buyAmounts: buyAmountsWei.map((amt) => ethers.formatEther(amt)),
195
+ sellAmounts: sellAmountsWei.map((amt) => ethers.formatUnits(amt, decimals)),
196
+ },
197
+ };
198
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖 — 单钱包模式
3
+ *
4
+ * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
5
+ */
6
+ import type { FourBundleBuyFirstSignParams, FourBuyFirstResult } from '../types/index.js';
7
+ export declare function fourBundleBuyFirstMerkle(params: FourBundleBuyFirstSignParams): Promise<FourBuyFirstResult>;
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖 — 单钱包模式
3
+ *
4
+ * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
5
+ */
6
+ import { getGasLimit } from '../../../core/gas/bundle-gas.js';
7
+ import { ethers, Contract, Wallet } from 'ethers';
8
+ import { createSignProvider } from '../../../core/sign-context-helpers.js';
9
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
10
+ import { ADDRESSES, BLOCKRAZOR_BUILDER_EOA, CHAINS } from '../../../core/constants/index.js';
11
+ import { TM_ABI, HELPER3_ABI, TM_ADDRESS } from '../swap-internal.js';
12
+ import { getTxType, getGasPriceConfig, getProfitRecipient, getBribeAmount } from '../../config-helpers.js';
13
+ import { trySell } from '../../../domains/four/contracts/tm.js';
14
+ import { splitAmountByWeight as splitAmount } from '../../../core/amount/split-by-weight.js';
15
+ import { getProfitRatePerTxBps, validateSwapCounts } from './helpers.js';
16
+ import { fourBundleBuyFirstMultiWallet } from './multi-wallet.js';
17
+ export async function fourBundleBuyFirstMerkle(params) {
18
+ const { buyerPrivateKey, buyerPrivateKeys, buyerFunds, buyerFundsPercentage, sellerPrivateKey, sellerPrivateKeys, tokenAddress, config, buyCount: _buyCount, sellCount: _sellCount, } = params;
19
+ // ✅ 判断是否为多钱包模式
20
+ const isMultiWalletMode = !!(buyerPrivateKeys && buyerPrivateKeys.length > 0) || !!(sellerPrivateKeys && sellerPrivateKeys.length > 0);
21
+ const buyCount = _buyCount ?? 1;
22
+ const sellCount = _sellCount ?? 1;
23
+ // ✅ 多钱包模式:使用单独的处理逻辑
24
+ if (isMultiWalletMode) {
25
+ return await fourBundleBuyFirstMultiWallet({
26
+ buyerPrivateKeys: buyerPrivateKeys || (buyerPrivateKey ? [buyerPrivateKey] : []),
27
+ sellerPrivateKeys: sellerPrivateKeys || (sellerPrivateKey ? [sellerPrivateKey] : []),
28
+ tokenAddress,
29
+ buyerFunds,
30
+ config,
31
+ });
32
+ }
33
+ // ✅ 单钱包模式(向后兼容)
34
+ if (!buyerPrivateKey || !sellerPrivateKey) {
35
+ throw new Error('单钱包模式需要提供 buyerPrivateKey 和 sellerPrivateKey');
36
+ }
37
+ validateSwapCounts(buyCount, sellCount);
38
+ // ✅ 计算利润比例(根据 userType 动态调整)
39
+ const totalTxCount = buyCount + sellCount;
40
+ const profitRateBps = getProfitRatePerTxBps(config.userType) * totalTxCount;
41
+ const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
42
+ const provider = createSignProvider(config.rpcUrl, chainIdNum, 'BSC');
43
+ const buyer = new Wallet(buyerPrivateKey, provider);
44
+ const seller = new Wallet(sellerPrivateKey, provider);
45
+ const sameAddress = buyer.address.toLowerCase() === seller.address.toLowerCase();
46
+ const finalGasLimit = getGasLimit(config, 800000);
47
+ const txType = getTxType(config);
48
+ const nonceManager = new NonceManager(provider);
49
+ const reserveGas = ethers.parseEther((config.reserveGasBNB || 0.0005).toString());
50
+ // ✅ 优化:第一批并行 - buyerBalance、gasPrice
51
+ const [buyerBalance, gasPrice] = await Promise.all([
52
+ provider.getBalance(buyer.address),
53
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
54
+ ]);
55
+ // 计算买方投入资金
56
+ let buyerFundsWei;
57
+ if (buyerFunds !== undefined) {
58
+ buyerFundsWei = ethers.parseEther(String(buyerFunds));
59
+ }
60
+ else if (buyerFundsPercentage !== undefined) {
61
+ const pct = Math.max(0, Math.min(100, buyerFundsPercentage));
62
+ const spendable = buyerBalance > reserveGas ? buyerBalance - reserveGas : 0n;
63
+ buyerFundsWei = (spendable * BigInt(Math.round(pct * 100))) / 10000n;
64
+ }
65
+ else {
66
+ throw new Error('必须提供 buyerFunds 或 buyerFundsPercentage');
67
+ }
68
+ if (buyerFundsWei <= 0n) {
69
+ throw new Error('buyerFunds 需要大于 0');
70
+ }
71
+ // ✅ 优化:第二批并行 - buyQuote、sellerTokenBal、decimals
72
+ const helper3 = new Contract(ADDRESSES.BSC.TokenManagerHelper3, HELPER3_ABI, provider);
73
+ const erc20 = new Contract(tokenAddress, ['function balanceOf(address) view returns (uint256)', 'function decimals() view returns (uint8)'], provider);
74
+ const [buyQuote, sellerTokenBal, decimals] = await Promise.all([
75
+ helper3.tryBuy(tokenAddress, 0n, buyerFundsWei),
76
+ erc20.balanceOf(seller.address),
77
+ erc20.decimals(),
78
+ ]);
79
+ const estimatedTokenAmount = buyQuote.estimatedAmount ?? buyQuote[2];
80
+ if (!estimatedTokenAmount || estimatedTokenAmount <= 0n) {
81
+ throw new Error('报价失败:无法估算可买入的代币数量');
82
+ }
83
+ // ✅ 卖出数量直接使用估算的代币数量(无滑点保护)
84
+ const sellAmountWei = estimatedTokenAmount;
85
+ // 卖方余额检查
86
+ if (!sameAddress && sellerTokenBal < sellAmountWei) {
87
+ throw new Error(`卖方代币余额不足: 需要 ${ethers.formatUnits(sellAmountWei, decimals)},实际 ${ethers.formatUnits(sellerTokenBal, decimals)}`);
88
+ }
89
+ // ✅ 优化:第三批并行 - trySell、构建交易、获取 nonces
90
+ const tmBuyer = new Contract(TM_ADDRESS, TM_ABI, buyer);
91
+ const tmSeller = new Contract(TM_ADDRESS, TM_ABI, seller);
92
+ // ✅ 拆分买入和卖出金额
93
+ const buyAmountsWei = splitAmount(buyerFundsWei, buyCount);
94
+ const sellAmountsWei = splitAmount(sellAmountWei, sellCount);
95
+ // 预先规划 nonces
96
+ const extractProfit = true;
97
+ // ✅ 获取贿赂金额
98
+ const bribeAmount = getBribeAmount(config);
99
+ const needBribeTx = bribeAmount > 0n;
100
+ // ✅ 构建多笔买入和卖出交易
101
+ const buyUnsignedPromises = buyAmountsWei.map((amount) => tmBuyer.buyTokenAMAP.populateTransaction(0n, tokenAddress, buyer.address, amount, 0n, { value: amount }));
102
+ const sellUnsignedPromises = sellAmountsWei.map((amount) => tmSeller.sellToken.populateTransaction(0n, tokenAddress, amount, 0n));
103
+ // ✅ 规划多笔交易 nonce(与 Flap 一致,不含授权)
104
+ const multiNoncePlan = await planMultiNonces({
105
+ buyer,
106
+ seller,
107
+ buyCount,
108
+ sellCount,
109
+ extractProfit,
110
+ needBribeTx,
111
+ sameAddress,
112
+ nonceManager,
113
+ });
114
+ const [sellResult, buyUnsignedArray, sellUnsignedArray] = await Promise.all([
115
+ trySell('BSC', config.rpcUrl, tokenAddress, sellAmountWei),
116
+ Promise.all(buyUnsignedPromises),
117
+ Promise.all(sellUnsignedPromises),
118
+ ]);
119
+ const estimatedSellFunds = sellResult.funds;
120
+ const profitAmount = extractProfit ? (estimatedSellFunds * BigInt(profitRateBps)) / 10000n : 0n;
121
+ // ✅ 贿赂交易放在首位
122
+ let bribeTx = null;
123
+ if (needBribeTx && multiNoncePlan.bribeNonce !== undefined) {
124
+ bribeTx = await seller.signTransaction({
125
+ to: BLOCKRAZOR_BUILDER_EOA,
126
+ value: bribeAmount,
127
+ nonce: multiNoncePlan.bribeNonce,
128
+ gasPrice,
129
+ gasLimit: 21000n,
130
+ chainId: BigInt(chainIdNum),
131
+ type: txType,
132
+ });
133
+ }
134
+ // ✅ 并行签名所有买入和卖出交易
135
+ const buySignPromises = buyUnsignedArray.map((unsigned, i) => buyer.signTransaction({
136
+ ...unsigned,
137
+ from: buyer.address,
138
+ nonce: multiNoncePlan.buyerNonces[i],
139
+ gasLimit: finalGasLimit,
140
+ gasPrice,
141
+ chainId: BigInt(chainIdNum),
142
+ type: txType,
143
+ value: buyAmountsWei[i],
144
+ }));
145
+ const sellSignPromises = sellUnsignedArray.map((unsigned, i) => seller.signTransaction({
146
+ ...unsigned,
147
+ from: seller.address,
148
+ nonce: multiNoncePlan.sellerNonces[i],
149
+ gasLimit: finalGasLimit,
150
+ gasPrice,
151
+ chainId: BigInt(chainIdNum),
152
+ type: txType,
153
+ value: 0n,
154
+ }));
155
+ const [signedBuys, signedSells] = await Promise.all([Promise.all(buySignPromises), Promise.all(sellSignPromises)]);
156
+ nonceManager.clearTemp();
157
+ // ✅ 组装交易列表:贿赂 → 买入(多笔) → 卖出(多笔)(与 Flap 一致)
158
+ const allTransactions = [];
159
+ if (bribeTx)
160
+ allTransactions.push(bribeTx);
161
+ allTransactions.push(...signedBuys, ...signedSells);
162
+ // ✅ 利润多跳转账(强制 2 跳中转)
163
+ let profitHopWallets;
164
+ if (extractProfit && profitAmount > 0n && multiNoncePlan.profitNonce !== undefined) {
165
+ const profitHopResult = await buildProfitHopTransactions({
166
+ provider,
167
+ payerWallet: seller,
168
+ profitAmount: profitAmount,
169
+ profitRecipient: getProfitRecipient(),
170
+ hopCount: PROFIT_HOP_COUNT,
171
+ gasPrice,
172
+ chainId: chainIdNum,
173
+ txType,
174
+ startNonce: multiNoncePlan.profitNonce,
175
+ });
176
+ allTransactions.push(...profitHopResult.signedTransactions);
177
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
178
+ }
179
+ return {
180
+ signedTransactions: allTransactions,
181
+ profitHopWallets, // ✅ 返回利润多跳钱包
182
+ metadata: {
183
+ buyerAddress: buyer.address,
184
+ sellerAddress: seller.address,
185
+ buyAmount: ethers.formatEther(buyerFundsWei),
186
+ sellAmount: ethers.formatUnits(sellAmountWei, decimals),
187
+ profitAmount: extractProfit ? ethers.formatEther(profitAmount) : undefined,
188
+ // ✅ 返回多笔买卖信息
189
+ buyCount,
190
+ sellCount,
191
+ // ✅ 返回每笔交易的具体金额(随机分配后的数组)
192
+ buyAmounts: buyAmountsWei.map((amt) => ethers.formatEther(amt)),
193
+ sellAmounts: sellAmountsWei.map((amt) => ethers.formatUnits(amt, decimals)),
194
+ },
195
+ };
196
+ }
197
+ /**
198
+ * ✅ 规划多笔交易 nonce(与 Flap 一致)
199
+ * 交易顺序:贿赂 → 买入(多笔) → 卖出(多笔) → 利润
200
+ */
201
+ async function planMultiNonces({ buyer, seller, buyCount, sellCount, extractProfit, needBribeTx, sameAddress, nonceManager, }) {
202
+ const profitNonceCount = extractProfit ? 1 : 0;
203
+ if (sameAddress) {
204
+ // 同一地址:贿赂(可选) + 买入(多笔) + 卖出(多笔) + 利润(可选)
205
+ const bribeTxCount = needBribeTx ? 1 : 0;
206
+ const totalTxCount = bribeTxCount + buyCount + sellCount + profitNonceCount;
207
+ const nonces = await nonceManager.getNextNonceBatch(buyer, totalTxCount);
208
+ let idx = 0;
209
+ const bribeNonce = needBribeTx ? nonces[idx++] : undefined;
210
+ const buyerNonces = nonces.slice(idx, idx + buyCount);
211
+ idx += buyCount;
212
+ const sellerNonces = nonces.slice(idx, idx + sellCount);
213
+ idx += sellCount;
214
+ const profitNonce = extractProfit ? nonces[idx] : undefined;
215
+ return { buyerNonces, sellerNonces, bribeNonce, profitNonce };
216
+ }
217
+ // 不同地址
218
+ // 买方:buyCount 个 nonce
219
+ // 卖方:贿赂(可选) + sellCount + 利润(可选) 个 nonce
220
+ const bribeTxCount = needBribeTx ? 1 : 0;
221
+ const sellerTxCount = bribeTxCount + sellCount + profitNonceCount;
222
+ const [buyerNonces, sellerNoncesAll] = await Promise.all([
223
+ nonceManager.getNextNonceBatch(buyer, buyCount),
224
+ nonceManager.getNextNonceBatch(seller, sellerTxCount),
225
+ ]);
226
+ let idx = 0;
227
+ const bribeNonce = needBribeTx ? sellerNoncesAll[idx++] : undefined;
228
+ const sellerNonces = sellerNoncesAll.slice(idx, idx + sellCount);
229
+ idx += sellCount;
230
+ const profitNonce = extractProfit ? sellerNoncesAll[idx] : undefined;
231
+ return { buyerNonces, sellerNonces, bribeNonce, profitNonce };
232
+ }
@@ -2,7 +2,8 @@
2
2
  * Four.meme 内盘捆绑换手(Merkle Bundle)- 先买后卖
3
3
  *
4
4
  * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
5
+ *
6
+ * 原超长文件按职责拆分为 swap-buy-first/ 目录下的多个子文件,
7
+ * 对外 export 符号与路径保持不变(见 swap-buy-first/index.ts)。
5
8
  */
6
- import type { FourBundleBuyFirstSignParams, FourBuyFirstResult } from './types.js';
7
- export type { FourBuyFirstSignConfig, FourBuyFirstConfig, FourBundleBuyFirstSignParams, FourBundleBuyFirstParams, FourBuyFirstResult, } from './types.js';
8
- export declare function fourBundleBuyFirstMerkle(params: FourBundleBuyFirstSignParams): Promise<FourBuyFirstResult>;
9
+ export * from './swap-buy-first/index.js';