four-flap-meme-sdk 2.2.2 → 2.2.3

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 (472) hide show
  1. package/README.en.md +41 -6
  2. package/README.md +31 -0
  3. package/README.zh-CN.md +41 -6
  4. package/dist/__tests__/subpath-exports.test.d.ts +1 -0
  5. package/dist/__tests__/subpath-exports.test.js +64 -0
  6. package/dist/abis/common.d.ts +85 -0
  7. package/dist/abis/common.js +264 -0
  8. package/dist/abis/contracts/TaxToken.json +969 -0
  9. package/dist/abis/contracts/TokenManager2.json +136 -0
  10. package/dist/abis/contracts/index.d.ts +5 -0
  11. package/dist/abis/contracts/index.js +5 -0
  12. package/dist/abis/flap/index.d.ts +3 -0
  13. package/dist/abis/flap/index.js +3 -0
  14. package/dist/abis/flap/portal-events.d.ts +6 -0
  15. package/dist/abis/flap/portal-events.js +17 -0
  16. package/dist/abis/flap/portal.d.ts +6 -0
  17. package/dist/abis/flap/portal.js +37 -0
  18. package/dist/abis/flap/vault.d.ts +171 -0
  19. package/dist/abis/flap/vault.js +91 -0
  20. package/dist/abis/index.d.ts +8 -0
  21. package/dist/abis/index.js +11 -0
  22. package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
  23. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  24. package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
  25. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  26. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  27. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  28. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  29. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  30. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  31. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  32. package/dist/bundle-core/config-helpers.d.ts +36 -0
  33. package/dist/bundle-core/config-helpers.js +57 -0
  34. package/dist/bundle-core/errors.d.ts +50 -0
  35. package/dist/bundle-core/errors.js +35 -0
  36. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  37. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  38. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  39. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  40. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  41. package/dist/bundle-core/four-meme/core.js +515 -0
  42. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  43. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  44. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  45. package/dist/bundle-core/four-meme/private.js +465 -0
  46. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  47. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  48. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  49. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  50. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  51. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  52. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  53. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  54. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  55. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  56. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  57. package/dist/bundle-core/four-meme/swap.js +505 -0
  58. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  59. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  60. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  61. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  62. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  63. package/dist/bundle-core/four-meme/types/index.js +1 -0
  64. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  65. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  66. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  67. package/dist/bundle-core/four-meme/types.js +1 -0
  68. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  69. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  70. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  71. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  72. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  73. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  74. package/dist/bundle-core/index.d.ts +8 -0
  75. package/dist/bundle-core/index.js +8 -0
  76. package/dist/bundle-core/internal.d.ts +21 -0
  77. package/dist/bundle-core/internal.js +182 -0
  78. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  79. package/dist/bundle-core/sign-context-helpers.js +67 -0
  80. package/dist/bundle-core/submit.d.ts +293 -0
  81. package/dist/bundle-core/submit.js +727 -0
  82. package/dist/bundle-core/types/index.d.ts +8 -0
  83. package/dist/bundle-core/types/index.js +1 -0
  84. package/dist/bundle-core/types.d.ts +1 -0
  85. package/dist/bundle-core/types.js +1 -0
  86. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  87. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
  88. package/dist/chains/bsc/four/config.d.ts +5 -67
  89. package/dist/chains/bsc/four/config.js +2 -114
  90. package/dist/chains/bsc/four/core.d.ts +1 -4
  91. package/dist/chains/bsc/four/core.js +1 -592
  92. package/dist/chains/bsc/four/index.d.ts +6 -6
  93. package/dist/chains/bsc/four/index.js +6 -6
  94. package/dist/chains/bsc/four/internal.d.ts +2 -46
  95. package/dist/chains/bsc/four/internal.js +2 -239
  96. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  97. package/dist/chains/bsc/four/pancake-proxy.js +1 -687
  98. package/dist/chains/bsc/four/private.d.ts +1 -27
  99. package/dist/chains/bsc/four/private.js +1 -477
  100. package/dist/chains/bsc/four/submit.d.ts +2 -315
  101. package/dist/chains/bsc/four/submit.js +2 -752
  102. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  103. package/dist/chains/bsc/four/swap-buy-first.js +2 -507
  104. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  105. package/dist/chains/bsc/four/swap-internal.js +1 -18
  106. package/dist/chains/bsc/four/swap.d.ts +2 -144
  107. package/dist/chains/bsc/four/swap.js +2 -766
  108. package/dist/chains/bsc/four/types.d.ts +1 -476
  109. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  110. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  111. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  112. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  113. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  114. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  115. package/dist/chains/bsc/four/utils.d.ts +5 -18
  116. package/dist/chains/bsc/four/utils.js +5 -1552
  117. package/dist/chains/bsc/iro.d.ts +5 -0
  118. package/dist/chains/bsc/iro.js +4 -0
  119. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  120. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  121. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  122. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -212
  123. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  124. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  125. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  126. package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
  127. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  128. package/dist/chains/bsc/pancake/index.js +1 -3
  129. package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
  130. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  131. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  132. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  133. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  134. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  135. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  136. package/dist/chains/eni/batch-router/transfer.js +55 -25
  137. package/dist/chains/eni/batch-router/utils.js +32 -6
  138. package/dist/chains/eni/bundler/sign.js +5 -6
  139. package/dist/chains/eni/bundler/submit.js +1 -4
  140. package/dist/chains/eni/constants.js +1 -1
  141. package/dist/chains/eni/flat-aliases.d.ts +10 -0
  142. package/dist/chains/eni/flat-aliases.js +8 -0
  143. package/dist/chains/eni/index.d.ts +2 -1
  144. package/dist/chains/eni/index.js +1 -0
  145. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  146. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  147. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  148. package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
  149. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
  150. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  151. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  152. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  153. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  154. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
  155. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  156. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  157. package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
  158. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  159. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  160. package/dist/chains/eni/platforms/iro/index.js +4 -4
  161. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  162. package/dist/chains/eni/platforms/iro/token.js +107 -31
  163. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  164. package/dist/chains/eni/submit.d.ts +43 -0
  165. package/dist/chains/eni/submit.js +286 -0
  166. package/dist/chains/index.d.ts +13 -0
  167. package/dist/chains/index.js +13 -0
  168. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  169. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
  170. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  171. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  172. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -59
  173. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  174. package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
  175. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  176. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
  177. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  178. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  179. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
  180. package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
  181. package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
  182. package/dist/chains/xlayer/eip7702/index.js +28 -81
  183. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  184. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  185. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  186. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
  187. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  188. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  189. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  190. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  191. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  192. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  193. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  194. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  195. package/dist/chains/xlayer/eip7702/volume.js +89 -164
  196. package/dist/chains/xlayer/eoa/constants.js +1 -1
  197. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  198. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  199. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  200. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  201. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
  202. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  203. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
  204. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  205. package/dist/chains/xlayer/eoa/index.js +8 -23
  206. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  207. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  208. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  209. package/dist/chains/xlayer/eoa/types.js +1 -3
  210. package/dist/chains/xlayer/index.d.ts +3 -2
  211. package/dist/chains/xlayer/index.js +4 -7
  212. package/dist/contracts/helper3.d.ts +20 -5
  213. package/dist/contracts/helper3.js +56 -20
  214. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  215. package/dist/contracts/tm-bundle-helpers.js +72 -0
  216. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  217. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
  218. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
  219. package/dist/contracts/tm-bundle-merkle/config.js +2 -114
  220. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  221. package/dist/contracts/tm-bundle-merkle/core.js +1 -591
  222. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  223. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  224. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
  225. package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
  226. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  227. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
  228. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  229. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  230. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  231. package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
  232. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  233. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
  234. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  235. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  236. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  237. package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
  238. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  239. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  240. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  241. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  242. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  243. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  244. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  245. package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
  246. package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
  247. package/dist/contracts/tm-bundle.d.ts +3 -51
  248. package/dist/contracts/tm-bundle.js +108 -177
  249. package/dist/contracts/tm.d.ts +3 -2
  250. package/dist/contracts/tm.js +37 -32
  251. package/dist/contracts/tm1.js +9 -4
  252. package/dist/contracts/tm2.js +9 -4
  253. package/dist/dex/direct-router-helpers.d.ts +264 -0
  254. package/dist/dex/direct-router-helpers.js +539 -0
  255. package/dist/dex/direct-router.d.ts +3 -125
  256. package/dist/dex/direct-router.js +237 -666
  257. package/dist/dex/types.d.ts +81 -0
  258. package/dist/dex/types.js +1 -0
  259. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  260. package/dist/exports/root-bundle-and-tooling.js +30 -0
  261. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  262. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  263. package/dist/exports/root-foundations.d.ts +35 -0
  264. package/dist/exports/root-foundations.js +70 -0
  265. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  266. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  267. package/dist/flap/index.d.ts +10 -0
  268. package/dist/flap/index.js +8 -0
  269. package/dist/flows/create.d.ts +2 -1
  270. package/dist/flows/create.js +6 -6
  271. package/dist/flows/index.d.ts +1 -0
  272. package/dist/flows/index.js +1 -0
  273. package/dist/index.d.ts +20 -85
  274. package/dist/index.js +20 -215
  275. package/dist/merkle/index.d.ts +12 -0
  276. package/dist/merkle/index.js +11 -0
  277. package/dist/shared/abis/common.d.ts +2 -83
  278. package/dist/shared/abis/common.js +2 -252
  279. package/dist/shared/abis/index.d.ts +5 -6
  280. package/dist/shared/abis/index.js +5 -7
  281. package/dist/shared/clients/blockrazor.js +39 -25
  282. package/dist/shared/clients/club48.d.ts +2 -2
  283. package/dist/shared/clients/club48.js +34 -29
  284. package/dist/shared/clients/emitservice.js +2 -0
  285. package/dist/shared/clients/four.d.ts +21 -6
  286. package/dist/shared/clients/four.js +29 -24
  287. package/dist/shared/clients/index.d.ts +8 -0
  288. package/dist/shared/clients/index.js +8 -0
  289. package/dist/shared/clients/merkle.js +27 -34
  290. package/dist/shared/constants/addresses.d.ts +1 -1
  291. package/dist/shared/constants/addresses.js +11 -2
  292. package/dist/shared/constants/chains.d.ts +1 -1
  293. package/dist/shared/constants/chains.js +1 -1
  294. package/dist/shared/constants/gas.d.ts +1 -1
  295. package/dist/shared/constants/gas.js +2 -6
  296. package/dist/shared/constants/index.d.ts +3 -0
  297. package/dist/shared/constants/index.js +1 -0
  298. package/dist/shared/constants/quote.d.ts +30 -0
  299. package/dist/shared/constants/quote.js +37 -0
  300. package/dist/shared/flap/abi.js +1 -1
  301. package/dist/shared/flap/constants.d.ts +1 -2
  302. package/dist/shared/flap/constants.js +2 -3
  303. package/dist/shared/flap/curve.js +3 -0
  304. package/dist/shared/flap/errors.d.ts +1 -4
  305. package/dist/shared/flap/errors.js +20 -1
  306. package/dist/shared/flap/index.d.ts +5 -4
  307. package/dist/shared/flap/index.js +5 -4
  308. package/dist/shared/flap/meta.d.ts +22 -18
  309. package/dist/shared/flap/meta.js +12 -17
  310. package/dist/shared/flap/permit.js +5 -2
  311. package/dist/shared/flap/pinata.d.ts +22 -6
  312. package/dist/shared/flap/pinata.js +21 -26
  313. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  314. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  315. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  316. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  317. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  318. package/dist/shared/flap/portal-bundle-merkle/core.js +86 -278
  319. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +7 -2
  320. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +101 -206
  321. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  322. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  323. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  324. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  325. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  326. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  327. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  328. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  329. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  330. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  331. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  332. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  333. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  334. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +83 -9
  335. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  336. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  337. package/dist/shared/flap/portal-bundle.js +55 -56
  338. package/dist/shared/flap/portal-create-token.d.ts +77 -0
  339. package/dist/shared/flap/portal-create-token.js +214 -0
  340. package/dist/shared/flap/portal.d.ts +14 -3
  341. package/dist/shared/flap/portal.js +50 -25
  342. package/dist/shared/flap/vanity.d.ts +1 -5
  343. package/dist/shared/flap/vanity.js +6 -17
  344. package/dist/shared/flap/vault.d.ts +17 -124
  345. package/dist/shared/flap/vault.js +67 -148
  346. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  347. package/dist/shared/foundation/dex/v3-path.js +35 -0
  348. package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
  349. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  350. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  351. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  352. package/dist/shared/foundation/index.d.ts +13 -0
  353. package/dist/shared/foundation/index.js +12 -0
  354. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  355. package/dist/shared/foundation/nonce/nonce-manager.js +183 -0
  356. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  357. package/dist/shared/foundation/normalize-unknown.js +29 -0
  358. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  359. package/dist/shared/foundation/sdk-logger.js +12 -0
  360. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  361. package/dist/shared/foundation/tx/build-request.js +25 -0
  362. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  363. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  364. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  365. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  366. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  367. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  368. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  369. package/dist/shared/foundation/types/erc20.js +1 -0
  370. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  371. package/dist/shared/foundation/types/holders-maker.js +1 -0
  372. package/dist/shared/foundation/types/index.d.ts +7 -0
  373. package/dist/shared/foundation/types/index.js +1 -0
  374. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  375. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  376. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  377. package/dist/shared/foundation/types/multicall.js +1 -0
  378. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  379. package/dist/shared/foundation/types/private-sale.js +1 -0
  380. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  381. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  382. package/dist/shared/four/tax-token.d.ts +1 -1
  383. package/dist/shared/four/tax-token.js +27 -7
  384. package/dist/shared/index.d.ts +6 -0
  385. package/dist/shared/index.js +4 -0
  386. package/dist/types/errors.d.ts +27 -0
  387. package/dist/types/errors.js +34 -0
  388. package/dist/utils/airdrop-sweep.d.ts +4 -76
  389. package/dist/utils/airdrop-sweep.js +42 -55
  390. package/dist/utils/bundle-helpers.d.ts +9 -243
  391. package/dist/utils/bundle-helpers.js +10 -584
  392. package/dist/utils/constants.d.ts +5 -61
  393. package/dist/utils/constants.js +5 -80
  394. package/dist/utils/contract-factory.d.ts +2 -4
  395. package/dist/utils/contract-factory.js +25 -18
  396. package/dist/utils/erc20.d.ts +7 -89
  397. package/dist/utils/erc20.js +94 -125
  398. package/dist/utils/errors.d.ts +12 -1
  399. package/dist/utils/errors.js +60 -1
  400. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  401. package/dist/utils/holders-maker/addresses.js +15 -0
  402. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  403. package/dist/utils/holders-maker/buy-tx.js +278 -0
  404. package/dist/utils/holders-maker/constants.d.ts +6 -0
  405. package/dist/utils/holders-maker/constants.js +7 -0
  406. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  407. package/dist/utils/holders-maker/disperse.js +90 -0
  408. package/dist/utils/holders-maker/routing.d.ts +4 -0
  409. package/dist/utils/holders-maker/routing.js +45 -0
  410. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  411. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  412. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  413. package/dist/utils/holders-maker-helpers.js +9 -0
  414. package/dist/utils/holders-maker.d.ts +2 -138
  415. package/dist/utils/holders-maker.js +26 -661
  416. package/dist/utils/hop-chains.d.ts +35 -0
  417. package/dist/utils/hop-chains.js +215 -0
  418. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  419. package/dist/utils/lp-inspect-helpers.js +109 -0
  420. package/dist/utils/lp-inspect.d.ts +2 -112
  421. package/dist/utils/lp-inspect.js +73 -223
  422. package/dist/utils/mpcExclusive.d.ts +2 -5
  423. package/dist/utils/mpcExclusive.js +4 -3
  424. package/dist/utils/private-sale.d.ts +2 -58
  425. package/dist/utils/private-sale.js +4 -15
  426. package/dist/utils/provider-factory.d.ts +4 -0
  427. package/dist/utils/provider-factory.js +10 -0
  428. package/dist/utils/quote-helpers.d.ts +4 -45
  429. package/dist/utils/quote-helpers.js +17 -74
  430. package/dist/utils/stealth-transfer.d.ts +2 -28
  431. package/dist/utils/stealth-transfer.js +31 -15
  432. package/dist/utils/swap-helpers.d.ts +2 -15
  433. package/dist/utils/swap-helpers.js +6 -11
  434. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  435. package/dist/utils/types/airdrop-sweep.js +1 -0
  436. package/dist/utils/types/contract-factory.d.ts +1 -0
  437. package/dist/utils/types/contract-factory.js +1 -0
  438. package/dist/utils/types/erc20.d.ts +1 -0
  439. package/dist/utils/types/erc20.js +1 -0
  440. package/dist/utils/types/errors.d.ts +1 -0
  441. package/dist/utils/types/errors.js +1 -0
  442. package/dist/utils/types/holders-maker.d.ts +1 -0
  443. package/dist/utils/types/holders-maker.js +1 -0
  444. package/dist/utils/types/hop-chains.d.ts +8 -0
  445. package/dist/utils/types/hop-chains.js +1 -0
  446. package/dist/utils/types/index.d.ts +13 -0
  447. package/dist/utils/types/index.js +1 -0
  448. package/dist/utils/types/lp-inspect.d.ts +1 -0
  449. package/dist/utils/types/lp-inspect.js +1 -0
  450. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  451. package/dist/utils/types/mpc-exclusive.js +1 -0
  452. package/dist/utils/types/private-sale.d.ts +1 -0
  453. package/dist/utils/types/private-sale.js +1 -0
  454. package/dist/utils/types/quote-helpers.d.ts +1 -0
  455. package/dist/utils/types/quote-helpers.js +1 -0
  456. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  457. package/dist/utils/types/stealth-transfer.js +1 -0
  458. package/dist/utils/types/wallet.d.ts +25 -0
  459. package/dist/utils/types/wallet.js +1 -0
  460. package/dist/utils/wallet.d.ts +2 -25
  461. package/dist/utils/wallet.js +13 -10
  462. package/dist/vanity/index.d.ts +5 -0
  463. package/dist/vanity/index.js +5 -0
  464. package/package.json +160 -4
  465. package/src/abis/contracts/TaxToken.json +969 -0
  466. package/src/abis/contracts/TokenManager.json +836 -0
  467. package/src/abis/contracts/TokenManager2.json +136 -0
  468. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  469. package/dist/shared/abis/TaxToken.json +0 -105
  470. package/dist/shared/abis/TokenManager2.json +0 -60
  471. /package/dist/{shared/abis → abis/contracts}/TokenManager.json +0 -0
  472. /package/dist/{shared/abis → abis/contracts}/TokenManagerHelper3.json +0 -0
@@ -1,92 +1,15 @@
1
- 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';
6
- import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from '../constants.js';
7
- import { buildNewTokenV6WithVaultParams, 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
1
  /**
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
2
+ * core - 主函数
89
3
  */
4
+ import { ethers, Wallet, Contract, Interface } from 'ethers';
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';
9
+ import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from '../constants.js';
10
+ import { normalizeTaxLaunchConfig, populateCreateTokenTransaction, } from '../portal-create-token.js';
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) {
@@ -102,136 +25,34 @@ export async function createTokenWithBundleBuyMerkle(params) {
102
25
  const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
103
26
  const originalPortalAddr = FLAP_ORIGINAL_PORTAL_ADDRESSES[chain];
104
27
  const portal = new ethers.Contract(originalPortalAddr, PORTAL_ABI, devWallet);
105
- // 判断使用哪个版本的 newToken
106
- // V5: 提供了 taxV2Config taxRate > 0(Tax Token V2 高级税收分配)
107
- // V4: 提供了 dexId lpFeeProfile(支持 DEX 选择和 LP 费率配置)
108
- // V3: 提供了 extensionID(支持扩展数据)
109
- // V2: 默认
110
- const useV5 = params.taxV2Config !== undefined && (params.taxRate ?? 0) > 0;
111
- const useV4 = !useV5 && (params.dexId !== undefined || params.lpFeeProfile !== undefined);
112
- const useV3 = !useV5 && !useV4 && !!params.extensionID;
113
- // ✅ 优化:并行获取 gasPrice、devWallet nonce 和 createTx
114
- let createTxPromise;
115
- if (useV5) {
116
- // V5: Tax Token V2 高级税收分配
117
- const tv2 = params.taxV2Config;
118
- const dist = tv2.distribution;
119
- const total = dist.mktBps + dist.deflationBps + dist.dividendBps + dist.lpBps;
120
- if (total !== 10000) {
121
- throw new Error(`Tax distribution must sum to 10000 (100%), got ${total}`);
122
- }
123
- // ✅ 判断是否使用金库模式(VaultPortal.newTokenV6WithVault + TOKEN_TAXED_V3)
124
- const hasVault = tv2.vaultConfig && tv2.vaultConfig.vaultType !== 'none';
125
- if (hasVault) {
126
- // ✅ 金库模式:通过 VaultPortal.newTokenV6WithVault 创建代币
127
- const vaultPortalAddr = VAULT_PORTAL_ADDRESSES[chain];
128
- if (!vaultPortalAddr) {
129
- throw new Error(`链 "${chain}" 不支持 Tax Vault 金库功能`);
130
- }
131
- const vaultPortal = new ethers.Contract(vaultPortalAddr, VAULT_PORTAL_ABI, devWallet);
132
- const v6Params = buildNewTokenV6WithVaultParams({
133
- tokenInfo,
134
- taxV2: tv2,
135
- chain,
136
- salt: params.salt ?? ('0x' + '00'.repeat(32)),
137
- taxRate: params.taxRate ?? 0,
138
- buyTaxRate: params.buyTaxRate,
139
- sellTaxRate: params.sellTaxRate,
140
- dexThresh: params.dexThresh,
141
- migratorType: params.migratorType,
142
- quoteToken: params.quoteToken,
143
- quoteAmt: 0n,
144
- dexId: params.dexId,
145
- lpFeeProfile: params.lpFeeProfile,
146
- });
147
- createTxPromise = vaultPortal.newTokenV6WithVault.populateTransaction(v6Params);
148
- }
149
- else {
150
- // 标准 V5: Portal.newTokenV5(无金库)
151
- createTxPromise = portal.newTokenV5.populateTransaction({
152
- name: tokenInfo.name,
153
- symbol: tokenInfo.symbol,
154
- meta: tokenInfo.meta,
155
- dexThresh: (params.dexThresh ?? 1) & 0xff,
156
- salt: params.salt ?? '0x' + '00'.repeat(32),
157
- taxRate: (params.taxRate ?? 0) & 0xffff,
158
- migratorType: (params.migratorType ?? 0) & 0xff,
159
- quoteToken: params.quoteToken || ZERO_ADDRESS,
160
- quoteAmt: 0n,
161
- beneficiary: devWallet.address,
162
- permitData: '0x',
163
- extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
164
- extensionData: params.extensionData ?? '0x',
165
- dexId: (params.dexId ?? 0) & 0xff,
166
- lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff,
167
- taxDuration: BigInt(tv2.taxDuration),
168
- antiFarmerDuration: BigInt(tv2.antiFarmerDuration),
169
- mktBps: dist.mktBps,
170
- deflationBps: dist.deflationBps,
171
- dividendBps: dist.dividendBps,
172
- lpBps: dist.lpBps,
173
- minimumShareBalance: BigInt(dist.minimumShareBalance ?? 10000) * (10n ** 18n),
174
- });
175
- }
176
- }
177
- else if (useV4) {
178
- // V4: 支持 DEX ID 和 LP 费率配置
179
- createTxPromise = portal.newTokenV4.populateTransaction({
180
- name: tokenInfo.name,
181
- symbol: tokenInfo.symbol,
182
- meta: tokenInfo.meta,
183
- dexThresh: (params.dexThresh ?? 1) & 0xff,
184
- salt: params.salt ?? '0x' + '00'.repeat(32),
185
- taxRate: (params.taxRate ?? 0) & 0xffff,
186
- migratorType: (params.migratorType ?? 0) & 0xff,
187
- quoteToken: params.quoteToken || ZERO_ADDRESS,
188
- quoteAmt: 0n,
189
- beneficiary: devWallet.address,
190
- permitData: '0x',
191
- extensionID: params.extensionID ?? '0x' + '00'.repeat(32),
192
- extensionData: params.extensionData ?? '0x',
193
- dexId: (params.dexId ?? 0) & 0xff,
194
- lpFeeProfile: (params.lpFeeProfile ?? 0) & 0xff
195
- });
196
- }
197
- else if (useV3) {
198
- // V3: 支持扩展数据
199
- createTxPromise = portal.newTokenV3.populateTransaction({
200
- name: tokenInfo.name,
201
- symbol: tokenInfo.symbol,
202
- meta: tokenInfo.meta,
203
- dexThresh: (params.dexThresh ?? 1) & 0xff,
204
- salt: params.salt ?? '0x' + '00'.repeat(32),
205
- taxRate: (params.taxRate ?? 0) & 0xffff,
206
- migratorType: (params.migratorType ?? 0) & 0xff,
207
- quoteToken: params.quoteToken || ZERO_ADDRESS,
208
- quoteAmt: 0n,
209
- beneficiary: devWallet.address,
210
- permitData: '0x',
211
- extensionID: params.extensionID,
212
- extensionData: params.extensionData ?? '0x'
213
- });
214
- }
215
- else {
216
- // V2: 基础版本
217
- createTxPromise = portal.newTokenV2.populateTransaction({
218
- name: tokenInfo.name,
219
- symbol: tokenInfo.symbol,
220
- meta: tokenInfo.meta,
221
- dexThresh: (params.dexThresh ?? 1) & 0xff,
222
- salt: params.salt ?? '0x' + '00'.repeat(32),
223
- taxRate: (params.taxRate ?? 0) & 0xffff,
224
- migratorType: (params.migratorType ?? 0) & 0xff,
225
- quoteToken: params.quoteToken || ZERO_ADDRESS,
226
- quoteAmt: 0n,
227
- beneficiary: devWallet.address,
228
- permitData: '0x'
229
- });
230
- }
28
+ const normalizedTax = normalizeTaxLaunchConfig(params.taxV2Config, params.taxRate);
29
+ const isTaxLaunch = !!normalizedTax || (params.taxRate ?? 0) > 0;
30
+ const hasVault = !!normalizedTax?.vaultConfig && normalizedTax.vaultConfig.vaultType !== 'none';
31
+ const useV3Standard = !isTaxLaunch &&
32
+ !hasVault &&
33
+ (params.lpFeeProfile !== undefined || params.dexId !== undefined);
34
+ const createTxPromise = populateCreateTokenTransaction({
35
+ chain,
36
+ devWallet,
37
+ originalPortal: portal,
38
+ tokenInfo,
39
+ quoteToken: params.quoteToken || ZERO_ADDRESS,
40
+ beneficiary: devWallet.address,
41
+ dexThresh: params.dexThresh,
42
+ salt: params.salt,
43
+ migratorType: params.migratorType,
44
+ taxRate: params.taxRate,
45
+ dexId: params.dexId,
46
+ lpFeeProfile: params.lpFeeProfile,
47
+ extensionID: params.extensionID,
48
+ extensionData: params.extensionData,
49
+ useV3Standard,
50
+ taxConfig: normalizedTax,
51
+ });
231
52
  const [gasPrice, createTxUnsigned, devNonce] = await Promise.all([
232
53
  resolveGasPrice(provider, config),
233
54
  createTxPromise,
234
- nonceManager.getNextNonce(devWallet)
55
+ nonceManager.getNextNonce(devWallet),
235
56
  ]);
236
57
  const createTxRequest = {
237
58
  ...createTxUnsigned,
@@ -240,12 +61,12 @@ export async function createTokenWithBundleBuyMerkle(params) {
240
61
  gasLimit: getGasLimit(config),
241
62
  gasPrice,
242
63
  chainId,
243
- type: getTxType(config)
64
+ type: getTxType(config),
244
65
  };
245
66
  const signedCreateTx = await devWallet.signTransaction(createTxRequest);
246
67
  signedTxs.push(signedCreateTx);
247
68
  const buyers = createWallets(privateKeys.slice(1), provider);
248
- const extractProfit = shouldExtractProfit(config);
69
+ const extractProfit = shouldExtractProfit();
249
70
  const { fundsList, originalAmounts, totalBuyAmount, totalProfit } = analyzeBuyFunds(buyAmounts, config, extractProfit);
250
71
  const maxFundsIndex = findMaxIndex(originalAmounts);
251
72
  const gasLimits = buildGasLimitList(buyers.length, config);
@@ -258,13 +79,13 @@ export async function createTokenWithBundleBuyMerkle(params) {
258
79
  if (!useNativeToken && params.quoteTokenDecimals !== undefined && params.quoteTokenDecimals !== 18) {
259
80
  const decimalsDiff = 18 - params.quoteTokenDecimals;
260
81
  const divisor = BigInt(10 ** decimalsDiff);
261
- adjustedFundsList = fundsList.map(amount => amount / divisor);
82
+ adjustedFundsList = fundsList.map((amount) => amount / divisor);
262
83
  profitTokenAmount = totalProfit / divisor;
263
84
  }
264
85
  // ✅ 优化:并行获取 unsignedBuys 和 buyerNonces
265
86
  const [unsignedBuys, buyerNonces] = await Promise.all([
266
87
  populateBuyTransactionsWithQuote(buyers, portalAddr, tokenAddress, adjustedFundsList, inputToken, useNativeToken),
267
- allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, useNativeToken ? totalProfit : profitTokenAmount, nonceManager)
88
+ allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, useNativeToken ? totalProfit : profitTokenAmount, nonceManager),
268
89
  ]);
269
90
  // ✅ 贿赂交易放在首位(提高 BlockRazor 打包优先级)
270
91
  const bribeAmount = getBribeAmount(config);
@@ -279,7 +100,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
279
100
  gasPrice,
280
101
  gasLimit: GAS_LIMITS.BRIBE,
281
102
  chainId,
282
- type: getTxType(config)
103
+ type: getTxType(config),
283
104
  });
284
105
  bribeTxs.push(bribeTx);
285
106
  // 调整 maxFundsIndex 钱包的 nonce(买入交易 +1)
@@ -294,7 +115,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
294
115
  chainId,
295
116
  config,
296
117
  fundsList: adjustedFundsList, // ✅ 使用调整后的金额
297
- useNativeToken // ✅ 传递是否使用原生代币
118
+ useNativeToken, // ✅ 传递是否使用原生代币
298
119
  });
299
120
  // ✅ 利润多跳转账(强制 2 跳中转)
300
121
  const profitTxs = [];
@@ -315,7 +136,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
315
136
  gasPrice,
316
137
  chainId,
317
138
  txType: getTxType(config),
318
- startNonce: profitNonce
139
+ startNonce: profitNonce,
319
140
  });
320
141
  profitTxs.push(...profitHopResult.signedTransactions);
321
142
  profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
@@ -327,7 +148,7 @@ export async function createTokenWithBundleBuyMerkle(params) {
327
148
  signedTransactions: [...bribeTxs, ...signedTxs, ...signedBuys, ...profitTxs],
328
149
  tokenAddress,
329
150
  profitHopWallets, // ✅ 返回利润多跳钱包
330
- metadata: buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyers.length)
151
+ metadata: buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyers.length),
331
152
  };
332
153
  }
333
154
  /**
@@ -342,9 +163,8 @@ export async function batchBuyWithBundleMerkle(params) {
342
163
  }
343
164
  const { provider, chainId } = createChainContext(chain, config.rpcUrl);
344
165
  const nonceManager = new NonceManager(provider);
345
- const signedTxs = [];
346
166
  const buyers = createWallets(privateKeys, provider);
347
- const extractProfit = shouldExtractProfit(config);
167
+ const extractProfit = shouldExtractProfit();
348
168
  const { fundsList, originalAmounts, totalBuyAmount, totalProfit } = analyzeBuyFunds(buyAmounts, config, extractProfit);
349
169
  const maxFundsIndex = findMaxIndex(originalAmounts);
350
170
  const gasLimits = buildGasLimitList(buyers.length, config);
@@ -362,7 +182,7 @@ export async function batchBuyWithBundleMerkle(params) {
362
182
  // 转为 USDC (6位) = 100000 (0.1 USDC)
363
183
  const decimalsDiff = 18 - quoteTokenDecimals;
364
184
  const divisor = BigInt(10 ** decimalsDiff);
365
- adjustedFundsList = fundsList.map(amount => amount / divisor);
185
+ adjustedFundsList = fundsList.map((amount) => amount / divisor);
366
186
  profitTokenAmount = totalProfit / divisor;
367
187
  }
368
188
  // ✅ ERC20 购买:获取代币利润等值的原生代币(BNB)报价
@@ -379,10 +199,8 @@ export async function batchBuyWithBundleMerkle(params) {
379
199
  populateBuyTransactionsWithQuote(buyers, FLAP_PORTAL_ADDRESSES[chain], tokenAddress, adjustedFundsList, inputToken, useNativeToken),
380
200
  presetNonces && presetNonces.length === buyers.length
381
201
  ? adjustNoncesForProfit(presetNonces) // ✅ 调整 nonces 避免冲突
382
- : allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, nativeProfitAmount, nonceManager)
202
+ : allocateBuyerNonces(buyers, extractProfit, maxFundsIndex, nativeProfitAmount, nonceManager),
383
203
  ]);
384
- if (presetNonces) {
385
- }
386
204
  // ✅ 贿赂交易放在首位(提高 BlockRazor 打包优先级)
387
205
  const bribeAmount = getBribeAmount(config);
388
206
  const bribeTxs = [];
@@ -395,7 +213,7 @@ export async function batchBuyWithBundleMerkle(params) {
395
213
  gasPrice,
396
214
  gasLimit: GAS_LIMITS.BRIBE,
397
215
  chainId,
398
- type: getTxType(config)
216
+ type: getTxType(config),
399
217
  });
400
218
  bribeTxs.push(bribeTx);
401
219
  // 调整 maxFundsIndex 钱包的 nonce(买入交易 +1)
@@ -410,20 +228,18 @@ export async function batchBuyWithBundleMerkle(params) {
410
228
  chainId,
411
229
  config,
412
230
  fundsList: adjustedFundsList, // ✅ 使用调整后的金额
413
- useNativeToken // ✅ USDT 购买时 value=0,BNB 购买时 value=金额
231
+ useNativeToken, // ✅ USDT 购买时 value=0,BNB 购买时 value=金额
414
232
  });
415
233
  // ✅ 利润多跳转账
416
234
  const profitTxs = [];
417
235
  let profitHopWallets;
418
236
  // ✅ 检查是否使用分布式利润模式
419
- const profitMode = config.profitMode || 'single';
420
- console.log('🔧 [SDK batchBuyWithBundleMerkle] config.profitMode:', config.profitMode, '-> resolved:', profitMode, 'wallets:', buyers.length);
237
+ const profitMode = config.profitMode ?? 'single';
421
238
  if (extractProfit && nativeProfitAmount > 0n) {
422
239
  if (profitMode === 'distributed') {
423
240
  // ✅ 分布式模式:每个钱包独立扣除自己的利润,每个都有独立的多跳
424
241
  // 最多支持 12 个钱包(12 交易 + 36 多跳 + 1 贿赂 = 49 笔)
425
242
  const MAX_DISTRIBUTED_WALLETS = 12;
426
- console.log('🔧 [SDK] 使用分布式利润模式,钱包数:', buyers.length);
427
243
  if (buyers.length > MAX_DISTRIBUTED_WALLETS) {
428
244
  throw new Error(`分布式利润模式最多支持 ${MAX_DISTRIBUTED_WALLETS} 个钱包,当前 ${buyers.length} 个`);
429
245
  }
@@ -433,9 +249,7 @@ export async function batchBuyWithBundleMerkle(params) {
433
249
  for (let i = 0; i < buyers.length; i++) {
434
250
  const walletOriginalAmount = originalAmounts[i];
435
251
  // 按比例计算该钱包应承担的利润
436
- const walletProfit = totalBuyAmount > 0n
437
- ? (nativeProfitAmount * walletOriginalAmount) / totalBuyAmount
438
- : 0n;
252
+ const walletProfit = totalBuyAmount > 0n ? (nativeProfitAmount * walletOriginalAmount) / totalBuyAmount : 0n;
439
253
  perWalletProfits.push(walletProfit);
440
254
  }
441
255
  // 为每个钱包生成独立的利润多跳交易
@@ -452,7 +266,7 @@ export async function batchBuyWithBundleMerkle(params) {
452
266
  gasPrice,
453
267
  chainId,
454
268
  txType: getTxType(config),
455
- startNonce: profitNonce
269
+ startNonce: profitNonce,
456
270
  });
457
271
  profitTxs.push(...profitHopResult.signedTransactions);
458
272
  if (profitHopResult.hopWallets) {
@@ -474,7 +288,7 @@ export async function batchBuyWithBundleMerkle(params) {
474
288
  gasPrice,
475
289
  chainId,
476
290
  txType: getTxType(config),
477
- startNonce: profitNonce
291
+ startNonce: profitNonce,
478
292
  });
479
293
  profitTxs.push(...profitHopResult.signedTransactions);
480
294
  profitHopWallets = profitHopResult.hopWallets;
@@ -489,7 +303,7 @@ export async function batchBuyWithBundleMerkle(params) {
489
303
  metadata: {
490
304
  ...buildProfitMetadata(extractProfit, totalBuyAmount, nativeProfitAmount, buyers.length),
491
305
  profitMode, // ✅ 返回使用的利润模式
492
- }
306
+ },
493
307
  };
494
308
  }
495
309
  /**
@@ -504,23 +318,22 @@ export async function batchSellWithBundleMerkle(params) {
504
318
  }
505
319
  const { provider, chainId } = createChainContext(chain, config.rpcUrl);
506
320
  const nonceManager = new NonceManager(provider);
507
- const signedTxs = [];
508
321
  const wallets = createWallets(privateKeys, provider);
509
- const amountsWei = sellAmounts.map(a => ethers.parseUnits(a, 18));
322
+ const amountsWei = sellAmounts.map((a) => ethers.parseUnits(a, 18));
510
323
  const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
511
324
  const readOnlyPortal = new ethers.Contract(portalAddr, PORTAL_ABI, provider);
512
325
  const gasLimits = buildGasLimitList(wallets.length, config);
513
- const portals = wallets.map(w => new ethers.Contract(portalAddr, PORTAL_ABI, w));
326
+ const portals = wallets.map((w) => new ethers.Contract(portalAddr, PORTAL_ABI, w));
514
327
  // ✅ 确定 outputToken:如果传入了 quoteToken 且非零地址,则使用它;否则使用零地址(原生代币)
515
328
  const outputToken = quoteToken && quoteToken !== ZERO_ADDRESS ? quoteToken : ZERO_ADDRESS;
516
329
  const useNativeOutput = outputToken === ZERO_ADDRESS;
517
330
  // ✅ 优化:如果前端传入了 nonces,直接使用(跳过 RPC 调用)
518
331
  const presetNonces = config.nonces;
519
- const extractProfit = shouldExtractProfit(config);
332
+ const extractProfit = shouldExtractProfit();
520
333
  // ✅ 并行执行 gasPrice 和 quoteSellOutputs(Multicall3)
521
334
  const [gasPrice, quotedOutputs] = await Promise.all([
522
335
  resolveGasPrice(provider, config),
523
- quoteSellOutputsWithQuote(readOnlyPortal, tokenAddress, amountsWei, outputToken)
336
+ quoteSellOutputsWithQuote(readOnlyPortal, tokenAddress, amountsWei, outputToken),
524
337
  ]);
525
338
  // ✅ 计算利润和 maxRevenueIndex(用于 nonce 分配)
526
339
  let totalTokenProfit = 0n;
@@ -530,7 +343,7 @@ export async function batchSellWithBundleMerkle(params) {
530
343
  for (let i = 0; i < wallets.length; i++) {
531
344
  const quoted = quotedOutputs[i];
532
345
  if (quoted > 0n) {
533
- const { profit } = calculateProfit(quoted, config);
346
+ const { profit } = calculateProfit(quoted);
534
347
  totalTokenProfit += profit;
535
348
  if (quoted > maxRevenue) {
536
349
  maxRevenue = quoted;
@@ -562,9 +375,7 @@ export async function batchSellWithBundleMerkle(params) {
562
375
  const maxRevenueNonces = await nonceManager.getNextNonceBatch(wallets[maxRevenueIndex], maxRevenueNonceCount);
563
376
  // 其他钱包各需要 1 个 nonce
564
377
  const otherWallets = wallets.filter((_, i) => i !== maxRevenueIndex);
565
- const otherNonces = otherWallets.length > 0
566
- ? await nonceManager.getNextNoncesForWallets(otherWallets)
567
- : [];
378
+ const otherNonces = otherWallets.length > 0 ? await nonceManager.getNextNoncesForWallets(otherWallets) : [];
568
379
  // 组装最终的 nonces 数组(保持原顺序)
569
380
  nonces = [];
570
381
  let otherIdx = 0;
@@ -595,7 +406,7 @@ export async function batchSellWithBundleMerkle(params) {
595
406
  outputToken, // ✅ 使用动态 outputToken
596
407
  inputAmount: amountsWei[i],
597
408
  minOutputAmount: minOuts[i],
598
- permitData: '0x'
409
+ permitData: '0x',
599
410
  })));
600
411
  // ✅ 贿赂交易放在首位
601
412
  const bribeTxs = [];
@@ -607,7 +418,7 @@ export async function batchSellWithBundleMerkle(params) {
607
418
  gasPrice,
608
419
  gasLimit: GAS_LIMITS.BRIBE,
609
420
  chainId,
610
- type: getTxType(config)
421
+ type: getTxType(config),
611
422
  });
612
423
  bribeTxs.push(bribeTx);
613
424
  }
@@ -621,14 +432,13 @@ export async function batchSellWithBundleMerkle(params) {
621
432
  gasPrice,
622
433
  chainId,
623
434
  type: getTxType(config),
624
- value: 0n // ✅ 卖出交易不发送原生代币
435
+ value: 0n, // ✅ 卖出交易不发送原生代币
625
436
  })));
626
437
  // ✅ 利润多跳转账
627
438
  const profitTxs = [];
628
439
  let profitHopWallets;
629
440
  // ✅ 检查是否使用分布式利润模式
630
- const profitMode = config.profitMode || 'single';
631
- console.log('🔧 [SDK batchSellWithBundleMerkle] config.profitMode:', config.profitMode, '-> resolved:', profitMode, 'wallets:', wallets.length);
441
+ const profitMode = config.profitMode ?? 'single';
632
442
  if (needProfitTx) {
633
443
  // ERC20 输出时:获取代币利润等值的原生代币(BNB)报价
634
444
  let totalNativeProfitAmount = totalTokenProfit;
@@ -662,7 +472,7 @@ export async function batchSellWithBundleMerkle(params) {
662
472
  gasPrice,
663
473
  chainId,
664
474
  txType: getTxType(config),
665
- startNonce: walletProfitNonce
475
+ startNonce: walletProfitNonce,
666
476
  });
667
477
  profitTxs.push(...profitHopResult.signedTransactions);
668
478
  if (profitHopResult.hopWallets) {
@@ -684,7 +494,7 @@ export async function batchSellWithBundleMerkle(params) {
684
494
  gasPrice,
685
495
  chainId,
686
496
  txType: getTxType(config),
687
- startNonce: profitNonce
497
+ startNonce: profitNonce,
688
498
  });
689
499
  profitTxs.push(...profitHopResult.signedTransactions);
690
500
  profitHopWallets = profitHopResult.hopWallets;
@@ -700,7 +510,7 @@ export async function batchSellWithBundleMerkle(params) {
700
510
  metadata: {
701
511
  profitMode, // ✅ 返回使用的利润模式
702
512
  totalProfit: totalTokenProfit.toString(),
703
- }
513
+ },
704
514
  };
705
515
  }
706
516
  // ✅ Provider 缓存(复用连接,减少初始化开销)
@@ -721,29 +531,27 @@ function createChainContext(chain, rpcUrl) {
721
531
  return { chainId, provider };
722
532
  }
723
533
  async function resolveGasPrice(provider, config) {
724
- // 优化:如果前端传入了 gasPrice,直接使用(跳过 RPC 调用)
725
- if (config.gasPrice !== undefined) {
726
- const gasPrice = config.gasPrice;
727
- return gasPrice;
534
+ if ('gasPrice' in config && config.gasPrice !== undefined) {
535
+ return config.gasPrice;
728
536
  }
729
537
  return await getOptimizedGasPrice(provider, getGasPriceConfig(config));
730
538
  }
731
539
  function createWallets(privateKeys, provider) {
732
- return privateKeys.map(key => new Wallet(key, provider));
540
+ return privateKeys.map((key) => new Wallet(key, provider));
733
541
  }
734
542
  function analyzeBuyFunds(buyAmounts, config, extractProfit) {
735
543
  const result = {
736
544
  fundsList: [],
737
545
  originalAmounts: [],
738
546
  totalBuyAmount: 0n,
739
- totalProfit: 0n
547
+ totalProfit: 0n,
740
548
  };
741
- buyAmounts.forEach(amount => {
549
+ buyAmounts.forEach((amount) => {
742
550
  const originalAmount = ethers.parseEther(amount);
743
551
  result.originalAmounts.push(originalAmount);
744
552
  result.totalBuyAmount += originalAmount;
745
553
  if (extractProfit) {
746
- const { remaining, profit } = calculateProfit(originalAmount, config);
554
+ const { remaining, profit } = calculateProfit(originalAmount);
747
555
  result.totalProfit += profit;
748
556
  result.fundsList.push(remaining);
749
557
  }
@@ -772,13 +580,13 @@ function findMaxIndex(values) {
772
580
  * 当 inputToken 为非零地址(如 USDC)时,value 为 0
773
581
  */
774
582
  async function populateBuyTransactionsWithQuote(buyers, portalAddr, tokenAddress, fundsList, inputToken, useNativeToken) {
775
- const portals = buyers.map(wallet => new ethers.Contract(portalAddr, PORTAL_ABI, wallet));
583
+ const portals = buyers.map((wallet) => new ethers.Contract(portalAddr, PORTAL_ABI, wallet));
776
584
  return await Promise.all(portals.map((portal, i) => portal.swapExactInput.populateTransaction({
777
585
  inputToken,
778
586
  outputToken: tokenAddress,
779
587
  inputAmount: fundsList[i],
780
588
  minOutputAmount: 0n,
781
- permitData: '0x'
589
+ permitData: '0x',
782
590
  },
783
591
  // ✅ 如果使用原生代币,value 为购买金额;否则为 0
784
592
  useNativeToken ? { value: fundsList[i] } : {})));
@@ -815,9 +623,7 @@ async function allocateBuyerNonces(buyers, extractProfit, maxIndex, totalProfit,
815
623
  const maxIndexNonces = await nonceManager.getNextNonceBatch(buyers[maxIndex], 2);
816
624
  // 其他钱包各需要 1 个 nonce
817
625
  const otherBuyers = buyers.filter((_, i) => i !== maxIndex);
818
- const otherNonces = otherBuyers.length > 0
819
- ? await nonceManager.getNextNoncesForWallets(otherBuyers)
820
- : [];
626
+ const otherNonces = otherBuyers.length > 0 ? await nonceManager.getNextNoncesForWallets(otherBuyers) : [];
821
627
  // 组装最终的 nonces 数组(保持原顺序)
822
628
  const nonces = [];
823
629
  let otherIdx = 0;
@@ -831,7 +637,7 @@ async function allocateBuyerNonces(buyers, extractProfit, maxIndex, totalProfit,
831
637
  }
832
638
  return nonces;
833
639
  }
834
- async function signBuyTransactions({ unsignedBuys, buyers, nonces, gasLimits, gasPrice, chainId, config, fundsList, useNativeToken = true // ✅ 默认使用原生代币
640
+ async function signBuyTransactions({ unsignedBuys, buyers, nonces, gasLimits, gasPrice, chainId, config, fundsList, useNativeToken = true, // ✅ 默认使用原生代币
835
641
  }) {
836
642
  return await Promise.all(unsignedBuys.map((unsigned, i) => buyers[i].signTransaction({
837
643
  ...unsigned,
@@ -841,7 +647,7 @@ async function signBuyTransactions({ unsignedBuys, buyers, nonces, gasLimits, ga
841
647
  gasPrice,
842
648
  chainId,
843
649
  type: getTxType(config),
844
- value: useNativeToken ? fundsList[i] : 0n // ✅ 非原生代币时 value 为 0
650
+ value: useNativeToken ? fundsList[i] : 0n, // ✅ 非原生代币时 value 为 0
845
651
  })));
846
652
  }
847
653
  function buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyerCount) {
@@ -852,7 +658,7 @@ function buildProfitMetadata(extractProfit, totalBuyAmount, totalProfit, buyerCo
852
658
  totalBuyAmount: ethers.formatEther(totalBuyAmount),
853
659
  profitAmount: ethers.formatEther(totalProfit),
854
660
  profitRecipient: getProfitRecipient(),
855
- buyerCount
661
+ buyerCount,
856
662
  };
857
663
  }
858
664
  /**
@@ -868,7 +674,7 @@ async function quoteSellOutputsWithQuote(portal, tokenAddress, amountsWei, outpu
868
674
  const result = await portal.quoteExactInput.staticCall({
869
675
  inputToken: tokenAddress,
870
676
  outputToken,
871
- inputAmount: amountsWei[0]
677
+ inputAmount: amountsWei[0],
872
678
  });
873
679
  return [result];
874
680
  }
@@ -881,14 +687,16 @@ async function quoteSellOutputsWithQuote(portal, tokenAddress, amountsWei, outpu
881
687
  const portalIface = new Interface(PORTAL_ABI);
882
688
  const multicall = new Contract(MULTICALL3_ADDRESS, MULTICALL3_ABI, provider);
883
689
  // 构建批量调用
884
- const calls = amountsWei.map(amount => ({
690
+ const calls = amountsWei.map((amount) => ({
885
691
  target: portalAddress,
886
692
  allowFailure: true, // 允许单个失败
887
- callData: portalIface.encodeFunctionData('quoteExactInput', [{
693
+ callData: portalIface.encodeFunctionData('quoteExactInput', [
694
+ {
888
695
  inputToken: tokenAddress,
889
696
  outputToken,
890
- inputAmount: amount
891
- }])
697
+ inputAmount: amount,
698
+ },
699
+ ]),
892
700
  }));
893
701
  try {
894
702
  const results = await multicall.aggregate3.staticCall(calls);
@@ -912,7 +720,7 @@ async function quoteSellOutputsWithQuote(portal, tokenAddress, amountsWei, outpu
912
720
  return await portal.quoteExactInput.staticCall({
913
721
  inputToken: tokenAddress,
914
722
  outputToken,
915
- inputAmount: amount
723
+ inputAmount: amount,
916
724
  });
917
725
  }
918
726
  catch {