four-flap-meme-sdk 1.9.49 → 2.1.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 (567) hide show
  1. package/README.en.md +41 -6
  2. package/README.md +31 -0
  3. package/README.zh-CN.md +41 -6
  4. package/dist/__tests__/subpath-exports.test.js +34 -0
  5. package/dist/abis/common.js +74 -68
  6. package/dist/abis/flap/vault.js +9 -7
  7. package/dist/abis/index.d.ts +3 -4
  8. package/dist/abis/index.js +3 -4
  9. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  10. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  11. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  12. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  13. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  14. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  15. package/dist/bundle-core/config-helpers.d.ts +36 -0
  16. package/dist/bundle-core/config-helpers.js +57 -0
  17. package/dist/bundle-core/errors.d.ts +50 -0
  18. package/dist/bundle-core/errors.js +34 -0
  19. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  20. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  21. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  22. package/dist/bundle-core/four-meme/core-helpers.js +40 -0
  23. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  24. package/dist/bundle-core/four-meme/core.js +515 -0
  25. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  26. package/dist/{shared 2/flap/portal-bundle-merkle/pancake-proxy.js → bundle-core/four-meme/pancake-proxy.js} +277 -299
  27. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  28. package/dist/bundle-core/four-meme/private.js +465 -0
  29. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  30. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  31. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  32. package/dist/bundle-core/four-meme/swap-buy-first.js +493 -0
  33. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  34. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  35. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  36. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  37. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +27 -0
  38. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  39. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  40. package/dist/{chains/bsc/four/swap/index.js → bundle-core/four-meme/swap.js} +84 -408
  41. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  42. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  43. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  44. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  45. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  46. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  47. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  48. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  49. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  50. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  51. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  52. package/dist/bundle-core/index.d.ts +8 -0
  53. package/dist/bundle-core/index.js +8 -0
  54. package/dist/bundle-core/internal.d.ts +21 -0
  55. package/dist/bundle-core/internal.js +182 -0
  56. package/dist/bundle-core/sign-context-helpers.d.ts +25 -0
  57. package/dist/bundle-core/sign-context-helpers.js +67 -0
  58. package/dist/bundle-core/submit.d.ts +293 -0
  59. package/dist/bundle-core/submit.js +727 -0
  60. package/dist/bundle-core/types/index.d.ts +8 -0
  61. package/dist/bundle-core/types.d.ts +1 -0
  62. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  63. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -116
  64. package/dist/chains/bsc/four/config.d.ts +5 -70
  65. package/dist/chains/bsc/four/config.js +2 -115
  66. package/dist/chains/bsc/four/core.d.ts +1 -4
  67. package/dist/chains/bsc/four/core.js +1 -589
  68. package/dist/chains/bsc/four/index.d.ts +6 -6
  69. package/dist/chains/bsc/four/index.js +6 -6
  70. package/dist/chains/bsc/four/internal.d.ts +2 -50
  71. package/dist/chains/bsc/four/internal.js +2 -237
  72. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  73. package/dist/chains/bsc/four/pancake-proxy.js +1 -688
  74. package/dist/chains/bsc/four/private.d.ts +1 -27
  75. package/dist/chains/bsc/four/private.js +1 -477
  76. package/dist/chains/bsc/four/submit.d.ts +2 -315
  77. package/dist/chains/bsc/four/submit.js +2 -746
  78. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  79. package/dist/chains/bsc/four/swap-buy-first.js +2 -506
  80. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  81. package/dist/chains/bsc/four/swap-internal.js +1 -18
  82. package/dist/chains/bsc/four/swap.d.ts +2 -144
  83. package/dist/chains/bsc/four/swap.js +2 -760
  84. package/dist/chains/bsc/four/types.d.ts +1 -476
  85. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  86. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  87. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  88. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  89. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  90. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  91. package/dist/chains/bsc/four/utils.d.ts +5 -18
  92. package/dist/chains/bsc/four/utils.js +5 -1534
  93. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +159 -0
  94. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +117 -0
  95. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  96. package/dist/chains/bsc/pancake/bundle-buy-first.js +97 -207
  97. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  98. package/dist/chains/bsc/pancake/{bundle-swap/helpers.js → bundle-swap-helpers.js} +63 -70
  99. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  100. package/dist/chains/bsc/pancake/bundle-swap.js +111 -686
  101. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  102. package/dist/chains/bsc/pancake/index.js +1 -3
  103. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  104. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  105. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  106. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  107. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  108. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  109. package/dist/chains/eni/batch-router/transfer.js +54 -23
  110. package/dist/chains/eni/batch-router/utils.js +32 -6
  111. package/dist/chains/eni/bundler/sign.js +4 -4
  112. package/dist/chains/eni/bundler/submit.js +1 -4
  113. package/dist/chains/eni/constants.js +1 -1
  114. package/dist/chains/eni/index.d.ts +1 -1
  115. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  116. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  117. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  118. package/dist/chains/eni/platforms/daoaas/meta.js +8 -4
  119. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -43
  120. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  121. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  122. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  123. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  124. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -47
  125. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  126. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  127. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  128. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  129. package/dist/chains/eni/platforms/iro/index.js +4 -4
  130. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  131. package/dist/chains/eni/platforms/iro/token.js +107 -31
  132. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  133. package/dist/chains/eni/submit.js +5 -13
  134. package/dist/chains/index.d.ts +13 -0
  135. package/dist/chains/index.js +13 -0
  136. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  137. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -20
  138. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  139. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  140. package/dist/chains/xlayer/eip7702/bundle-create.js +93 -56
  141. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  142. package/dist/chains/xlayer/eip7702/bundle-sell.js +26 -74
  143. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  144. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -68
  145. package/dist/chains/xlayer/eip7702/constants.d.ts +1 -16
  146. package/dist/chains/xlayer/eip7702/constants.js +3 -21
  147. package/dist/chains/xlayer/eip7702/index.d.ts +29 -46
  148. package/dist/chains/xlayer/eip7702/index.js +27 -81
  149. package/dist/chains/xlayer/eip7702/{multi-hop-transfer/types.d.ts → multi-hop-transfer-helpers.d.ts} +17 -23
  150. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  151. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +58 -291
  152. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  153. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +57 -0
  154. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  155. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  156. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  157. package/dist/chains/xlayer/eip7702/{volume/types.d.ts → volume-helpers.d.ts} +41 -17
  158. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  159. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  160. package/dist/chains/xlayer/eip7702/volume.js +83 -158
  161. package/dist/chains/xlayer/eoa/constants.js +1 -1
  162. package/dist/chains/xlayer/eoa/dex-helpers.js +5 -5
  163. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  164. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  165. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  166. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +64 -276
  167. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  168. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +14 -14
  169. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  170. package/dist/chains/xlayer/eoa/index.js +8 -23
  171. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  172. package/dist/chains/xlayer/eoa/router-manager.js +3 -3
  173. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  174. package/dist/chains/xlayer/eoa/types.js +1 -3
  175. package/dist/contracts/helper3.d.ts +20 -17
  176. package/dist/contracts/helper3.js +56 -20
  177. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  178. package/dist/contracts/tm-bundle-helpers.js +72 -0
  179. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  180. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -117
  181. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -70
  182. package/dist/contracts/tm-bundle-merkle/config.js +2 -115
  183. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  184. package/dist/contracts/tm-bundle-merkle/core.js +1 -588
  185. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  186. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  187. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -50
  188. package/dist/contracts/tm-bundle-merkle/internal.js +2 -236
  189. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  190. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -687
  191. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  192. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  193. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  194. package/dist/contracts/tm-bundle-merkle/submit.js +3 -919
  195. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  196. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -505
  197. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  198. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  199. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  200. package/dist/contracts/tm-bundle-merkle/swap.js +2 -757
  201. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  202. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  203. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  204. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  205. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  206. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  207. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  208. package/dist/contracts/tm-bundle-merkle/utils.d.ts +5 -6
  209. package/dist/contracts/tm-bundle-merkle/utils.js +5 -6
  210. package/dist/contracts/tm-bundle.d.ts +3 -51
  211. package/dist/contracts/tm-bundle.js +102 -142
  212. package/dist/contracts/tm.d.ts +3 -2
  213. package/dist/contracts/tm.js +36 -32
  214. package/dist/contracts/tm1.js +9 -4
  215. package/dist/contracts/tm2.js +9 -4
  216. package/dist/dex/direct-router-helpers.d.ts +264 -0
  217. package/dist/dex/direct-router-helpers.js +539 -0
  218. package/dist/dex/direct-router.d.ts +3 -125
  219. package/dist/dex/direct-router.js +237 -652
  220. package/dist/dex/{direct-router/types.d.ts → types.d.ts} +1 -1
  221. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  222. package/dist/exports/root-bundle-and-tooling.js +30 -0
  223. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  224. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  225. package/dist/exports/root-foundations.d.ts +35 -0
  226. package/dist/exports/root-foundations.js +70 -0
  227. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  228. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  229. package/dist/flap/index.d.ts +10 -0
  230. package/dist/flap/index.js +8 -0
  231. package/dist/flows/create.d.ts +2 -2
  232. package/dist/flows/create.js +6 -6
  233. package/dist/flows/index.d.ts +1 -0
  234. package/dist/flows/index.js +1 -0
  235. package/dist/index.d.ts +20 -91
  236. package/dist/index.js +20 -215
  237. package/dist/shared/abis/common.d.ts +2 -83
  238. package/dist/shared/abis/common.js +2 -252
  239. package/dist/shared/abis/index.d.ts +5 -6
  240. package/dist/shared/abis/index.js +5 -7
  241. package/dist/shared/clients/blockrazor.js +41 -24
  242. package/dist/shared/clients/club48.js +30 -26
  243. package/dist/shared/clients/emitservice.js +2 -0
  244. package/dist/shared/clients/four.js +23 -18
  245. package/dist/shared/clients/index.d.ts +8 -0
  246. package/dist/shared/clients/index.js +8 -0
  247. package/dist/shared/clients/merkle.js +26 -30
  248. package/dist/shared/constants/addresses.d.ts +1 -1
  249. package/dist/shared/constants/addresses.js +11 -2
  250. package/dist/shared/constants/chains.d.ts +1 -1
  251. package/dist/shared/constants/chains.js +1 -1
  252. package/dist/shared/constants/gas.d.ts +1 -1
  253. package/dist/shared/constants/gas.js +2 -6
  254. package/dist/shared/constants/index.d.ts +3 -0
  255. package/dist/shared/constants/index.js +1 -0
  256. package/dist/shared/constants/quote.d.ts +30 -0
  257. package/dist/shared/constants/quote.js +37 -0
  258. package/dist/shared/flap/abi.js +1 -1
  259. package/dist/shared/flap/constants.d.ts +1 -1
  260. package/dist/shared/flap/constants.js +2 -2
  261. package/dist/shared/flap/curve.js +3 -0
  262. package/dist/shared/flap/errors.d.ts +1 -4
  263. package/dist/shared/flap/errors.js +21 -3
  264. package/dist/shared/flap/index.d.ts +2 -2
  265. package/dist/shared/flap/index.js +2 -2
  266. package/dist/shared/flap/meta.d.ts +16 -18
  267. package/dist/shared/flap/meta.js +14 -26
  268. package/dist/shared/flap/permit.js +6 -5
  269. package/dist/shared/flap/pinata.d.ts +9 -2
  270. package/dist/shared/flap/pinata.js +20 -18
  271. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  272. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  273. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  274. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  275. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  276. package/dist/shared/flap/portal-bundle-merkle/core.js +66 -156
  277. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +81 -86
  278. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +100 -92
  279. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  280. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  281. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  282. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  283. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  284. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  285. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  286. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +66 -247
  287. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  288. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  289. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +2 -71
  290. package/dist/shared/flap/portal-bundle-merkle/swap.js +103 -410
  291. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +73 -3
  292. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  293. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  294. package/dist/shared/flap/portal-bundle.js +54 -42
  295. package/dist/shared/flap/portal.js +32 -10
  296. package/dist/shared/flap/vanity.js +4 -7
  297. package/dist/shared/flap/vault.d.ts +1 -1
  298. package/dist/shared/flap/vault.js +54 -48
  299. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  300. package/dist/shared/foundation/dex/v3-path.js +35 -0
  301. package/dist/shared/foundation/gas/bundle-gas.d.ts +39 -0
  302. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  303. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  304. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  305. package/dist/shared/foundation/index.d.ts +13 -0
  306. package/dist/shared/foundation/index.js +12 -0
  307. package/dist/shared/foundation/nonce/nonce-manager.d.ts +17 -0
  308. package/dist/shared/foundation/nonce/nonce-manager.js +180 -0
  309. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  310. package/dist/shared/foundation/normalize-unknown.js +29 -0
  311. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  312. package/dist/shared/foundation/sdk-logger.js +12 -0
  313. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  314. package/dist/shared/foundation/tx/build-request.js +25 -0
  315. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  316. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  317. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  318. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  319. package/dist/{utils/erc20/types.d.ts → shared/foundation/types/erc20.d.ts} +7 -19
  320. package/dist/{utils/holders-maker/types.d.ts → shared/foundation/types/holders-maker.d.ts} +4 -12
  321. package/dist/shared/foundation/types/index.d.ts +7 -0
  322. package/dist/{utils/lp-inspect/types.d.ts → shared/foundation/types/lp-inspect.d.ts} +4 -2
  323. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  324. package/dist/shared/foundation/types/multicall.js +1 -0
  325. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  326. package/dist/shared/foundation/types/private-sale.js +1 -0
  327. package/dist/{utils/quote-helpers/types.d.ts → shared/foundation/types/quote-helpers.d.ts} +1 -0
  328. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  329. package/dist/shared/four/tax-token.d.ts +1 -1
  330. package/dist/shared/four/tax-token.js +27 -7
  331. package/dist/shared/index.d.ts +6 -0
  332. package/dist/shared/index.js +4 -0
  333. package/dist/utils/airdrop-sweep.d.ts +4 -76
  334. package/dist/utils/airdrop-sweep.js +38 -52
  335. package/dist/utils/bundle-helpers.d.ts +9 -243
  336. package/dist/utils/bundle-helpers.js +10 -584
  337. package/dist/utils/constants.d.ts +5 -61
  338. package/dist/utils/constants.js +5 -80
  339. package/dist/utils/contract-factory.d.ts +2 -4
  340. package/dist/utils/contract-factory.js +25 -18
  341. package/dist/utils/erc20.d.ts +8 -90
  342. package/dist/utils/erc20.js +94 -153
  343. package/dist/utils/errors.d.ts +10 -22
  344. package/dist/utils/errors.js +61 -79
  345. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  346. package/dist/utils/holders-maker/addresses.js +15 -0
  347. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  348. package/dist/utils/holders-maker/buy-tx.js +278 -0
  349. package/dist/utils/holders-maker/constants.d.ts +6 -0
  350. package/dist/utils/holders-maker/constants.js +7 -0
  351. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  352. package/dist/utils/holders-maker/disperse.js +90 -0
  353. package/dist/utils/holders-maker/routing.d.ts +4 -0
  354. package/dist/utils/holders-maker/routing.js +45 -0
  355. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  356. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  357. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  358. package/dist/utils/holders-maker-helpers.js +9 -0
  359. package/dist/utils/holders-maker.d.ts +2 -138
  360. package/dist/utils/holders-maker.js +23 -651
  361. package/dist/utils/hop-chains.d.ts +35 -0
  362. package/dist/utils/hop-chains.js +215 -0
  363. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  364. package/dist/utils/lp-inspect-helpers.js +109 -0
  365. package/dist/utils/lp-inspect.d.ts +2 -112
  366. package/dist/utils/lp-inspect.js +63 -195
  367. package/dist/utils/mpcExclusive.d.ts +2 -5
  368. package/dist/utils/mpcExclusive.js +4 -3
  369. package/dist/utils/private-sale.d.ts +2 -58
  370. package/dist/utils/private-sale.js +2 -7
  371. package/dist/utils/provider-factory.d.ts +4 -0
  372. package/dist/utils/provider-factory.js +10 -0
  373. package/dist/utils/quote-helpers.d.ts +4 -45
  374. package/dist/utils/quote-helpers.js +15 -65
  375. package/dist/utils/stealth-transfer.d.ts +2 -28
  376. package/dist/utils/stealth-transfer.js +30 -14
  377. package/dist/utils/swap-helpers.d.ts +0 -3
  378. package/dist/utils/swap-helpers.js +6 -9
  379. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  380. package/dist/utils/types/airdrop-sweep.js +1 -0
  381. package/dist/utils/types/contract-factory.d.ts +1 -0
  382. package/dist/utils/types/contract-factory.js +1 -0
  383. package/dist/utils/types/erc20.d.ts +1 -0
  384. package/dist/utils/types/erc20.js +1 -0
  385. package/dist/utils/types/errors.d.ts +1 -0
  386. package/dist/utils/types/errors.js +1 -0
  387. package/dist/utils/types/holders-maker.d.ts +1 -0
  388. package/dist/utils/types/holders-maker.js +1 -0
  389. package/dist/utils/types/hop-chains.d.ts +8 -0
  390. package/dist/utils/types/hop-chains.js +1 -0
  391. package/dist/utils/types/index.d.ts +13 -0
  392. package/dist/utils/types/index.js +1 -0
  393. package/dist/utils/types/lp-inspect.d.ts +1 -0
  394. package/dist/utils/types/lp-inspect.js +1 -0
  395. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  396. package/dist/utils/types/mpc-exclusive.js +1 -0
  397. package/dist/utils/types/private-sale.d.ts +1 -0
  398. package/dist/utils/types/private-sale.js +1 -0
  399. package/dist/utils/types/quote-helpers.d.ts +1 -0
  400. package/dist/utils/types/quote-helpers.js +1 -0
  401. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  402. package/dist/utils/types/stealth-transfer.js +1 -0
  403. package/dist/utils/types/wallet.d.ts +25 -0
  404. package/dist/utils/types/wallet.js +1 -0
  405. package/dist/utils/wallet.d.ts +2 -25
  406. package/dist/utils/wallet.js +9 -10
  407. package/package.json +120 -2
  408. package/src/abis/contracts/TaxToken.json +969 -0
  409. package/src/abis/contracts/TokenManager.json +836 -0
  410. package/src/abis/contracts/TokenManager2.json +136 -0
  411. package/src/abis/contracts/TokenManagerHelper3.json +993 -0
  412. package/dist/chains/bsc/four/submit/blockrazor.d.ts +0 -18
  413. package/dist/chains/bsc/four/submit/blockrazor.js +0 -86
  414. package/dist/chains/bsc/four/submit/direct.d.ts +0 -66
  415. package/dist/chains/bsc/four/submit/direct.js +0 -452
  416. package/dist/chains/bsc/four/submit/helpers.d.ts +0 -18
  417. package/dist/chains/bsc/four/submit/helpers.js +0 -57
  418. package/dist/chains/bsc/four/submit/index.d.ts +0 -12
  419. package/dist/chains/bsc/four/submit/index.js +0 -11
  420. package/dist/chains/bsc/four/submit/merkle.d.ts +0 -18
  421. package/dist/chains/bsc/four/submit/merkle.js +0 -74
  422. package/dist/chains/bsc/four/submit/types.d.ts +0 -143
  423. package/dist/chains/bsc/four/swap/index.d.ts +0 -32
  424. package/dist/chains/bsc/four/swap/types.d.ts +0 -70
  425. package/dist/chains/bsc/four/utils/index.d.ts +0 -20
  426. package/dist/chains/bsc/four/utils/index.js +0 -1558
  427. package/dist/chains/bsc/pancake/bundle-buy-first/index.d.ts +0 -8
  428. package/dist/chains/bsc/pancake/bundle-buy-first/index.js +0 -907
  429. package/dist/chains/bsc/pancake/bundle-buy-first/types.d.ts +0 -73
  430. package/dist/chains/bsc/pancake/bundle-swap/helpers.d.ts +0 -102
  431. package/dist/chains/bsc/pancake/bundle-swap/index.d.ts +0 -50
  432. package/dist/chains/bsc/pancake/bundle-swap/index.js +0 -1066
  433. package/dist/chains/bsc/pancake/bundle-swap/types.d.ts +0 -202
  434. package/dist/chains/bsc/pancake/bundle-swap/types.js +0 -3
  435. package/dist/chains/xlayer/eip7702/bundle-swap/index.d.ts +0 -72
  436. package/dist/chains/xlayer/eip7702/bundle-swap/index.js +0 -921
  437. package/dist/chains/xlayer/eip7702/bundle-swap/types.d.ts +0 -65
  438. package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.d.ts +0 -128
  439. package/dist/chains/xlayer/eip7702/multi-hop-transfer/index.js +0 -857
  440. package/dist/chains/xlayer/eip7702/volume/index.d.ts +0 -96
  441. package/dist/chains/xlayer/eip7702/volume/index.js +0 -793
  442. package/dist/dex/direct-router/index.d.ts +0 -70
  443. package/dist/dex/direct-router/index.js +0 -1410
  444. package/dist/shared/abis/TaxToken.json +0 -969
  445. package/dist/shared/abis/TokenManager.json +0 -836
  446. package/dist/shared/abis/TokenManager2.json +0 -136
  447. package/dist/shared/abis/TokenManagerHelper3.json +0 -993
  448. package/dist/shared/flap/__tests__/curve.test.js +0 -85
  449. package/dist/shared/flap/portal/index.d.ts +0 -12
  450. package/dist/shared/flap/portal/index.js +0 -11
  451. package/dist/shared/flap/portal/portal.d.ts +0 -47
  452. package/dist/shared/flap/portal/portal.js +0 -218
  453. package/dist/shared/flap/portal/types.d.ts +0 -227
  454. package/dist/shared/flap/portal/types.js +0 -80
  455. package/dist/shared/flap/portal/writer.d.ts +0 -121
  456. package/dist/shared/flap/portal/writer.js +0 -265
  457. package/dist/shared/flap/portal-bundle-merkle/core/index.d.ts +0 -18
  458. package/dist/shared/flap/portal-bundle-merkle/core/index.js +0 -938
  459. package/dist/shared/flap/portal-bundle-merkle/swap/index.d.ts +0 -42
  460. package/dist/shared/flap/portal-bundle-merkle/swap/index.js +0 -1448
  461. package/dist/shared/flap/portal-bundle-merkle/swap/types.d.ts +0 -84
  462. package/dist/shared/flap/portal-bundle-merkle/utils/index.d.ts +0 -17
  463. package/dist/shared/flap/portal-bundle-merkle/utils/index.js +0 -1024
  464. package/dist/shared/flap/portal-bundle-merkle/utils/types.d.ts +0 -16
  465. package/dist/shared 2/abis/TaxToken.json +0 -105
  466. package/dist/shared 2/abis/TokenManager.json +0 -836
  467. package/dist/shared 2/abis/TokenManager2.json +0 -60
  468. package/dist/shared 2/abis/TokenManagerHelper3.json +0 -993
  469. package/dist/shared 2/abis/common.d.ts +0 -85
  470. package/dist/shared 2/abis/common.js +0 -254
  471. package/dist/shared 2/abis/index.d.ts +0 -8
  472. package/dist/shared 2/abis/index.js +0 -8
  473. package/dist/shared 2/clients/blockrazor.d.ts +0 -314
  474. package/dist/shared 2/clients/blockrazor.js +0 -596
  475. package/dist/shared 2/clients/club48.d.ts +0 -154
  476. package/dist/shared 2/clients/club48.js +0 -331
  477. package/dist/shared 2/clients/emitservice.d.ts +0 -47
  478. package/dist/shared 2/clients/emitservice.js +0 -44
  479. package/dist/shared 2/clients/four.d.ts +0 -132
  480. package/dist/shared 2/clients/four.js +0 -281
  481. package/dist/shared 2/clients/merkle.d.ts +0 -210
  482. package/dist/shared 2/clients/merkle.js +0 -400
  483. package/dist/shared 2/flap/__tests__/curve.test.js +0 -85
  484. package/dist/shared 2/flap/abi.d.ts +0 -4
  485. package/dist/shared 2/flap/abi.js +0 -4
  486. package/dist/shared 2/flap/constants.d.ts +0 -128
  487. package/dist/shared 2/flap/constants.js +0 -143
  488. package/dist/shared 2/flap/curve.d.ts +0 -33
  489. package/dist/shared 2/flap/curve.js +0 -84
  490. package/dist/shared 2/flap/errors.d.ts +0 -37
  491. package/dist/shared 2/flap/errors.js +0 -114
  492. package/dist/shared 2/flap/index.d.ts +0 -22
  493. package/dist/shared 2/flap/index.js +0 -33
  494. package/dist/shared 2/flap/ipfs.d.ts +0 -21
  495. package/dist/shared 2/flap/ipfs.js +0 -38
  496. package/dist/shared 2/flap/meta.d.ts +0 -30
  497. package/dist/shared 2/flap/meta.js +0 -195
  498. package/dist/shared 2/flap/permit.d.ts +0 -16
  499. package/dist/shared 2/flap/permit.js +0 -67
  500. package/dist/shared 2/flap/pinata.d.ts +0 -40
  501. package/dist/shared 2/flap/pinata.js +0 -106
  502. package/dist/shared 2/flap/portal-bundle-merkle/config.d.ts +0 -79
  503. package/dist/shared 2/flap/portal-bundle-merkle/config.js +0 -133
  504. package/dist/shared 2/flap/portal-bundle-merkle/core.d.ts +0 -18
  505. package/dist/shared 2/flap/portal-bundle-merkle/core.js +0 -938
  506. package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.d.ts +0 -125
  507. package/dist/shared 2/flap/portal-bundle-merkle/create-to-dex.js +0 -665
  508. package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.d.ts +0 -88
  509. package/dist/shared 2/flap/portal-bundle-merkle/curve-to-dex.js +0 -446
  510. package/dist/shared 2/flap/portal-bundle-merkle/index.d.ts +0 -14
  511. package/dist/shared 2/flap/portal-bundle-merkle/index.js +0 -26
  512. package/dist/shared 2/flap/portal-bundle-merkle/pancake-proxy.d.ts +0 -28
  513. package/dist/shared 2/flap/portal-bundle-merkle/private.d.ts +0 -17
  514. package/dist/shared 2/flap/portal-bundle-merkle/private.js +0 -549
  515. package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.d.ts +0 -65
  516. package/dist/shared 2/flap/portal-bundle-merkle/swap-buy-first.js +0 -831
  517. package/dist/shared 2/flap/portal-bundle-merkle/swap.d.ts +0 -201
  518. package/dist/shared 2/flap/portal-bundle-merkle/swap.js +0 -1359
  519. package/dist/shared 2/flap/portal-bundle-merkle/types.d.ts +0 -358
  520. package/dist/shared 2/flap/portal-bundle-merkle/utils.d.ts +0 -89
  521. package/dist/shared 2/flap/portal-bundle-merkle/utils.js +0 -963
  522. package/dist/shared 2/flap/portal-bundle.d.ts +0 -119
  523. package/dist/shared 2/flap/portal-bundle.js +0 -584
  524. package/dist/shared 2/flap/portal.d.ts +0 -392
  525. package/dist/shared 2/flap/portal.js +0 -559
  526. package/dist/shared 2/flap/vanity.d.ts +0 -48
  527. package/dist/shared 2/flap/vanity.js +0 -110
  528. package/dist/shared 2/flap/vault.d.ts +0 -240
  529. package/dist/shared 2/flap/vault.js +0 -366
  530. package/dist/shared 2/four/index.d.ts +0 -7
  531. package/dist/shared 2/four/index.js +0 -22
  532. package/dist/shared 2/four/tax-token.d.ts +0 -176
  533. package/dist/shared 2/four/tax-token.js +0 -302
  534. package/dist/shared 2/index.d.ts +0 -10
  535. package/dist/shared 2/index.js +0 -10
  536. package/dist/utils/__tests__/errors.test.js +0 -76
  537. package/dist/utils/erc20/index.d.ts +0 -242
  538. package/dist/utils/erc20/index.js +0 -645
  539. package/dist/utils/holders-maker/helpers.d.ts +0 -43
  540. package/dist/utils/holders-maker/helpers.js +0 -371
  541. package/dist/utils/holders-maker/index.d.ts +0 -26
  542. package/dist/utils/holders-maker/index.js +0 -218
  543. package/dist/utils/holders-maker/types.js +0 -4
  544. package/dist/utils/lp-inspect/index.d.ts +0 -44
  545. package/dist/utils/lp-inspect/index.js +0 -937
  546. package/dist/utils/quote-helpers/index.d.ts +0 -107
  547. package/dist/utils/quote-helpers/index.js +0 -346
  548. /package/dist/{chains/bsc/four/submit/types.js → __tests__/subpath-exports.test.d.ts} +0 -0
  549. /package/dist/{chains/bsc/four/swap/types.js → bundle-core/__tests__/config-helpers.test.d.ts} +0 -0
  550. /package/dist/{chains/bsc/four/utils/types.d.ts → bundle-core/__tests__/facade-parity.test.d.ts} +0 -0
  551. /package/dist/{chains/bsc/four/utils/types.js → bundle-core/__tests__/sign-context-helpers.test.d.ts} +0 -0
  552. /package/dist/{chains/bsc/pancake/bundle-buy-first/types.js → bundle-core/__tests__/sign-fixture.test.d.ts} +0 -0
  553. /package/dist/{chains/xlayer/eip7702/multi-hop-transfer/types.js → bundle-core/four-meme/types/buy-first.js} +0 -0
  554. /package/dist/{chains/xlayer/eip7702/volume/types.js → bundle-core/four-meme/types/core-flow.js} +0 -0
  555. /package/dist/{dex/direct-router/types.js → bundle-core/four-meme/types/index.js} +0 -0
  556. /package/dist/{shared 2/flap/__tests__/curve.test.d.ts → bundle-core/four-meme/types/swap-internal.js} +0 -0
  557. /package/dist/{chains/xlayer/eip7702/bundle-swap → bundle-core/four-meme}/types.js +0 -0
  558. /package/dist/{shared/flap/__tests__/curve.test.d.ts → bundle-core/types/index.js} +0 -0
  559. /package/dist/{shared 2/flap/portal-bundle-merkle → bundle-core}/types.js +0 -0
  560. /package/dist/{shared/flap/portal-bundle-merkle/core/types.d.ts → chains/xlayer/eip7702/multi-hop-transfer-helpers.js} +0 -0
  561. /package/dist/{shared/flap/portal-bundle-merkle/core → dex}/types.js +0 -0
  562. /package/dist/shared/{flap/portal-bundle-merkle/swap/types.js → foundation/tx/wallet-sign-patch.d.ts} +0 -0
  563. /package/dist/shared/{flap/portal-bundle-merkle/utils/types.js → foundation/types/airdrop-sweep.js} +0 -0
  564. /package/dist/{utils/__tests__/errors.test.d.ts → shared/foundation/types/erc20.js} +0 -0
  565. /package/dist/{utils/erc20/types.js → shared/foundation/types/holders-maker.js} +0 -0
  566. /package/dist/{utils/lp-inspect/types.js → shared/foundation/types/index.js} +0 -0
  567. /package/dist/{utils/quote-helpers/types.js → shared/foundation/types/lp-inspect.js} +0 -0
@@ -1,100 +1,28 @@
1
1
  /**
2
- * EIP-7702 转账功能
3
- *
4
- * 支持三种模式:
5
- * 1. 分散 (disperse): 一对多分发资金
6
- * 2. 归集 (sweep): 多对一收集资金
7
- * 3. 多对多 (pairwise): sender[i] → receiver[i] 一一对应转账
8
- *
9
- * 所有模式都支持:
10
- * - 原生 OKB 转账
11
- * - ERC20 代币转账
12
- * - 可选的多跳混淆
13
- *
14
- * 只生成签名,由调用方决定如何提交
2
+ * multi-hop-transfer - 主函数
15
3
  */
16
4
  import { ethers, Contract } from 'ethers';
17
- import { getCachedProvider, createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync, generateRandomWallets, getProfitRecipient, } from './utils.js';
18
- import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI, ERC20_ABI, XLAYER_CHAIN_ID, } from './constants.js';
5
+ import { createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync } from './utils.js';
6
+ import { ERC20_ABI, XLAYER_CHAIN_ID } from './constants.js';
19
7
  import { calculateTransferFee } from '../../../shared/constants/index.js';
20
- /**
21
- * 分散资金 - 一对多分发
22
- *
23
- * 支持:原生 OKB / ERC20 代币 + 可选多跳
24
- *
25
- * 流程(无多跳):主钱包 → 多个接收者
26
- * 流程(有多跳):主钱包 → hop1 → hop2 → ... → 分发给接收者
27
- *
28
- * @example
29
- * // 原生 OKB 直接分发
30
- * const result = await disperse({
31
- * mainPrivateKey: '0x...',
32
- * recipients: ['0xAAA', '0xBBB', '0xCCC'],
33
- * amounts: ['0.1', '0.2', '0.3'],
34
- * });
35
- *
36
- * @example
37
- * // 原生 OKB 多跳分发
38
- * const result = await disperse({
39
- * mainPrivateKey: '0x...',
40
- * recipients: ['0xAAA', '0xBBB'],
41
- * amounts: ['0.5', '0.5'],
42
- * hopCount: 2,
43
- * });
44
- *
45
- * @example
46
- * // ERC20 代币分发
47
- * const result = await disperse({
48
- * mainPrivateKey: '0x...',
49
- * recipients: ['0xAAA', '0xBBB'],
50
- * amounts: ['100', '200'],
51
- * tokenAddress: '0xTOKEN...',
52
- * tokenDecimals: 18,
53
- * hopCount: 2,
54
- * });
55
- */
8
+ import { createEip7702DelegateContext, generateHopWalletMatrix, isNativeTransferToken, normalizePairwiseAmounts, parseTransferAmountsWei, resolveDispersePayerWallets, resolveListPayerWallet, } from './transfer-context-helpers.js';
56
9
  export async function disperse(params) {
57
10
  const { mainPrivateKey, payerPrivateKey, recipients, amounts, tokenAddress, tokenDecimals = 18, hopCount = 0, userType, config, } = params;
58
11
  if (recipients.length !== amounts.length) {
59
12
  throw new Error('recipients 和 amounts 长度必须相同');
60
13
  }
61
- const provider = getCachedProvider(config?.rpcUrl);
62
- const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
63
- const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
64
- // mainWallet: 资金来源(Token/OKB 从这里转出)
65
- const mainWallet = createWallet(mainPrivateKey, provider);
66
- const isNative = !tokenAddress;
67
- const profitRecipient = getProfitRecipient(config);
68
- // ✅ 支持单独的 Payer 钱包(用于支付 gas)
69
- const hasSeparatePayer = payerPrivateKey && payerPrivateKey !== mainPrivateKey;
70
- const payerWallet = hasSeparatePayer ? createWallet(payerPrivateKey, provider) : null;
71
- const txSender = payerWallet ?? mainWallet; // 交易发起者
72
- // ✅ 为每个接收者生成独立的中间钱包链
73
- // 每个接收者有自己的 hopCount 个中间钱包
74
- const allHopWalletInfos = [];
75
- const allHopWallets = [];
76
- for (let i = 0; i < recipients.length; i++) {
77
- if (hopCount > 0) {
78
- const hopInfos = generateRandomWallets(hopCount);
79
- allHopWalletInfos.push(hopInfos);
80
- allHopWallets.push(hopInfos.map(info => createWallet(info.privateKey, provider)));
81
- }
82
- else {
83
- allHopWalletInfos.push([]);
84
- allHopWallets.push([]);
85
- }
86
- }
87
- // 解析金额
88
- const amountsWei = amounts.map(amt => isNative ? ethers.parseEther(amt) : ethers.parseUnits(amt, tokenDecimals));
14
+ const { provider, delegateAddress, delegateInterface, profitRecipient } = createEip7702DelegateContext(config);
15
+ const { mainWallet, payerWallet, txSender } = resolveDispersePayerWallets(mainPrivateKey, payerPrivateKey, provider);
16
+ const isNative = isNativeTransferToken(tokenAddress);
17
+ const { allHopWalletInfos, allHopWallets } = generateHopWalletMatrix(recipients.length, hopCount, provider);
18
+ const amountsWei = parseTransferAmountsWei(amounts, isNative, tokenDecimals);
89
19
  const totalAmount = amountsWei.reduce((sum, amt) => sum + amt, 0n);
90
20
  // ✅ 按地址数量收取固定费用(原生 OKB)
91
21
  const profitAmountOkb = calculateTransferFee(XLAYER_CHAIN_ID, recipients.length);
92
22
  // ========================================
93
23
  // 并行获取数据
94
24
  // ========================================
95
- const addressesToGetNonces = payerWallet
96
- ? [payerWallet.address, mainWallet.address]
97
- : [mainWallet.address];
25
+ const addressesToGetNonces = payerWallet ? [payerWallet.address, mainWallet.address] : [mainWallet.address];
98
26
  const [allNoncesResult, feeData] = await Promise.all([
99
27
  batchGetNonces(addressesToGetNonces, provider),
100
28
  provider.getFeeData(),
@@ -113,8 +41,7 @@ export async function disperse(params) {
113
41
  allNonces.push(0);
114
42
  }
115
43
  }
116
- const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0 // txSender(Payer 或 mainWallet)是交易发起者
117
- );
44
+ const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0);
118
45
  // ========================================
119
46
  // 同步构建调用
120
47
  // ========================================
@@ -152,11 +79,7 @@ export async function disperse(params) {
152
79
  target: mainWallet.address,
153
80
  allowFailure: false,
154
81
  value: 0n,
155
- callData: delegateInterface.encodeFunctionData('executeTransfer', [
156
- tokenAddress,
157
- recipient,
158
- amtWei,
159
- ]),
82
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, recipient, amtWei]),
160
83
  });
161
84
  }
162
85
  }
@@ -209,11 +132,7 @@ export async function disperse(params) {
209
132
  target: mainWallet.address,
210
133
  allowFailure: false,
211
134
  value: 0n,
212
- callData: delegateInterface.encodeFunctionData('executeTransfer', [
213
- tokenAddress,
214
- firstHop.address,
215
- amtWei,
216
- ]),
135
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, firstHop.address, amtWei]),
217
136
  });
218
137
  // 中间钱包之间转账
219
138
  for (let j = 0; j < hopWallets.length - 1; j++) {
@@ -232,10 +151,7 @@ export async function disperse(params) {
232
151
  target: lastHop.address,
233
152
  allowFailure: false,
234
153
  value: 0n,
235
- callData: delegateInterface.encodeFunctionData('executeTransferAll', [
236
- tokenAddress,
237
- recipient,
238
- ]),
154
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [tokenAddress, recipient]),
239
155
  });
240
156
  }
241
157
  }
@@ -256,7 +172,7 @@ export async function disperse(params) {
256
172
  // ========================================
257
173
  // ✅ Payer 模式下 value 为 0(资金从 mainWallet 转出,不是 Payer)
258
174
  // 无 Payer 时,原生币分发需要传递 value(资金从 txSender 转出)
259
- const totalValue = (isNative && !payerWallet) ? totalAmount : 0n;
175
+ const totalValue = isNative && !payerWallet ? totalAmount : 0n;
260
176
  const signedTransaction = buildEIP7702TransactionSync(txSender, // ✅ 使用 txSender(Payer 或 mainWallet)发起交易
261
177
  authorizations, calls, totalValue, payerNonce, // ✅ 使用 txSender 的 nonce
262
178
  feeData, config);
@@ -278,95 +194,44 @@ export async function disperse(params) {
278
194
  },
279
195
  };
280
196
  }
281
- /**
282
- * 归集资金 - 多对一收集
283
- *
284
- * 支持:原生 OKB / ERC20 代币 + 可选多跳
285
- *
286
- * 流程(无多跳):多个源钱包 → 目标地址
287
- * 流程(有多跳):多个源钱包 → hop1 → hop2 → ... → 目标地址
288
- *
289
- * @example
290
- * // 原生 OKB 直接归集
291
- * const result = await sweep({
292
- * targetAddress: '0xTARGET',
293
- * sourcePrivateKeys: ['0x...', '0x...'],
294
- * });
295
- *
296
- * @example
297
- * // 原生 OKB 多跳归集
298
- * const result = await sweep({
299
- * targetAddress: '0xTARGET',
300
- * sourcePrivateKeys: ['0x...', '0x...'],
301
- * hopCount: 2,
302
- * });
303
- *
304
- * @example
305
- * // ERC20 代币归集
306
- * const result = await sweep({
307
- * targetAddress: '0xTARGET',
308
- * sourcePrivateKeys: ['0x...', '0x...'],
309
- * tokenAddress: '0xTOKEN...',
310
- * tokenDecimals: 18,
311
- * hopCount: 2,
312
- * });
313
- */
197
+ // ========================================
198
+ // 归集 (Sweep) - 多对一
199
+ // ========================================
314
200
  export async function sweep(params) {
315
201
  const { targetAddress, sourcePrivateKeys, payerPrivateKey, tokenAddress, tokenDecimals = 18, hopCount = 0, reserveGas = true, percent = 100, userType, config, } = params;
316
- const provider = getCachedProvider(config?.rpcUrl);
317
- const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
318
- const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
319
- const sourceWallets = sourcePrivateKeys.map(pk => createWallet(pk, provider));
320
- const isNative = !tokenAddress;
321
- const profitRecipient = getProfitRecipient(config);
322
- // ✅ 为每个源钱包生成独立的中间钱包链
323
- const allHopWalletInfos = [];
324
- const allHopWallets = [];
325
- for (let i = 0; i < sourceWallets.length; i++) {
326
- if (hopCount > 0) {
327
- const hopInfos = generateRandomWallets(hopCount);
328
- allHopWalletInfos.push(hopInfos);
329
- allHopWallets.push(hopInfos.map(info => createWallet(info.privateKey, provider)));
330
- }
331
- else {
332
- allHopWalletInfos.push([]);
333
- allHopWallets.push([]);
334
- }
335
- }
336
- // ✅ 支持单独的 Payer 钱包(用于支付 gas)
337
- const hasSeparatePayer = payerPrivateKey && !sourcePrivateKeys.includes(payerPrivateKey);
338
- const payerWallet = hasSeparatePayer ? createWallet(payerPrivateKey, provider) : null;
202
+ const { provider, delegateAddress, delegateInterface, profitRecipient } = createEip7702DelegateContext(config);
203
+ const sourceWallets = sourcePrivateKeys.map((pk) => createWallet(pk, provider));
204
+ const isNative = isNativeTransferToken(tokenAddress);
205
+ const { allHopWalletInfos, allHopWallets } = generateHopWalletMatrix(sourceWallets.length, hopCount, provider);
206
+ const { payerWallet } = resolveListPayerWallet(sourcePrivateKeys, payerPrivateKey, provider);
339
207
  const mainWallet = payerWallet ?? sourceWallets[0];
340
208
  // ========================================
341
209
  // 并行获取数据
342
210
  // ========================================
343
- const sourceAddresses = sourceWallets.map(w => w.address);
344
- const addressesToGetNonces = payerWallet
345
- ? [payerWallet.address, ...sourceAddresses]
346
- : sourceAddresses;
347
- const parallelPromises = [
348
- batchGetNonces(addressesToGetNonces, provider),
349
- provider.getFeeData(),
350
- ];
211
+ const sourceAddresses = sourceWallets.map((w) => w.address);
212
+ const addressesToGetNonces = payerWallet ? [payerWallet.address, ...sourceAddresses] : sourceAddresses;
213
+ const parallelPromises = [batchGetNonces(addressesToGetNonces, provider), provider.getFeeData()];
351
214
  if (isNative) {
352
- parallelPromises.push(Promise.all(sourceWallets.map(w => provider.getBalance(w.address))));
215
+ parallelPromises.push(Promise.all(sourceWallets.map((w) => provider.getBalance(w.address))));
353
216
  }
354
217
  else {
218
+ if (!tokenAddress)
219
+ throw new Error('tokenAddress is required for ERC20 sweep');
355
220
  const tokenContract = new Contract(tokenAddress, ERC20_ABI, provider);
356
- parallelPromises.push(Promise.all(sourceWallets.map(w => tokenContract.balanceOf(w.address))));
221
+ parallelPromises.push(Promise.all(sourceWallets.map((w) => tokenContract.balanceOf(w.address))));
357
222
  }
358
223
  const results = await Promise.all(parallelPromises);
359
224
  const allNoncesResult = results[0];
360
225
  const payerNonce = payerWallet ? allNoncesResult[0] : allNoncesResult[0];
361
226
  const nonces = payerWallet ? allNoncesResult.slice(1) : allNoncesResult;
362
227
  const feeData = results[1];
363
- const balances = results[2].map(b => typeof b === 'bigint' ? b : BigInt(b.toString()));
228
+ const balances = results[2].map((b) => typeof b === 'bigint' ? b : BigInt(b.toString()));
364
229
  // 计算转账金额
365
230
  // ✅ 修复:当 percent=100 时,不预留 gas,归集全部余额
366
231
  const isFullSweep = percent >= 100;
367
- const gasReserve = (reserveGas && isNative && !isFullSweep) ? ethers.parseEther('0.001') : 0n;
232
+ const gasReserve = reserveGas && isNative && !isFullSweep ? ethers.parseEther('0.001') : 0n;
368
233
  const percentBigInt = BigInt(Math.min(100, Math.max(1, percent)));
369
- const transferAmounts = balances.map(b => {
234
+ const transferAmounts = balances.map((b) => {
370
235
  if (isFullSweep) {
371
236
  // 100% 归集:使用全部余额
372
237
  return b;
@@ -397,7 +262,7 @@ export async function sweep(params) {
397
262
  if (amount <= 0n)
398
263
  continue;
399
264
  // ✅ 使用 Payer 时所有源钱包都用自己的余额(value: 0n)
400
- const callValue = (payerWallet || i > 0) ? 0n : amount;
265
+ const callValue = payerWallet || i > 0 ? 0n : amount;
401
266
  if (hopCount === 0 || hopWallets.length === 0) {
402
267
  // ========================================
403
268
  // 直接归集:源钱包 → 目标地址
@@ -426,11 +291,7 @@ export async function sweep(params) {
426
291
  target: sourceWallet.address,
427
292
  allowFailure: false,
428
293
  value: 0n,
429
- callData: delegateInterface.encodeFunctionData('executeTransfer', [
430
- tokenAddress,
431
- targetAddress,
432
- amount,
433
- ]),
294
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, targetAddress, amount]),
434
295
  });
435
296
  }
436
297
  }
@@ -482,11 +343,7 @@ export async function sweep(params) {
482
343
  target: sourceWallet.address,
483
344
  allowFailure: false,
484
345
  value: 0n,
485
- callData: delegateInterface.encodeFunctionData('executeTransfer', [
486
- tokenAddress,
487
- firstHop.address,
488
- amount,
489
- ]),
346
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, firstHop.address, amount]),
490
347
  });
491
348
  // 中间钱包之间转账
492
349
  for (let j = 0; j < hopWallets.length - 1; j++) {
@@ -505,10 +362,7 @@ export async function sweep(params) {
505
362
  target: lastHop.address,
506
363
  allowFailure: false,
507
364
  value: 0n,
508
- callData: delegateInterface.encodeFunctionData('executeTransferAll', [
509
- tokenAddress,
510
- targetAddress,
511
- ]),
365
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [tokenAddress, targetAddress]),
512
366
  });
513
367
  }
514
368
  }
@@ -531,13 +385,12 @@ export async function sweep(params) {
531
385
  allNonces.push(0);
532
386
  }
533
387
  }
534
- const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0 // mainWallet 是交易发起者
535
- );
388
+ const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0);
536
389
  // ========================================
537
390
  // 同步构建交易
538
391
  // ========================================
539
392
  // ✅ Payer 模式下 value 为 0(资金来自源钱包)
540
- const totalValue = (isNative && !payerWallet) ? transferAmounts[0] : 0n;
393
+ const totalValue = isNative && !payerWallet ? transferAmounts[0] : 0n;
541
394
  const signedTransaction = buildEIP7702TransactionSync(mainWallet, authorizations, calls, totalValue, payerWallet ? payerNonce : nonces[0], feeData, config);
542
395
  // ✅ 返回所有中间钱包(扁平化)
543
396
  const flatHopWallets = allHopWalletInfos.flat();
@@ -557,41 +410,9 @@ export async function sweep(params) {
557
410
  },
558
411
  };
559
412
  }
560
- /**
561
- * 多对多转账 - sender[i] → receiver[i] 一一对应
562
- *
563
- * 支持:原生 OKB / ERC20 代币 + 可选多跳
564
- *
565
- * 每对都有独立的多跳链:sender → hop1 → hop2 → ... → receiver
566
- *
567
- * @example
568
- * // 原生 OKB 多对多(直接转账)
569
- * const result = await pairwiseTransfer({
570
- * senderPrivateKeys: ['0xA...', '0xB...', '0xC...'],
571
- * receiverAddresses: ['0x111', '0x222', '0x333'],
572
- * amount: '0.1',
573
- * });
574
- *
575
- * @example
576
- * // 原生 OKB 多对多(带多跳)
577
- * const result = await pairwiseTransfer({
578
- * senderPrivateKeys: ['0xA...', '0xB...'],
579
- * receiverAddresses: ['0x111', '0x222'],
580
- * amounts: ['0.1', '0.2'],
581
- * hopCount: 2, // A → hop1 → hop2 → 111, B → hop3 → hop4 → 222
582
- * });
583
- *
584
- * @example
585
- * // ERC20 多对多(带多跳)
586
- * const result = await pairwiseTransfer({
587
- * senderPrivateKeys: ['0xA...', '0xB...'],
588
- * receiverAddresses: ['0x111', '0x222'],
589
- * amount: '100',
590
- * tokenAddress: '0xTOKEN...',
591
- * tokenDecimals: 18,
592
- * hopCount: 2,
593
- * });
594
- */
413
+ // ========================================
414
+ // 多对多 (Pairwise) - sender[i] → receiver[i]
415
+ // ========================================
595
416
  export async function pairwiseTransfer(params) {
596
417
  const { senderPrivateKeys, receiverAddresses, payerPrivateKey, amount, amounts, tokenAddress, tokenDecimals = 18, hopCount = 0, userType, config, } = params;
597
418
  // 验证参数
@@ -602,46 +423,14 @@ export async function pairwiseTransfer(params) {
602
423
  if (pairCount === 0) {
603
424
  throw new Error('至少需要一对发送者/接收者');
604
425
  }
605
- // 解析金额
606
- const normalizedAmounts = (() => {
607
- if (amounts && amounts.length > 0) {
608
- if (amounts.length !== pairCount) {
609
- throw new Error(`amounts 长度 (${amounts.length}) 必须与对数 (${pairCount}) 相同`);
610
- }
611
- return amounts;
612
- }
613
- if (amount !== undefined && amount.trim().length > 0) {
614
- return new Array(pairCount).fill(amount);
615
- }
616
- throw new Error('必须提供 amount 或 amounts');
617
- })();
618
- const provider = getCachedProvider(config?.rpcUrl);
619
- const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
620
- const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
621
- const isNative = !tokenAddress;
622
- const profitRecipient = getProfitRecipient(config);
623
- // 创建钱包
624
- const senderWallets = senderPrivateKeys.map(pk => createWallet(pk, provider));
625
- // ✅ 支持单独的 Payer 钱包(用于支付 gas)
626
- const hasSeparatePayer = payerPrivateKey && !senderPrivateKeys.includes(payerPrivateKey);
627
- const payerWallet = hasSeparatePayer ? createWallet(payerPrivateKey, provider) : null;
426
+ const normalizedAmounts = normalizePairwiseAmounts(pairCount, amount, amounts);
427
+ const { provider, delegateAddress, delegateInterface, profitRecipient } = createEip7702DelegateContext(config);
428
+ const isNative = isNativeTransferToken(tokenAddress);
429
+ const senderWallets = senderPrivateKeys.map((pk) => createWallet(pk, provider));
430
+ const { payerWallet } = resolveListPayerWallet(senderPrivateKeys, payerPrivateKey, provider);
628
431
  const mainWallet = payerWallet ?? senderWallets[0];
629
- // 为每对生成独立的中间钱包链
630
- const allHopWalletInfos = [];
631
- const allHopWallets = [];
632
- for (let i = 0; i < pairCount; i++) {
633
- if (hopCount > 0) {
634
- const hopInfos = generateRandomWallets(hopCount);
635
- allHopWalletInfos.push(hopInfos);
636
- allHopWallets.push(hopInfos.map(info => createWallet(info.privateKey, provider)));
637
- }
638
- else {
639
- allHopWalletInfos.push([]);
640
- allHopWallets.push([]);
641
- }
642
- }
643
- // 解析金额为 Wei
644
- const amountsWei = normalizedAmounts.map(amt => isNative ? ethers.parseEther(amt) : ethers.parseUnits(amt, tokenDecimals));
432
+ const { allHopWalletInfos, allHopWallets } = generateHopWalletMatrix(pairCount, hopCount, provider);
433
+ const amountsWei = parseTransferAmountsWei(normalizedAmounts, isNative, tokenDecimals);
645
434
  const totalAmount = amountsWei.reduce((sum, amt) => sum + amt, 0n);
646
435
  // ✅ 按地址数量收取固定费用(原生 OKB)
647
436
  const profitAmountOkb = calculateTransferFee(XLAYER_CHAIN_ID, pairCount);
@@ -650,10 +439,8 @@ export async function pairwiseTransfer(params) {
650
439
  // ========================================
651
440
  // 并行获取数据
652
441
  // ========================================
653
- const senderAddresses = senderWallets.map(w => w.address);
654
- const addressesToGetNonces = payerWallet
655
- ? [payerWallet.address, ...senderAddresses]
656
- : senderAddresses;
442
+ const senderAddresses = senderWallets.map((w) => w.address);
443
+ const addressesToGetNonces = payerWallet ? [payerWallet.address, ...senderAddresses] : senderAddresses;
657
444
  const [allNoncesResult, feeData] = await Promise.all([
658
445
  batchGetNonces(addressesToGetNonces, provider),
659
446
  provider.getFeeData(),
@@ -687,7 +474,6 @@ export async function pairwiseTransfer(params) {
687
474
  });
688
475
  }
689
476
  if (isNative) {
690
- // ✅ 使用 transferAmount 转移指定金额(而不是 transferTo 全额)
691
477
  calls.push({
692
478
  target: senderWallet.address,
693
479
  allowFailure: false,
@@ -701,11 +487,7 @@ export async function pairwiseTransfer(params) {
701
487
  target: senderWallet.address,
702
488
  allowFailure: false,
703
489
  value: 0n,
704
- callData: delegateInterface.encodeFunctionData('executeTransfer', [
705
- tokenAddress,
706
- receiver,
707
- amtWei,
708
- ]),
490
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, receiver, amtWei]),
709
491
  });
710
492
  }
711
493
  }
@@ -726,14 +508,12 @@ export async function pairwiseTransfer(params) {
726
508
  }
727
509
  if (isNative) {
728
510
  // 原生 OKB 多跳
729
- // ✅ sender → 第一个中间钱包(使用 transferAmount 转移指定金额)
730
511
  calls.push({
731
512
  target: senderWallet.address,
732
513
  allowFailure: false,
733
514
  value: shouldPassValue ? amtWei : 0n,
734
515
  callData: delegateInterface.encodeFunctionData('transferAmount', [firstHop.address, amtWei]),
735
516
  });
736
- // 中间钱包之间转账(使用 transferTo,因为中间钱包只有这笔钱)
737
517
  for (let j = 0; j < hopWallets.length - 1; j++) {
738
518
  calls.push({
739
519
  target: hopWallets[j].address,
@@ -742,7 +522,6 @@ export async function pairwiseTransfer(params) {
742
522
  callData: delegateInterface.encodeFunctionData('transferTo', [hopWallets[j + 1].address]),
743
523
  });
744
524
  }
745
- // 最后一个中间钱包 → receiver(使用 transferTo 转移全部)
746
525
  calls.push({
747
526
  target: lastHop.address,
748
527
  allowFailure: false,
@@ -757,11 +536,7 @@ export async function pairwiseTransfer(params) {
757
536
  target: senderWallet.address,
758
537
  allowFailure: false,
759
538
  value: 0n,
760
- callData: delegateInterface.encodeFunctionData('executeTransfer', [
761
- tokenAddress,
762
- firstHop.address,
763
- amtWei,
764
- ]),
539
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, firstHop.address, amtWei]),
765
540
  });
766
541
  // 中间钱包之间转账
767
542
  for (let j = 0; j < hopWallets.length - 1; j++) {
@@ -780,10 +555,7 @@ export async function pairwiseTransfer(params) {
780
555
  target: lastHop.address,
781
556
  allowFailure: false,
782
557
  value: 0n,
783
- callData: delegateInterface.encodeFunctionData('executeTransferAll', [
784
- tokenAddress,
785
- receiver,
786
- ]),
558
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [tokenAddress, receiver]),
787
559
  });
788
560
  }
789
561
  }
@@ -792,25 +564,20 @@ export async function pairwiseTransfer(params) {
792
564
  // 同步签署授权(已有 nonce)
793
565
  // ========================================
794
566
  // ✅ 如果有单独的 Payer,需要为 Payer 也生成授权
795
- const allWallets = payerWallet
796
- ? [payerWallet, ...senderWallets]
797
- : [...senderWallets];
798
- const allNonces = payerWallet
799
- ? [payerNonce, ...nonces]
800
- : [...nonces];
567
+ const allWallets = payerWallet ? [payerWallet, ...senderWallets] : [...senderWallets];
568
+ const allNonces = payerWallet ? [payerNonce, ...nonces] : [...nonces];
801
569
  for (const hopWallets of allHopWallets) {
802
570
  for (const hopWallet of hopWallets) {
803
571
  allWallets.push(hopWallet);
804
572
  allNonces.push(0);
805
573
  }
806
574
  }
807
- const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0 // mainWallet(可能是 Payer 或第一个发送者钱包)是交易发起者
808
- );
575
+ const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0);
809
576
  // ========================================
810
577
  // 同步构建交易
811
578
  // ========================================
812
579
  // ✅ Payer 模式下 value 为 0(资金来自发送者钱包)
813
- const totalValue = (isNative && !payerWallet) ? totalAmount : 0n;
580
+ const totalValue = isNative && !payerWallet ? totalAmount : 0n;
814
581
  const signedTransaction = buildEIP7702TransactionSync(mainWallet, authorizations, calls, totalValue, payerWallet ? payerNonce : nonces[0], feeData, config);
815
582
  return {
816
583
  signedTransaction,
@@ -0,0 +1,26 @@
1
+ import { ethers, Wallet, type JsonRpcProvider } from 'ethers';
2
+ import type { GeneratedWallet, EIP7702Config } from './types.js';
3
+ export declare function createEip7702DelegateContext(config?: EIP7702Config): {
4
+ provider: ethers.JsonRpcProvider;
5
+ delegateAddress: string;
6
+ delegateInterface: ethers.Interface;
7
+ profitRecipient: string;
8
+ };
9
+ export declare function isNativeTransferToken(tokenAddress?: string): boolean;
10
+ export declare function generateHopWalletMatrix(rowCount: number, hopCount: number, provider: JsonRpcProvider): {
11
+ allHopWalletInfos: GeneratedWallet[][];
12
+ allHopWallets: Wallet[][];
13
+ };
14
+ export declare function resolveDispersePayerWallets(mainPrivateKey: string, payerPrivateKey: string | undefined, provider: JsonRpcProvider): {
15
+ mainWallet: ethers.Wallet;
16
+ payerWallet: ethers.Wallet | null;
17
+ txSender: ethers.Wallet;
18
+ hasSeparatePayer: boolean;
19
+ };
20
+ export declare function resolveListPayerWallet(ownerPrivateKeys: string[], payerPrivateKey: string | undefined, provider: JsonRpcProvider, fallbackToFirst?: boolean): {
21
+ payerWallet: ethers.Wallet | null;
22
+ hasSeparatePayer: boolean;
23
+ mainWallet: ethers.Wallet | null;
24
+ };
25
+ export declare function parseTransferAmountsWei(amounts: string[], isNative: boolean, tokenDecimals: number): bigint[];
26
+ export declare function normalizePairwiseAmounts(pairCount: number, amount: string | undefined, amounts: string[] | undefined): string[];
@@ -0,0 +1,57 @@
1
+ import { ethers } from 'ethers';
2
+ import { getCachedProvider, createWallet, generateRandomWallets, getProfitRecipient } from './utils.js';
3
+ import { UNIFIED_DELEGATE_ADDRESS, UNIFIED_DELEGATE_ABI } from './constants.js';
4
+ export function createEip7702DelegateContext(config) {
5
+ const provider = getCachedProvider(config?.rpcUrl);
6
+ const delegateAddress = (config?.delegateAddress && config.delegateAddress.trim()) || UNIFIED_DELEGATE_ADDRESS;
7
+ const delegateInterface = new ethers.Interface(UNIFIED_DELEGATE_ABI);
8
+ const profitRecipient = getProfitRecipient(config);
9
+ return { provider, delegateAddress, delegateInterface, profitRecipient };
10
+ }
11
+ export function isNativeTransferToken(tokenAddress) {
12
+ return !tokenAddress;
13
+ }
14
+ export function generateHopWalletMatrix(rowCount, hopCount, provider) {
15
+ const allHopWalletInfos = [];
16
+ const allHopWallets = [];
17
+ for (let i = 0; i < rowCount; i++) {
18
+ if (hopCount > 0) {
19
+ const hopInfos = generateRandomWallets(hopCount);
20
+ allHopWalletInfos.push(hopInfos);
21
+ allHopWallets.push(hopInfos.map((info) => createWallet(info.privateKey, provider)));
22
+ }
23
+ else {
24
+ allHopWalletInfos.push([]);
25
+ allHopWallets.push([]);
26
+ }
27
+ }
28
+ return { allHopWalletInfos, allHopWallets };
29
+ }
30
+ export function resolveDispersePayerWallets(mainPrivateKey, payerPrivateKey, provider) {
31
+ const mainWallet = createWallet(mainPrivateKey, provider);
32
+ const hasSeparatePayer = Boolean(payerPrivateKey && payerPrivateKey !== mainPrivateKey);
33
+ const payerWallet = hasSeparatePayer ? createWallet(payerPrivateKey, provider) : null;
34
+ const txSender = payerWallet ?? mainWallet;
35
+ return { mainWallet, payerWallet, txSender, hasSeparatePayer };
36
+ }
37
+ export function resolveListPayerWallet(ownerPrivateKeys, payerPrivateKey, provider, fallbackToFirst = true) {
38
+ const hasSeparatePayer = Boolean(payerPrivateKey && !ownerPrivateKeys.includes(payerPrivateKey));
39
+ const payerWallet = hasSeparatePayer ? createWallet(payerPrivateKey, provider) : null;
40
+ const mainWallet = payerWallet ?? (fallbackToFirst ? createWallet(ownerPrivateKeys[0], provider) : null);
41
+ return { payerWallet, hasSeparatePayer, mainWallet };
42
+ }
43
+ export function parseTransferAmountsWei(amounts, isNative, tokenDecimals) {
44
+ return amounts.map((amt) => (isNative ? ethers.parseEther(amt) : ethers.parseUnits(amt, tokenDecimals)));
45
+ }
46
+ export function normalizePairwiseAmounts(pairCount, amount, amounts) {
47
+ if (amounts && amounts.length > 0) {
48
+ if (amounts.length !== pairCount) {
49
+ throw new Error(`amounts 长度 (${amounts.length}) 必须与对数 (${pairCount}) 相同`);
50
+ }
51
+ return amounts;
52
+ }
53
+ if (amount !== undefined && amount.trim().length > 0) {
54
+ return new Array(pairCount).fill(amount);
55
+ }
56
+ throw new Error('必须提供 amount 或 amounts');
57
+ }