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
@@ -1,10 +1,10 @@
1
- import { ethers, Wallet } from 'ethers';
1
+ import { ethers, Wallet, JsonRpcProvider } from 'ethers';
2
2
  import { MerkleClient } from '../../clients/merkle.js';
3
3
  import { getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
4
4
  import { FLAP_PORTAL_ADDRESSES } from '../constants.js';
5
- import { ZERO_ADDRESS } from '../../../utils/constants.js';
5
+ import { ZERO_ADDRESS } from '../../../shared/constants/index.js';
6
6
  import { GAS_LIMITS, CHAINS } from '../../constants/index.js';
7
- import { CHAIN_ID_MAP, PORTAL_ABI, getTxType, getGasPriceConfig, shouldExtractProfit, calculateProfit, calculateBatchProfit, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA } from './config.js';
7
+ import { CHAIN_ID_MAP, PORTAL_ABI, getTxType, getGasPriceConfig, shouldExtractProfit, calculateProfit, calculateBatchProfit, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, } from './config.js';
8
8
  const DEFAULT_GAS_LIMIT = 800000;
9
9
  /**
10
10
  * 私有购买(单笔)(Merkle 版本)
@@ -16,8 +16,8 @@ export async function flapPrivateBuyMerkle(params) {
16
16
  const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
17
17
  const originalAmountWei = ethers.parseEther(amountIn);
18
18
  // ✅ 利润提取配置
19
- const extractProfit = shouldExtractProfit(config);
20
- const { actualAmountWei, profitWei } = splitBuyAmount(originalAmountWei, extractProfit, config);
19
+ const extractProfit = shouldExtractProfit();
20
+ const { actualAmountWei, profitWei } = splitBuyAmount(originalAmountWei, extractProfit);
21
21
  const minAmountOut = parseMinOutput(minOutputAmount);
22
22
  const portal = new ethers.Contract(portalAddr, PORTAL_ABI, wallet);
23
23
  // ✅ 并行获取 gasPrice、nonce 和构建未签名交易
@@ -31,7 +31,7 @@ export async function flapPrivateBuyMerkle(params) {
31
31
  inputAmount: actualAmountWei,
32
32
  minOutputAmount: minAmountOut,
33
33
  permitData: '0x',
34
- }, { value: actualAmountWei })
34
+ }, { value: actualAmountWei }),
35
35
  ]);
36
36
  const gasLimit = resolveGasLimit(config.gasLimitMultiplier);
37
37
  // ✅ 获取贿赂金额
@@ -55,7 +55,7 @@ export async function flapPrivateBuyMerkle(params) {
55
55
  gasPrice,
56
56
  gasLimit: GAS_LIMITS.BRIBE,
57
57
  chainId,
58
- type: txType
58
+ type: txType,
59
59
  }));
60
60
  }
61
61
  // 买入交易
@@ -67,7 +67,7 @@ export async function flapPrivateBuyMerkle(params) {
67
67
  gasPrice,
68
68
  chainId,
69
69
  type: txType,
70
- value: actualAmountWei
70
+ value: actualAmountWei,
71
71
  }));
72
72
  // ✅ 并行签名完成后按顺序返回
73
73
  const signedTxs = await Promise.all(signPromises);
@@ -83,7 +83,7 @@ export async function flapPrivateBuyMerkle(params) {
83
83
  gasPrice,
84
84
  chainId,
85
85
  txType,
86
- startNonce: profitNonce
86
+ startNonce: profitNonce,
87
87
  });
88
88
  signedTxs.push(...profitHopResult.signedTransactions);
89
89
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -112,7 +112,7 @@ export async function flapPrivateSellMerkle(params) {
112
112
  inputAmount: amountWei,
113
113
  minOutputAmount: 0n, // ✅ 已移除滑点保护
114
114
  permitData: '0x',
115
- })
115
+ }),
116
116
  ]);
117
117
  const gasLimit = resolveGasLimit(config.gasLimitMultiplier);
118
118
  const txType = getTxType(config);
@@ -120,10 +120,8 @@ export async function flapPrivateSellMerkle(params) {
120
120
  const bribeAmount = getBribeAmount(config);
121
121
  const needBribeTx = bribeAmount > 0n;
122
122
  // ✅ 利润计算
123
- const extractProfit = shouldExtractProfit(config);
124
- const { profit: profitWei } = extractProfit && quotedOutput > 0n
125
- ? calculateProfit(quotedOutput, config)
126
- : { profit: 0n };
123
+ const extractProfit = shouldExtractProfit();
124
+ const { profit: profitWei } = extractProfit && quotedOutput > 0n ? calculateProfit(quotedOutput) : { profit: 0n };
127
125
  const needProfitTx = extractProfit && profitWei > 0n;
128
126
  // ✅ 分配 nonces:贿赂 → 卖出 → 利润
129
127
  let nonceIdx = 0;
@@ -141,7 +139,7 @@ export async function flapPrivateSellMerkle(params) {
141
139
  gasPrice,
142
140
  gasLimit: GAS_LIMITS.BRIBE,
143
141
  chainId,
144
- type: txType
142
+ type: txType,
145
143
  }));
146
144
  }
147
145
  // 卖出交易
@@ -152,7 +150,7 @@ export async function flapPrivateSellMerkle(params) {
152
150
  gasLimit,
153
151
  gasPrice,
154
152
  chainId,
155
- type: txType
153
+ type: txType,
156
154
  }));
157
155
  // ✅ 并行签名完成后按顺序返回
158
156
  const signedTxs = await Promise.all(signPromises);
@@ -168,7 +166,7 @@ export async function flapPrivateSellMerkle(params) {
168
166
  gasPrice,
169
167
  chainId,
170
168
  txType,
171
- startNonce: profitNonce
169
+ startNonce: profitNonce,
172
170
  });
173
171
  signedTxs.push(...profitHopResult.signedTransactions);
174
172
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -185,15 +183,15 @@ export async function flapBatchPrivateBuyMerkle(params) {
185
183
  }
186
184
  const { chainId, provider } = createMerkleContext(chain, config);
187
185
  const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
188
- const wallets = privateKeys.map(k => new Wallet(k, provider));
189
- const originalAmountsWei = amountsIn.map(a => ethers.parseEther(a));
186
+ const wallets = privateKeys.map((k) => new Wallet(k, provider));
187
+ const originalAmountsWei = amountsIn.map((a) => ethers.parseEther(a));
190
188
  // ✅ 利润提取配置
191
- const extractProfit = shouldExtractProfit(config);
192
- const { totalProfit, remainingAmounts } = calculateBatchProfit(originalAmountsWei, config);
189
+ const extractProfit = shouldExtractProfit();
190
+ const { totalProfit, remainingAmounts } = calculateBatchProfit(originalAmountsWei);
193
191
  const actualAmountsWei = remainingAmounts;
194
192
  const maxFundsIndex = findMaxIndex(originalAmountsWei);
195
193
  const minOuts = resolveBatchMinOutputs(minOutputAmounts, wallets.length);
196
- const portals = wallets.map(w => new ethers.Contract(portalAddr, PORTAL_ABI, w));
194
+ const portals = wallets.map((w) => new ethers.Contract(portalAddr, PORTAL_ABI, w));
197
195
  // ✅ 获取贿赂金额
198
196
  const bribeAmount = getBribeAmount(config);
199
197
  const needBribeTx = bribeAmount > 0n;
@@ -202,14 +200,14 @@ export async function flapBatchPrivateBuyMerkle(params) {
202
200
  const [gasPrice, initialNonces, unsignedList] = await Promise.all([
203
201
  getOptimizedGasPrice(provider, getGasPriceConfig(config)),
204
202
  // ✅ 使用 pending nonce,避免 xLayer 等链上“已有 pending 交易”导致 nonce too low
205
- Promise.all(wallets.map(w => provider.getTransactionCount(w.address, 'pending'))),
203
+ Promise.all(wallets.map((w) => provider.getTransactionCount(w.address, 'pending'))),
206
204
  Promise.all(portals.map((portal, i) => portal.swapExactInput.populateTransaction({
207
205
  inputToken: ZERO_ADDRESS,
208
206
  outputToken: tokenAddress,
209
207
  inputAmount: actualAmountsWei[i],
210
208
  minOutputAmount: minOuts[i],
211
209
  permitData: '0x',
212
- }, { value: actualAmountsWei[i] })))
210
+ }, { value: actualAmountsWei[i] }))),
213
211
  ]);
214
212
  // ✅ 分配 nonces:贿赂(可选) → 买入 → 利润(可选)
215
213
  let payerNonceOffset = 0;
@@ -224,9 +222,7 @@ export async function flapBatchPrivateBuyMerkle(params) {
224
222
  }
225
223
  return n;
226
224
  });
227
- const profitNonce = needProfitTx && maxFundsIndex >= 0
228
- ? initialNonces[maxFundsIndex] + payerNonceOffset + 1
229
- : undefined;
225
+ const profitNonce = needProfitTx && maxFundsIndex >= 0 ? initialNonces[maxFundsIndex] + payerNonceOffset + 1 : undefined;
230
226
  const gasLimit = resolveGasLimit(config.gasLimitMultiplier);
231
227
  const gasLimits = new Array(wallets.length).fill(gasLimit);
232
228
  const signedTxs = [];
@@ -239,7 +235,7 @@ export async function flapBatchPrivateBuyMerkle(params) {
239
235
  gasPrice,
240
236
  gasLimit: GAS_LIMITS.BRIBE,
241
237
  chainId,
242
- type: getTxType(config)
238
+ type: getTxType(config),
243
239
  });
244
240
  signedTxs.push(bribeTx);
245
241
  }
@@ -252,7 +248,7 @@ export async function flapBatchPrivateBuyMerkle(params) {
252
248
  gasPrice,
253
249
  chainId,
254
250
  config,
255
- values: actualAmountsWei
251
+ values: actualAmountsWei,
256
252
  });
257
253
  signedTxs.push(...signedList);
258
254
  // ✅ 利润多跳转账(强制 2 跳中转)
@@ -267,7 +263,7 @@ export async function flapBatchPrivateBuyMerkle(params) {
267
263
  gasPrice,
268
264
  chainId,
269
265
  txType: getTxType(config),
270
- startNonce: profitNonce
266
+ startNonce: profitNonce,
271
267
  });
272
268
  signedTxs.push(...profitHopResult.signedTransactions);
273
269
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -278,37 +274,39 @@ export async function flapBatchPrivateBuyMerkle(params) {
278
274
  * 批量私有卖出(Merkle 版本)
279
275
  */
280
276
  export async function flapBatchPrivateSellMerkle(params) {
281
- const { chain, privateKeys, amounts, tokenAddress, minOutputAmounts, config } = params;
277
+ const { chain, privateKeys, amounts, tokenAddress, config } = params;
282
278
  if (privateKeys.length !== amounts.length) {
283
279
  throw new Error('privateKeys and amounts length mismatch');
284
280
  }
285
281
  const { chainId, provider } = createMerkleContext(chain, config);
286
282
  const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
287
- const wallets = privateKeys.map(k => new Wallet(k, provider));
288
- const amountsWei = amounts.map(a => ethers.parseUnits(a, 18));
283
+ const wallets = privateKeys.map((k) => new Wallet(k, provider));
284
+ const amountsWei = amounts.map((a) => ethers.parseUnits(a, 18));
289
285
  const portal = new ethers.Contract(portalAddr, PORTAL_ABI, provider);
290
- const portals = wallets.map(w => new ethers.Contract(portalAddr, PORTAL_ABI, w));
286
+ const portals = wallets.map((w) => new ethers.Contract(portalAddr, PORTAL_ABI, w));
291
287
  // ✅ 并行获取 gasPrice、所有 nonces、所有报价和构建未签名交易
292
288
  const [gasPrice, initialNonces, quotedOutputs, unsignedList] = await Promise.all([
293
289
  getOptimizedGasPrice(provider, getGasPriceConfig(config)),
294
290
  // ✅ 使用 pending nonce,避免 xLayer 等链上“已有 pending 交易”导致 nonce too low
295
- Promise.all(wallets.map(w => provider.getTransactionCount(w.address, 'pending'))),
296
- Promise.all(amountsWei.map(amount => portal.quoteExactInput.staticCall({
291
+ Promise.all(wallets.map((w) => provider.getTransactionCount(w.address, 'pending'))),
292
+ Promise.all(amountsWei.map((amount) => portal.quoteExactInput
293
+ .staticCall({
297
294
  inputToken: tokenAddress,
298
295
  outputToken: ZERO_ADDRESS,
299
- inputAmount: amount
300
- }).catch(() => 0n))),
296
+ inputAmount: amount,
297
+ })
298
+ .catch(() => 0n))),
301
299
  // ✅ 并行构建未签名交易(已移除滑点保护:minOuts 固定为 0)
302
300
  Promise.all(portals.map((p, i) => p.swapExactInput.populateTransaction({
303
301
  inputToken: tokenAddress,
304
302
  outputToken: ZERO_ADDRESS,
305
303
  inputAmount: amountsWei[i],
306
304
  minOutputAmount: 0n,
307
- permitData: '0x'
308
- })))
305
+ permitData: '0x',
306
+ }))),
309
307
  ]);
310
- const extractProfit = shouldExtractProfit(config);
311
- const { totalProfit, maxRevenueIndex } = summarizeSellProfits(quotedOutputs, extractProfit, config);
308
+ const extractProfit = shouldExtractProfit();
309
+ const { totalProfit, maxRevenueIndex } = summarizeSellProfits(quotedOutputs, extractProfit);
312
310
  // ✅ 获取贿赂金额
313
311
  const bribeAmount = getBribeAmount(config);
314
312
  const needBribeTx = bribeAmount > 0n;
@@ -326,9 +324,7 @@ export async function flapBatchPrivateSellMerkle(params) {
326
324
  }
327
325
  return n;
328
326
  });
329
- const profitNonce = needProfitTx && maxRevenueIndex >= 0
330
- ? initialNonces[maxRevenueIndex] + payerNonceOffset + 1
331
- : undefined;
327
+ const profitNonce = needProfitTx && maxRevenueIndex >= 0 ? initialNonces[maxRevenueIndex] + payerNonceOffset + 1 : undefined;
332
328
  const gasLimit = resolveGasLimit(config.gasLimitMultiplier);
333
329
  const gasLimits = new Array(wallets.length).fill(gasLimit);
334
330
  const signedTxs = [];
@@ -341,7 +337,7 @@ export async function flapBatchPrivateSellMerkle(params) {
341
337
  gasPrice,
342
338
  gasLimit: GAS_LIMITS.BRIBE,
343
339
  chainId,
344
- type: getTxType(config)
340
+ type: getTxType(config),
345
341
  });
346
342
  signedTxs.push(bribeTx);
347
343
  }
@@ -353,7 +349,7 @@ export async function flapBatchPrivateSellMerkle(params) {
353
349
  gasLimits,
354
350
  gasPrice,
355
351
  chainId,
356
- config
352
+ config,
357
353
  });
358
354
  signedTxs.push(...signedList);
359
355
  // ✅ 利润多跳转账(强制 2 跳中转)
@@ -368,7 +364,7 @@ export async function flapBatchPrivateSellMerkle(params) {
368
364
  gasPrice,
369
365
  chainId,
370
366
  txType: getTxType(config),
371
- startNonce: profitNonce
367
+ startNonce: profitNonce,
372
368
  });
373
369
  signedTxs.push(...profitHopResult.signedTransactions);
374
370
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -385,28 +381,27 @@ function createMerkleContext(chain, config) {
385
381
  if (!config.customRpcUrl) {
386
382
  throw new Error(`Chain ${chain} (chainId: ${chainId}) does not support Merkle bundle service. Please provide customRpcUrl.`);
387
383
  }
388
- const { JsonRpcProvider } = require('ethers');
389
- // ✅ 禁用 ENS: 避免 "network does not support ENS" 错误
390
384
  return {
391
385
  chainId,
392
- provider: new JsonRpcProvider(config.customRpcUrl, { chainId, name: chain.toLowerCase(), ensAddress: undefined })
386
+ // 禁用 ENS: 避免 "network does not support ENS" 错误
387
+ provider: new JsonRpcProvider(config.customRpcUrl, { chainId, name: chain.toLowerCase(), ensAddress: undefined }),
393
388
  };
394
389
  }
395
390
  const merkle = new MerkleClient({
396
391
  apiKey: config.apiKey,
397
392
  chainId: chainId, // 类型断言为 Merkle 支持的 chainId
398
- customRpcUrl: config.customRpcUrl
393
+ customRpcUrl: config.customRpcUrl,
399
394
  });
400
395
  return {
401
396
  chainId,
402
- provider: merkle.getProvider()
397
+ provider: merkle.getProvider(),
403
398
  };
404
399
  }
405
- function splitBuyAmount(amount, extractProfit, config) {
400
+ function splitBuyAmount(amount, extractProfit) {
406
401
  if (!extractProfit) {
407
402
  return { actualAmountWei: amount, profitWei: 0n };
408
403
  }
409
- const { remaining, profit } = calculateProfit(amount, config);
404
+ const { remaining, profit } = calculateProfit(amount);
410
405
  return { actualAmountWei: remaining, profitWei: profit };
411
406
  }
412
407
  function parseMinOutput(value) {
@@ -419,83 +414,35 @@ function resolveGasLimit(multiplier, defaultGas = DEFAULT_GAS_LIMIT) {
419
414
  const factor = multiplier ?? 1.0;
420
415
  return BigInt(Math.ceil(defaultGas * factor));
421
416
  }
422
- /**
423
- * 追加利润多跳转账交易(强制 2 跳中转)
424
- */
425
- async function appendSingleProfitTransfer({ extractProfit, profitWei, wallet, baseNonce, provider, gasPrice, chainId, config, signedTxs }) {
426
- if (!extractProfit || profitWei === 0n) {
427
- return undefined;
428
- }
429
- const profitHopResult = await buildProfitHopTransactions({
430
- provider,
431
- payerWallet: wallet,
432
- profitAmount: profitWei,
433
- profitRecipient: getProfitRecipient(),
434
- hopCount: PROFIT_HOP_COUNT,
435
- gasPrice,
436
- chainId,
437
- txType: getTxType(config),
438
- startNonce: baseNonce + 1
439
- });
440
- signedTxs.push(...profitHopResult.signedTransactions);
441
- return profitHopResult.hopWallets; // ✅ 返回利润多跳钱包
442
- }
443
417
  async function resolveSingleSellOutputs(portal, tokenAddress, amountWei, minOutputAmount) {
444
418
  if (minOutputAmount !== undefined) {
445
- const minOut = typeof minOutputAmount === 'string'
446
- ? ethers.parseEther(minOutputAmount)
447
- : minOutputAmount;
419
+ const minOut = typeof minOutputAmount === 'string' ? ethers.parseEther(minOutputAmount) : minOutputAmount;
448
420
  return {
449
421
  quotedOutput: minOut,
450
- minOut
422
+ minOut,
451
423
  };
452
424
  }
453
425
  try {
454
426
  const quotedOutput = await portal.quoteExactInput.staticCall({
455
427
  inputToken: tokenAddress,
456
428
  outputToken: ZERO_ADDRESS,
457
- inputAmount: amountWei
429
+ inputAmount: amountWei,
458
430
  });
459
431
  return {
460
432
  quotedOutput,
461
- minOut: 0n // ✅ 已移除滑点保护:minOut 固定为 0
433
+ minOut: 0n, // ✅ 已移除滑点保护:minOut 固定为 0
462
434
  };
463
435
  }
464
436
  catch {
465
437
  return {
466
438
  quotedOutput: 0n,
467
- minOut: 0n
439
+ minOut: 0n,
468
440
  };
469
441
  }
470
442
  }
471
- /**
472
- * 追加卖出利润多跳转账交易(强制 2 跳中转)
473
- */
474
- async function appendSingleSellProfitTransfer({ extractProfit, quotedOutput, wallet, baseNonce, provider, gasPrice, chainId, config, signedTxs }) {
475
- if (!extractProfit || quotedOutput <= 0n) {
476
- return undefined;
477
- }
478
- const { profit } = calculateProfit(quotedOutput, config);
479
- if (profit === 0n) {
480
- return undefined;
481
- }
482
- const profitHopResult = await buildProfitHopTransactions({
483
- provider,
484
- payerWallet: wallet,
485
- profitAmount: profit,
486
- profitRecipient: getProfitRecipient(),
487
- hopCount: PROFIT_HOP_COUNT,
488
- gasPrice,
489
- chainId,
490
- txType: getTxType(config),
491
- startNonce: baseNonce + 1
492
- });
493
- signedTxs.push(...profitHopResult.signedTransactions);
494
- return profitHopResult.hopWallets; // ✅ 返回利润多跳钱包
495
- }
496
443
  function resolveBatchMinOutputs(minOutputAmounts, walletCount) {
497
444
  if (minOutputAmounts && minOutputAmounts.length === walletCount) {
498
- return minOutputAmounts.map(m => typeof m === 'string' ? ethers.parseUnits(m, 18) : m);
445
+ return minOutputAmounts.map((m) => (typeof m === 'string' ? ethers.parseUnits(m, 18) : m));
499
446
  }
500
447
  return new Array(walletCount).fill(0n);
501
448
  }
@@ -513,9 +460,9 @@ function findMaxIndex(values) {
513
460
  }
514
461
  return maxIndex;
515
462
  }
516
- async function signBatchTransactions({ unsignedList, wallets, nonces, gasLimits, gasPrice, chainId, config, values }) {
463
+ async function signBatchTransactions({ unsignedList, wallets, nonces, gasLimits, gasPrice, chainId, config, values, }) {
517
464
  return await Promise.all(unsignedList.map((unsigned, i) => {
518
- const value = values ? values[i] : unsigned.value;
465
+ const value = values ? values[i] : (unsigned.value ?? 0n);
519
466
  return wallets[i].signTransaction({
520
467
  ...unsigned,
521
468
  from: wallets[i].address,
@@ -524,11 +471,11 @@ async function signBatchTransactions({ unsignedList, wallets, nonces, gasLimits,
524
471
  gasPrice,
525
472
  chainId,
526
473
  type: getTxType(config),
527
- value
474
+ value,
528
475
  });
529
476
  }));
530
477
  }
531
- function summarizeSellProfits(quotedOutputs, extractProfit, config) {
478
+ function summarizeSellProfits(quotedOutputs, extractProfit) {
532
479
  let totalProfit = 0n;
533
480
  let maxRevenueIndex = -1;
534
481
  let maxRevenue = 0n;
@@ -536,7 +483,7 @@ function summarizeSellProfits(quotedOutputs, extractProfit, config) {
536
483
  for (let i = 0; i < quotedOutputs.length; i++) {
537
484
  const quoted = quotedOutputs[i];
538
485
  if (quoted > 0n) {
539
- const { profit } = calculateProfit(quoted, config);
486
+ const { profit } = calculateProfit(quoted);
540
487
  totalProfit += profit;
541
488
  if (quoted > maxRevenue) {
542
489
  maxRevenue = quoted;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Flap Protocol 内盘捆绑换手(Merkle Bundle)- 先买后卖
3
+ *
4
+ * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
5
+ */
6
+ import { ethers } from 'ethers';
7
+ import { CommonBundleConfig } from '../../../utils/bundle-helpers.js';
8
+ import { FlapSignConfig } from './config.js';
9
+ import type { GeneratedWallet } from '../../../utils/wallet.js';
10
+ export declare const BSC_PANCAKE_V2_ROUTER: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
11
+ export declare const BSC_WBNB: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
12
+ export declare const MONAD_PANCAKE_V2_ROUTER = "0xb1bc24c34e88f7d43d5923034e3a14b24daacff9";
13
+ export declare const MONAD_WMON: "0x3bd359c1119da7da1d913d1c4d2b7c461115433a";
14
+ export declare const ROUTER_ABI: string[];
15
+ /**
16
+ * 获取 ERC20 代币 → 原生代币的报价
17
+ * @param provider - Provider 实例
18
+ * @param tokenAddress - ERC20 代币地址
19
+ * @param tokenAmount - 代币数量(wei)
20
+ * @param chainId - 链 ID(56=BSC, 143=Monad)
21
+ * @returns 等值的原生代币数量(wei),失败返回 0n
22
+ */
23
+ export declare function getTokenToNativeQuote(provider: ethers.JsonRpcProvider, tokenAddress: string, tokenAmount: bigint, chainId: number): Promise<bigint>;
24
+ export type FlapChain = 'bsc' | 'xlayer' | 'base';
25
+ /**
26
+ * 获取 Gas Limit(支持 FlapAnyConfig)
27
+ */
28
+ export declare function getGasLimit(config: FlapSignConfig | CommonBundleConfig, defaultGas?: number): bigint;
29
+ /** 最大 Bundle 签名数 */
30
+ export declare const MAX_BUNDLE_SIGNATURES = 50;
31
+ /** 贿赂交易数 */
32
+ export declare const BRIBE_TX_COUNT = 1;
33
+ /** 利润中转交易数(支付者 1 笔 + 中转钱包 PROFIT_HOP_COUNT 笔 + 最终接收 1 笔) */
34
+ export declare const PROFIT_TX_COUNT: number;
35
+ /** 最大买卖交易数 */
36
+ export declare const MAX_SWAP_TX_COUNT: number;
37
+ export type UserType = 'v0' | 'v1';
38
+ /**
39
+ * 根据 userType 获取每笔交易的利润率
40
+ */
41
+ export declare function getProfitRatePerTxBps(userType?: UserType): number;
42
+ export interface FlapBuyFirstSignConfig extends FlapSignConfig {
43
+ reserveGasETH?: number;
44
+ skipQuoteOnError?: boolean;
45
+ userType?: UserType;
46
+ }
47
+ export interface FlapBuyFirstConfig extends CommonBundleConfig {
48
+ apiKey: string;
49
+ customRpcUrl?: string;
50
+ bundleBlockOffset?: number;
51
+ reserveGasETH?: number;
52
+ skipQuoteOnError?: boolean;
53
+ waitForConfirmation?: boolean;
54
+ waitTimeoutMs?: number;
55
+ }
56
+ export interface FlapBundleBuyFirstSignParams {
57
+ chain: FlapChain;
58
+ buyerPrivateKey?: string;
59
+ buyerPrivateKeys?: string[];
60
+ sellerPrivateKey?: string;
61
+ sellerPrivateKeys?: string[];
62
+ tokenAddress: string;
63
+ buyerFunds?: string;
64
+ buyerFundsPercentage?: number;
65
+ config: FlapBuyFirstSignConfig;
66
+ quoteToken?: string;
67
+ quoteTokenDecimals?: number;
68
+ buyCount?: number;
69
+ sellCount?: number;
70
+ }
71
+ export interface FlapBundleBuyFirstParams {
72
+ chain: FlapChain;
73
+ buyerPrivateKey: string;
74
+ sellerPrivateKey: string;
75
+ tokenAddress: string;
76
+ buyerFunds?: string;
77
+ buyerFundsPercentage?: number;
78
+ config: FlapBuyFirstConfig;
79
+ }
80
+ /** ✅ Flap BuyFirst 结果(简化版) */
81
+ export type FlapBuyFirstResult = {
82
+ signedTransactions: string[];
83
+ profitHopWallets?: GeneratedWallet[];
84
+ metadata?: {
85
+ buyerAddress: string;
86
+ sellerAddress: string;
87
+ buyAmount: string;
88
+ sellAmount: string;
89
+ profitAmount?: string;
90
+ buyCount?: number;
91
+ sellCount?: number;
92
+ buyAmounts?: string[];
93
+ sellAmounts?: string[];
94
+ };
95
+ };
96
+ export type ChainContext = {
97
+ chainId: number;
98
+ nativeToken: string;
99
+ portalAddress: string;
100
+ provider: ethers.JsonRpcProvider;
101
+ };
102
+ export type BuyerFundsResult = {
103
+ buyerFundsWei: bigint;
104
+ buyerBalance: bigint;
105
+ };
106
+ export type QuoteResult = {
107
+ quotedToken: bigint;
108
+ sellAmountWei: bigint;
109
+ };
110
+ export type SellerInfo = {
111
+ decimals: number;
112
+ };
113
+ /** ✅ 多笔买卖 nonce 规划 */
114
+ export type MultiNoncePlan = {
115
+ buyerNonces: number[];
116
+ sellerNonces: number[];
117
+ bribeNonce?: number;
118
+ profitNonce?: number;
119
+ };
120
+ /**
121
+ * 验证买卖笔数
122
+ */
123
+ export declare function validateSwapCounts(buyCount: number, sellCount: number): void;
124
+ export declare function getChainId(chain: FlapChain): number;
125
+ export declare function getNativeTokenName(chain: FlapChain): string;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Flap Protocol 内盘捆绑换手(Merkle Bundle)- 先买后卖
3
+ *
4
+ * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行
5
+ */
6
+ import { Contract } from 'ethers';
7
+ import { PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
8
+ import { ADDRESSES } from '../../../shared/constants/index.js';
9
+ import { CHAINS, getProfitRateBps } from '../../constants/index.js';
10
+ import { V2_ROUTER_QUOTE_ABI } from '../../abis/common.js';
11
+ // ==================== 链常量 ====================
12
+ export const BSC_PANCAKE_V2_ROUTER = ADDRESSES.BSC.PancakeV2Router;
13
+ export const BSC_WBNB = ADDRESSES.BSC.WBNB;
14
+ export const MONAD_PANCAKE_V2_ROUTER = '0xb1bc24c34e88f7d43d5923034e3a14b24daacff9';
15
+ export const MONAD_WMON = ADDRESSES.MONAD.WMON;
16
+ export const ROUTER_ABI = V2_ROUTER_QUOTE_ABI;
17
+ /**
18
+ * 获取 ERC20 代币 → 原生代币的报价
19
+ * @param provider - Provider 实例
20
+ * @param tokenAddress - ERC20 代币地址
21
+ * @param tokenAmount - 代币数量(wei)
22
+ * @param chainId - 链 ID(56=BSC, 143=Monad)
23
+ * @returns 等值的原生代币数量(wei),失败返回 0n
24
+ */
25
+ export async function getTokenToNativeQuote(provider, tokenAddress, tokenAmount, chainId) {
26
+ if (tokenAmount <= 0n)
27
+ return 0n;
28
+ try {
29
+ if (chainId === CHAINS.BSC.chainId) {
30
+ // BSC: 使用 PancakeSwap V2 Router
31
+ const router = new Contract(BSC_PANCAKE_V2_ROUTER, ROUTER_ABI, provider);
32
+ const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, BSC_WBNB]);
33
+ return amounts[1];
34
+ }
35
+ if (chainId === CHAINS.MONAD.chainId) {
36
+ // ✅ Monad: 使用 PancakeSwap V2 Router
37
+ const router = new Contract(MONAD_PANCAKE_V2_ROUTER, ROUTER_ABI, provider);
38
+ const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, MONAD_WMON]);
39
+ return amounts[1];
40
+ }
41
+ // ✅ Base (8453) / XLayer (196) 等链暂不支持 V2 报价,返回 0
42
+ return 0n;
43
+ }
44
+ catch {
45
+ // 报价失败返回 0(可能是流动性不足或路径不存在)
46
+ return 0n;
47
+ }
48
+ }
49
+ /**
50
+ * 获取 Gas Limit(支持 FlapAnyConfig)
51
+ */
52
+ export function getGasLimit(config, defaultGas = 800000) {
53
+ if (config.gasLimit !== undefined) {
54
+ return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
55
+ }
56
+ const multiplier = config.gasLimitMultiplier ?? 1.0;
57
+ return BigInt(Math.ceil(defaultGas * multiplier));
58
+ }
59
+ // ==================== 多笔买卖常量 ====================
60
+ /** 最大 Bundle 签名数 */
61
+ export const MAX_BUNDLE_SIGNATURES = 50;
62
+ /** 贿赂交易数 */
63
+ export const BRIBE_TX_COUNT = 1;
64
+ /** 利润中转交易数(支付者 1 笔 + 中转钱包 PROFIT_HOP_COUNT 笔 + 最终接收 1 笔) */
65
+ export const PROFIT_TX_COUNT = PROFIT_HOP_COUNT + 2; // 2 + 2 = 4
66
+ /** 最大买卖交易数 */
67
+ export const MAX_SWAP_TX_COUNT = MAX_BUNDLE_SIGNATURES - BRIBE_TX_COUNT - PROFIT_TX_COUNT; // 50 - 1 - 4 = 45
68
+ /**
69
+ * 根据 userType 获取每笔交易的利润率
70
+ */
71
+ export function getProfitRatePerTxBps(userType) {
72
+ if (userType === 'v1') {
73
+ return getProfitRateBps('v1Double');
74
+ }
75
+ return getProfitRateBps('v0Double'); // v0 或默认
76
+ }
77
+ /**
78
+ * 验证买卖笔数
79
+ */
80
+ export function validateSwapCounts(buyCount, sellCount) {
81
+ if (buyCount < 1) {
82
+ throw new Error(`买入笔数必须至少为 1,当前为 ${buyCount}`);
83
+ }
84
+ if (sellCount < 1) {
85
+ throw new Error(`卖出笔数必须至少为 1,当前为 ${sellCount}`);
86
+ }
87
+ const totalSwaps = buyCount + sellCount;
88
+ if (totalSwaps > MAX_SWAP_TX_COUNT) {
89
+ throw new Error(`买卖笔数总和 (${totalSwaps}) 超出限制 (${MAX_SWAP_TX_COUNT}),` +
90
+ `最大签名数为 ${MAX_BUNDLE_SIGNATURES}(${BRIBE_TX_COUNT} 贿赂 + ${PROFIT_TX_COUNT} 利润 + ${MAX_SWAP_TX_COUNT} 买卖)`);
91
+ }
92
+ }
93
+ export function getChainId(chain) {
94
+ switch (chain) {
95
+ case 'bsc':
96
+ return 56;
97
+ case 'xlayer':
98
+ return 196;
99
+ case 'base':
100
+ return 8453;
101
+ }
102
+ }
103
+ export function getNativeTokenName(chain) {
104
+ switch (chain) {
105
+ case 'bsc':
106
+ return 'BNB';
107
+ case 'xlayer':
108
+ return 'OKB';
109
+ case 'base':
110
+ return 'ETH';
111
+ }
112
+ }
113
+ // 使用公共工具的 getGasLimit,移除本地重复实现