four-flap-meme-sdk 1.9.49 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/README.en.md +41 -6
  2. package/README.md +31 -0
  3. package/README.zh-CN.md +41 -6
  4. package/dist/abis/common.js +74 -68
  5. package/dist/abis/flap/vault.js +9 -7
  6. package/dist/abis/index.d.ts +3 -4
  7. package/dist/abis/index.js +3 -4
  8. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  9. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  10. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  11. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  12. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  13. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  14. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  15. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  16. package/dist/bundle-core/config-helpers.d.ts +36 -0
  17. package/dist/bundle-core/config-helpers.js +57 -0
  18. package/dist/bundle-core/errors.d.ts +50 -0
  19. package/dist/bundle-core/errors.js +34 -0
  20. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  21. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  22. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  23. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  24. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  25. package/dist/bundle-core/four-meme/core.js +515 -0
  26. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  27. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  28. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  29. package/dist/bundle-core/four-meme/private.js +465 -0
  30. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  31. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  32. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  33. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  34. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  35. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  36. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  37. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  38. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  39. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  40. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  41. package/dist/bundle-core/four-meme/swap.js +505 -0
  42. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  43. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  44. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  45. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  46. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  47. package/dist/bundle-core/four-meme/types/index.js +1 -0
  48. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  49. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  50. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  51. package/dist/bundle-core/four-meme/types.js +1 -0
  52. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  53. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  54. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  55. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  56. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  57. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  58. package/dist/bundle-core/index.d.ts +8 -0
  59. package/dist/bundle-core/index.js +8 -0
  60. package/dist/bundle-core/internal.d.ts +21 -0
  61. package/dist/bundle-core/internal.js +182 -0
  62. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  63. package/dist/bundle-core/sign-context-helpers.js +67 -0
  64. package/dist/bundle-core/submit.d.ts +293 -0
  65. package/dist/bundle-core/submit.js +727 -0
  66. package/dist/bundle-core/types/index.d.ts +8 -0
  67. package/dist/bundle-core/types/index.js +1 -0
  68. package/dist/bundle-core/types.d.ts +1 -0
  69. package/dist/bundle-core/types.js +1 -0
  70. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  71. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
  72. package/dist/chains/bsc/four/config.d.ts +5 -70
  73. package/dist/chains/bsc/four/config.js +2 -115
  74. package/dist/chains/bsc/four/core.d.ts +1 -4
  75. package/dist/chains/bsc/four/core.js +1 -589
  76. package/dist/chains/bsc/four/disperse.d.ts +12 -0
  77. package/dist/chains/bsc/four/disperse.js +470 -0
  78. package/dist/chains/bsc/four/index.d.ts +6 -6
  79. package/dist/chains/bsc/four/index.js +6 -6
  80. package/dist/chains/bsc/four/internal.d.ts +2 -50
  81. package/dist/chains/bsc/four/internal.js +2 -237
  82. package/dist/chains/bsc/four/pairwise.d.ts +7 -0
  83. package/dist/chains/bsc/four/pairwise.js +308 -0
  84. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  85. package/dist/chains/bsc/four/pancake-proxy.js +1 -688
  86. package/dist/chains/bsc/four/private.d.ts +1 -27
  87. package/dist/chains/bsc/four/private.js +1 -477
  88. package/dist/chains/bsc/four/submit.d.ts +2 -315
  89. package/dist/chains/bsc/four/submit.js +2 -746
  90. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  91. package/dist/chains/bsc/four/swap-buy-first.js +2 -506
  92. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  93. package/dist/chains/bsc/four/swap-internal.js +1 -18
  94. package/dist/chains/bsc/four/swap.d.ts +2 -144
  95. package/dist/chains/bsc/four/swap.js +2 -760
  96. package/dist/chains/bsc/four/sweep.d.ts +13 -0
  97. package/dist/chains/bsc/four/sweep.js +788 -0
  98. package/dist/chains/bsc/four/types.d.ts +1 -476
  99. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  100. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  101. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  102. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  103. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  104. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  105. package/dist/chains/bsc/four/utils.d.ts +5 -18
  106. package/dist/chains/bsc/four/utils.js +5 -1534
  107. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  109. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  110. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
  111. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  112. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  113. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  114. package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
  115. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  116. package/dist/chains/bsc/pancake/index.js +1 -3
  117. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  118. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  119. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  120. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  121. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  122. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  123. package/dist/chains/eni/batch-router/transfer.js +54 -23
  124. package/dist/chains/eni/batch-router/utils.js +32 -6
  125. package/dist/chains/eni/bundler/sign.js +4 -4
  126. package/dist/chains/eni/bundler/submit.js +1 -4
  127. package/dist/chains/eni/constants.js +1 -1
  128. package/dist/chains/eni/index.d.ts +1 -1
  129. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  130. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  131. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  132. package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
  133. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
  134. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  135. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  136. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  137. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  138. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
  139. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  140. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  141. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  142. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  143. package/dist/chains/eni/platforms/iro/index.js +4 -4
  144. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  145. package/dist/chains/eni/platforms/iro/token.js +107 -31
  146. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  147. package/dist/chains/eni/submit.js +5 -13
  148. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  149. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
  150. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  151. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  152. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
  153. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  154. package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
  155. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  156. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
  157. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  158. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  159. package/dist/chains/xlayer/eip7702/index.d.ts +27 -46
  160. package/dist/chains/xlayer/eip7702/index.js +27 -81
  161. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  162. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  163. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  164. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
  165. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  166. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  167. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  168. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  169. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  170. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  171. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  172. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  173. package/dist/chains/xlayer/eip7702/volume.js +83 -158
  174. package/dist/chains/xlayer/eoa/constants.js +1 -1
  175. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  176. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  177. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  178. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  179. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
  180. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  181. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
  182. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  183. package/dist/chains/xlayer/eoa/index.js +8 -23
  184. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  185. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  186. package/dist/chains/xlayer/eoa/types-core.d.ts +363 -0
  187. package/dist/chains/xlayer/eoa/types-core.js +53 -0
  188. package/dist/chains/xlayer/eoa/types-create.d.ts +413 -0
  189. package/dist/chains/xlayer/eoa/types-create.js +9 -0
  190. package/dist/chains/xlayer/eoa/types-volume.d.ts +209 -0
  191. package/dist/chains/xlayer/eoa/types-volume.js +13 -0
  192. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  193. package/dist/chains/xlayer/eoa/types.js +1 -3
  194. package/dist/contracts/helper3.d.ts +20 -17
  195. package/dist/contracts/helper3.js +56 -20
  196. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  197. package/dist/contracts/tm-bundle-helpers.js +72 -0
  198. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  199. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
  200. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
  201. package/dist/contracts/tm-bundle-merkle/config.js +2 -115
  202. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  203. package/dist/contracts/tm-bundle-merkle/core.js +1 -588
  204. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  205. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  206. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
  207. package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
  208. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  209. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
  210. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  211. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  212. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  213. package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
  214. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  215. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
  216. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  217. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  218. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  219. package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
  220. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  221. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  222. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  223. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  224. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  225. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  226. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  227. package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
  228. package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
  229. package/dist/contracts/tm-bundle.d.ts +3 -51
  230. package/dist/contracts/tm-bundle.js +102 -142
  231. package/dist/contracts/tm.d.ts +3 -2
  232. package/dist/contracts/tm.js +36 -32
  233. package/dist/contracts/tm1.js +9 -4
  234. package/dist/contracts/tm2.js +9 -4
  235. package/dist/dex/direct-router-helpers.d.ts +264 -0
  236. package/dist/dex/direct-router-helpers.js +539 -0
  237. package/dist/dex/direct-router.d.ts +3 -125
  238. package/dist/dex/direct-router.js +237 -652
  239. package/dist/dex/types.d.ts +81 -0
  240. package/dist/dex/types.js +1 -0
  241. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  242. package/dist/exports/root-bundle-and-tooling.js +30 -0
  243. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  244. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  245. package/dist/exports/root-foundations.d.ts +35 -0
  246. package/dist/exports/root-foundations.js +70 -0
  247. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  248. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  249. package/dist/flows/create.d.ts +2 -2
  250. package/dist/flows/create.js +6 -6
  251. package/dist/flows/index.d.ts +1 -0
  252. package/dist/flows/index.js +1 -0
  253. package/dist/index.d.ts +20 -91
  254. package/dist/index.js +20 -215
  255. package/dist/shared/abis/common.d.ts +2 -83
  256. package/dist/shared/abis/common.js +2 -252
  257. package/dist/shared/abis/index.d.ts +5 -6
  258. package/dist/shared/abis/index.js +5 -7
  259. package/dist/shared/clients/blockrazor.js +41 -24
  260. package/dist/shared/clients/club48.js +30 -26
  261. package/dist/shared/clients/emitservice.js +2 -0
  262. package/dist/shared/clients/four.js +23 -18
  263. package/dist/shared/clients/index.d.ts +8 -0
  264. package/dist/shared/clients/index.js +8 -0
  265. package/dist/shared/clients/merkle.js +26 -30
  266. package/dist/shared/constants/addresses.d.ts +1 -1
  267. package/dist/shared/constants/addresses.js +11 -2
  268. package/dist/shared/constants/chains.d.ts +1 -1
  269. package/dist/shared/constants/chains.js +1 -1
  270. package/dist/shared/constants/gas.d.ts +1 -1
  271. package/dist/shared/constants/gas.js +2 -6
  272. package/dist/shared/constants/index.d.ts +1 -0
  273. package/dist/shared/constants/index.js +1 -0
  274. package/dist/shared/constants/quote.d.ts +30 -0
  275. package/dist/shared/constants/quote.js +37 -0
  276. package/dist/shared/flap/__tests__/curve.test.js +3 -3
  277. package/dist/shared/flap/abi.js +1 -1
  278. package/dist/shared/flap/constants.d.ts +1 -1
  279. package/dist/shared/flap/constants.js +2 -2
  280. package/dist/shared/flap/curve.js +3 -0
  281. package/dist/shared/flap/errors.d.ts +1 -4
  282. package/dist/shared/flap/errors.js +21 -3
  283. package/dist/shared/flap/index.d.ts +2 -2
  284. package/dist/shared/flap/index.js +2 -2
  285. package/dist/shared/flap/meta.d.ts +16 -18
  286. package/dist/shared/flap/meta.js +14 -26
  287. package/dist/shared/flap/permit.js +6 -5
  288. package/dist/shared/flap/pinata.d.ts +9 -2
  289. package/dist/shared/flap/pinata.js +20 -18
  290. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  291. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  292. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  293. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  294. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  295. package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
  296. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
  297. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  298. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  299. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  300. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  301. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  302. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  303. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  304. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  305. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  306. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  307. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  308. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  309. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  310. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
  311. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +100 -0
  312. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +133 -0
  313. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  314. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  315. package/dist/shared/flap/portal-bundle.js +54 -42
  316. package/dist/shared/flap/portal.js +32 -10
  317. package/dist/shared/flap/vanity.js +4 -7
  318. package/dist/shared/flap/vault.d.ts +1 -1
  319. package/dist/shared/flap/vault.js +54 -48
  320. package/dist/shared/flap 2/__tests__/curve.test.d.ts +1 -0
  321. package/dist/shared/flap 2/portal-bundle-merkle/types.js +1 -0
  322. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  323. package/dist/shared/foundation/dex/v3-path.js +35 -0
  324. package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
  325. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  326. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  327. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  328. package/dist/shared/foundation/index.d.ts +13 -0
  329. package/dist/shared/foundation/index.js +12 -0
  330. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  331. package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
  332. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  333. package/dist/shared/foundation/normalize-unknown.js +29 -0
  334. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  335. package/dist/shared/foundation/sdk-logger.js +12 -0
  336. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  337. package/dist/shared/foundation/tx/build-request.js +25 -0
  338. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  339. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  340. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  341. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  342. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  343. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  344. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  345. package/dist/shared/foundation/types/erc20.js +1 -0
  346. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  347. package/dist/shared/foundation/types/holders-maker.js +1 -0
  348. package/dist/shared/foundation/types/index.d.ts +7 -0
  349. package/dist/shared/foundation/types/index.js +1 -0
  350. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  351. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  352. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  353. package/dist/shared/foundation/types/multicall.js +1 -0
  354. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  355. package/dist/shared/foundation/types/private-sale.js +1 -0
  356. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  357. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  358. package/dist/shared/four/tax-token.d.ts +1 -1
  359. package/dist/shared/four/tax-token.js +27 -7
  360. package/dist/shared/index.d.ts +4 -0
  361. package/dist/shared/index.js +4 -0
  362. package/dist/types/distribute.d.ts +72 -0
  363. package/dist/types/distribute.js +1 -0
  364. package/dist/types 2/errors.d.ts +27 -0
  365. package/dist/types 2/errors.js +34 -0
  366. package/dist/utils/airdrop-sweep-types.d.ts +1 -0
  367. package/dist/utils/airdrop-sweep-types.js +1 -0
  368. package/dist/utils/airdrop-sweep.d.ts +4 -76
  369. package/dist/utils/airdrop-sweep.js +38 -52
  370. package/dist/utils/bundle-helpers.d.ts +9 -243
  371. package/dist/utils/bundle-helpers.js +10 -584
  372. package/dist/utils/constants.d.ts +5 -61
  373. package/dist/utils/constants.js +5 -80
  374. package/dist/utils/contract-factory.d.ts +2 -4
  375. package/dist/utils/contract-factory.js +25 -18
  376. package/dist/utils/erc20-types.d.ts +1 -0
  377. package/dist/utils/erc20-types.js +1 -0
  378. package/dist/utils/erc20.d.ts +8 -90
  379. package/dist/utils/erc20.js +94 -153
  380. package/dist/utils/errors.d.ts +10 -22
  381. package/dist/utils/errors.js +61 -79
  382. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  383. package/dist/utils/holders-maker/addresses.js +15 -0
  384. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  385. package/dist/utils/holders-maker/buy-tx.js +278 -0
  386. package/dist/utils/holders-maker/constants.d.ts +6 -0
  387. package/dist/utils/holders-maker/constants.js +7 -0
  388. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  389. package/dist/utils/holders-maker/disperse.js +90 -0
  390. package/dist/utils/holders-maker/routing.d.ts +4 -0
  391. package/dist/utils/holders-maker/routing.js +45 -0
  392. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  393. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  394. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  395. package/dist/utils/holders-maker-helpers.js +9 -0
  396. package/dist/utils/holders-maker-types.d.ts +1 -0
  397. package/dist/utils/holders-maker-types.js +1 -0
  398. package/dist/utils/holders-maker.d.ts +2 -138
  399. package/dist/utils/holders-maker.js +23 -651
  400. package/dist/utils/hop-chains.d.ts +35 -0
  401. package/dist/utils/hop-chains.js +215 -0
  402. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  403. package/dist/utils/lp-inspect-helpers.js +109 -0
  404. package/dist/utils/lp-inspect-types.d.ts +1 -0
  405. package/dist/utils/lp-inspect-types.js +1 -0
  406. package/dist/utils/lp-inspect.d.ts +2 -112
  407. package/dist/utils/lp-inspect.js +63 -195
  408. package/dist/utils/mpcExclusive.d.ts +2 -5
  409. package/dist/utils/mpcExclusive.js +4 -3
  410. package/dist/utils/private-sale-types.d.ts +1 -0
  411. package/dist/utils/private-sale-types.js +1 -0
  412. package/dist/utils/private-sale.d.ts +2 -58
  413. package/dist/utils/private-sale.js +2 -7
  414. package/dist/utils/provider-factory.d.ts +4 -0
  415. package/dist/utils/provider-factory.js +10 -0
  416. package/dist/utils/quote-helpers-types.d.ts +1 -0
  417. package/dist/utils/quote-helpers-types.js +1 -0
  418. package/dist/utils/quote-helpers.d.ts +4 -45
  419. package/dist/utils/quote-helpers.js +15 -65
  420. package/dist/utils/stealth-transfer.d.ts +2 -28
  421. package/dist/utils/stealth-transfer.js +30 -14
  422. package/dist/utils/swap-helpers.d.ts +0 -3
  423. package/dist/utils/swap-helpers.js +6 -9
  424. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  425. package/dist/utils/types/airdrop-sweep.js +1 -0
  426. package/dist/utils/types/contract-factory.d.ts +1 -0
  427. package/dist/utils/types/contract-factory.js +1 -0
  428. package/dist/utils/types/erc20.d.ts +1 -0
  429. package/dist/utils/types/erc20.js +1 -0
  430. package/dist/utils/types/errors.d.ts +1 -0
  431. package/dist/utils/types/errors.js +1 -0
  432. package/dist/utils/types/holders-maker.d.ts +1 -0
  433. package/dist/utils/types/holders-maker.js +1 -0
  434. package/dist/utils/types/hop-chains.d.ts +8 -0
  435. package/dist/utils/types/hop-chains.js +1 -0
  436. package/dist/utils/types/index.d.ts +13 -0
  437. package/dist/utils/types/index.js +1 -0
  438. package/dist/utils/types/lp-inspect.d.ts +1 -0
  439. package/dist/utils/types/lp-inspect.js +1 -0
  440. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  441. package/dist/utils/types/mpc-exclusive.js +1 -0
  442. package/dist/utils/types/private-sale.d.ts +1 -0
  443. package/dist/utils/types/private-sale.js +1 -0
  444. package/dist/utils/types/quote-helpers.d.ts +1 -0
  445. package/dist/utils/types/quote-helpers.js +1 -0
  446. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  447. package/dist/utils/types/stealth-transfer.js +1 -0
  448. package/dist/utils/types/wallet.d.ts +25 -0
  449. package/dist/utils/types/wallet.js +1 -0
  450. package/dist/utils/wallet.d.ts +2 -25
  451. package/dist/utils/wallet.js +9 -10
  452. package/package.json +55 -2
  453. package/src/abis/contracts/TaxToken.json +969 -0
  454. package/src/abis/contracts/TokenManager.json +836 -0
  455. package/src/abis/contracts/TokenManager2.json +136 -0
  456. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  457. /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
  458. /package/dist/{shared 2/flap/portal-bundle-merkle/types.js → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
  459. /package/dist/{shared 2/abis → shared/abis 2}/TaxToken.json +0 -0
  460. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager.json +0 -0
  461. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager2.json +0 -0
  462. /package/dist/{shared 2/abis → shared/abis 2}/TokenManagerHelper3.json +0 -0
  463. /package/dist/{shared 2/abis → shared/abis 2}/common.d.ts +0 -0
  464. /package/dist/{shared 2/abis → shared/abis 2}/common.js +0 -0
  465. /package/dist/{shared 2/abis → shared/abis 2}/index.d.ts +0 -0
  466. /package/dist/{shared 2/abis → shared/abis 2}/index.js +0 -0
  467. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.d.ts +0 -0
  468. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.js +0 -0
  469. /package/dist/{shared 2/clients → shared/clients 2}/club48.d.ts +0 -0
  470. /package/dist/{shared 2/clients → shared/clients 2}/club48.js +0 -0
  471. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.d.ts +0 -0
  472. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.js +0 -0
  473. /package/dist/{shared 2/clients → shared/clients 2}/four.d.ts +0 -0
  474. /package/dist/{shared 2/clients → shared/clients 2}/four.js +0 -0
  475. /package/dist/{shared 2/clients → shared/clients 2}/merkle.d.ts +0 -0
  476. /package/dist/{shared 2/clients → shared/clients 2}/merkle.js +0 -0
  477. /package/dist/{shared 2/flap → shared/flap 2}/__tests__/curve.test.js +0 -0
  478. /package/dist/{shared 2/flap → shared/flap 2}/abi.d.ts +0 -0
  479. /package/dist/{shared 2/flap → shared/flap 2}/abi.js +0 -0
  480. /package/dist/{shared 2/flap → shared/flap 2}/constants.d.ts +0 -0
  481. /package/dist/{shared 2/flap → shared/flap 2}/constants.js +0 -0
  482. /package/dist/{shared 2/flap → shared/flap 2}/curve.d.ts +0 -0
  483. /package/dist/{shared 2/flap → shared/flap 2}/curve.js +0 -0
  484. /package/dist/{shared 2/flap → shared/flap 2}/errors.d.ts +0 -0
  485. /package/dist/{shared 2/flap → shared/flap 2}/errors.js +0 -0
  486. /package/dist/{shared 2/flap → shared/flap 2}/index.d.ts +0 -0
  487. /package/dist/{shared 2/flap → shared/flap 2}/index.js +0 -0
  488. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.d.ts +0 -0
  489. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.js +0 -0
  490. /package/dist/{shared 2/flap → shared/flap 2}/meta.d.ts +0 -0
  491. /package/dist/{shared 2/flap → shared/flap 2}/meta.js +0 -0
  492. /package/dist/{shared 2/flap → shared/flap 2}/permit.d.ts +0 -0
  493. /package/dist/{shared 2/flap → shared/flap 2}/permit.js +0 -0
  494. /package/dist/{shared 2/flap → shared/flap 2}/pinata.d.ts +0 -0
  495. /package/dist/{shared 2/flap → shared/flap 2}/pinata.js +0 -0
  496. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.d.ts +0 -0
  497. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.js +0 -0
  498. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.d.ts +0 -0
  499. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.js +0 -0
  500. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.d.ts +0 -0
  501. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.js +0 -0
  502. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
  503. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.js +0 -0
  504. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.d.ts +0 -0
  505. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.js +0 -0
  506. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
  507. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.js +0 -0
  508. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.d.ts +0 -0
  509. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.js +0 -0
  510. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.d.ts +0 -0
  511. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.js +0 -0
  512. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.d.ts +0 -0
  513. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.js +0 -0
  514. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/types.d.ts +0 -0
  515. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.d.ts +0 -0
  516. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.js +0 -0
  517. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.d.ts +0 -0
  518. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.js +0 -0
  519. /package/dist/{shared 2/flap → shared/flap 2}/portal.d.ts +0 -0
  520. /package/dist/{shared 2/flap → shared/flap 2}/portal.js +0 -0
  521. /package/dist/{shared 2/flap → shared/flap 2}/vanity.d.ts +0 -0
  522. /package/dist/{shared 2/flap → shared/flap 2}/vanity.js +0 -0
  523. /package/dist/{shared 2/flap → shared/flap 2}/vault.d.ts +0 -0
  524. /package/dist/{shared 2/flap → shared/flap 2}/vault.js +0 -0
  525. /package/dist/{shared 2/four → shared/four 2}/index.d.ts +0 -0
  526. /package/dist/{shared 2/four → shared/four 2}/index.js +0 -0
  527. /package/dist/{shared 2/four → shared/four 2}/tax-token.d.ts +0 -0
  528. /package/dist/{shared 2/four → shared/four 2}/tax-token.js +0 -0
  529. /package/dist/{shared 2/index.d.ts → shared/index 2.js} +0 -0
  530. /package/dist/{shared 2/index.js → shared/index.d 2.ts} +0 -0
@@ -0,0 +1,470 @@
1
+ import { ethers, Wallet } from 'ethers';
2
+ import { getOptimizedGasPrice, NonceManager, buildProfitHopTransactions, PROFIT_HOP_COUNT } from '../../../utils/bundle-helpers.js';
3
+ import { BLOCKRAZOR_BUILDER_EOA, calculateTransferFee } from '../../../utils/constants.js';
4
+ import { GAS_LIMITS, CHAINS } from '../../../shared/constants/index.js';
5
+ import { getTxType, getGasPriceConfig, shouldExtractProfit, getProfitRecipient, getBribeAmount } from './config.js';
6
+ // ==================== Gas 常量(使用统一常量) ====================
7
+ const NATIVE_TRANSFER_GAS_LIMIT = GAS_LIMITS.NATIVE_TRANSFER;
8
+ const BRIBE_GAS_LIMIT = GAS_LIMITS.BRIBE;
9
+ import { getErc20DecimalsMerkle as _getErc20DecimalsMerkle, generateHopWallets as _generateHopWallets, normalizeAmounts as _normalizeAmounts, calculateGasLimit as _calculateGasLimit, isNativeTokenAddress as _isNativeTokenAddress } from './internal.js';
10
+ // ==================== 钱包转账按地址收费 ====================
11
+ /**
12
+ * 分发(仅签名版本 - 不依赖 Merkle)
13
+ * ✅ 精简版:只负责签名交易,不提交到 Merkle
14
+ * ✅ 优化版:支持 startNonce 参数避免并行调用时的 nonce 冲突
15
+ */
16
+ export async function disperseWithBundleMerkle(params) {
17
+ const { fromPrivateKey, recipients, amount, amounts, tokenAddress, tokenDecimals, hopCount = 0, hopPrivateKeys, items, config, startNonce } = params;
18
+ // 快速返回空结果
19
+ if (!recipients || recipients.length === 0) {
20
+ return {
21
+ signedTransactions: [],
22
+ hopWallets: undefined
23
+ };
24
+ }
25
+ // 初始化
26
+ const chainIdNum = config.chainId ?? CHAINS.BSC.chainId;
27
+ const chainName = chainIdNum === CHAINS.MONAD.chainId ? 'Monad' : chainIdNum === CHAINS.BSC.chainId ? 'BSC' : `Chain-${chainIdNum}`;
28
+ const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
29
+ chainId: chainIdNum,
30
+ name: chainName
31
+ });
32
+ const mainWallet = new Wallet(fromPrivateKey, provider);
33
+ const isNative = _isNativeTokenAddress(tokenAddress);
34
+ const txType = getTxType(config);
35
+ // ✅ 优化:预处理数据(不需要 RPC)
36
+ const normalizedAmounts = items && items.length > 0
37
+ ? items.map(it => (typeof it.amount === 'bigint' ? it.amount.toString() : String(it.amount)))
38
+ : _normalizeAmounts(recipients, amount, amounts);
39
+ const providedHops = (() => {
40
+ if (hopPrivateKeys && hopPrivateKeys.length > 0) {
41
+ if (hopPrivateKeys.length !== recipients.length) {
42
+ throw new Error(`hopPrivateKeys length (${hopPrivateKeys.length}) must match recipients length (${recipients.length})`);
43
+ }
44
+ return hopPrivateKeys.every(h => h.length === 0) ? null : hopPrivateKeys;
45
+ }
46
+ if (items && items.length > 0) {
47
+ const hops = items.map(it => it.hopPrivateKeys ?? []);
48
+ return hops.every(h => h.length === 0) ? null : hops;
49
+ }
50
+ return null;
51
+ })();
52
+ const hopCountInput = (() => {
53
+ if (items && items.length > 0) {
54
+ const baseArray = Array.isArray(hopCount) ? hopCount : new Array(recipients.length).fill(hopCount);
55
+ return items.map((it, i) => (typeof it.hopCount === 'number' ? it.hopCount : (baseArray[i] ?? 0)));
56
+ }
57
+ return hopCount;
58
+ })();
59
+ const preparedHops = providedHops ?? _generateHopWallets(recipients.length, hopCountInput);
60
+ const hasHops = preparedHops !== null;
61
+ const maxHopCount = hasHops ? Math.max(...preparedHops.map(h => h.length)) : 0;
62
+ const finalGasLimit = _calculateGasLimit(config, isNative, hasHops, maxHopCount);
63
+ const nativeGasLimit = (config.prefer21000ForNative ?? false) ? BRIBE_GAS_LIMIT : finalGasLimit;
64
+ const signedTxs = [];
65
+ const extractProfit = shouldExtractProfit(config);
66
+ const profitAddr = getProfitRecipient();
67
+ let totalProfit = 0n;
68
+ let totalAmountBeforeProfit = 0n;
69
+ let profitHopWallets; // ✅ 收集利润多跳钱包
70
+ // ✅ 优化:并行获取 gasPrice 和 nonces(或使用传入的 startNonce)
71
+ const nonceManager = new NonceManager(provider);
72
+ if (!preparedHops) {
73
+ // ========== 无多跳:直接批量转账 ==========
74
+ // ✅ BSC 链贿赂支持
75
+ const bribeAmount = chainIdNum === CHAINS.BSC.chainId ? getBribeAmount(config) : 0n;
76
+ const needBribeTx = bribeAmount > 0n;
77
+ const extraTxCount = (extractProfit ? 1 : 0) + (needBribeTx ? 1 : 0);
78
+ const totalTxCount = recipients.length + extraTxCount;
79
+ // ✅ 优化:并行获取 gasPrice 和 nonces
80
+ const [gasPrice, nonces] = await Promise.all([
81
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
82
+ startNonce !== undefined
83
+ ? Promise.resolve(Array.from({ length: totalTxCount }, (_, i) => startNonce + i))
84
+ : nonceManager.getNextNonceBatch(mainWallet, totalTxCount)
85
+ ]);
86
+ // ✅ 贿赂交易放在最前面
87
+ let nonceOffset = 0;
88
+ if (needBribeTx) {
89
+ const bribeTx = await mainWallet.signTransaction({
90
+ to: BLOCKRAZOR_BUILDER_EOA,
91
+ value: bribeAmount,
92
+ nonce: nonces[nonceOffset++],
93
+ gasPrice,
94
+ gasLimit: BRIBE_GAS_LIMIT,
95
+ chainId: chainIdNum,
96
+ type: txType
97
+ });
98
+ signedTxs.push(bribeTx);
99
+ }
100
+ if (isNative) {
101
+ // ✅ 原生币:按地址数量收取固定费用,全额转账
102
+ if (extractProfit) {
103
+ totalProfit = calculateTransferFee(chainIdNum, recipients.length);
104
+ }
105
+ const txDataList = recipients.map((to, i) => {
106
+ const originalAmount = ethers.parseEther(normalizedAmounts[i]);
107
+ totalAmountBeforeProfit += originalAmount;
108
+ return { to, value: originalAmount, nonce: nonces[nonceOffset + i] };
109
+ });
110
+ // ✅ 并行签名所有交易
111
+ const txPromises = txDataList.map(({ to, value, nonce }) => mainWallet.signTransaction({
112
+ to,
113
+ value,
114
+ nonce,
115
+ gasPrice,
116
+ gasLimit: nativeGasLimit,
117
+ chainId: chainIdNum,
118
+ type: txType
119
+ }));
120
+ signedTxs.push(...(await Promise.all(txPromises)));
121
+ // ✅ 利润多跳转账(强制 2 跳中转)
122
+ if (extractProfit && totalProfit > 0n) {
123
+ const profitHopResult = await buildProfitHopTransactions({
124
+ provider,
125
+ payerWallet: mainWallet,
126
+ profitAmount: totalProfit,
127
+ profitRecipient: profitAddr,
128
+ hopCount: PROFIT_HOP_COUNT,
129
+ gasPrice,
130
+ chainId: chainIdNum,
131
+ txType,
132
+ startNonce: nonces[nonceOffset + recipients.length]
133
+ });
134
+ signedTxs.push(...profitHopResult.signedTransactions);
135
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
136
+ }
137
+ }
138
+ else {
139
+ // ✅ ERC20:并行获取 decimals(传入 chainIdNum 避免 NETWORK_ERROR)
140
+ const decimals = tokenDecimals ?? (await _getErc20DecimalsMerkle(provider, tokenAddress, chainIdNum));
141
+ const iface = new ethers.Interface(['function transfer(address,uint256) returns (bool)']);
142
+ // ✅ 先计算所有原始金额
143
+ const originalAmounts = [];
144
+ for (let i = 0; i < recipients.length; i++) {
145
+ const originalAmount = ethers.parseUnits(normalizedAmounts[i], decimals);
146
+ originalAmounts.push(originalAmount);
147
+ totalAmountBeforeProfit += originalAmount;
148
+ }
149
+ // ✅ 按地址数量收取固定费用(原生代币)
150
+ let nativeProfitAmount = 0n;
151
+ if (extractProfit) {
152
+ nativeProfitAmount = calculateTransferFee(chainIdNum, recipients.length);
153
+ totalProfit = nativeProfitAmount;
154
+ }
155
+ // ✅ ERC20 全额分发,费用以原生币单独支付
156
+ const txDataList = recipients.map((to, i) => {
157
+ const originalAmount = originalAmounts[i];
158
+ const data = iface.encodeFunctionData('transfer', [to, originalAmount]);
159
+ return { data, nonce: nonces[nonceOffset + i] };
160
+ });
161
+ // ✅ 并行签名所有交易
162
+ const txPromises = txDataList.map(({ data, nonce }) => mainWallet.signTransaction({
163
+ to: tokenAddress,
164
+ data,
165
+ value: 0n,
166
+ nonce,
167
+ gasPrice,
168
+ gasLimit: finalGasLimit,
169
+ chainId: chainIdNum,
170
+ type: txType
171
+ }));
172
+ signedTxs.push(...(await Promise.all(txPromises)));
173
+ // ✅ 费用多跳转账(强制 2 跳中转)
174
+ if (extractProfit && nativeProfitAmount > 0n) {
175
+ const profitHopResult = await buildProfitHopTransactions({
176
+ provider,
177
+ payerWallet: mainWallet,
178
+ profitAmount: nativeProfitAmount,
179
+ profitRecipient: profitAddr,
180
+ hopCount: PROFIT_HOP_COUNT,
181
+ gasPrice,
182
+ chainId: chainIdNum,
183
+ txType,
184
+ startNonce: nonces[nonceOffset + recipients.length]
185
+ });
186
+ signedTxs.push(...profitHopResult.signedTransactions);
187
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
188
+ }
189
+ }
190
+ }
191
+ else {
192
+ // ========== 有多跳:构建跳转链 ==========
193
+ // ✅ BSC 链贿赂支持
194
+ const bribeAmountHop = chainIdNum === CHAINS.BSC.chainId ? getBribeAmount(config) : 0n;
195
+ const needBribeTxHop = bribeAmountHop > 0n;
196
+ // ✅ 优化:并行获取 gasPrice 和 decimals
197
+ const [gasPrice, decimals] = await Promise.all([
198
+ getOptimizedGasPrice(provider, getGasPriceConfig(config)),
199
+ isNative ? Promise.resolve(18) : Promise.resolve(tokenDecimals ?? await _getErc20DecimalsMerkle(provider, tokenAddress, chainIdNum))
200
+ ]);
201
+ const iface = isNative ? null : new ethers.Interface(['function transfer(address,uint256) returns (bool)']);
202
+ // ✅ Gas limit 设置(与 swap.ts 保持一致)
203
+ // - 原生代币转账:使用 GAS_LIMITS.NATIVE_TRANSFER(固定)
204
+ // - ERC20 转账:使用 GAS_LIMITS.ERC20_TRANSFER(固定,因为 gas 波动较大)
205
+ const nativeTransferGasLimit = NATIVE_TRANSFER_GAS_LIMIT;
206
+ const erc20TransferGasLimit = GAS_LIMITS.ERC20_TRANSFER;
207
+ // ✅ 原生代币多跳的 gas 费(每跳需要 21055)
208
+ const nativeHopGasFee = nativeTransferGasLimit * gasPrice;
209
+ // ✅ ERC20 多跳时,中转钱包需要执行 2 笔交易(转 gas + 转 ERC20)
210
+ const erc20HopGasFee = erc20TransferGasLimit * gasPrice;
211
+ const nativeHopGasFeeForErc20 = nativeTransferGasLimit * gasPrice;
212
+ // ✅ 优化:预先计算主钱包需要的总 nonce 数量
213
+ // - 原生代币多跳:主钱包只需要 1 个 nonce(一笔转账包含后续所有 gas)
214
+ // - ERC20 多跳:主钱包需要 2 个 nonce(转 gas + 转 ERC20)
215
+ let mainWalletNonceCount = 0;
216
+ // 贿赂交易需要 1 个额外的 nonce
217
+ if (needBribeTxHop)
218
+ mainWalletNonceCount += 1;
219
+ for (let i = 0; i < recipients.length; i++) {
220
+ const hopChain = preparedHops[i];
221
+ if (hopChain.length === 0) {
222
+ // 无跳转:1 个 nonce
223
+ mainWalletNonceCount += 1;
224
+ }
225
+ else {
226
+ // 有跳转:
227
+ // - Native: 1(一笔转账)
228
+ // - ERC20: 2(转 gas + 转 ERC20)
229
+ mainWalletNonceCount += isNative ? 1 : 2;
230
+ }
231
+ }
232
+ // 利润交易需要额外 1 个 nonce
233
+ if (extractProfit)
234
+ mainWalletNonceCount += 1;
235
+ // ✅ 一次性获取所有主钱包的 nonces
236
+ const allMainNonces = startNonce !== undefined
237
+ ? Array.from({ length: mainWalletNonceCount }, (_, i) => startNonce + i)
238
+ : await nonceManager.getNextNonceBatch(mainWallet, mainWalletNonceCount);
239
+ let mainNonceIdx = 0;
240
+ // ✅ 贿赂交易放在最前面(多跳场景)
241
+ if (needBribeTxHop) {
242
+ const bribeTx = await mainWallet.signTransaction({
243
+ to: BLOCKRAZOR_BUILDER_EOA,
244
+ value: bribeAmountHop,
245
+ nonce: allMainNonces[mainNonceIdx++],
246
+ gasPrice,
247
+ gasLimit: BRIBE_GAS_LIMIT,
248
+ chainId: chainIdNum,
249
+ type: txType
250
+ });
251
+ signedTxs.push(bribeTx);
252
+ }
253
+ const txsToSign = [];
254
+ // ✅ 按地址数量收取固定费用(原生代币),不再扣除转账金额
255
+ if (extractProfit) {
256
+ totalProfit = calculateTransferFee(chainIdNum, recipients.length);
257
+ }
258
+ for (let i = 0; i < recipients.length; i++) {
259
+ const finalRecipient = recipients[i];
260
+ const originalAmountWei = isNative
261
+ ? ethers.parseEther(normalizedAmounts[i])
262
+ : ethers.parseUnits(normalizedAmounts[i], decimals);
263
+ totalAmountBeforeProfit += originalAmountWei;
264
+ const amountWei = originalAmountWei; // 全额转账
265
+ const hopChain = preparedHops[i];
266
+ if (hopChain.length === 0) {
267
+ // 无跳转:直接转账
268
+ const nonce = allMainNonces[mainNonceIdx++];
269
+ if (isNative) {
270
+ txsToSign.push({
271
+ wallet: mainWallet,
272
+ tx: {
273
+ to: finalRecipient,
274
+ value: amountWei,
275
+ nonce,
276
+ gasPrice,
277
+ gasLimit: nativeGasLimit,
278
+ chainId: chainIdNum,
279
+ type: txType
280
+ }
281
+ });
282
+ }
283
+ else {
284
+ const data = iface.encodeFunctionData('transfer', [finalRecipient, amountWei]);
285
+ txsToSign.push({
286
+ wallet: mainWallet,
287
+ tx: {
288
+ to: tokenAddress,
289
+ data,
290
+ value: 0n,
291
+ nonce,
292
+ gasPrice,
293
+ gasLimit: finalGasLimit,
294
+ chainId: chainIdNum,
295
+ type: txType
296
+ }
297
+ });
298
+ }
299
+ continue;
300
+ }
301
+ // 有跳转
302
+ // ✅ 支持 string 和 GeneratedWallet 两种类型
303
+ const fullChain = [mainWallet, ...hopChain.map(w => new Wallet(typeof w === 'string' ? w : w.privateKey, provider))];
304
+ const addresses = [...fullChain.map(w => w.address), finalRecipient];
305
+ if (isNative) {
306
+ // ========== 原生代币多跳:gas 包含在转账金额中逐层传递 ==========
307
+ for (let j = 0; j < addresses.length - 1; j++) {
308
+ const fromWallet = fullChain[j];
309
+ const toAddress = addresses[j + 1];
310
+ const nonce = j === 0 ? allMainNonces[mainNonceIdx++] : 0;
311
+ const remainingHops = addresses.length - 2 - j;
312
+ const additionalGas = nativeHopGasFee * BigInt(remainingHops);
313
+ const transferValue = amountWei + additionalGas;
314
+ txsToSign.push({
315
+ wallet: fromWallet,
316
+ tx: {
317
+ to: toAddress,
318
+ value: transferValue,
319
+ nonce,
320
+ gasPrice,
321
+ gasLimit: nativeTransferGasLimit,
322
+ chainId: chainIdNum,
323
+ type: txType
324
+ }
325
+ });
326
+ }
327
+ }
328
+ else {
329
+ // ========== ERC20 多跳:gas 也逐层传递(保护隐私)==========
330
+ // 计算每个中转钱包需要的 gas(从后往前)
331
+ // - 最后一个中转钱包:只需要 ERC20 转账的 gas
332
+ // - 其他中转钱包:需要 转 gas 的 gas + ERC20 转账的 gas + 后续所有的 gas
333
+ const hopGasNeeds = [];
334
+ for (let j = hopChain.length - 1; j >= 0; j--) {
335
+ if (j === hopChain.length - 1) {
336
+ // 最后一个中转钱包:只需要 ERC20 转账的 gas
337
+ hopGasNeeds.unshift(erc20HopGasFee);
338
+ }
339
+ else {
340
+ // 其他中转钱包:转 gas(21000) + 转 ERC20 + 后续的 gas
341
+ const nextHopGas = hopGasNeeds[0];
342
+ hopGasNeeds.unshift(nativeHopGasFeeForErc20 + erc20HopGasFee + nextHopGas);
343
+ }
344
+ }
345
+ // 第一步:主钱包给第一个中转钱包转 gas(包含所有后续的 gas)
346
+ const totalGasForFirstHop = hopGasNeeds[0];
347
+ txsToSign.push({
348
+ wallet: mainWallet,
349
+ tx: {
350
+ to: fullChain[1].address,
351
+ value: totalGasForFirstHop,
352
+ nonce: allMainNonces[mainNonceIdx++],
353
+ gasPrice,
354
+ gasLimit: nativeTransferGasLimit,
355
+ chainId: chainIdNum,
356
+ type: txType
357
+ }
358
+ });
359
+ // 第二步:主钱包给第一个中转钱包转 ERC20
360
+ const mainToFirstHopData = iface.encodeFunctionData('transfer', [fullChain[1].address, amountWei]);
361
+ txsToSign.push({
362
+ wallet: mainWallet,
363
+ tx: {
364
+ to: tokenAddress,
365
+ data: mainToFirstHopData,
366
+ value: 0n,
367
+ nonce: allMainNonces[mainNonceIdx++],
368
+ gasPrice,
369
+ gasLimit: erc20TransferGasLimit,
370
+ chainId: chainIdNum,
371
+ type: txType
372
+ }
373
+ });
374
+ // 第三步:中转钱包逐层传递(gas 和 ERC20)
375
+ for (let j = 1; j < fullChain.length; j++) {
376
+ const fromWallet = fullChain[j];
377
+ const toAddress = addresses[j + 1]; // 下一个地址(可能是中转钱包或最终接收者)
378
+ const isLastHop = j === fullChain.length - 1;
379
+ if (!isLastHop) {
380
+ // 非最后一个中转钱包:先转 gas 给下一个中转钱包
381
+ const gasToTransfer = hopGasNeeds[j]; // 下一个中转钱包需要的 gas
382
+ txsToSign.push({
383
+ wallet: fromWallet,
384
+ tx: {
385
+ to: toAddress,
386
+ value: gasToTransfer,
387
+ nonce: 0, // 中转钱包的第一笔交易
388
+ gasPrice,
389
+ gasLimit: nativeTransferGasLimit,
390
+ chainId: chainIdNum,
391
+ type: txType
392
+ }
393
+ });
394
+ // 再转 ERC20
395
+ const erc20Data = iface.encodeFunctionData('transfer', [toAddress, amountWei]);
396
+ txsToSign.push({
397
+ wallet: fromWallet,
398
+ tx: {
399
+ to: tokenAddress,
400
+ data: erc20Data,
401
+ value: 0n,
402
+ nonce: 1, // 中转钱包的第二笔交易
403
+ gasPrice,
404
+ gasLimit: erc20TransferGasLimit,
405
+ chainId: chainIdNum,
406
+ type: txType
407
+ }
408
+ });
409
+ }
410
+ else {
411
+ // 最后一个中转钱包:只转 ERC20 给最终接收者
412
+ const erc20Data = iface.encodeFunctionData('transfer', [toAddress, amountWei]);
413
+ txsToSign.push({
414
+ wallet: fromWallet,
415
+ tx: {
416
+ to: tokenAddress,
417
+ data: erc20Data,
418
+ value: 0n,
419
+ nonce: 0, // 最后一个中转钱包只有一笔交易
420
+ gasPrice,
421
+ gasLimit: erc20TransferGasLimit,
422
+ chainId: chainIdNum,
423
+ type: txType
424
+ }
425
+ });
426
+ }
427
+ }
428
+ }
429
+ }
430
+ // ✅ 并行签名所有交易
431
+ const signedTxsResult = await Promise.all(txsToSign.map(({ wallet, tx }) => wallet.signTransaction(tx)));
432
+ signedTxs.push(...signedTxsResult);
433
+ // ✅ 利润多跳转账(强制 2 跳中转)
434
+ if (extractProfit && totalProfit > 0n) {
435
+ const profitNonce = allMainNonces[mainNonceIdx];
436
+ const profitHopResult = await buildProfitHopTransactions({
437
+ provider,
438
+ payerWallet: mainWallet,
439
+ profitAmount: totalProfit,
440
+ profitRecipient: profitAddr,
441
+ hopCount: PROFIT_HOP_COUNT,
442
+ gasPrice,
443
+ chainId: chainIdNum,
444
+ txType,
445
+ startNonce: profitNonce
446
+ });
447
+ signedTxs.push(...profitHopResult.signedTransactions);
448
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
449
+ }
450
+ }
451
+ // ✅ 简化返回:只返回签名交易、多跳钱包和元数据
452
+ return {
453
+ signedTransactions: signedTxs,
454
+ hopWallets: preparedHops || undefined,
455
+ profitHopWallets, // ✅ 返回利润多跳钱包
456
+ metadata: extractProfit ? {
457
+ totalAmount: ethers.formatEther(totalAmountBeforeProfit),
458
+ profitAmount: ethers.formatEther(totalProfit),
459
+ profitRecipient: profitAddr,
460
+ recipientCount: recipients.length,
461
+ isNative,
462
+ tokenAddress: isNative ? undefined : tokenAddress
463
+ } : undefined
464
+ };
465
+ }
466
+ /**
467
+ * 归集(仅签名版本 - 不依赖 Merkle)
468
+ * ✅ 精简版:只负责签名交易,不提交到 Merkle
469
+ * ✅ 优化版:支持 startNonce 参数避免并行调用时的 nonce 冲突
470
+ */
@@ -5,13 +5,13 @@
5
5
  export * from './config.js';
6
6
  export * from './types.js';
7
7
  export { createTokenWithBundleBuyMerkle, batchBuyWithBundleMerkle, batchSellWithBundleMerkle } from './core.js';
8
- export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle } from './private.js';
8
+ export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle, } from './private.js';
9
9
  export { disperseWithBundleMerkle, sweepWithBundleMerkle, pairwiseTransferWithBundleMerkle } from './utils.js';
10
- export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch } from './pancake-proxy.js';
11
- export { approveFourTokenManagerBatch, type ApproveFourTokenManagerBatchParams, type ApproveFourTokenManagerBatchResult } from './approve-tokenmanager.js';
10
+ export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch, } from './pancake-proxy.js';
11
+ export { approveFourTokenManagerBatch, type ApproveFourTokenManagerBatchParams, type ApproveFourTokenManagerBatchResult, } from './approve-tokenmanager.js';
12
12
  export { submitBundleToMerkle, submitMultipleBundles, submitMultipleBundlesParallel, type MerkleSubmitConfig, type SubmitBundleResult, submitBundleToBlockRazor, submitMultipleBundlesToBlockRazor, submitMultipleBundlesToBlockRazorParallel, type BlockRazorSubmitConfig, type BlockRazorSubmitResult, submitDirectToRpc, submitDirectToRpcSequential, // ✅ 顺序广播并等待确认(用于多跳)
13
13
  submitDirectToRpcSequentialNoWait, // ✅ 顺序广播但不等待确认(用于 AA handleOps + tail)
14
- submitDirectToRpcParallel, type DirectSubmitConfig, type DirectSubmitResult, type DirectTxResult } from './submit.js';
15
- export { fourBundleBuyFirstMerkle, type FourBundleBuyFirstSignParams, type FourBuyFirstSignConfig, type FourBuyFirstResult } from './swap-buy-first.js';
14
+ submitDirectToRpcParallel, type DirectSubmitConfig, type DirectSubmitResult, type DirectTxResult, } from './submit.js';
15
+ export { fourBundleBuyFirstMerkle, type FourBundleBuyFirstSignParams, type FourBuyFirstSignConfig, type FourBuyFirstResult, } from './swap-buy-first.js';
16
16
  export { fourBundleSwapMerkle, fourBatchSwapMerkle, fourQuickBatchSwapMerkle, type FourSwapSignConfig, type FourSwapConfig, type FourBundleSwapSignParams, type FourBundleSwapParams, type FourSwapResult, type FourBatchSwapSignParams, type FourBatchSwapResult, type FourQuickBatchSwapSignParams, type FourQuickBatchSwapResult, } from './swap.js';
17
- export { submitDirectToRpcSmart, } from './submit.js';
17
+ export { submitDirectToRpcSmart } from './submit.js';
@@ -8,13 +8,13 @@ export * from './types.js';
8
8
  // 核心交易方法
9
9
  export { createTokenWithBundleBuyMerkle, batchBuyWithBundleMerkle, batchSellWithBundleMerkle } from './core.js';
10
10
  // 私有交易方法
11
- export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle } from './private.js';
11
+ export { fourPrivateBuyMerkle, fourPrivateSellMerkle, fourBatchPrivateBuyMerkle, fourBatchPrivateSellMerkle, } from './private.js';
12
12
  // 工具方法
13
13
  export { disperseWithBundleMerkle, sweepWithBundleMerkle, pairwiseTransferWithBundleMerkle } from './utils.js';
14
14
  // PancakeSwapProxy 代理交易方法
15
- export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch } from './pancake-proxy.js';
15
+ export { fourPancakeProxyBatchBuyMerkle, fourPancakeProxyBatchSellMerkle, approveFourPancakeProxy, approveFourPancakeProxyBatch, } from './pancake-proxy.js';
16
16
  // TokenManager 授权方法
17
- export { approveFourTokenManagerBatch } from './approve-tokenmanager.js';
17
+ export { approveFourTokenManagerBatch, } from './approve-tokenmanager.js';
18
18
  // Bundle提交方法(服务器端使用)
19
19
  export {
20
20
  // Merkle 提交方法
@@ -24,10 +24,10 @@ submitBundleToBlockRazor, submitMultipleBundlesToBlockRazor, submitMultipleBundl
24
24
  // ✅ Monad 等链的逐笔广播方法
25
25
  submitDirectToRpc, submitDirectToRpcSequential, // ✅ 顺序广播并等待确认(用于多跳)
26
26
  submitDirectToRpcSequentialNoWait, // ✅ 顺序广播但不等待确认(用于 AA handleOps + tail)
27
- submitDirectToRpcParallel } from './submit.js';
27
+ submitDirectToRpcParallel, } from './submit.js';
28
28
  // 先买后卖换手方法
29
- export { fourBundleBuyFirstMerkle } from './swap-buy-first.js';
29
+ export { fourBundleBuyFirstMerkle, } from './swap-buy-first.js';
30
30
  // 换手方法
31
31
  export { fourBundleSwapMerkle, fourBatchSwapMerkle, fourQuickBatchSwapMerkle, } from './swap.js';
32
32
  // 智能广播方法
33
- export { submitDirectToRpcSmart, } from './submit.js';
33
+ export { submitDirectToRpcSmart } from './submit.js';
@@ -1,52 +1,4 @@
1
- import { JsonRpcProvider } from 'ethers';
2
- import type { AmountLike } from './types.js';
3
- import type { GeneratedWallet } from '../../../utils/wallet.js';
4
1
  /**
5
- * 获取 ERC20 代币精度(带缓存)
6
- * ✅ 优化:避免每次调用都获取 network,直接使用传入的 chainId
2
+ * @deprecated 实现已迁移至 bundle-core/internal.ts,此处仅 re-export 保持 import 路径不变。
7
3
  */
8
- export declare function getErc20DecimalsMerkle(provider: JsonRpcProvider, token: string, chainId?: number): Promise<number>;
9
- /**
10
- * ✅ 生成多跳中间钱包(返回完整钱包信息:地址 + 私钥)
11
- */
12
- export declare function generateHopWallets(recipientCount: number, hopCount: number | number[]): GeneratedWallet[][] | null;
13
- export declare function normalizeAmounts(recipients: string[], amount?: AmountLike, amounts?: AmountLike[]): string[];
14
- /**
15
- * 批量获取余额(原生代币或 ERC20)
16
- * ✅ 优化:原生代币也使用 Multicall3 批量获取,减少 RPC 调用
17
- */
18
- export declare function batchGetBalances(provider: JsonRpcProvider, addresses: string[], tokenAddress?: string): Promise<bigint[]>;
19
- /**
20
- * 通过模拟交易获取 ERC20 转账的最小 Gas Limit
21
- * ✅ 使用 eth_estimateGas 预估实际需要的 gas,然后加一个小的缓冲量
22
- *
23
- * @param provider - Provider 实例
24
- * @param tokenAddress - ERC20 代币地址
25
- * @param from - 发送方地址
26
- * @param to - 接收方地址
27
- * @param amount - 转账金额(wei)
28
- * @param bufferPercent - 缓冲百分比(默认 5%)
29
- * @returns 预估的 gas limit
30
- */
31
- export declare function estimateErc20TransferGas(provider: JsonRpcProvider, tokenAddress: string, from: string, to: string, amount: bigint, bufferPercent?: number): Promise<bigint>;
32
- /**
33
- * 批量预估多个 ERC20 转账的 Gas Limit
34
- * ✅ 选取最大值作为统一的 gas limit(确保所有转账都能成功)
35
- */
36
- export declare function estimateMaxErc20TransferGas(provider: JsonRpcProvider, tokenAddress: string, from: string, recipients: string[], amounts: bigint[], bufferPercent?: number): Promise<bigint>;
37
- /**
38
- * 计算 Gas Limit
39
- * - 原生代币转账:
40
- * - BSC: 21000 gas(固定)
41
- * - XLayer: 50000 gas(EIP-7702 授权地址需要更多 gas)
42
- * - ERC20 标准 transfer:约 45000-55000 gas,使用 55000 作为安全值
43
- *
44
- * ✅ 优化:降低 ERC20 gas limit,减少中转钱包 BNB 残留
45
- * ✅ XLayer 特殊处理:EIP-7702 授权的地址接收 OKB 时会触发 delegate 代码,需要更多 gas
46
- */
47
- export declare function calculateGasLimit(config: {
48
- gasLimit?: number | bigint;
49
- chainId?: number;
50
- gasLimitMultiplier?: number;
51
- }, isNative: boolean, hasHops: boolean, hopCount?: number): bigint;
52
- export declare function isNativeTokenAddress(tokenAddress?: string): boolean;
4
+ export { getErc20Decimals, getErc20DecimalsMerkle, generateHopWallets, normalizeAmounts, batchGetBalances, estimateErc20TransferGas, estimateMaxErc20TransferGas, calculateGasLimit, isNativeTokenAddress, } from '../../../bundle-core/internal.js';