four-flap-meme-sdk 1.9.49 → 2.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 (530) hide show
  1. package/README.en.md +41 -6
  2. package/README.md +31 -0
  3. package/README.zh-CN.md +41 -6
  4. package/dist/abis/common.js +74 -68
  5. package/dist/abis/flap/vault.js +9 -7
  6. package/dist/abis/index.d.ts +3 -4
  7. package/dist/abis/index.js +3 -4
  8. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  9. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  10. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  11. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  12. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  13. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  14. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  15. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  16. package/dist/bundle-core/config-helpers.d.ts +36 -0
  17. package/dist/bundle-core/config-helpers.js +57 -0
  18. package/dist/bundle-core/errors.d.ts +50 -0
  19. package/dist/bundle-core/errors.js +34 -0
  20. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  21. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  22. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  23. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  24. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  25. package/dist/bundle-core/four-meme/core.js +515 -0
  26. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  27. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  28. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  29. package/dist/bundle-core/four-meme/private.js +465 -0
  30. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  31. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  32. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  33. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  34. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  35. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  36. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  37. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  38. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  39. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  40. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  41. package/dist/bundle-core/four-meme/swap.js +505 -0
  42. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  43. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  44. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  45. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  46. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  47. package/dist/bundle-core/four-meme/types/index.js +1 -0
  48. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  49. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  50. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  51. package/dist/bundle-core/four-meme/types.js +1 -0
  52. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  53. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  54. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  55. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  56. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  57. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  58. package/dist/bundle-core/index.d.ts +8 -0
  59. package/dist/bundle-core/index.js +8 -0
  60. package/dist/bundle-core/internal.d.ts +21 -0
  61. package/dist/bundle-core/internal.js +182 -0
  62. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  63. package/dist/bundle-core/sign-context-helpers.js +67 -0
  64. package/dist/bundle-core/submit.d.ts +293 -0
  65. package/dist/bundle-core/submit.js +727 -0
  66. package/dist/bundle-core/types/index.d.ts +8 -0
  67. package/dist/bundle-core/types/index.js +1 -0
  68. package/dist/bundle-core/types.d.ts +1 -0
  69. package/dist/bundle-core/types.js +1 -0
  70. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  71. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
  72. package/dist/chains/bsc/four/config.d.ts +5 -70
  73. package/dist/chains/bsc/four/config.js +2 -115
  74. package/dist/chains/bsc/four/core.d.ts +1 -4
  75. package/dist/chains/bsc/four/core.js +1 -589
  76. package/dist/chains/bsc/four/disperse.d.ts +12 -0
  77. package/dist/chains/bsc/four/disperse.js +470 -0
  78. package/dist/chains/bsc/four/index.d.ts +6 -6
  79. package/dist/chains/bsc/four/index.js +6 -6
  80. package/dist/chains/bsc/four/internal.d.ts +2 -50
  81. package/dist/chains/bsc/four/internal.js +2 -237
  82. package/dist/chains/bsc/four/pairwise.d.ts +7 -0
  83. package/dist/chains/bsc/four/pairwise.js +308 -0
  84. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  85. package/dist/chains/bsc/four/pancake-proxy.js +1 -688
  86. package/dist/chains/bsc/four/private.d.ts +1 -27
  87. package/dist/chains/bsc/four/private.js +1 -477
  88. package/dist/chains/bsc/four/submit.d.ts +2 -315
  89. package/dist/chains/bsc/four/submit.js +2 -746
  90. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  91. package/dist/chains/bsc/four/swap-buy-first.js +2 -506
  92. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  93. package/dist/chains/bsc/four/swap-internal.js +1 -18
  94. package/dist/chains/bsc/four/swap.d.ts +2 -144
  95. package/dist/chains/bsc/four/swap.js +2 -760
  96. package/dist/chains/bsc/four/sweep.d.ts +13 -0
  97. package/dist/chains/bsc/four/sweep.js +788 -0
  98. package/dist/chains/bsc/four/types.d.ts +1 -476
  99. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  100. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  101. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  102. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  103. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  104. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  105. package/dist/chains/bsc/four/utils.d.ts +5 -18
  106. package/dist/chains/bsc/four/utils.js +5 -1534
  107. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  109. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  110. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
  111. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  112. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  113. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  114. package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
  115. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  116. package/dist/chains/bsc/pancake/index.js +1 -3
  117. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  118. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  119. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  120. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  121. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  122. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  123. package/dist/chains/eni/batch-router/transfer.js +54 -23
  124. package/dist/chains/eni/batch-router/utils.js +32 -6
  125. package/dist/chains/eni/bundler/sign.js +4 -4
  126. package/dist/chains/eni/bundler/submit.js +1 -4
  127. package/dist/chains/eni/constants.js +1 -1
  128. package/dist/chains/eni/index.d.ts +1 -1
  129. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  130. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  131. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  132. package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
  133. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
  134. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  135. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  136. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  137. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  138. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
  139. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  140. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  141. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  142. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  143. package/dist/chains/eni/platforms/iro/index.js +4 -4
  144. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  145. package/dist/chains/eni/platforms/iro/token.js +107 -31
  146. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  147. package/dist/chains/eni/submit.js +5 -13
  148. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  149. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
  150. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  151. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  152. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
  153. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  154. package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
  155. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  156. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
  157. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  158. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  159. package/dist/chains/xlayer/eip7702/index.d.ts +27 -46
  160. package/dist/chains/xlayer/eip7702/index.js +27 -81
  161. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  162. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  163. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  164. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
  165. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  166. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  167. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  168. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  169. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  170. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  171. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  172. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  173. package/dist/chains/xlayer/eip7702/volume.js +83 -158
  174. package/dist/chains/xlayer/eoa/constants.js +1 -1
  175. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  176. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  177. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  178. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  179. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
  180. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  181. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
  182. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  183. package/dist/chains/xlayer/eoa/index.js +8 -23
  184. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  185. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  186. package/dist/chains/xlayer/eoa/types-core.d.ts +363 -0
  187. package/dist/chains/xlayer/eoa/types-core.js +53 -0
  188. package/dist/chains/xlayer/eoa/types-create.d.ts +413 -0
  189. package/dist/chains/xlayer/eoa/types-create.js +9 -0
  190. package/dist/chains/xlayer/eoa/types-volume.d.ts +209 -0
  191. package/dist/chains/xlayer/eoa/types-volume.js +13 -0
  192. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  193. package/dist/chains/xlayer/eoa/types.js +1 -3
  194. package/dist/contracts/helper3.d.ts +20 -17
  195. package/dist/contracts/helper3.js +56 -20
  196. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  197. package/dist/contracts/tm-bundle-helpers.js +72 -0
  198. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  199. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
  200. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
  201. package/dist/contracts/tm-bundle-merkle/config.js +2 -115
  202. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  203. package/dist/contracts/tm-bundle-merkle/core.js +1 -588
  204. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  205. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  206. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
  207. package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
  208. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  209. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
  210. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  211. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  212. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  213. package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
  214. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  215. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
  216. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  217. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  218. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  219. package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
  220. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  221. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  222. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  223. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  224. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  225. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  226. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  227. package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
  228. package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
  229. package/dist/contracts/tm-bundle.d.ts +3 -51
  230. package/dist/contracts/tm-bundle.js +102 -142
  231. package/dist/contracts/tm.d.ts +3 -2
  232. package/dist/contracts/tm.js +36 -32
  233. package/dist/contracts/tm1.js +9 -4
  234. package/dist/contracts/tm2.js +9 -4
  235. package/dist/dex/direct-router-helpers.d.ts +264 -0
  236. package/dist/dex/direct-router-helpers.js +539 -0
  237. package/dist/dex/direct-router.d.ts +3 -125
  238. package/dist/dex/direct-router.js +237 -652
  239. package/dist/dex/types.d.ts +81 -0
  240. package/dist/dex/types.js +1 -0
  241. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  242. package/dist/exports/root-bundle-and-tooling.js +30 -0
  243. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  244. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  245. package/dist/exports/root-foundations.d.ts +35 -0
  246. package/dist/exports/root-foundations.js +70 -0
  247. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  248. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  249. package/dist/flows/create.d.ts +2 -2
  250. package/dist/flows/create.js +6 -6
  251. package/dist/flows/index.d.ts +1 -0
  252. package/dist/flows/index.js +1 -0
  253. package/dist/index.d.ts +20 -91
  254. package/dist/index.js +20 -215
  255. package/dist/shared/abis/common.d.ts +2 -83
  256. package/dist/shared/abis/common.js +2 -252
  257. package/dist/shared/abis/index.d.ts +5 -6
  258. package/dist/shared/abis/index.js +5 -7
  259. package/dist/shared/clients/blockrazor.js +41 -24
  260. package/dist/shared/clients/club48.js +30 -26
  261. package/dist/shared/clients/emitservice.js +2 -0
  262. package/dist/shared/clients/four.js +23 -18
  263. package/dist/shared/clients/index.d.ts +8 -0
  264. package/dist/shared/clients/index.js +8 -0
  265. package/dist/shared/clients/merkle.js +26 -30
  266. package/dist/shared/constants/addresses.d.ts +1 -1
  267. package/dist/shared/constants/addresses.js +11 -2
  268. package/dist/shared/constants/chains.d.ts +1 -1
  269. package/dist/shared/constants/chains.js +1 -1
  270. package/dist/shared/constants/gas.d.ts +1 -1
  271. package/dist/shared/constants/gas.js +2 -6
  272. package/dist/shared/constants/index.d.ts +1 -0
  273. package/dist/shared/constants/index.js +1 -0
  274. package/dist/shared/constants/quote.d.ts +30 -0
  275. package/dist/shared/constants/quote.js +37 -0
  276. package/dist/shared/flap/__tests__/curve.test.js +3 -3
  277. package/dist/shared/flap/abi.js +1 -1
  278. package/dist/shared/flap/constants.d.ts +1 -1
  279. package/dist/shared/flap/constants.js +2 -2
  280. package/dist/shared/flap/curve.js +3 -0
  281. package/dist/shared/flap/errors.d.ts +1 -4
  282. package/dist/shared/flap/errors.js +21 -3
  283. package/dist/shared/flap/index.d.ts +2 -2
  284. package/dist/shared/flap/index.js +2 -2
  285. package/dist/shared/flap/meta.d.ts +16 -18
  286. package/dist/shared/flap/meta.js +14 -26
  287. package/dist/shared/flap/permit.js +6 -5
  288. package/dist/shared/flap/pinata.d.ts +9 -2
  289. package/dist/shared/flap/pinata.js +20 -18
  290. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  291. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  292. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  293. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  294. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  295. package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
  296. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
  297. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  298. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  299. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  300. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  301. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  302. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  303. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  304. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  305. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  306. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  307. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  308. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  309. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  310. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
  311. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +100 -0
  312. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +133 -0
  313. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  314. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  315. package/dist/shared/flap/portal-bundle.js +54 -42
  316. package/dist/shared/flap/portal.js +32 -10
  317. package/dist/shared/flap/vanity.js +4 -7
  318. package/dist/shared/flap/vault.d.ts +1 -1
  319. package/dist/shared/flap/vault.js +54 -48
  320. package/dist/shared/flap 2/__tests__/curve.test.d.ts +1 -0
  321. package/dist/shared/flap 2/portal-bundle-merkle/types.js +1 -0
  322. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  323. package/dist/shared/foundation/dex/v3-path.js +35 -0
  324. package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
  325. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  326. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  327. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  328. package/dist/shared/foundation/index.d.ts +13 -0
  329. package/dist/shared/foundation/index.js +12 -0
  330. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  331. package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
  332. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  333. package/dist/shared/foundation/normalize-unknown.js +29 -0
  334. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  335. package/dist/shared/foundation/sdk-logger.js +12 -0
  336. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  337. package/dist/shared/foundation/tx/build-request.js +25 -0
  338. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  339. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  340. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  341. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  342. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  343. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  344. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  345. package/dist/shared/foundation/types/erc20.js +1 -0
  346. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  347. package/dist/shared/foundation/types/holders-maker.js +1 -0
  348. package/dist/shared/foundation/types/index.d.ts +7 -0
  349. package/dist/shared/foundation/types/index.js +1 -0
  350. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  351. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  352. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  353. package/dist/shared/foundation/types/multicall.js +1 -0
  354. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  355. package/dist/shared/foundation/types/private-sale.js +1 -0
  356. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  357. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  358. package/dist/shared/four/tax-token.d.ts +1 -1
  359. package/dist/shared/four/tax-token.js +27 -7
  360. package/dist/shared/index.d.ts +4 -0
  361. package/dist/shared/index.js +4 -0
  362. package/dist/types/distribute.d.ts +72 -0
  363. package/dist/types/distribute.js +1 -0
  364. package/dist/types 2/errors.d.ts +27 -0
  365. package/dist/types 2/errors.js +34 -0
  366. package/dist/utils/airdrop-sweep-types.d.ts +1 -0
  367. package/dist/utils/airdrop-sweep-types.js +1 -0
  368. package/dist/utils/airdrop-sweep.d.ts +4 -76
  369. package/dist/utils/airdrop-sweep.js +38 -52
  370. package/dist/utils/bundle-helpers.d.ts +9 -243
  371. package/dist/utils/bundle-helpers.js +10 -584
  372. package/dist/utils/constants.d.ts +5 -61
  373. package/dist/utils/constants.js +5 -80
  374. package/dist/utils/contract-factory.d.ts +2 -4
  375. package/dist/utils/contract-factory.js +25 -18
  376. package/dist/utils/erc20-types.d.ts +1 -0
  377. package/dist/utils/erc20-types.js +1 -0
  378. package/dist/utils/erc20.d.ts +8 -90
  379. package/dist/utils/erc20.js +94 -153
  380. package/dist/utils/errors.d.ts +10 -22
  381. package/dist/utils/errors.js +61 -79
  382. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  383. package/dist/utils/holders-maker/addresses.js +15 -0
  384. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  385. package/dist/utils/holders-maker/buy-tx.js +278 -0
  386. package/dist/utils/holders-maker/constants.d.ts +6 -0
  387. package/dist/utils/holders-maker/constants.js +7 -0
  388. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  389. package/dist/utils/holders-maker/disperse.js +90 -0
  390. package/dist/utils/holders-maker/routing.d.ts +4 -0
  391. package/dist/utils/holders-maker/routing.js +45 -0
  392. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  393. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  394. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  395. package/dist/utils/holders-maker-helpers.js +9 -0
  396. package/dist/utils/holders-maker-types.d.ts +1 -0
  397. package/dist/utils/holders-maker-types.js +1 -0
  398. package/dist/utils/holders-maker.d.ts +2 -138
  399. package/dist/utils/holders-maker.js +23 -651
  400. package/dist/utils/hop-chains.d.ts +35 -0
  401. package/dist/utils/hop-chains.js +215 -0
  402. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  403. package/dist/utils/lp-inspect-helpers.js +109 -0
  404. package/dist/utils/lp-inspect-types.d.ts +1 -0
  405. package/dist/utils/lp-inspect-types.js +1 -0
  406. package/dist/utils/lp-inspect.d.ts +2 -112
  407. package/dist/utils/lp-inspect.js +63 -195
  408. package/dist/utils/mpcExclusive.d.ts +2 -5
  409. package/dist/utils/mpcExclusive.js +4 -3
  410. package/dist/utils/private-sale-types.d.ts +1 -0
  411. package/dist/utils/private-sale-types.js +1 -0
  412. package/dist/utils/private-sale.d.ts +2 -58
  413. package/dist/utils/private-sale.js +2 -7
  414. package/dist/utils/provider-factory.d.ts +4 -0
  415. package/dist/utils/provider-factory.js +10 -0
  416. package/dist/utils/quote-helpers-types.d.ts +1 -0
  417. package/dist/utils/quote-helpers-types.js +1 -0
  418. package/dist/utils/quote-helpers.d.ts +4 -45
  419. package/dist/utils/quote-helpers.js +15 -65
  420. package/dist/utils/stealth-transfer.d.ts +2 -28
  421. package/dist/utils/stealth-transfer.js +30 -14
  422. package/dist/utils/swap-helpers.d.ts +0 -3
  423. package/dist/utils/swap-helpers.js +6 -9
  424. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  425. package/dist/utils/types/airdrop-sweep.js +1 -0
  426. package/dist/utils/types/contract-factory.d.ts +1 -0
  427. package/dist/utils/types/contract-factory.js +1 -0
  428. package/dist/utils/types/erc20.d.ts +1 -0
  429. package/dist/utils/types/erc20.js +1 -0
  430. package/dist/utils/types/errors.d.ts +1 -0
  431. package/dist/utils/types/errors.js +1 -0
  432. package/dist/utils/types/holders-maker.d.ts +1 -0
  433. package/dist/utils/types/holders-maker.js +1 -0
  434. package/dist/utils/types/hop-chains.d.ts +8 -0
  435. package/dist/utils/types/hop-chains.js +1 -0
  436. package/dist/utils/types/index.d.ts +13 -0
  437. package/dist/utils/types/index.js +1 -0
  438. package/dist/utils/types/lp-inspect.d.ts +1 -0
  439. package/dist/utils/types/lp-inspect.js +1 -0
  440. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  441. package/dist/utils/types/mpc-exclusive.js +1 -0
  442. package/dist/utils/types/private-sale.d.ts +1 -0
  443. package/dist/utils/types/private-sale.js +1 -0
  444. package/dist/utils/types/quote-helpers.d.ts +1 -0
  445. package/dist/utils/types/quote-helpers.js +1 -0
  446. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  447. package/dist/utils/types/stealth-transfer.js +1 -0
  448. package/dist/utils/types/wallet.d.ts +25 -0
  449. package/dist/utils/types/wallet.js +1 -0
  450. package/dist/utils/wallet.d.ts +2 -25
  451. package/dist/utils/wallet.js +9 -10
  452. package/package.json +55 -2
  453. package/src/abis/contracts/TaxToken.json +969 -0
  454. package/src/abis/contracts/TokenManager.json +836 -0
  455. package/src/abis/contracts/TokenManager2.json +136 -0
  456. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  457. /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
  458. /package/dist/{shared 2/flap/portal-bundle-merkle/types.js → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
  459. /package/dist/{shared 2/abis → shared/abis 2}/TaxToken.json +0 -0
  460. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager.json +0 -0
  461. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager2.json +0 -0
  462. /package/dist/{shared 2/abis → shared/abis 2}/TokenManagerHelper3.json +0 -0
  463. /package/dist/{shared 2/abis → shared/abis 2}/common.d.ts +0 -0
  464. /package/dist/{shared 2/abis → shared/abis 2}/common.js +0 -0
  465. /package/dist/{shared 2/abis → shared/abis 2}/index.d.ts +0 -0
  466. /package/dist/{shared 2/abis → shared/abis 2}/index.js +0 -0
  467. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.d.ts +0 -0
  468. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.js +0 -0
  469. /package/dist/{shared 2/clients → shared/clients 2}/club48.d.ts +0 -0
  470. /package/dist/{shared 2/clients → shared/clients 2}/club48.js +0 -0
  471. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.d.ts +0 -0
  472. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.js +0 -0
  473. /package/dist/{shared 2/clients → shared/clients 2}/four.d.ts +0 -0
  474. /package/dist/{shared 2/clients → shared/clients 2}/four.js +0 -0
  475. /package/dist/{shared 2/clients → shared/clients 2}/merkle.d.ts +0 -0
  476. /package/dist/{shared 2/clients → shared/clients 2}/merkle.js +0 -0
  477. /package/dist/{shared 2/flap → shared/flap 2}/__tests__/curve.test.js +0 -0
  478. /package/dist/{shared 2/flap → shared/flap 2}/abi.d.ts +0 -0
  479. /package/dist/{shared 2/flap → shared/flap 2}/abi.js +0 -0
  480. /package/dist/{shared 2/flap → shared/flap 2}/constants.d.ts +0 -0
  481. /package/dist/{shared 2/flap → shared/flap 2}/constants.js +0 -0
  482. /package/dist/{shared 2/flap → shared/flap 2}/curve.d.ts +0 -0
  483. /package/dist/{shared 2/flap → shared/flap 2}/curve.js +0 -0
  484. /package/dist/{shared 2/flap → shared/flap 2}/errors.d.ts +0 -0
  485. /package/dist/{shared 2/flap → shared/flap 2}/errors.js +0 -0
  486. /package/dist/{shared 2/flap → shared/flap 2}/index.d.ts +0 -0
  487. /package/dist/{shared 2/flap → shared/flap 2}/index.js +0 -0
  488. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.d.ts +0 -0
  489. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.js +0 -0
  490. /package/dist/{shared 2/flap → shared/flap 2}/meta.d.ts +0 -0
  491. /package/dist/{shared 2/flap → shared/flap 2}/meta.js +0 -0
  492. /package/dist/{shared 2/flap → shared/flap 2}/permit.d.ts +0 -0
  493. /package/dist/{shared 2/flap → shared/flap 2}/permit.js +0 -0
  494. /package/dist/{shared 2/flap → shared/flap 2}/pinata.d.ts +0 -0
  495. /package/dist/{shared 2/flap → shared/flap 2}/pinata.js +0 -0
  496. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.d.ts +0 -0
  497. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.js +0 -0
  498. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.d.ts +0 -0
  499. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.js +0 -0
  500. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.d.ts +0 -0
  501. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.js +0 -0
  502. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
  503. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.js +0 -0
  504. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.d.ts +0 -0
  505. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.js +0 -0
  506. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
  507. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.js +0 -0
  508. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.d.ts +0 -0
  509. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.js +0 -0
  510. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.d.ts +0 -0
  511. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.js +0 -0
  512. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.d.ts +0 -0
  513. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.js +0 -0
  514. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/types.d.ts +0 -0
  515. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.d.ts +0 -0
  516. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.js +0 -0
  517. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.d.ts +0 -0
  518. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.js +0 -0
  519. /package/dist/{shared 2/flap → shared/flap 2}/portal.d.ts +0 -0
  520. /package/dist/{shared 2/flap → shared/flap 2}/portal.js +0 -0
  521. /package/dist/{shared 2/flap → shared/flap 2}/vanity.d.ts +0 -0
  522. /package/dist/{shared 2/flap → shared/flap 2}/vanity.js +0 -0
  523. /package/dist/{shared 2/flap → shared/flap 2}/vault.d.ts +0 -0
  524. /package/dist/{shared 2/flap → shared/flap 2}/vault.js +0 -0
  525. /package/dist/{shared 2/four → shared/four 2}/index.d.ts +0 -0
  526. /package/dist/{shared 2/four → shared/four 2}/index.js +0 -0
  527. /package/dist/{shared 2/four → shared/four 2}/tax-token.d.ts +0 -0
  528. /package/dist/{shared 2/four → shared/four 2}/tax-token.js +0 -0
  529. /package/dist/{shared 2/index.d.ts → shared/index 2.js} +0 -0
  530. /package/dist/{shared 2/index.js → shared/index.d 2.ts} +0 -0
@@ -0,0 +1,565 @@
1
+ import { ethers, Wallet, Contract } from 'ethers';
2
+ import { generateWallets } from '../../../utils/wallet.js';
3
+ import { V2_ROUTER_ABI, V3_ROUTER02_ABI, ERC20_BALANCE_ABI, ERC20_ABI } from '../../../abis/common.js';
4
+ import { createSignProvider } from '../../../bundle-core/sign-context-helpers.js';
5
+ import { quoteV2, quoteV3 } from '../../../utils/quote-helpers.js';
6
+ import { GAS_LIMITS } from '../../../shared/constants/index.js';
7
+ import { getDeadline } from '../../../utils/bundle-helpers.js';
8
+ import { ADDRESSES } from '../../../shared/constants/index.js';
9
+ // ==================== 多跳转账常量(使用统一常量) ====================
10
+ export const NATIVE_TRANSFER_GAS_LIMIT = GAS_LIMITS.NATIVE_TRANSFER;
11
+ export const ERC20_TRANSFER_GAS_LIMIT_HOP = GAS_LIMITS.ERC20_TRANSFER;
12
+ export const BRIBE_GAS_LIMIT = GAS_LIMITS.BRIBE;
13
+ /**
14
+ * 生成分发多跳路径
15
+ */
16
+ export function generateDisperseHopPaths(targetAddresses, hopCount, provider) {
17
+ if (hopCount <= 0) {
18
+ return targetAddresses.map((addr) => ({
19
+ targetAddress: addr,
20
+ hopWallets: [],
21
+ hopWalletsInfo: [],
22
+ }));
23
+ }
24
+ return targetAddresses.map((targetAddress) => {
25
+ const hopWalletsInfo = generateWallets(hopCount);
26
+ const hopWallets = hopWalletsInfo.map((w) => new Wallet(w.privateKey, provider));
27
+ return { targetAddress, hopWallets, hopWalletsInfo };
28
+ });
29
+ }
30
+ /**
31
+ * 构建原生代币多跳转账链
32
+ */
33
+ export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, chainId, txType, payerNonce) {
34
+ const signedTxs = [];
35
+ const hopCount = path.hopWallets.length;
36
+ if (hopCount === 0) {
37
+ const tx = {
38
+ to: path.targetAddress,
39
+ value: finalAmount,
40
+ nonce: payerNonce,
41
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
42
+ chainId,
43
+ type: txType,
44
+ };
45
+ if (txType === 2) {
46
+ tx.maxFeePerGas = gasPrice;
47
+ tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
48
+ }
49
+ else {
50
+ tx.gasPrice = gasPrice;
51
+ }
52
+ signedTxs.push(await payer.signTransaction(tx));
53
+ return signedTxs;
54
+ }
55
+ const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
56
+ // 计算每跳需要的金额
57
+ const amountsPerHop = [];
58
+ for (let i = 0; i < hopCount; i++) {
59
+ const remainingHops = hopCount - i;
60
+ amountsPerHop.push(finalAmount + hopGasCost * BigInt(remainingHops));
61
+ }
62
+ // payer → hop1
63
+ const firstTx = {
64
+ to: path.hopWallets[0].address,
65
+ value: amountsPerHop[0],
66
+ nonce: payerNonce,
67
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
68
+ chainId,
69
+ type: txType,
70
+ };
71
+ if (txType === 2) {
72
+ firstTx.maxFeePerGas = gasPrice;
73
+ firstTx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
74
+ }
75
+ else {
76
+ firstTx.gasPrice = gasPrice;
77
+ }
78
+ signedTxs.push(await payer.signTransaction(firstTx));
79
+ // hop1 → hop2 → ... → target
80
+ for (let i = 0; i < hopCount; i++) {
81
+ const fromWallet = path.hopWallets[i];
82
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
83
+ const amount = i === hopCount - 1 ? finalAmount : amountsPerHop[i + 1];
84
+ const tx = {
85
+ to: toAddress,
86
+ value: amount,
87
+ nonce: 0,
88
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
89
+ chainId,
90
+ type: txType,
91
+ };
92
+ if (txType === 2) {
93
+ tx.maxFeePerGas = gasPrice;
94
+ tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
95
+ }
96
+ else {
97
+ tx.gasPrice = gasPrice;
98
+ }
99
+ signedTxs.push(await fromWallet.signTransaction(tx));
100
+ }
101
+ return signedTxs;
102
+ }
103
+ /**
104
+ * 构建 ERC20 多跳转账链(需要配合 BNB 多跳使用)
105
+ */
106
+ export async function buildERC20HopChain(payer, path, erc20Address, erc20Amount, gasPrice, chainId, txType, payerNonce) {
107
+ const signedTxs = [];
108
+ const hopCount = path.hopWallets.length;
109
+ const erc20Interface = new ethers.Interface(ERC20_ABI);
110
+ if (hopCount === 0) {
111
+ const data = erc20Interface.encodeFunctionData('transfer', [path.targetAddress, erc20Amount]);
112
+ const tx = {
113
+ to: erc20Address,
114
+ data,
115
+ value: 0n,
116
+ nonce: payerNonce,
117
+ gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
118
+ chainId,
119
+ type: txType,
120
+ };
121
+ if (txType === 2) {
122
+ tx.maxFeePerGas = gasPrice;
123
+ tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
124
+ }
125
+ else {
126
+ tx.gasPrice = gasPrice;
127
+ }
128
+ signedTxs.push(await payer.signTransaction(tx));
129
+ return signedTxs;
130
+ }
131
+ // payer → hop1
132
+ const firstData = erc20Interface.encodeFunctionData('transfer', [path.hopWallets[0].address, erc20Amount]);
133
+ const firstTx = {
134
+ to: erc20Address,
135
+ data: firstData,
136
+ value: 0n,
137
+ nonce: payerNonce,
138
+ gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
139
+ chainId,
140
+ type: txType,
141
+ };
142
+ if (txType === 2) {
143
+ firstTx.maxFeePerGas = gasPrice;
144
+ firstTx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
145
+ }
146
+ else {
147
+ firstTx.gasPrice = gasPrice;
148
+ }
149
+ signedTxs.push(await payer.signTransaction(firstTx));
150
+ // hop1 → hop2 → ... → target (nonce=1,nonce=0 用于 BNB 转发)
151
+ for (let i = 0; i < hopCount; i++) {
152
+ const fromWallet = path.hopWallets[i];
153
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
154
+ const data = erc20Interface.encodeFunctionData('transfer', [toAddress, erc20Amount]);
155
+ const tx = {
156
+ to: erc20Address,
157
+ data,
158
+ value: 0n,
159
+ nonce: 1, // nonce=0 已用于 BNB 转发
160
+ gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
161
+ chainId,
162
+ type: txType,
163
+ };
164
+ if (txType === 2) {
165
+ tx.maxFeePerGas = gasPrice;
166
+ tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
167
+ }
168
+ else {
169
+ tx.gasPrice = gasPrice;
170
+ }
171
+ signedTxs.push(await fromWallet.signTransaction(tx));
172
+ }
173
+ return signedTxs;
174
+ }
175
+ /**
176
+ * 构建 BNB 多跳转账链(为 ERC20 中间钱包预留 gas)
177
+ */
178
+ export async function buildBNBHopChainForERC20(payer, path, finalGasAmount, gasPrice, chainId, txType, payerNonce) {
179
+ const signedTxs = [];
180
+ const hopCount = path.hopWallets.length;
181
+ if (hopCount === 0) {
182
+ // 无多跳时不需要转 gas
183
+ return signedTxs;
184
+ }
185
+ const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
186
+ const erc20GasCost = ERC20_TRANSFER_GAS_LIMIT_HOP * gasPrice;
187
+ // 每个中间钱包需要: BNB 转发 gas + ERC20 转发 gas
188
+ const gasPerHop = hopGasCost + erc20GasCost * 2n; // 2倍安全系数
189
+ // 计算每跳需要的金额
190
+ const amountsPerHop = [];
191
+ for (let i = 0; i < hopCount; i++) {
192
+ const remainingHops = hopCount - i;
193
+ amountsPerHop.push(finalGasAmount + gasPerHop * BigInt(remainingHops));
194
+ }
195
+ // payer → hop1
196
+ const firstTx = {
197
+ to: path.hopWallets[0].address,
198
+ value: amountsPerHop[0],
199
+ nonce: payerNonce,
200
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
201
+ chainId,
202
+ type: txType,
203
+ };
204
+ if (txType === 2) {
205
+ firstTx.maxFeePerGas = gasPrice;
206
+ firstTx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
207
+ }
208
+ else {
209
+ firstTx.gasPrice = gasPrice;
210
+ }
211
+ signedTxs.push(await payer.signTransaction(firstTx));
212
+ // hop1 → hop2 → ... → target (nonce=0)
213
+ for (let i = 0; i < hopCount; i++) {
214
+ const fromWallet = path.hopWallets[i];
215
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
216
+ const amount = i === hopCount - 1 ? finalGasAmount : amountsPerHop[i + 1];
217
+ const tx = {
218
+ to: toAddress,
219
+ value: amount,
220
+ nonce: 0,
221
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
222
+ chainId,
223
+ type: txType,
224
+ };
225
+ if (txType === 2) {
226
+ tx.maxFeePerGas = gasPrice;
227
+ tx.maxPriorityFeePerGas = gasPrice / 10n || 1n;
228
+ }
229
+ else {
230
+ tx.gasPrice = gasPrice;
231
+ }
232
+ signedTxs.push(await fromWallet.signTransaction(tx));
233
+ }
234
+ return signedTxs;
235
+ }
236
+ // ==================== 工具函数 ====================
237
+ export function createPancakeContext(config) {
238
+ const chainId = config.chainId ?? 56;
239
+ const provider = createSignProvider(config.rpcUrl, chainId);
240
+ return { chainId, provider };
241
+ }
242
+ export async function quoteSellOutput({ routeParams, sellAmountWei, provider, v2RouterAddress, }) {
243
+ if (routeParams.routeType === 'v2') {
244
+ const { v2Path } = routeParams;
245
+ const tokenIn = v2Path[0];
246
+ const tokenOut = v2Path[v2Path.length - 1];
247
+ const result = await quoteV2(provider, tokenIn, tokenOut, sellAmountWei, 'BSC', v2RouterAddress);
248
+ if (result.amountOut > 0n) {
249
+ return { estimatedBNBOut: result.amountOut };
250
+ }
251
+ throw new Error('V2 报价失败: 所有路径均无效');
252
+ }
253
+ // ==================== V3 单跳报价 ====================
254
+ if (routeParams.routeType === 'v3-single') {
255
+ const params = routeParams;
256
+ const result = await quoteV3(provider, params.v3TokenIn, params.v3TokenOut, sellAmountWei, 'BSC', params.v3Fee);
257
+ if (result.amountOut > 0n) {
258
+ return { estimatedBNBOut: result.amountOut };
259
+ }
260
+ // ❌ V3 报价失败时不再 fallback 到 V2,因为价格可能差异很大
261
+ throw new Error(`V3 单跳报价失败: tokenIn=${params.v3TokenIn}, tokenOut=${params.v3TokenOut}, fee=${params.v3Fee}`);
262
+ }
263
+ // ==================== V3 多跳报价 ====================
264
+ if (routeParams.routeType === 'v3-multi') {
265
+ const params = routeParams;
266
+ if (params.v3LpAddresses && params.v3LpAddresses.length > 0) {
267
+ const tokenIn = params.v3ExactTokenIn;
268
+ const WBNB = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c';
269
+ const result = await quoteV3(provider, tokenIn, WBNB, sellAmountWei, 'BSC');
270
+ if (result.amountOut > 0n) {
271
+ return { estimatedBNBOut: result.amountOut };
272
+ }
273
+ }
274
+ // ❌ V3 多跳报价失败时不再 fallback 到 V2,因为价格可能差异很大
275
+ throw new Error(`V3 多跳报价失败: LPs=${params.v3LpAddresses?.join(', ')}, tokenIn=${params.v3ExactTokenIn}`);
276
+ }
277
+ throw new Error(`不支持的路由类型: ${routeParams.routeType}`);
278
+ }
279
+ export async function buildSwapTransactions({ routeParams, sellAmountWei, buyAmountBNB, buyer, seller, tokenAddress, useNativeToken = true, v2RouterAddress, }) {
280
+ void tokenAddress;
281
+ const deadline = getDeadline();
282
+ const buyValue = useNativeToken ? buyAmountBNB + FLAT_FEE : 0n;
283
+ if (routeParams.routeType === 'v2') {
284
+ const { v2Path } = routeParams;
285
+ const reversePath = [...v2Path].reverse();
286
+ const routerAddr = v2RouterAddress || PANCAKE_V2_ROUTER_ADDRESS;
287
+ const v2RouterSeller = new Contract(routerAddr, PANCAKE_V2_ROUTER_ABI, seller);
288
+ const v2RouterBuyer = new Contract(routerAddr, PANCAKE_V2_ROUTER_ABI, buyer);
289
+ let sellUnsigned;
290
+ let buyUnsigned;
291
+ if (useNativeToken) {
292
+ // ✅ 原生代币模式(BNB)
293
+ // 卖出:Token → WBNB → BNB
294
+ sellUnsigned = await v2RouterSeller.swapExactTokensForETHSupportingFeeOnTransferTokens.populateTransaction(sellAmountWei, 0n, v2Path, seller.address, deadline);
295
+ // 买入:BNB → WBNB → Token
296
+ buyUnsigned = await v2RouterBuyer.swapExactETHForTokensSupportingFeeOnTransferTokens.populateTransaction(0n, reversePath, buyer.address, deadline, { value: buyValue });
297
+ }
298
+ else {
299
+ // ✅ ERC20 模式(如 USDT)
300
+ // 卖出:Token → USDT
301
+ sellUnsigned = await v2RouterSeller.swapExactTokensForTokensSupportingFeeOnTransferTokens.populateTransaction(sellAmountWei, 0n, v2Path, seller.address, deadline);
302
+ // 买入:USDT → Token
303
+ buyUnsigned = await v2RouterBuyer.swapExactTokensForTokensSupportingFeeOnTransferTokens.populateTransaction(buyAmountBNB, // USDT 数量
304
+ 0n, reversePath, buyer.address, deadline);
305
+ }
306
+ return { sellUnsigned, buyUnsigned };
307
+ }
308
+ if (routeParams.routeType === 'v3-single') {
309
+ const { v3TokenIn, v3TokenOut, v3Fee } = routeParams;
310
+ const v3RouterIface = new ethers.Interface(PANCAKE_V3_ROUTER_ABI);
311
+ const v3RouterSeller = new Contract(PANCAKE_V3_ROUTER_ADDRESS, PANCAKE_V3_ROUTER_ABI, seller);
312
+ const v3RouterBuyer = new Contract(PANCAKE_V3_ROUTER_ADDRESS, PANCAKE_V3_ROUTER_ABI, buyer);
313
+ // 卖出:Token → WBNB,需要 unwrapWETH9
314
+ const sellSwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
315
+ {
316
+ tokenIn: v3TokenIn,
317
+ tokenOut: v3TokenOut,
318
+ fee: v3Fee,
319
+ recipient: PANCAKE_V3_ROUTER_ADDRESS, // 先发给 Router
320
+ amountIn: sellAmountWei,
321
+ amountOutMinimum: 0n,
322
+ sqrtPriceLimitX96: 0n,
323
+ },
324
+ ]);
325
+ const sellUnwrapData = v3RouterIface.encodeFunctionData('unwrapWETH9', [0n, seller.address]);
326
+ const sellUnsigned = await v3RouterSeller.multicall.populateTransaction(deadline, [sellSwapData, sellUnwrapData]);
327
+ // 买入:WBNB → Token
328
+ const buySwapData = v3RouterIface.encodeFunctionData('exactInputSingle', [
329
+ {
330
+ tokenIn: v3TokenOut,
331
+ tokenOut: v3TokenIn,
332
+ fee: v3Fee,
333
+ recipient: buyer.address,
334
+ amountIn: buyAmountBNB,
335
+ amountOutMinimum: 0n,
336
+ sqrtPriceLimitX96: 0n,
337
+ },
338
+ ]);
339
+ const buyUnsigned = await v3RouterBuyer.multicall.populateTransaction(deadline, [buySwapData], { value: buyValue });
340
+ return { sellUnsigned, buyUnsigned };
341
+ }
342
+ // V3 多跳暂不支持官方合约
343
+ throw new Error('V3 多跳路由暂不支持官方合约,请使用 V2 路由或 V3 单跳');
344
+ }
345
+ export async function calculateBuyerBudget({ buyer, quotedBNBOut, reserveGasBNB, useNativeToken = true, quoteToken, quoteTokenDecimals = 18, provider, }) {
346
+ const reserveGas = ethers.parseEther((reserveGasBNB ?? 0.0005).toString());
347
+ // ✅ 已移除滑点保护:直接使用报价金额
348
+ const buyAmountBNB = quotedBNBOut;
349
+ // ✅ 根据是否使用原生代币获取不同的余额
350
+ let buyerBalance;
351
+ if (useNativeToken) {
352
+ buyerBalance = await buyer.provider.getBalance(buyer.address);
353
+ const requiredBalance = buyAmountBNB + FLAT_FEE + reserveGas;
354
+ if (buyerBalance < requiredBalance) {
355
+ throw new Error(`买方余额不足: 需要 ${ethers.formatEther(requiredBalance)} BNB, 实际 ${ethers.formatEther(buyerBalance)} BNB`);
356
+ }
357
+ return { buyerBalance, reserveGas, requiredBalance, buyAmountBNB, useNativeToken };
358
+ }
359
+ else {
360
+ // ERC20 代币余额
361
+ const erc20 = new Contract(quoteToken, ERC20_BALANCE_OF_ABI, provider || buyer.provider);
362
+ buyerBalance = await erc20.balanceOf(buyer.address);
363
+ const requiredBalance = buyAmountBNB + FLAT_FEE; // ERC20 不需要预留 Gas 在代币余额中
364
+ if (buyerBalance < requiredBalance) {
365
+ throw new Error(`买方代币余额不足: 需要 ${ethers.formatUnits(requiredBalance, quoteTokenDecimals)}, 实际 ${ethers.formatUnits(buyerBalance, quoteTokenDecimals)}`);
366
+ }
367
+ // ✅ ERC20 购买时,还需要检查买方是否有足够 BNB 支付 Gas
368
+ const buyerBnbBalance = await buyer.provider.getBalance(buyer.address);
369
+ if (buyerBnbBalance < reserveGas) {
370
+ throw new Error(`买方 BNB 余额不足 (用于支付 Gas): 需要 ${ethers.formatEther(reserveGas)} BNB, 实际 ${ethers.formatEther(buyerBnbBalance)} BNB`);
371
+ }
372
+ return { buyerBalance, reserveGas, requiredBalance, buyAmountBNB, useNativeToken };
373
+ }
374
+ }
375
+ /**
376
+ * ✅ 从前端传入的 startNonces 构建 NoncePlan(用于性能优化)
377
+ * 顺序:[sellerBaseNonce, buyerNonce]
378
+ */
379
+ export function buildNoncePlanFromNonces(startNonces, sameAddress, approvalExists, profitNeeded, needBribeTx) {
380
+ if (sameAddress) {
381
+ let idx = 0;
382
+ const bribeNonce = needBribeTx ? startNonces[0] + idx++ : undefined;
383
+ if (approvalExists)
384
+ idx++;
385
+ const sellerNonce = startNonces[0] + idx++;
386
+ const buyerNonce = startNonces[0] + idx++;
387
+ const profitNonce = profitNeeded ? startNonces[0] + idx : undefined;
388
+ return { sellerNonce, buyerNonce, bribeNonce, profitNonce };
389
+ }
390
+ let sellerIdx = 0;
391
+ const bribeNonce = needBribeTx ? startNonces[0] + sellerIdx++ : undefined;
392
+ if (approvalExists)
393
+ sellerIdx++;
394
+ const sellerNonce = startNonces[0] + sellerIdx++;
395
+ const profitNonce = profitNeeded ? startNonces[0] + sellerIdx : undefined;
396
+ const buyerNonce = startNonces[1];
397
+ return { sellerNonce, buyerNonce, bribeNonce, profitNonce };
398
+ }
399
+ /**
400
+ * ✅ 规划 nonce
401
+ * 交易顺序:贿赂 → 授权 → 卖出 → 买入 → 利润
402
+ * 贿赂和利润由卖方发送
403
+ */
404
+ export async function planNonces({ seller, buyer, sameAddress, approvalExists, profitNeeded, needBribeTx, nonceManager, }) {
405
+ if (sameAddress) {
406
+ // 同一地址:贿赂(可选) + 授权(可选) + 卖出 + 买入 + 利润(可选)
407
+ const txCount = countTruthy([needBribeTx, approvalExists, true, true, profitNeeded]);
408
+ const nonces = await nonceManager.getNextNonceBatch(buyer, txCount);
409
+ let idx = 0;
410
+ const bribeNonce = needBribeTx ? nonces[idx++] : undefined;
411
+ if (approvalExists)
412
+ idx++;
413
+ const sellerNonce = nonces[idx++];
414
+ const buyerNonce = nonces[idx++];
415
+ const profitNonce = profitNeeded ? nonces[idx] : undefined;
416
+ return { sellerNonce, buyerNonce, bribeNonce, profitNonce };
417
+ }
418
+ if (needBribeTx || approvalExists || profitNeeded) {
419
+ // 卖方需要多个 nonce:贿赂(可选) + 授权(可选) + 卖出 + 利润(可选)
420
+ const sellerTxCount = countTruthy([needBribeTx, approvalExists, true, profitNeeded]);
421
+ // ✅ 并行获取 seller 和 buyer 的 nonce
422
+ const [sellerNonces, buyerNonce] = await Promise.all([
423
+ nonceManager.getNextNonceBatch(seller, sellerTxCount),
424
+ nonceManager.getNextNonce(buyer),
425
+ ]);
426
+ let idx = 0;
427
+ const bribeNonce = needBribeTx ? sellerNonces[idx++] : undefined;
428
+ if (approvalExists)
429
+ idx++;
430
+ const sellerNonce = sellerNonces[idx++];
431
+ const profitNonce = profitNeeded ? sellerNonces[idx] : undefined;
432
+ return { sellerNonce, buyerNonce, bribeNonce, profitNonce };
433
+ }
434
+ // ✅ 并行获取 seller 和 buyer 的 nonce
435
+ const [sellerNonce, buyerNonce] = await Promise.all([
436
+ nonceManager.getNextNonce(seller),
437
+ nonceManager.getNextNonce(buyer),
438
+ ]);
439
+ return { sellerNonce, buyerNonce };
440
+ }
441
+ /**
442
+ * 根据 userType 计算利润率
443
+ */
444
+ export function getProfitRateBps(userType) {
445
+ if (userType === 'v0') {
446
+ return 4; // 0.06%
447
+ }
448
+ else if (userType === 'v1') {
449
+ return 5; // 0.05%
450
+ }
451
+ return 4; // 默认 0.06%
452
+ }
453
+ export function calculateProfitAmount(estimatedBNBOut, userType) {
454
+ if (estimatedBNBOut <= 0n) {
455
+ return 0n;
456
+ }
457
+ const rateBps = getProfitRateBps(userType);
458
+ return (estimatedBNBOut * BigInt(rateBps)) / 10000n;
459
+ }
460
+ /**
461
+ * ✅ 获取 ERC20 代币 → 原生代币(BNB)的报价
462
+ * 用于将 ERC20 利润转换为 BNB
463
+ * 使用共享的报价函数
464
+ */
465
+ export async function getERC20ToNativeQuote(provider, tokenAddress, tokenAmount, version = 'v2', fee) {
466
+ if (tokenAmount <= 0n)
467
+ return 0n;
468
+ const tokenLower = tokenAddress.toLowerCase();
469
+ const wbnbLower = WBNB_ADDRESS.toLowerCase();
470
+ // 如果代币本身就是 WBNB,直接返回
471
+ if (tokenLower === wbnbLower) {
472
+ return tokenAmount;
473
+ }
474
+ // 使用共享的报价函数
475
+ if (version === 'v3') {
476
+ const result = await quoteV3(provider, tokenAddress, WBNB_ADDRESS, tokenAmount, 'BSC', fee);
477
+ if (result.amountOut > 0n) {
478
+ return result.amountOut;
479
+ }
480
+ return 0n;
481
+ }
482
+ const result = await quoteV2(provider, tokenAddress, WBNB_ADDRESS, tokenAmount, 'BSC');
483
+ return result.amountOut > 0n ? result.amountOut : 0n;
484
+ }
485
+ export async function validateFinalBalances({ sameAddress, buyerBalance, buyAmountBNB, reserveGas, gasLimit, gasPrice, useNativeToken = true, quoteTokenDecimals = 18, provider, buyerAddress, }) {
486
+ const gasCost = gasLimit * gasPrice;
487
+ if (sameAddress) {
488
+ // 同一地址:需要足够的余额支付两笔交易
489
+ if (useNativeToken) {
490
+ const requiredCombined = buyAmountBNB + FLAT_FEE * 2n + gasCost * 2n;
491
+ if (buyerBalance < requiredCombined) {
492
+ throw new Error(`账户余额不足:\n - 需要: ${ethers.formatEther(requiredCombined)} BNB(含两笔Gas与两笔手续费)\n - 实际: ${ethers.formatEther(buyerBalance)} BNB`);
493
+ }
494
+ }
495
+ else {
496
+ // ERC20:检查代币余额 + BNB Gas 余额
497
+ const requiredToken = buyAmountBNB + FLAT_FEE * 2n;
498
+ if (buyerBalance < requiredToken) {
499
+ throw new Error(`账户代币余额不足:\n - 需要: ${ethers.formatUnits(requiredToken, quoteTokenDecimals)}\n - 实际: ${ethers.formatUnits(buyerBalance, quoteTokenDecimals)}`);
500
+ }
501
+ // 检查 BNB Gas
502
+ if (provider && buyerAddress) {
503
+ const bnbBalance = await provider.getBalance(buyerAddress);
504
+ const requiredGas = gasCost * 2n;
505
+ if (bnbBalance < requiredGas) {
506
+ throw new Error(`账户 BNB 余额不足 (用于支付 Gas):\n - 需要: ${ethers.formatEther(requiredGas)} BNB\n - 实际: ${ethers.formatEther(bnbBalance)} BNB`);
507
+ }
508
+ }
509
+ }
510
+ return;
511
+ }
512
+ // 不同地址
513
+ if (useNativeToken) {
514
+ const requiredBuyer = buyAmountBNB + FLAT_FEE + reserveGas;
515
+ if (buyerBalance < requiredBuyer) {
516
+ throw new Error(`买方余额不足:\n - 需要: ${ethers.formatEther(requiredBuyer)} BNB\n - 实际: ${ethers.formatEther(buyerBalance)} BNB`);
517
+ }
518
+ }
519
+ // ERC20 余额已在 calculateBuyerBudget 中检查过
520
+ }
521
+ export function countTruthy(values) {
522
+ return values.filter(Boolean).length;
523
+ }
524
+ /**
525
+ * 获取 Gas Limit
526
+ */
527
+ export function getGasLimit(config, defaultGas = 800000) {
528
+ if (config.gasLimit !== undefined) {
529
+ return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
530
+ }
531
+ const multiplier = config.gasLimitMultiplier ?? 1.0;
532
+ const calculatedGas = Math.ceil(defaultGas * multiplier);
533
+ return BigInt(calculatedGas);
534
+ }
535
+ export async function getGasPrice(provider, config) {
536
+ const feeData = await provider.getFeeData();
537
+ let gasPrice = feeData.gasPrice || ethers.parseUnits('3', 'gwei');
538
+ if (config.minGasPriceGwei) {
539
+ const minGas = ethers.parseUnits(config.minGasPriceGwei.toString(), 'gwei');
540
+ if (gasPrice < minGas)
541
+ gasPrice = minGas;
542
+ }
543
+ if (config.maxGasPriceGwei) {
544
+ const maxGas = ethers.parseUnits(config.maxGasPriceGwei.toString(), 'gwei');
545
+ if (gasPrice > maxGas)
546
+ gasPrice = maxGas;
547
+ }
548
+ return gasPrice;
549
+ }
550
+ // ✅ ABI 别名(从公共模块导入)
551
+ export const PANCAKE_V2_ROUTER_ABI = V2_ROUTER_ABI;
552
+ export const PANCAKE_V3_ROUTER_ABI = V3_ROUTER02_ABI;
553
+ export const ERC20_BALANCE_OF_ABI = ERC20_BALANCE_ABI;
554
+ // ✅ 使用官方 PancakeSwap Router 地址
555
+ export const PANCAKE_V2_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV2Router;
556
+ export const PANCAKE_V3_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV3Router;
557
+ // 常量
558
+ export const FLAT_FEE = 0n;
559
+ export const WBNB_ADDRESS = ADDRESSES.BSC.WBNB;
560
+ export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
561
+ // ✅ ERC20_BALANCE_OF_ABI 已在文件开头定义
562
+ /**
563
+ * PancakeSwap捆绑换手(V2/V3通用)
564
+ * ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
565
+ */
@@ -1,83 +1,5 @@
1
- import { CommonBundleConfig } from '../../../utils/bundle-helpers.js';
2
1
  import { type GeneratedWallet } from '../../../utils/wallet.js';
3
- export type UserType = 'v0' | 'v1';
4
- export interface PancakeSwapSignConfig {
5
- rpcUrl: string;
6
- gasLimit?: number | bigint;
7
- gasLimitMultiplier?: number;
8
- minGasPriceGwei?: number;
9
- maxGasPriceGwei?: number;
10
- txType?: 0 | 2;
11
- chainId?: number;
12
- reserveGasBNB?: number;
13
- userType?: UserType;
14
- bribeAmount?: number;
15
- v2RouterAddress?: string;
16
- }
17
- export type SwapRouteType = 'v2' | 'v3-single' | 'v3-multi';
18
- export interface PancakeSwapConfig extends CommonBundleConfig {
19
- apiKey: string;
20
- customRpcUrl?: string;
21
- bundleBlockOffset?: number;
22
- reserveGasBNB?: number;
23
- waitForConfirmation?: boolean;
24
- waitTimeoutMs?: number;
25
- }
26
- export interface V2RouteParams {
27
- routeType: 'v2';
28
- v2Path: string[];
29
- }
30
- export interface V3SingleRouteParams {
31
- routeType: 'v3-single';
32
- v3TokenIn: string;
33
- v3TokenOut: string;
34
- v3Fee: number;
35
- v2Path?: string[];
36
- }
37
- export interface V3MultiRouteParams {
38
- routeType: 'v3-multi';
39
- v3LpAddresses: string[];
40
- v3ExactTokenIn: string;
41
- v2Path?: string[];
42
- }
43
- export type RouteParams = V2RouteParams | V3SingleRouteParams | V3MultiRouteParams;
44
- export interface PancakeBundleSwapSignParams {
45
- sellerPrivateKey: string;
46
- sellAmount?: string;
47
- sellPercentage?: number;
48
- buyerPrivateKey: string;
49
- tokenAddress: string;
50
- routeParams: RouteParams;
51
- config: PancakeSwapSignConfig;
52
- quoteToken?: string;
53
- quoteTokenDecimals?: number;
54
- startNonces?: number[];
55
- }
56
- export interface PancakeBundleSwapParams {
57
- sellerPrivateKey: string;
58
- sellAmount?: string;
59
- sellPercentage?: number;
60
- buyerPrivateKey: string;
61
- tokenAddress: string;
62
- routeParams: RouteParams;
63
- config: PancakeSwapConfig;
64
- }
65
- /** ✅ Pancake Swap 结果(简化版) */
66
- export type PancakeSwapResult = {
67
- signedTransactions: string[];
68
- profitHopWallets?: GeneratedWallet[];
69
- metadata?: {
70
- sellerAddress: string;
71
- buyerAddress: string;
72
- sellAmount: string;
73
- buyAmount: string;
74
- profitAmount?: string;
75
- };
76
- };
77
- /**
78
- * PancakeSwap捆绑换手(V2/V3通用)
79
- * ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
80
- */
2
+ import { PancakeBundleSwapSignParams, PancakeSwapResult, PancakeSwapSignConfig, RouteParams } from './bundle-swap-helpers.js';
81
3
  export declare function pancakeBundleSwapMerkle(params: PancakeBundleSwapSignParams): Promise<PancakeSwapResult>;
82
4
  /**
83
5
  * 批量换手参数(一卖多买)