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,92 +1,15 @@
1
+ /**
2
+ * core - 主函数
3
+ */
1
4
  import { ethers, Wallet, Contract, Interface } from 'ethers';
2
- import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
3
- import { ADDRESSES, ZERO_ADDRESS } from '../../../utils/constants.js';
4
- import { GAS_LIMITS, CHAINS } from '../../constants/index.js';
5
- import { MULTICALL3_ABI, V2_ROUTER_QUOTE_ABI } from '../../abis/common.js';
5
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../utils/bundle-helpers.js';
6
+ import { ZERO_ADDRESS } from '../../../shared/constants/index.js';
7
+ import { GAS_LIMITS } from '../../constants/index.js';
8
+ import { MULTICALL3_ABI } from '../../abis/common.js';
6
9
  import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from '../constants.js';
7
10
  import { buildVaultParams, VAULT_PORTAL_ADDRESSES, VAULT_PORTAL_ABI } from '../vault.js';
8
- import { CHAIN_ID_MAP, PORTAL_ABI, getErrorMessage, getTxType, getGasPriceConfig, shouldExtractProfit, calculateProfit, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA } from './config.js';
9
- // 常量
10
- const MULTICALL3_ADDRESS = ADDRESSES.BSC.Multicall3;
11
- // ==================== ERC20 → 原生代币报价 ====================
12
- // BSC 链常量
13
- const BSC_PANCAKE_V2_ROUTER = ADDRESSES.BSC.PancakeV2Router;
14
- const BSC_WBNB = ADDRESSES.BSC.WBNB;
15
- // ✅ Monad 链常量
16
- const MONAD_PANCAKE_V2_ROUTER = '0xb1bc24c34e88f7d43d5923034e3a14b24daacff9';
17
- const MONAD_WMON = ADDRESSES.MONAD.WMON;
18
- // ✅ XLAYER 链常量(PotatoSwap V2)
19
- const XLAYER_POTATOSWAP_V2_ROUTER = ADDRESSES.XLAYER.PotatoSwapV2Router;
20
- const XLAYER_WOKB = ADDRESSES.XLAYER.WOKB;
21
- // ✅ Base 链常量(Uniswap V3 SwapRouter02)
22
- const BASE_WETH = ADDRESSES.BASE.WETH;
23
- const ROUTER_ABI = V2_ROUTER_QUOTE_ABI;
24
- /**
25
- * 获取 ERC20 代币 → 原生代币的报价
26
- * @param provider - Provider 实例
27
- * @param tokenAddress - ERC20 代币地址
28
- * @param tokenAmount - 代币数量(wei)
29
- * @param chainId - 链 ID(56=BSC, 143=Monad)
30
- * @returns 等值的原生代币数量(wei),失败返回 0n
31
- */
32
- async function getTokenToNativeQuote(provider, tokenAddress, tokenAmount, chainId) {
33
- if (tokenAmount <= 0n)
34
- return 0n;
35
- try {
36
- if (chainId === CHAINS.BSC.chainId) {
37
- // BSC: 使用 PancakeSwap V2 Router
38
- const router = new Contract(BSC_PANCAKE_V2_ROUTER, ROUTER_ABI, provider);
39
- const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, BSC_WBNB]);
40
- return amounts[1];
41
- }
42
- if (chainId === CHAINS.MONAD.chainId) {
43
- // ✅ Monad: 使用 PancakeSwap V2 Router
44
- const router = new Contract(MONAD_PANCAKE_V2_ROUTER, ROUTER_ABI, provider);
45
- const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, MONAD_WMON]);
46
- return amounts[1];
47
- }
48
- if (chainId === CHAINS.XLAYER.chainId) {
49
- // ✅ XLAYER: 使用 PotatoSwap V2 Router(USDT0 → WOKB)
50
- const router = new Contract(XLAYER_POTATOSWAP_V2_ROUTER, ROUTER_ABI, provider);
51
- const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, XLAYER_WOKB]);
52
- return amounts[1];
53
- }
54
- if (chainId === CHAINS.BASE.chainId) {
55
- // ✅ Base: 目前大部分 Flap 交易使用 ETH(原生代币),ERC20 报价暂不支持
56
- // Base 主力 DEX 是 Uniswap V3,V2 Router 流动性有限,暂返回 0
57
- // TODO: 后续可接入 Uniswap V3 QuoterV2 进行精确报价
58
- return 0n;
59
- }
60
- // 其他链暂不支持报价,返回 0
61
- return 0n;
62
- }
63
- catch {
64
- // 报价失败返回 0(可能是流动性不足或路径不存在)
65
- return 0n;
66
- }
67
- }
68
- /**
69
- * 获取 Gas Limit
70
- * 优先使用 config.gasLimit,否则使用默认值 * multiplier
71
- *
72
- * ✅ ethers v6 最佳实践:直接使用 bigint 类型
73
- */
74
- function getGasLimit(config, defaultGas = 800000) {
75
- // 优先使用前端传入的 gasLimit
76
- if (config.gasLimit !== undefined) {
77
- // 如果已经是 bigint,直接返回;否则转换
78
- return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
79
- }
80
- // 使用默认值 * multiplier
81
- const multiplier = config.gasLimitMultiplier ?? 1.0;
82
- const calculatedGas = Math.ceil(defaultGas * multiplier);
83
- // JavaScript 原生 BigInt 转换(ethers v6 兼容)
84
- return BigInt(calculatedGas);
85
- }
86
- /**
87
- * Flap Protocol: 创建代币 + 捆绑购买(仅签名版本 - 不依赖 Merkle)
88
- * ✅ 精简版:只负责签名交易,不提交到 Merkle
89
- */
11
+ import { CHAIN_ID_MAP, PORTAL_ABI, getErrorMessage, getTxType, getGasPriceConfig, shouldExtractProfit, calculateProfit, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, } from './config.js';
12
+ import { MULTICALL3_ADDRESS, getGasLimit, getTokenToNativeQuote } from './core-helpers.js';
90
13
  export async function createTokenWithBundleBuyMerkle(params) {
91
14
  const { chain, privateKeys, buyAmounts, tokenInfo, tokenAddress, config } = params;
92
15
  if (privateKeys.length === 0) {
@@ -151,7 +74,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
151
74
  deflationBps: dist.deflationBps,
152
75
  dividendBps: dist.dividendBps,
153
76
  lpBps: dist.lpBps,
154
- minimumShareBalance: BigInt(dist.minimumShareBalance ?? 10000) * (10n ** 18n),
77
+ minimumShareBalance: BigInt(dist.minimumShareBalance ?? 10000) * 10n ** 18n,
155
78
  vaultFactory,
156
79
  vaultData,
157
80
  });
@@ -180,7 +103,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
180
103
  deflationBps: dist.deflationBps,
181
104
  dividendBps: dist.dividendBps,
182
105
  lpBps: dist.lpBps,
183
- minimumShareBalance: BigInt(dist.minimumShareBalance ?? 10000) * (10n ** 18n),
106
+ minimumShareBalance: BigInt(dist.minimumShareBalance ?? 10000) * 10n ** 18n,
184
107
  });
185
108
  }
186
109
  }
@@ -201,7 +124,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
201
124
  extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
202
125
  extensionData: params.extensionData ?? '0x',
203
126
  dexId: (params.dexId ?? 0) & 0xff,
204
- lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff
127
+ lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff,
205
128
  });
206
129
  }
207
130
  else if (useV3) {
@@ -219,7 +142,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
219
142
  beneficiary: devWallet.address,
220
143
  permitData: '0x',
221
144
  extensionID: params.extensionID,
222
- extensionData: params.extensionData ?? '0x'
145
+ extensionData: params.extensionData ?? '0x',
223
146
  });
224
147
  }
225
148
  else {
@@ -235,13 +158,13 @@ export async function createTokenWithBundleBuyMerkle(params) {
235
158
  quoteToken: params.quoteToken || ZERO_ADDRESS,
236
159
  quoteAmt: 0n,
237
160
  beneficiary: devWallet.address,
238
- permitData: '0x'
161
+ permitData: '0x',
239
162
  });
240
163
  }
241
164
  const [gasPrice, createTxUnsigned, devNonce] = await Promise.all([
242
165
  resolveGasPrice(provider, config),
243
166
  createTxPromise,
244
- nonceManager.getNextNonce(devWallet)
167
+ nonceManager.getNextNonce(devWallet),
245
168
  ]);
246
169
  const createTxRequest = {
247
170
  ...createTxUnsigned,
@@ -250,12 +173,12 @@ export async function createTokenWithBundleBuyMerkle(params) {
250
173
  gasLimit: getGasLimit(config),
251
174
  gasPrice,
252
175
  chainId,
253
- type: getTxType(config)
176
+ type: getTxType(config),
254
177
  };
255
178
  const signedCreateTx = await devWallet.signTransaction(createTxRequest);
256
179
  signedTxs.push(signedCreateTx);
257
180
  const buyers = createWallets(privateKeys.slice(1), provider);
258
- const extractProfit = shouldExtractProfit(config);
181
+ const extractProfit = shouldExtractProfit();
259
182
  const { fundsList, originalAmounts, totalBuyAmount, totalProfit } = analyzeBuyFunds(buyAmounts, config, extractProfit);
260
183
  const maxFundsIndex = findMaxIndex(originalAmounts);
261
184
  const gasLimits = buildGasLimitList(buyers.length, config);
@@ -268,13 +191,13 @@ export async function createTokenWithBundleBuyMerkle(params) {
268
191
  if (!useNativeToken && params.quoteTokenDecimals !== undefined && params.quoteTokenDecimals !== 18) {
269
192
  const decimalsDiff = 18 - params.quoteTokenDecimals;
270
193
  const divisor = BigInt(10 ** decimalsDiff);
271
- adjustedFundsList = fundsList.map(amount => amount / divisor);
194
+ adjustedFundsList = fundsList.map((amount) => amount / divisor);
272
195
  profitTokenAmount = totalProfit / divisor;
273
196
  }
274
197
  // ✅ 优化:并行获取 unsignedBuys 和 buyerNonces
275
198
  const [unsignedBuys, buyerNonces] = await Promise.all([
276
199
  populateBuyTransactionsWithQuote(buyers, portalAddr, tokenAddress, adjustedFundsList, inputToken, useNativeToken),
277
- allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, useNativeToken ? totalProfit : profitTokenAmount, nonceManager)
200
+ allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, useNativeToken ? totalProfit : profitTokenAmount, nonceManager),
278
201
  ]);
279
202
  // ✅ 贿赂交易放在首位(提高 BlockRazor 打包优先级)
280
203
  const bribeAmount = getBribeAmount(config);
@@ -289,7 +212,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
289
212
  gasPrice,
290
213
  gasLimit: GAS_LIMITS.BRIBE,
291
214
  chainId,
292
- type: getTxType(config)
215
+ type: getTxType(config),
293
216
  });
294
217
  bribeTxs.push(bribeTx);
295
218
  // 调整 maxFundsIndex 钱包的 nonce(买入交易 +1)
@@ -304,7 +227,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
304
227
  chainId,
305
228
  config,
306
229
  fundsList: adjustedFundsList, // ✅ 使用调整后的金额
307
- useNativeToken // ✅ 传递是否使用原生代币
230
+ useNativeToken, // ✅ 传递是否使用原生代币
308
231
  });
309
232
  // ✅ 利润多跳转账(强制 2 跳中转)
310
233
  const profitTxs = [];
@@ -325,7 +248,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
325
248
  gasPrice,
326
249
  chainId,
327
250
  txType: getTxType(config),
328
- startNonce: profitNonce
251
+ startNonce: profitNonce,
329
252
  });
330
253
  profitTxs.push(...profitHopResult.signedTransactions);
331
254
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -337,7 +260,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
337
260
  signedTransactions: [...bribeTxs, ...signedTxs, ...signedBuys, ...profitTxs],
338
261
  tokenAddress,
339
262
  profitHopWallets, // ✅ 返回利润多跳钱包
340
- metadata: buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyers.length)
263
+ metadata: buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyers.length),
341
264
  };
342
265
  }
343
266
  /**
@@ -352,9 +275,8 @@ export async function batchBuyWithBundleMerkle(params) {
352
275
  }
353
276
  const { provider, chainId } = createChainContext(chain, config.rpcUrl);
354
277
  const nonceManager = new NonceManager(provider);
355
- const signedTxs = [];
356
278
  const buyers = createWallets(privateKeys, provider);
357
- const extractProfit = shouldExtractProfit(config);
279
+ const extractProfit = shouldExtractProfit();
358
280
  const { fundsList, originalAmounts, totalBuyAmount, totalProfit } = analyzeBuyFunds(buyAmounts, config, extractProfit);
359
281
  const maxFundsIndex = findMaxIndex(originalAmounts);
360
282
  const gasLimits = buildGasLimitList(buyers.length, config);
@@ -372,7 +294,7 @@ export async function batchBuyWithBundleMerkle(params) {
372
294
  // 转为 USDC (6位) = 100000 (0.1 USDC)
373
295
  const decimalsDiff = 18 - quoteTokenDecimals;
374
296
  const divisor = BigInt(10 ** decimalsDiff);
375
- adjustedFundsList = fundsList.map(amount => amount / divisor);
297
+ adjustedFundsList = fundsList.map((amount) => amount / divisor);
376
298
  profitTokenAmount = totalProfit / divisor;
377
299
  }
378
300
  // ✅ ERC20 购买:获取代币利润等值的原生代币(BNB)报价
@@ -389,10 +311,8 @@ export async function batchBuyWithBundleMerkle(params) {
389
311
  populateBuyTransactionsWithQuote(buyers, FLAP_PORTAL_ADDRESSES[chain], tokenAddress, adjustedFundsList, inputToken, useNativeToken),
390
312
  presetNonces && presetNonces.length === buyers.length
391
313
  ? adjustNoncesForProfit(presetNonces) // ✅ 调整 nonces 避免冲突
392
- : allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, nativeProfitAmount, nonceManager)
314
+ : allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, nativeProfitAmount, nonceManager),
393
315
  ]);
394
- if (presetNonces) {
395
- }
396
316
  // ✅ 贿赂交易放在首位(提高 BlockRazor 打包优先级)
397
317
  const bribeAmount = getBribeAmount(config);
398
318
  const bribeTxs = [];
@@ -405,7 +325,7 @@ export async function batchBuyWithBundleMerkle(params) {
405
325
  gasPrice,
406
326
  gasLimit: GAS_LIMITS.BRIBE,
407
327
  chainId,
408
- type: getTxType(config)
328
+ type: getTxType(config),
409
329
  });
410
330
  bribeTxs.push(bribeTx);
411
331
  // 调整 maxFundsIndex 钱包的 nonce(买入交易 +1)
@@ -420,20 +340,18 @@ export async function batchBuyWithBundleMerkle(params) {
420
340
  chainId,
421
341
  config,
422
342
  fundsList: adjustedFundsList, // ✅ 使用调整后的金额
423
- useNativeToken // ✅ USDT 购买时 value=0,BNB 购买时 value=金额
343
+ useNativeToken, // ✅ USDT 购买时 value=0,BNB 购买时 value=金额
424
344
  });
425
345
  // ✅ 利润多跳转账
426
346
  const profitTxs = [];
427
347
  let profitHopWallets;
428
348
  // ✅ 检查是否使用分布式利润模式
429
- const profitMode = config.profitMode || 'single';
430
- console.log('🔧 [SDK batchBuyWithBundleMerkle] config.profitMode:', config.profitMode, '-> resolved:', profitMode, 'wallets:', buyers.length);
349
+ const profitMode = config.profitMode ?? 'single';
431
350
  if (extractProfit && nativeProfitAmount > 0n) {
432
351
  if (profitMode === 'distributed') {
433
352
  // ✅ 分布式模式:每个钱包独立扣除自己的利润,每个都有独立的多跳
434
353
  // 最多支持 12 个钱包(12 交易 + 36 多跳 + 1 贿赂 = 49 笔)
435
354
  const MAX_DISTRIBUTED_WALLETS = 12;
436
- console.log('🔧 [SDK] 使用分布式利润模式,钱包数:', buyers.length);
437
355
  if (buyers.length > MAX_DISTRIBUTED_WALLETS) {
438
356
  throw new Error(`分布式利润模式最多支持 ${MAX_DISTRIBUTED_WALLETS} 个钱包,当前 ${buyers.length} 个`);
439
357
  }
@@ -443,9 +361,7 @@ export async function batchBuyWithBundleMerkle(params) {
443
361
  for (let i = 0; i < buyers.length; i++) {
444
362
  const walletOriginalAmount = originalAmounts[i];
445
363
  // 按比例计算该钱包应承担的利润
446
- const walletProfit = totalBuyAmount > 0n
447
- ? (nativeProfitAmount * walletOriginalAmount) / totalBuyAmount
448
- : 0n;
364
+ const walletProfit = totalBuyAmount > 0n ? (nativeProfitAmount * walletOriginalAmount) / totalBuyAmount : 0n;
449
365
  perWalletProfits.push(walletProfit);
450
366
  }
451
367
  // 为每个钱包生成独立的利润多跳交易
@@ -462,7 +378,7 @@ export async function batchBuyWithBundleMerkle(params) {
462
378
  gasPrice,
463
379
  chainId,
464
380
  txType: getTxType(config),
465
- startNonce: profitNonce
381
+ startNonce: profitNonce,
466
382
  });
467
383
  profitTxs.push(...profitHopResult.signedTransactions);
468
384
  if (profitHopResult.hopWallets) {
@@ -484,7 +400,7 @@ export async function batchBuyWithBundleMerkle(params) {
484
400
  gasPrice,
485
401
  chainId,
486
402
  txType: getTxType(config),
487
- startNonce: profitNonce
403
+ startNonce: profitNonce,
488
404
  });
489
405
  profitTxs.push(...profitHopResult.signedTransactions);
490
406
  profitHopWallets = profitHopResult.hopWallets;
@@ -499,7 +415,7 @@ export async function batchBuyWithBundleMerkle(params) {
499
415
  metadata: {
500
416
  ...buildProfitMetadata(extractProfit, totalBuyAmount, nativeProfitAmount, buyers.length),
501
417
  profitMode, // ✅ 返回使用的利润模式
502
- }
418
+ },
503
419
  };
504
420
  }
505
421
  /**
@@ -514,23 +430,22 @@ export async function batchSellWithBundleMerkle(params) {
514
430
  }
515
431
  const { provider, chainId } = createChainContext(chain, config.rpcUrl);
516
432
  const nonceManager = new NonceManager(provider);
517
- const signedTxs = [];
518
433
  const wallets = createWallets(privateKeys, provider);
519
- const amountsWei = sellAmounts.map(a => ethers.parseUnits(a, 18));
434
+ const amountsWei = sellAmounts.map((a) => ethers.parseUnits(a, 18));
520
435
  const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
521
436
  const readOnlyPortal = new ethers.Contract(portalAddr, PORTAL_ABI, provider);
522
437
  const gasLimits = buildGasLimitList(wallets.length, config);
523
- const portals = wallets.map(w => new ethers.Contract(portalAddr, PORTAL_ABI, w));
438
+ const portals = wallets.map((w) => new ethers.Contract(portalAddr, PORTAL_ABI, w));
524
439
  // ✅ 确定 outputToken:如果传入了 quoteToken 且非零地址,则使用它;否则使用零地址(原生代币)
525
440
  const outputToken = quoteToken && quoteToken !== ZERO_ADDRESS ? quoteToken : ZERO_ADDRESS;
526
441
  const useNativeOutput = outputToken === ZERO_ADDRESS;
527
442
  // ✅ 优化:如果前端传入了 nonces,直接使用(跳过 RPC 调用)
528
443
  const presetNonces = config.nonces;
529
- const extractProfit = shouldExtractProfit(config);
444
+ const extractProfit = shouldExtractProfit();
530
445
  // ✅ 并行执行 gasPrice 和 quoteSellOutputs(Multicall3)
531
446
  const [gasPrice, quotedOutputs] = await Promise.all([
532
447
  resolveGasPrice(provider, config),
533
- quoteSellOutputsWithQuote(readOnlyPortal, tokenAddress, amountsWei, outputToken)
448
+ quoteSellOutputsWithQuote(readOnlyPortal, tokenAddress, amountsWei, outputToken),
534
449
  ]);
535
450
  // ✅ 计算利润和 maxRevenueIndex(用于 nonce 分配)
536
451
  let totalTokenProfit = 0n;
@@ -540,7 +455,7 @@ export async function batchSellWithBundleMerkle(params) {
540
455
  for (let i = 0; i < wallets.length; i++) {
541
456
  const quoted = quotedOutputs[i];
542
457
  if (quoted > 0n) {
543
- const { profit } = calculateProfit(quoted, config);
458
+ const { profit } = calculateProfit(quoted);
544
459
  totalTokenProfit += profit;
545
460
  if (quoted > maxRevenue) {
546
461
  maxRevenue = quoted;
@@ -572,9 +487,7 @@ export async function batchSellWithBundleMerkle(params) {
572
487
  const maxRevenueNonces = await nonceManager.getNextNonceBatch(wallets[maxRevenueIndex], maxRevenueNonceCount);
573
488
  // 其他钱包各需要 1 个 nonce
574
489
  const otherWallets = wallets.filter((_, i) => i !== maxRevenueIndex);
575
- const otherNonces = otherWallets.length > 0
576
- ? await nonceManager.getNextNoncesForWallets(otherWallets)
577
- : [];
490
+ const otherNonces = otherWallets.length > 0 ? await nonceManager.getNextNoncesForWallets(otherWallets) : [];
578
491
  // 组装最终的 nonces 数组(保持原顺序)
579
492
  nonces = [];
580
493
  let otherIdx = 0;
@@ -605,7 +518,7 @@ export async function batchSellWithBundleMerkle(params) {
605
518
  outputToken, // ✅ 使用动态 outputToken
606
519
  inputAmount: amountsWei[i],
607
520
  minOutputAmount: minOuts[i],
608
- permitData: '0x'
521
+ permitData: '0x',
609
522
  })));
610
523
  // ✅ 贿赂交易放在首位
611
524
  const bribeTxs = [];
@@ -617,7 +530,7 @@ export async function batchSellWithBundleMerkle(params) {
617
530
  gasPrice,
618
531
  gasLimit: GAS_LIMITS.BRIBE,
619
532
  chainId,
620
- type: getTxType(config)
533
+ type: getTxType(config),
621
534
  });
622
535
  bribeTxs.push(bribeTx);
623
536
  }
@@ -631,14 +544,13 @@ export async function batchSellWithBundleMerkle(params) {
631
544
  gasPrice,
632
545
  chainId,
633
546
  type: getTxType(config),
634
- value: 0n // ✅ 卖出交易不发送原生代币
547
+ value: 0n, // ✅ 卖出交易不发送原生代币
635
548
  })));
636
549
  // ✅ 利润多跳转账
637
550
  const profitTxs = [];
638
551
  let profitHopWallets;
639
552
  // ✅ 检查是否使用分布式利润模式
640
- const profitMode = config.profitMode || 'single';
641
- console.log('🔧 [SDK batchSellWithBundleMerkle] config.profitMode:', config.profitMode, '-> resolved:', profitMode, 'wallets:', wallets.length);
553
+ const profitMode = config.profitMode ?? 'single';
642
554
  if (needProfitTx) {
643
555
  // ERC20 输出时:获取代币利润等值的原生代币(BNB)报价
644
556
  let totalNativeProfitAmount = totalTokenProfit;
@@ -672,7 +584,7 @@ export async function batchSellWithBundleMerkle(params) {
672
584
  gasPrice,
673
585
  chainId,
674
586
  txType: getTxType(config),
675
- startNonce: walletProfitNonce
587
+ startNonce: walletProfitNonce,
676
588
  });
677
589
  profitTxs.push(...profitHopResult.signedTransactions);
678
590
  if (profitHopResult.hopWallets) {
@@ -694,7 +606,7 @@ export async function batchSellWithBundleMerkle(params) {
694
606
  gasPrice,
695
607
  chainId,
696
608
  txType: getTxType(config),
697
- startNonce: profitNonce
609
+ startNonce: profitNonce,
698
610
  });
699
611
  profitTxs.push(...profitHopResult.signedTransactions);
700
612
  profitHopWallets = profitHopResult.hopWallets;
@@ -710,7 +622,7 @@ export async function batchSellWithBundleMerkle(params) {
710
622
  metadata: {
711
623
  profitMode, // ✅ 返回使用的利润模式
712
624
  totalProfit: totalTokenProfit.toString(),
713
- }
625
+ },
714
626
  };
715
627
  }
716
628
  // ✅ Provider 缓存(复用连接,减少初始化开销)
@@ -731,29 +643,27 @@ function createChainContext(chain, rpcUrl) {
731
643
  return { chainId, provider };
732
644
  }
733
645
  async function resolveGasPrice(provider, config) {
734
- // 优化:如果前端传入了 gasPrice,直接使用(跳过 RPC 调用)
735
- if (config.gasPrice !== undefined) {
736
- const gasPrice = config.gasPrice;
737
- return gasPrice;
646
+ if ('gasPrice' in config && config.gasPrice !== undefined) {
647
+ return config.gasPrice;
738
648
  }
739
649
  return await getOptimizedGasPrice(provider, getGasPriceConfig(config));
740
650
  }
741
651
  function createWallets(privateKeys, provider) {
742
- return privateKeys.map(key => new Wallet(key, provider));
652
+ return privateKeys.map((key) => new Wallet(key, provider));
743
653
  }
744
654
  function analyzeBuyFunds(buyAmounts, config, extractProfit) {
745
655
  const result = {
746
656
  fundsList: [],
747
657
  originalAmounts: [],
748
658
  totalBuyAmount: 0n,
749
- totalProfit: 0n
659
+ totalProfit: 0n,
750
660
  };
751
- buyAmounts.forEach(amount => {
661
+ buyAmounts.forEach((amount) => {
752
662
  const originalAmount = ethers.parseEther(amount);
753
663
  result.originalAmounts.push(originalAmount);
754
664
  result.totalBuyAmount += originalAmount;
755
665
  if (extractProfit) {
756
- const { remaining, profit } = calculateProfit(originalAmount, config);
666
+ const { remaining, profit } = calculateProfit(originalAmount);
757
667
  result.totalProfit += profit;
758
668
  result.fundsList.push(remaining);
759
669
  }
@@ -782,13 +692,13 @@ function findMaxIndex(values) {
782
692
  * 当 inputToken 为非零地址(如 USDC)时,value 为 0
783
693
  */
784
694
  async function populateBuyTransactionsWithQuote(buyers, portalAddr, tokenAddress, fundsList, inputToken, useNativeToken) {
785
- const portals = buyers.map(wallet => new ethers.Contract(portalAddr, PORTAL_ABI, wallet));
695
+ const portals = buyers.map((wallet) => new ethers.Contract(portalAddr, PORTAL_ABI, wallet));
786
696
  return await Promise.all(portals.map((portal, i) => portal.swapExactInput.populateTransaction({
787
697
  inputToken,
788
698
  outputToken: tokenAddress,
789
699
  inputAmount: fundsList[i],
790
700
  minOutputAmount: 0n,
791
- permitData: '0x'
701
+ permitData: '0x',
792
702
  },
793
703
  // ✅ 如果使用原生代币,value 为购买金额;否则为 0
794
704
  useNativeToken ? { value: fundsList[i] } : {})));
@@ -825,9 +735,7 @@ async function allocateBuyerNonces(buyers, extractProfit, maxIndex, totalProfit,
825
735
  const maxIndexNonces = await nonceManager.getNextNonceBatch(buyers[maxIndex], 2);
826
736
  // 其他钱包各需要 1 个 nonce
827
737
  const otherBuyers = buyers.filter((_, i) => i !== maxIndex);
828
- const otherNonces = otherBuyers.length > 0
829
- ? await nonceManager.getNextNoncesForWallets(otherBuyers)
830
- : [];
738
+ const otherNonces = otherBuyers.length > 0 ? await nonceManager.getNextNoncesForWallets(otherBuyers) : [];
831
739
  // 组装最终的 nonces 数组(保持原顺序)
832
740
  const nonces = [];
833
741
  let otherIdx = 0;
@@ -841,7 +749,7 @@ async function allocateBuyerNonces(buyers, extractProfit, maxIndex, totalProfit,
841
749
  }
842
750
  return nonces;
843
751
  }
844
- async function signBuyTransactions({ unsignedBuys, buyers, nonces, gasLimits, gasPrice, chainId, config, fundsList, useNativeToken = true // ✅ 默认使用原生代币
752
+ async function signBuyTransactions({ unsignedBuys, buyers, nonces, gasLimits, gasPrice, chainId, config, fundsList, useNativeToken = true, // ✅ 默认使用原生代币
845
753
  }) {
846
754
  return await Promise.all(unsignedBuys.map((unsigned, i) => buyers[i].signTransaction({
847
755
  ...unsigned,
@@ -851,7 +759,7 @@ async function signBuyTransactions({ unsignedBuys, buyers, nonces, gasLimits, ga
851
759
  gasPrice,
852
760
  chainId,
853
761
  type: getTxType(config),
854
- value: useNativeToken ? fundsList[i] : 0n // ✅ 非原生代币时 value 为 0
762
+ value: useNativeToken ? fundsList[i] : 0n, // ✅ 非原生代币时 value 为 0
855
763
  })));
856
764
  }
857
765
  function buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyerCount) {
@@ -862,7 +770,7 @@ function buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyerCo
862
770
  totalBuyAmount: ethers.formatEther(totalBuyAmount),
863
771
  profitAmount: ethers.formatEther(totalProfit),
864
772
  profitRecipient: getProfitRecipient(),
865
- buyerCount
773
+ buyerCount,
866
774
  };
867
775
  }
868
776
  /**
@@ -878,7 +786,7 @@ async function quoteSellOutputsWithQuote(portal, tokenAddress, amountsWei, outpu
878
786
  const result = await portal.quoteExactInput.staticCall({
879
787
  inputToken: tokenAddress,
880
788
  outputToken,
881
- inputAmount: amountsWei[0]
789
+ inputAmount: amountsWei[0],
882
790
  });
883
791
  return [result];
884
792
  }
@@ -891,14 +799,16 @@ async function quoteSellOutputsWithQuote(portal, tokenAddress, amountsWei, outpu
891
799
  const portalIface = new Interface(PORTAL_ABI);
892
800
  const multicall = new Contract(MULTICALL3_ADDRESS, MULTICALL3_ABI, provider);
893
801
  // 构建批量调用
894
- const calls = amountsWei.map(amount => ({
802
+ const calls = amountsWei.map((amount) => ({
895
803
  target: portalAddress,
896
804
  allowFailure: true, // 允许单个失败
897
- callData: portalIface.encodeFunctionData('quoteExactInput', [{
805
+ callData: portalIface.encodeFunctionData('quoteExactInput', [
806
+ {
898
807
  inputToken: tokenAddress,
899
808
  outputToken,
900
- inputAmount: amount
901
- }])
809
+ inputAmount: amount,
810
+ },
811
+ ]),
902
812
  }));
903
813
  try {
904
814
  const results = await multicall.aggregate3.staticCall(calls);
@@ -922,7 +832,7 @@ async function quoteSellOutputsWithQuote(portal, tokenAddress, amountsWei, outpu
922
832
  return await portal.quoteExactInput.staticCall({
923
833
  inputToken: tokenAddress,
924
834
  outputToken,
925
- inputAmount: amount
835
+ inputAmount: amount,
926
836
  });
927
837
  }
928
838
  catch {