four-flap-meme-sdk 1.9.49 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/README.en.md +41 -6
  2. package/README.md +31 -0
  3. package/README.zh-CN.md +41 -6
  4. package/dist/abis/common.js +74 -68
  5. package/dist/abis/flap/vault.js +9 -7
  6. package/dist/abis/index.d.ts +3 -4
  7. package/dist/abis/index.js +3 -4
  8. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  9. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  10. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  11. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  12. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  13. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  14. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  15. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  16. package/dist/bundle-core/config-helpers.d.ts +36 -0
  17. package/dist/bundle-core/config-helpers.js +57 -0
  18. package/dist/bundle-core/errors.d.ts +50 -0
  19. package/dist/bundle-core/errors.js +34 -0
  20. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  21. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  22. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  23. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  24. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  25. package/dist/bundle-core/four-meme/core.js +515 -0
  26. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  27. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  28. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  29. package/dist/bundle-core/four-meme/private.js +465 -0
  30. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  31. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  32. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  33. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  34. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  35. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  36. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  37. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  38. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  39. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  40. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  41. package/dist/bundle-core/four-meme/swap.js +505 -0
  42. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  43. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  44. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  45. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  46. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  47. package/dist/bundle-core/four-meme/types/index.js +1 -0
  48. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  49. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  50. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  51. package/dist/bundle-core/four-meme/types.js +1 -0
  52. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  53. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  54. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  55. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  56. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  57. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  58. package/dist/bundle-core/index.d.ts +8 -0
  59. package/dist/bundle-core/index.js +8 -0
  60. package/dist/bundle-core/internal.d.ts +21 -0
  61. package/dist/bundle-core/internal.js +182 -0
  62. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  63. package/dist/bundle-core/sign-context-helpers.js +67 -0
  64. package/dist/bundle-core/submit.d.ts +293 -0
  65. package/dist/bundle-core/submit.js +727 -0
  66. package/dist/bundle-core/types/index.d.ts +8 -0
  67. package/dist/bundle-core/types/index.js +1 -0
  68. package/dist/bundle-core/types.d.ts +1 -0
  69. package/dist/bundle-core/types.js +1 -0
  70. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  71. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
  72. package/dist/chains/bsc/four/config.d.ts +5 -70
  73. package/dist/chains/bsc/four/config.js +2 -115
  74. package/dist/chains/bsc/four/core.d.ts +1 -4
  75. package/dist/chains/bsc/four/core.js +1 -589
  76. package/dist/chains/bsc/four/disperse.d.ts +12 -0
  77. package/dist/chains/bsc/four/disperse.js +470 -0
  78. package/dist/chains/bsc/four/index.d.ts +6 -6
  79. package/dist/chains/bsc/four/index.js +6 -6
  80. package/dist/chains/bsc/four/internal.d.ts +2 -50
  81. package/dist/chains/bsc/four/internal.js +2 -237
  82. package/dist/chains/bsc/four/pairwise.d.ts +7 -0
  83. package/dist/chains/bsc/four/pairwise.js +308 -0
  84. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  85. package/dist/chains/bsc/four/pancake-proxy.js +1 -688
  86. package/dist/chains/bsc/four/private.d.ts +1 -27
  87. package/dist/chains/bsc/four/private.js +1 -477
  88. package/dist/chains/bsc/four/submit.d.ts +2 -315
  89. package/dist/chains/bsc/four/submit.js +2 -746
  90. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  91. package/dist/chains/bsc/four/swap-buy-first.js +2 -506
  92. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  93. package/dist/chains/bsc/four/swap-internal.js +1 -18
  94. package/dist/chains/bsc/four/swap.d.ts +2 -144
  95. package/dist/chains/bsc/four/swap.js +2 -760
  96. package/dist/chains/bsc/four/sweep.d.ts +13 -0
  97. package/dist/chains/bsc/four/sweep.js +788 -0
  98. package/dist/chains/bsc/four/types.d.ts +1 -476
  99. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  100. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  101. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  102. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  103. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  104. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  105. package/dist/chains/bsc/four/utils.d.ts +5 -18
  106. package/dist/chains/bsc/four/utils.js +5 -1534
  107. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  109. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  110. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
  111. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  112. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  113. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  114. package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
  115. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  116. package/dist/chains/bsc/pancake/index.js +1 -3
  117. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  118. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  119. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  120. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  121. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  122. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  123. package/dist/chains/eni/batch-router/transfer.js +54 -23
  124. package/dist/chains/eni/batch-router/utils.js +32 -6
  125. package/dist/chains/eni/bundler/sign.js +4 -4
  126. package/dist/chains/eni/bundler/submit.js +1 -4
  127. package/dist/chains/eni/constants.js +1 -1
  128. package/dist/chains/eni/index.d.ts +1 -1
  129. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  130. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  131. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  132. package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
  133. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
  134. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  135. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  136. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  137. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  138. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
  139. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  140. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  141. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  142. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  143. package/dist/chains/eni/platforms/iro/index.js +4 -4
  144. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  145. package/dist/chains/eni/platforms/iro/token.js +107 -31
  146. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  147. package/dist/chains/eni/submit.js +5 -13
  148. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  149. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
  150. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  151. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  152. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
  153. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  154. package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
  155. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  156. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
  157. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  158. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  159. package/dist/chains/xlayer/eip7702/index.d.ts +27 -46
  160. package/dist/chains/xlayer/eip7702/index.js +27 -81
  161. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  162. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  163. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  164. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
  165. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  166. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  167. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  168. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  169. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  170. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  171. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  172. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  173. package/dist/chains/xlayer/eip7702/volume.js +83 -158
  174. package/dist/chains/xlayer/eoa/constants.js +1 -1
  175. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  176. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  177. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  178. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  179. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
  180. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  181. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
  182. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  183. package/dist/chains/xlayer/eoa/index.js +8 -23
  184. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  185. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  186. package/dist/chains/xlayer/eoa/types-core.d.ts +363 -0
  187. package/dist/chains/xlayer/eoa/types-core.js +53 -0
  188. package/dist/chains/xlayer/eoa/types-create.d.ts +413 -0
  189. package/dist/chains/xlayer/eoa/types-create.js +9 -0
  190. package/dist/chains/xlayer/eoa/types-volume.d.ts +209 -0
  191. package/dist/chains/xlayer/eoa/types-volume.js +13 -0
  192. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  193. package/dist/chains/xlayer/eoa/types.js +1 -3
  194. package/dist/contracts/helper3.d.ts +20 -17
  195. package/dist/contracts/helper3.js +56 -20
  196. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  197. package/dist/contracts/tm-bundle-helpers.js +72 -0
  198. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  199. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
  200. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
  201. package/dist/contracts/tm-bundle-merkle/config.js +2 -115
  202. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  203. package/dist/contracts/tm-bundle-merkle/core.js +1 -588
  204. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  205. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  206. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
  207. package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
  208. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  209. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
  210. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  211. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  212. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  213. package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
  214. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  215. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
  216. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  217. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  218. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  219. package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
  220. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  221. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  222. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  223. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  224. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  225. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  226. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  227. package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
  228. package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
  229. package/dist/contracts/tm-bundle.d.ts +3 -51
  230. package/dist/contracts/tm-bundle.js +102 -142
  231. package/dist/contracts/tm.d.ts +3 -2
  232. package/dist/contracts/tm.js +36 -32
  233. package/dist/contracts/tm1.js +9 -4
  234. package/dist/contracts/tm2.js +9 -4
  235. package/dist/dex/direct-router-helpers.d.ts +264 -0
  236. package/dist/dex/direct-router-helpers.js +539 -0
  237. package/dist/dex/direct-router.d.ts +3 -125
  238. package/dist/dex/direct-router.js +237 -652
  239. package/dist/dex/types.d.ts +81 -0
  240. package/dist/dex/types.js +1 -0
  241. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  242. package/dist/exports/root-bundle-and-tooling.js +30 -0
  243. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  244. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  245. package/dist/exports/root-foundations.d.ts +35 -0
  246. package/dist/exports/root-foundations.js +70 -0
  247. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  248. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  249. package/dist/flows/create.d.ts +2 -2
  250. package/dist/flows/create.js +6 -6
  251. package/dist/flows/index.d.ts +1 -0
  252. package/dist/flows/index.js +1 -0
  253. package/dist/index.d.ts +20 -91
  254. package/dist/index.js +20 -215
  255. package/dist/shared/abis/common.d.ts +2 -83
  256. package/dist/shared/abis/common.js +2 -252
  257. package/dist/shared/abis/index.d.ts +5 -6
  258. package/dist/shared/abis/index.js +5 -7
  259. package/dist/shared/clients/blockrazor.js +41 -24
  260. package/dist/shared/clients/club48.js +30 -26
  261. package/dist/shared/clients/emitservice.js +2 -0
  262. package/dist/shared/clients/four.js +23 -18
  263. package/dist/shared/clients/index.d.ts +8 -0
  264. package/dist/shared/clients/index.js +8 -0
  265. package/dist/shared/clients/merkle.js +26 -30
  266. package/dist/shared/constants/addresses.d.ts +1 -1
  267. package/dist/shared/constants/addresses.js +11 -2
  268. package/dist/shared/constants/chains.d.ts +1 -1
  269. package/dist/shared/constants/chains.js +1 -1
  270. package/dist/shared/constants/gas.d.ts +1 -1
  271. package/dist/shared/constants/gas.js +2 -6
  272. package/dist/shared/constants/index.d.ts +1 -0
  273. package/dist/shared/constants/index.js +1 -0
  274. package/dist/shared/constants/quote.d.ts +30 -0
  275. package/dist/shared/constants/quote.js +37 -0
  276. package/dist/shared/flap/__tests__/curve.test.js +3 -3
  277. package/dist/shared/flap/abi.js +1 -1
  278. package/dist/shared/flap/constants.d.ts +1 -1
  279. package/dist/shared/flap/constants.js +2 -2
  280. package/dist/shared/flap/curve.js +3 -0
  281. package/dist/shared/flap/errors.d.ts +1 -4
  282. package/dist/shared/flap/errors.js +21 -3
  283. package/dist/shared/flap/index.d.ts +2 -2
  284. package/dist/shared/flap/index.js +2 -2
  285. package/dist/shared/flap/meta.d.ts +16 -18
  286. package/dist/shared/flap/meta.js +14 -26
  287. package/dist/shared/flap/permit.js +6 -5
  288. package/dist/shared/flap/pinata.d.ts +9 -2
  289. package/dist/shared/flap/pinata.js +20 -18
  290. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  291. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  292. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  293. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  294. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  295. package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
  296. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
  297. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  298. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  299. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  300. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  301. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  302. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  303. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  304. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  305. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  306. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  307. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  308. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  309. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  310. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
  311. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.d.ts +100 -0
  312. package/dist/shared/flap/portal-bundle-merkle/utils-helpers.js +133 -0
  313. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  314. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  315. package/dist/shared/flap/portal-bundle.js +54 -42
  316. package/dist/shared/flap/portal.js +32 -10
  317. package/dist/shared/flap/vanity.js +4 -7
  318. package/dist/shared/flap/vault.d.ts +1 -1
  319. package/dist/shared/flap/vault.js +54 -48
  320. package/dist/shared/flap 2/__tests__/curve.test.d.ts +1 -0
  321. package/dist/shared/flap 2/portal-bundle-merkle/types.js +1 -0
  322. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  323. package/dist/shared/foundation/dex/v3-path.js +35 -0
  324. package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
  325. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  326. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  327. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  328. package/dist/shared/foundation/index.d.ts +13 -0
  329. package/dist/shared/foundation/index.js +12 -0
  330. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  331. package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
  332. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  333. package/dist/shared/foundation/normalize-unknown.js +29 -0
  334. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  335. package/dist/shared/foundation/sdk-logger.js +12 -0
  336. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  337. package/dist/shared/foundation/tx/build-request.js +25 -0
  338. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  339. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  340. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  341. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  342. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  343. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  344. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  345. package/dist/shared/foundation/types/erc20.js +1 -0
  346. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  347. package/dist/shared/foundation/types/holders-maker.js +1 -0
  348. package/dist/shared/foundation/types/index.d.ts +7 -0
  349. package/dist/shared/foundation/types/index.js +1 -0
  350. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  351. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  352. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  353. package/dist/shared/foundation/types/multicall.js +1 -0
  354. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  355. package/dist/shared/foundation/types/private-sale.js +1 -0
  356. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  357. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  358. package/dist/shared/four/tax-token.d.ts +1 -1
  359. package/dist/shared/four/tax-token.js +27 -7
  360. package/dist/shared/index.d.ts +4 -0
  361. package/dist/shared/index.js +4 -0
  362. package/dist/types/distribute.d.ts +72 -0
  363. package/dist/types/distribute.js +1 -0
  364. package/dist/types 2/errors.d.ts +27 -0
  365. package/dist/types 2/errors.js +34 -0
  366. package/dist/utils/airdrop-sweep-types.d.ts +1 -0
  367. package/dist/utils/airdrop-sweep-types.js +1 -0
  368. package/dist/utils/airdrop-sweep.d.ts +4 -76
  369. package/dist/utils/airdrop-sweep.js +38 -52
  370. package/dist/utils/bundle-helpers.d.ts +9 -243
  371. package/dist/utils/bundle-helpers.js +10 -584
  372. package/dist/utils/constants.d.ts +5 -61
  373. package/dist/utils/constants.js +5 -80
  374. package/dist/utils/contract-factory.d.ts +2 -4
  375. package/dist/utils/contract-factory.js +25 -18
  376. package/dist/utils/erc20-types.d.ts +1 -0
  377. package/dist/utils/erc20-types.js +1 -0
  378. package/dist/utils/erc20.d.ts +8 -90
  379. package/dist/utils/erc20.js +94 -153
  380. package/dist/utils/errors.d.ts +10 -22
  381. package/dist/utils/errors.js +61 -79
  382. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  383. package/dist/utils/holders-maker/addresses.js +15 -0
  384. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  385. package/dist/utils/holders-maker/buy-tx.js +278 -0
  386. package/dist/utils/holders-maker/constants.d.ts +6 -0
  387. package/dist/utils/holders-maker/constants.js +7 -0
  388. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  389. package/dist/utils/holders-maker/disperse.js +90 -0
  390. package/dist/utils/holders-maker/routing.d.ts +4 -0
  391. package/dist/utils/holders-maker/routing.js +45 -0
  392. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  393. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  394. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  395. package/dist/utils/holders-maker-helpers.js +9 -0
  396. package/dist/utils/holders-maker-types.d.ts +1 -0
  397. package/dist/utils/holders-maker-types.js +1 -0
  398. package/dist/utils/holders-maker.d.ts +2 -138
  399. package/dist/utils/holders-maker.js +23 -651
  400. package/dist/utils/hop-chains.d.ts +35 -0
  401. package/dist/utils/hop-chains.js +215 -0
  402. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  403. package/dist/utils/lp-inspect-helpers.js +109 -0
  404. package/dist/utils/lp-inspect-types.d.ts +1 -0
  405. package/dist/utils/lp-inspect-types.js +1 -0
  406. package/dist/utils/lp-inspect.d.ts +2 -112
  407. package/dist/utils/lp-inspect.js +63 -195
  408. package/dist/utils/mpcExclusive.d.ts +2 -5
  409. package/dist/utils/mpcExclusive.js +4 -3
  410. package/dist/utils/private-sale-types.d.ts +1 -0
  411. package/dist/utils/private-sale-types.js +1 -0
  412. package/dist/utils/private-sale.d.ts +2 -58
  413. package/dist/utils/private-sale.js +2 -7
  414. package/dist/utils/provider-factory.d.ts +4 -0
  415. package/dist/utils/provider-factory.js +10 -0
  416. package/dist/utils/quote-helpers-types.d.ts +1 -0
  417. package/dist/utils/quote-helpers-types.js +1 -0
  418. package/dist/utils/quote-helpers.d.ts +4 -45
  419. package/dist/utils/quote-helpers.js +15 -65
  420. package/dist/utils/stealth-transfer.d.ts +2 -28
  421. package/dist/utils/stealth-transfer.js +30 -14
  422. package/dist/utils/swap-helpers.d.ts +0 -3
  423. package/dist/utils/swap-helpers.js +6 -9
  424. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  425. package/dist/utils/types/airdrop-sweep.js +1 -0
  426. package/dist/utils/types/contract-factory.d.ts +1 -0
  427. package/dist/utils/types/contract-factory.js +1 -0
  428. package/dist/utils/types/erc20.d.ts +1 -0
  429. package/dist/utils/types/erc20.js +1 -0
  430. package/dist/utils/types/errors.d.ts +1 -0
  431. package/dist/utils/types/errors.js +1 -0
  432. package/dist/utils/types/holders-maker.d.ts +1 -0
  433. package/dist/utils/types/holders-maker.js +1 -0
  434. package/dist/utils/types/hop-chains.d.ts +8 -0
  435. package/dist/utils/types/hop-chains.js +1 -0
  436. package/dist/utils/types/index.d.ts +13 -0
  437. package/dist/utils/types/index.js +1 -0
  438. package/dist/utils/types/lp-inspect.d.ts +1 -0
  439. package/dist/utils/types/lp-inspect.js +1 -0
  440. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  441. package/dist/utils/types/mpc-exclusive.js +1 -0
  442. package/dist/utils/types/private-sale.d.ts +1 -0
  443. package/dist/utils/types/private-sale.js +1 -0
  444. package/dist/utils/types/quote-helpers.d.ts +1 -0
  445. package/dist/utils/types/quote-helpers.js +1 -0
  446. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  447. package/dist/utils/types/stealth-transfer.js +1 -0
  448. package/dist/utils/types/wallet.d.ts +25 -0
  449. package/dist/utils/types/wallet.js +1 -0
  450. package/dist/utils/wallet.d.ts +2 -25
  451. package/dist/utils/wallet.js +9 -10
  452. package/package.json +55 -2
  453. package/src/abis/contracts/TaxToken.json +969 -0
  454. package/src/abis/contracts/TokenManager.json +836 -0
  455. package/src/abis/contracts/TokenManager2.json +136 -0
  456. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  457. /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
  458. /package/dist/{shared 2/flap/portal-bundle-merkle/types.js → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
  459. /package/dist/{shared 2/abis → shared/abis 2}/TaxToken.json +0 -0
  460. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager.json +0 -0
  461. /package/dist/{shared 2/abis → shared/abis 2}/TokenManager2.json +0 -0
  462. /package/dist/{shared 2/abis → shared/abis 2}/TokenManagerHelper3.json +0 -0
  463. /package/dist/{shared 2/abis → shared/abis 2}/common.d.ts +0 -0
  464. /package/dist/{shared 2/abis → shared/abis 2}/common.js +0 -0
  465. /package/dist/{shared 2/abis → shared/abis 2}/index.d.ts +0 -0
  466. /package/dist/{shared 2/abis → shared/abis 2}/index.js +0 -0
  467. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.d.ts +0 -0
  468. /package/dist/{shared 2/clients → shared/clients 2}/blockrazor.js +0 -0
  469. /package/dist/{shared 2/clients → shared/clients 2}/club48.d.ts +0 -0
  470. /package/dist/{shared 2/clients → shared/clients 2}/club48.js +0 -0
  471. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.d.ts +0 -0
  472. /package/dist/{shared 2/clients → shared/clients 2}/emitservice.js +0 -0
  473. /package/dist/{shared 2/clients → shared/clients 2}/four.d.ts +0 -0
  474. /package/dist/{shared 2/clients → shared/clients 2}/four.js +0 -0
  475. /package/dist/{shared 2/clients → shared/clients 2}/merkle.d.ts +0 -0
  476. /package/dist/{shared 2/clients → shared/clients 2}/merkle.js +0 -0
  477. /package/dist/{shared 2/flap → shared/flap 2}/__tests__/curve.test.js +0 -0
  478. /package/dist/{shared 2/flap → shared/flap 2}/abi.d.ts +0 -0
  479. /package/dist/{shared 2/flap → shared/flap 2}/abi.js +0 -0
  480. /package/dist/{shared 2/flap → shared/flap 2}/constants.d.ts +0 -0
  481. /package/dist/{shared 2/flap → shared/flap 2}/constants.js +0 -0
  482. /package/dist/{shared 2/flap → shared/flap 2}/curve.d.ts +0 -0
  483. /package/dist/{shared 2/flap → shared/flap 2}/curve.js +0 -0
  484. /package/dist/{shared 2/flap → shared/flap 2}/errors.d.ts +0 -0
  485. /package/dist/{shared 2/flap → shared/flap 2}/errors.js +0 -0
  486. /package/dist/{shared 2/flap → shared/flap 2}/index.d.ts +0 -0
  487. /package/dist/{shared 2/flap → shared/flap 2}/index.js +0 -0
  488. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.d.ts +0 -0
  489. /package/dist/{shared 2/flap → shared/flap 2}/ipfs.js +0 -0
  490. /package/dist/{shared 2/flap → shared/flap 2}/meta.d.ts +0 -0
  491. /package/dist/{shared 2/flap → shared/flap 2}/meta.js +0 -0
  492. /package/dist/{shared 2/flap → shared/flap 2}/permit.d.ts +0 -0
  493. /package/dist/{shared 2/flap → shared/flap 2}/permit.js +0 -0
  494. /package/dist/{shared 2/flap → shared/flap 2}/pinata.d.ts +0 -0
  495. /package/dist/{shared 2/flap → shared/flap 2}/pinata.js +0 -0
  496. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.d.ts +0 -0
  497. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/config.js +0 -0
  498. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.d.ts +0 -0
  499. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/core.js +0 -0
  500. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.d.ts +0 -0
  501. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/create-to-dex.js +0 -0
  502. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.d.ts +0 -0
  503. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/curve-to-dex.js +0 -0
  504. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.d.ts +0 -0
  505. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/index.js +0 -0
  506. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.d.ts +0 -0
  507. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/pancake-proxy.js +0 -0
  508. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.d.ts +0 -0
  509. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/private.js +0 -0
  510. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.d.ts +0 -0
  511. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap-buy-first.js +0 -0
  512. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.d.ts +0 -0
  513. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/swap.js +0 -0
  514. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/types.d.ts +0 -0
  515. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.d.ts +0 -0
  516. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle-merkle/utils.js +0 -0
  517. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.d.ts +0 -0
  518. /package/dist/{shared 2/flap → shared/flap 2}/portal-bundle.js +0 -0
  519. /package/dist/{shared 2/flap → shared/flap 2}/portal.d.ts +0 -0
  520. /package/dist/{shared 2/flap → shared/flap 2}/portal.js +0 -0
  521. /package/dist/{shared 2/flap → shared/flap 2}/vanity.d.ts +0 -0
  522. /package/dist/{shared 2/flap → shared/flap 2}/vanity.js +0 -0
  523. /package/dist/{shared 2/flap → shared/flap 2}/vault.d.ts +0 -0
  524. /package/dist/{shared 2/flap → shared/flap 2}/vault.js +0 -0
  525. /package/dist/{shared 2/four → shared/four 2}/index.d.ts +0 -0
  526. /package/dist/{shared 2/four → shared/four 2}/index.js +0 -0
  527. /package/dist/{shared 2/four → shared/four 2}/tax-token.d.ts +0 -0
  528. /package/dist/{shared 2/four → shared/four 2}/tax-token.js +0 -0
  529. /package/dist/{shared 2/index.d.ts → shared/index 2.js} +0 -0
  530. /package/dist/{shared 2/index.js → shared/index.d 2.ts} +0 -0
@@ -1,746 +1,2 @@
1
- /**
2
- * 独立的Bundle提交方法
3
- *
4
- * 用于服务器端接收前端构建的签名交易后,提交到Merkle或BlockRazor
5
- * 以及 Monad 等不支持 Bundle 的链的逐笔广播
6
- */
7
- import { MerkleClient } from '../../../shared/clients/merkle.js';
8
- import { BlockRazorClient } from '../../../shared/clients/blockrazor.js';
9
- import { ethers } from 'ethers';
10
- import { CHAINS } from '../../../shared/constants/index.js';
11
- // ✅ MerkleClient 缓存(复用连接,减少初始化开销)
12
- const merkleClientCache = new Map();
13
- const CLIENT_CACHE_TTL_MS = 60 * 1000; // 60秒缓存
14
- /**
15
- * 获取或创建 MerkleClient(带缓存)
16
- */
17
- function getMerkleClient(config) {
18
- const cacheKey = `${config.apiKey}-${config.chainId ?? 56}-${config.customRpcUrl || ''}`;
19
- const now = Date.now();
20
- const cached = merkleClientCache.get(cacheKey);
21
- if (cached && cached.expireAt > now) {
22
- return cached.client;
23
- }
24
- // 创建新客户端并缓存
25
- const client = new MerkleClient({
26
- apiKey: config.apiKey,
27
- chainId: config.chainId ?? 56,
28
- customRpcUrl: config.customRpcUrl
29
- });
30
- merkleClientCache.set(cacheKey, { client, expireAt: now + CLIENT_CACHE_TTL_MS });
31
- return client;
32
- }
33
- /**
34
- * 提交已签名的交易到Merkle(服务器端使用)
35
- *
36
- * 这个方法接收前端构建和签名好的交易,直接提交到Merkle服务
37
- *
38
- * @param signedTransactions 签名后的交易数组
39
- * @param config Merkle提交配置(精简版,只需要提交相关参数)
40
- * @returns Bundle提交结果
41
- *
42
- * @example
43
- * ```typescript
44
- * // 服务器端代码
45
- * import { submitBundleToMerkle } from 'four-flap-meme-sdk';
46
- *
47
- * const result = await submitBundleToMerkle(signedTransactions, {
48
- * apiKey: process.env.MERKLE_API_KEY,
49
- * customRpcUrl: process.env.MERKLE_RPC_URL,
50
- * bundleBlockOffset: 5
51
- * });
52
- *
53
- * if (result.code) {
54
- * } else {
55
- * console.error('❌ Bundle提交失败:', result.error);
56
- * }
57
- * ```
58
- */
59
- export async function submitBundleToMerkle(signedTransactions, config) {
60
- try {
61
- const totalTransactions = signedTransactions?.length ?? 0;
62
- // 验证输入
63
- if (!signedTransactions || signedTransactions.length === 0) {
64
- return {
65
- code: false,
66
- totalTransactions,
67
- error: 'signedTransactions cannot be empty'
68
- };
69
- }
70
- if (!config.apiKey) {
71
- return {
72
- code: false,
73
- totalTransactions,
74
- error: 'apiKey is required in config'
75
- };
76
- }
77
- // ✅ 使用缓存的 MerkleClient(复用连接 + 区块号缓存)
78
- const merkle = getMerkleClient(config);
79
- // 提交Bundle
80
- const bundleResult = await merkle.sendBundle({
81
- transactions: signedTransactions,
82
- blockOffset: config.bundleBlockOffset ?? 3,
83
- minBlockOffset: config.minBlockOffset ?? 3,
84
- autoRetry: config.autoRetryBundle ?? false,
85
- maxRetries: config.maxBundleRetries ?? 2
86
- });
87
- // ✅ 提交成功
88
- return {
89
- code: true,
90
- totalTransactions,
91
- bundleHash: bundleResult.bundleHash,
92
- txHashes: bundleResult.txHashes,
93
- targetBlock: bundleResult.targetBlock,
94
- txCount: bundleResult.txCount
95
- };
96
- }
97
- catch (error) {
98
- // ❌ 提交失败
99
- const msg = error instanceof Error ? error.message : String(error);
100
- return {
101
- code: false,
102
- totalTransactions: signedTransactions?.length ?? 0,
103
- error: msg,
104
- };
105
- }
106
- }
107
- /**
108
- * 批量提交多个Bundle到Merkle(顺序执行)
109
- *
110
- * @param bundles 多个Bundle的签名交易数组
111
- * @param config Merkle提交配置
112
- * @returns Bundle提交结果数组
113
- */
114
- export async function submitMultipleBundles(bundles, config) {
115
- const results = [];
116
- for (const signedTransactions of bundles) {
117
- const result = await submitBundleToMerkle(signedTransactions, config);
118
- results.push(result);
119
- }
120
- return results;
121
- }
122
- /**
123
- * 并行提交多个Bundle到Merkle(适用于独立的Bundle)
124
- *
125
- * @param bundles 多个Bundle的签名交易数组
126
- * @param config Merkle提交配置
127
- * @returns Bundle提交结果数组
128
- */
129
- export async function submitMultipleBundlesParallel(bundles, config) {
130
- const promises = bundles.map(signedTransactions => submitBundleToMerkle(signedTransactions, config));
131
- return await Promise.all(promises);
132
- }
133
- // ==================== BlockRazor Bundle 提交方法 ====================
134
- // ✅ BlockRazorClient 缓存(复用连接,减少初始化开销)
135
- const blockRazorClientCache = new Map();
136
- /**
137
- * 获取或创建 BlockRazorClient(带缓存)
138
- */
139
- function getBlockRazorClient(config) {
140
- const cacheKey = `${config.apiKey || 'default'}-${config.customRpcUrl || ''}-${config.builderRpcUrl || ''}`;
141
- const now = Date.now();
142
- const cached = blockRazorClientCache.get(cacheKey);
143
- if (cached && cached.expireAt > now) {
144
- return cached.client;
145
- }
146
- // 创建新客户端并缓存
147
- const client = new BlockRazorClient({
148
- apiKey: config.apiKey,
149
- chainId: 56, // BlockRazor 目前只支持 BSC
150
- customRpcUrl: config.customRpcUrl,
151
- builderRpcUrl: config.builderRpcUrl
152
- });
153
- blockRazorClientCache.set(cacheKey, { client, expireAt: now + CLIENT_CACHE_TTL_MS });
154
- return client;
155
- }
156
- /**
157
- * 提交已签名的交易到 BlockRazor(服务器端使用)
158
- *
159
- * BlockRazor 是 BSC 链的 Block Builder 服务,支持 Bundle 提交
160
- *
161
- * 特点:
162
- * - 向 Builder EOA 转账 BNB 可提高优先级
163
- * - 支持 Bundle 合并提高打包率
164
- * - 最低 Gas Price 要求: 0.05 Gwei
165
- *
166
- * @param signedTransactions 签名后的交易数组
167
- * @param config BlockRazor 提交配置
168
- * @returns Bundle 提交结果
169
- *
170
- * @example
171
- * ```typescript
172
- * // 服务器端代码
173
- * import { submitBundleToBlockRazor } from 'four-flap-meme-sdk';
174
- *
175
- * const result = await submitBundleToBlockRazor(signedTransactions, {
176
- * blockOffset: 10,
177
- * noMerge: false, // 允许合并
178
- * autoRetry: true
179
- * });
180
- *
181
- * if (result.code) {
182
- * } else {
183
- * console.error('❌ Bundle 提交失败:', result.error);
184
- * }
185
- * ```
186
- */
187
- export async function submitBundleToBlockRazor(signedTransactions, config) {
188
- try {
189
- const totalTransactions = signedTransactions?.length ?? 0;
190
- // 验证输入
191
- if (!signedTransactions || signedTransactions.length === 0) {
192
- return {
193
- code: false,
194
- totalTransactions,
195
- error: 'signedTransactions cannot be empty'
196
- };
197
- }
198
- // ✅ 使用缓存的 BlockRazorClient
199
- const client = getBlockRazorClient(config);
200
- // 提交 Bundle
201
- const bundleResult = await client.sendBundle({
202
- transactions: signedTransactions,
203
- blockOffset: config.blockOffset ?? 100,
204
- maxBlockOffset: config.maxBlockOffset ?? 100,
205
- noMerge: config.noMerge ?? false,
206
- revertingTxHashes: config.revertingTxHashes,
207
- autoRetry: config.autoRetry ?? false,
208
- maxRetries: config.maxRetries ?? 3
209
- });
210
- // ✅ 提交成功
211
- return {
212
- code: true,
213
- totalTransactions,
214
- bundleHash: bundleResult.bundleHash,
215
- txHashes: bundleResult.txHashes,
216
- maxBlockNumber: bundleResult.maxBlockNumber,
217
- txCount: bundleResult.txCount
218
- };
219
- }
220
- catch (error) {
221
- // ❌ 提交失败
222
- const msg = error instanceof Error ? error.message : String(error);
223
- return {
224
- code: false,
225
- totalTransactions: signedTransactions?.length ?? 0,
226
- error: msg,
227
- };
228
- }
229
- }
230
- /**
231
- * 批量提交多个 Bundle 到 BlockRazor(顺序执行)
232
- *
233
- * @param bundles 多个 Bundle 的签名交易数组
234
- * @param config BlockRazor 提交配置
235
- * @returns Bundle 提交结果数组
236
- */
237
- export async function submitMultipleBundlesToBlockRazor(bundles, config) {
238
- const results = [];
239
- for (const signedTransactions of bundles) {
240
- const result = await submitBundleToBlockRazor(signedTransactions, config);
241
- results.push(result);
242
- }
243
- return results;
244
- }
245
- /**
246
- * 并行提交多个 Bundle 到 BlockRazor(适用于独立的 Bundle)
247
- *
248
- * @param bundles 多个 Bundle 的签名交易数组
249
- * @param config BlockRazor 提交配置
250
- * @returns Bundle 提交结果数组
251
- */
252
- export async function submitMultipleBundlesToBlockRazorParallel(bundles, config) {
253
- const promises = bundles.map(signedTransactions => submitBundleToBlockRazor(signedTransactions, config));
254
- return await Promise.all(promises);
255
- }
256
- function shouldTreatBroadcastErrorAsMaybeSent(msg) {
257
- const m = String(msg || '').toLowerCase();
258
- return (m.includes('already known') ||
259
- m.includes('known transaction') ||
260
- m.includes('already exists') ||
261
- m.includes('nonce too low') ||
262
- m.includes('nonce has already been used') ||
263
- m.includes('nonce expired') ||
264
- m.includes('replacement transaction underpriced'));
265
- }
266
- async function recoverTxHashIfAlreadySeen(provider, signedTx, errorMessage) {
267
- if (!shouldTreatBroadcastErrorAsMaybeSent(errorMessage))
268
- return undefined;
269
- try {
270
- const hash = ethers.keccak256(signedTx);
271
- if (!hash)
272
- return undefined;
273
- const tx = await provider.getTransaction(hash);
274
- return tx ? hash : undefined;
275
- }
276
- catch {
277
- return undefined;
278
- }
279
- }
280
- /**
281
- * 并行广播到 RPC(用于不支持 Bundle 的链,如 Monad)
282
- *
283
- * ✅ 优化:默认使用并行广播,速度更快
284
- *
285
- * @param signedTransactions 签名后的交易数组
286
- * @param config 直接广播配置
287
- * @returns 广播结果
288
- *
289
- * @example
290
- * ```typescript
291
- * // 服务器端代码(Monad 链)
292
- * import { submitDirectToRpc } from 'four-flap-meme-sdk';
293
- *
294
- * const result = await submitDirectToRpc(signedTransactions, {
295
- * rpcUrl: 'https://rpc-mainnet.monadinfra.com',
296
- * chainId: 143,
297
- * chainName: 'MONAD'
298
- * });
299
- *
300
- * if (result.code) {
301
- * } else {
302
- * console.error('❌ 全部广播失败:', result.errorSummary);
303
- * }
304
- * ```
305
- */
306
- export async function submitDirectToRpc(signedTransactions, config) {
307
- const totalTransactions = signedTransactions?.length ?? 0;
308
- // 验证输入
309
- if (!signedTransactions || signedTransactions.length === 0) {
310
- return {
311
- code: false,
312
- totalTransactions: 0,
313
- bundleHash: 'direct',
314
- txHashes: [],
315
- txCount: 0,
316
- error: 'signedTransactions cannot be empty'
317
- };
318
- }
319
- if (!config.rpcUrl) {
320
- return {
321
- code: false,
322
- totalTransactions,
323
- bundleHash: 'direct',
324
- txHashes: [],
325
- txCount: totalTransactions,
326
- error: 'rpcUrl is required in config'
327
- };
328
- }
329
- const chainId = config.chainId ?? 143;
330
- const chainName = config.chainName ?? 'MONAD';
331
- // 创建 Provider
332
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
333
- chainId,
334
- name: chainName
335
- });
336
- // ✅ 并行广播所有交易
337
- const broadcastPromises = signedTransactions.map(async (signedTx, i) => {
338
- try {
339
- const txResponse = await provider.broadcastTransaction(signedTx);
340
- // 如果需要等待确认
341
- if (config.waitForConfirmation) {
342
- try {
343
- const receipt = await provider.waitForTransaction(txResponse.hash, 1, config.confirmationTimeout ?? 30000);
344
- if (receipt && receipt.status === 0) {
345
- console.warn(`⚠️ [${chainName}] 交易 ${txResponse.hash} 执行失败(已上链但状态为0)`);
346
- }
347
- }
348
- catch {
349
- console.warn(`⚠️ [${chainName}] 等待交易确认超时: ${txResponse.hash}`);
350
- }
351
- }
352
- return {
353
- index: i,
354
- success: true,
355
- txHash: txResponse.hash
356
- };
357
- }
358
- catch (error) {
359
- const errorMessage = error instanceof Error ? error.message : String(error);
360
- console.error(`❌ [${chainName}] 交易 ${i + 1}/${totalTransactions} 广播失败:`, errorMessage);
361
- // ✅ 兼容:nonce too low / already known 等情况下,交易可能已经被接收
362
- const recovered = await recoverTxHashIfAlreadySeen(provider, signedTx, errorMessage);
363
- if (recovered) {
364
- if (config.waitForConfirmation) {
365
- try {
366
- await provider.waitForTransaction(recovered, 1, config.confirmationTimeout ?? 30000);
367
- }
368
- catch {
369
- void 0;
370
- }
371
- }
372
- return { index: i, success: true, txHash: recovered, error: errorMessage };
373
- }
374
- return {
375
- index: i,
376
- success: false,
377
- error: errorMessage
378
- };
379
- }
380
- });
381
- const results = await Promise.all(broadcastPromises);
382
- // 按索引排序结果
383
- results.sort((a, b) => a.index - b.index);
384
- const txHashes = results.filter(r => r.success && r.txHash).map(r => r.txHash);
385
- const errors = results.filter(r => !r.success).map(r => `交易 ${r.index + 1}: ${r.error}`);
386
- return {
387
- code: txHashes.length > 0,
388
- totalTransactions,
389
- bundleHash: 'direct',
390
- txHashes,
391
- txCount: totalTransactions,
392
- error: errors.length > 0 ? errors.join('; ') : undefined
393
- };
394
- }
395
- /**
396
- * ✅ 顺序广播并等待确认(用于多跳交易等需要顺序执行的场景)
397
- *
398
- * 每笔交易广播后会等待上链确认,确保后续交易能正确执行
399
- *
400
- * ⚠️ 多跳场景:如果某笔交易失败,会立即停止(因为后续交易肯定也会失败)
401
- *
402
- * @param signedTransactions 签名后的交易数组
403
- * @param config 直接广播配置
404
- * @returns 广播结果
405
- */
406
- export async function submitDirectToRpcSequential(signedTransactions, config) {
407
- const totalTransactions = signedTransactions?.length ?? 0;
408
- if (!signedTransactions || signedTransactions.length === 0) {
409
- return {
410
- code: false,
411
- totalTransactions: 0,
412
- bundleHash: 'direct',
413
- txHashes: [],
414
- txCount: 0,
415
- error: 'signedTransactions cannot be empty'
416
- };
417
- }
418
- if (!config.rpcUrl) {
419
- return {
420
- code: false,
421
- totalTransactions,
422
- bundleHash: 'direct',
423
- txHashes: [],
424
- txCount: totalTransactions,
425
- error: 'rpcUrl is required in config'
426
- };
427
- }
428
- const chainId = config.chainId ?? CHAINS.MONAD.chainId;
429
- const chainName = config.chainName ?? 'MONAD';
430
- // ✅ XLayer 链默认 120 秒超时(网络可能较慢)
431
- const confirmationTimeout = config.confirmationTimeout ?? (chainId === CHAINS.XLAYER.chainId ? CHAINS.XLAYER.confirmationTimeout : CHAINS.BSC.confirmationTimeout);
432
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
433
- chainId,
434
- name: chainName
435
- });
436
- const results = [];
437
- const txHashes = [];
438
- const errors = [];
439
- // 顺序广播并等待确认
440
- for (let i = 0; i < signedTransactions.length; i++) {
441
- const signedTx = signedTransactions[i];
442
- try {
443
- // 广播交易
444
- const txResponse = await provider.broadcastTransaction(signedTx);
445
- // ✅ 等待交易确认
446
- const receipt = await provider.waitForTransaction(txResponse.hash, 1, // 等待1个确认
447
- confirmationTimeout);
448
- if (receipt && receipt.status === 1) {
449
- results.push({
450
- index: i,
451
- success: true,
452
- txHash: txResponse.hash
453
- });
454
- txHashes.push(txResponse.hash);
455
- }
456
- else {
457
- const errorMsg = `交易执行失败(status=${receipt?.status})`;
458
- console.error(`❌ [${chainName}] 交易 ${i + 1}/${totalTransactions} 上链失败: ${errorMsg}`);
459
- results.push({
460
- index: i,
461
- success: false,
462
- txHash: txResponse.hash,
463
- error: errorMsg
464
- });
465
- errors.push(`交易 ${i + 1}: ${errorMsg}`);
466
- // ✅ 多跳场景:如果某笔失败,后续交易肯定也会失败,立即停止
467
- console.warn(`⚠️ [${chainName}] 多跳模式检测到失败,停止后续 ${totalTransactions - i - 1} 笔交易`);
468
- break;
469
- }
470
- }
471
- catch (error) {
472
- const errorMessage = error instanceof Error ? error.message : String(error);
473
- console.error(`❌ [${chainName}] 交易 ${i + 1}/${totalTransactions} 广播/确认失败:`, errorMessage);
474
- // ✅ 兼容:nonce too low / already known 等情况下,交易可能已经被接收
475
- const recovered = await recoverTxHashIfAlreadySeen(provider, signedTx, errorMessage);
476
- if (recovered) {
477
- // 顺序模式依赖确认:尽量等待一下
478
- try {
479
- const receipt = await provider.waitForTransaction(recovered, 1, confirmationTimeout);
480
- if (receipt && receipt.status === 1) {
481
- results.push({ index: i, success: true, txHash: recovered, error: errorMessage });
482
- txHashes.push(recovered);
483
- continue;
484
- }
485
- const errorMsg = `交易执行失败(status=${receipt?.status})`;
486
- console.error(`❌ [${chainName}] 交易 ${i + 1} 恢复失败: ${errorMsg}`);
487
- results.push({ index: i, success: false, txHash: recovered, error: `${errorMessage} | ${errorMsg}` });
488
- errors.push(`交易 ${i + 1}: ${errorMessage} | ${errorMsg}`);
489
- // ✅ 多跳场景:失败则停止
490
- console.warn(`⚠️ [${chainName}] 多跳模式检测到失败,停止后续 ${totalTransactions - i - 1} 笔交易`);
491
- break;
492
- }
493
- catch (waitError) {
494
- // 等待超时:对于多跳场景,不能假设成功,需要停止
495
- const waitErrorMsg = waitError instanceof Error ? waitError.message : String(waitError);
496
- console.error(`⏱️ [${chainName}] 交易 ${i + 1} 等待确认超时: ${waitErrorMsg}`);
497
- results.push({ index: i, success: false, txHash: recovered, error: `${errorMessage} | 等待确认超时: ${waitErrorMsg}` });
498
- errors.push(`交易 ${i + 1}: ${errorMessage} | 等待确认超时`);
499
- // ✅ 多跳场景:超时也停止
500
- console.warn(`⚠️ [${chainName}] 多跳模式检测到超时,停止后续 ${totalTransactions - i - 1} 笔交易`);
501
- break;
502
- }
503
- }
504
- results.push({
505
- index: i,
506
- success: false,
507
- error: errorMessage
508
- });
509
- errors.push(`交易 ${i + 1}: ${errorMessage}`);
510
- // ✅ 多跳场景:如果某笔失败,后续交易肯定也会失败,立即停止
511
- console.warn(`⚠️ [${chainName}] 多跳模式检测到失败,停止后续 ${totalTransactions - i - 1} 笔交易`);
512
- break;
513
- }
514
- }
515
- return {
516
- code: txHashes.length > 0,
517
- totalTransactions,
518
- bundleHash: 'direct',
519
- txHashes,
520
- txCount: totalTransactions,
521
- error: errors.length > 0 ? errors.join('; ') : undefined
522
- };
523
- }
524
- /**
525
- * ✅ 顺序广播但不等待确认(用于 AA handleOps + tail 等 nonce 连续的场景)
526
- *
527
- * 按顺序逐笔发送交易,每笔只等待广播成功(RPC 返回 txHash),不等待链上确认。
528
- * 这样可以保证交易按顺序进入 mempool,同时避免等待确认超时。
529
- *
530
- * @param signedTransactions 签名后的交易数组
531
- * @param config 直接广播配置
532
- * @returns 广播结果
533
- */
534
- export async function submitDirectToRpcSequentialNoWait(signedTransactions, config) {
535
- const totalTransactions = signedTransactions?.length ?? 0;
536
- if (!signedTransactions || signedTransactions.length === 0) {
537
- return {
538
- code: false,
539
- totalTransactions: 0,
540
- bundleHash: 'direct',
541
- txHashes: [],
542
- txCount: 0,
543
- error: 'signedTransactions cannot be empty'
544
- };
545
- }
546
- if (!config.rpcUrl) {
547
- return {
548
- code: false,
549
- totalTransactions,
550
- bundleHash: 'direct',
551
- txHashes: [],
552
- txCount: totalTransactions,
553
- error: 'rpcUrl is required in config'
554
- };
555
- }
556
- const chainId = config.chainId ?? 143;
557
- const chainName = config.chainName ?? 'MONAD';
558
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
559
- chainId,
560
- name: chainName
561
- });
562
- const results = [];
563
- const txHashes = [];
564
- const errors = [];
565
- // ✅ 顺序广播,每笔只等待广播成功(不等待链上确认)
566
- for (let i = 0; i < signedTransactions.length; i++) {
567
- const signedTx = signedTransactions[i];
568
- try {
569
- // 广播交易,等待 RPC 返回 txHash
570
- const txResponse = await provider.broadcastTransaction(signedTx);
571
- results.push({
572
- index: i,
573
- success: true,
574
- txHash: txResponse.hash
575
- });
576
- txHashes.push(txResponse.hash);
577
- }
578
- catch (error) {
579
- const errorMessage = error instanceof Error ? error.message : String(error);
580
- console.error(`❌ [${chainName}] 交易 ${i + 1}/${totalTransactions} 广播失败:`, errorMessage);
581
- // ✅ 兼容:nonce too low / already known 等情况下,交易可能已经被接收
582
- const recovered = await recoverTxHashIfAlreadySeen(provider, signedTx, errorMessage);
583
- if (recovered) {
584
- results.push({ index: i, success: true, txHash: recovered, error: errorMessage });
585
- txHashes.push(recovered);
586
- continue;
587
- }
588
- results.push({
589
- index: i,
590
- success: false,
591
- error: errorMessage
592
- });
593
- errors.push(`交易 ${i + 1}: ${errorMessage}`);
594
- // ✅ 如果某笔失败,继续尝试后续交易(可能是 nonce 问题可以自动恢复)
595
- }
596
- }
597
- return {
598
- code: txHashes.length > 0,
599
- totalTransactions,
600
- bundleHash: 'direct',
601
- txHashes,
602
- txCount: totalTransactions,
603
- error: errors.length > 0 ? errors.join('; ') : undefined
604
- };
605
- }
606
- /**
607
- * 并行逐笔广播到 RPC(速度更快,但可能有 nonce 冲突)
608
- *
609
- * ⚠️ 注意:仅适用于不同钱包的交易,同一钱包的多笔交易应使用顺序广播
610
- *
611
- * @param signedTransactions 签名后的交易数组
612
- * @param config 直接广播配置
613
- * @returns 广播结果
614
- */
615
- export async function submitDirectToRpcParallel(signedTransactions, config) {
616
- const totalTransactions = signedTransactions?.length ?? 0;
617
- if (!signedTransactions || signedTransactions.length === 0) {
618
- return {
619
- code: false,
620
- totalTransactions: 0,
621
- bundleHash: 'direct',
622
- txHashes: [],
623
- txCount: 0,
624
- error: 'signedTransactions cannot be empty'
625
- };
626
- }
627
- if (!config.rpcUrl) {
628
- return {
629
- code: false,
630
- totalTransactions,
631
- bundleHash: 'direct',
632
- txHashes: [],
633
- txCount: totalTransactions,
634
- error: 'rpcUrl is required in config'
635
- };
636
- }
637
- const chainId = config.chainId ?? 143;
638
- const chainName = config.chainName ?? 'MONAD';
639
- const provider = new ethers.JsonRpcProvider(config.rpcUrl, {
640
- chainId,
641
- name: chainName
642
- });
643
- // 并行广播
644
- const broadcastPromises = signedTransactions.map(async (signedTx, i) => {
645
- try {
646
- const txResponse = await provider.broadcastTransaction(signedTx);
647
- return {
648
- index: i,
649
- success: true,
650
- txHash: txResponse.hash
651
- };
652
- }
653
- catch (error) {
654
- const msg = error instanceof Error ? error.message : String(error);
655
- return {
656
- index: i,
657
- success: false,
658
- error: msg,
659
- };
660
- }
661
- });
662
- const results = await Promise.all(broadcastPromises);
663
- const txHashes = results.filter(r => r.success && r.txHash).map(r => r.txHash);
664
- const errors = results.filter(r => !r.success).map(r => `交易 ${r.index + 1}: ${r.error}`);
665
- return {
666
- code: txHashes.length > 0,
667
- totalTransactions,
668
- bundleHash: 'direct',
669
- txHashes,
670
- txCount: totalTransactions,
671
- error: errors.length > 0 ? errors.join('; ') : undefined
672
- };
673
- }
674
- /**
675
- * ✅ 智能广播到 RPC(自动选择并行或顺序)
676
- *
677
- * 根据交易的发送者地址自动决定广播策略:
678
- * - 如果所有交易来自不同钱包:使用并行广播(速度快)
679
- * - 如果存在同一钱包的多笔交易:使用顺序广播(确保 nonce 顺序)
680
- *
681
- * @param signedTransactions 签名后的交易数组
682
- * @param config 直接广播配置
683
- * @param options 额外选项
684
- * @returns 广播结果(包含使用的模式)
685
- *
686
- * @example
687
- * ```typescript
688
- * import { submitDirectToRpcSmart } from 'four-flap-meme-sdk';
689
- *
690
- * const result = await submitDirectToRpcSmart(signedTransactions, {
691
- * rpcUrl: 'https://xlayerrpc.okx.com',
692
- * chainId: 196,
693
- * chainName: 'XLAYER'
694
- * });
695
- *
696
- * console.log('使用模式:', result.mode); // 'parallel' 或 'sequential'
697
- * ```
698
- */
699
- export async function submitDirectToRpcSmart(signedTransactions, config, options) {
700
- if (!signedTransactions || signedTransactions.length === 0) {
701
- return {
702
- code: false,
703
- totalTransactions: 0,
704
- bundleHash: 'direct',
705
- txHashes: [],
706
- txCount: 0,
707
- error: 'signedTransactions cannot be empty',
708
- mode: 'parallel'
709
- };
710
- }
711
- // 检测是否有同一钱包的多笔交易
712
- const hasMultipleFromSameWallet = (() => {
713
- if (signedTransactions.length < 2)
714
- return false;
715
- const seen = new Set();
716
- for (const raw of signedTransactions) {
717
- if (!raw)
718
- continue;
719
- try {
720
- const tx = ethers.Transaction.from(raw);
721
- const from = (tx.from || '').toLowerCase();
722
- if (!from)
723
- continue;
724
- if (seen.has(from))
725
- return true;
726
- seen.add(from);
727
- }
728
- catch {
729
- // ignore parse errors
730
- }
731
- }
732
- return false;
733
- })();
734
- if (hasMultipleFromSameWallet) {
735
- // 使用顺序广播
736
- const result = options?.waitConfirmation
737
- ? await submitDirectToRpcSequential(signedTransactions, config)
738
- : await submitDirectToRpcSequentialNoWait(signedTransactions, config);
739
- return { ...result, mode: 'sequential' };
740
- }
741
- else {
742
- // 使用并行广播
743
- const result = await submitDirectToRpcParallel(signedTransactions, config);
744
- return { ...result, mode: 'parallel' };
745
- }
746
- }
1
+ /** Bundle 提交(Merkle / BlockRazor / 逐笔 RPC)— 实现见 bundle-core/submit */
2
+ export { submitBundleToMerkle, submitMultipleBundles, submitMultipleBundlesParallel, submitBundleToBlockRazor, submitMultipleBundlesToBlockRazor, submitMultipleBundlesToBlockRazorParallel, submitDirectToRpc, submitDirectToRpcSequential, submitDirectToRpcSequentialNoWait, submitDirectToRpcParallel, submitDirectToRpcSmart, } from '../../../bundle-core/submit.js';