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,135 @@
1
+ import { ethers, Wallet, Contract, } from 'ethers';
2
+ import { getGasLimit, } from '../../../../core/gas/bundle-gas.js';
3
+ import { NonceManager, getOptimizedGasPrice, buildProfitHopTransactions, PROFIT_HOP_COUNT, } from '../../../../utils/bundle-helpers.js';
4
+ import { GAS_LIMITS, } from '../../../../core/constants/index.js';
5
+ import { V2_ROUTER_ABI, } from '../../../../core/shared-abis/common.js';
6
+ import { CHAIN_ID_MAP, getTxType, getGasPriceConfig, shouldExtractProfit, calculateBatchProfit, getProfitRecipient, getBribeAmount, BLOCKRAZOR_BUILDER_EOA, } from '../config.js';
7
+ import { PANCAKE_V2_ROUTER_ADDRESS, PANCAKE_V3_ROUTER_ADDRESS, V3_ROUTER_ABI, getCachedProvider, isUsingNativeToken, needSendBNB, buildV2Transactions, buildV3SingleTransactions, buildV3MultiHopTransactions, findMaxAmountIndex, allocateProfitAwareNonces, } from './helpers.js';
8
+ /**
9
+ * ✅ 使用 PancakeSwap 官方 Router 批量购买代币
10
+ */
11
+ export async function pancakeProxyBatchBuyMerkle(params) {
12
+ const { chain, privateKeys, buyAmounts, tokenAddress, routeType, config, quoteToken, quoteTokenDecimals } = params;
13
+ if (privateKeys.length === 0 || buyAmounts.length !== privateKeys.length) {
14
+ throw new Error('Private key count and buy amount count must match');
15
+ }
16
+ const chainId = CHAIN_ID_MAP[chain];
17
+ const provider = getCachedProvider(chain, config.rpcUrl, chainId);
18
+ const buyers = privateKeys.map((k) => new Wallet(k, provider));
19
+ const extractProfit = shouldExtractProfit();
20
+ const nonceManager = new NonceManager(provider);
21
+ const finalGasLimit = getGasLimit(config, 800000);
22
+ const useNativeToken = isUsingNativeToken(quoteToken);
23
+ const originalAmountsWei = buyAmounts.map((amount) => ethers.parseEther(amount));
24
+ const { totalProfit, remainingAmounts } = calculateBatchProfit(originalAmountsWei);
25
+ const maxFundsIndex = findMaxAmountIndex(originalAmountsWei);
26
+ const shouldExtractProfitForBuy = extractProfit && useNativeToken;
27
+ const nativeProfitAmount = shouldExtractProfitForBuy ? totalProfit : 0n;
28
+ let actualAmountsWei = remainingAmounts;
29
+ if (!useNativeToken && quoteTokenDecimals !== undefined && quoteTokenDecimals !== 18) {
30
+ const decimalsDiff = 18 - quoteTokenDecimals;
31
+ const divisor = BigInt(10 ** decimalsDiff);
32
+ actualAmountsWei = remainingAmounts.map((amount) => amount / divisor);
33
+ }
34
+ const presetGasPrice = config.gasPrice;
35
+ const presetNonces = config.nonces;
36
+ const [gasPrice, nonces] = await Promise.all([
37
+ presetGasPrice !== undefined
38
+ ? Promise.resolve(presetGasPrice)
39
+ : getOptimizedGasPrice(provider, getGasPriceConfig(config)),
40
+ presetNonces && presetNonces.length === buyers.length
41
+ ? Promise.resolve(presetNonces)
42
+ : allocateProfitAwareNonces(buyers, shouldExtractProfitForBuy, maxFundsIndex, nativeProfitAmount, nonceManager),
43
+ ]);
44
+ const minOuts = new Array(buyers.length).fill(0n);
45
+ const needBNB = needSendBNB(routeType, params, useNativeToken);
46
+ // ✅ 使用官方 Router
47
+ let routers;
48
+ let unsignedBuys;
49
+ if (routeType === 'v2') {
50
+ if (!params.v2Path || params.v2Path.length < 2) {
51
+ throw new Error('v2Path is required for V2 routing');
52
+ }
53
+ routers = buyers.map((w) => new Contract(PANCAKE_V2_ROUTER_ADDRESS, V2_ROUTER_ABI, w));
54
+ unsignedBuys = await buildV2Transactions(routers, buyers, actualAmountsWei, minOuts, params.v2Path, true, needBNB);
55
+ }
56
+ else if (routeType === 'v3-single') {
57
+ if (!params.v3TokenIn || !params.v3Fee) {
58
+ throw new Error('v3TokenIn and v3Fee are required for V3 single-hop');
59
+ }
60
+ routers = buyers.map((w) => new Contract(PANCAKE_V3_ROUTER_ADDRESS, V3_ROUTER_ABI, w));
61
+ unsignedBuys = await buildV3SingleTransactions(routers, buyers, params.v3TokenIn, tokenAddress, params.v3Fee, actualAmountsWei, minOuts, true, needBNB);
62
+ }
63
+ else if (routeType === 'v3-multi') {
64
+ // ✅ V3 多跳:需要 v3Tokens 和 v3Fees 参数
65
+ if (!params.v3Tokens || params.v3Tokens.length < 2) {
66
+ throw new Error('v3Tokens(至少 2 个代币)是 V3 多跳必需的');
67
+ }
68
+ if (!params.v3Fees || params.v3Fees.length !== params.v3Tokens.length - 1) {
69
+ throw new Error(`v3Fees 长度必须等于 v3Tokens 长度 - 1`);
70
+ }
71
+ routers = buyers.map((w) => new Contract(PANCAKE_V3_ROUTER_ADDRESS, V3_ROUTER_ABI, w));
72
+ unsignedBuys = await buildV3MultiHopTransactions(routers, buyers, params.v3Tokens, params.v3Fees, actualAmountsWei, minOuts, true, needBNB);
73
+ }
74
+ else {
75
+ throw new Error(`Unsupported routeType: ${routeType}`);
76
+ }
77
+ const bribeAmount = getBribeAmount(config);
78
+ const needBribeTx = bribeAmount > 0n && maxFundsIndex >= 0 && buyers.length > 0;
79
+ const txType = getTxType(config);
80
+ let bribeNonce;
81
+ const mutableNonces = [...nonces];
82
+ if (needBribeTx) {
83
+ bribeNonce = mutableNonces[maxFundsIndex];
84
+ mutableNonces[maxFundsIndex] = bribeNonce + 1;
85
+ }
86
+ const signPromises = [];
87
+ if (needBribeTx && bribeNonce !== undefined) {
88
+ signPromises.push(buyers[maxFundsIndex].signTransaction({
89
+ to: BLOCKRAZOR_BUILDER_EOA,
90
+ value: bribeAmount,
91
+ nonce: bribeNonce,
92
+ gasPrice,
93
+ gasLimit: GAS_LIMITS.BRIBE,
94
+ chainId,
95
+ type: txType,
96
+ }));
97
+ }
98
+ unsignedBuys.forEach((unsigned, i) => {
99
+ const txValue = useNativeToken ? (unsigned.value ?? 0n) : 0n;
100
+ signPromises.push(buyers[i].signTransaction({
101
+ ...unsigned,
102
+ from: buyers[i].address,
103
+ nonce: mutableNonces[i],
104
+ gasLimit: finalGasLimit,
105
+ gasPrice,
106
+ chainId,
107
+ type: txType,
108
+ value: txValue,
109
+ }));
110
+ });
111
+ const signedTxs = await Promise.all(signPromises);
112
+ // 利润多跳转账(强制 2 跳中转)
113
+ let profitHopWallets;
114
+ if (shouldExtractProfitForBuy && nativeProfitAmount > 0n && maxFundsIndex >= 0) {
115
+ const profitNonce = mutableNonces[maxFundsIndex] + 1;
116
+ const profitHopResult = await buildProfitHopTransactions({
117
+ provider,
118
+ payerWallet: buyers[maxFundsIndex],
119
+ profitAmount: nativeProfitAmount,
120
+ profitRecipient: getProfitRecipient(),
121
+ hopCount: PROFIT_HOP_COUNT,
122
+ gasPrice,
123
+ chainId,
124
+ txType,
125
+ startNonce: profitNonce,
126
+ });
127
+ signedTxs.push(...profitHopResult.signedTransactions);
128
+ profitHopWallets = profitHopResult.hopWallets; // ✅ 收集利润多跳钱包
129
+ }
130
+ nonceManager.clearTemp();
131
+ return {
132
+ signedTransactions: signedTxs,
133
+ profitHopWallets, // ✅ 返回利润多跳钱包
134
+ };
135
+ }
@@ -0,0 +1,52 @@
1
+ import { Wallet, JsonRpcProvider, Contract } from 'ethers';
2
+ import type { ContractTransaction } from 'ethers/contract';
3
+ import { NonceManager } from '../../../../utils/bundle-helpers.js';
4
+ import type { PancakeProxyBatchBuySignParams } from '../types.js';
5
+ export declare const PANCAKE_V2_ROUTER_ADDRESS: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
6
+ export declare const PANCAKE_V3_ROUTER_ADDRESS: "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4";
7
+ export declare const PANCAKE_V3_QUOTER_ADDRESS: "0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997";
8
+ export declare const V3_ROUTER_ABI: (string | {
9
+ inputs: {
10
+ components: {
11
+ name: string;
12
+ type: string;
13
+ }[];
14
+ name: string;
15
+ type: string;
16
+ }[];
17
+ name: string;
18
+ outputs: {
19
+ name: string;
20
+ type: string;
21
+ }[];
22
+ stateMutability: string;
23
+ type: string;
24
+ })[];
25
+ export declare function getCachedProvider(chain: string, rpcUrl: string, chainId?: number): JsonRpcProvider;
26
+ export declare function getTokenDecimals(tokenAddress: string, provider: JsonRpcProvider): Promise<number>;
27
+ type PancakeBuyRouteFields = Pick<PancakeProxyBatchBuySignParams, 'v2Path' | 'v3TokenIn' | 'v3ExactTokenIn'>;
28
+ export declare function needSendBNB(routeType: PancakeProxyBatchBuySignParams['routeType'], params: PancakeBuyRouteFields, useNativeToken?: boolean): boolean;
29
+ export declare function isUsingNativeToken(quoteToken?: string): boolean;
30
+ /**
31
+ * 根据 routeType 获取授权目标地址
32
+ */
33
+ export declare function getApprovalTarget(routeType: string): string;
34
+ /**
35
+ * ✅ 构建 V2 交易(使用官方 Router)
36
+ */
37
+ export declare function buildV2Transactions(routers: Contract[], wallets: Wallet[], amountsWei: bigint[], minOuts: bigint[], path: string[], isBuy: boolean, needBNB: boolean): Promise<ContractTransaction[]>;
38
+ /**
39
+ * ✅ 构建 V3 单跳交易(使用官方 SwapRouter02 + multicall)
40
+ */
41
+ export declare function buildV3SingleTransactions(routers: Contract[], wallets: Wallet[], tokenIn: string, tokenOut: string, fee: number, amountsWei: bigint[], minOuts: bigint[], isBuy: boolean, needBNB: boolean): Promise<ContractTransaction[]>;
42
+ /**
43
+ * ✅ 构建 V3 多跳交易(使用官方 SwapRouter02 的 exactInput)
44
+ */
45
+ export declare function buildV3MultiHopTransactions(routers: Contract[], wallets: Wallet[], tokens: string[], fees: number[], amountsWei: bigint[], minOuts: bigint[], isBuy: boolean, needBNB: boolean): Promise<ContractTransaction[]>;
46
+ /**
47
+ * ✅ 使用 Multicall3 批量获取 V2 报价
48
+ */
49
+ export declare function batchGetV2Quotes(provider: JsonRpcProvider, amountsWei: bigint[], v2Path: string[]): Promise<bigint[]>;
50
+ export declare function findMaxAmountIndex(amounts: bigint[]): number;
51
+ export declare function allocateProfitAwareNonces(wallets: Wallet[], extractProfit: boolean, maxIndex: number, totalProfit: bigint, nonceManager: NonceManager): Promise<number[]>;
52
+ export {};
@@ -0,0 +1,267 @@
1
+ import { JsonRpcProvider, Contract, Interface, } from 'ethers';
2
+ import { getDeadline, encodeV3Path, } from '../../../../utils/bundle-helpers.js';
3
+ import { ADDRESSES, ZERO_ADDRESS, } from '../../../../core/constants/index.js';
4
+ import { MULTICALL3_ABI, V2_ROUTER_ABI, V3_ROUTER02_ABI, ERC20_ABI, } from '../../../../core/shared-abis/common.js';
5
+ import { CHAIN_ID_MAP, } from '../config.js';
6
+ // ==================== 常量 ====================
7
+ const MULTICALL3_ADDRESS = ADDRESSES.BSC.Multicall3;
8
+ const WBNB_ADDRESS = ADDRESSES.BSC.WBNB;
9
+ // ✅ PancakeSwap 官方合约地址
10
+ export const PANCAKE_V2_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV2Router;
11
+ export const PANCAKE_V3_ROUTER_ADDRESS = ADDRESSES.BSC.PancakeV3Router;
12
+ export const PANCAKE_V3_QUOTER_ADDRESS = ADDRESSES.BSC.PancakeV3Quoter;
13
+ // ==================== ABI 别名(从公共模块导入)====================
14
+ export const V3_ROUTER_ABI = V3_ROUTER02_ABI;
15
+ // ==================== Provider 缓存 ====================
16
+ const providerCache = new Map();
17
+ const PROVIDER_CACHE_TTL_MS = 60 * 1000;
18
+ // Token Decimals 缓存
19
+ const tokenDecimalsCache = new Map();
20
+ export function getCachedProvider(chain, rpcUrl, chainId) {
21
+ const cacheKey = `${chain}-${rpcUrl}`;
22
+ const now = Date.now();
23
+ const cached = providerCache.get(cacheKey);
24
+ if (cached && cached.expireAt > now) {
25
+ return cached.provider;
26
+ }
27
+ const resolvedChainId = chainId ?? (CHAIN_ID_MAP[chain] || 56);
28
+ const provider = new JsonRpcProvider(rpcUrl, { chainId: resolvedChainId, name: chain });
29
+ providerCache.set(cacheKey, { provider, expireAt: now + PROVIDER_CACHE_TTL_MS });
30
+ return provider;
31
+ }
32
+ export async function getTokenDecimals(tokenAddress, provider) {
33
+ const cacheKey = tokenAddress.toLowerCase();
34
+ const cached = tokenDecimalsCache.get(cacheKey);
35
+ if (cached !== undefined) {
36
+ return cached;
37
+ }
38
+ try {
39
+ const token = new Contract(tokenAddress, ERC20_ABI, provider);
40
+ const decimals = await token.decimals();
41
+ const result = Number(decimals);
42
+ tokenDecimalsCache.set(cacheKey, result);
43
+ return result;
44
+ }
45
+ catch {
46
+ tokenDecimalsCache.set(cacheKey, 18);
47
+ return 18;
48
+ }
49
+ }
50
+ export function needSendBNB(routeType, params, useNativeToken = true) {
51
+ if (!useNativeToken) {
52
+ return false;
53
+ }
54
+ if (routeType === 'v2' && params.v2Path && params.v2Path[0].toLowerCase() === WBNB_ADDRESS.toLowerCase()) {
55
+ return true;
56
+ }
57
+ if (routeType === 'v3-single' && params.v3TokenIn && params.v3TokenIn.toLowerCase() === WBNB_ADDRESS.toLowerCase()) {
58
+ return true;
59
+ }
60
+ if (routeType === 'v3-multi' &&
61
+ params.v3ExactTokenIn &&
62
+ params.v3ExactTokenIn.toLowerCase() === WBNB_ADDRESS.toLowerCase()) {
63
+ return true;
64
+ }
65
+ return false;
66
+ }
67
+ export function isUsingNativeToken(quoteToken) {
68
+ return !quoteToken || quoteToken === ZERO_ADDRESS || quoteToken.toLowerCase() === WBNB_ADDRESS.toLowerCase();
69
+ }
70
+ /**
71
+ * 根据 routeType 获取授权目标地址
72
+ */
73
+ export function getApprovalTarget(routeType) {
74
+ if (routeType === 'v2') {
75
+ return PANCAKE_V2_ROUTER_ADDRESS;
76
+ }
77
+ return PANCAKE_V3_ROUTER_ADDRESS;
78
+ }
79
+ /**
80
+ * ✅ 构建 V2 交易(使用官方 Router)
81
+ */
82
+ export async function buildV2Transactions(routers, wallets, amountsWei, minOuts, path, isBuy, needBNB) {
83
+ const deadline = getDeadline();
84
+ return Promise.all(routers.map(async (router, i) => {
85
+ if (isBuy && needBNB) {
86
+ return router.swapExactETHForTokensSupportingFeeOnTransferTokens.populateTransaction(minOuts[i], path, wallets[i].address, deadline, { value: amountsWei[i] });
87
+ }
88
+ else {
89
+ return router.swapExactTokensForETHSupportingFeeOnTransferTokens.populateTransaction(amountsWei[i], minOuts[i], path, wallets[i].address, deadline);
90
+ }
91
+ }));
92
+ }
93
+ /**
94
+ * ✅ 构建 V3 单跳交易(使用官方 SwapRouter02 + multicall)
95
+ */
96
+ export async function buildV3SingleTransactions(routers, wallets, tokenIn, tokenOut, fee, amountsWei, minOuts, isBuy, needBNB) {
97
+ const deadline = getDeadline();
98
+ const v3RouterIface = new Interface(V3_ROUTER_ABI);
99
+ return Promise.all(routers.map(async (router, i) => {
100
+ const isTokenOutWBNB = tokenOut.toLowerCase() === WBNB_ADDRESS.toLowerCase();
101
+ const exactInputSingleData = v3RouterIface.encodeFunctionData('exactInputSingle', [
102
+ {
103
+ tokenIn: tokenIn,
104
+ tokenOut: tokenOut,
105
+ fee: fee,
106
+ recipient: isTokenOutWBNB ? PANCAKE_V3_ROUTER_ADDRESS : wallets[i].address,
107
+ amountIn: amountsWei[i],
108
+ amountOutMinimum: minOuts[i],
109
+ sqrtPriceLimitX96: 0n,
110
+ },
111
+ ]);
112
+ if (isBuy && needBNB) {
113
+ return router.multicall.populateTransaction(deadline, [exactInputSingleData], { value: amountsWei[i] });
114
+ }
115
+ else if (!isBuy && isTokenOutWBNB) {
116
+ const unwrapData = v3RouterIface.encodeFunctionData('unwrapWETH9', [minOuts[i], wallets[i].address]);
117
+ return router.multicall.populateTransaction(deadline, [exactInputSingleData, unwrapData]);
118
+ }
119
+ else {
120
+ return router.multicall.populateTransaction(deadline, [exactInputSingleData]);
121
+ }
122
+ }));
123
+ }
124
+ /**
125
+ * ✅ 构建 V3 多跳交易(使用官方 SwapRouter02 的 exactInput)
126
+ */
127
+ export async function buildV3MultiHopTransactions(routers, wallets, tokens, fees, amountsWei, minOuts, isBuy, needBNB) {
128
+ if (!tokens || tokens.length < 2) {
129
+ throw new Error('V3 多跳需要至少 2 个代币(v3Tokens)');
130
+ }
131
+ if (!fees || fees.length !== tokens.length - 1) {
132
+ throw new Error(`V3 多跳费率数量 (${fees?.length || 0}) 必须等于代币数量 - 1 (${tokens.length - 1})(v3Fees)`);
133
+ }
134
+ const deadline = getDeadline();
135
+ const v3RouterIface = new Interface(V3_ROUTER_ABI);
136
+ const forwardPath = encodeV3Path(tokens, fees);
137
+ const reversedTokens = [...tokens].reverse();
138
+ const reversedFees = [...fees].reverse();
139
+ const reversePath = encodeV3Path(reversedTokens, reversedFees);
140
+ const tokenOut = tokens[tokens.length - 1];
141
+ const isTokenOutWBNB = tokenOut.toLowerCase() === WBNB_ADDRESS.toLowerCase();
142
+ return Promise.all(routers.map(async (router, i) => {
143
+ if (isBuy && needBNB) {
144
+ const swapData = v3RouterIface.encodeFunctionData('exactInput', [
145
+ {
146
+ path: forwardPath,
147
+ recipient: wallets[i].address,
148
+ amountIn: amountsWei[i],
149
+ amountOutMinimum: minOuts[i],
150
+ },
151
+ ]);
152
+ return router.multicall.populateTransaction(deadline, [swapData], { value: amountsWei[i] });
153
+ }
154
+ else if (!isBuy) {
155
+ const swapData = v3RouterIface.encodeFunctionData('exactInput', [
156
+ {
157
+ path: reversePath,
158
+ recipient: isTokenOutWBNB ? PANCAKE_V3_ROUTER_ADDRESS : wallets[i].address,
159
+ amountIn: amountsWei[i],
160
+ amountOutMinimum: minOuts[i],
161
+ },
162
+ ]);
163
+ if (isTokenOutWBNB) {
164
+ const unwrapData = v3RouterIface.encodeFunctionData('unwrapWETH9', [minOuts[i], wallets[i].address]);
165
+ return router.multicall.populateTransaction(deadline, [swapData, unwrapData]);
166
+ }
167
+ return router.multicall.populateTransaction(deadline, [swapData]);
168
+ }
169
+ else {
170
+ const swapData = v3RouterIface.encodeFunctionData('exactInput', [
171
+ {
172
+ path: forwardPath,
173
+ recipient: wallets[i].address,
174
+ amountIn: amountsWei[i],
175
+ amountOutMinimum: minOuts[i],
176
+ },
177
+ ]);
178
+ return router.multicall.populateTransaction(deadline, [swapData]);
179
+ }
180
+ }));
181
+ }
182
+ /**
183
+ * ✅ 使用 Multicall3 批量获取 V2 报价
184
+ */
185
+ export async function batchGetV2Quotes(provider, amountsWei, v2Path) {
186
+ if (amountsWei.length === 0)
187
+ return [];
188
+ if (amountsWei.length === 1) {
189
+ try {
190
+ const v2Router = new Contract(PANCAKE_V2_ROUTER_ADDRESS, V2_ROUTER_ABI, provider);
191
+ const amounts = await v2Router.getAmountsOut(amountsWei[0], v2Path);
192
+ return [amounts[amounts.length - 1]];
193
+ }
194
+ catch {
195
+ return [0n];
196
+ }
197
+ }
198
+ try {
199
+ const v2RouterIface = new Interface(V2_ROUTER_ABI);
200
+ const multicall = new Contract(MULTICALL3_ADDRESS, MULTICALL3_ABI, provider);
201
+ const calls = amountsWei.map((amount) => ({
202
+ target: PANCAKE_V2_ROUTER_ADDRESS,
203
+ allowFailure: true,
204
+ callData: v2RouterIface.encodeFunctionData('getAmountsOut', [amount, v2Path]),
205
+ }));
206
+ const results = await multicall.aggregate3.staticCall(calls);
207
+ return results.map((r) => {
208
+ if (r.success && r.returnData && r.returnData !== '0x') {
209
+ try {
210
+ const decoded = v2RouterIface.decodeFunctionResult('getAmountsOut', r.returnData);
211
+ const amounts = decoded[0];
212
+ return amounts[amounts.length - 1];
213
+ }
214
+ catch {
215
+ return 0n;
216
+ }
217
+ }
218
+ return 0n;
219
+ });
220
+ }
221
+ catch {
222
+ return await Promise.all(amountsWei.map(async (amount) => {
223
+ try {
224
+ const v2Router = new Contract(PANCAKE_V2_ROUTER_ADDRESS, V2_ROUTER_ABI, provider);
225
+ const amounts = await v2Router.getAmountsOut(amount, v2Path);
226
+ return amounts[amounts.length - 1];
227
+ }
228
+ catch {
229
+ return 0n;
230
+ }
231
+ }));
232
+ }
233
+ }
234
+ export function findMaxAmountIndex(amounts) {
235
+ if (!amounts.length) {
236
+ return -1;
237
+ }
238
+ let maxIndex = 0;
239
+ let maxValue = amounts[0];
240
+ for (let i = 1; i < amounts.length; i++) {
241
+ if (amounts[i] > maxValue) {
242
+ maxValue = amounts[i];
243
+ maxIndex = i;
244
+ }
245
+ }
246
+ return maxIndex;
247
+ }
248
+ export async function allocateProfitAwareNonces(wallets, extractProfit, maxIndex, totalProfit, nonceManager) {
249
+ const needProfitTx = extractProfit && totalProfit > 0n && maxIndex >= 0 && maxIndex < wallets.length;
250
+ if (!needProfitTx) {
251
+ return await nonceManager.getNextNoncesForWallets(wallets);
252
+ }
253
+ const maxIndexNonces = await nonceManager.getNextNonceBatch(wallets[maxIndex], 2);
254
+ const otherWallets = wallets.filter((_, i) => i !== maxIndex);
255
+ const otherNonces = otherWallets.length > 0 ? await nonceManager.getNextNoncesForWallets(otherWallets) : [];
256
+ const nonces = [];
257
+ let otherIdx = 0;
258
+ for (let i = 0; i < wallets.length; i++) {
259
+ if (i === maxIndex) {
260
+ nonces.push(maxIndexNonces[0]);
261
+ }
262
+ else {
263
+ nonces.push(otherNonces[otherIdx++]);
264
+ }
265
+ }
266
+ return nonces;
267
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * PancakeSwap 官方 Router 交易模块(Flap 版本,支持多链)barrel
3
+ *
4
+ * 原超长文件按职责拆分为:
5
+ * - helpers.ts:常量 / Provider 缓存 / 交易构建 / 报价 / nonce 分配
6
+ * - approve.ts:授权(单笔 / 批量)
7
+ * - buy.ts:pancakeProxyBatchBuyMerkle
8
+ * - sell.ts:pancakeProxyBatchSellMerkle
9
+ *
10
+ * 对外 export 符号与路径保持不变。
11
+ */
12
+ export { approvePancakeProxy, approvePancakeProxyBatch } from './approve.js';
13
+ export { pancakeProxyBatchBuyMerkle } from './buy.js';
14
+ export { pancakeProxyBatchSellMerkle } from './sell.js';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * PancakeSwap 官方 Router 交易模块(Flap 版本,支持多链)barrel
3
+ *
4
+ * 原超长文件按职责拆分为:
5
+ * - helpers.ts:常量 / Provider 缓存 / 交易构建 / 报价 / nonce 分配
6
+ * - approve.ts:授权(单笔 / 批量)
7
+ * - buy.ts:pancakeProxyBatchBuyMerkle
8
+ * - sell.ts:pancakeProxyBatchSellMerkle
9
+ *
10
+ * 对外 export 符号与路径保持不变。
11
+ */
12
+ export { approvePancakeProxy, approvePancakeProxyBatch } from './approve.js';
13
+ export { pancakeProxyBatchBuyMerkle } from './buy.js';
14
+ export { pancakeProxyBatchSellMerkle } from './sell.js';
@@ -0,0 +1,5 @@
1
+ import type { PancakeProxyBatchSellSignParams, PancakeProxyBatchSellResult } from '../types.js';
2
+ /**
3
+ * ✅ 使用 PancakeSwap 官方 Router 批量卖出代币
4
+ */
5
+ export declare function pancakeProxyBatchSellMerkle(params: PancakeProxyBatchSellSignParams): Promise<PancakeProxyBatchSellResult>;