four-flap-meme-sdk 2.2.2 → 2.2.4

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 +96 -277
  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 +107 -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 +88 -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 +80 -0
  339. package/dist/shared/flap/portal-create-token.js +257 -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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ /** Multicall3 `aggregate3` 单条返回(与 IERC20 balanceOf / getEthBalance 解码路径一致) */
2
+ export type Aggregate3CallResult = {
3
+ success: boolean;
4
+ returnData: string;
5
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 私募转账签名 — 类型定义
3
+ */
4
+ import type { GeneratedWallet } from '../../../utils/wallet.js';
5
+ export interface PrivateSaleSignConfig {
6
+ rpcUrl: string;
7
+ chainId?: number;
8
+ gasLimit?: number;
9
+ gasPriceGwei?: number;
10
+ bribeAmount?: number;
11
+ extractProfit?: boolean;
12
+ profitBps?: number;
13
+ }
14
+ export interface PrivateSaleTransferParams {
15
+ senderPrivateKey: string;
16
+ recipient: string;
17
+ amount: number;
18
+ }
19
+ export interface BatchPrivateSaleParams {
20
+ transfers: PrivateSaleTransferParams[];
21
+ config: PrivateSaleSignConfig;
22
+ }
23
+ export interface PrivateSaleResult {
24
+ signedTransactions: string[];
25
+ profitHopWallets?: GeneratedWallet[];
26
+ metadata: {
27
+ totalCount: number;
28
+ bribeCount: number;
29
+ transferCount: number;
30
+ profitCount: number;
31
+ totalAmountWei: string;
32
+ totalProfitWei: string;
33
+ bribeAmountWei: string;
34
+ };
35
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { JsonRpcProvider } from 'ethers';
2
+ export type SupportedChain = 'BSC' | 'MONAD' | 'XLAYER' | 'ENI';
3
+ export interface QuoteParams {
4
+ provider: JsonRpcProvider;
5
+ tokenIn: string;
6
+ tokenOut: string;
7
+ amountIn: bigint;
8
+ chain: string;
9
+ version?: 'v2' | 'v3';
10
+ fee?: number;
11
+ routerOverride?: string;
12
+ }
13
+ export interface QuoteResult {
14
+ amountOut: bigint;
15
+ path?: string[];
16
+ fee?: number;
17
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import TaxTokenAbi from '../abis/TaxToken.json';
1
+ import TaxTokenAbi from '../../abis/contracts/TaxToken.json';
2
2
  /** TaxToken 转账模式 */
3
3
  export declare enum TransferMode {
4
4
  /** 正常转账模式 - 允许所有转账 */
@@ -5,7 +5,7 @@
5
5
  * 基于 Four.meme 官方文档: API-Contract-TaxToken.md
6
6
  */
7
7
  import { ethers, Contract, Wallet, JsonRpcProvider } from 'ethers';
8
- import TaxTokenAbi from '../abis/TaxToken.json' with { type: 'json' };
8
+ import TaxTokenAbi from '../../abis/contracts/TaxToken.json' with { type: 'json' };
9
9
  // ============================================================================
10
10
  // 常量
11
11
  // ============================================================================
@@ -123,11 +123,28 @@ export async function getTaxTokenInfo(tokenAddress, rpcUrl) {
123
123
  const token = new Contract(tokenAddress, TAX_TOKEN_READ_ABI, provider);
124
124
  // 批量查询所有状态(利用 Promise.all 减少 RPC 调用轮次)
125
125
  const [feeRate, rateFounder, rateHolder, rateBurn, rateLiquidity, founder, quote, pair, mode, minDispatch, minShare, totalShares, feePerShare, feeAccumulated, feeDispatched, feeFounderVal, feeHolderVal, feeBurnVal, feeLiquidityVal, quoteFounderVal, quoteHolderVal, quoteClaimed,] = await Promise.all([
126
- token.feeRate(), token.rateFounder(), token.rateHolder(), token.rateBurn(), token.rateLiquidity(),
127
- token.founder(), token.quote(), token.pair(), token._mode(), token.minDispatch(), token.minShare(),
128
- token.totalShares(), token.feePerShare(), token.feeAccumulated(), token.feeDispatched(),
129
- token.feeFounder(), token.feeHolder(), token.feeBurn(), token.feeLiquidity(),
130
- token.quoteFounder(), token.quoteHolder(), token.quoteClaimed(),
126
+ token.feeRate(),
127
+ token.rateFounder(),
128
+ token.rateHolder(),
129
+ token.rateBurn(),
130
+ token.rateLiquidity(),
131
+ token.founder(),
132
+ token.quote(),
133
+ token.pair(),
134
+ token._mode(),
135
+ token.minDispatch(),
136
+ token.minShare(),
137
+ token.totalShares(),
138
+ token.feePerShare(),
139
+ token.feeAccumulated(),
140
+ token.feeDispatched(),
141
+ token.feeFounder(),
142
+ token.feeHolder(),
143
+ token.feeBurn(),
144
+ token.feeLiquidity(),
145
+ token.quoteFounder(),
146
+ token.quoteHolder(),
147
+ token.quoteClaimed(),
131
148
  ]);
132
149
  return {
133
150
  config: {
@@ -281,7 +298,10 @@ export function validateFourTokenTaxInfo(info) {
281
298
  // 四项比例之和必须为 100
282
299
  const rateSum = info.burnRate + info.divideRate + info.liquidityRate + info.recipientRate;
283
300
  if (rateSum !== 100) {
284
- return { valid: false, error: `burnRate + divideRate + liquidityRate + recipientRate 必须等于 100,当前: ${rateSum}` };
301
+ return {
302
+ valid: false,
303
+ error: `burnRate + divideRate + liquidityRate + recipientRate 必须等于 100,当前: ${rateSum}`,
304
+ };
285
305
  }
286
306
  // 每项比例 >= 0
287
307
  if (info.burnRate < 0 || info.divideRate < 0 || info.liquidityRate < 0 || info.recipientRate < 0) {
@@ -7,4 +7,10 @@
7
7
  * - four: Four.meme 工具(TaxToken 等)
8
8
  */
9
9
  export * from './constants/index.js';
10
+ /** 错误规范化、可选 Logger(与根 `index` 导出同源) */
11
+ export * as foundation from './foundation/index.js';
12
+ /** HTTP / Bundle / BlockRazor 等(亦支持子路径 `four-flap-meme-sdk/clients`) */
13
+ export * as clients from './clients/index.js';
10
14
  export * as FourUtils from './four/index.js';
15
+ /** Flap 链标识(与 `./constants` 同源) */
16
+ export type { FlapChain } from './flap/portal.js';
@@ -7,4 +7,8 @@
7
7
  * - four: Four.meme 工具(TaxToken 等)
8
8
  */
9
9
  export * from './constants/index.js';
10
+ /** 错误规范化、可选 Logger(与根 `index` 导出同源) */
11
+ export * as foundation from './foundation/index.js';
12
+ /** HTTP / Bundle / BlockRazor 等(亦支持子路径 `four-flap-meme-sdk/clients`) */
13
+ export * as clients from './clients/index.js';
10
14
  export * as FourUtils from './four/index.js';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 统一 SDK 错误代码
3
+ *
4
+ * 合并 Four.meme (parseFourError) 和 Flap Protocol (parseFlapError) 的错误代码。
5
+ */
6
+ export declare enum SdkErrorCode {
7
+ UNKNOWN_ERROR = "UNKNOWN_ERROR",
8
+ INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE",
9
+ SLIPPAGE_EXCEEDED = "SLIPPAGE_EXCEEDED",
10
+ TRANSACTION_FAILED = "TRANSACTION_FAILED",
11
+ TOKEN_ALREADY_EXISTS = "TOKEN_ALREADY_EXISTS",
12
+ TOKEN_NOT_FOUND = "TOKEN_NOT_FOUND",
13
+ TOKEN_NOT_TRADABLE = "TOKEN_NOT_TRADABLE",
14
+ ALREADY_ON_DEX = "ALREADY_ON_DEX",
15
+ FOUR_GWEI_PRECISION = "FOUR_GWEI_PRECISION",
16
+ FOUR_ZERO_ADDRESS = "FOUR_ZERO_ADDRESS",
17
+ FOUR_SLIPPAGE = "FOUR_SLIPPAGE",
18
+ FOUR_INSUFFICIENT_FUNDS = "FOUR_INSUFFICIENT_FUNDS",
19
+ FOUR_FEE_TOO_HIGH = "FOUR_FEE_TOO_HIGH",
20
+ FOUR_ORDER_TOO_SMALL = "FOUR_ORDER_TOO_SMALL",
21
+ INVALID_AMOUNT = "INVALID_AMOUNT",
22
+ INVALID_TOKEN = "INVALID_TOKEN",
23
+ INVALID_QUOTE_TOKEN = "INVALID_QUOTE_TOKEN",
24
+ TAX_RATE_TOO_HIGH = "TAX_RATE_TOO_HIGH",
25
+ PERMIT_EXPIRED = "PERMIT_EXPIRED",
26
+ PERMIT_INVALID = "PERMIT_INVALID"
27
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 统一 SDK 错误代码
3
+ *
4
+ * 合并 Four.meme (parseFourError) 和 Flap Protocol (parseFlapError) 的错误代码。
5
+ */
6
+ export var SdkErrorCode;
7
+ (function (SdkErrorCode) {
8
+ // Generic
9
+ SdkErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
10
+ // Transaction / Bundle
11
+ SdkErrorCode["INSUFFICIENT_BALANCE"] = "INSUFFICIENT_BALANCE";
12
+ SdkErrorCode["SLIPPAGE_EXCEEDED"] = "SLIPPAGE_EXCEEDED";
13
+ SdkErrorCode["TRANSACTION_FAILED"] = "TRANSACTION_FAILED";
14
+ // Token state
15
+ SdkErrorCode["TOKEN_ALREADY_EXISTS"] = "TOKEN_ALREADY_EXISTS";
16
+ SdkErrorCode["TOKEN_NOT_FOUND"] = "TOKEN_NOT_FOUND";
17
+ SdkErrorCode["TOKEN_NOT_TRADABLE"] = "TOKEN_NOT_TRADABLE";
18
+ SdkErrorCode["ALREADY_ON_DEX"] = "ALREADY_ON_DEX";
19
+ // Four.meme specific
20
+ SdkErrorCode["FOUR_GWEI_PRECISION"] = "FOUR_GWEI_PRECISION";
21
+ SdkErrorCode["FOUR_ZERO_ADDRESS"] = "FOUR_ZERO_ADDRESS";
22
+ SdkErrorCode["FOUR_SLIPPAGE"] = "FOUR_SLIPPAGE";
23
+ SdkErrorCode["FOUR_INSUFFICIENT_FUNDS"] = "FOUR_INSUFFICIENT_FUNDS";
24
+ SdkErrorCode["FOUR_FEE_TOO_HIGH"] = "FOUR_FEE_TOO_HIGH";
25
+ SdkErrorCode["FOUR_ORDER_TOO_SMALL"] = "FOUR_ORDER_TOO_SMALL";
26
+ // Validation
27
+ SdkErrorCode["INVALID_AMOUNT"] = "INVALID_AMOUNT";
28
+ SdkErrorCode["INVALID_TOKEN"] = "INVALID_TOKEN";
29
+ SdkErrorCode["INVALID_QUOTE_TOKEN"] = "INVALID_QUOTE_TOKEN";
30
+ SdkErrorCode["TAX_RATE_TOO_HIGH"] = "TAX_RATE_TOO_HIGH";
31
+ // Permit
32
+ SdkErrorCode["PERMIT_EXPIRED"] = "PERMIT_EXPIRED";
33
+ SdkErrorCode["PERMIT_INVALID"] = "PERMIT_INVALID";
34
+ })(SdkErrorCode || (SdkErrorCode = {}));
@@ -1,80 +1,8 @@
1
- import type { SoulPointSignatureMode, VNormalizationMode } from '../shared/clients/club48.js';
2
- /** Bundle 提交结果(完整版 - 包含 bundleUuid) */
3
- export type BundleSubmitResult = {
4
- bundleUuid: string;
5
- signedTxs: string[];
6
- };
7
- /** ✅ 签名结果(精简版 - 仅返回签名交易) */
8
- export type SignedTransactionsResult = {
9
- signedTransactions: string[];
10
- };
11
- /** ✅ 分散参数(完整版 - 包含 Bundle 提交) */
12
- export type DisperseParams = {
13
- rpcUrl: string;
14
- chainId: number;
15
- fromPrivateKey: string;
16
- recipients: string[];
17
- amount?: string;
18
- amounts?: string[];
19
- tokenAddress?: string;
20
- bundleEndpoint?: string;
21
- gasPriceGwei?: string;
22
- transferGasLimit?: bigint;
23
- nativeGasLimit?: bigint;
24
- blockOffset?: number;
25
- spMode?: SoulPointSignatureMode;
26
- spPrivateKey?: string;
27
- spVMode?: VNormalizationMode;
28
- };
29
- /** ✅ 分散参数(精简版 - 仅签名) */
30
- export type DisperseSignParams = {
31
- rpcUrl: string;
32
- chainId: number;
33
- fromPrivateKey: string;
34
- recipients: string[];
35
- amount?: string;
36
- amounts?: string[];
37
- tokenAddress?: string;
38
- gasPriceGwei?: string;
39
- transferGasLimit?: bigint;
40
- nativeGasLimit?: bigint;
41
- };
42
- export declare function disperseWithBundle(params: DisperseSignParams): Promise<SignedTransactionsResult>;
43
- /** ✅ 归集参数(完整版 - 包含 Bundle 提交) */
44
- export type SweepParams = {
45
- rpcUrl: string;
46
- chainId: number;
47
- sourcePrivateKeys: string[];
48
- target: string;
49
- ratioPct?: number;
50
- amount?: string;
51
- tokenAddress?: string;
52
- bundleEndpoint?: string;
53
- gasPriceGwei?: string;
54
- transferGasLimit?: bigint;
55
- nativeGasLimit?: bigint;
56
- blockOffset?: number;
57
- skipIfInsufficient?: boolean;
58
- spMode?: SoulPointSignatureMode;
59
- spPrivateKey?: string;
60
- spVMode?: VNormalizationMode;
61
- };
62
- /** ✅ 归集参数(精简版 - 仅签名) */
63
- export type SweepSignParams = {
64
- rpcUrl: string;
65
- chainId: number;
66
- sourcePrivateKeys: string[];
67
- target: string;
68
- ratioPct?: number;
69
- amount?: string;
70
- tokenAddress?: string;
71
- gasPriceGwei?: string;
72
- transferGasLimit?: bigint;
73
- nativeGasLimit?: bigint;
74
- skipIfInsufficient?: boolean;
75
- };
1
+ import type { AirdropDisperseSignParams, SignedTransactionsResult, AirdropSweepSignParams } from './types/airdrop-sweep.js';
2
+ export declare function disperseWithBundle(params: AirdropDisperseSignParams): Promise<SignedTransactionsResult>;
76
3
  /**
77
4
  * 归集(仅签名版本 - 不提交 Bundle)
78
5
  * ✅ 精简版:只负责签名交易,不提交
79
6
  */
80
- export declare function sweepWithBundle(params: SweepSignParams): Promise<SignedTransactionsResult>;
7
+ export declare function sweepWithBundle(params: AirdropSweepSignParams): Promise<SignedTransactionsResult>;
8
+ export type { BundleSubmitResult, SignedTransactionsResult, AirdropDisperseParams, AirdropDisperseSignParams, AirdropSweepParams, AirdropSweepSignParams, DisperseParams, DisperseSignParams, SweepParams, SweepSignParams, } from './types/airdrop-sweep.js';
@@ -1,34 +1,15 @@
1
1
  import { ethers, JsonRpcProvider } from 'ethers';
2
- import { GAS_LIMITS } from '../shared/constants/index.js';
3
- async function getErc20Decimals(provider, token) {
4
- try {
5
- const erc20 = new ethers.Contract(token, ['function decimals() view returns (uint8)'], provider);
6
- const d = await erc20.decimals();
7
- if (!Number.isFinite(d) || d < 0 || d > 36)
8
- return 18;
9
- return d;
10
- }
11
- catch {
12
- return 18;
13
- }
14
- }
15
- /**
16
- * 分散(仅签名版本 - 不提交 Bundle)
17
- * ✅ 精简版:只负责签名交易,不提交
18
- */
19
- /** ENI Chain ID — EIP-1559 (type 2) */
20
- const ENI_CHAIN_ID = 173;
21
- function getTxType(chainId) {
22
- return chainId === ENI_CHAIN_ID ? 2 : 0;
23
- }
24
- function buildGasFields(txType, gasPrice) {
25
- if (txType === 2) {
26
- return { type: 2, maxFeePerGas: gasPrice, maxPriorityFeePerGas: gasPrice / 10n || 1n };
27
- }
28
- return { type: 0, gasPrice };
2
+ import { GAS_LIMITS, isEniChain } from '../shared/constants/index.js';
3
+ import { buildGasFields } from '../shared/foundation/gas/bundle-gas.js';
4
+ import { getErc20Decimals } from '../bundle-core/internal.js';
5
+ function getTxTypeForChain(chainId) {
6
+ return isEniChain(chainId) ? 2 : 0;
29
7
  }
8
+ // ==========================================
9
+ // 通用:原生/代币 一键分散 & 一键归集(Bundle)
10
+ // ==========================================
30
11
  export async function disperseWithBundle(params) {
31
- const { rpcUrl, chainId, fromPrivateKey, recipients, amount, amounts, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE } = params;
12
+ const { rpcUrl, chainId, fromPrivateKey, recipients, amount, amounts, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE, } = params;
32
13
  if (!recipients || recipients.length === 0) {
33
14
  return { signedTransactions: [] };
34
15
  }
@@ -36,22 +17,22 @@ export async function disperseWithBundle(params) {
36
17
  const wallet = new ethers.Wallet(fromPrivateKey, provider);
37
18
  const gasPrice = gasPriceGwei && gasPriceGwei.trim().length > 0
38
19
  ? ethers.parseUnits(gasPriceGwei, 'gwei')
39
- : (await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei');
20
+ : ((await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei'));
40
21
  // 规范化 amounts:优先使用数组;否则将单值扩展为数组
41
22
  const useAmountsArray = Array.isArray(amounts) && amounts.length > 0;
42
23
  const effAmounts = useAmountsArray
43
24
  ? amounts
44
- : (typeof amount === 'string' && amount.trim().length > 0
25
+ : typeof amount === 'string' && amount.trim().length > 0
45
26
  ? new Array(recipients.length).fill(amount)
46
- : []);
27
+ : [];
47
28
  if (effAmounts.length !== recipients.length) {
48
29
  throw new Error('recipients and amounts length mismatch');
49
30
  }
50
- let isNative = !tokenAddress || tokenAddress.trim().length === 0;
31
+ const isNative = !tokenAddress || tokenAddress.trim().length === 0;
51
32
  const signedTxs = [];
52
33
  if (isNative) {
53
34
  const baseNonce = await provider.getTransactionCount(wallet.address, 'pending');
54
- const txType = getTxType(chainId);
35
+ const txType = getTxTypeForChain(chainId);
55
36
  const signedTxList = await Promise.all(recipients.map(async (to, i) => {
56
37
  const amountWei = ethers.parseEther(effAmounts[i]);
57
38
  return wallet.signTransaction({
@@ -69,10 +50,10 @@ export async function disperseWithBundle(params) {
69
50
  // ✅ 并行获取 decimals 和 nonce
70
51
  const [decimals, baseNonce] = await Promise.all([
71
52
  getErc20Decimals(provider, tokenAddress),
72
- provider.getTransactionCount(wallet.address, 'pending')
53
+ provider.getTransactionCount(wallet.address, 'pending'),
73
54
  ]);
74
55
  const iface = new ethers.Interface(['function transfer(address,uint256) returns (bool)']);
75
- const txType = getTxType(chainId);
56
+ const txType = getTxTypeForChain(chainId);
76
57
  const signedTxList = await Promise.all(recipients.map(async (to, i) => {
77
58
  const amountWei = ethers.parseUnits(effAmounts[i], decimals);
78
59
  const data = iface.encodeFunctionData('transfer', [to, amountWei]);
@@ -96,15 +77,15 @@ export async function disperseWithBundle(params) {
96
77
  * ✅ 精简版:只负责签名交易,不提交
97
78
  */
98
79
  export async function sweepWithBundle(params) {
99
- const { rpcUrl, chainId, sourcePrivateKeys, target, ratioPct, amount, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE, skipIfInsufficient = true } = params;
80
+ const { rpcUrl, chainId, sourcePrivateKeys, target, ratioPct, amount, tokenAddress, gasPriceGwei, transferGasLimit = GAS_LIMITS.ERC20_TRANSFER, nativeGasLimit = GAS_LIMITS.BRIBE, skipIfInsufficient = true, } = params;
100
81
  if (!sourcePrivateKeys || sourcePrivateKeys.length === 0) {
101
82
  return { signedTransactions: [] };
102
83
  }
103
84
  const provider = new JsonRpcProvider(rpcUrl, chainId);
104
85
  const gasPrice = gasPriceGwei && gasPriceGwei.trim().length > 0
105
86
  ? ethers.parseUnits(gasPriceGwei, 'gwei')
106
- : (await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei');
107
- let isNative = !tokenAddress || tokenAddress.trim().length === 0;
87
+ : ((await provider.getFeeData()).gasPrice ?? ethers.parseUnits('1', 'gwei'));
88
+ const isNative = !tokenAddress || tokenAddress.trim().length === 0;
108
89
  const signedTxs = [];
109
90
  const clampRatio = (n) => {
110
91
  if (typeof n !== 'number' || !Number.isFinite(n))
@@ -118,18 +99,18 @@ export async function sweepWithBundle(params) {
118
99
  const ratio = clampRatio(ratioPct);
119
100
  if (isNative) {
120
101
  // ✅ 并行处理所有源钱包
121
- const wallets = sourcePrivateKeys.map(pk => new ethers.Wallet(pk, provider));
102
+ const wallets = sourcePrivateKeys.map((pk) => new ethers.Wallet(pk, provider));
122
103
  const gasCost = nativeGasLimit * gasPrice;
123
104
  // 并行获取所有余额和 nonce
124
105
  const [balances, nonces] = await Promise.all([
125
- Promise.all(wallets.map(w => provider.getBalance(w.address).catch(() => 0n))),
126
- Promise.all(wallets.map(w => provider.getTransactionCount(w.address, 'pending')))
106
+ Promise.all(wallets.map((w) => provider.getBalance(w.address).catch(() => 0n))),
107
+ Promise.all(wallets.map((w) => provider.getTransactionCount(w.address, 'pending'))),
127
108
  ]);
128
109
  // 计算每个钱包的发送金额
129
- const sendAmounts = balances.map(bal => {
110
+ const sendAmounts = balances.map((bal) => {
130
111
  if (ratio !== undefined) {
131
112
  const want = (bal * BigInt(ratio)) / 100n;
132
- const maxSendable = bal > gasCost ? (bal - gasCost) : 0n;
113
+ const maxSendable = bal > gasCost ? bal - gasCost : 0n;
133
114
  return want > maxSendable ? maxSendable : want;
134
115
  }
135
116
  else if (amount && amount.trim().length > 0) {
@@ -140,9 +121,9 @@ export async function sweepWithBundle(params) {
140
121
  }
141
122
  return 0n;
142
123
  });
143
- const txType = getTxType(chainId);
144
- const validIndices = sendAmounts.map((amt, i) => amt > 0n ? i : -1).filter(i => i >= 0);
145
- const signedTxList = await Promise.all(validIndices.map(i => wallets[i].signTransaction({
124
+ const txType = getTxTypeForChain(chainId);
125
+ const validIndices = sendAmounts.map((amt, i) => (amt > 0n ? i : -1)).filter((i) => i >= 0);
126
+ const signedTxList = await Promise.all(validIndices.map((i) => wallets[i].signTransaction({
146
127
  to: target,
147
128
  value: sendAmounts[i],
148
129
  nonce: nonces[i],
@@ -153,8 +134,11 @@ export async function sweepWithBundle(params) {
153
134
  signedTxs.push(...signedTxList);
154
135
  }
155
136
  else {
156
- const wallets = sourcePrivateKeys.map(pk => new ethers.Wallet(pk, provider));
157
- const iface = new ethers.Interface(['function balanceOf(address) view returns (uint256)', 'function transfer(address,uint256) returns (bool)']);
137
+ const wallets = sourcePrivateKeys.map((pk) => new ethers.Wallet(pk, provider));
138
+ const iface = new ethers.Interface([
139
+ 'function balanceOf(address) view returns (uint256)',
140
+ 'function transfer(address,uint256) returns (bool)',
141
+ ]);
158
142
  // ✅ 并行获取 decimals、所有代币余额和 nonce
159
143
  const [decimals, balanceResults, nonces] = await Promise.all([
160
144
  getErc20Decimals(provider, tokenAddress),
@@ -162,17 +146,18 @@ export async function sweepWithBundle(params) {
162
146
  try {
163
147
  const balData = iface.encodeFunctionData('balanceOf', [w.address]);
164
148
  const balRaw = await provider.call({ to: tokenAddress, data: balData });
165
- const [bal] = iface.decodeFunctionResult('balanceOf', balRaw);
149
+ const decoded = iface.decodeFunctionResult('balanceOf', balRaw);
150
+ const bal = decoded[0];
166
151
  return bal;
167
152
  }
168
153
  catch {
169
154
  return 0n;
170
155
  }
171
156
  })),
172
- Promise.all(wallets.map(w => provider.getTransactionCount(w.address, 'pending')))
157
+ Promise.all(wallets.map((w) => provider.getTransactionCount(w.address, 'pending'))),
173
158
  ]);
174
159
  // 计算每个钱包的发送金额
175
- const sendAmounts = balanceResults.map(bal => {
160
+ const sendAmounts = balanceResults.map((bal) => {
176
161
  if (ratio !== undefined) {
177
162
  return (bal * BigInt(ratio)) / 100n;
178
163
  }
@@ -184,15 +169,17 @@ export async function sweepWithBundle(params) {
184
169
  return 0n;
185
170
  });
186
171
  // 过滤余额不足的钱包
187
- const validIndices = sendAmounts.map((amt, i) => {
172
+ const validIndices = sendAmounts
173
+ .map((amt, i) => {
188
174
  if (amt <= 0n)
189
175
  return -1;
190
176
  if (skipIfInsufficient && balanceResults[i] < amt)
191
177
  return -1;
192
178
  return i;
193
- }).filter(i => i >= 0);
194
- const txType = getTxType(chainId);
195
- const signedTxList = await Promise.all(validIndices.map(i => {
179
+ })
180
+ .filter((i) => i >= 0);
181
+ const txType = getTxTypeForChain(chainId);
182
+ const signedTxList = await Promise.all(validIndices.map((i) => {
196
183
  const data = iface.encodeFunctionData('transfer', [target, sendAmounts[i]]);
197
184
  return wallets[i].signTransaction({
198
185
  to: tokenAddress,