four-flap-meme-sdk 2.2.19 → 2.2.20

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 (493) hide show
  1. package/dist/__tests__/subpath-exports.test.d.ts +1 -0
  2. package/dist/__tests__/subpath-exports.test.js +64 -0
  3. package/dist/abis/common.d.ts +85 -0
  4. package/dist/abis/common.js +240 -0
  5. package/dist/abis/contracts/TaxToken.json +969 -0
  6. package/dist/abis/contracts/TokenManager.json +836 -0
  7. package/dist/abis/contracts/TokenManager2.json +136 -0
  8. package/dist/abis/contracts/TokenManagerHelper3.json +993 -0
  9. package/dist/abis/contracts/index.d.ts +5 -0
  10. package/dist/abis/contracts/index.js +5 -0
  11. package/dist/abis/flap/index.d.ts +5 -0
  12. package/dist/abis/flap/index.js +5 -0
  13. package/dist/abis/flap/portal-eip7702.d.ts +4 -0
  14. package/dist/abis/flap/portal-eip7702.js +39 -0
  15. package/dist/abis/flap/portal-events.d.ts +6 -0
  16. package/dist/abis/flap/portal-events.js +17 -0
  17. package/dist/abis/flap/portal-merkle.d.ts +4 -0
  18. package/dist/abis/flap/portal-merkle.js +25 -0
  19. package/dist/abis/flap/portal.d.ts +6 -0
  20. package/dist/abis/flap/portal.js +37 -0
  21. package/dist/abis/flap/vault.d.ts +171 -0
  22. package/dist/abis/flap/vault.js +91 -0
  23. package/dist/abis/index.d.ts +8 -0
  24. package/dist/abis/index.js +11 -0
  25. package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
  26. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  27. package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
  28. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  29. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  30. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  31. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  32. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  33. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  34. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  35. package/dist/bundle-core/config-helpers.d.ts +37 -0
  36. package/dist/bundle-core/config-helpers.js +58 -0
  37. package/dist/bundle-core/errors.d.ts +50 -0
  38. package/dist/bundle-core/errors.js +38 -0
  39. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  40. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  41. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  42. package/dist/bundle-core/four-meme/core-helpers.js +41 -0
  43. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  44. package/dist/bundle-core/four-meme/core.js +515 -0
  45. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  46. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  47. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  48. package/dist/bundle-core/four-meme/private.js +465 -0
  49. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  50. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  51. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  52. package/dist/bundle-core/four-meme/swap-buy-first.js +456 -0
  53. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  54. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  55. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  56. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  57. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +28 -0
  58. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  59. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  60. package/dist/bundle-core/four-meme/swap.js +505 -0
  61. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  62. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  63. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  64. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  65. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  66. package/dist/bundle-core/four-meme/types/index.js +1 -0
  67. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  68. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  69. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  70. package/dist/bundle-core/four-meme/types.js +1 -0
  71. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  72. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  73. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  74. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  75. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  76. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  77. package/dist/bundle-core/index.d.ts +8 -0
  78. package/dist/bundle-core/index.js +8 -0
  79. package/dist/bundle-core/internal.d.ts +16 -0
  80. package/dist/bundle-core/internal.js +160 -0
  81. package/dist/bundle-core/sign-context-helpers.d.ts +26 -0
  82. package/dist/bundle-core/sign-context-helpers.js +63 -0
  83. package/dist/bundle-core/submit.d.ts +293 -0
  84. package/dist/bundle-core/submit.js +731 -0
  85. package/dist/bundle-core/types/index.d.ts +8 -0
  86. package/dist/bundle-core/types/index.js +1 -0
  87. package/dist/bundle-core/types.d.ts +1 -0
  88. package/dist/bundle-core/types.js +1 -0
  89. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  90. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
  91. package/dist/chains/bsc/four/config.d.ts +5 -67
  92. package/dist/chains/bsc/four/config.js +2 -114
  93. package/dist/chains/bsc/four/core.d.ts +1 -4
  94. package/dist/chains/bsc/four/core.js +1 -592
  95. package/dist/chains/bsc/four/index.d.ts +6 -6
  96. package/dist/chains/bsc/four/index.js +6 -6
  97. package/dist/chains/bsc/four/internal.d.ts +2 -46
  98. package/dist/chains/bsc/four/internal.js +2 -239
  99. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  100. package/dist/chains/bsc/four/pancake-proxy.js +1 -687
  101. package/dist/chains/bsc/four/private.d.ts +1 -27
  102. package/dist/chains/bsc/four/private.js +1 -477
  103. package/dist/chains/bsc/four/submit.d.ts +2 -315
  104. package/dist/chains/bsc/four/submit.js +2 -752
  105. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  106. package/dist/chains/bsc/four/swap-buy-first.js +2 -507
  107. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  108. package/dist/chains/bsc/four/swap-internal.js +1 -18
  109. package/dist/chains/bsc/four/swap.d.ts +2 -144
  110. package/dist/chains/bsc/four/swap.js +2 -766
  111. package/dist/chains/bsc/four/types.d.ts +1 -476
  112. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  113. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  114. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  115. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  116. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  117. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  118. package/dist/chains/bsc/four/utils.d.ts +5 -18
  119. package/dist/chains/bsc/four/utils.js +5 -1552
  120. package/dist/chains/bsc/iro.d.ts +5 -0
  121. package/dist/chains/bsc/iro.js +4 -0
  122. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +155 -0
  123. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +80 -0
  124. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  125. package/dist/chains/bsc/pancake/bundle-buy-first.js +98 -213
  126. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  127. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  128. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  129. package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
  130. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  131. package/dist/chains/bsc/pancake/index.js +1 -3
  132. package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
  133. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  134. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  135. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  136. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  137. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  138. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  139. package/dist/chains/eni/batch-router/transfer.js +55 -25
  140. package/dist/chains/eni/batch-router/utils.js +32 -6
  141. package/dist/chains/eni/bundler/sign.js +5 -6
  142. package/dist/chains/eni/bundler/submit.js +1 -4
  143. package/dist/chains/eni/constants.js +1 -1
  144. package/dist/chains/eni/flat-aliases.d.ts +10 -0
  145. package/dist/chains/eni/flat-aliases.js +8 -0
  146. package/dist/chains/eni/index.d.ts +2 -1
  147. package/dist/chains/eni/index.js +1 -0
  148. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  149. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  150. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  151. package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
  152. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
  153. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  154. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  155. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  156. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  157. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
  158. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  159. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  160. package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
  161. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  162. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  163. package/dist/chains/eni/platforms/iro/index.js +4 -4
  164. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  165. package/dist/chains/eni/platforms/iro/token.js +107 -31
  166. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  167. package/dist/chains/eni/submit.d.ts +43 -0
  168. package/dist/chains/eni/submit.js +287 -0
  169. package/dist/chains/index.d.ts +13 -0
  170. package/dist/chains/index.js +13 -0
  171. package/dist/chains/xlayer/constants.d.ts +5 -0
  172. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  173. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
  174. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  175. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  176. package/dist/chains/xlayer/eip7702/bundle-create.js +104 -74
  177. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  178. package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
  179. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  180. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
  181. package/dist/chains/xlayer/eip7702/constants.d.ts +11 -26
  182. package/dist/chains/xlayer/eip7702/constants.js +15 -68
  183. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
  184. package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
  185. package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
  186. package/dist/chains/xlayer/eip7702/index.js +28 -81
  187. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  188. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  189. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  190. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
  191. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  192. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +58 -0
  193. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  194. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  195. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  196. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  197. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  198. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  199. package/dist/chains/xlayer/eip7702/volume.js +89 -164
  200. package/dist/chains/xlayer/eoa/constants.d.ts +1 -1
  201. package/dist/chains/xlayer/eoa/constants.js +2 -16
  202. package/dist/chains/xlayer/eoa/dex-helpers.d.ts +1 -1
  203. package/dist/chains/xlayer/eoa/dex-helpers.js +7 -37
  204. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  205. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  206. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  207. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
  208. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  209. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
  210. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  211. package/dist/chains/xlayer/eoa/index.js +8 -23
  212. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  213. package/dist/chains/xlayer/eoa/router-manager.js +5 -4
  214. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  215. package/dist/chains/xlayer/eoa/types.js +1 -3
  216. package/dist/chains/xlayer/index.d.ts +3 -2
  217. package/dist/chains/xlayer/index.js +4 -7
  218. package/dist/contracts/helper3.d.ts +20 -5
  219. package/dist/contracts/helper3.js +56 -20
  220. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  221. package/dist/contracts/tm-bundle-helpers.js +73 -0
  222. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  223. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
  224. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
  225. package/dist/contracts/tm-bundle-merkle/config.js +2 -114
  226. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  227. package/dist/contracts/tm-bundle-merkle/core.js +1 -591
  228. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  229. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  230. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
  231. package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
  232. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  233. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
  234. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  235. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  236. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  237. package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
  238. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  239. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
  240. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  241. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  242. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  243. package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
  244. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  245. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  246. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  247. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  248. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  249. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  250. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  251. package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
  252. package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
  253. package/dist/contracts/tm-bundle.d.ts +3 -51
  254. package/dist/contracts/tm-bundle.js +120 -187
  255. package/dist/contracts/tm.d.ts +10 -8
  256. package/dist/contracts/tm.js +39 -35
  257. package/dist/contracts/tm1.js +9 -4
  258. package/dist/contracts/tm2.js +10 -5
  259. package/dist/dex/direct-router-helpers.d.ts +269 -0
  260. package/dist/dex/direct-router-helpers.js +536 -0
  261. package/dist/dex/direct-router.d.ts +3 -125
  262. package/dist/dex/direct-router.js +244 -672
  263. package/dist/dex/types.d.ts +81 -0
  264. package/dist/dex/types.js +1 -0
  265. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  266. package/dist/exports/root-bundle-and-tooling.js +30 -0
  267. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  268. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  269. package/dist/exports/root-foundations.d.ts +35 -0
  270. package/dist/exports/root-foundations.js +70 -0
  271. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  272. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  273. package/dist/flap/index.d.ts +11 -0
  274. package/dist/flap/index.js +9 -0
  275. package/dist/flows/create.d.ts +2 -1
  276. package/dist/flows/create.js +6 -6
  277. package/dist/flows/index.d.ts +9 -0
  278. package/dist/flows/index.js +9 -0
  279. package/dist/index.d.ts +20 -88
  280. package/dist/index.js +20 -218
  281. package/dist/merkle/index.d.ts +12 -0
  282. package/dist/merkle/index.js +11 -0
  283. package/dist/shared/abis/common.d.ts +2 -83
  284. package/dist/shared/abis/common.js +2 -254
  285. package/dist/shared/abis/index.d.ts +5 -6
  286. package/dist/shared/abis/index.js +5 -7
  287. package/dist/shared/clients/blockrazor.d.ts +4 -8
  288. package/dist/shared/clients/blockrazor.js +43 -35
  289. package/dist/shared/clients/club48.d.ts +2 -2
  290. package/dist/shared/clients/club48.js +36 -30
  291. package/dist/shared/clients/emitservice.js +2 -0
  292. package/dist/shared/clients/four.d.ts +21 -6
  293. package/dist/shared/clients/four.js +29 -24
  294. package/dist/shared/clients/index.d.ts +8 -0
  295. package/dist/shared/clients/index.js +8 -0
  296. package/dist/shared/clients/merkle.d.ts +4 -3
  297. package/dist/shared/clients/merkle.js +30 -47
  298. package/dist/shared/constants/addresses.d.ts +27 -1
  299. package/dist/shared/constants/addresses.js +39 -2
  300. package/dist/shared/constants/chains.d.ts +1 -1
  301. package/dist/shared/constants/chains.js +1 -1
  302. package/dist/shared/constants/gas.d.ts +1 -1
  303. package/dist/shared/constants/gas.js +2 -6
  304. package/dist/shared/constants/index.d.ts +4 -1
  305. package/dist/shared/constants/index.js +2 -1
  306. package/dist/shared/constants/quote.d.ts +30 -0
  307. package/dist/shared/constants/quote.js +37 -0
  308. package/dist/shared/flap/abi.js +1 -1
  309. package/dist/shared/flap/constants.d.ts +1 -2
  310. package/dist/shared/flap/constants.js +3 -4
  311. package/dist/shared/flap/curve.js +3 -0
  312. package/dist/shared/flap/errors.d.ts +1 -4
  313. package/dist/shared/flap/errors.js +20 -1
  314. package/dist/shared/flap/index.d.ts +4 -5
  315. package/dist/shared/flap/index.js +4 -5
  316. package/dist/shared/flap/launch-v6.d.ts +0 -5
  317. package/dist/shared/flap/launch-v6.js +2 -16
  318. package/dist/shared/flap/meta.d.ts +22 -18
  319. package/dist/shared/flap/meta.js +32 -24
  320. package/dist/shared/flap/permit.js +10 -3
  321. package/dist/shared/flap/pinata.d.ts +22 -6
  322. package/dist/shared/flap/pinata.js +21 -26
  323. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  324. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  325. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  326. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  327. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  328. package/dist/shared/flap/portal-bundle-merkle/core.js +168 -175
  329. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +17 -4
  330. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +96 -117
  331. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +104 -122
  332. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  333. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  334. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  335. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  336. package/dist/shared/flap/portal-bundle-merkle/swap-batch.d.ts +8 -0
  337. package/dist/shared/flap/portal-bundle-merkle/swap-batch.js +227 -0
  338. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  339. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  340. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  341. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +69 -288
  342. package/dist/shared/flap/portal-bundle-merkle/swap-cross.d.ts +9 -0
  343. package/dist/shared/flap/portal-bundle-merkle/swap-cross.js +139 -0
  344. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  345. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  346. package/dist/shared/flap/portal-bundle-merkle/swap-planning.d.ts +70 -0
  347. package/dist/shared/flap/portal-bundle-merkle/swap-planning.js +182 -0
  348. package/dist/shared/flap/portal-bundle-merkle/swap-quick-batch.d.ts +16 -0
  349. package/dist/shared/flap/portal-bundle-merkle/swap-quick-batch.js +327 -0
  350. package/dist/shared/flap/portal-bundle-merkle/swap-single.d.ts +2 -0
  351. package/dist/shared/flap/portal-bundle-merkle/swap-single.js +184 -0
  352. package/dist/shared/flap/portal-bundle-merkle/swap-types.d.ts +101 -0
  353. package/dist/shared/flap/portal-bundle-merkle/swap-types.js +1 -0
  354. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +6 -199
  355. package/dist/shared/flap/portal-bundle-merkle/swap.js +5 -1357
  356. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +88 -12
  357. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  358. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  359. package/dist/shared/flap/portal-bundle.js +83 -78
  360. package/dist/shared/flap/portal-create-token.d.ts +39 -21
  361. package/dist/shared/flap/portal-create-token.js +121 -124
  362. package/dist/shared/flap/portal.d.ts +1 -2
  363. package/dist/shared/flap/portal.js +36 -28
  364. package/dist/shared/flap/vanity.d.ts +6 -6
  365. package/dist/shared/flap/vanity.js +15 -21
  366. package/dist/shared/flap/vault.d.ts +25 -93
  367. package/dist/shared/flap/vault.js +77 -127
  368. package/dist/shared/foundation/amount/split-by-weight.d.ts +5 -0
  369. package/dist/shared/foundation/amount/split-by-weight.js +35 -0
  370. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  371. package/dist/shared/foundation/dex/v3-path.js +35 -0
  372. package/dist/shared/foundation/erc20/decimals.d.ts +7 -0
  373. package/dist/shared/foundation/erc20/decimals.js +24 -0
  374. package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
  375. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  376. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  377. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  378. package/dist/shared/foundation/index.d.ts +15 -0
  379. package/dist/shared/foundation/index.js +14 -0
  380. package/dist/shared/foundation/nonce/nonce-manager.d.ts +19 -0
  381. package/dist/shared/foundation/nonce/nonce-manager.js +217 -0
  382. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  383. package/dist/shared/foundation/normalize-unknown.js +29 -0
  384. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  385. package/dist/shared/foundation/sdk-logger.js +12 -0
  386. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  387. package/dist/shared/foundation/tx/build-request.js +25 -0
  388. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  389. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  390. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  391. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  392. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  393. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  394. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  395. package/dist/shared/foundation/types/erc20.js +1 -0
  396. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  397. package/dist/shared/foundation/types/holders-maker.js +1 -0
  398. package/dist/shared/foundation/types/index.d.ts +7 -0
  399. package/dist/shared/foundation/types/index.js +1 -0
  400. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  401. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  402. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  403. package/dist/shared/foundation/types/multicall.js +1 -0
  404. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  405. package/dist/shared/foundation/types/private-sale.js +1 -0
  406. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  407. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  408. package/dist/shared/foundation/wallet/generate.d.ts +5 -0
  409. package/dist/shared/foundation/wallet/generate.js +8 -0
  410. package/dist/shared/four/tax-token.d.ts +1 -1
  411. package/dist/shared/four/tax-token.js +31 -10
  412. package/dist/shared/index.d.ts +6 -0
  413. package/dist/shared/index.js +4 -0
  414. package/dist/types/errors.d.ts +27 -0
  415. package/dist/types/errors.js +34 -0
  416. package/dist/utils/airdrop-sweep.d.ts +4 -76
  417. package/dist/utils/airdrop-sweep.js +42 -55
  418. package/dist/utils/bundle-helpers.d.ts +9 -243
  419. package/dist/utils/bundle-helpers.js +10 -584
  420. package/dist/utils/constants.d.ts +5 -61
  421. package/dist/utils/constants.js +5 -80
  422. package/dist/utils/contract-factory.d.ts +2 -4
  423. package/dist/utils/contract-factory.js +25 -18
  424. package/dist/utils/erc20.d.ts +7 -89
  425. package/dist/utils/erc20.js +98 -129
  426. package/dist/utils/errors.d.ts +12 -1
  427. package/dist/utils/errors.js +60 -1
  428. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  429. package/dist/utils/holders-maker/addresses.js +15 -0
  430. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  431. package/dist/utils/holders-maker/buy-tx.js +278 -0
  432. package/dist/utils/holders-maker/constants.d.ts +6 -0
  433. package/dist/utils/holders-maker/constants.js +7 -0
  434. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  435. package/dist/utils/holders-maker/disperse.js +90 -0
  436. package/dist/utils/holders-maker/routing.d.ts +4 -0
  437. package/dist/utils/holders-maker/routing.js +45 -0
  438. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  439. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  440. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  441. package/dist/utils/holders-maker-helpers.js +9 -0
  442. package/dist/utils/holders-maker.d.ts +2 -138
  443. package/dist/utils/holders-maker.js +50 -671
  444. package/dist/utils/hop-chains.d.ts +35 -0
  445. package/dist/utils/hop-chains.js +215 -0
  446. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  447. package/dist/utils/lp-inspect-helpers.js +109 -0
  448. package/dist/utils/lp-inspect.d.ts +2 -112
  449. package/dist/utils/lp-inspect.js +78 -293
  450. package/dist/utils/mpcExclusive.d.ts +2 -5
  451. package/dist/utils/mpcExclusive.js +4 -3
  452. package/dist/utils/pcs-infinity-cl.js +18 -54
  453. package/dist/utils/private-sale.d.ts +2 -58
  454. package/dist/utils/private-sale.js +4 -15
  455. package/dist/utils/provider-factory.d.ts +4 -0
  456. package/dist/utils/provider-factory.js +10 -0
  457. package/dist/utils/quote-helpers.d.ts +4 -45
  458. package/dist/utils/quote-helpers.js +17 -74
  459. package/dist/utils/stealth-transfer.d.ts +2 -28
  460. package/dist/utils/stealth-transfer.js +39 -19
  461. package/dist/utils/swap-helpers.d.ts +2 -15
  462. package/dist/utils/swap-helpers.js +6 -11
  463. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  464. package/dist/utils/types/airdrop-sweep.js +1 -0
  465. package/dist/utils/types/contract-factory.d.ts +1 -0
  466. package/dist/utils/types/contract-factory.js +1 -0
  467. package/dist/utils/types/erc20.d.ts +1 -0
  468. package/dist/utils/types/erc20.js +1 -0
  469. package/dist/utils/types/errors.d.ts +1 -0
  470. package/dist/utils/types/errors.js +1 -0
  471. package/dist/utils/types/holders-maker.d.ts +1 -0
  472. package/dist/utils/types/holders-maker.js +1 -0
  473. package/dist/utils/types/hop-chains.d.ts +8 -0
  474. package/dist/utils/types/hop-chains.js +1 -0
  475. package/dist/utils/types/index.d.ts +13 -0
  476. package/dist/utils/types/index.js +1 -0
  477. package/dist/utils/types/lp-inspect.d.ts +1 -0
  478. package/dist/utils/types/lp-inspect.js +1 -0
  479. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  480. package/dist/utils/types/mpc-exclusive.js +1 -0
  481. package/dist/utils/types/private-sale.d.ts +1 -0
  482. package/dist/utils/types/private-sale.js +1 -0
  483. package/dist/utils/types/quote-helpers.d.ts +1 -0
  484. package/dist/utils/types/quote-helpers.js +1 -0
  485. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  486. package/dist/utils/types/stealth-transfer.js +1 -0
  487. package/dist/utils/types/wallet.d.ts +25 -0
  488. package/dist/utils/types/wallet.js +1 -0
  489. package/dist/utils/wallet.d.ts +4 -25
  490. package/dist/utils/wallet.js +27 -22
  491. package/dist/vanity/index.d.ts +5 -0
  492. package/dist/vanity/index.js +5 -0
  493. package/package.json +100 -2
@@ -25,7 +25,7 @@ export async function getTokenWhiteList(params) {
25
25
  const provider = new JsonRpcProvider(params.rpcUrl || ENI_RPC, params.chainId || ENI_CHAIN_ID);
26
26
  const contract = new Contract(params.iroOwnerAddress, IRO_OWNER_WHITELIST_ABI, provider);
27
27
  const addresses = await contract.getTokenWhiteList(params.tokenAddress);
28
- return addresses.map(a => ethers.getAddress(a));
28
+ return addresses.map((a) => ethers.getAddress(a));
29
29
  }
30
30
  /**
31
31
  * 添加单个白名单地址 (返回签名交易)
@@ -34,11 +34,7 @@ export async function addTokenWhiteListForSubmit(params) {
34
34
  const provider = new JsonRpcProvider(params.rpcUrl || ENI_RPC, params.chainId || ENI_CHAIN_ID);
35
35
  const wallet = new Wallet(params.privateKey, provider);
36
36
  const iface = new ethers.Interface(IRO_OWNER_WHITELIST_ABI);
37
- const data = iface.encodeFunctionData('addTokenWhiteList', [
38
- params.tokenAddress,
39
- params.addr,
40
- params.quota,
41
- ]);
37
+ const data = iface.encodeFunctionData('addTokenWhiteList', [params.tokenAddress, params.addr, params.quota]);
42
38
  const feeData = await provider.getFeeData();
43
39
  const nonce = await provider.getTransactionCount(wallet.address, 'pending');
44
40
  const tx = await wallet.signTransaction({
@@ -59,17 +55,12 @@ export async function addTokenWhiteListForSubmit(params) {
59
55
  export async function batchAddTokenWhiteListForSubmit(params) {
60
56
  const provider = new JsonRpcProvider(params.rpcUrl || ENI_RPC, params.chainId || ENI_CHAIN_ID);
61
57
  const wallet = new Wallet(params.privateKey, provider);
62
- const tuples = params.entries.map(e => ({ account: e.addr, quota: e.quota }));
58
+ const tuples = params.entries.map((e) => ({ account: e.addr, quota: e.quota }));
63
59
  const iface = new ethers.Interface(IRO_OWNER_WHITELIST_ABI);
64
- const data = iface.encodeFunctionData('batchAddTokenWhiteList', [
65
- params.tokenAddress,
66
- tuples,
67
- ]);
60
+ const data = iface.encodeFunctionData('batchAddTokenWhiteList', [params.tokenAddress, tuples]);
68
61
  const feeData = await provider.getFeeData();
69
62
  const nonce = await provider.getTransactionCount(wallet.address, 'pending');
70
- const gasLimit = params.entries.length > 5
71
- ? BATCH_WHITELIST_GAS_LIMIT * 2n
72
- : BATCH_WHITELIST_GAS_LIMIT;
63
+ const gasLimit = params.entries.length > 5 ? BATCH_WHITELIST_GAS_LIMIT * 2n : BATCH_WHITELIST_GAS_LIMIT;
73
64
  const tx = await wallet.signTransaction({
74
65
  to: params.iroOwnerAddress,
75
66
  data,
@@ -89,10 +80,7 @@ export async function removeTokenWhiteListForSubmit(params) {
89
80
  const provider = new JsonRpcProvider(params.rpcUrl || ENI_RPC, params.chainId || ENI_CHAIN_ID);
90
81
  const wallet = new Wallet(params.privateKey, provider);
91
82
  const iface = new ethers.Interface(IRO_OWNER_WHITELIST_ABI);
92
- const data = iface.encodeFunctionData('removeTokenWhiteList', [
93
- params.tokenAddress,
94
- params.addr,
95
- ]);
83
+ const data = iface.encodeFunctionData('removeTokenWhiteList', [params.tokenAddress, params.addr]);
96
84
  const feeData = await provider.getFeeData();
97
85
  const nonce = await provider.getTransactionCount(wallet.address, 'pending');
98
86
  const tx = await wallet.signTransaction({
@@ -0,0 +1,43 @@
1
+ /**
2
+ * ENI 链交易提交方法
3
+ *
4
+ * 包括快速顺序广播、同块确认等提交策略。
5
+ */
6
+ export interface EniBundleSubmitConfig {
7
+ rpcUrl: string;
8
+ chainId?: number;
9
+ chainName?: string;
10
+ simulationTimeout?: number;
11
+ blockConfirmTimeout?: number;
12
+ }
13
+ export interface EniTxResult {
14
+ index: number;
15
+ success: boolean;
16
+ txHash?: string;
17
+ error?: string;
18
+ }
19
+ export interface EniBundleSubmitResult {
20
+ code: boolean;
21
+ totalTransactions: number;
22
+ successCount: number;
23
+ failedCount: number;
24
+ txHashes: string[];
25
+ results: EniTxResult[];
26
+ sameBlock: boolean;
27
+ blockNumber?: number;
28
+ blockNumbers?: number[];
29
+ simulationDurationMs?: number;
30
+ broadcastDurationMs?: number;
31
+ errorSummary?: string;
32
+ }
33
+ /**
34
+ * ENI 快速并行广播:业务交易并行 + 利润交易顺序跟随
35
+ */
36
+ export declare function submitEniParallelThenProfit(signedTransactions: string[], config: EniBundleSubmitConfig): Promise<EniBundleSubmitResult>;
37
+ /**
38
+ * ENI Bundle 提交:模拟验证 → 快速顺序广播 → 同块确认
39
+ *
40
+ * 复用同一 Provider 快速顺序广播,最小化延迟、最大化同块概率。
41
+ * ENI 出块 ~1.08s,连续 nonce 快速提交同块率极高。
42
+ */
43
+ export declare function submitBundleToEni(signedTransactions: string[], config: EniBundleSubmitConfig): Promise<EniBundleSubmitResult>;
@@ -0,0 +1,287 @@
1
+ /**
2
+ * ENI 链交易提交方法
3
+ *
4
+ * 包括快速顺序广播、同块确认等提交策略。
5
+ */
6
+ import { ethers } from 'ethers';
7
+ import { getErrorMessageFromUnknown } from '../../shared/foundation/index.js';
8
+ import { createSignProvider } from '../../bundle-core/sign-context-helpers.js';
9
+ // ==================== 内部辅助 ====================
10
+ function shouldTreatBroadcastErrorAsMaybeSent(m) {
11
+ return (m.includes('nonce too low') || m.includes('already known') || m.includes('replacement transaction underpriced'));
12
+ }
13
+ async function recoverTxHashIfAlreadySeen(provider, signedTx, errorMessage) {
14
+ if (!shouldTreatBroadcastErrorAsMaybeSent(errorMessage))
15
+ return undefined;
16
+ try {
17
+ const hash = ethers.keccak256(signedTx);
18
+ if (!hash)
19
+ return undefined;
20
+ const tx = await provider.getTransaction(hash);
21
+ return tx ? hash : undefined;
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ // ==================== 提交方法 ====================
28
+ /**
29
+ * ENI 快速并行广播:业务交易并行 + 利润交易顺序跟随
30
+ */
31
+ export async function submitEniParallelThenProfit(signedTransactions, config) {
32
+ const totalTransactions = signedTransactions?.length ?? 0;
33
+ const emptyFail = (msg) => ({
34
+ code: false,
35
+ totalTransactions,
36
+ successCount: 0,
37
+ failedCount: totalTransactions,
38
+ txHashes: [],
39
+ results: [],
40
+ sameBlock: false,
41
+ errorSummary: msg,
42
+ });
43
+ if (!signedTransactions || signedTransactions.length === 0)
44
+ return emptyFail('signedTransactions cannot be empty');
45
+ if (!config.rpcUrl)
46
+ return emptyFail('rpcUrl is required');
47
+ const chainId = config.chainId ?? 173;
48
+ const chainName = config.chainName ?? 'ENI';
49
+ const provider = createSignProvider(config.rpcUrl, chainId, chainName);
50
+ // Step 1: 按 from 地址分组,识别独立交易和依赖交易
51
+ const fromCounts = new Map();
52
+ const txMeta = [];
53
+ for (let i = 0; i < signedTransactions.length; i++) {
54
+ const tx = ethers.Transaction.from(signedTransactions[i]);
55
+ const from = tx.from;
56
+ const count = fromCounts.get(from) ?? 0;
57
+ fromCounts.set(from, count + 1);
58
+ txMeta.push({ from, index: i, seqInFrom: count });
59
+ }
60
+ const independentTxs = txMeta.filter((t) => t.seqInFrom === 0);
61
+ const allResults = [];
62
+ const txHashes = [];
63
+ const errors = [];
64
+ // Step 2: 并行广播独立交易
65
+ await Promise.all(independentTxs.map(async ({ index }) => {
66
+ try {
67
+ const txResponse = await provider.broadcastTransaction(signedTransactions[index]);
68
+ allResults[index] = {
69
+ index,
70
+ success: true,
71
+ txHash: txResponse.hash,
72
+ };
73
+ txHashes.push(txResponse.hash);
74
+ }
75
+ catch (error) {
76
+ const errorMessage = getErrorMessageFromUnknown(error);
77
+ const recovered = await recoverTxHashIfAlreadySeen(provider, signedTransactions[index], errorMessage);
78
+ if (recovered) {
79
+ allResults[index] = {
80
+ index,
81
+ success: true,
82
+ txHash: recovered,
83
+ error: errorMessage,
84
+ };
85
+ txHashes.push(recovered);
86
+ }
87
+ else {
88
+ allResults[index] = { index, success: false, error: errorMessage };
89
+ errors.push(`独立交易 ${index + 1}: ${errorMessage}`);
90
+ }
91
+ }
92
+ }));
93
+ // Step 3: 逐 from 处理依赖交易(利润尾随)
94
+ const independentFroms = independentTxs.map((t) => t.from);
95
+ const fromDependents = new Map();
96
+ for (const meta of txMeta) {
97
+ if (meta.seqInFrom > 0) {
98
+ const deps = fromDependents.get(meta.from) ?? [];
99
+ deps.push(meta);
100
+ fromDependents.set(meta.from, deps);
101
+ }
102
+ }
103
+ for (const from of independentFroms) {
104
+ const deps = fromDependents.get(from);
105
+ if (!deps || deps.length === 0)
106
+ continue;
107
+ for (const dep of deps) {
108
+ try {
109
+ const txResponse = await provider.broadcastTransaction(signedTransactions[dep.index]);
110
+ allResults[dep.index] = {
111
+ index: dep.index,
112
+ success: true,
113
+ txHash: txResponse.hash,
114
+ };
115
+ txHashes.push(txResponse.hash);
116
+ }
117
+ catch (error) {
118
+ const errorMessage = getErrorMessageFromUnknown(error);
119
+ const recovered = await recoverTxHashIfAlreadySeen(provider, signedTransactions[dep.index], errorMessage);
120
+ if (recovered) {
121
+ allResults[dep.index] = {
122
+ index: dep.index,
123
+ success: true,
124
+ txHash: recovered,
125
+ error: errorMessage,
126
+ };
127
+ txHashes.push(recovered);
128
+ }
129
+ else {
130
+ allResults[dep.index] = {
131
+ index: dep.index,
132
+ success: false,
133
+ error: errorMessage,
134
+ };
135
+ errors.push(`依赖交易 ${dep.index + 1}(${from}): ${errorMessage}`);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ return {
141
+ code: errors.length === 0,
142
+ totalTransactions,
143
+ successCount: txHashes.length,
144
+ failedCount: totalTransactions - txHashes.length,
145
+ txHashes,
146
+ results: allResults.filter(Boolean),
147
+ sameBlock: false,
148
+ errorSummary: errors.length > 0 ? errors.join('; ') : undefined,
149
+ };
150
+ }
151
+ /**
152
+ * ENI Bundle 提交:模拟验证 → 快速顺序广播 → 同块确认
153
+ *
154
+ * 复用同一 Provider 快速顺序广播,最小化延迟、最大化同块概率。
155
+ * ENI 出块 ~1.08s,连续 nonce 快速提交同块率极高。
156
+ */
157
+ export async function submitBundleToEni(signedTransactions, config) {
158
+ const totalTransactions = signedTransactions?.length ?? 0;
159
+ const emptyFail = (msg) => ({
160
+ code: false,
161
+ totalTransactions,
162
+ successCount: 0,
163
+ failedCount: totalTransactions,
164
+ txHashes: [],
165
+ results: [],
166
+ sameBlock: false,
167
+ errorSummary: msg,
168
+ });
169
+ if (!signedTransactions || signedTransactions.length === 0)
170
+ return emptyFail('signedTransactions cannot be empty');
171
+ if (!config.rpcUrl)
172
+ return emptyFail('rpcUrl is required');
173
+ const chainId = config.chainId ?? 173;
174
+ const chainName = config.chainName ?? 'ENI';
175
+ const simulationTimeout = config.simulationTimeout ?? 10000;
176
+ const blockConfirmTimeout = config.blockConfirmTimeout ?? 15000;
177
+ const provider = createSignProvider(config.rpcUrl, chainId, chainName);
178
+ // Phase 1: 模拟验证
179
+ const simStart = Date.now();
180
+ const simErrors = [];
181
+ for (let i = 0; i < signedTransactions.length; i++) {
182
+ try {
183
+ const tx = ethers.Transaction.from(signedTransactions[i]);
184
+ await Promise.race([
185
+ provider.call({
186
+ to: tx.to,
187
+ data: tx.data,
188
+ value: tx.value,
189
+ from: tx.from,
190
+ }),
191
+ new Promise((_, reject) => setTimeout(() => reject(new Error('simulation timeout')), simulationTimeout)),
192
+ ]);
193
+ }
194
+ catch (e) {
195
+ const msg = getErrorMessageFromUnknown(e);
196
+ if (msg.includes('simulation timeout')) {
197
+ console.warn(`⚠️ [${chainName}] 交易 ${i + 1} 模拟超时,跳过验证`);
198
+ }
199
+ else if (msg.includes('execution reverted') || msg.includes('CALL_EXCEPTION')) {
200
+ simErrors.push(`交易 ${i + 1} 模拟失败: ${msg.slice(0, 200)}`);
201
+ }
202
+ }
203
+ }
204
+ const simulationDurationMs = Date.now() - simStart;
205
+ if (simErrors.length > 0) {
206
+ return { ...emptyFail(simErrors.join('; ')), simulationDurationMs };
207
+ }
208
+ // Phase 2: 快速顺序广播
209
+ const broadStart = Date.now();
210
+ const results = [];
211
+ const txHashes = [];
212
+ for (let i = 0; i < signedTransactions.length; i++) {
213
+ try {
214
+ const txResponse = await provider.broadcastTransaction(signedTransactions[i]);
215
+ results.push({ index: i, success: true, txHash: txResponse.hash });
216
+ txHashes.push(txResponse.hash);
217
+ }
218
+ catch (error) {
219
+ const errorMessage = getErrorMessageFromUnknown(error);
220
+ const recovered = await recoverTxHashIfAlreadySeen(provider, signedTransactions[i], errorMessage);
221
+ if (recovered) {
222
+ results.push({ index: i, success: true, txHash: recovered, error: errorMessage });
223
+ txHashes.push(recovered);
224
+ }
225
+ else {
226
+ results.push({ index: i, success: false, error: errorMessage });
227
+ console.error(`❌ [${chainName}] Bundle tx ${i + 1}/${totalTransactions} 失败: ${errorMessage}`);
228
+ }
229
+ }
230
+ }
231
+ const broadcastDurationMs = Date.now() - broadStart;
232
+ const successCount = txHashes.length;
233
+ const failedCount = totalTransactions - successCount;
234
+ if (successCount === 0) {
235
+ return {
236
+ code: false,
237
+ totalTransactions,
238
+ successCount,
239
+ failedCount,
240
+ txHashes,
241
+ results,
242
+ sameBlock: false,
243
+ simulationDurationMs,
244
+ broadcastDurationMs,
245
+ errorSummary: results
246
+ .filter((r) => !r.success)
247
+ .map((r) => r.error)
248
+ .join('; '),
249
+ };
250
+ }
251
+ // Phase 3: 同块确认
252
+ let sameBlock = false;
253
+ let blockNumber;
254
+ const blockNumbers = [];
255
+ try {
256
+ const receipts = await Promise.all(txHashes.map((hash) => Promise.race([
257
+ provider.waitForTransaction(hash, 1, blockConfirmTimeout),
258
+ new Promise((resolve) => setTimeout(() => resolve(null), blockConfirmTimeout)),
259
+ ])));
260
+ for (const receipt of receipts) {
261
+ if (receipt && receipt.blockNumber) {
262
+ blockNumbers.push(receipt.blockNumber);
263
+ }
264
+ }
265
+ if (blockNumbers.length === txHashes.length && blockNumbers.length > 0) {
266
+ const uniqueBlocks = new Set(blockNumbers);
267
+ sameBlock = uniqueBlocks.size === 1;
268
+ blockNumber = sameBlock ? blockNumbers[0] : undefined;
269
+ }
270
+ }
271
+ catch {
272
+ console.warn(`⚠️ [${chainName}] Bundle 区块确认超时`);
273
+ }
274
+ return {
275
+ code: true,
276
+ totalTransactions,
277
+ successCount,
278
+ failedCount,
279
+ txHashes,
280
+ results,
281
+ sameBlock,
282
+ blockNumber,
283
+ blockNumbers: blockNumbers.length > 0 ? blockNumbers : undefined,
284
+ simulationDurationMs,
285
+ broadcastDurationMs,
286
+ };
287
+ }
@@ -7,3 +7,16 @@ export * as bsc from './bsc/index.js';
7
7
  export * as xlayer from './xlayer/index.js';
8
8
  export * as monad from './monad/index.js';
9
9
  export * as eni from './eni/index.js';
10
+ /**
11
+ * 与包根 `export * as chains` 一致的命名空间(`chains.bsc` / `chains.eni` …)
12
+ */
13
+ import * as bscNs from './bsc/index.js';
14
+ import * as xlayerNs from './xlayer/index.js';
15
+ import * as monadNs from './monad/index.js';
16
+ import * as eniNs from './eni/index.js';
17
+ export declare const chains: {
18
+ readonly bsc: typeof bscNs;
19
+ readonly xlayer: typeof xlayerNs;
20
+ readonly monad: typeof monadNs;
21
+ readonly eni: typeof eniNs;
22
+ };
@@ -11,3 +11,16 @@ export * as xlayer from './xlayer/index.js';
11
11
  export * as monad from './monad/index.js';
12
12
  // ENI 链
13
13
  export * as eni from './eni/index.js';
14
+ /**
15
+ * 与包根 `export * as chains` 一致的命名空间(`chains.bsc` / `chains.eni` …)
16
+ */
17
+ import * as bscNs from './bsc/index.js';
18
+ import * as xlayerNs from './xlayer/index.js';
19
+ import * as monadNs from './monad/index.js';
20
+ import * as eniNs from './eni/index.js';
21
+ export const chains = {
22
+ bsc: bscNs,
23
+ xlayer: xlayerNs,
24
+ monad: monadNs,
25
+ eni: eniNs,
26
+ };
@@ -16,9 +16,14 @@ export declare const XLAYER_ADDRESSES: {
16
16
  readonly FlapPortal: "0xb30D8c4216E1f21F27444D2FfAee3ad577808678";
17
17
  readonly FlapTokenImpl: "0x12Dc83157Bf1cfCB8Db5952b3ba5bb56Cc38f8C9";
18
18
  readonly PotatoSwapV2Router: "0x881fb2f98c13d521009464e7d1cbf16e1b394e8e";
19
+ readonly PotatoSwapV2Factory: "0x630DB8E822805c82Ca40a54daE02dd5aC31f7fcF";
19
20
  readonly PotatoSwapSwapRouter02: "0xB45D0149249488333E3F3f9F359807F4b810C1FC";
20
21
  readonly PotatoSwapV3Router: "0xBB069e9465BcabC4F488d21e793BDEf0F2d41D41";
21
22
  readonly PotatoSwapV3Factory: "0xa1415fAe79c4B196d087F02b8aD5a622B8A827E5";
23
+ readonly PotatoSwapQuoterV2: "0x5A6f3723346aF54a4D0693bfC1718D64d4915C3e";
24
+ readonly DyorSwapV2Factory: "0x2CcaDb1e437AA9cDc741574bDa154686B1F04C09";
25
+ readonly DyorSwapRouter: "0xfb001fbbace32f09cb6d3c449b935183de53ee96";
26
+ readonly DyorSwapEthBackDividend: "0x2e61b0b4410f6fb941d47205191cbb8963d44bcc";
22
27
  readonly EntryPointV06: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789";
23
28
  readonly SimpleAccountFactory: "0x9406Cc6185a346906296840746125a0E44976454";
24
29
  readonly Multicall3: "0xca11bde05977b3631167028862be2a173976ca11";
@@ -7,7 +7,7 @@
7
7
  * 在 EIP-7702 中,通过 delegate 调用时 msg.sender 是 EOA 本身
8
8
  * 需要使用 executeApprove 函数
9
9
  */
10
- import type { BundleApproveParams, BundleApproveResult, EIP7702Config } from './types.js';
10
+ import type { BundleApproveParams, BundleApproveResult, BundleApproveMultiSpendersParams, BundleApproveMultiSpendersResult, EIP7702Config } from './types.js';
11
11
  /**
12
12
  * 批量授权 - 生成签名后的交易
13
13
  *
@@ -15,31 +15,7 @@ import type { BundleApproveParams, BundleApproveResult, EIP7702Config } from './
15
15
  * @returns 签名后的交易和元数据
16
16
  */
17
17
  export declare function bundleApprove(params: BundleApproveParams): Promise<BundleApproveResult>;
18
- export interface BundleApproveMultiSpendersParams {
19
- /** 主钱包(发起交易,支付 gas) */
20
- mainPrivateKey: string;
21
- /** 需要授权的钱包私钥列表 */
22
- privateKeys: string[];
23
- /** 代币地址 */
24
- tokenAddress: string;
25
- /** 授权给的地址列表(多个 spender) */
26
- spenderAddresses: string[];
27
- /** 授权金额(可选,默认 MaxUint256) */
28
- amount?: bigint;
29
- /** 配置 */
30
- config?: EIP7702Config;
31
- }
32
- export interface BundleApproveMultiSpendersResult {
33
- /** 签名后的交易 */
34
- signedTransaction: string;
35
- /** 元数据 */
36
- metadata: {
37
- walletCount: number;
38
- tokenAddress: string;
39
- spenderAddresses: string[];
40
- totalApproveCalls: number;
41
- };
42
- }
18
+ export type { BundleApproveMultiSpendersParams, BundleApproveMultiSpendersResult } from './types.js';
43
19
  /**
44
20
  * 多 spender 批量授权 - 生成签名后的交易
45
21
  *
@@ -8,8 +8,8 @@
8
8
  * 需要使用 executeApprove 函数
9
9
  */
10
10
  import { ethers, Contract } from 'ethers';
11
- import { getCachedProvider, createWallet, signAuthorizationsBatch, buildEIP7702Transaction, } from './utils.js';
12
- import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, ERC20_ABI, } from './constants.js';
11
+ import { getCachedProvider, createWallet, signAuthorizationsBatch, buildEIP7702Transaction } from './utils.js';
12
+ import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, ERC20_ABI } from './constants.js';
13
13
  // 扩展 ABI 包含 executeApprove
14
14
  const EXTENDED_DELEGATE_ABI = [
15
15
  ...UNIFIED_DELEGATE_ABI,
@@ -22,11 +22,7 @@ function buildApproveCalls(wallets, tokenAddress, spenderAddress, amount) {
22
22
  const delegateInterface = new ethers.Interface(EXTENDED_DELEGATE_ABI);
23
23
  const calls = [];
24
24
  for (const wallet of wallets) {
25
- const callData = delegateInterface.encodeFunctionData('executeApprove', [
26
- tokenAddress,
27
- spenderAddress,
28
- amount,
29
- ]);
25
+ const callData = delegateInterface.encodeFunctionData('executeApprove', [tokenAddress, spenderAddress, amount]);
30
26
  calls.push({
31
27
  target: wallet.address,
32
28
  allowFailure: false,
@@ -43,20 +39,19 @@ function buildApproveCalls(wallets, tokenAddress, spenderAddress, amount) {
43
39
  * @returns 签名后的交易和元数据
44
40
  */
45
41
  export async function bundleApprove(params) {
46
- const { mainPrivateKey, privateKeys, tokenAddress, spenderAddress, amount = ethers.MaxUint256, config, } = params;
42
+ const { mainPrivateKey, privateKeys, tokenAddress, spenderAddress, amount = ethers.MaxUint256, config } = params;
47
43
  if (privateKeys.length === 0) {
48
44
  throw new Error('privateKeys 不能为空');
49
45
  }
50
46
  const provider = getCachedProvider(config?.rpcUrl);
51
47
  const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
52
48
  const mainWallet = createWallet(mainPrivateKey, provider);
53
- const wallets = privateKeys.map(pk => createWallet(pk, provider));
49
+ const wallets = privateKeys.map((pk) => createWallet(pk, provider));
54
50
  // 检查 mainWallet 是否在 wallets 中
55
- const mainWalletIndex = wallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
51
+ const mainWalletIndex = wallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
56
52
  // 只为需要执行授权操作的钱包生成 authorization
57
53
  // mainWallet 如果不在 privateKeys 中,只是支付 gas,不需要 authorization
58
- const authorizations = await signAuthorizationsBatch(wallets, delegateAddress, provider, mainWalletIndex // 如果 mainWallet 在 wallets 中,传其索引;否则传 -1(无主钱包)
59
- );
54
+ const authorizations = await signAuthorizationsBatch(wallets, delegateAddress, provider, mainWalletIndex);
60
55
  const calls = buildApproveCalls(wallets, tokenAddress, spenderAddress, amount);
61
56
  const signedTransaction = await buildEIP7702Transaction(mainWallet, authorizations, calls, 0n, config);
62
57
  return {
@@ -78,11 +73,7 @@ function buildApproveCallsMultiSpenders(wallets, tokenAddress, spenderAddresses,
78
73
  // 对每个钱包,授权所有 spender
79
74
  for (const wallet of wallets) {
80
75
  for (const spender of spenderAddresses) {
81
- const callData = delegateInterface.encodeFunctionData('executeApprove', [
82
- tokenAddress,
83
- spender,
84
- amount,
85
- ]);
76
+ const callData = delegateInterface.encodeFunctionData('executeApprove', [tokenAddress, spender, amount]);
86
77
  calls.push({
87
78
  target: wallet.address,
88
79
  allowFailure: false,
@@ -103,7 +94,7 @@ function buildApproveCallsMultiSpenders(wallets, tokenAddress, spenderAddresses,
103
94
  * @returns 签名后的交易和元数据
104
95
  */
105
96
  export async function bundleApproveMultiSpenders(params) {
106
- const { mainPrivateKey, privateKeys, tokenAddress, spenderAddresses, amount = ethers.MaxUint256, config, } = params;
97
+ const { mainPrivateKey, privateKeys, tokenAddress, spenderAddresses, amount = ethers.MaxUint256, config } = params;
107
98
  if (privateKeys.length === 0) {
108
99
  throw new Error('privateKeys 不能为空');
109
100
  }
@@ -113,14 +104,13 @@ export async function bundleApproveMultiSpenders(params) {
113
104
  const provider = getCachedProvider(config?.rpcUrl);
114
105
  const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
115
106
  const mainWallet = createWallet(mainPrivateKey, provider);
116
- const wallets = privateKeys.map(pk => createWallet(pk, provider));
107
+ const wallets = privateKeys.map((pk) => createWallet(pk, provider));
117
108
  // 检查 mainWallet 是否在 wallets 中
118
- const mainWalletIndex = wallets.findIndex(w => w.address.toLowerCase() === mainWallet.address.toLowerCase());
109
+ const mainWalletIndex = wallets.findIndex((w) => w.address.toLowerCase() === mainWallet.address.toLowerCase());
119
110
  // 只为需要执行授权操作的钱包生成 authorization
120
111
  const authorizations = await signAuthorizationsBatch(wallets, delegateAddress, provider, mainWalletIndex);
121
112
  // ✅ 关键:一次性构建所有 approve 调用
122
113
  const calls = buildApproveCallsMultiSpenders(wallets, tokenAddress, spenderAddresses, amount);
123
- console.log(`[bundleApproveMultiSpenders] 钱包数: ${wallets.length}, spender数: ${spenderAddresses.length}, 总调用数: ${calls.length}`);
124
114
  const signedTransaction = await buildEIP7702Transaction(mainWallet, authorizations, calls, 0n, config);
125
115
  return {
126
116
  signedTransaction,
@@ -6,12 +6,7 @@
6
6
  *
7
7
  * 只生成签名,由调用方决定如何提交
8
8
  */
9
- import type { BundleBuyParams as BaseBundleBuyParams, BundleBuyResult } from './types.js';
10
- import { type UserType } from './utils.js';
11
- export interface BundleBuyParams extends BaseBundleBuyParams {
12
- /** 用户类型(影响利润率) */
13
- userType?: UserType;
14
- }
9
+ import type { BundleBuyParams, BundleBuyResult } from './types.js';
15
10
  /**
16
11
  * 批量买入 - 生成签名后的交易
17
12
  *
@@ -49,4 +44,5 @@ export interface BundleBuyParams extends BaseBundleBuyParams {
49
44
  * fee: 2500, // 0.25%
50
45
  * });
51
46
  */
47
+ export type { BundleBuyParams } from './types.js';
52
48
  export declare function bundleBuy(params: BundleBuyParams): Promise<BundleBuyResult>;