four-flap-meme-sdk 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/dist/bundle/four-meme/approve-tokenmanager.d.ts +2 -2
  2. package/dist/bundle/four-meme/approve-tokenmanager.js +3 -3
  3. package/dist/bundle/four-meme/core/buy-flow.d.ts +5 -0
  4. package/dist/bundle/four-meme/core/buy-flow.js +147 -0
  5. package/dist/bundle/four-meme/core/constants.d.ts +6 -0
  6. package/dist/bundle/four-meme/core/constants.js +15 -0
  7. package/dist/bundle/four-meme/core/create-token.d.ts +5 -0
  8. package/dist/bundle/four-meme/core/create-token.js +137 -0
  9. package/dist/bundle/four-meme/core/index.d.ts +14 -0
  10. package/dist/bundle/four-meme/core/index.js +14 -0
  11. package/dist/bundle/four-meme/core/sell-flow.d.ts +5 -0
  12. package/dist/bundle/four-meme/core/sell-flow.js +240 -0
  13. package/dist/bundle/four-meme/core-helpers.js +1 -1
  14. package/dist/bundle/four-meme/core.d.ts +7 -4
  15. package/dist/bundle/four-meme/core.js +5 -513
  16. package/dist/bundle/four-meme/pancake-proxy/approve.d.ts +15 -0
  17. package/dist/bundle/four-meme/pancake-proxy/approve.js +113 -0
  18. package/dist/bundle/four-meme/pancake-proxy/buy.d.ts +8 -0
  19. package/dist/bundle/four-meme/pancake-proxy/buy.js +143 -0
  20. package/dist/bundle/four-meme/pancake-proxy/constants.d.ts +25 -0
  21. package/dist/bundle/four-meme/pancake-proxy/constants.js +14 -0
  22. package/dist/bundle/four-meme/pancake-proxy/helpers.d.ts +45 -0
  23. package/dist/bundle/four-meme/pancake-proxy/helpers.js +232 -0
  24. package/dist/bundle/four-meme/pancake-proxy/index.d.ts +15 -0
  25. package/dist/bundle/four-meme/pancake-proxy/index.js +15 -0
  26. package/dist/bundle/four-meme/pancake-proxy/sell.d.ts +8 -0
  27. package/dist/bundle/four-meme/pancake-proxy/sell.js +194 -0
  28. package/dist/bundle/four-meme/pancake-proxy.d.ts +4 -20
  29. package/dist/bundle/four-meme/pancake-proxy.js +3 -670
  30. package/dist/bundle/four-meme/private/buy.d.ts +16 -0
  31. package/dist/bundle/four-meme/private/buy.js +225 -0
  32. package/dist/bundle/four-meme/private/index.d.ts +11 -0
  33. package/dist/bundle/four-meme/private/index.js +11 -0
  34. package/dist/bundle/four-meme/private/sell.d.ts +18 -0
  35. package/dist/bundle/four-meme/private/sell.js +245 -0
  36. package/dist/bundle/four-meme/private.d.ts +5 -25
  37. package/dist/bundle/four-meme/private.js +5 -463
  38. package/dist/bundle/four-meme/swap/batch.d.ts +8 -0
  39. package/dist/bundle/four-meme/swap/batch.js +170 -0
  40. package/dist/bundle/four-meme/swap/bundle.d.ts +8 -0
  41. package/dist/bundle/four-meme/swap/bundle.js +147 -0
  42. package/dist/bundle/four-meme/swap/index.d.ts +14 -0
  43. package/dist/bundle/four-meme/swap/index.js +13 -0
  44. package/dist/bundle/four-meme/swap/quick-batch.d.ts +8 -0
  45. package/dist/bundle/four-meme/swap/quick-batch.js +206 -0
  46. package/dist/bundle/four-meme/swap-buy-first/helpers.d.ts +20 -0
  47. package/dist/bundle/four-meme/swap-buy-first/helpers.js +39 -0
  48. package/dist/bundle/four-meme/swap-buy-first/index.d.ts +12 -0
  49. package/dist/bundle/four-meme/swap-buy-first/index.js +11 -0
  50. package/dist/bundle/four-meme/swap-buy-first/multi-wallet.d.ts +20 -0
  51. package/dist/bundle/four-meme/swap-buy-first/multi-wallet.js +198 -0
  52. package/dist/bundle/four-meme/swap-buy-first/single.d.ts +7 -0
  53. package/dist/bundle/four-meme/swap-buy-first/single.js +232 -0
  54. package/dist/bundle/four-meme/swap-buy-first.d.ts +4 -3
  55. package/dist/bundle/four-meme/swap-buy-first.js +4 -451
  56. package/dist/bundle/four-meme/swap-hop-helpers.d.ts +2 -2
  57. package/dist/bundle/four-meme/swap-sign-helpers.d.ts +2 -2
  58. package/dist/bundle/four-meme/swap-sign-helpers.js +1 -1
  59. package/dist/bundle/four-meme/swap.d.ts +4 -14
  60. package/dist/bundle/four-meme/swap.js +4 -502
  61. package/dist/bundle/four-meme/types/index.d.ts +1 -1
  62. package/dist/bundle/four-meme/utils-disperse.d.ts +1 -1
  63. package/dist/bundle/four-meme/utils-disperse.js +1 -1
  64. package/dist/bundle/four-meme/utils-pairwise.d.ts +1 -1
  65. package/dist/bundle/four-meme/utils-pairwise.js +1 -1
  66. package/dist/bundle/four-meme/utils-sweep/context.d.ts +39 -0
  67. package/dist/bundle/four-meme/utils-sweep/context.js +7 -0
  68. package/dist/bundle/four-meme/utils-sweep/erc20-no-hop.d.ts +5 -0
  69. package/dist/bundle/four-meme/utils-sweep/erc20-no-hop.js +162 -0
  70. package/dist/bundle/four-meme/utils-sweep/index.d.ts +13 -0
  71. package/dist/bundle/four-meme/utils-sweep/index.js +13 -0
  72. package/dist/bundle/four-meme/utils-sweep/main.d.ts +8 -0
  73. package/dist/bundle/four-meme/utils-sweep/main.js +114 -0
  74. package/dist/bundle/four-meme/utils-sweep/native-no-hop.d.ts +5 -0
  75. package/dist/bundle/four-meme/utils-sweep/native-no-hop.js +156 -0
  76. package/dist/bundle/four-meme/utils-sweep/with-hops.d.ts +6 -0
  77. package/dist/bundle/four-meme/utils-sweep/with-hops.js +382 -0
  78. package/dist/bundle/four-meme/utils-sweep.d.ts +3 -4
  79. package/dist/bundle/four-meme/utils-sweep.js +3 -740
  80. package/dist/bundle/internal.d.ts +2 -2
  81. package/dist/bundle/sign-context-helpers.d.ts +1 -26
  82. package/dist/bundle/sign-context-helpers.js +1 -63
  83. package/dist/bundle/submit/blockrazor.d.ts +94 -0
  84. package/dist/bundle/submit/blockrazor.js +122 -0
  85. package/dist/bundle/submit/direct.d.ts +118 -0
  86. package/dist/bundle/submit/direct.js +484 -0
  87. package/dist/bundle/submit/helpers.d.ts +7 -0
  88. package/dist/bundle/submit/helpers.js +15 -0
  89. package/dist/bundle/submit/index.d.ts +14 -0
  90. package/dist/bundle/submit/index.js +14 -0
  91. package/dist/bundle/submit/merkle.d.ts +84 -0
  92. package/dist/bundle/submit/merkle.js +121 -0
  93. package/dist/bundle/submit.d.ts +3 -286
  94. package/dist/bundle/submit.js +3 -724
  95. package/dist/chains/bsc/four/types.d.ts +1 -1
  96. package/dist/chains/bsc/index.d.ts +1 -1
  97. package/dist/chains/bsc/index.js +2 -0
  98. package/dist/chains/bsc/pancake/bundle-buy-first-build.d.ts +25 -0
  99. package/dist/chains/bsc/pancake/bundle-buy-first-build.js +177 -0
  100. package/dist/chains/bsc/pancake/bundle-buy-first-constants.d.ts +30 -0
  101. package/dist/chains/bsc/pancake/bundle-buy-first-constants.js +24 -0
  102. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +11 -149
  103. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +12 -74
  104. package/dist/chains/bsc/pancake/bundle-buy-first-multi-wallet.d.ts +9 -0
  105. package/dist/chains/bsc/pancake/bundle-buy-first-multi-wallet.js +225 -0
  106. package/dist/chains/bsc/pancake/bundle-buy-first-plan.d.ts +14 -0
  107. package/dist/chains/bsc/pancake/bundle-buy-first-plan.js +64 -0
  108. package/dist/chains/bsc/pancake/bundle-buy-first-profit.d.ts +12 -0
  109. package/dist/chains/bsc/pancake/bundle-buy-first-profit.js +22 -0
  110. package/dist/chains/bsc/pancake/bundle-buy-first-quote.d.ts +15 -0
  111. package/dist/chains/bsc/pancake/bundle-buy-first-quote.js +122 -0
  112. package/dist/chains/bsc/pancake/bundle-buy-first-types.d.ts +179 -0
  113. package/dist/chains/bsc/pancake/bundle-buy-first-types.js +1 -0
  114. package/dist/chains/bsc/pancake/bundle-buy-first-validate.d.ts +2 -0
  115. package/dist/chains/bsc/pancake/bundle-buy-first-validate.js +41 -0
  116. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -1
  117. package/dist/chains/bsc/pancake/bundle-buy-first.js +8 -578
  118. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +11 -239
  119. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +12 -564
  120. package/dist/chains/bsc/pancake/bundle-swap-types.d.ts +183 -0
  121. package/dist/chains/bsc/pancake/bundle-swap-types.js +17 -0
  122. package/dist/chains/bsc/pancake/bundle-swap.d.ts +10 -132
  123. package/dist/chains/bsc/pancake/bundle-swap.js +12 -1003
  124. package/dist/chains/bsc/pancake/hop-chain.d.ts +18 -0
  125. package/dist/chains/bsc/pancake/hop-chain.js +227 -0
  126. package/dist/chains/bsc/pancake/quote.d.ts +14 -0
  127. package/dist/chains/bsc/pancake/quote.js +84 -0
  128. package/dist/chains/bsc/pancake/swap-batch.d.ts +42 -0
  129. package/dist/chains/bsc/pancake/swap-batch.js +283 -0
  130. package/dist/chains/bsc/pancake/swap-build.d.ts +19 -0
  131. package/dist/chains/bsc/pancake/swap-build.js +226 -0
  132. package/dist/chains/bsc/pancake/swap-cross.d.ts +42 -0
  133. package/dist/chains/bsc/pancake/swap-cross.js +140 -0
  134. package/dist/chains/bsc/pancake/swap-quick.d.ts +54 -0
  135. package/dist/chains/bsc/pancake/swap-quick.js +424 -0
  136. package/dist/chains/bsc/pancake/swap-single.d.ts +2 -0
  137. package/dist/chains/bsc/pancake/swap-single.js +182 -0
  138. package/dist/chains/bsc/platforms/four/index.d.ts +21 -3
  139. package/dist/chains/bsc/platforms/four/index.js +28 -3
  140. package/dist/chains/eni/batch-router/transfer-disperse.d.ts +37 -0
  141. package/dist/chains/eni/batch-router/transfer-disperse.js +302 -0
  142. package/dist/chains/eni/batch-router/transfer-shared.d.ts +9 -0
  143. package/dist/chains/eni/batch-router/transfer-shared.js +10 -0
  144. package/dist/chains/eni/batch-router/transfer-sweep.d.ts +51 -0
  145. package/dist/chains/eni/batch-router/transfer-sweep.js +364 -0
  146. package/dist/chains/eni/batch-router/transfer.d.ts +4 -74
  147. package/dist/chains/eni/batch-router/transfer.js +2 -647
  148. package/dist/chains/eni/index.d.ts +2 -0
  149. package/dist/chains/eni/index.js +4 -0
  150. package/dist/chains/eni/platforms/daoaas/portal-direct-profit.d.ts +17 -0
  151. package/dist/chains/eni/platforms/daoaas/portal-direct-profit.js +30 -0
  152. package/dist/chains/eni/platforms/daoaas/portal-direct-submit.d.ts +12 -0
  153. package/dist/chains/eni/platforms/daoaas/portal-direct-submit.js +396 -0
  154. package/dist/chains/eni/platforms/daoaas/portal-direct-tx.d.ts +20 -0
  155. package/dist/chains/eni/platforms/daoaas/portal-direct-tx.js +165 -0
  156. package/dist/chains/eni/platforms/daoaas/portal-direct.d.ts +3 -32
  157. package/dist/chains/eni/platforms/daoaas/portal-direct.js +3 -571
  158. package/dist/chains/eni/submit.js +1 -1
  159. package/dist/chains/xlayer/constants.d.ts +0 -2
  160. package/dist/chains/xlayer/constants.js +0 -2
  161. package/dist/chains/xlayer/eip7702/auth.d.ts +16 -0
  162. package/dist/chains/xlayer/eip7702/auth.js +81 -0
  163. package/dist/chains/xlayer/eip7702/bundle-create-buy.d.ts +22 -0
  164. package/dist/chains/xlayer/eip7702/bundle-create-buy.js +201 -0
  165. package/dist/chains/xlayer/eip7702/bundle-create-helpers.d.ts +114 -0
  166. package/dist/chains/xlayer/eip7702/bundle-create-helpers.js +139 -0
  167. package/dist/chains/xlayer/eip7702/bundle-create-to-dex.d.ts +24 -0
  168. package/dist/chains/xlayer/eip7702/bundle-create-to-dex.js +233 -0
  169. package/dist/chains/xlayer/eip7702/bundle-create.d.ts +3 -35
  170. package/dist/chains/xlayer/eip7702/bundle-create.js +3 -746
  171. package/dist/chains/xlayer/eip7702/bundle-graduate-buy.d.ts +22 -0
  172. package/dist/chains/xlayer/eip7702/bundle-graduate-buy.js +214 -0
  173. package/dist/chains/xlayer/eip7702/bundle-sell.js +1 -1
  174. package/dist/chains/xlayer/eip7702/bundle-swap-batch.d.ts +31 -0
  175. package/dist/chains/xlayer/eip7702/bundle-swap-batch.js +216 -0
  176. package/dist/chains/xlayer/eip7702/bundle-swap-helpers.d.ts +21 -0
  177. package/dist/chains/xlayer/eip7702/bundle-swap-helpers.js +206 -0
  178. package/dist/chains/xlayer/eip7702/bundle-swap-multi.d.ts +33 -0
  179. package/dist/chains/xlayer/eip7702/bundle-swap-multi.js +146 -0
  180. package/dist/chains/xlayer/eip7702/bundle-swap-single.d.ts +31 -0
  181. package/dist/chains/xlayer/eip7702/bundle-swap-single.js +177 -0
  182. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +6 -61
  183. package/dist/chains/xlayer/eip7702/bundle-swap.js +3 -712
  184. package/dist/chains/xlayer/eip7702/bytes.d.ts +4 -0
  185. package/dist/chains/xlayer/eip7702/bytes.js +31 -0
  186. package/dist/chains/xlayer/eip7702/gas.d.ts +19 -0
  187. package/dist/chains/xlayer/eip7702/gas.js +152 -0
  188. package/dist/chains/xlayer/eip7702/multi-hop-transfer-disperse.d.ts +5 -0
  189. package/dist/chains/xlayer/eip7702/multi-hop-transfer-disperse.js +196 -0
  190. package/dist/chains/xlayer/eip7702/multi-hop-transfer-pairwise.d.ts +5 -0
  191. package/dist/chains/xlayer/eip7702/multi-hop-transfer-pairwise.js +188 -0
  192. package/dist/chains/xlayer/eip7702/multi-hop-transfer-sweep.d.ts +5 -0
  193. package/dist/chains/xlayer/eip7702/multi-hop-transfer-sweep.js +220 -0
  194. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +8 -4
  195. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +5 -591
  196. package/dist/chains/xlayer/eip7702/profit.d.ts +32 -0
  197. package/dist/chains/xlayer/eip7702/profit.js +59 -0
  198. package/dist/chains/xlayer/eip7702/provider.d.ts +3 -0
  199. package/dist/chains/xlayer/eip7702/provider.js +17 -0
  200. package/dist/chains/xlayer/eip7702/time.d.ts +2 -0
  201. package/dist/chains/xlayer/eip7702/time.js +10 -0
  202. package/dist/chains/xlayer/eip7702/tx-build.d.ts +10 -0
  203. package/dist/chains/xlayer/eip7702/tx-build.js +128 -0
  204. package/dist/chains/xlayer/eip7702/utils.d.ts +19 -85
  205. package/dist/chains/xlayer/eip7702/utils.js +19 -484
  206. package/dist/chains/xlayer/eip7702/volume-bundle.d.ts +13 -0
  207. package/dist/chains/xlayer/eip7702/volume-bundle.js +250 -0
  208. package/dist/chains/xlayer/eip7702/volume-internal.d.ts +13 -0
  209. package/dist/chains/xlayer/eip7702/volume-internal.js +169 -0
  210. package/dist/chains/xlayer/eip7702/volume-make.d.ts +8 -0
  211. package/dist/chains/xlayer/eip7702/volume-make.js +38 -0
  212. package/dist/chains/xlayer/eip7702/volume-single-round.d.ts +17 -0
  213. package/dist/chains/xlayer/eip7702/volume-single-round.js +44 -0
  214. package/dist/chains/xlayer/eip7702/volume-swap.d.ts +18 -0
  215. package/dist/chains/xlayer/eip7702/volume-swap.js +30 -0
  216. package/dist/chains/xlayer/eip7702/volume-wash.d.ts +8 -0
  217. package/dist/chains/xlayer/eip7702/volume-wash.js +191 -0
  218. package/dist/chains/xlayer/eip7702/volume.d.ts +7 -35
  219. package/dist/chains/xlayer/eip7702/volume.js +5 -697
  220. package/dist/chains/xlayer/eip7702/wallet.d.ts +6 -0
  221. package/dist/chains/xlayer/eip7702/wallet.js +17 -0
  222. package/dist/chains/xlayer/eoa/aa-types.d.ts +176 -0
  223. package/dist/chains/xlayer/eoa/aa-types.js +6 -0
  224. package/dist/chains/xlayer/eoa/constants.d.ts +0 -2
  225. package/dist/chains/xlayer/eoa/constants.js +0 -2
  226. package/dist/chains/xlayer/eoa/context.d.ts +8 -0
  227. package/dist/chains/xlayer/eoa/context.js +23 -0
  228. package/dist/chains/xlayer/eoa/encoders.d.ts +147 -0
  229. package/dist/chains/xlayer/eoa/encoders.js +147 -0
  230. package/dist/chains/xlayer/eoa/eoa-bundle-swap-cross.d.ts +5 -0
  231. package/dist/chains/xlayer/eoa/eoa-bundle-swap-cross.js +113 -0
  232. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +10 -123
  233. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +10 -225
  234. package/dist/chains/xlayer/eoa/eoa-bundle-swap-pure.d.ts +50 -0
  235. package/dist/chains/xlayer/eoa/eoa-bundle-swap-pure.js +170 -0
  236. package/dist/chains/xlayer/eoa/eoa-bundle-swap-quick.d.ts +5 -0
  237. package/dist/chains/xlayer/eoa/eoa-bundle-swap-quick.js +257 -0
  238. package/dist/chains/xlayer/eoa/eoa-bundle-swap-types.d.ts +99 -0
  239. package/dist/chains/xlayer/eoa/eoa-bundle-swap-types.js +11 -0
  240. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +5 -47
  241. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +3 -522
  242. package/dist/chains/xlayer/eoa/eoa-types.d.ts +776 -0
  243. package/dist/chains/xlayer/eoa/eoa-types.js +6 -0
  244. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +8 -0
  245. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +8 -0
  246. package/dist/chains/xlayer/eoa/format.d.ts +34 -0
  247. package/dist/chains/xlayer/eoa/format.js +56 -0
  248. package/dist/chains/xlayer/eoa/hop-chain.d.ts +4 -0
  249. package/dist/chains/xlayer/eoa/hop-chain.js +87 -0
  250. package/dist/chains/xlayer/eoa/nonce-map.d.ts +20 -0
  251. package/dist/chains/xlayer/eoa/nonce-map.js +51 -0
  252. package/dist/chains/xlayer/eoa/portal-ops.d.ts +9 -292
  253. package/dist/chains/xlayer/eoa/portal-ops.js +9 -486
  254. package/dist/chains/xlayer/eoa/query.d.ts +117 -0
  255. package/dist/chains/xlayer/eoa/query.js +285 -0
  256. package/dist/chains/xlayer/eoa/quote.d.ts +6 -0
  257. package/dist/chains/xlayer/eoa/quote.js +90 -0
  258. package/dist/chains/xlayer/eoa/types.d.ts +9 -959
  259. package/dist/chains/xlayer/eoa/types.js +9 -49
  260. package/dist/core/clients/blockrazor.js +1 -1
  261. package/dist/core/clients/merkle.js +1 -1
  262. package/dist/core/erc20/allowances.d.ts +104 -0
  263. package/dist/core/erc20/allowances.js +205 -0
  264. package/dist/core/erc20/approve.d.ts +141 -0
  265. package/dist/core/erc20/approve.js +325 -0
  266. package/dist/core/erc20/helpers.d.ts +20 -0
  267. package/dist/core/erc20/helpers.js +109 -0
  268. package/dist/core/erc20/index.d.ts +13 -0
  269. package/dist/core/erc20/index.js +12 -0
  270. package/dist/core/gas/bundle-gas.d.ts +6 -1
  271. package/dist/core/index.d.ts +1 -1
  272. package/dist/core/index.js +1 -1
  273. package/dist/core/quote/index.d.ts +1 -0
  274. package/dist/core/quote/index.js +1 -0
  275. package/dist/core/quote/quote-helpers.d.ts +78 -0
  276. package/dist/core/quote/quote-helpers.js +289 -0
  277. package/dist/core/quote/types.d.ts +1 -0
  278. package/dist/core/quote/types.js +1 -0
  279. package/dist/core/sign-context-helpers.d.ts +29 -0
  280. package/dist/core/sign-context-helpers.js +63 -0
  281. package/dist/domains/dex/direct-router-helpers.d.ts +16 -268
  282. package/dist/domains/dex/direct-router-helpers.js +16 -535
  283. package/dist/domains/dex/direct-router-types.d.ts +104 -0
  284. package/dist/domains/dex/direct-router-types.js +81 -0
  285. package/dist/domains/dex/direct-router-v2-buy.d.ts +2 -0
  286. package/dist/domains/dex/direct-router-v2-buy.js +249 -0
  287. package/dist/domains/dex/direct-router-v2-sell.d.ts +5 -0
  288. package/dist/domains/dex/direct-router-v2-sell.js +270 -0
  289. package/dist/domains/dex/direct-router-v2.d.ts +9 -0
  290. package/dist/domains/dex/direct-router-v2.js +9 -0
  291. package/dist/domains/dex/direct-router-v3.d.ts +17 -0
  292. package/dist/domains/dex/direct-router-v3.js +432 -0
  293. package/dist/domains/dex/direct-router.d.ts +11 -26
  294. package/dist/domains/dex/direct-router.js +10 -977
  295. package/dist/domains/dex/dyo-encode.d.ts +62 -0
  296. package/dist/domains/dex/dyo-encode.js +124 -0
  297. package/dist/domains/dex/profit.d.ts +24 -0
  298. package/dist/domains/dex/profit.js +86 -0
  299. package/dist/domains/dex/provider.d.ts +10 -0
  300. package/dist/domains/dex/provider.js +27 -0
  301. package/dist/domains/dex/quote.d.ts +7 -0
  302. package/dist/domains/dex/quote.js +52 -0
  303. package/dist/domains/dex/router.d.ts +56 -0
  304. package/dist/domains/dex/router.js +193 -0
  305. package/dist/domains/flap/portal-bundle/batch.d.ts +9 -0
  306. package/dist/domains/flap/portal-bundle/batch.js +193 -0
  307. package/dist/domains/flap/portal-bundle/create.d.ts +5 -0
  308. package/dist/domains/flap/portal-bundle/create.js +153 -0
  309. package/dist/domains/flap/portal-bundle/helpers.d.ts +32 -0
  310. package/dist/domains/flap/portal-bundle/helpers.js +50 -0
  311. package/dist/domains/flap/portal-bundle/index.d.ts +16 -0
  312. package/dist/domains/flap/portal-bundle/index.js +15 -0
  313. package/dist/domains/flap/portal-bundle/private.d.ts +5 -0
  314. package/dist/domains/flap/portal-bundle/private.js +198 -0
  315. package/dist/domains/flap/portal-bundle/types.d.ts +102 -0
  316. package/dist/domains/flap/portal-bundle/types.js +1 -0
  317. package/dist/domains/flap/portal-bundle-merkle/core-batch.d.ts +13 -0
  318. package/dist/domains/flap/portal-bundle-merkle/core-batch.js +376 -0
  319. package/dist/domains/flap/portal-bundle-merkle/core-helpers.d.ts +75 -7
  320. package/dist/domains/flap/portal-bundle-merkle/core-helpers.js +259 -20
  321. package/dist/domains/flap/portal-bundle-merkle/core.d.ts +2 -13
  322. package/dist/domains/flap/portal-bundle-merkle/core.js +12 -629
  323. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/constants.d.ts +70 -0
  324. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/constants.js +90 -0
  325. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/index.d.ts +12 -0
  326. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/index.js +11 -0
  327. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/main.d.ts +15 -0
  328. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/main.js +432 -0
  329. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/types.d.ts +113 -0
  330. package/dist/domains/flap/portal-bundle-merkle/create-to-dex/types.js +4 -0
  331. package/dist/domains/flap/portal-bundle-merkle/create-to-dex.d.ts +4 -127
  332. package/dist/domains/flap/portal-bundle-merkle/create-to-dex.js +4 -527
  333. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/constants.d.ts +42 -0
  334. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/constants.js +81 -0
  335. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/index.d.ts +12 -0
  336. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/index.js +11 -0
  337. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/main.d.ts +15 -0
  338. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/main.js +339 -0
  339. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/types.d.ts +72 -0
  340. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex/types.js +4 -0
  341. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex.d.ts +4 -85
  342. package/dist/domains/flap/portal-bundle-merkle/curve-to-dex.js +4 -425
  343. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/approve.d.ts +12 -0
  344. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/approve.js +102 -0
  345. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/buy.d.ts +5 -0
  346. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/buy.js +135 -0
  347. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/helpers.d.ts +52 -0
  348. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/helpers.js +267 -0
  349. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/index.d.ts +14 -0
  350. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/index.js +14 -0
  351. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/sell.d.ts +5 -0
  352. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy/sell.js +195 -0
  353. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy.d.ts +3 -24
  354. package/dist/domains/flap/portal-bundle-merkle/pancake-proxy.js +3 -700
  355. package/dist/domains/flap/portal-bundle-merkle/private/buy.d.ts +9 -0
  356. package/dist/domains/flap/portal-bundle-merkle/private/buy.js +188 -0
  357. package/dist/domains/flap/portal-bundle-merkle/private/helpers.d.ts +36 -0
  358. package/dist/domains/flap/portal-bundle-merkle/private/helpers.js +127 -0
  359. package/dist/domains/flap/portal-bundle-merkle/private/index.d.ts +12 -0
  360. package/dist/domains/flap/portal-bundle-merkle/private/index.js +12 -0
  361. package/dist/domains/flap/portal-bundle-merkle/private/sell.d.ts +9 -0
  362. package/dist/domains/flap/portal-bundle-merkle/private/sell.js +191 -0
  363. package/dist/domains/flap/portal-bundle-merkle/private.d.ts +5 -15
  364. package/dist/domains/flap/portal-bundle-merkle/private.js +5 -494
  365. package/dist/domains/flap/portal-bundle-merkle/swap-batch.js +3 -2
  366. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-chain.d.ts +4 -0
  367. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-chain.js +43 -0
  368. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-constants.d.ts +13 -0
  369. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-constants.js +21 -0
  370. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +11 -121
  371. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-helpers.js +11 -109
  372. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-multi-wallet.d.ts +20 -0
  373. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-multi-wallet.js +223 -0
  374. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-plan.d.ts +32 -0
  375. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-plan.js +66 -0
  376. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-profit.d.ts +22 -0
  377. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-profit.js +22 -0
  378. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-quote.d.ts +51 -0
  379. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-quote.js +149 -0
  380. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-types.d.ts +87 -0
  381. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first-types.js +1 -0
  382. package/dist/domains/flap/portal-bundle-merkle/swap-buy-first.js +5 -404
  383. package/dist/domains/flap/portal-bundle-merkle/swap-helpers.d.ts +0 -1
  384. package/dist/domains/flap/portal-bundle-merkle/swap-helpers.js +0 -7
  385. package/dist/domains/flap/portal-bundle-merkle/swap-planning.js +1 -1
  386. package/dist/domains/flap/portal-bundle-merkle/swap-quick-batch.js +3 -2
  387. package/dist/domains/flap/portal-bundle-merkle/swap-single.js +3 -2
  388. package/dist/domains/flap/portal-bundle-merkle/utils/disperse.d.ts +2 -0
  389. package/dist/domains/flap/portal-bundle-merkle/utils/disperse.js +275 -0
  390. package/dist/domains/flap/portal-bundle-merkle/utils/index.d.ts +11 -0
  391. package/dist/domains/flap/portal-bundle-merkle/utils/index.js +11 -0
  392. package/dist/domains/flap/portal-bundle-merkle/utils/sweep.d.ts +9 -0
  393. package/dist/domains/flap/portal-bundle-merkle/utils/sweep.js +570 -0
  394. package/dist/domains/flap/portal-bundle-merkle/utils.d.ts +5 -8
  395. package/dist/domains/flap/portal-bundle-merkle/utils.js +5 -841
  396. package/dist/domains/flap/portal-bundle.d.ts +5 -117
  397. package/dist/domains/flap/portal-bundle.js +5 -587
  398. package/dist/domains/flap/portal.d.ts +13 -404
  399. package/dist/domains/flap/portal.js +12 -619
  400. package/dist/domains/flap/reader.d.ts +51 -0
  401. package/dist/domains/flap/reader.js +275 -0
  402. package/dist/domains/flap/types.d.ts +246 -0
  403. package/dist/domains/flap/types.js +104 -0
  404. package/dist/domains/flap/vault/constants.d.ts +220 -0
  405. package/dist/domains/flap/vault/constants.js +173 -0
  406. package/dist/domains/flap/vault/encode.d.ts +39 -0
  407. package/dist/domains/flap/vault/encode.js +135 -0
  408. package/dist/domains/flap/vault/index.d.ts +15 -0
  409. package/dist/domains/flap/vault/index.js +14 -0
  410. package/dist/domains/flap/vault/query.d.ts +40 -0
  411. package/dist/domains/flap/vault/query.js +104 -0
  412. package/dist/domains/flap/vault/types.d.ts +147 -0
  413. package/dist/domains/flap/vault/types.js +29 -0
  414. package/dist/domains/flap/vault.d.ts +3 -413
  415. package/dist/domains/flap/vault.js +3 -467
  416. package/dist/domains/flap/writer.d.ts +124 -0
  417. package/dist/domains/flap/writer.js +255 -0
  418. package/dist/domains/four/contracts/tm-bundle-batch.d.ts +35 -0
  419. package/dist/domains/four/contracts/tm-bundle-batch.js +286 -0
  420. package/dist/domains/four/contracts/tm-bundle-create.d.ts +2 -0
  421. package/dist/domains/four/contracts/tm-bundle-create.js +304 -0
  422. package/dist/domains/four/contracts/tm-bundle-helpers.d.ts +2 -1
  423. package/dist/domains/four/contracts/tm-bundle-helpers.js +3 -0
  424. package/dist/domains/four/contracts/tm-bundle-private.d.ts +36 -0
  425. package/dist/domains/four/contracts/tm-bundle-private.js +164 -0
  426. package/dist/domains/four/contracts/tm-bundle.d.ts +10 -71
  427. package/dist/domains/four/contracts/tm-bundle.js +9 -738
  428. package/dist/domains/lp-inspect/inspect-helpers.d.ts +25 -0
  429. package/dist/domains/lp-inspect/inspect-helpers.js +343 -0
  430. package/dist/domains/lp-inspect/inspect.d.ts +8 -0
  431. package/dist/domains/lp-inspect/inspect.js +332 -0
  432. package/dist/domains/lp-inspect/lp-inspect.d.ts +9 -37
  433. package/dist/domains/lp-inspect/lp-inspect.js +9 -775
  434. package/dist/domains/lp-inspect/registry.d.ts +43 -0
  435. package/dist/domains/lp-inspect/registry.js +127 -0
  436. package/dist/domains/merkle/index.d.ts +1 -1
  437. package/dist/exports/root-bundle-and-tooling.d.ts +9 -1
  438. package/dist/exports/root-bundle-and-tooling.js +8 -1
  439. package/dist/exports/root-foundations.d.ts +1 -1
  440. package/dist/exports/root-foundations.js +1 -1
  441. package/dist/exports/root-swap-dex-and-xlayer.d.ts +4 -4
  442. package/dist/exports/root-swap-dex-and-xlayer.js +4 -4
  443. package/dist/index.d.ts +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/utils/swap-helpers.js +1 -1
  446. package/package.json +1 -81
@@ -0,0 +1,4 @@
1
+ export declare function bigintToBytes(value: bigint): Uint8Array;
2
+ export declare function addressToBytes(address: string): Uint8Array;
3
+ export declare function hexToBytes(hex: string): Uint8Array;
4
+ export declare function trimLeadingZeros(bytes: Uint8Array): Uint8Array;
@@ -0,0 +1,31 @@
1
+ import { ethers } from 'ethers';
2
+ // ========================================
3
+ // 字节转换工具
4
+ // ========================================
5
+ export function bigintToBytes(value) {
6
+ if (value === 0n)
7
+ return new Uint8Array(0);
8
+ let hex = value.toString(16);
9
+ if (hex.length % 2 !== 0)
10
+ hex = '0' + hex;
11
+ const bytes = new Uint8Array(hex.length / 2);
12
+ for (let i = 0; i < bytes.length; i++) {
13
+ bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
14
+ }
15
+ return bytes;
16
+ }
17
+ export function addressToBytes(address) {
18
+ return ethers.getBytes(address);
19
+ }
20
+ export function hexToBytes(hex) {
21
+ if (hex === '0x' || hex === '')
22
+ return new Uint8Array(0);
23
+ return ethers.getBytes(hex);
24
+ }
25
+ export function trimLeadingZeros(bytes) {
26
+ let start = 0;
27
+ while (start < bytes.length - 1 && bytes[start] === 0) {
28
+ start++;
29
+ }
30
+ return bytes.slice(start);
31
+ }
@@ -0,0 +1,19 @@
1
+ import type { Call3Value } from './types.js';
2
+ /**
3
+ * 操作类型(用于 gas 估算)
4
+ */
5
+ export type OperationType = 'transfer' | 'buy' | 'sell' | 'swap' | 'create' | 'approve' | 'graduate' | 'unknown';
6
+ /**
7
+ * 动态估算 Gas Limit
8
+ *
9
+ * @param authorizationCount 授权数量
10
+ * @param calls Multicall 调用列表
11
+ * @param configGasLimit 配置的 gas limit(可选,优先使用)
12
+ * @returns 估算的 gas limit
13
+ */
14
+ export declare function estimateGasLimit(authorizationCount: number, calls: Call3Value[], configGasLimit?: bigint): bigint;
15
+ /**
16
+ * 简化版 gas 估算(仅根据调用数量)
17
+ * 适用于无法分析 callData 的场景
18
+ */
19
+ export declare function estimateGasLimitSimple(authorizationCount: number, callCount: number, operationType?: 'simple' | 'buy' | 'sell' | 'swap' | 'create' | 'graduate', configGasLimit?: bigint): bigint;
@@ -0,0 +1,152 @@
1
+ import { GAS_ESTIMATE } from './constants.js';
2
+ /**
3
+ * 分析 callData 推断操作类型
4
+ */
5
+ function inferOperationType(callData) {
6
+ if (!callData || callData === '0x')
7
+ return 'transfer';
8
+ // 根据函数签名推断操作类型
9
+ const selector = callData.slice(0, 10).toLowerCase();
10
+ // 常见的函数选择器
11
+ const selectors = {
12
+ // 转账
13
+ '0xa9059cbb': 'transfer', // transfer(address,uint256)
14
+ // 买入相关
15
+ '0x7ff36ab5': 'buy', // swapExactETHForTokens
16
+ '0xb6f9de95': 'buy', // swapExactETHForTokensSupportingFeeOnTransferTokens
17
+ '0x414bf389': 'buy', // exactInputSingle (V3)
18
+ '0xc04b8d59': 'buy', // exactInput (V3)
19
+ // 卖出相关
20
+ '0x18cbafe5': 'sell', // swapExactTokensForETH
21
+ '0x791ac947': 'sell', // swapExactTokensForETHSupportingFeeOnTransferTokens
22
+ '0xdb3e2198': 'sell', // exactOutputSingle (V3)
23
+ // 授权
24
+ '0x095ea7b3': 'approve', // approve(address,uint256)
25
+ // 创建代币
26
+ '0x': 'create', // 需要更精确的匹配
27
+ };
28
+ // UnifiedDelegate 函数选择器(计算得到的 4 字节选择器)
29
+ const delegateSelectors = {
30
+ '0x3edd1128': 'transfer', // transferTo(address)
31
+ '0x2ada9a96': 'transfer', // transferAmount(address,uint256)
32
+ '0x2cdaa6d3': 'buy', // executeBuy(address,address,address,uint24,uint256)
33
+ '0x2e87f7de': 'buy', // executeBuyV2(address,address[],uint256)
34
+ '0x6fcda3a1': 'sell', // executeSell(address,address,address,uint24,uint256)
35
+ '0x0a3e9e95': 'sell', // executeSellV2(address,address[],uint256)
36
+ '0x72c18b75': 'sell', // executeSellAndTransfer(address,address,address,uint24,uint256,address)
37
+ '0x9db6b375': 'sell', // executeSellAndTransferV2(address,address[],uint256,address)
38
+ };
39
+ // 先检查标准选择器
40
+ if (selectors[selector]) {
41
+ return selectors[selector];
42
+ }
43
+ // 检查 UnifiedDelegate 选择器
44
+ if (delegateSelectors[selector]) {
45
+ return delegateSelectors[selector];
46
+ }
47
+ // 检查 callData 长度和模式
48
+ if (callData.length < 20) {
49
+ return 'transfer';
50
+ }
51
+ // 默认根据 callData 长度估算
52
+ if (callData.length > 500) {
53
+ return 'swap'; // 复杂调用可能是 swap
54
+ }
55
+ return 'unknown';
56
+ }
57
+ /**
58
+ * 根据操作类型获取额外 gas
59
+ */
60
+ function getExtraGasForOperation(opType) {
61
+ switch (opType) {
62
+ case 'transfer':
63
+ return GAS_ESTIMATE.TRANSFER;
64
+ case 'buy':
65
+ return GAS_ESTIMATE.BUY_EXTRA;
66
+ case 'sell':
67
+ return GAS_ESTIMATE.SELL_EXTRA;
68
+ case 'swap':
69
+ return GAS_ESTIMATE.BUY_EXTRA + GAS_ESTIMATE.SELL_EXTRA;
70
+ case 'approve':
71
+ return 50000n;
72
+ case 'create':
73
+ return GAS_ESTIMATE.CREATE_TOKEN;
74
+ default:
75
+ return GAS_ESTIMATE.PER_CALL_BASE;
76
+ }
77
+ }
78
+ /**
79
+ * 动态估算 Gas Limit
80
+ *
81
+ * @param authorizationCount 授权数量
82
+ * @param calls Multicall 调用列表
83
+ * @param configGasLimit 配置的 gas limit(可选,优先使用)
84
+ * @returns 估算的 gas limit
85
+ */
86
+ export function estimateGasLimit(authorizationCount, calls, configGasLimit) {
87
+ // 如果明确指定了 gasLimit,优先使用
88
+ if (configGasLimit && configGasLimit > 0n) {
89
+ return configGasLimit;
90
+ }
91
+ // 基础 gas
92
+ let estimated = GAS_ESTIMATE.BASE;
93
+ // 授权 gas
94
+ estimated += BigInt(authorizationCount) * GAS_ESTIMATE.PER_AUTHORIZATION;
95
+ // 每个调用的 gas
96
+ for (const call of calls) {
97
+ // 基础调用 gas
98
+ estimated += GAS_ESTIMATE.PER_CALL_BASE;
99
+ // 根据操作类型添加额外 gas
100
+ const opType = inferOperationType(call.callData);
101
+ estimated += getExtraGasForOperation(opType);
102
+ }
103
+ // 应用安全系数
104
+ const withSafety = BigInt(Math.ceil(Number(estimated) * GAS_ESTIMATE.SAFETY_MULTIPLIER));
105
+ // 限制在最小和最大值之间
106
+ if (withSafety < GAS_ESTIMATE.MIN) {
107
+ return GAS_ESTIMATE.MIN;
108
+ }
109
+ if (withSafety > GAS_ESTIMATE.MAX) {
110
+ return GAS_ESTIMATE.MAX;
111
+ }
112
+ return withSafety;
113
+ }
114
+ /**
115
+ * 简化版 gas 估算(仅根据调用数量)
116
+ * 适用于无法分析 callData 的场景
117
+ */
118
+ export function estimateGasLimitSimple(authorizationCount, callCount, operationType = 'simple', configGasLimit) {
119
+ if (configGasLimit && configGasLimit > 0n) {
120
+ return configGasLimit;
121
+ }
122
+ // 毕业操作需要固定的高 gas(约 800 万)
123
+ if (operationType === 'graduate') {
124
+ return GAS_ESTIMATE.GRADUATE;
125
+ }
126
+ let estimated = GAS_ESTIMATE.BASE;
127
+ estimated += BigInt(authorizationCount) * GAS_ESTIMATE.PER_AUTHORIZATION;
128
+ estimated += BigInt(callCount) * GAS_ESTIMATE.PER_CALL_BASE;
129
+ // 根据操作类型添加额外 gas
130
+ switch (operationType) {
131
+ case 'buy':
132
+ estimated += BigInt(callCount) * GAS_ESTIMATE.BUY_EXTRA;
133
+ break;
134
+ case 'sell':
135
+ estimated += BigInt(callCount) * GAS_ESTIMATE.SELL_EXTRA;
136
+ break;
137
+ case 'swap':
138
+ estimated += BigInt(callCount) * (GAS_ESTIMATE.BUY_EXTRA + GAS_ESTIMATE.SELL_EXTRA);
139
+ break;
140
+ case 'create':
141
+ estimated += GAS_ESTIMATE.CREATE_TOKEN;
142
+ break;
143
+ default:
144
+ estimated += BigInt(callCount) * GAS_ESTIMATE.TRANSFER;
145
+ }
146
+ const withSafety = BigInt(Math.ceil(Number(estimated) * GAS_ESTIMATE.SAFETY_MULTIPLIER));
147
+ if (withSafety < GAS_ESTIMATE.MIN)
148
+ return GAS_ESTIMATE.MIN;
149
+ if (withSafety > GAS_ESTIMATE.MAX)
150
+ return GAS_ESTIMATE.MAX;
151
+ return withSafety;
152
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * multi-hop-transfer - 分散 (Disperse) 一对多
3
+ */
4
+ import type { DisperseParams, TransferResult } from './multi-hop-transfer-helpers.js';
5
+ export declare function disperse(params: DisperseParams): Promise<TransferResult>;
@@ -0,0 +1,196 @@
1
+ /**
2
+ * multi-hop-transfer - 分散 (Disperse) 一对多
3
+ */
4
+ import { ethers } from 'ethers';
5
+ import { signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync } from './utils.js';
6
+ import { XLAYER_CHAIN_ID } from './constants.js';
7
+ import { calculateTransferFee } from '../../../core/constants/index.js';
8
+ import { createEip7702DelegateContext, generateHopWalletMatrix, isNativeTransferToken, parseTransferAmountsWei, resolveDispersePayerWallets, } from './transfer-context-helpers.js';
9
+ export async function disperse(params) {
10
+ const { mainPrivateKey, payerPrivateKey, recipients, amounts, tokenAddress, tokenDecimals = 18, hopCount = 0, userType, config, } = params;
11
+ if (recipients.length !== amounts.length) {
12
+ throw new Error('recipients 和 amounts 长度必须相同');
13
+ }
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);
19
+ const totalAmount = amountsWei.reduce((sum, amt) => sum + amt, 0n);
20
+ // ✅ 按地址数量收取固定费用(原生 OKB)
21
+ const profitAmountOkb = calculateTransferFee(XLAYER_CHAIN_ID, recipients.length);
22
+ // ========================================
23
+ // 并行获取数据
24
+ // ========================================
25
+ const addressesToGetNonces = payerWallet ? [payerWallet.address, mainWallet.address] : [mainWallet.address];
26
+ const [allNoncesResult, feeData] = await Promise.all([
27
+ batchGetNonces(addressesToGetNonces, provider),
28
+ provider.getFeeData(),
29
+ ]);
30
+ const payerNonce = payerWallet ? allNoncesResult[0] : allNoncesResult[0];
31
+ const mainNonce = payerWallet ? allNoncesResult[1] : allNoncesResult[0];
32
+ // ========================================
33
+ // 同步签署授权(已有 nonce)
34
+ // ========================================
35
+ // ✅ 如果有 Payer,需要为 Payer 和 mainWallet 都生成授权
36
+ const allWallets = payerWallet ? [payerWallet, mainWallet] : [mainWallet];
37
+ const allNonces = payerWallet ? [payerNonce, mainNonce] : [mainNonce];
38
+ for (const hopWallets of allHopWallets) {
39
+ for (const hopWallet of hopWallets) {
40
+ allWallets.push(hopWallet);
41
+ allNonces.push(0);
42
+ }
43
+ }
44
+ const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0);
45
+ // ========================================
46
+ // 同步构建调用
47
+ // ========================================
48
+ const calls = [];
49
+ for (let i = 0; i < recipients.length; i++) {
50
+ const recipient = recipients[i];
51
+ const amtWei = amountsWei[i];
52
+ const hopWallets = allHopWallets[i];
53
+ if (hopCount === 0 || hopWallets.length === 0) {
54
+ // ========================================
55
+ // 直接分发:主钱包 → 接收者
56
+ // ========================================
57
+ if (isNative) {
58
+ // ✅ Payer 模式:使用 transferAmount(从 mainWallet 余额转出)
59
+ // ✅ 非 Payer 模式:使用 transferTo(从 msg.value 转出)
60
+ if (payerWallet) {
61
+ calls.push({
62
+ target: mainWallet.address,
63
+ allowFailure: false,
64
+ value: 0n,
65
+ callData: delegateInterface.encodeFunctionData('transferAmount', [recipient, amtWei]),
66
+ });
67
+ }
68
+ else {
69
+ calls.push({
70
+ target: mainWallet.address,
71
+ allowFailure: false,
72
+ value: amtWei,
73
+ callData: delegateInterface.encodeFunctionData('transferTo', [recipient]),
74
+ });
75
+ }
76
+ }
77
+ else {
78
+ calls.push({
79
+ target: mainWallet.address,
80
+ allowFailure: false,
81
+ value: 0n,
82
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, recipient, amtWei]),
83
+ });
84
+ }
85
+ }
86
+ else {
87
+ // ========================================
88
+ // 多跳分发:主钱包 → hop1 → hop2 → ... → 接收者
89
+ // ========================================
90
+ const firstHop = hopWallets[0];
91
+ const lastHop = hopWallets[hopWallets.length - 1];
92
+ if (isNative) {
93
+ // 主钱包 → 第一个中间钱包
94
+ // ✅ Payer 模式:使用 transferAmount(从 mainWallet 余额转出)
95
+ if (payerWallet) {
96
+ calls.push({
97
+ target: mainWallet.address,
98
+ allowFailure: false,
99
+ value: 0n,
100
+ callData: delegateInterface.encodeFunctionData('transferAmount', [firstHop.address, amtWei]),
101
+ });
102
+ }
103
+ else {
104
+ calls.push({
105
+ target: mainWallet.address,
106
+ allowFailure: false,
107
+ value: amtWei,
108
+ callData: delegateInterface.encodeFunctionData('transferTo', [firstHop.address]),
109
+ });
110
+ }
111
+ // 中间钱包之间转账(使用全部余额)
112
+ for (let j = 0; j < hopWallets.length - 1; j++) {
113
+ calls.push({
114
+ target: hopWallets[j].address,
115
+ allowFailure: false,
116
+ value: 0n,
117
+ callData: delegateInterface.encodeFunctionData('transferTo', [hopWallets[j + 1].address]),
118
+ });
119
+ }
120
+ // 最后一个中间钱包 → 接收者(使用全部余额)
121
+ calls.push({
122
+ target: lastHop.address,
123
+ allowFailure: false,
124
+ value: 0n,
125
+ callData: delegateInterface.encodeFunctionData('transferTo', [recipient]),
126
+ });
127
+ }
128
+ else {
129
+ // ERC20 多跳
130
+ // 主钱包 → 第一个中间钱包
131
+ calls.push({
132
+ target: mainWallet.address,
133
+ allowFailure: false,
134
+ value: 0n,
135
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, firstHop.address, amtWei]),
136
+ });
137
+ // 中间钱包之间转账
138
+ for (let j = 0; j < hopWallets.length - 1; j++) {
139
+ calls.push({
140
+ target: hopWallets[j].address,
141
+ allowFailure: false,
142
+ value: 0n,
143
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [
144
+ tokenAddress,
145
+ hopWallets[j + 1].address,
146
+ ]),
147
+ });
148
+ }
149
+ // 最后一个中间钱包 → 接收者
150
+ calls.push({
151
+ target: lastHop.address,
152
+ allowFailure: false,
153
+ value: 0n,
154
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [tokenAddress, recipient]),
155
+ });
156
+ }
157
+ }
158
+ }
159
+ // ========================================
160
+ // 添加利润转账调用(固定费用,OKB)
161
+ // ========================================
162
+ if (profitAmountOkb > 0n) {
163
+ calls.push({
164
+ target: mainWallet.address,
165
+ allowFailure: false,
166
+ value: 0n,
167
+ callData: delegateInterface.encodeFunctionData('transferAmount', [profitRecipient, profitAmountOkb]),
168
+ });
169
+ }
170
+ // ========================================
171
+ // 构建交易
172
+ // ========================================
173
+ // ✅ Payer 模式下 value 为 0(资金从 mainWallet 转出,不是 Payer)
174
+ // 无 Payer 时,原生币分发需要传递 value(资金从 txSender 转出)
175
+ const totalValue = isNative && !payerWallet ? totalAmount : 0n;
176
+ const signedTransaction = buildEIP7702TransactionSync(txSender, // ✅ 使用 txSender(Payer 或 mainWallet)发起交易
177
+ authorizations, calls, totalValue, payerNonce, // ✅ 使用 txSender 的 nonce
178
+ feeData, config);
179
+ // ✅ 返回所有中间钱包(扁平化)
180
+ const flatHopWallets = allHopWalletInfos.flat();
181
+ return {
182
+ signedTransaction,
183
+ hopWallets: flatHopWallets.length > 0 ? flatHopWallets : undefined,
184
+ metadata: {
185
+ senderAddress: mainWallet.address, // 资金来源
186
+ payerAddress: txSender.address, // Gas 支付者
187
+ recipientCount: recipients.length,
188
+ totalAmount: isNative ? ethers.formatEther(totalAmount) : ethers.formatUnits(totalAmount, tokenDecimals),
189
+ profitAmount: ethers.formatEther(profitAmountOkb), // ✅ 以 OKB 计
190
+ isNative,
191
+ tokenAddress: tokenAddress ?? null,
192
+ hopCount,
193
+ userType,
194
+ },
195
+ };
196
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * multi-hop-transfer - 多对多 (Pairwise) sender[i] → receiver[i]
3
+ */
4
+ import type { PairwiseTransferParams, PairwiseTransferResult } from './multi-hop-transfer-helpers.js';
5
+ export declare function pairwiseTransfer(params: PairwiseTransferParams): Promise<PairwiseTransferResult>;
@@ -0,0 +1,188 @@
1
+ /**
2
+ * multi-hop-transfer - 多对多 (Pairwise) sender[i] → receiver[i]
3
+ */
4
+ import { ethers } from 'ethers';
5
+ import { createWallet, signAuthorizationsWithNonces, batchGetNonces, buildEIP7702TransactionSync } from './utils.js';
6
+ import { XLAYER_CHAIN_ID } from './constants.js';
7
+ import { calculateTransferFee } from '../../../core/constants/index.js';
8
+ import { createEip7702DelegateContext, generateHopWalletMatrix, isNativeTransferToken, normalizePairwiseAmounts, parseTransferAmountsWei, resolveListPayerWallet, } from './transfer-context-helpers.js';
9
+ export async function pairwiseTransfer(params) {
10
+ const { senderPrivateKeys, receiverAddresses, payerPrivateKey, amount, amounts, tokenAddress, tokenDecimals = 18, hopCount = 0, userType, config, } = params;
11
+ // 验证参数
12
+ if (senderPrivateKeys.length !== receiverAddresses.length) {
13
+ throw new Error(`senderPrivateKeys 长度 (${senderPrivateKeys.length}) 必须与 receiverAddresses 长度 (${receiverAddresses.length}) 相同`);
14
+ }
15
+ const pairCount = senderPrivateKeys.length;
16
+ if (pairCount === 0) {
17
+ throw new Error('至少需要一对发送者/接收者');
18
+ }
19
+ const normalizedAmounts = normalizePairwiseAmounts(pairCount, amount, amounts);
20
+ const { provider, delegateAddress, delegateInterface, profitRecipient } = createEip7702DelegateContext(config);
21
+ const isNative = isNativeTransferToken(tokenAddress);
22
+ const senderWallets = senderPrivateKeys.map((pk) => createWallet(pk, provider));
23
+ const { payerWallet } = resolveListPayerWallet(senderPrivateKeys, payerPrivateKey, provider);
24
+ const mainWallet = payerWallet ?? senderWallets[0];
25
+ const { allHopWalletInfos, allHopWallets } = generateHopWalletMatrix(pairCount, hopCount, provider);
26
+ const amountsWei = parseTransferAmountsWei(normalizedAmounts, isNative, tokenDecimals);
27
+ const totalAmount = amountsWei.reduce((sum, amt) => sum + amt, 0n);
28
+ // ✅ 按地址数量收取固定费用(原生 OKB)
29
+ const profitAmountOkb = calculateTransferFee(XLAYER_CHAIN_ID, pairCount);
30
+ // ✅ 使用第一个发送者支付 OKB 利润
31
+ const maxTransferIndex = 0;
32
+ // ========================================
33
+ // 并行获取数据
34
+ // ========================================
35
+ const senderAddresses = senderWallets.map((w) => w.address);
36
+ const addressesToGetNonces = payerWallet ? [payerWallet.address, ...senderAddresses] : senderAddresses;
37
+ const [allNoncesResult, feeData] = await Promise.all([
38
+ batchGetNonces(addressesToGetNonces, provider),
39
+ provider.getFeeData(),
40
+ ]);
41
+ // 如果有单独的 Payer,第一个是 Payer 的 nonce,其余是发送者的
42
+ const payerNonce = payerWallet ? allNoncesResult[0] : allNoncesResult[0];
43
+ const nonces = payerWallet ? allNoncesResult.slice(1) : allNoncesResult;
44
+ // ========================================
45
+ // 构建调用
46
+ // ========================================
47
+ const calls = [];
48
+ for (let i = 0; i < pairCount; i++) {
49
+ const senderWallet = senderWallets[i];
50
+ const receiver = receiverAddresses[i];
51
+ const amtWei = amountsWei[i];
52
+ const hopWallets = allHopWallets[i];
53
+ // ✅ 如果有单独的 Payer,发送者使用自己的余额(value: 0n, 由 transferTo 使用 address(this).balance)
54
+ // ✅ 如果没有 Payer 且是第一个发送者(发起交易),需要传递 value
55
+ const shouldPassValue = !payerWallet && i === 0;
56
+ if (hopCount === 0 || hopWallets.length === 0) {
57
+ // ========================================
58
+ // 直接转账:sender → receiver
59
+ // ========================================
60
+ // ✅ 第一个发送者负责转 OKB 固定费用
61
+ if (profitAmountOkb > 0n && i === maxTransferIndex) {
62
+ calls.push({
63
+ target: senderWallet.address,
64
+ allowFailure: false,
65
+ value: 0n,
66
+ callData: delegateInterface.encodeFunctionData('transferAmount', [profitRecipient, profitAmountOkb]),
67
+ });
68
+ }
69
+ if (isNative) {
70
+ calls.push({
71
+ target: senderWallet.address,
72
+ allowFailure: false,
73
+ value: shouldPassValue ? amtWei : 0n,
74
+ callData: delegateInterface.encodeFunctionData('transferAmount', [receiver, amtWei]),
75
+ });
76
+ }
77
+ else {
78
+ // ERC20 代币转账
79
+ calls.push({
80
+ target: senderWallet.address,
81
+ allowFailure: false,
82
+ value: 0n,
83
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, receiver, amtWei]),
84
+ });
85
+ }
86
+ }
87
+ else {
88
+ // ========================================
89
+ // 多跳转账:sender → hop1 → hop2 → ... → receiver
90
+ // ========================================
91
+ const firstHop = hopWallets[0];
92
+ const lastHop = hopWallets[hopWallets.length - 1];
93
+ // ✅ 第一个发送者负责转 OKB 固定费用(在转账前)
94
+ if (profitAmountOkb > 0n && i === maxTransferIndex) {
95
+ calls.push({
96
+ target: senderWallet.address,
97
+ allowFailure: false,
98
+ value: 0n,
99
+ callData: delegateInterface.encodeFunctionData('transferAmount', [profitRecipient, profitAmountOkb]),
100
+ });
101
+ }
102
+ if (isNative) {
103
+ // 原生 OKB 多跳
104
+ calls.push({
105
+ target: senderWallet.address,
106
+ allowFailure: false,
107
+ value: shouldPassValue ? amtWei : 0n,
108
+ callData: delegateInterface.encodeFunctionData('transferAmount', [firstHop.address, amtWei]),
109
+ });
110
+ for (let j = 0; j < hopWallets.length - 1; j++) {
111
+ calls.push({
112
+ target: hopWallets[j].address,
113
+ allowFailure: false,
114
+ value: 0n,
115
+ callData: delegateInterface.encodeFunctionData('transferTo', [hopWallets[j + 1].address]),
116
+ });
117
+ }
118
+ calls.push({
119
+ target: lastHop.address,
120
+ allowFailure: false,
121
+ value: 0n,
122
+ callData: delegateInterface.encodeFunctionData('transferTo', [receiver]),
123
+ });
124
+ }
125
+ else {
126
+ // ERC20 多跳
127
+ // sender → 第一个中间钱包(ERC20 代币)
128
+ calls.push({
129
+ target: senderWallet.address,
130
+ allowFailure: false,
131
+ value: 0n,
132
+ callData: delegateInterface.encodeFunctionData('executeTransfer', [tokenAddress, firstHop.address, amtWei]),
133
+ });
134
+ // 中间钱包之间转账
135
+ for (let j = 0; j < hopWallets.length - 1; j++) {
136
+ calls.push({
137
+ target: hopWallets[j].address,
138
+ allowFailure: false,
139
+ value: 0n,
140
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [
141
+ tokenAddress,
142
+ hopWallets[j + 1].address,
143
+ ]),
144
+ });
145
+ }
146
+ // 最后一个中间钱包 → receiver
147
+ calls.push({
148
+ target: lastHop.address,
149
+ allowFailure: false,
150
+ value: 0n,
151
+ callData: delegateInterface.encodeFunctionData('executeTransferAll', [tokenAddress, receiver]),
152
+ });
153
+ }
154
+ }
155
+ }
156
+ // ========================================
157
+ // 同步签署授权(已有 nonce)
158
+ // ========================================
159
+ // ✅ 如果有单独的 Payer,需要为 Payer 也生成授权
160
+ const allWallets = payerWallet ? [payerWallet, ...senderWallets] : [...senderWallets];
161
+ const allNonces = payerWallet ? [payerNonce, ...nonces] : [...nonces];
162
+ for (const hopWallets of allHopWallets) {
163
+ for (const hopWallet of hopWallets) {
164
+ allWallets.push(hopWallet);
165
+ allNonces.push(0);
166
+ }
167
+ }
168
+ const authorizations = signAuthorizationsWithNonces(allWallets, allNonces, delegateAddress, 0);
169
+ // ========================================
170
+ // 同步构建交易
171
+ // ========================================
172
+ // ✅ Payer 模式下 value 为 0(资金来自发送者钱包)
173
+ const totalValue = isNative && !payerWallet ? totalAmount : 0n;
174
+ const signedTransaction = buildEIP7702TransactionSync(mainWallet, authorizations, calls, totalValue, payerWallet ? payerNonce : nonces[0], feeData, config);
175
+ return {
176
+ signedTransaction,
177
+ hopWallets: hopCount > 0 ? allHopWalletInfos : undefined,
178
+ metadata: {
179
+ pairCount,
180
+ totalAmount: isNative ? ethers.formatEther(totalAmount) : ethers.formatUnits(totalAmount, tokenDecimals),
181
+ profitAmount: ethers.formatEther(profitAmountOkb), // ✅ 以 OKB 计
182
+ isNative,
183
+ tokenAddress: tokenAddress ?? null,
184
+ hopCount,
185
+ userType,
186
+ },
187
+ };
188
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * multi-hop-transfer - 归集 (Sweep) 多对一
3
+ */
4
+ import type { SweepParams, TransferResult } from './multi-hop-transfer-helpers.js';
5
+ export declare function sweep(params: SweepParams): Promise<TransferResult>;