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
@@ -1,589 +1,7 @@
1
- import { ethers, Wallet, JsonRpcProvider } from 'ethers';
2
- import { Club48Client, sendBatchPrivateTransactions, BUILDER_CONTROL_EOA } from '../../core/clients/club48.js';
3
- import { FLAP_PORTAL_ADDRESSES, FLAP_ORIGINAL_PORTAL_ADDRESSES } from './constants.js';
4
- import { GAS_LIMITS, CHAINS, ZERO_ADDRESS } from '../../core/constants/index.js';
5
- import { consoleSdkLogger } from '../../core/index.js';
6
- const sdkLogger = consoleSdkLogger;
7
- // Portal ABI (简化版,仅包含需要的方法)
8
- const PORTAL_ABI = [
9
- 'function newToken(string name, string symbol, string meta) external payable returns (address)',
10
- 'function newTokenV2((string name,string symbol,string meta,uint8 dexThresh,bytes32 salt,uint16 taxRate,uint8 migratorType,address quoteToken,uint256 quoteAmt,address beneficiary,bytes permitData)) external payable returns (address)',
11
- 'function swapExactInputBuy((address inputToken,address outputToken,uint256 inputAmount,uint256 minOutputAmount,bytes permitData)) external payable returns (uint256)',
12
- 'function swapExactInputSell((address inputToken,address outputToken,uint256 inputAmount,uint256 minOutputAmount,bytes permitData)) external returns (uint256)',
13
- 'function quoteExactInput((address inputToken,address outputToken,uint256 inputAmount)) external returns (uint256)',
14
- ];
15
1
  /**
16
- * Flap Protocol Bundle 交易方法
17
- * 使用 48.club Bundle 服务实现原子化交易
2
+ * Flap Protocol Bundle 交易方法(48.club Bundle)
3
+ *
4
+ * 原超长文件按职责拆分为 portal-bundle/ 目录下的多个子文件,
5
+ * 对外 export 符号与路径保持不变(见 portal-bundle/index.ts)。
18
6
  */
19
- // 错误信息国际化
20
- const ERRORS = {
21
- NO_PRIVATE_KEY: {
22
- en: 'At least 1 private key (creator) is required',
23
- zh: '至少需要 1 个私钥(创建者)',
24
- },
25
- AMOUNT_MISMATCH: {
26
- en: (buyCount, buyerCount) => `Buy amount count (${buyCount}) must equal buyer count (${buyerCount})`,
27
- zh: (buyCount, buyerCount) => `购买金额数量(${buyCount})必须等于买家数量(${buyerCount})`,
28
- },
29
- KEY_AMOUNT_MISMATCH: {
30
- en: 'Private key count and amount count must match',
31
- zh: '私钥和购买金额数量必须一致',
32
- },
33
- SELL_KEY_AMOUNT_MISMATCH: {
34
- en: 'Private key count and sell amount count must match',
35
- zh: '私钥和卖出数量必须一致',
36
- },
37
- };
38
- // 获取错误信息(根据环境语言)
39
- function getErrorMessage(key, ...args) {
40
- const lang = (process.env.LANG || process.env.LANGUAGE || 'en').toLowerCase().includes('zh') ? 'zh' : 'en';
41
- const message = ERRORS[key][lang];
42
- return typeof message === 'function' ? message(...args) : message;
43
- }
44
- // ========================================
45
- // 辅助函数:估算 gas 并应用配置
46
- // ========================================
47
- /**
48
- * 估算 gas 并应用用户配置的倍数
49
- */
50
- async function estimateGasWithMultiplier(provider, txRequest, multiplier) {
51
- const estimated = await provider.estimateGas(txRequest);
52
- const mult = multiplier ?? 1.2; // 默认 20% 安全余量
53
- return BigInt(Math.ceil(Number(estimated) * mult));
54
- }
55
- /**
56
- * 获取交易类型(用户可配置)
57
- */
58
- function getTxType(config) {
59
- return config.txType ?? 0; // 默认 Legacy (type 0),适用于 48.club/BSC
60
- }
61
- /**
62
- * Flap Protocol: 创建代币 + 捆绑购买
63
- */
64
- export async function createTokenWithBundleBuy(params) {
65
- const { chain, privateKeys, buyAmounts, tokenInfo, tokenAddress, config } = params;
66
- if (privateKeys.length === 0) {
67
- throw new Error(getErrorMessage('NO_PRIVATE_KEY'));
68
- }
69
- if (buyAmounts.length !== privateKeys.length - 1) {
70
- throw new Error(getErrorMessage('AMOUNT_MISMATCH', buyAmounts.length, privateKeys.length - 1));
71
- }
72
- const provider = new JsonRpcProvider(config.rpcUrl);
73
- const devWallet = new Wallet(privateKeys[0], provider);
74
- const club48 = new Club48Client({
75
- endpoint: config.club48Endpoint,
76
- explorerEndpoint: config.club48ExplorerEndpoint,
77
- });
78
- const blockOffset = config.bundleBlockOffset ?? 100;
79
- // 1. 构建交易(为重复地址分配顺序 nonce)
80
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
81
- const originalPortalAddr = FLAP_ORIGINAL_PORTAL_ADDRESSES[chain];
82
- const gasPrice = await club48.getMinGasPrice();
83
- const signedTxs = [];
84
- const nextNonceMap = new Map();
85
- const getNextNonce = async (w) => {
86
- const key = w.address.toLowerCase();
87
- const cached = nextNonceMap.get(key);
88
- if (cached !== undefined) {
89
- const n = cached;
90
- nextNonceMap.set(key, cached + 1);
91
- return n;
92
- }
93
- const onchain = await w.getNonce();
94
- nextNonceMap.set(key, onchain + 1);
95
- return onchain;
96
- };
97
- // 1.1 创建交易(改为在原始 Portal 上执行 V2 创建,支持 salt/vanity)
98
- const portal = new ethers.Contract(originalPortalAddr, PORTAL_ABI, devWallet);
99
- const createTxUnsigned = await portal.newTokenV2.populateTransaction({
100
- name: tokenInfo.name,
101
- symbol: tokenInfo.symbol,
102
- meta: tokenInfo.meta,
103
- dexThresh: (params.dexThresh ?? 1) & 0xff,
104
- salt: params.salt ?? '0x' + '00'.repeat(32),
105
- taxRate: (params.taxRate ?? 0) & 0xffff,
106
- migratorType: (params.migratorType ?? 0) & 0xff,
107
- quoteToken: params.quoteToken || ZERO_ADDRESS,
108
- quoteAmt: 0n,
109
- beneficiary: new Wallet(privateKeys[0]).address,
110
- permitData: '0x',
111
- });
112
- // 估算 gas 并应用用户配置的安全余量
113
- const createGasLimit = await estimateGasWithMultiplier(provider, { ...createTxUnsigned, from: devWallet.address }, config.gasLimitMultiplier);
114
- const createTxRequest = {
115
- ...createTxUnsigned,
116
- from: devWallet.address,
117
- nonce: await getNextNonce(devWallet),
118
- gasLimit: createGasLimit,
119
- gasPrice: gasPrice,
120
- chainId: CHAINS.BSC.chainId, // BSC
121
- type: getTxType(config), // 用户可配置:0=Legacy(默认),2=EIP-1559
122
- };
123
- const signedCreateTx = await devWallet.signTransaction(createTxRequest);
124
- signedTxs.push(signedCreateTx);
125
- // 可选:添加 tipTx 提升排序
126
- if (config.tipAmountWei && config.tipAmountWei > 0n) {
127
- const tipTx = await devWallet.signTransaction({
128
- to: BUILDER_CONTROL_EOA,
129
- value: config.tipAmountWei,
130
- gasPrice,
131
- gasLimit: GAS_LIMITS.BRIBE,
132
- chainId: CHAINS.BSC.chainId,
133
- type: 0, // Legacy transaction
134
- nonce: await getNextNonce(devWallet),
135
- });
136
- signedTxs.push(tipTx);
137
- }
138
- // 1.2 购买交易
139
- const buyTxs = [];
140
- for (let i = 0; i < buyAmounts.length; i++) {
141
- const buyerWallet = new Wallet(privateKeys[i + 1], provider);
142
- const amountIn = ethers.parseEther(buyAmounts[i]);
143
- // 滑点保护(默认 1%)
144
- const slippageBps = Math.max(0, Math.min(5000, params.config.slippageBps ?? 100));
145
- let minAmountOut = 0n;
146
- try {
147
- const quote = new ethers.Contract(portalAddr, PORTAL_ABI, buyerWallet);
148
- const exactOut = await quote.quoteExactInput.staticCall({
149
- inputToken: ZERO_ADDRESS,
150
- outputToken: tokenAddress,
151
- inputAmount: amountIn,
152
- });
153
- const keep = BigInt(10000 - slippageBps);
154
- minAmountOut = (exactOut * keep) / 10000n;
155
- }
156
- catch (error) {
157
- sdkLogger.debug?.('[Flap bundle] quoteExactInput failed, fallback minAmountOut=0', error);
158
- }
159
- const buyPortal = new ethers.Contract(portalAddr, PORTAL_ABI, buyerWallet);
160
- const buyTxUnsigned = await buyPortal.swapExactInputBuy.populateTransaction({
161
- inputToken: ZERO_ADDRESS,
162
- outputToken: tokenAddress,
163
- inputAmount: 0n,
164
- minOutputAmount: minAmountOut,
165
- permitData: '0x',
166
- }, { value: amountIn });
167
- // 估算 gas 并应用用户配置的安全余量;若因代币尚未创建(同一 bundle 内先创建后购买)导致预估回滚,则使用保守兜底值
168
- let buyGasLimit;
169
- try {
170
- buyGasLimit = await estimateGasWithMultiplier(provider, { ...buyTxUnsigned, from: buyerWallet.address, value: amountIn }, config.gasLimitMultiplier);
171
- }
172
- catch {
173
- // 兜底:在 BSC 上对 swapExactInputBuy 使用相对保守的 gas 上限
174
- buyGasLimit = 600000n;
175
- }
176
- const buyTxRequest = {
177
- ...buyTxUnsigned,
178
- from: buyerWallet.address,
179
- nonce: await getNextNonce(buyerWallet),
180
- gasLimit: buyGasLimit,
181
- gasPrice: gasPrice,
182
- chainId: CHAINS.BSC.chainId, // BSC
183
- type: getTxType(config), // 用户可配置
184
- };
185
- const signedBuyTx = await buyerWallet.signTransaction(buyTxRequest);
186
- signedTxs.push(signedBuyTx);
187
- buyTxs.push(signedBuyTx);
188
- }
189
- // 2. 提交 Bundle
190
- const bundleUuid = await club48.sendBundle({
191
- txs: signedTxs,
192
- maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
193
- noMerge: config.noMerge,
194
- }, {
195
- spMode: params.config.spMode ?? 'timestampPersonalSign',
196
- spPrivateKey: params.config.spPrivateKey || privateKeys[0],
197
- spVMode: params.config.spVMode,
198
- });
199
- // 3. 等待完成
200
- const status = await club48.waitForBundle(bundleUuid, params.config.waitTimeoutMs ?? 60000);
201
- return {
202
- bundleUuid,
203
- tokenAddress,
204
- status,
205
- createTx: signedCreateTx,
206
- buyTxs,
207
- };
208
- }
209
- /**
210
- * Flap Protocol: 批量购买
211
- */
212
- export async function batchBuyWithBundle(params) {
213
- const { chain, privateKeys, buyAmounts, tokenAddress, config } = params;
214
- if (privateKeys.length === 0 || buyAmounts.length !== privateKeys.length) {
215
- throw new Error(getErrorMessage('KEY_AMOUNT_MISMATCH'));
216
- }
217
- const provider = new JsonRpcProvider(config.rpcUrl);
218
- const club48 = new Club48Client({
219
- endpoint: config.club48Endpoint,
220
- explorerEndpoint: config.club48ExplorerEndpoint,
221
- });
222
- const blockOffset = config.bundleBlockOffset ?? 100;
223
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
224
- const gasPrice = await club48.getMinGasPrice();
225
- const signedTxs = [];
226
- const nextNonceMap = new Map();
227
- const getNextNonce = async (w) => {
228
- const key = w.address.toLowerCase();
229
- const cached = nextNonceMap.get(key);
230
- if (cached !== undefined) {
231
- const n = cached;
232
- nextNonceMap.set(key, cached + 1);
233
- return n;
234
- }
235
- const onchain = await w.getNonce();
236
- nextNonceMap.set(key, onchain + 1);
237
- return onchain;
238
- };
239
- // 可选:添加 tipTx 提升排序(在第一位)
240
- if (config.tipAmountWei && config.tipAmountWei > 0n) {
241
- const tipWallet = new Wallet(privateKeys[0], provider);
242
- const tipTx = await tipWallet.signTransaction({
243
- to: BUILDER_CONTROL_EOA,
244
- value: config.tipAmountWei,
245
- gasPrice,
246
- gasLimit: GAS_LIMITS.BRIBE,
247
- chainId: CHAINS.BSC.chainId,
248
- type: 0, // Legacy transaction
249
- nonce: await getNextNonce(tipWallet),
250
- });
251
- signedTxs.unshift(tipTx);
252
- }
253
- for (let i = 0; i < privateKeys.length; i++) {
254
- const buyerWallet = new Wallet(privateKeys[i], provider);
255
- const amountIn = ethers.parseEther(buyAmounts[i]);
256
- // 滑点保护(默认 1%)
257
- const slippageBps = Math.max(0, Math.min(5000, params.config.slippageBps ?? 100));
258
- let minAmountOut = 0n; // 兼容非关键失败
259
- try {
260
- const quote = new ethers.Contract(portalAddr, PORTAL_ABI, buyerWallet);
261
- const exactOut = await quote.quoteExactInput.staticCall({
262
- inputToken: ZERO_ADDRESS,
263
- outputToken: tokenAddress,
264
- inputAmount: amountIn,
265
- });
266
- const keep = BigInt(10000 - slippageBps);
267
- minAmountOut = (exactOut * keep) / 10000n;
268
- }
269
- catch (error) {
270
- sdkLogger.debug?.('[Flap bundle] quoteExactInput failed, fallback minAmountOut=0', error);
271
- }
272
- const portal = new ethers.Contract(portalAddr, PORTAL_ABI, buyerWallet);
273
- const buyTxUnsigned = await portal.swapExactInputBuy.populateTransaction({
274
- inputToken: ZERO_ADDRESS,
275
- outputToken: tokenAddress,
276
- inputAmount: 0n,
277
- minOutputAmount: minAmountOut,
278
- permitData: '0x',
279
- }, { value: amountIn });
280
- // 估算 gas 并添加 20% 安全余量
281
- const estimatedGas = await provider.estimateGas({
282
- ...buyTxUnsigned,
283
- from: buyerWallet.address,
284
- value: amountIn,
285
- });
286
- const gasLimit = (estimatedGas * 120n) / 100n;
287
- const buyTxRequest = {
288
- ...buyTxUnsigned,
289
- from: buyerWallet.address,
290
- nonce: await getNextNonce(buyerWallet),
291
- gasLimit: gasLimit,
292
- gasPrice: gasPrice,
293
- chainId: CHAINS.BSC.chainId, // BSC
294
- type: 0, // Legacy transaction
295
- };
296
- const signedBuyTx = await buyerWallet.signTransaction(buyTxRequest);
297
- signedTxs.push(signedBuyTx);
298
- }
299
- const bundleUuid = await club48.sendBundle({
300
- txs: signedTxs,
301
- maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
302
- noMerge: config.noMerge,
303
- }, {
304
- spMode: params.config.spMode ?? 'timestampPersonalSign',
305
- spPrivateKey: params.config.spPrivateKey || privateKeys[0],
306
- spVMode: params.config.spVMode,
307
- });
308
- const status = await club48.waitForBundle(bundleUuid);
309
- return { bundleUuid, status, buyTxs: signedTxs };
310
- }
311
- /**
312
- * Flap Protocol: 批量卖出
313
- */
314
- export async function batchSellWithBundle(params) {
315
- const { chain, privateKeys, sellAmounts, tokenAddress, config } = params;
316
- if (privateKeys.length === 0 || sellAmounts.length !== privateKeys.length) {
317
- throw new Error(getErrorMessage('SELL_KEY_AMOUNT_MISMATCH'));
318
- }
319
- const provider = new JsonRpcProvider(config.rpcUrl);
320
- const club48 = new Club48Client({
321
- endpoint: config.club48Endpoint,
322
- explorerEndpoint: config.club48ExplorerEndpoint,
323
- });
324
- const blockOffset = config.bundleBlockOffset ?? 100;
325
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
326
- const gasPrice = await club48.getMinGasPrice();
327
- const signedTxs = [];
328
- const nextNonceMap = new Map();
329
- const getNextNonce = async (w) => {
330
- const key = w.address.toLowerCase();
331
- const cached = nextNonceMap.get(key);
332
- if (cached !== undefined) {
333
- const n = cached;
334
- nextNonceMap.set(key, cached + 1);
335
- return n;
336
- }
337
- const onchain = await w.getNonce();
338
- nextNonceMap.set(key, onchain + 1);
339
- return onchain;
340
- };
341
- // 可选 tipTx
342
- if (config.tipAmountWei && config.tipAmountWei > 0n) {
343
- const tipWallet = new Wallet(privateKeys[0], provider);
344
- const tipTx = await tipWallet.signTransaction({
345
- to: BUILDER_CONTROL_EOA,
346
- value: config.tipAmountWei,
347
- gasPrice,
348
- gasLimit: GAS_LIMITS.BRIBE,
349
- chainId: CHAINS.BSC.chainId,
350
- type: 0, // Legacy transaction
351
- nonce: await getNextNonce(tipWallet),
352
- });
353
- signedTxs.unshift(tipTx);
354
- }
355
- for (let i = 0; i < privateKeys.length; i++) {
356
- const sellerWallet = new Wallet(privateKeys[i], provider);
357
- const amountIn = ethers.parseUnits(sellAmounts[i], 18);
358
- const minAmountOut = 0n; // TODO: 调用 quoteExactInput
359
- const portal = new ethers.Contract(portalAddr, PORTAL_ABI, sellerWallet);
360
- const sellTxUnsigned = await portal.swapExactInputSell.populateTransaction({
361
- inputToken: tokenAddress,
362
- outputToken: ZERO_ADDRESS,
363
- inputAmount: amountIn,
364
- minOutputAmount: minAmountOut,
365
- permitData: '0x',
366
- });
367
- // 估算 gas 并添加 20% 安全余量
368
- const estimatedGas = await provider.estimateGas({
369
- ...sellTxUnsigned,
370
- from: sellerWallet.address,
371
- });
372
- const gasLimit = (estimatedGas * 120n) / 100n;
373
- const sellTxRequest = {
374
- ...sellTxUnsigned,
375
- from: sellerWallet.address,
376
- nonce: await getNextNonce(sellerWallet),
377
- gasLimit: gasLimit,
378
- gasPrice: gasPrice,
379
- chainId: CHAINS.BSC.chainId, // BSC
380
- type: 0, // Legacy transaction
381
- };
382
- const signedSellTx = await sellerWallet.signTransaction(sellTxRequest);
383
- signedTxs.push(signedSellTx);
384
- }
385
- const bundleUuid = await club48.sendBundle({
386
- txs: signedTxs,
387
- maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
388
- noMerge: config.noMerge,
389
- }, {
390
- spMode: params.config.spMode ?? 'timestampPersonalSign',
391
- spPrivateKey: params.config.spPrivateKey || privateKeys[0],
392
- spVMode: params.config.spVMode,
393
- });
394
- const status = await club48.waitForBundle(bundleUuid);
395
- return { bundleUuid, status, sellTxs: signedTxs };
396
- }
397
- export async function flapPrivateBuy(params) {
398
- const { chain, privateKey, tokenAddress, amountIn, config, spPrivateKey } = params;
399
- const provider = new JsonRpcProvider(config.rpcUrl);
400
- const wallet = new Wallet(privateKey, provider);
401
- const club48 = new Club48Client({ endpoint: config.club48Endpoint, explorerEndpoint: config.club48ExplorerEndpoint });
402
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
403
- const gasPrice = await club48.getMinGasPrice();
404
- const amountWei = ethers.parseEther(amountIn);
405
- const minAmountOut = 0n; // 不加滑点
406
- const portal = new ethers.Contract(portalAddr, PORTAL_ABI, wallet);
407
- const unsigned = await portal.swapExactInputBuy.populateTransaction({
408
- inputToken: ZERO_ADDRESS,
409
- outputToken: tokenAddress,
410
- inputAmount: 0n,
411
- minOutputAmount: minAmountOut,
412
- permitData: '0x',
413
- }, { value: amountWei });
414
- // 估算 gas 并添加 20% 安全余量
415
- const estimatedGas = await provider.estimateGas({
416
- ...unsigned,
417
- from: wallet.address,
418
- value: amountWei,
419
- });
420
- const gasLimit = (estimatedGas * 120n) / 100n;
421
- const req = {
422
- ...unsigned,
423
- from: wallet.address,
424
- nonce: await wallet.getNonce(),
425
- gasLimit: gasLimit,
426
- gasPrice,
427
- chainId: CHAINS.BSC.chainId,
428
- type: 0, // Legacy transaction
429
- };
430
- const signed = await wallet.signTransaction(req);
431
- if (spPrivateKey)
432
- return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
433
- return await club48.sendPrivateTransaction(signed);
434
- }
435
- export async function flapPrivateSell(params) {
436
- const { chain, privateKey, tokenAddress, amount, minEth, config, spPrivateKey } = params;
437
- const provider = new JsonRpcProvider(config.rpcUrl);
438
- const wallet = new Wallet(privateKey, provider);
439
- const club48 = new Club48Client({ endpoint: config.club48Endpoint, explorerEndpoint: config.club48ExplorerEndpoint });
440
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
441
- const gasPrice = await club48.getMinGasPrice();
442
- const amountWei = ethers.parseUnits(amount, 18);
443
- const minOut = minEth ?? 0n;
444
- const portal = new ethers.Contract(portalAddr, PORTAL_ABI, wallet);
445
- const unsigned = await portal.swapExactInputSell.populateTransaction({
446
- inputToken: tokenAddress,
447
- outputToken: ZERO_ADDRESS,
448
- inputAmount: amountWei,
449
- minOutputAmount: minOut,
450
- permitData: '0x',
451
- });
452
- // 估算 gas 并添加 20% 安全余量
453
- const estimatedGas = await provider.estimateGas({
454
- ...unsigned,
455
- from: wallet.address,
456
- });
457
- const gasLimit = (estimatedGas * 120n) / 100n;
458
- const req = {
459
- ...unsigned,
460
- from: wallet.address,
461
- nonce: await wallet.getNonce(),
462
- gasLimit: gasLimit,
463
- gasPrice,
464
- chainId: CHAINS.BSC.chainId,
465
- type: 0, // Legacy transaction
466
- };
467
- const signed = await wallet.signTransaction(req);
468
- if (spPrivateKey)
469
- return await club48.sendPrivateTransactionWith48SP(signed, spPrivateKey);
470
- return await club48.sendPrivateTransaction(signed);
471
- }
472
- export async function flapBatchPrivateBuy(params) {
473
- const { chain, privateKeys, amountsIn, tokenAddress, config, spPrivateKey } = params;
474
- if (privateKeys.length !== amountsIn.length)
475
- throw new Error('privateKeys and amountsIn length mismatch');
476
- const provider = new JsonRpcProvider(config.rpcUrl);
477
- const club48 = new Club48Client({ endpoint: config.club48Endpoint, explorerEndpoint: config.club48ExplorerEndpoint });
478
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
479
- const gasPrice = await club48.getMinGasPrice();
480
- const signedTxs = [];
481
- const nextNonceMap = new Map();
482
- const getNextNonce = async (w) => {
483
- const key = w.address.toLowerCase();
484
- const cached = nextNonceMap.get(key);
485
- if (cached !== undefined) {
486
- const n = cached;
487
- nextNonceMap.set(key, cached + 1);
488
- return n;
489
- }
490
- const onchain = await w.getNonce();
491
- nextNonceMap.set(key, onchain + 1);
492
- return onchain;
493
- };
494
- for (let i = 0; i < privateKeys.length; i++) {
495
- const w = new Wallet(privateKeys[i], provider);
496
- const amountWei = ethers.parseEther(amountsIn[i]);
497
- const portal = new ethers.Contract(portalAddr, PORTAL_ABI, w);
498
- const unsigned = await portal.swapExactInputBuy.populateTransaction({
499
- inputToken: ZERO_ADDRESS,
500
- outputToken: tokenAddress,
501
- inputAmount: 0n,
502
- minOutputAmount: 0n,
503
- permitData: '0x',
504
- }, { value: amountWei });
505
- // 估算 gas 并添加 20% 安全余量
506
- const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address, value: amountWei });
507
- const gasLimit = (estimatedGas * 120n) / 100n;
508
- const req = {
509
- ...unsigned,
510
- from: w.address,
511
- nonce: await getNextNonce(w),
512
- gasLimit,
513
- gasPrice,
514
- chainId: CHAINS.BSC.chainId,
515
- type: 0,
516
- };
517
- signedTxs.push(await w.signTransaction(req));
518
- }
519
- return await sendBatchPrivateTransactions(signedTxs, spPrivateKey, config.club48Endpoint || 'https://puissant-bsc.48.club');
520
- }
521
- export async function flapBatchPrivateSell(params) {
522
- const { chain, privateKeys, amounts, tokenAddress, config, minEthEach } = params;
523
- if (privateKeys.length !== amounts.length)
524
- throw new Error('privateKeys and amounts length mismatch');
525
- const provider = new JsonRpcProvider(config.rpcUrl);
526
- const club48 = new Club48Client({ endpoint: config.club48Endpoint, explorerEndpoint: config.club48ExplorerEndpoint });
527
- const portalAddr = FLAP_PORTAL_ADDRESSES[chain];
528
- const gasPrice = await club48.getMinGasPrice();
529
- const minOut = minEthEach ?? 0n;
530
- const signedTxs = [];
531
- const nextNonceMap = new Map();
532
- const getNextNonce = async (w) => {
533
- const key = w.address.toLowerCase();
534
- const cached = nextNonceMap.get(key);
535
- if (cached !== undefined) {
536
- const n = cached;
537
- nextNonceMap.set(key, cached + 1);
538
- return n;
539
- }
540
- const onchain = await w.getNonce();
541
- nextNonceMap.set(key, onchain + 1);
542
- return onchain;
543
- };
544
- for (let i = 0; i < privateKeys.length; i++) {
545
- const w = new Wallet(privateKeys[i], provider);
546
- const amountWei = ethers.parseUnits(amounts[i], 18);
547
- const portal = new ethers.Contract(portalAddr, PORTAL_ABI, w);
548
- const unsigned = await portal.swapExactInputSell.populateTransaction({
549
- inputToken: tokenAddress,
550
- outputToken: ZERO_ADDRESS,
551
- inputAmount: amountWei,
552
- minOutputAmount: minOut,
553
- permitData: '0x',
554
- });
555
- // 估算 gas 并添加 20% 安全余量
556
- const estimatedGas = await provider.estimateGas({ ...unsigned, from: w.address });
557
- const gasLimit = (estimatedGas * 120n) / 100n;
558
- const req = {
559
- ...unsigned,
560
- from: w.address,
561
- nonce: await getNextNonce(w),
562
- gasLimit,
563
- gasPrice,
564
- chainId: CHAINS.BSC.chainId,
565
- type: 0,
566
- };
567
- signedTxs.push(await w.signTransaction(req));
568
- }
569
- // 使用 bundle 通道提交(统一与捆绑买保持一致)
570
- const blockOffset = config.bundleBlockOffset ?? 100;
571
- const bundleUuid = await club48.sendBundle({
572
- txs: signedTxs,
573
- maxBlockNumber: (await provider.getBlockNumber()) + blockOffset,
574
- noMerge: config.noMerge,
575
- }, {
576
- // 若传入 sp 配置,则用于生成 48SP 签名提升打包优先级(与批量买一致)
577
- spMode: params.config.spMode ?? 'timestampPersonalSign',
578
- spPrivateKey: params.config.spPrivateKey || 'https://puissant-bsc.48.club',
579
- spVMode: params.config.spVMode,
580
- });
581
- try {
582
- const status = await club48.waitForBundle(bundleUuid);
583
- return { submitted: true, bundleUuid, status, sellTxs: signedTxs };
584
- }
585
- catch {
586
- // 超时或查询失败:为避免误报,返回已提交与原始交易,状态暂缺
587
- return { submitted: true, bundleUuid, sellTxs: signedTxs };
588
- }
589
- }
7
+ export * from './portal-bundle/index.js';