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
@@ -13,6 +13,8 @@ async function parseJsonSafe(resp) {
13
13
  return JSON.parse(text);
14
14
  }
15
15
  export class EmitServiceClient {
16
+ baseUrl;
17
+ headers;
16
18
  constructor(config) {
17
19
  this.baseUrl = trimTrailingSlash(config.baseUrl);
18
20
  this.headers = config.headers;
@@ -87,14 +87,26 @@ export type CreateTokenReq = {
87
87
  funGroup: false;
88
88
  clickFun: false;
89
89
  };
90
+ export type FourJsonValue = string | number | boolean | null | FourJsonValue[] | {
91
+ [key: string]: FourJsonValue;
92
+ };
93
+ export type FourPublicConfig = {
94
+ [key: string]: FourJsonValue;
95
+ };
96
+ export type FourTokenDetail = {
97
+ [key: string]: FourJsonValue;
98
+ } & {
99
+ address?: string;
100
+ name?: string;
101
+ symbol?: string;
102
+ };
90
103
  export type CreateTokenResp = {
91
104
  createArg: string;
92
105
  signature: string;
93
106
  tokenAddr?: string;
94
107
  address?: string;
95
108
  token?: string;
96
- [key: string]: any;
97
- };
109
+ } & Record<string, string | undefined>;
98
110
  export declare class FourClient {
99
111
  private baseUrl;
100
112
  private uploadUrls;
@@ -124,9 +136,12 @@ export declare class FourClient {
124
136
  private isCorsOrNetworkError;
125
137
  private getFilenameFromBlob;
126
138
  createToken(accessToken: string, req: CreateTokenReq): Promise<CreateTokenResp>;
127
- getPublicConfig(): Promise<any>;
128
- getTokenByAddress(address: string, accessToken?: string): Promise<any>;
129
- getTokensByAddresses(addresses: string[], accessToken?: string): Promise<any[]>;
130
- getTokenById(id: string | number, accessToken?: string): Promise<any>;
139
+ getPublicConfig(): Promise<FourPublicConfig>;
140
+ getTokenByAddress(address: string, accessToken?: string): Promise<FourTokenDetail>;
141
+ getTokensByAddresses(addresses: string[], accessToken?: string): Promise<(FourTokenDetail | {
142
+ address: string;
143
+ error: string;
144
+ })[]>;
145
+ getTokenById(id: string | number, accessToken?: string): Promise<FourTokenDetail>;
131
146
  }
132
147
  export declare function buildLoginMessage(nonce: string): string;
@@ -1,3 +1,4 @@
1
+ import { getErrorMessageFromUnknown } from '../foundation/index.js';
1
2
  // ============================================================================
2
3
  // 图片上传缓存(按内容哈希去重,同一张图片只上传一次)
3
4
  // ✅ 使用 localStorage 持久化,刷新页面 / 重启浏览器后缓存仍然有效
@@ -38,7 +39,9 @@ function saveCache() {
38
39
  return;
39
40
  const cache = loadCache();
40
41
  const obj = {};
41
- cache.forEach((v, k) => { obj[k] = v; });
42
+ cache.forEach((v, k) => {
43
+ obj[k] = v;
44
+ });
42
45
  localStorage.setItem(UPLOAD_CACHE_KEY, JSON.stringify(obj));
43
46
  }
44
47
  catch {
@@ -72,7 +75,7 @@ async function hashBlob(blob) {
72
75
  const buffer = await blob.arrayBuffer();
73
76
  const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);
74
77
  const hashArray = Array.from(new Uint8Array(hashBuffer));
75
- return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
78
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
76
79
  }
77
80
  /** IP 限流错误码 */
78
81
  const RATE_LIMIT_CODE = -1038;
@@ -84,6 +87,8 @@ const RATE_LIMIT_CODE = -1038;
84
87
  */
85
88
  const FOUR_MEME_OFFICIAL_API = 'https://four.meme/meme-api';
86
89
  export class FourClient {
90
+ baseUrl;
91
+ uploadUrls;
87
92
  constructor(cfg) {
88
93
  // 默认使用 Cloudflare Workers 代理,已配置 CORS,浏览器可直接使用
89
94
  this.baseUrl = cfg?.baseUrl || 'https://bscfourapi.emit.tools';
@@ -135,7 +140,6 @@ export class FourClient {
135
140
  const hash = await hashBlob(file);
136
141
  const cached = getCachedUrl(hash);
137
142
  if (cached) {
138
- console.log(`[FourClient] 图片命中缓存,跳过上传 (hash: ${hash.slice(0, 12)}...)`);
139
143
  return cached;
140
144
  }
141
145
  const finalFilename = filename || this.getFilenameFromBlob(file);
@@ -148,22 +152,20 @@ export class FourClient {
148
152
  const imgUrl = await this.doUpload(baseUrl, accessToken, file, finalFilename);
149
153
  // 上传成功,写入持久化缓存(localStorage)
150
154
  setCachedUrl(hash, imgUrl);
151
- if (i > 0) {
152
- console.log(`[FourClient] 使用${isOfficial ? '官方直连' : '备用'}端点上传成功: ${baseUrl}`);
153
- }
154
155
  return imgUrl;
155
156
  }
156
157
  catch (e) {
157
- lastError = e;
158
+ const err = e instanceof Error ? e : new Error(getErrorMessageFromUnknown(e));
159
+ lastError = err;
158
160
  const canRetry = i < this.uploadUrls.length - 1;
159
- if (this.isRateLimitError(e) && canRetry) {
161
+ if (this.isRateLimitError(err) && canRetry) {
160
162
  // IP 限流 → 切下一个端点
161
163
  const nextUrl = this.uploadUrls[i + 1];
162
164
  const nextLabel = nextUrl === FOUR_MEME_OFFICIAL_API ? '官方直连' : `备用端点 #${i + 2}`;
163
165
  console.warn(`[FourClient] 端点 ${baseUrl} 触发 IP 限流(100次/天),切换到${nextLabel}...`);
164
166
  continue;
165
167
  }
166
- if (this.isCorsOrNetworkError(e) && canRetry) {
168
+ if (this.isCorsOrNetworkError(err) && canRetry) {
167
169
  // CORS/网络错误(常见于浏览器直连官方 API)→ 跳过,继续尝试下一个
168
170
  console.warn(`[FourClient] 端点 ${baseUrl} 请求失败(${isOfficial ? 'CORS限制' : '网络错误'}),跳过`);
169
171
  continue;
@@ -177,9 +179,11 @@ export class FourClient {
177
179
  if (isRateLimit) {
178
180
  throw new Error(`图片上传失败:所有端点均触发 IP 限流(每IP每天100次)。` +
179
181
  `请等待次日重置,或在 FourConfig.uploadFallbackUrls 中添加不同 IP 的备用代理。` +
180
- `\n原始错误: ${lastError.message}`);
182
+ `\n原始错误: ${getErrorMessageFromUnknown(lastError)}`);
181
183
  }
182
- throw lastError || new Error('upload failed: all endpoints exhausted');
184
+ if (lastError !== null && lastError !== undefined)
185
+ throw lastError;
186
+ throw new Error('upload failed: all endpoints exhausted');
183
187
  }
184
188
  /**
185
189
  * 执行单次上传请求
@@ -194,9 +198,9 @@ export class FourClient {
194
198
  });
195
199
  const j = await r.json();
196
200
  if (j.code !== '0' && j.code !== 0) {
197
- const err = new Error(`upload failed: ${JSON.stringify(j)}`);
198
- err.apiCode = typeof j.code === 'string' ? parseInt(j.code, 10) : j.code;
199
- throw err;
201
+ const uploadErr = new Error(`upload failed: ${JSON.stringify(j)}`);
202
+ uploadErr.apiCode = typeof j.code === 'string' ? parseInt(j.code, 10) : Number(j.code);
203
+ throw uploadErr;
200
204
  }
201
205
  return j.data; // imgUrl
202
206
  }
@@ -204,12 +208,13 @@ export class FourClient {
204
208
  * 判断是否为 IP 限流错误(code: -1038)
205
209
  */
206
210
  isRateLimitError(e) {
207
- if (e?.apiCode === RATE_LIMIT_CODE)
211
+ if (e !== null &&
212
+ typeof e === 'object' &&
213
+ 'apiCode' in e &&
214
+ e.apiCode === RATE_LIMIT_CODE) {
208
215
  return true;
209
- // 兼容:从 message 中检测
210
- if (typeof e?.message === 'string' && e.message.includes('-1038'))
211
- return true;
212
- return false;
216
+ }
217
+ return getErrorMessageFromUnknown(e).includes('-1038');
213
218
  }
214
219
  /**
215
220
  * 判断是否为 CORS 或网络错误
@@ -218,7 +223,7 @@ export class FourClient {
218
223
  isCorsOrNetworkError(e) {
219
224
  if (e instanceof TypeError)
220
225
  return true; // fetch CORS / network failure
221
- const msg = e?.message?.toLowerCase?.() || '';
226
+ const msg = getErrorMessageFromUnknown(e).toLowerCase();
222
227
  return msg.includes('failed to fetch') || msg.includes('network') || msg.includes('cors');
223
228
  }
224
229
  getFilenameFromBlob(blob) {
@@ -247,7 +252,7 @@ export class FourClient {
247
252
  }
248
253
  async getPublicConfig() {
249
254
  const r = await fetch(`${this.baseUrl}/v1/public/config`);
250
- return await r.json();
255
+ return (await r.json());
251
256
  }
252
257
  async getTokenByAddress(address, accessToken) {
253
258
  const r = await fetch(`${this.baseUrl}/v1/private/token/get?address=${address}`, {
@@ -257,12 +262,12 @@ export class FourClient {
257
262
  if (j.code && j.code !== '0' && j.code !== 0) {
258
263
  throw new Error(`getTokenByAddress failed: ${JSON.stringify(j)}`);
259
264
  }
260
- return j.data ?? j;
265
+ return (j.data ?? j);
261
266
  }
262
267
  async getTokensByAddresses(addresses, accessToken) {
263
268
  if (!Array.isArray(addresses) || addresses.length === 0)
264
269
  return [];
265
- const tasks = addresses.map((addr) => this.getTokenByAddress(addr, accessToken).catch((e) => ({ address: addr, error: String(e) })));
270
+ const tasks = addresses.map((addr) => this.getTokenByAddress(addr, accessToken).catch((e) => ({ address: addr, error: getErrorMessageFromUnknown(e) })));
266
271
  return await Promise.all(tasks);
267
272
  }
268
273
  async getTokenById(id, accessToken) {
@@ -273,7 +278,7 @@ export class FourClient {
273
278
  if (j.code && j.code !== '0' && j.code !== 0) {
274
279
  throw new Error(`getTokenById failed: ${JSON.stringify(j)}`);
275
280
  }
276
- return j.data ?? j;
281
+ return (j.data ?? j);
277
282
  }
278
283
  }
279
284
  export function buildLoginMessage(nonce) {
@@ -0,0 +1,8 @@
1
+ /**
2
+ * HTTP / Bundle 客户端统一出口(不替代根包的扁平别名,仅供子路径导入)
3
+ */
4
+ export { FourClient, buildLoginMessage, type FourConfig, type GenerateNonceReq, type LoginReq, type CreateTokenReq, type CreateTokenResp, type FourTokenTaxInfo, } from './four.js';
5
+ export { Club48Client, sendBatchPrivateTransactions, sendBackrunBundle, type BundleParams, type BundleStatus, type Club48Config, } from './club48.js';
6
+ export { MerkleClient, createMerkleClient, type MerkleConfig, type BundleParams as MerkleBundleParams, type SendBundleOptions, type BundleResult, type TransactionResult, } from './merkle.js';
7
+ export { BlockRazorClient, createBlockRazorClient, BLOCKRAZOR_BUILDER_EOA, type BlockRazorConfig, type BlockRazorBundleParams, type SendBundleOptions as BlockRazorSendBundleOptions, type BundleResult as BlockRazorBundleResult, type TransactionResult as BlockRazorTransactionResult, type IncentiveTransactionParams, } from './blockrazor.js';
8
+ export { EmitServiceClient, submitToEmitServiceBlockRazor, type EmitServiceClientConfig, type EmitServiceSubmitRequest, type EmitServiceSubmitResponse, type EmitServiceSubmitResponseData, type EmitServiceRouteConfigResponse, } from './emitservice.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * HTTP / Bundle 客户端统一出口(不替代根包的扁平别名,仅供子路径导入)
3
+ */
4
+ export { FourClient, buildLoginMessage, } from './four.js';
5
+ export { Club48Client, sendBatchPrivateTransactions, sendBackrunBundle, } from './club48.js';
6
+ export { MerkleClient, createMerkleClient, } from './merkle.js';
7
+ export { BlockRazorClient, createBlockRazorClient, BLOCKRAZOR_BUILDER_EOA, } from './blockrazor.js';
8
+ export { EmitServiceClient, submitToEmitServiceBlockRazor, } from './emitservice.js';
@@ -22,14 +22,19 @@
22
22
  */
23
23
  import { JsonRpcProvider, Transaction } from 'ethers';
24
24
  import { CHAINS } from '../constants/index.js';
25
+ import { getErrorMessageFromUnknown } from '../foundation/index.js';
25
26
  /**
26
27
  * Merkle 客户端
27
28
  */
28
29
  export class MerkleClient {
30
+ provider;
31
+ chainId;
32
+ chainName;
33
+ // ✅ 区块号缓存(减少 RPC 调用)
34
+ // 注意:TTL 设为 1 秒,确保区块号尽可能新鲜,减少 "Missed inclusion" 风险
35
+ blockNumberCache = null;
36
+ static BLOCK_CACHE_TTL_MS = 1000; // 1秒缓存(BSC 约 3 秒出块,ETH 约 12 秒)
29
37
  constructor(config) {
30
- // ✅ 区块号缓存(减少 RPC 调用)
31
- // 注意:TTL 设为 1 秒,确保区块号尽可能新鲜,减少 "Missed inclusion" 风险
32
- this.blockNumberCache = null;
33
38
  this.chainId = config.chainId;
34
39
  this.chainName = config.chainId === CHAINS.BSC.chainId ? 'bsc' : 'ethereum';
35
40
  // ✅ 修复:移除弃用的 mempool.merkle.io RPC,使用公共 RPC 作为默认值
@@ -78,23 +83,18 @@ export class MerkleClient {
78
83
  * 获取网络状态(用于 Bundle 参数优化)
79
84
  */
80
85
  async getNetworkStatus() {
81
- const [currentBlock, feeData] = await Promise.all([
82
- this.getBlockNumber(),
83
- this.getFeeData()
84
- ]);
86
+ const [currentBlock, feeData] = await Promise.all([this.getBlockNumber(), this.getFeeData()]);
85
87
  // 动态获取 gas price,并计算建议的最小值
86
88
  const baseGasPrice = feeData.gasPrice || feeData.maxFeePerGas || 3000000000n;
87
89
  // 建议至少提高 80% 以确保交易被打包
88
90
  const suggestedMinGasPrice = (baseGasPrice * 180n) / 100n;
89
91
  // BSC 平均 3 秒,Ethereum 平均 12 秒
90
- const avgBlockTime = this.chainId === CHAINS.BSC.chainId
91
- ? CHAINS.BSC.blockTime / 1000
92
- : CHAINS.ETHEREUM.blockTime / 1000;
92
+ const avgBlockTime = this.chainId === CHAINS.BSC.chainId ? CHAINS.BSC.blockTime / 1000 : CHAINS.ETHEREUM.blockTime / 1000;
93
93
  return {
94
94
  currentBlock,
95
95
  gasPrice: baseGasPrice,
96
96
  suggestedMinGasPrice,
97
- avgBlockTime
97
+ avgBlockTime,
98
98
  };
99
99
  }
100
100
  /**
@@ -139,9 +139,7 @@ export class MerkleClient {
139
139
  throw new Error('Invalid bundle result format');
140
140
  }
141
141
  catch (error) {
142
- // 增强错误信息
143
- const errorMsg = error.message || String(error);
144
- throw new Error(`Send bundle failed: ${errorMsg}`);
142
+ throw new Error(`Send bundle failed: ${getErrorMessageFromUnknown(error)}`);
145
143
  }
146
144
  }
147
145
  /**
@@ -172,7 +170,7 @@ export class MerkleClient {
172
170
  if (targetBlock <= currentBlock) {
173
171
  if (autoRetry && attempt < maxRetries) {
174
172
  attempt++;
175
- await new Promise(resolve => setTimeout(resolve, 300)); // 短暂延迟
173
+ await new Promise((resolve) => setTimeout(resolve, 300)); // 短暂延迟
176
174
  continue;
177
175
  }
178
176
  throw new Error(`Target block ${targetBlock} has already passed (current block: ${currentBlock})`);
@@ -194,7 +192,7 @@ export class MerkleClient {
194
192
  maxTimestamp: options.maxTimestamp,
195
193
  });
196
194
  // ✅ 优化:并行提取交易哈希(map 比 for 循环更高效)
197
- const txHashes = options.transactions.map(rawTx => {
195
+ const txHashes = options.transactions.map((rawTx) => {
198
196
  try {
199
197
  return Transaction.from(rawTx).hash || '';
200
198
  }
@@ -215,10 +213,8 @@ export class MerkleClient {
215
213
  if (autoRetry && attempt < maxRetries) {
216
214
  attempt++;
217
215
  // 等待一个区块时间再重试
218
- const blockTime = this.chainId === CHAINS.BSC.chainId
219
- ? CHAINS.BSC.blockTime
220
- : CHAINS.ETHEREUM.blockTime;
221
- await new Promise(resolve => setTimeout(resolve, blockTime));
216
+ const blockTime = this.chainId === CHAINS.BSC.chainId ? CHAINS.BSC.blockTime : CHAINS.ETHEREUM.blockTime;
217
+ await new Promise((resolve) => setTimeout(resolve, blockTime));
222
218
  continue;
223
219
  }
224
220
  // 没有重试或已达最大重试次数
@@ -226,7 +222,10 @@ export class MerkleClient {
226
222
  }
227
223
  }
228
224
  // 如果执行到这里,说明所有重试都失败了
229
- throw lastError || new Error('Bundle submission failed after all retries');
225
+ if (lastError !== null && lastError !== undefined) {
226
+ throw lastError;
227
+ }
228
+ throw new Error('Bundle submission failed after all retries');
230
229
  }
231
230
  /**
232
231
  * 等待 Bundle 中的交易确认
@@ -257,7 +256,7 @@ export class MerkleClient {
257
256
  const costEth = Number(costWei) / 1e18;
258
257
  gasCost = costEth.toFixed(8); // 增加精度到 8 位小数
259
258
  }
260
- catch (error) {
259
+ catch {
261
260
  // 如果计算溢出,使用字符串处理
262
261
  const costWei = receipt.gasUsed * receipt.gasPrice;
263
262
  gasCost = (Number(costWei / 1000000000n) / 1e9).toFixed(8);
@@ -278,7 +277,7 @@ export class MerkleClient {
278
277
  index,
279
278
  hash,
280
279
  success: false,
281
- error: error.message,
280
+ error: getErrorMessageFromUnknown(error),
282
281
  };
283
282
  }
284
283
  });
@@ -351,7 +350,6 @@ export class MerkleClient {
351
350
  */
352
351
  async waitForBlock(targetBlock, maxAttempts = 10, intervalMs = 1000) {
353
352
  let attempts = 0;
354
- let lastError = null;
355
353
  while (attempts < maxAttempts) {
356
354
  try {
357
355
  const currentBlock = await this.getBlockNumber();
@@ -366,32 +364,27 @@ export class MerkleClient {
366
364
  return false;
367
365
  }
368
366
  }
369
- catch (error) {
370
- lastError = error;
371
- // 继续重试
367
+ catch {
368
+ // RPC 瞬时失败:继续下一轮轮询
372
369
  }
373
370
  // 等待下一次检查
374
- await new Promise(resolve => setTimeout(resolve, intervalMs));
371
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
375
372
  attempts++;
376
373
  }
377
- // 达到最大尝试次数
378
- if (lastError) {
379
- }
380
374
  return false;
381
375
  }
382
376
  /**
383
377
  * 获取当前 Provider 的统计信息(用于调试)
384
378
  */
385
379
  getProviderInfo() {
380
+ const rpcConnection = this.provider._getConnection?.();
386
381
  return {
387
382
  chainId: this.chainId,
388
383
  chainName: this.chainName,
389
- // @ts-ignore - 访问私有属性用于调试
390
- rpcUrl: this.provider._getConnection?.().url || 'unknown',
384
+ rpcUrl: rpcConnection?.url ?? 'unknown',
391
385
  };
392
386
  }
393
387
  }
394
- MerkleClient.BLOCK_CACHE_TTL_MS = 1000; // 1秒缓存(BSC 约 3 秒出块,ETH 约 12 秒)
395
388
  /**
396
389
  * 创建 Merkle 客户端的便捷函数
397
390
  */
@@ -127,7 +127,7 @@ export declare const ENI_SPENDERS: {
127
127
  */
128
128
  export declare function getEniSpenders(mode?: boolean | 'all'): string[];
129
129
  export type ChainAddresses = keyof typeof ADDRESSES;
130
- export type AddressKey<C extends ChainAddresses> = keyof typeof ADDRESSES[C];
130
+ export type AddressKey<C extends ChainAddresses> = keyof (typeof ADDRESSES)[C];
131
131
  /**
132
132
  * 获取指定链的合约地址
133
133
  */
@@ -192,12 +192,21 @@ export const ENI_SPENDERS = {
192
192
  */
193
193
  export function getEniSpenders(mode = false) {
194
194
  if (mode === 'all' && ENI_SPENDERS.BATCH_ROUTER) {
195
- return [ENI_SPENDERS.DIRECT.DAOAAS_PORTAL, ENI_SPENDERS.DIRECT.DSWAP_V2_ROUTER, ENI_SPENDERS.DIRECT.IROSWAP_V2_ROUTER, ENI_SPENDERS.BATCH_ROUTER];
195
+ return [
196
+ ENI_SPENDERS.DIRECT.DAOAAS_PORTAL,
197
+ ENI_SPENDERS.DIRECT.DSWAP_V2_ROUTER,
198
+ ENI_SPENDERS.DIRECT.IROSWAP_V2_ROUTER,
199
+ ENI_SPENDERS.BATCH_ROUTER,
200
+ ];
196
201
  }
197
202
  if (mode === true && ENI_SPENDERS.BATCH_ROUTER) {
198
203
  return [ENI_SPENDERS.BATCH_ROUTER];
199
204
  }
200
- return [ENI_SPENDERS.DIRECT.DAOAAS_PORTAL, ENI_SPENDERS.DIRECT.DSWAP_V2_ROUTER, ENI_SPENDERS.DIRECT.IROSWAP_V2_ROUTER];
205
+ return [
206
+ ENI_SPENDERS.DIRECT.DAOAAS_PORTAL,
207
+ ENI_SPENDERS.DIRECT.DSWAP_V2_ROUTER,
208
+ ENI_SPENDERS.DIRECT.IROSWAP_V2_ROUTER,
209
+ ];
201
210
  }
202
211
  // ============================================================================
203
212
  // 工具函数
@@ -107,7 +107,7 @@ export declare const CHAINS: {
107
107
  };
108
108
  export declare const CHAIN_ID_MAP: Record<string, number>;
109
109
  export type ChainKey = keyof typeof CHAINS;
110
- export type ChainConfig = typeof CHAINS[ChainKey];
110
+ export type ChainConfig = (typeof CHAINS)[ChainKey];
111
111
  /**
112
112
  * 根据 chainId 获取链配置
113
113
  */
@@ -132,7 +132,7 @@ export const CHAIN_ID_MAP = {
132
132
  * 根据 chainId 获取链配置
133
133
  */
134
134
  export function getChainById(chainId) {
135
- return Object.values(CHAINS).find(c => c.chainId === chainId);
135
+ return Object.values(CHAINS).find((c) => c.chainId === chainId);
136
136
  }
137
137
  /**
138
138
  * 根据 chainId 获取链名称
@@ -63,7 +63,7 @@ export declare const V3_FEE_TIERS: {
63
63
  readonly HIGH: 10000;
64
64
  };
65
65
  export type GasLimitKey = keyof typeof GAS_LIMITS;
66
- export type V3FeeTier = typeof V3_FEE_TIERS[keyof typeof V3_FEE_TIERS];
66
+ export type V3FeeTier = (typeof V3_FEE_TIERS)[keyof typeof V3_FEE_TIERS];
67
67
  /**
68
68
  * 根据链和交易类型计算 gas limit
69
69
  */
@@ -90,9 +90,7 @@ export function calculateGasLimit(chainId, isNative, hasHops = false, hopCount =
90
90
  }
91
91
  // 有多跳时,基础 gas + 每跳额外 gas
92
92
  if (hasHops && hopCount > 0) {
93
- const hopGas = isNative
94
- ? GAS_LIMITS.NATIVE_TRANSFER
95
- : GAS_LIMITS.ERC20_TRANSFER;
93
+ const hopGas = isNative ? GAS_LIMITS.NATIVE_TRANSFER : GAS_LIMITS.ERC20_TRANSFER;
96
94
  return GAS_LIMITS.TRADE + hopGas * BigInt(hopCount);
97
95
  }
98
96
  // 普通转账
@@ -108,9 +106,7 @@ export function calculateGasLimit(chainId, isNative, hasHops = false, hopCount =
108
106
  */
109
107
  export function getTransferGasLimit(chainId, isNative) {
110
108
  if (isNative) {
111
- return chainId === CHAINS.XLAYER.chainId
112
- ? GAS_LIMITS.XLAYER_NATIVE_TRANSFER
113
- : GAS_LIMITS.NATIVE_TRANSFER;
109
+ return chainId === CHAINS.XLAYER.chainId ? GAS_LIMITS.XLAYER_NATIVE_TRANSFER : GAS_LIMITS.NATIVE_TRANSFER;
114
110
  }
115
111
  return GAS_LIMITS.ERC20_TRANSFER;
116
112
  }
@@ -10,5 +10,8 @@
10
10
  */
11
11
  export { CHAINS, CHAIN_ID_MAP, getChainById, getChainName, getDefaultRpcUrl, isKnownChain, isBscChain, isXLayerChain, isMonadChain, isEniChain, getConfirmationTimeout, type ChainKey, type ChainConfig, } from './chains.js';
12
12
  export { GAS_LIMITS, GAS_CONFIG, V3_FEE_TIERS, calculateGasLimit, getTransferGasLimit, type GasLimitKey, type V3FeeTier, } from './gas.js';
13
+ export { QUOTE_CONFIG, QUOTE_V3_FEE_TIERS, type QuoteConfigChain } from './quote.js';
14
+ /** Flap 链标识(与 `FlapPortal` 一致,供子路径 `./constants` 使用) */
15
+ export type { FlapChain } from '../flap/portal.js';
13
16
  export { ZERO_ADDRESS, BLOCKRAZOR_BUILDER_EOA, ADDRESSES, getAddress, getWrappedNativeAddress, getMulticall3Address, getFlapPortalAddress, isZeroAddress, isNativeToken, ENI_SPENDERS, getEniSpenders, type ChainAddresses, type AddressKey, } from './addresses.js';
14
17
  export { PROFIT_CONFIG, getProfitRecipient, getAllProfitRecipients, getProfitRateBps, calculateProfitAmount, calculateProfitHopGasCost, type ProfitRateKey, TRANSFER_FEE_PER_ADDRESS, getTransferFeePerAddress, calculateTransferFee, } from './profit.js';
@@ -16,6 +16,7 @@ export { CHAINS, CHAIN_ID_MAP, getChainById, getChainName, getDefaultRpcUrl, isK
16
16
  // Gas 常量
17
17
  // ============================================================================
18
18
  export { GAS_LIMITS, GAS_CONFIG, V3_FEE_TIERS, calculateGasLimit, getTransferGasLimit, } from './gas.js';
19
+ export { QUOTE_CONFIG, QUOTE_V3_FEE_TIERS } from './quote.js';
19
20
  // ============================================================================
20
21
  // 合约地址
21
22
  // ============================================================================
@@ -0,0 +1,30 @@
1
+ /** DEX 报价链配置(V2 Router / V3 Quoter / 包装原生币 / 稳定币) */
2
+ export declare const QUOTE_CONFIG: {
3
+ readonly BSC: {
4
+ readonly v2Router: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
5
+ readonly v3Quoter: "0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997";
6
+ readonly wrappedNative: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
7
+ readonly stableCoins: readonly ["0x55d398326f99059fF775485246999027B3197955", "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"];
8
+ };
9
+ readonly MONAD: {
10
+ readonly v2Router: "0xb1bc24c34e88f7d43d5923034e3a14b24daacff9";
11
+ readonly v3Quoter: "";
12
+ readonly wrappedNative: "0x3bd359c1119da7da1d913d1c4d2b7c461115433a";
13
+ readonly stableCoins: readonly [];
14
+ };
15
+ readonly XLAYER: {
16
+ readonly v2Router: "0x881fb2f98c13d521009464e7d1cbf16e1b394e8e";
17
+ readonly v3Quoter: "0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e";
18
+ readonly wrappedNative: "0xe538905cf8410324e03a5a23c1c177a474d59b2b";
19
+ readonly stableCoins: readonly ["0x1E4a5963aBFD975d8c9021ce480b42188849D41d", "0x74b7f16337b8972027f6196a17a631ac6de26d22", "0x779ded0c9e1022225f8e0630b35a9b54be713736"];
20
+ };
21
+ readonly ENI: {
22
+ readonly v2Router: "0x97ed8be49d9a8b86247090aa41e908e76b8fcf22";
23
+ readonly v3Quoter: "";
24
+ readonly wrappedNative: "0x6d1e851446f4d004ae2a72f9afed85e8829a205e";
25
+ readonly stableCoins: readonly ["0xDC1a8A35b0BaA3229b13f348ED708a2fd50b5e3a", "0xaFF944b96c1BAEA587159ec446280E468B32ee15"];
26
+ };
27
+ };
28
+ /** V3 报价尝试费率列表(与 `gas.V3_FEE_TIERS` 命名对象区分) */
29
+ export declare const QUOTE_V3_FEE_TIERS: readonly [100, 500, 2500, 10000];
30
+ export type QuoteConfigChain = keyof typeof QUOTE_CONFIG;
@@ -0,0 +1,37 @@
1
+ /** DEX 报价链配置(V2 Router / V3 Quoter / 包装原生币 / 稳定币) */
2
+ export const QUOTE_CONFIG = {
3
+ BSC: {
4
+ v2Router: '0x10ED43C718714eb63d5aA57B78B54704E256024E',
5
+ v3Quoter: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997',
6
+ wrappedNative: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
7
+ stableCoins: [
8
+ '0x55d398326f99059fF775485246999027B3197955',
9
+ '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
10
+ '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',
11
+ ],
12
+ },
13
+ MONAD: {
14
+ v2Router: '0xb1bc24c34e88f7d43d5923034e3a14b24daacff9',
15
+ v3Quoter: '',
16
+ wrappedNative: '0x3bd359c1119da7da1d913d1c4d2b7c461115433a',
17
+ stableCoins: [],
18
+ },
19
+ XLAYER: {
20
+ v2Router: '0x881fb2f98c13d521009464e7d1cbf16e1b394e8e',
21
+ v3Quoter: '0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e',
22
+ wrappedNative: '0xe538905cf8410324e03a5a23c1c177a474d59b2b',
23
+ stableCoins: [
24
+ '0x1E4a5963aBFD975d8c9021ce480b42188849D41d',
25
+ '0x74b7f16337b8972027f6196a17a631ac6de26d22',
26
+ '0x779ded0c9e1022225f8e0630b35a9b54be713736',
27
+ ],
28
+ },
29
+ ENI: {
30
+ v2Router: '0x97ed8be49d9a8b86247090aa41e908e76b8fcf22',
31
+ v3Quoter: '',
32
+ wrappedNative: '0x6d1e851446f4d004ae2a72f9afed85e8829a205e',
33
+ stableCoins: ['0xDC1a8A35b0BaA3229b13f348ED708a2fd50b5e3a', '0xaFF944b96c1BAEA587159ec446280E468B32ee15'],
34
+ },
35
+ };
36
+ /** V3 报价尝试费率列表(与 `gas.V3_FEE_TIERS` 命名对象区分) */
37
+ export const QUOTE_V3_FEE_TIERS = [100, 500, 2500, 10000];
@@ -9,5 +9,5 @@ export const PORTAL_EVENTS_ABI = [
9
9
  'event FlapTokenTaxSet(address token, uint256 tax)',
10
10
  'event FlapTokenCirculatingSupplyChanged(address token, uint256 newSupply)',
11
11
  'event LaunchedToDEX(address token, address pool, uint256 amount, uint256 eth)',
12
- 'event TokenExtensionEnabled(address token, bytes32 extensionID, address extensionAddress, uint8 version)'
12
+ 'event TokenExtensionEnabled(address token, bytes32 extensionID, address extensionAddress, uint8 version)',
13
13
  ];
@@ -29,7 +29,6 @@ export declare const FLAP_TOKEN_IMPL_ADDRESSES: {
29
29
  readonly BSC_NORMAL: "0x8b4329947e34b6d56d71a3385cac122bade7d78d";
30
30
  readonly BSC_TAXED: "0x29e6383F0ce68507b5A72a53c2B118a118332aA8";
31
31
  readonly BSC_TAXED_V5: "0xae562c6A05b798499507c6276C6Ed796027807BA";
32
- readonly BSC_TAXED_V3: "0x024f18294970B5c76c0691b87f138A0317156422";
33
32
  readonly BASE: "0xF3c514E04f83166E80718f29f0d34F206be40A0A";
34
33
  readonly XLAYER: "0x12Dc83157Bf1cfCB8Db5952b3ba5bb56Cc38f8C9";
35
34
  readonly MORPH: "0x8b4329947e34b6d56d71a3385cac122bade7d78d";
@@ -126,4 +125,4 @@ export declare const FLAP_TOTAL_SUPPLY: bigint;
126
125
  * 零地址(用于表示原生代币)
127
126
  * ✅ 从公共模块重新导出
128
127
  */
129
- export { ZERO_ADDRESS } from '../../utils/constants.js';
128
+ export { ZERO_ADDRESS } from '../constants/index.js';
@@ -31,7 +31,6 @@ export const FLAP_TOKEN_IMPL_ADDRESSES = {
31
31
  BSC_NORMAL: '0x8b4329947e34b6d56d71a3385cac122bade7d78d',
32
32
  BSC_TAXED: '0x29e6383F0ce68507b5A72a53c2B118a118332aA8', // V2: 只有运营钱包的税代币
33
33
  BSC_TAXED_V5: '0xae562c6A05b798499507c6276C6Ed796027807BA', // V5: 高级税代币 (mkt/deflation/dividend/lp)
34
- BSC_TAXED_V3: '0x024f18294970B5c76c0691b87f138A0317156422', // V3: VaultPortal.newTokenV6WithVault (TOKEN_TAXED_V3)
35
34
  BASE: '0xF3c514E04f83166E80718f29f0d34F206be40A0A',
36
35
  XLAYER: '0x12Dc83157Bf1cfCB8Db5952b3ba5bb56Cc38f8C9',
37
36
  MORPH: '0x8b4329947e34b6d56d71a3385cac122bade7d78d', // 暂时使用 BSC NORMAL 地址
@@ -136,9 +135,9 @@ export const FLAP_DEX_THRESHOLDS = {
136
135
  /**
137
136
  * 代币总供应量(固定为 10 亿)
138
137
  */
139
- export const FLAP_TOTAL_SUPPLY = BigInt(1000000000) * BigInt(10 ** 18);
138
+ export const FLAP_TOTAL_SUPPLY = BigInt(1_000_000_000) * BigInt(10 ** 18);
140
139
  /**
141
140
  * 零地址(用于表示原生代币)
142
141
  * ✅ 从公共模块重新导出
143
142
  */
144
- export { ZERO_ADDRESS } from '../../utils/constants.js';
143
+ export { ZERO_ADDRESS } from '../constants/index.js';
@@ -10,6 +10,9 @@ import { FixedNumber } from 'ethers';
10
10
  */
11
11
  const BILLION = FixedNumber.fromString('1000000000');
12
12
  export class CDPV2 {
13
+ r;
14
+ h;
15
+ k;
13
16
  static defaultDexSupplyThreshold() {
14
17
  return FixedNumber.fromString('800000000');
15
18
  }
@@ -1,6 +1,3 @@
1
- /**
2
- * Flap Protocol 错误代码
3
- */
4
1
  export type FlapErrorCode = 'TOKEN_ALREADY_EXISTS' | 'TOKEN_NOT_FOUND' | 'TOKEN_NOT_TRADABLE' | 'ALREADY_ON_DEX' | 'INSUFFICIENT_BALANCE' | 'SLIPPAGE_EXCEEDED' | 'INVALID_TOKEN' | 'INVALID_QUOTE_TOKEN' | 'INVALID_AMOUNT' | 'TAX_RATE_TOO_HIGH' | 'PERMIT_EXPIRED' | 'PERMIT_INVALID' | 'UNKNOWN_ERROR';
5
2
  /**
6
3
  * 解析 Flap Protocol 错误信息
@@ -20,7 +17,7 @@ export type FlapErrorCode = 'TOKEN_ALREADY_EXISTS' | 'TOKEN_NOT_FOUND' | 'TOKEN_
20
17
  * }
21
18
  * ```
22
19
  */
23
- export declare function parseFlapError(error: any): FlapErrorCode | null;
20
+ export declare function parseFlapError(error: unknown): FlapErrorCode | null;
24
21
  /**
25
22
  * 获取错误的友好提示信息(中文)
26
23
  *