four-flap-meme-sdk 2.2.19 → 2.2.20

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 (493) hide show
  1. package/dist/__tests__/subpath-exports.test.d.ts +1 -0
  2. package/dist/__tests__/subpath-exports.test.js +64 -0
  3. package/dist/abis/common.d.ts +85 -0
  4. package/dist/abis/common.js +240 -0
  5. package/dist/abis/contracts/TaxToken.json +969 -0
  6. package/dist/abis/contracts/TokenManager.json +836 -0
  7. package/dist/abis/contracts/TokenManager2.json +136 -0
  8. package/dist/abis/contracts/TokenManagerHelper3.json +993 -0
  9. package/dist/abis/contracts/index.d.ts +5 -0
  10. package/dist/abis/contracts/index.js +5 -0
  11. package/dist/abis/flap/index.d.ts +5 -0
  12. package/dist/abis/flap/index.js +5 -0
  13. package/dist/abis/flap/portal-eip7702.d.ts +4 -0
  14. package/dist/abis/flap/portal-eip7702.js +39 -0
  15. package/dist/abis/flap/portal-events.d.ts +6 -0
  16. package/dist/abis/flap/portal-events.js +17 -0
  17. package/dist/abis/flap/portal-merkle.d.ts +4 -0
  18. package/dist/abis/flap/portal-merkle.js +25 -0
  19. package/dist/abis/flap/portal.d.ts +6 -0
  20. package/dist/abis/flap/portal.js +37 -0
  21. package/dist/abis/flap/vault.d.ts +171 -0
  22. package/dist/abis/flap/vault.js +91 -0
  23. package/dist/abis/index.d.ts +8 -0
  24. package/dist/abis/index.js +11 -0
  25. package/dist/bundle-core/__tests__/config-helpers.test.d.ts +1 -0
  26. package/dist/bundle-core/__tests__/config-helpers.test.js +28 -0
  27. package/dist/bundle-core/__tests__/facade-parity.test.d.ts +1 -0
  28. package/dist/bundle-core/__tests__/facade-parity.test.js +33 -0
  29. package/dist/bundle-core/__tests__/sign-context-helpers.test.d.ts +1 -0
  30. package/dist/bundle-core/__tests__/sign-context-helpers.test.js +60 -0
  31. package/dist/bundle-core/__tests__/sign-fixture.test.d.ts +1 -0
  32. package/dist/bundle-core/__tests__/sign-fixture.test.js +220 -0
  33. package/dist/bundle-core/__tests__/sign-fixtures.d.ts +10 -0
  34. package/dist/bundle-core/__tests__/sign-fixtures.js +16 -0
  35. package/dist/bundle-core/config-helpers.d.ts +37 -0
  36. package/dist/bundle-core/config-helpers.js +58 -0
  37. package/dist/bundle-core/errors.d.ts +50 -0
  38. package/dist/bundle-core/errors.js +38 -0
  39. package/dist/bundle-core/four-meme/approve-tokenmanager.d.ts +7 -0
  40. package/dist/bundle-core/four-meme/approve-tokenmanager.js +99 -0
  41. package/dist/bundle-core/four-meme/core-helpers.d.ts +8 -0
  42. package/dist/bundle-core/four-meme/core-helpers.js +41 -0
  43. package/dist/bundle-core/four-meme/core.d.ts +4 -0
  44. package/dist/bundle-core/four-meme/core.js +515 -0
  45. package/dist/bundle-core/four-meme/pancake-proxy.d.ts +28 -0
  46. package/dist/bundle-core/four-meme/pancake-proxy.js +679 -0
  47. package/dist/bundle-core/four-meme/private.d.ts +27 -0
  48. package/dist/bundle-core/four-meme/private.js +465 -0
  49. package/dist/bundle-core/four-meme/sign-context-helpers.d.ts +2 -0
  50. package/dist/bundle-core/four-meme/sign-context-helpers.js +2 -0
  51. package/dist/bundle-core/four-meme/swap-buy-first.d.ts +8 -0
  52. package/dist/bundle-core/four-meme/swap-buy-first.js +456 -0
  53. package/dist/bundle-core/four-meme/swap-hop-helpers.d.ts +6 -0
  54. package/dist/bundle-core/four-meme/swap-hop-helpers.js +63 -0
  55. package/dist/bundle-core/four-meme/swap-internal.d.ts +3 -0
  56. package/dist/bundle-core/four-meme/swap-internal.js +18 -0
  57. package/dist/bundle-core/four-meme/swap-sign-helpers.d.ts +28 -0
  58. package/dist/bundle-core/four-meme/swap-sign-helpers.js +105 -0
  59. package/dist/bundle-core/four-meme/swap.d.ts +17 -0
  60. package/dist/bundle-core/four-meme/swap.js +505 -0
  61. package/dist/bundle-core/four-meme/types/buy-first.d.ts +50 -0
  62. package/dist/bundle-core/four-meme/types/buy-first.js +1 -0
  63. package/dist/bundle-core/four-meme/types/core-flow.d.ts +63 -0
  64. package/dist/bundle-core/four-meme/types/core-flow.js +1 -0
  65. package/dist/bundle-core/four-meme/types/index.d.ts +600 -0
  66. package/dist/bundle-core/four-meme/types/index.js +1 -0
  67. package/dist/bundle-core/four-meme/types/swap-internal.d.ts +19 -0
  68. package/dist/bundle-core/four-meme/types/swap-internal.js +1 -0
  69. package/dist/bundle-core/four-meme/types.d.ts +1 -0
  70. package/dist/bundle-core/four-meme/types.js +1 -0
  71. package/dist/bundle-core/four-meme/utils-disperse.d.ts +7 -0
  72. package/dist/bundle-core/four-meme/utils-disperse.js +396 -0
  73. package/dist/bundle-core/four-meme/utils-pairwise.d.ts +8 -0
  74. package/dist/bundle-core/four-meme/utils-pairwise.js +328 -0
  75. package/dist/bundle-core/four-meme/utils-sweep.d.ts +8 -0
  76. package/dist/bundle-core/four-meme/utils-sweep.js +744 -0
  77. package/dist/bundle-core/index.d.ts +8 -0
  78. package/dist/bundle-core/index.js +8 -0
  79. package/dist/bundle-core/internal.d.ts +16 -0
  80. package/dist/bundle-core/internal.js +160 -0
  81. package/dist/bundle-core/sign-context-helpers.d.ts +26 -0
  82. package/dist/bundle-core/sign-context-helpers.js +63 -0
  83. package/dist/bundle-core/submit.d.ts +293 -0
  84. package/dist/bundle-core/submit.js +731 -0
  85. package/dist/bundle-core/types/index.d.ts +8 -0
  86. package/dist/bundle-core/types/index.js +1 -0
  87. package/dist/bundle-core/types.d.ts +1 -0
  88. package/dist/bundle-core/types.js +1 -0
  89. package/dist/chains/bsc/four/approve-tokenmanager.d.ts +1 -26
  90. package/dist/chains/bsc/four/approve-tokenmanager.js +1 -113
  91. package/dist/chains/bsc/four/config.d.ts +5 -67
  92. package/dist/chains/bsc/four/config.js +2 -114
  93. package/dist/chains/bsc/four/core.d.ts +1 -4
  94. package/dist/chains/bsc/four/core.js +1 -592
  95. package/dist/chains/bsc/four/index.d.ts +6 -6
  96. package/dist/chains/bsc/four/index.js +6 -6
  97. package/dist/chains/bsc/four/internal.d.ts +2 -46
  98. package/dist/chains/bsc/four/internal.js +2 -239
  99. package/dist/chains/bsc/four/pancake-proxy.d.ts +1 -28
  100. package/dist/chains/bsc/four/pancake-proxy.js +1 -687
  101. package/dist/chains/bsc/four/private.d.ts +1 -27
  102. package/dist/chains/bsc/four/private.js +1 -477
  103. package/dist/chains/bsc/four/submit.d.ts +2 -315
  104. package/dist/chains/bsc/four/submit.js +2 -752
  105. package/dist/chains/bsc/four/swap-buy-first.d.ts +2 -55
  106. package/dist/chains/bsc/four/swap-buy-first.js +2 -507
  107. package/dist/chains/bsc/four/swap-internal.d.ts +1 -3
  108. package/dist/chains/bsc/four/swap-internal.js +1 -18
  109. package/dist/chains/bsc/four/swap.d.ts +2 -144
  110. package/dist/chains/bsc/four/swap.js +2 -766
  111. package/dist/chains/bsc/four/types.d.ts +1 -476
  112. package/dist/chains/bsc/four/utils-disperse.d.ts +1 -0
  113. package/dist/chains/bsc/four/utils-disperse.js +1 -0
  114. package/dist/chains/bsc/four/utils-pairwise.d.ts +1 -0
  115. package/dist/chains/bsc/four/utils-pairwise.js +1 -0
  116. package/dist/chains/bsc/four/utils-sweep.d.ts +1 -0
  117. package/dist/chains/bsc/four/utils-sweep.js +1 -0
  118. package/dist/chains/bsc/four/utils.d.ts +5 -18
  119. package/dist/chains/bsc/four/utils.js +5 -1552
  120. package/dist/chains/bsc/iro.d.ts +5 -0
  121. package/dist/chains/bsc/iro.js +4 -0
  122. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.d.ts +155 -0
  123. package/dist/chains/bsc/pancake/bundle-buy-first-helpers.js +80 -0
  124. package/dist/chains/bsc/pancake/bundle-buy-first.d.ts +1 -91
  125. package/dist/chains/bsc/pancake/bundle-buy-first.js +98 -213
  126. package/dist/chains/bsc/pancake/bundle-swap-helpers.d.ts +241 -0
  127. package/dist/chains/bsc/pancake/bundle-swap-helpers.js +565 -0
  128. package/dist/chains/bsc/pancake/bundle-swap.d.ts +1 -79
  129. package/dist/chains/bsc/pancake/bundle-swap.js +114 -726
  130. package/dist/chains/bsc/pancake/index.d.ts +4 -2
  131. package/dist/chains/bsc/pancake/index.js +1 -3
  132. package/dist/chains/bsc/platforms/iro/factory.d.ts +2 -2
  133. package/dist/chains/bsc/platforms/iro/factory.js +3 -1
  134. package/dist/chains/bsc/platforms/iro/index.d.ts +5 -5
  135. package/dist/chains/bsc/platforms/iro/index.js +3 -3
  136. package/dist/chains/bsc/platforms/iro/pool.js +31 -10
  137. package/dist/chains/bsc/platforms/iro/token.js +4 -1
  138. package/dist/chains/eni/batch-router/bundle-approve.js +4 -3
  139. package/dist/chains/eni/batch-router/transfer.js +55 -25
  140. package/dist/chains/eni/batch-router/utils.js +32 -6
  141. package/dist/chains/eni/bundler/sign.js +5 -6
  142. package/dist/chains/eni/bundler/submit.js +1 -4
  143. package/dist/chains/eni/constants.js +1 -1
  144. package/dist/chains/eni/flat-aliases.d.ts +10 -0
  145. package/dist/chains/eni/flat-aliases.js +8 -0
  146. package/dist/chains/eni/index.d.ts +2 -1
  147. package/dist/chains/eni/index.js +1 -0
  148. package/dist/chains/eni/platforms/daoaas/create.js +2 -2
  149. package/dist/chains/eni/platforms/daoaas/index.d.ts +3 -3
  150. package/dist/chains/eni/platforms/daoaas/index.js +3 -3
  151. package/dist/chains/eni/platforms/daoaas/meta.js +9 -6
  152. package/dist/chains/eni/platforms/daoaas/portal-direct.js +28 -44
  153. package/dist/chains/eni/platforms/daoaas/portal.js +10 -6
  154. package/dist/chains/eni/platforms/dswap/liquidity.js +58 -26
  155. package/dist/chains/eni/platforms/fair-launch/index.d.ts +2 -2
  156. package/dist/chains/eni/platforms/fair-launch/index.js +1 -1
  157. package/dist/chains/eni/platforms/fair-launch/launcher.js +87 -46
  158. package/dist/chains/eni/platforms/fair-launch/pool.js +4 -1
  159. package/dist/chains/eni/platforms/fair-launch/presets.js +2 -2
  160. package/dist/chains/eni/platforms/iro/factory.d.ts +2 -2
  161. package/dist/chains/eni/platforms/iro/factory.js +3 -1
  162. package/dist/chains/eni/platforms/iro/index.d.ts +6 -6
  163. package/dist/chains/eni/platforms/iro/index.js +4 -4
  164. package/dist/chains/eni/platforms/iro/pool.js +90 -26
  165. package/dist/chains/eni/platforms/iro/token.js +107 -31
  166. package/dist/chains/eni/platforms/iro/whitelist.js +6 -18
  167. package/dist/chains/eni/submit.d.ts +43 -0
  168. package/dist/chains/eni/submit.js +287 -0
  169. package/dist/chains/index.d.ts +13 -0
  170. package/dist/chains/index.js +13 -0
  171. package/dist/chains/xlayer/constants.d.ts +5 -0
  172. package/dist/chains/xlayer/eip7702/bundle-approve.d.ts +2 -26
  173. package/dist/chains/xlayer/eip7702/bundle-approve.js +11 -21
  174. package/dist/chains/xlayer/eip7702/bundle-buy.d.ts +2 -6
  175. package/dist/chains/xlayer/eip7702/bundle-buy.js +13 -51
  176. package/dist/chains/xlayer/eip7702/bundle-create.js +104 -74
  177. package/dist/chains/xlayer/eip7702/bundle-sell.d.ts +2 -6
  178. package/dist/chains/xlayer/eip7702/bundle-sell.js +29 -111
  179. package/dist/chains/xlayer/eip7702/bundle-swap.d.ts +3 -65
  180. package/dist/chains/xlayer/eip7702/bundle-swap.js +51 -245
  181. package/dist/chains/xlayer/eip7702/constants.d.ts +11 -26
  182. package/dist/chains/xlayer/eip7702/constants.js +15 -68
  183. package/dist/chains/xlayer/eip7702/flat-aliases.d.ts +13 -0
  184. package/dist/chains/xlayer/eip7702/flat-aliases.js +10 -0
  185. package/dist/chains/xlayer/eip7702/index.d.ts +28 -46
  186. package/dist/chains/xlayer/eip7702/index.js +28 -81
  187. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.d.ts +79 -0
  188. package/dist/chains/xlayer/eip7702/multi-hop-transfer-helpers.js +1 -0
  189. package/dist/chains/xlayer/eip7702/multi-hop-transfer.d.ts +2 -203
  190. package/dist/chains/xlayer/eip7702/multi-hop-transfer.js +63 -307
  191. package/dist/chains/xlayer/eip7702/transfer-context-helpers.d.ts +26 -0
  192. package/dist/chains/xlayer/eip7702/transfer-context-helpers.js +58 -0
  193. package/dist/chains/xlayer/eip7702/types.d.ts +88 -0
  194. package/dist/chains/xlayer/eip7702/utils.d.ts +0 -3
  195. package/dist/chains/xlayer/eip7702/utils.js +23 -28
  196. package/dist/chains/xlayer/eip7702/volume-helpers.d.ts +148 -0
  197. package/dist/chains/xlayer/eip7702/volume-helpers.js +48 -0
  198. package/dist/chains/xlayer/eip7702/volume.d.ts +6 -184
  199. package/dist/chains/xlayer/eip7702/volume.js +89 -164
  200. package/dist/chains/xlayer/eoa/constants.d.ts +1 -1
  201. package/dist/chains/xlayer/eoa/constants.js +2 -16
  202. package/dist/chains/xlayer/eoa/dex-helpers.d.ts +1 -1
  203. package/dist/chains/xlayer/eoa/dex-helpers.js +7 -37
  204. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.d.ts +126 -0
  205. package/dist/chains/xlayer/eoa/eoa-bundle-swap-helpers.js +228 -0
  206. package/dist/chains/xlayer/eoa/eoa-bundle-swap.d.ts +1 -95
  207. package/dist/chains/xlayer/eoa/eoa-bundle-swap.js +66 -299
  208. package/dist/chains/xlayer/eoa/eoa-wash-volume.d.ts +1 -1
  209. package/dist/chains/xlayer/eoa/eoa-wash-volume.js +18 -23
  210. package/dist/chains/xlayer/eoa/index.d.ts +10 -6
  211. package/dist/chains/xlayer/eoa/index.js +8 -23
  212. package/dist/chains/xlayer/eoa/portal-ops.js +7 -2
  213. package/dist/chains/xlayer/eoa/router-manager.js +5 -4
  214. package/dist/chains/xlayer/eoa/types.d.ts +2 -2
  215. package/dist/chains/xlayer/eoa/types.js +1 -3
  216. package/dist/chains/xlayer/index.d.ts +3 -2
  217. package/dist/chains/xlayer/index.js +4 -7
  218. package/dist/contracts/helper3.d.ts +20 -5
  219. package/dist/contracts/helper3.js +56 -20
  220. package/dist/contracts/tm-bundle-helpers.d.ts +88 -0
  221. package/dist/contracts/tm-bundle-helpers.js +73 -0
  222. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.d.ts +1 -26
  223. package/dist/contracts/tm-bundle-merkle/approve-tokenmanager.js +1 -113
  224. package/dist/contracts/tm-bundle-merkle/config.d.ts +5 -67
  225. package/dist/contracts/tm-bundle-merkle/config.js +2 -114
  226. package/dist/contracts/tm-bundle-merkle/core.d.ts +1 -4
  227. package/dist/contracts/tm-bundle-merkle/core.js +1 -591
  228. package/dist/contracts/tm-bundle-merkle/index.d.ts +5 -5
  229. package/dist/contracts/tm-bundle-merkle/index.js +5 -5
  230. package/dist/contracts/tm-bundle-merkle/internal.d.ts +2 -46
  231. package/dist/contracts/tm-bundle-merkle/internal.js +2 -238
  232. package/dist/contracts/tm-bundle-merkle/pancake-proxy.d.ts +1 -28
  233. package/dist/contracts/tm-bundle-merkle/pancake-proxy.js +1 -686
  234. package/dist/contracts/tm-bundle-merkle/private.d.ts +1 -27
  235. package/dist/contracts/tm-bundle-merkle/private.js +1 -476
  236. package/dist/contracts/tm-bundle-merkle/submit.d.ts +3 -314
  237. package/dist/contracts/tm-bundle-merkle/submit.js +3 -928
  238. package/dist/contracts/tm-bundle-merkle/swap-buy-first.d.ts +2 -55
  239. package/dist/contracts/tm-bundle-merkle/swap-buy-first.js +2 -506
  240. package/dist/contracts/tm-bundle-merkle/swap-internal.d.ts +1 -3
  241. package/dist/contracts/tm-bundle-merkle/swap-internal.js +1 -18
  242. package/dist/contracts/tm-bundle-merkle/swap.d.ts +2 -144
  243. package/dist/contracts/tm-bundle-merkle/swap.js +2 -764
  244. package/dist/contracts/tm-bundle-merkle/types.d.ts +1 -476
  245. package/dist/contracts/tm-bundle-merkle/utils-disperse.d.ts +1 -0
  246. package/dist/contracts/tm-bundle-merkle/utils-disperse.js +1 -0
  247. package/dist/contracts/tm-bundle-merkle/utils-pairwise.d.ts +1 -0
  248. package/dist/contracts/tm-bundle-merkle/utils-pairwise.js +1 -0
  249. package/dist/contracts/tm-bundle-merkle/utils-sweep.d.ts +1 -0
  250. package/dist/contracts/tm-bundle-merkle/utils-sweep.js +1 -0
  251. package/dist/contracts/tm-bundle-merkle/utils.d.ts +6 -18
  252. package/dist/contracts/tm-bundle-merkle/utils.js +6 -1501
  253. package/dist/contracts/tm-bundle.d.ts +3 -51
  254. package/dist/contracts/tm-bundle.js +120 -187
  255. package/dist/contracts/tm.d.ts +10 -8
  256. package/dist/contracts/tm.js +39 -35
  257. package/dist/contracts/tm1.js +9 -4
  258. package/dist/contracts/tm2.js +10 -5
  259. package/dist/dex/direct-router-helpers.d.ts +269 -0
  260. package/dist/dex/direct-router-helpers.js +536 -0
  261. package/dist/dex/direct-router.d.ts +3 -125
  262. package/dist/dex/direct-router.js +244 -672
  263. package/dist/dex/types.d.ts +81 -0
  264. package/dist/dex/types.js +1 -0
  265. package/dist/exports/root-bundle-and-tooling.d.ts +27 -0
  266. package/dist/exports/root-bundle-and-tooling.js +30 -0
  267. package/dist/exports/root-eni-and-bsc-iro.d.ts +26 -0
  268. package/dist/exports/root-eni-and-bsc-iro.js +66 -0
  269. package/dist/exports/root-foundations.d.ts +35 -0
  270. package/dist/exports/root-foundations.js +70 -0
  271. package/dist/exports/root-swap-dex-and-xlayer.d.ts +30 -0
  272. package/dist/exports/root-swap-dex-and-xlayer.js +78 -0
  273. package/dist/flap/index.d.ts +11 -0
  274. package/dist/flap/index.js +9 -0
  275. package/dist/flows/create.d.ts +2 -1
  276. package/dist/flows/create.js +6 -6
  277. package/dist/flows/index.d.ts +9 -0
  278. package/dist/flows/index.js +9 -0
  279. package/dist/index.d.ts +20 -88
  280. package/dist/index.js +20 -218
  281. package/dist/merkle/index.d.ts +12 -0
  282. package/dist/merkle/index.js +11 -0
  283. package/dist/shared/abis/common.d.ts +2 -83
  284. package/dist/shared/abis/common.js +2 -254
  285. package/dist/shared/abis/index.d.ts +5 -6
  286. package/dist/shared/abis/index.js +5 -7
  287. package/dist/shared/clients/blockrazor.d.ts +4 -8
  288. package/dist/shared/clients/blockrazor.js +43 -35
  289. package/dist/shared/clients/club48.d.ts +2 -2
  290. package/dist/shared/clients/club48.js +36 -30
  291. package/dist/shared/clients/emitservice.js +2 -0
  292. package/dist/shared/clients/four.d.ts +21 -6
  293. package/dist/shared/clients/four.js +29 -24
  294. package/dist/shared/clients/index.d.ts +8 -0
  295. package/dist/shared/clients/index.js +8 -0
  296. package/dist/shared/clients/merkle.d.ts +4 -3
  297. package/dist/shared/clients/merkle.js +30 -47
  298. package/dist/shared/constants/addresses.d.ts +27 -1
  299. package/dist/shared/constants/addresses.js +39 -2
  300. package/dist/shared/constants/chains.d.ts +1 -1
  301. package/dist/shared/constants/chains.js +1 -1
  302. package/dist/shared/constants/gas.d.ts +1 -1
  303. package/dist/shared/constants/gas.js +2 -6
  304. package/dist/shared/constants/index.d.ts +4 -1
  305. package/dist/shared/constants/index.js +2 -1
  306. package/dist/shared/constants/quote.d.ts +30 -0
  307. package/dist/shared/constants/quote.js +37 -0
  308. package/dist/shared/flap/abi.js +1 -1
  309. package/dist/shared/flap/constants.d.ts +1 -2
  310. package/dist/shared/flap/constants.js +3 -4
  311. package/dist/shared/flap/curve.js +3 -0
  312. package/dist/shared/flap/errors.d.ts +1 -4
  313. package/dist/shared/flap/errors.js +20 -1
  314. package/dist/shared/flap/index.d.ts +4 -5
  315. package/dist/shared/flap/index.js +4 -5
  316. package/dist/shared/flap/launch-v6.d.ts +0 -5
  317. package/dist/shared/flap/launch-v6.js +2 -16
  318. package/dist/shared/flap/meta.d.ts +22 -18
  319. package/dist/shared/flap/meta.js +32 -24
  320. package/dist/shared/flap/permit.js +10 -3
  321. package/dist/shared/flap/pinata.d.ts +22 -6
  322. package/dist/shared/flap/pinata.js +21 -26
  323. package/dist/shared/flap/portal-bundle-merkle/config.d.ts +3 -72
  324. package/dist/shared/flap/portal-bundle-merkle/config.js +4 -124
  325. package/dist/shared/flap/portal-bundle-merkle/core-helpers.d.ts +32 -0
  326. package/dist/shared/flap/portal-bundle-merkle/core-helpers.js +83 -0
  327. package/dist/shared/flap/portal-bundle-merkle/core.d.ts +0 -4
  328. package/dist/shared/flap/portal-bundle-merkle/core.js +168 -175
  329. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.d.ts +17 -4
  330. package/dist/shared/flap/portal-bundle-merkle/create-to-dex.js +96 -117
  331. package/dist/shared/flap/portal-bundle-merkle/curve-to-dex.js +104 -122
  332. package/dist/shared/flap/portal-bundle-merkle/index.d.ts +11 -7
  333. package/dist/shared/flap/portal-bundle-merkle/index.js +4 -7
  334. package/dist/shared/flap/portal-bundle-merkle/pancake-proxy.js +71 -68
  335. package/dist/shared/flap/portal-bundle-merkle/private.js +61 -114
  336. package/dist/shared/flap/portal-bundle-merkle/swap-batch.d.ts +8 -0
  337. package/dist/shared/flap/portal-bundle-merkle/swap-batch.js +227 -0
  338. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.d.ts +125 -0
  339. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first-helpers.js +113 -0
  340. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.d.ts +1 -64
  341. package/dist/shared/flap/portal-bundle-merkle/swap-buy-first.js +69 -288
  342. package/dist/shared/flap/portal-bundle-merkle/swap-cross.d.ts +9 -0
  343. package/dist/shared/flap/portal-bundle-merkle/swap-cross.js +139 -0
  344. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.d.ts +149 -0
  345. package/dist/shared/flap/portal-bundle-merkle/swap-helpers.js +259 -0
  346. package/dist/shared/flap/portal-bundle-merkle/swap-planning.d.ts +70 -0
  347. package/dist/shared/flap/portal-bundle-merkle/swap-planning.js +182 -0
  348. package/dist/shared/flap/portal-bundle-merkle/swap-quick-batch.d.ts +16 -0
  349. package/dist/shared/flap/portal-bundle-merkle/swap-quick-batch.js +327 -0
  350. package/dist/shared/flap/portal-bundle-merkle/swap-single.d.ts +2 -0
  351. package/dist/shared/flap/portal-bundle-merkle/swap-single.js +184 -0
  352. package/dist/shared/flap/portal-bundle-merkle/swap-types.d.ts +101 -0
  353. package/dist/shared/flap/portal-bundle-merkle/swap-types.js +1 -0
  354. package/dist/shared/flap/portal-bundle-merkle/swap.d.ts +6 -199
  355. package/dist/shared/flap/portal-bundle-merkle/swap.js +5 -1357
  356. package/dist/shared/flap/portal-bundle-merkle/types.d.ts +88 -12
  357. package/dist/shared/flap/portal-bundle-merkle/utils.d.ts +1 -80
  358. package/dist/shared/flap/portal-bundle-merkle/utils.js +145 -265
  359. package/dist/shared/flap/portal-bundle.js +83 -78
  360. package/dist/shared/flap/portal-create-token.d.ts +39 -21
  361. package/dist/shared/flap/portal-create-token.js +121 -124
  362. package/dist/shared/flap/portal.d.ts +1 -2
  363. package/dist/shared/flap/portal.js +36 -28
  364. package/dist/shared/flap/vanity.d.ts +6 -6
  365. package/dist/shared/flap/vanity.js +15 -21
  366. package/dist/shared/flap/vault.d.ts +25 -93
  367. package/dist/shared/flap/vault.js +77 -127
  368. package/dist/shared/foundation/amount/split-by-weight.d.ts +5 -0
  369. package/dist/shared/foundation/amount/split-by-weight.js +35 -0
  370. package/dist/shared/foundation/dex/v3-path.d.ts +6 -0
  371. package/dist/shared/foundation/dex/v3-path.js +35 -0
  372. package/dist/shared/foundation/erc20/decimals.d.ts +7 -0
  373. package/dist/shared/foundation/erc20/decimals.js +24 -0
  374. package/dist/shared/foundation/gas/bundle-gas.d.ts +49 -0
  375. package/dist/shared/foundation/gas/bundle-gas.js +93 -0
  376. package/dist/shared/foundation/gas/profit-hop.d.ts +20 -0
  377. package/dist/shared/foundation/gas/profit-hop.js +72 -0
  378. package/dist/shared/foundation/index.d.ts +15 -0
  379. package/dist/shared/foundation/index.js +14 -0
  380. package/dist/shared/foundation/nonce/nonce-manager.d.ts +19 -0
  381. package/dist/shared/foundation/nonce/nonce-manager.js +217 -0
  382. package/dist/shared/foundation/normalize-unknown.d.ts +9 -0
  383. package/dist/shared/foundation/normalize-unknown.js +29 -0
  384. package/dist/shared/foundation/sdk-logger.d.ts +13 -0
  385. package/dist/shared/foundation/sdk-logger.js +12 -0
  386. package/dist/shared/foundation/tx/build-request.d.ts +17 -0
  387. package/dist/shared/foundation/tx/build-request.js +25 -0
  388. package/dist/shared/foundation/tx/sign-batch.d.ts +5 -0
  389. package/dist/shared/foundation/tx/sign-batch.js +26 -0
  390. package/dist/shared/foundation/tx/wallet-sign-patch.d.ts +1 -0
  391. package/dist/shared/foundation/tx/wallet-sign-patch.js +18 -0
  392. package/dist/shared/foundation/types/airdrop-sweep.d.ts +79 -0
  393. package/dist/shared/foundation/types/airdrop-sweep.js +1 -0
  394. package/dist/shared/foundation/types/erc20.d.ts +65 -0
  395. package/dist/shared/foundation/types/erc20.js +1 -0
  396. package/dist/shared/foundation/types/holders-maker.d.ts +64 -0
  397. package/dist/shared/foundation/types/holders-maker.js +1 -0
  398. package/dist/shared/foundation/types/index.d.ts +7 -0
  399. package/dist/shared/foundation/types/index.js +1 -0
  400. package/dist/shared/foundation/types/lp-inspect.d.ts +102 -0
  401. package/dist/shared/foundation/types/lp-inspect.js +1 -0
  402. package/dist/shared/foundation/types/multicall.d.ts +5 -0
  403. package/dist/shared/foundation/types/multicall.js +1 -0
  404. package/dist/shared/foundation/types/private-sale.d.ts +35 -0
  405. package/dist/shared/foundation/types/private-sale.js +1 -0
  406. package/dist/shared/foundation/types/quote-helpers.d.ts +17 -0
  407. package/dist/shared/foundation/types/quote-helpers.js +1 -0
  408. package/dist/shared/foundation/wallet/generate.d.ts +5 -0
  409. package/dist/shared/foundation/wallet/generate.js +8 -0
  410. package/dist/shared/four/tax-token.d.ts +1 -1
  411. package/dist/shared/four/tax-token.js +31 -10
  412. package/dist/shared/index.d.ts +6 -0
  413. package/dist/shared/index.js +4 -0
  414. package/dist/types/errors.d.ts +27 -0
  415. package/dist/types/errors.js +34 -0
  416. package/dist/utils/airdrop-sweep.d.ts +4 -76
  417. package/dist/utils/airdrop-sweep.js +42 -55
  418. package/dist/utils/bundle-helpers.d.ts +9 -243
  419. package/dist/utils/bundle-helpers.js +10 -584
  420. package/dist/utils/constants.d.ts +5 -61
  421. package/dist/utils/constants.js +5 -80
  422. package/dist/utils/contract-factory.d.ts +2 -4
  423. package/dist/utils/contract-factory.js +25 -18
  424. package/dist/utils/erc20.d.ts +7 -89
  425. package/dist/utils/erc20.js +98 -129
  426. package/dist/utils/errors.d.ts +12 -1
  427. package/dist/utils/errors.js +60 -1
  428. package/dist/utils/holders-maker/addresses.d.ts +12 -0
  429. package/dist/utils/holders-maker/addresses.js +15 -0
  430. package/dist/utils/holders-maker/buy-tx.d.ts +44 -0
  431. package/dist/utils/holders-maker/buy-tx.js +278 -0
  432. package/dist/utils/holders-maker/constants.d.ts +6 -0
  433. package/dist/utils/holders-maker/constants.js +7 -0
  434. package/dist/utils/holders-maker/disperse.d.ts +18 -0
  435. package/dist/utils/holders-maker/disperse.js +90 -0
  436. package/dist/utils/holders-maker/routing.d.ts +4 -0
  437. package/dist/utils/holders-maker/routing.js +45 -0
  438. package/dist/utils/holders-maker/transfer-tx.d.ts +4 -0
  439. package/dist/utils/holders-maker/transfer-tx.js +67 -0
  440. package/dist/utils/holders-maker-helpers.d.ts +9 -0
  441. package/dist/utils/holders-maker-helpers.js +9 -0
  442. package/dist/utils/holders-maker.d.ts +2 -138
  443. package/dist/utils/holders-maker.js +50 -671
  444. package/dist/utils/hop-chains.d.ts +35 -0
  445. package/dist/utils/hop-chains.js +215 -0
  446. package/dist/utils/lp-inspect-helpers.d.ts +9 -0
  447. package/dist/utils/lp-inspect-helpers.js +109 -0
  448. package/dist/utils/lp-inspect.d.ts +2 -112
  449. package/dist/utils/lp-inspect.js +78 -293
  450. package/dist/utils/mpcExclusive.d.ts +2 -5
  451. package/dist/utils/mpcExclusive.js +4 -3
  452. package/dist/utils/pcs-infinity-cl.js +18 -54
  453. package/dist/utils/private-sale.d.ts +2 -58
  454. package/dist/utils/private-sale.js +4 -15
  455. package/dist/utils/provider-factory.d.ts +4 -0
  456. package/dist/utils/provider-factory.js +10 -0
  457. package/dist/utils/quote-helpers.d.ts +4 -45
  458. package/dist/utils/quote-helpers.js +17 -74
  459. package/dist/utils/stealth-transfer.d.ts +2 -28
  460. package/dist/utils/stealth-transfer.js +39 -19
  461. package/dist/utils/swap-helpers.d.ts +2 -15
  462. package/dist/utils/swap-helpers.js +6 -11
  463. package/dist/utils/types/airdrop-sweep.d.ts +1 -0
  464. package/dist/utils/types/airdrop-sweep.js +1 -0
  465. package/dist/utils/types/contract-factory.d.ts +1 -0
  466. package/dist/utils/types/contract-factory.js +1 -0
  467. package/dist/utils/types/erc20.d.ts +1 -0
  468. package/dist/utils/types/erc20.js +1 -0
  469. package/dist/utils/types/errors.d.ts +1 -0
  470. package/dist/utils/types/errors.js +1 -0
  471. package/dist/utils/types/holders-maker.d.ts +1 -0
  472. package/dist/utils/types/holders-maker.js +1 -0
  473. package/dist/utils/types/hop-chains.d.ts +8 -0
  474. package/dist/utils/types/hop-chains.js +1 -0
  475. package/dist/utils/types/index.d.ts +13 -0
  476. package/dist/utils/types/index.js +1 -0
  477. package/dist/utils/types/lp-inspect.d.ts +1 -0
  478. package/dist/utils/types/lp-inspect.js +1 -0
  479. package/dist/utils/types/mpc-exclusive.d.ts +5 -0
  480. package/dist/utils/types/mpc-exclusive.js +1 -0
  481. package/dist/utils/types/private-sale.d.ts +1 -0
  482. package/dist/utils/types/private-sale.js +1 -0
  483. package/dist/utils/types/quote-helpers.d.ts +1 -0
  484. package/dist/utils/types/quote-helpers.js +1 -0
  485. package/dist/utils/types/stealth-transfer.d.ts +44 -0
  486. package/dist/utils/types/stealth-transfer.js +1 -0
  487. package/dist/utils/types/wallet.d.ts +25 -0
  488. package/dist/utils/types/wallet.js +1 -0
  489. package/dist/utils/wallet.d.ts +4 -25
  490. package/dist/utils/wallet.js +27 -22
  491. package/dist/vanity/index.d.ts +5 -0
  492. package/dist/vanity/index.js +5 -0
  493. package/package.json +100 -2
@@ -0,0 +1,139 @@
1
+ /**
2
+ * swap-cross - 交叉换手(多卖多买,循环执行)
3
+ */
4
+ import { Wallet } from 'ethers';
5
+ import { NonceManager } from '../../../utils/bundle-helpers.js';
6
+ import { ZERO_ADDRESS } from '../../../shared/constants/index.js';
7
+ import { getBribeAmount } from './config.js';
8
+ import { createChainContext } from './swap-planning.js';
9
+ import { flapQuickBatchSwapMerkle } from './swap-quick-batch.js';
10
+ /**
11
+ * Flap 交叉换手(多卖多买,循环执行)
12
+ * - 每个卖方单独卖出,买入金额由卖出所得等分分配给当轮买方
13
+ * - 利润刮取、转账多跳逻辑继承 flapQuickBatchSwapMerkle
14
+ * - 结果按顺序拼接 signedTransactions(可交由前端/后端顺序广播)
15
+ * - ✅ 正确处理 nonce:同一钱包在多轮中使用时 nonce 自动递增
16
+ */
17
+ export async function flapCrossSwapMerkle(params) {
18
+ const { chain, sellerPrivateKeys, sellAmounts, buyerPrivateKeys, tokenAddress, config, quoteToken, quoteTokenDecimals = 18, buyersPerSell, disperseHopCount = 0, } = params;
19
+ if (sellerPrivateKeys.length === 0) {
20
+ throw new Error('至少需要一个卖方');
21
+ }
22
+ if (sellerPrivateKeys.length !== sellAmounts.length) {
23
+ throw new Error(`sellAmounts 长度 (${sellAmounts.length}) 必须与卖方数量 (${sellerPrivateKeys.length}) 一致`);
24
+ }
25
+ if (buyerPrivateKeys.length === 0) {
26
+ throw new Error('至少需要一个买方');
27
+ }
28
+ // ✅ 创建 Provider 和 NonceManager
29
+ const chainContext = createChainContext(chain, config);
30
+ const nonceManager = new NonceManager(chainContext.provider);
31
+ // ✅ 预先获取所有钱包的初始 nonce
32
+ const allSellerWallets = sellerPrivateKeys.map((pk) => new Wallet(pk, chainContext.provider));
33
+ const allBuyerWallets = buyerPrivateKeys.map((pk) => new Wallet(pk, chainContext.provider));
34
+ // 使用 Map 去重(同一私钥可能出现多次)
35
+ const addressToNonce = new Map();
36
+ // 获取所有卖方 nonce
37
+ for (const wallet of allSellerWallets) {
38
+ if (!addressToNonce.has(wallet.address)) {
39
+ const nonce = await nonceManager.getNextNonce(wallet);
40
+ addressToNonce.set(wallet.address, nonce);
41
+ }
42
+ }
43
+ // 获取所有买方 nonce
44
+ for (const wallet of allBuyerWallets) {
45
+ if (!addressToNonce.has(wallet.address)) {
46
+ const nonce = await nonceManager.getNextNonce(wallet);
47
+ addressToNonce.set(wallet.address, nonce);
48
+ }
49
+ }
50
+ const allSigned = [];
51
+ const allDisperse = [];
52
+ const allProfit = [];
53
+ const rounds = [];
54
+ // 轮流分配买方:每轮取 buyersPerSell 个(默认所有买方),不足则从头继续
55
+ let buyerCursor = 0;
56
+ const buyerBatchSize = Math.max(1, buyersPerSell ?? buyerPrivateKeys.length);
57
+ for (let i = 0; i < sellerPrivateKeys.length; i++) {
58
+ const sellerPk = sellerPrivateKeys[i];
59
+ const sellAmount = sellAmounts[i];
60
+ const sellerWallet = allSellerWallets[i];
61
+ // 选取本轮买方私钥和钱包
62
+ const roundBuyerPks = [];
63
+ const roundBuyerWallets = [];
64
+ for (let k = 0; k < buyerBatchSize; k++) {
65
+ const idx = buyerCursor % buyerPrivateKeys.length;
66
+ roundBuyerPks.push(buyerPrivateKeys[idx]);
67
+ roundBuyerWallets.push(allBuyerWallets[idx]);
68
+ buyerCursor++;
69
+ }
70
+ // ✅ 获取卖方当前 nonce
71
+ const sellerNonce = addressToNonce.get(sellerWallet.address);
72
+ // ✅ 获取并更新买方 nonces(每个买方本轮需要 1 个 nonce)
73
+ const roundBuyerNonces = roundBuyerWallets.map((w) => {
74
+ const nonce = addressToNonce.get(w.address);
75
+ addressToNonce.set(w.address, nonce + 1); // 每个买方用 1 个 nonce
76
+ return nonce;
77
+ });
78
+ // 平分买入金额(使用比例模式,避免固定金额超出可分配金额)
79
+ const ratio = 1 / roundBuyerPks.length;
80
+ const buyerRatios = roundBuyerPks.map(() => ratio);
81
+ // ✅ 构建 startNonces: [sellerNonce, buyer1Nonce, buyer2Nonce, ...]
82
+ const startNonces = [sellerNonce, ...roundBuyerNonces];
83
+ // ✅ 预先计算卖方 nonce 消耗(精确计算)
84
+ // 卖方 nonce 消耗 = 贿赂(0/1) + 卖出(1) + 转账(N 或 N*2) + 利润(1)
85
+ const useNativeToken = !quoteToken || quoteToken === ZERO_ADDRESS;
86
+ const hasBribe = getBribeAmount(config) > 0n;
87
+ const hasProfit = true; // 默认有利润刮取
88
+ let sellerNonceConsumed = 0;
89
+ if (hasBribe)
90
+ sellerNonceConsumed += 1; // 贿赂
91
+ sellerNonceConsumed += 1; // 卖出
92
+ if (disperseHopCount === 0) {
93
+ sellerNonceConsumed += roundBuyerPks.length; // 直接转账
94
+ }
95
+ else if (useNativeToken) {
96
+ sellerNonceConsumed += roundBuyerPks.length; // 原生多跳:seller→hop1
97
+ }
98
+ else {
99
+ sellerNonceConsumed += roundBuyerPks.length * 2; // ERC20 多跳:BNB + ERC20 两批
100
+ }
101
+ if (hasProfit)
102
+ sellerNonceConsumed += 1; // 利润
103
+ // 调用单卖多买的签名函数
104
+ const res = await flapQuickBatchSwapMerkle({
105
+ chain,
106
+ sellerPrivateKey: sellerPk,
107
+ sellAmount,
108
+ buyerPrivateKeys: roundBuyerPks,
109
+ buyerRatios,
110
+ tokenAddress,
111
+ config,
112
+ quoteToken,
113
+ quoteTokenDecimals,
114
+ disperseHopCount,
115
+ startNonces, // ✅ 传入预计算的 nonces
116
+ });
117
+ // ✅ 更新卖方 nonce(使用精确计算的值)
118
+ addressToNonce.set(sellerWallet.address, sellerNonce + sellerNonceConsumed);
119
+ // 累积签名与中间钱包
120
+ allSigned.push(...res.signedTransactions);
121
+ if (res.disperseHopWallets)
122
+ allDisperse.push(...res.disperseHopWallets);
123
+ if (res.profitHopWallets)
124
+ allProfit.push(...res.profitHopWallets);
125
+ rounds.push({
126
+ sellerAddress: res.metadata?.sellerAddress || '',
127
+ buyerAddresses: res.metadata?.buyerAddresses || roundBuyerPks.map(() => ''),
128
+ sellAmount,
129
+ bundleHash: undefined,
130
+ });
131
+ }
132
+ nonceManager.clearTemp();
133
+ return {
134
+ signedTransactions: allSigned,
135
+ rounds,
136
+ disperseHopWallets: allDisperse.length > 0 ? allDisperse : undefined,
137
+ profitHopWallets: allProfit.length > 0 ? allProfit : undefined,
138
+ };
139
+ }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Flap Protocol 内盘捆绑换手(Merkle Bundle)
3
+ *
4
+ * 功能:钱包A卖出代币 → 钱包B买入相同数量 → 原子执行
5
+ */
6
+ import { ethers, Wallet, JsonRpcProvider } from 'ethers';
7
+ import { CommonBundleConfig } from '../../../utils/bundle-helpers.js';
8
+ import { type GeneratedWallet } from '../../../utils/wallet.js';
9
+ export declare const NATIVE_TRANSFER_GAS_LIMIT: 21055n;
10
+ export declare const ERC20_TRANSFER_GAS_LIMIT_HOP: 65000n;
11
+ export declare const BRIBE_GAS_LIMIT: 21000n;
12
+ /**
13
+ * 分发多跳路径信息
14
+ */
15
+ export type DisperseHopPath = {
16
+ targetAddress: string;
17
+ hopWallets: Wallet[];
18
+ hopWalletsInfo: GeneratedWallet[];
19
+ };
20
+ /**
21
+ * 生成分发多跳路径
22
+ */
23
+ export declare function generateDisperseHopPaths(targetAddresses: string[], hopCount: number, provider: JsonRpcProvider): DisperseHopPath[];
24
+ /**
25
+ * 构建原生代币多跳转账链
26
+ */
27
+ export declare function buildNativeHopChain(payer: Wallet, path: DisperseHopPath, finalAmount: bigint, gasPrice: bigint, chainId: number, txType: number, payerNonce: number): Promise<string[]>;
28
+ /**
29
+ * 构建 ERC20 多跳转账链
30
+ */
31
+ export declare function buildERC20HopChain(payer: Wallet, path: DisperseHopPath, erc20Address: string, erc20Amount: bigint, gasPrice: bigint, chainId: number, txType: number, payerNonce: number): Promise<string[]>;
32
+ /**
33
+ * 构建 BNB 多跳转账链(为 ERC20 中间钱包预留 gas)
34
+ */
35
+ export declare function buildBNBHopChainForERC20(payer: Wallet, path: DisperseHopPath, finalGasAmount: bigint, gasPrice: bigint, chainId: number, txType: number, payerNonce: number): Promise<string[]>;
36
+ export type UserType = 'v0' | 'v1';
37
+ export interface FlapSwapSignConfig {
38
+ rpcUrl: string;
39
+ gasLimit?: number | bigint;
40
+ gasLimitMultiplier?: number;
41
+ minGasPriceGwei?: number;
42
+ maxGasPriceGwei?: number;
43
+ txType?: 0 | 2;
44
+ chainId?: number;
45
+ reserveGasETH?: number;
46
+ skipQuoteOnError?: boolean;
47
+ skipApprovalCheck?: boolean;
48
+ bribeAmount?: number;
49
+ userType?: UserType;
50
+ }
51
+ /**
52
+ * 获取 Gas Limit
53
+ */
54
+ export declare function getGasLimit(config: FlapSwapSignConfig | FlapSwapConfig, defaultGas?: number): bigint;
55
+ export declare const ROUTER_ABI: string[];
56
+ export declare const ERC20_BALANCE_OF_ABI: string[];
57
+ export declare const APPROVE_INTERFACE: ethers.Interface;
58
+ export declare const BSC_PANCAKE_V2_ROUTER: "0x10ED43C718714eb63d5aA57B78B54704E256024E";
59
+ export declare const BSC_WBNB: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
60
+ export declare const MONAD_PANCAKE_V2_ROUTER = "0xb1bc24c34e88f7d43d5923034e3a14b24daacff9";
61
+ export declare const MONAD_WMON: "0x3bd359c1119da7da1d913d1c4d2b7c461115433a";
62
+ /**
63
+ * 获取 ERC20 代币 → 原生代币的报价
64
+ * @param provider - Provider 实例
65
+ * @param tokenAddress - ERC20 代币地址
66
+ * @param tokenAmount - 代币数量(wei)
67
+ * @param chainId - 链 ID(56=BSC, 143=Monad)
68
+ * @returns 等值的原生代币数量(wei),失败返回 0n
69
+ */
70
+ export declare function getTokenToNativeQuote(provider: ethers.JsonRpcProvider, tokenAddress: string, tokenAmount: bigint, chainId: number): Promise<bigint>;
71
+ export type FlapChain = 'bsc' | 'xlayer' | 'base';
72
+ export interface FlapSwapConfig extends CommonBundleConfig {
73
+ apiKey: string;
74
+ customRpcUrl?: string;
75
+ bundleBlockOffset?: number;
76
+ reserveGasETH?: number;
77
+ skipQuoteOnError?: boolean;
78
+ waitForConfirmation?: boolean;
79
+ waitTimeoutMs?: number;
80
+ skipApprovalCheck?: boolean;
81
+ }
82
+ export interface FlapBundleSwapSignParams {
83
+ chain: FlapChain;
84
+ sellerPrivateKey: string;
85
+ sellAmount?: string;
86
+ sellPercentage?: number;
87
+ buyerPrivateKey: string;
88
+ tokenAddress: string;
89
+ config: FlapSwapSignConfig;
90
+ quoteToken?: string;
91
+ quoteTokenDecimals?: number;
92
+ startNonces?: number[];
93
+ }
94
+ export interface FlapBundleSwapParams {
95
+ chain: FlapChain;
96
+ sellerPrivateKey: string;
97
+ sellAmount?: string;
98
+ sellPercentage?: number;
99
+ buyerPrivateKey: string;
100
+ tokenAddress: string;
101
+ config: FlapSwapConfig;
102
+ }
103
+ /** ✅ Flap Swap 结果(简化版) */
104
+ export type FlapSwapResult = {
105
+ signedTransactions: string[];
106
+ profitHopWallets?: GeneratedWallet[];
107
+ metadata?: {
108
+ sellerAddress: string;
109
+ buyerAddress: string;
110
+ sellAmount: string;
111
+ buyAmount: string;
112
+ hasApproval?: boolean;
113
+ profitAmount?: string;
114
+ };
115
+ };
116
+ export type ChainContext = {
117
+ chainId: number;
118
+ nativeToken: string;
119
+ portalAddress: string;
120
+ provider: ethers.JsonRpcProvider;
121
+ };
122
+ export type QuoteResult = {
123
+ quotedNative: bigint;
124
+ minOutNative: bigint;
125
+ };
126
+ export type BuyerNeed = {
127
+ reserveGas: bigint;
128
+ buyerBalance: bigint;
129
+ buyerNeedTotal: bigint;
130
+ maxBuyerValue: bigint;
131
+ };
132
+ export type NoncePlan = {
133
+ sellerNonce: number;
134
+ buyerNonce: number;
135
+ bribeNonce?: number;
136
+ profitNonce?: number;
137
+ };
138
+ /**
139
+ * 获取链ID
140
+ */
141
+ export declare function getChainId(chain: FlapChain): number;
142
+ /**
143
+ * 获取原生代币名称
144
+ */
145
+ export declare function getNativeTokenName(chain: FlapChain): string;
146
+ /**
147
+ * Flap内盘捆绑换手
148
+ * ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
149
+ */
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Flap Protocol 内盘捆绑换手(Merkle Bundle)
3
+ *
4
+ * 功能:钱包A卖出代币 → 钱包B买入相同数量 → 原子执行
5
+ */
6
+ import { ethers, Contract, Wallet } from 'ethers';
7
+ import { ADDRESSES } from '../../../shared/constants/index.js';
8
+ import { V2_ROUTER_QUOTE_ABI, ERC20_BALANCE_ABI, ERC20_ABI } from '../../abis/common.js';
9
+ import { generateWallets } from '../../../utils/wallet.js';
10
+ import { GAS_LIMITS, CHAINS } from '../../constants/index.js';
11
+ // ==================== 多跳转账常量(使用统一常量) ====================
12
+ export const NATIVE_TRANSFER_GAS_LIMIT = GAS_LIMITS.NATIVE_TRANSFER;
13
+ export const ERC20_TRANSFER_GAS_LIMIT_HOP = GAS_LIMITS.ERC20_TRANSFER;
14
+ export const BRIBE_GAS_LIMIT = GAS_LIMITS.BRIBE;
15
+ /**
16
+ * 生成分发多跳路径
17
+ */
18
+ export function generateDisperseHopPaths(targetAddresses, hopCount, provider) {
19
+ if (hopCount <= 0) {
20
+ return targetAddresses.map((addr) => ({
21
+ targetAddress: addr,
22
+ hopWallets: [],
23
+ hopWalletsInfo: [],
24
+ }));
25
+ }
26
+ return targetAddresses.map((targetAddress) => {
27
+ const hopWalletsInfo = generateWallets(hopCount);
28
+ const hopWallets = hopWalletsInfo.map((w) => new Wallet(w.privateKey, provider));
29
+ return { targetAddress, hopWallets, hopWalletsInfo };
30
+ });
31
+ }
32
+ /**
33
+ * 构建原生代币多跳转账链
34
+ */
35
+ export async function buildNativeHopChain(payer, path, finalAmount, gasPrice, chainId, txType, payerNonce) {
36
+ const signedTxs = [];
37
+ const hopCount = path.hopWallets.length;
38
+ if (hopCount === 0) {
39
+ signedTxs.push(await payer.signTransaction({
40
+ to: path.targetAddress,
41
+ value: finalAmount,
42
+ nonce: payerNonce,
43
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
44
+ gasPrice,
45
+ chainId,
46
+ type: txType,
47
+ }));
48
+ return signedTxs;
49
+ }
50
+ const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
51
+ // 计算每跳需要的金额
52
+ const amountsPerHop = [];
53
+ for (let i = 0; i < hopCount; i++) {
54
+ const remainingHops = hopCount - i;
55
+ amountsPerHop.push(finalAmount + hopGasCost * BigInt(remainingHops));
56
+ }
57
+ // payer → hop1
58
+ signedTxs.push(await payer.signTransaction({
59
+ to: path.hopWallets[0].address,
60
+ value: amountsPerHop[0],
61
+ nonce: payerNonce,
62
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
63
+ gasPrice,
64
+ chainId,
65
+ type: txType,
66
+ }));
67
+ // hop1 → hop2 → ... → target
68
+ for (let i = 0; i < hopCount; i++) {
69
+ const fromWallet = path.hopWallets[i];
70
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
71
+ const amount = i === hopCount - 1 ? finalAmount : amountsPerHop[i + 1];
72
+ signedTxs.push(await fromWallet.signTransaction({
73
+ to: toAddress,
74
+ value: amount,
75
+ nonce: 0,
76
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
77
+ gasPrice,
78
+ chainId,
79
+ type: txType,
80
+ }));
81
+ }
82
+ return signedTxs;
83
+ }
84
+ /**
85
+ * 构建 ERC20 多跳转账链
86
+ */
87
+ export async function buildERC20HopChain(payer, path, erc20Address, erc20Amount, gasPrice, chainId, txType, payerNonce) {
88
+ const signedTxs = [];
89
+ const hopCount = path.hopWallets.length;
90
+ const erc20Interface = new ethers.Interface(ERC20_ABI);
91
+ if (hopCount === 0) {
92
+ const data = erc20Interface.encodeFunctionData('transfer', [path.targetAddress, erc20Amount]);
93
+ signedTxs.push(await payer.signTransaction({
94
+ to: erc20Address,
95
+ data,
96
+ value: 0n,
97
+ nonce: payerNonce,
98
+ gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
99
+ gasPrice,
100
+ chainId,
101
+ type: txType,
102
+ }));
103
+ return signedTxs;
104
+ }
105
+ // payer → hop1
106
+ const firstData = erc20Interface.encodeFunctionData('transfer', [path.hopWallets[0].address, erc20Amount]);
107
+ signedTxs.push(await payer.signTransaction({
108
+ to: erc20Address,
109
+ data: firstData,
110
+ value: 0n,
111
+ nonce: payerNonce,
112
+ gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
113
+ gasPrice,
114
+ chainId,
115
+ type: txType,
116
+ }));
117
+ // hop1 → hop2 → ... → target (nonce=1,nonce=0 用于 BNB 转发)
118
+ for (let i = 0; i < hopCount; i++) {
119
+ const fromWallet = path.hopWallets[i];
120
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
121
+ const data = erc20Interface.encodeFunctionData('transfer', [toAddress, erc20Amount]);
122
+ signedTxs.push(await fromWallet.signTransaction({
123
+ to: erc20Address,
124
+ data,
125
+ value: 0n,
126
+ nonce: 1, // nonce=0 已用于 BNB 转发
127
+ gasLimit: ERC20_TRANSFER_GAS_LIMIT_HOP,
128
+ gasPrice,
129
+ chainId,
130
+ type: txType,
131
+ }));
132
+ }
133
+ return signedTxs;
134
+ }
135
+ /**
136
+ * 构建 BNB 多跳转账链(为 ERC20 中间钱包预留 gas)
137
+ */
138
+ export async function buildBNBHopChainForERC20(payer, path, finalGasAmount, gasPrice, chainId, txType, payerNonce) {
139
+ const signedTxs = [];
140
+ const hopCount = path.hopWallets.length;
141
+ if (hopCount === 0) {
142
+ return signedTxs;
143
+ }
144
+ const hopGasCost = NATIVE_TRANSFER_GAS_LIMIT * gasPrice;
145
+ const erc20GasCost = ERC20_TRANSFER_GAS_LIMIT_HOP * gasPrice;
146
+ const gasPerHop = hopGasCost + erc20GasCost * 2n;
147
+ const amountsPerHop = [];
148
+ for (let i = 0; i < hopCount; i++) {
149
+ const remainingHops = hopCount - i;
150
+ amountsPerHop.push(finalGasAmount + gasPerHop * BigInt(remainingHops));
151
+ }
152
+ // payer → hop1
153
+ signedTxs.push(await payer.signTransaction({
154
+ to: path.hopWallets[0].address,
155
+ value: amountsPerHop[0],
156
+ nonce: payerNonce,
157
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
158
+ gasPrice,
159
+ chainId,
160
+ type: txType,
161
+ }));
162
+ // hop1 → hop2 → ... → target (nonce=0)
163
+ for (let i = 0; i < hopCount; i++) {
164
+ const fromWallet = path.hopWallets[i];
165
+ const toAddress = i === hopCount - 1 ? path.targetAddress : path.hopWallets[i + 1].address;
166
+ const amount = i === hopCount - 1 ? finalGasAmount : amountsPerHop[i + 1];
167
+ signedTxs.push(await fromWallet.signTransaction({
168
+ to: toAddress,
169
+ value: amount,
170
+ nonce: 0,
171
+ gasLimit: NATIVE_TRANSFER_GAS_LIMIT,
172
+ gasPrice,
173
+ chainId,
174
+ type: txType,
175
+ }));
176
+ }
177
+ return signedTxs;
178
+ }
179
+ /**
180
+ * 获取 Gas Limit
181
+ */
182
+ export function getGasLimit(config, defaultGas = 500000) {
183
+ if (config.gasLimit !== undefined) {
184
+ return typeof config.gasLimit === 'bigint' ? config.gasLimit : BigInt(config.gasLimit);
185
+ }
186
+ const multiplier = config.gasLimitMultiplier ?? 1.0;
187
+ return BigInt(Math.ceil(defaultGas * multiplier));
188
+ }
189
+ // ✅ ABI 别名
190
+ export const ROUTER_ABI = V2_ROUTER_QUOTE_ABI;
191
+ export const ERC20_BALANCE_OF_ABI = ERC20_BALANCE_ABI;
192
+ export const APPROVE_INTERFACE = new ethers.Interface(['function approve(address,uint256) returns (bool)']);
193
+ // ✅ 链常量
194
+ export const BSC_PANCAKE_V2_ROUTER = ADDRESSES.BSC.PancakeV2Router;
195
+ export const BSC_WBNB = ADDRESSES.BSC.WBNB;
196
+ export const MONAD_PANCAKE_V2_ROUTER = '0xb1bc24c34e88f7d43d5923034e3a14b24daacff9';
197
+ export const MONAD_WMON = ADDRESSES.MONAD.WMON;
198
+ /**
199
+ * 获取 ERC20 代币 → 原生代币的报价
200
+ * @param provider - Provider 实例
201
+ * @param tokenAddress - ERC20 代币地址
202
+ * @param tokenAmount - 代币数量(wei)
203
+ * @param chainId - 链 ID(56=BSC, 143=Monad)
204
+ * @returns 等值的原生代币数量(wei),失败返回 0n
205
+ */
206
+ export async function getTokenToNativeQuote(provider, tokenAddress, tokenAmount, chainId) {
207
+ if (tokenAmount <= 0n)
208
+ return 0n;
209
+ try {
210
+ if (chainId === CHAINS.BSC.chainId) {
211
+ // BSC: 使用 PancakeSwap V2 Router
212
+ const router = new Contract(BSC_PANCAKE_V2_ROUTER, ROUTER_ABI, provider);
213
+ const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, BSC_WBNB]);
214
+ return amounts[1];
215
+ }
216
+ if (chainId === CHAINS.MONAD.chainId) {
217
+ // ✅ Monad: 使用 PancakeSwap V2 Router
218
+ const router = new Contract(MONAD_PANCAKE_V2_ROUTER, ROUTER_ABI, provider);
219
+ const amounts = await router.getAmountsOut(tokenAmount, [tokenAddress, MONAD_WMON]);
220
+ return amounts[1];
221
+ }
222
+ // ✅ Base (8453) / XLayer (196) 等链暂不支持 V2 报价,返回 0
223
+ return 0n;
224
+ }
225
+ catch {
226
+ // 报价失败返回 0(可能是流动性不足或路径不存在)
227
+ return 0n;
228
+ }
229
+ }
230
+ /**
231
+ * 获取链ID
232
+ */
233
+ export function getChainId(chain) {
234
+ switch (chain) {
235
+ case 'bsc':
236
+ return CHAINS.BSC.chainId;
237
+ case 'xlayer':
238
+ return CHAINS.XLAYER.chainId;
239
+ case 'base':
240
+ return CHAINS.BASE.chainId;
241
+ }
242
+ }
243
+ /**
244
+ * 获取原生代币名称
245
+ */
246
+ export function getNativeTokenName(chain) {
247
+ switch (chain) {
248
+ case 'bsc':
249
+ return 'BNB';
250
+ case 'xlayer':
251
+ return 'OKB';
252
+ case 'base':
253
+ return 'ETH';
254
+ }
255
+ }
256
+ /**
257
+ * Flap内盘捆绑换手
258
+ * ✅ 支持 quoteToken:传入 USDT 等地址时,卖出得到该代币,买入使用该代币
259
+ */
@@ -0,0 +1,70 @@
1
+ import { ethers, Wallet } from 'ethers';
2
+ import { NonceManager } from '../../../utils/bundle-helpers.js';
3
+ import type { GeneratedWallet } from '../../../utils/wallet.js';
4
+ import { type BuyerNeed, type ChainContext, type FlapChain, type FlapSwapSignConfig, type NoncePlan, type QuoteResult, type UserType } from './swap-helpers.js';
5
+ export declare function createChainContext(chain: FlapChain, config: FlapSwapSignConfig): ChainContext;
6
+ type BuildApprovalTxParams = {
7
+ tokenAddress: string;
8
+ seller: Wallet;
9
+ provider: ethers.JsonRpcProvider;
10
+ decimals: number;
11
+ portalAddress: string;
12
+ chainId: number;
13
+ config: FlapSwapSignConfig;
14
+ };
15
+ export declare function buildApprovalTransaction({ tokenAddress, seller, provider, decimals, portalAddress, chainId, config, }: BuildApprovalTxParams): Promise<string | null>;
16
+ type QuoteSellParams = {
17
+ portalAddress: string;
18
+ tokenAddress: string;
19
+ sellAmountWei: bigint;
20
+ provider: ethers.JsonRpcProvider;
21
+ skipQuoteOnError?: boolean;
22
+ outputToken?: string;
23
+ };
24
+ export declare function quoteSellOutput({ portalAddress, tokenAddress, sellAmountWei, provider, skipQuoteOnError, outputToken, }: QuoteSellParams): Promise<QuoteResult>;
25
+ type BuyerNeedParams = {
26
+ buyer: Wallet;
27
+ quotedNative: bigint;
28
+ reserveGasEth?: number;
29
+ nativeToken: string;
30
+ useNativeToken?: boolean;
31
+ quoteToken?: string;
32
+ quoteTokenDecimals?: number;
33
+ provider?: ethers.JsonRpcProvider;
34
+ };
35
+ export declare function calculateBuyerNeed({ buyer, quotedNative, reserveGasEth, nativeToken, useNativeToken, quoteToken, quoteTokenDecimals, provider, }: BuyerNeedParams): Promise<BuyerNeed>;
36
+ type ValidateBalanceArgs = {
37
+ buyerAddress: string;
38
+ portalGasCost: bigint;
39
+ provider: ethers.JsonRpcProvider;
40
+ chainContext: ChainContext;
41
+ seller: Wallet;
42
+ useNativeToken: boolean;
43
+ };
44
+ export declare function validateBalances({ buyerAddress, portalGasCost, provider, chainContext, seller, useNativeToken, }: ValidateBalanceArgs): Promise<void>;
45
+ type PlanNonceArgs = {
46
+ seller: Wallet;
47
+ buyer: Wallet;
48
+ approvalExists: boolean;
49
+ extractProfit: boolean;
50
+ needBribeTx: boolean;
51
+ nonceManager: NonceManager;
52
+ };
53
+ export declare function buildNoncePlan(startNonces: number[], approvalExists: boolean, extractProfit: boolean, needBribeTx: boolean): NoncePlan;
54
+ export declare function planNonces({ seller, buyer, approvalExists, extractProfit, needBribeTx, nonceManager, }: PlanNonceArgs): Promise<NoncePlan>;
55
+ type ProfitTxArgs = {
56
+ provider: ethers.JsonRpcProvider;
57
+ seller: Wallet;
58
+ profitAmount: bigint;
59
+ profitNonce?: number;
60
+ gasPrice: bigint;
61
+ chainId: number;
62
+ txType: number;
63
+ };
64
+ interface ProfitTxResult {
65
+ signedTransactions: string[];
66
+ hopWallets: GeneratedWallet[];
67
+ }
68
+ export declare function buildProfitTransaction({ provider, seller, profitAmount, profitNonce, gasPrice, chainId, txType, }: ProfitTxArgs): Promise<ProfitTxResult | null>;
69
+ export declare function calculateProfitAmount(quotedNative: bigint, userType?: UserType): bigint;
70
+ export {};