four-flap-meme-sdk 2.2.1 → 2.2.2

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