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