forgex-cli 1.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 (275) hide show
  1. package/README.md +479 -0
  2. package/dist/bin/forgex.d.ts +12 -0
  3. package/dist/bin/forgex.d.ts.map +1 -0
  4. package/dist/bin/forgex.js +23 -0
  5. package/dist/bin/forgex.js.map +1 -0
  6. package/dist/src/adapters/codex-adapter.d.ts +238 -0
  7. package/dist/src/adapters/codex-adapter.d.ts.map +1 -0
  8. package/dist/src/adapters/codex-adapter.js +524 -0
  9. package/dist/src/adapters/codex-adapter.js.map +1 -0
  10. package/dist/src/adapters/connection.d.ts +20 -0
  11. package/dist/src/adapters/connection.d.ts.map +1 -0
  12. package/dist/src/adapters/connection.js +43 -0
  13. package/dist/src/adapters/connection.js.map +1 -0
  14. package/dist/src/adapters/ipfs.d.ts +17 -0
  15. package/dist/src/adapters/ipfs.d.ts.map +1 -0
  16. package/dist/src/adapters/ipfs.js +30 -0
  17. package/dist/src/adapters/ipfs.js.map +1 -0
  18. package/dist/src/adapters/jito-adapter.d.ts +194 -0
  19. package/dist/src/adapters/jito-adapter.d.ts.map +1 -0
  20. package/dist/src/adapters/jito-adapter.js +474 -0
  21. package/dist/src/adapters/jito-adapter.js.map +1 -0
  22. package/dist/src/adapters/rpc-adapter.d.ts +148 -0
  23. package/dist/src/adapters/rpc-adapter.d.ts.map +1 -0
  24. package/dist/src/adapters/rpc-adapter.js +410 -0
  25. package/dist/src/adapters/rpc-adapter.js.map +1 -0
  26. package/dist/src/adapters/sdk-adapter.d.ts +148 -0
  27. package/dist/src/adapters/sdk-adapter.d.ts.map +1 -0
  28. package/dist/src/adapters/sdk-adapter.js +554 -0
  29. package/dist/src/adapters/sdk-adapter.js.map +1 -0
  30. package/dist/src/commands/config/index.d.ts +8 -0
  31. package/dist/src/commands/config/index.d.ts.map +1 -0
  32. package/dist/src/commands/config/index.js +91 -0
  33. package/dist/src/commands/config/index.js.map +1 -0
  34. package/dist/src/commands/query/index.d.ts +10 -0
  35. package/dist/src/commands/query/index.d.ts.map +1 -0
  36. package/dist/src/commands/query/index.js +376 -0
  37. package/dist/src/commands/query/index.js.map +1 -0
  38. package/dist/src/commands/sniper/index.d.ts +16 -0
  39. package/dist/src/commands/sniper/index.d.ts.map +1 -0
  40. package/dist/src/commands/sniper/index.js +292 -0
  41. package/dist/src/commands/sniper/index.js.map +1 -0
  42. package/dist/src/commands/token/index.d.ts +16 -0
  43. package/dist/src/commands/token/index.d.ts.map +1 -0
  44. package/dist/src/commands/token/index.js +295 -0
  45. package/dist/src/commands/token/index.js.map +1 -0
  46. package/dist/src/commands/tools/index.d.ts +17 -0
  47. package/dist/src/commands/tools/index.d.ts.map +1 -0
  48. package/dist/src/commands/tools/index.js +626 -0
  49. package/dist/src/commands/tools/index.js.map +1 -0
  50. package/dist/src/commands/trade/index.d.ts +8 -0
  51. package/dist/src/commands/trade/index.d.ts.map +1 -0
  52. package/dist/src/commands/trade/index.js +531 -0
  53. package/dist/src/commands/trade/index.js.map +1 -0
  54. package/dist/src/commands/transfer/index.d.ts +16 -0
  55. package/dist/src/commands/transfer/index.d.ts.map +1 -0
  56. package/dist/src/commands/transfer/index.js +509 -0
  57. package/dist/src/commands/transfer/index.js.map +1 -0
  58. package/dist/src/commands/wallet/index.d.ts +10 -0
  59. package/dist/src/commands/wallet/index.d.ts.map +1 -0
  60. package/dist/src/commands/wallet/index.js +828 -0
  61. package/dist/src/commands/wallet/index.js.map +1 -0
  62. package/dist/src/config.d.ts +74 -0
  63. package/dist/src/config.d.ts.map +1 -0
  64. package/dist/src/config.js +190 -0
  65. package/dist/src/config.js.map +1 -0
  66. package/dist/src/const/IDL/index.d.ts +4 -0
  67. package/dist/src/const/IDL/index.d.ts.map +1 -0
  68. package/dist/src/const/IDL/index.js +2 -0
  69. package/dist/src/const/IDL/index.js.map +1 -0
  70. package/dist/src/const/IDL/meteora-DLMM.d.ts +10249 -0
  71. package/dist/src/const/IDL/meteora-DLMM.d.ts.map +1 -0
  72. package/dist/src/const/IDL/meteora-DLMM.js +4177 -0
  73. package/dist/src/const/IDL/meteora-DLMM.js.map +1 -0
  74. package/dist/src/const/IDL/pump-fun.d.ts +4811 -0
  75. package/dist/src/const/IDL/pump-fun.d.ts.map +1 -0
  76. package/dist/src/const/IDL/pump-fun.js +2954 -0
  77. package/dist/src/const/IDL/pump-fun.js.map +1 -0
  78. package/dist/src/const/IDL/pump-swap-IDL.d.ts +3119 -0
  79. package/dist/src/const/IDL/pump-swap-IDL.d.ts.map +1 -0
  80. package/dist/src/const/IDL/pump-swap-IDL.js +2095 -0
  81. package/dist/src/const/IDL/pump-swap-IDL.js.map +1 -0
  82. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts +4031 -0
  83. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts.map +1 -0
  84. package/dist/src/const/IDL/raydium-launchlab-IDL.js +2110 -0
  85. package/dist/src/const/IDL/raydium-launchlab-IDL.js.map +1 -0
  86. package/dist/src/const/index.d.ts +40 -0
  87. package/dist/src/const/index.d.ts.map +1 -0
  88. package/dist/src/const/index.js +57 -0
  89. package/dist/src/const/index.js.map +1 -0
  90. package/dist/src/data-source.d.ts +270 -0
  91. package/dist/src/data-source.d.ts.map +1 -0
  92. package/dist/src/data-source.js +628 -0
  93. package/dist/src/data-source.js.map +1 -0
  94. package/dist/src/data-store/index.d.ts +87 -0
  95. package/dist/src/data-store/index.d.ts.map +1 -0
  96. package/dist/src/data-store/index.js +561 -0
  97. package/dist/src/data-store/index.js.map +1 -0
  98. package/dist/src/data-store/types.d.ts +91 -0
  99. package/dist/src/data-store/types.d.ts.map +1 -0
  100. package/dist/src/data-store/types.js +8 -0
  101. package/dist/src/data-store/types.js.map +1 -0
  102. package/dist/src/index.d.ts +8 -0
  103. package/dist/src/index.d.ts.map +1 -0
  104. package/dist/src/index.js +36 -0
  105. package/dist/src/index.js.map +1 -0
  106. package/dist/src/output.d.ts +52 -0
  107. package/dist/src/output.d.ts.map +1 -0
  108. package/dist/src/output.js +218 -0
  109. package/dist/src/output.js.map +1 -0
  110. package/dist/src/shims/store.d.ts +58 -0
  111. package/dist/src/shims/store.d.ts.map +1 -0
  112. package/dist/src/shims/store.js +55 -0
  113. package/dist/src/shims/store.js.map +1 -0
  114. package/dist/src/sol-sdk/account/index.d.ts +13 -0
  115. package/dist/src/sol-sdk/account/index.d.ts.map +1 -0
  116. package/dist/src/sol-sdk/account/index.js +174 -0
  117. package/dist/src/sol-sdk/account/index.js.map +1 -0
  118. package/dist/src/sol-sdk/account/lookupTable.d.ts +24 -0
  119. package/dist/src/sol-sdk/account/lookupTable.d.ts.map +1 -0
  120. package/dist/src/sol-sdk/account/lookupTable.js +103 -0
  121. package/dist/src/sol-sdk/account/lookupTable.js.map +1 -0
  122. package/dist/src/sol-sdk/batch/create.d.ts +23 -0
  123. package/dist/src/sol-sdk/batch/create.d.ts.map +1 -0
  124. package/dist/src/sol-sdk/batch/create.js +580 -0
  125. package/dist/src/sol-sdk/batch/create.js.map +1 -0
  126. package/dist/src/sol-sdk/batch/external-sniper.d.ts +31 -0
  127. package/dist/src/sol-sdk/batch/external-sniper.d.ts.map +1 -0
  128. package/dist/src/sol-sdk/batch/external-sniper.js +163 -0
  129. package/dist/src/sol-sdk/batch/external-sniper.js.map +1 -0
  130. package/dist/src/sol-sdk/batch/index.d.ts +144 -0
  131. package/dist/src/sol-sdk/batch/index.d.ts.map +1 -0
  132. package/dist/src/sol-sdk/batch/index.js +1573 -0
  133. package/dist/src/sol-sdk/batch/index.js.map +1 -0
  134. package/dist/src/sol-sdk/calc.d.ts +277 -0
  135. package/dist/src/sol-sdk/calc.d.ts.map +1 -0
  136. package/dist/src/sol-sdk/calc.js +590 -0
  137. package/dist/src/sol-sdk/calc.js.map +1 -0
  138. package/dist/src/sol-sdk/index.d.ts +1 -0
  139. package/dist/src/sol-sdk/index.d.ts.map +1 -0
  140. package/dist/src/sol-sdk/index.js +1 -0
  141. package/dist/src/sol-sdk/index.js.map +1 -0
  142. package/dist/src/sol-sdk/jito/index.d.ts +50 -0
  143. package/dist/src/sol-sdk/jito/index.d.ts.map +1 -0
  144. package/dist/src/sol-sdk/jito/index.js +225 -0
  145. package/dist/src/sol-sdk/jito/index.js.map +1 -0
  146. package/dist/src/sol-sdk/launchlab/index.d.ts +32 -0
  147. package/dist/src/sol-sdk/launchlab/index.d.ts.map +1 -0
  148. package/dist/src/sol-sdk/launchlab/index.js +78 -0
  149. package/dist/src/sol-sdk/launchlab/index.js.map +1 -0
  150. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts +27 -0
  151. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts.map +1 -0
  152. package/dist/src/sol-sdk/launchlab/instructions/buy.js +124 -0
  153. package/dist/src/sol-sdk/launchlab/instructions/buy.js.map +1 -0
  154. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts +27 -0
  155. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts.map +1 -0
  156. package/dist/src/sol-sdk/launchlab/instructions/create.js +125 -0
  157. package/dist/src/sol-sdk/launchlab/instructions/create.js.map +1 -0
  158. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts +15 -0
  159. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts.map +1 -0
  160. package/dist/src/sol-sdk/launchlab/instructions/sell.js +65 -0
  161. package/dist/src/sol-sdk/launchlab/instructions/sell.js.map +1 -0
  162. package/dist/src/sol-sdk/meteora/index.d.ts +32 -0
  163. package/dist/src/sol-sdk/meteora/index.d.ts.map +1 -0
  164. package/dist/src/sol-sdk/meteora/index.js +72 -0
  165. package/dist/src/sol-sdk/meteora/index.js.map +1 -0
  166. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts +46 -0
  167. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts.map +1 -0
  168. package/dist/src/sol-sdk/meteora/instructions/buy.js +153 -0
  169. package/dist/src/sol-sdk/meteora/instructions/buy.js.map +1 -0
  170. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts +24 -0
  171. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts.map +1 -0
  172. package/dist/src/sol-sdk/meteora/instructions/sell.js +98 -0
  173. package/dist/src/sol-sdk/meteora/instructions/sell.js.map +1 -0
  174. package/dist/src/sol-sdk/pump/index.d.ts +22 -0
  175. package/dist/src/sol-sdk/pump/index.d.ts.map +1 -0
  176. package/dist/src/sol-sdk/pump/index.js +101 -0
  177. package/dist/src/sol-sdk/pump/index.js.map +1 -0
  178. package/dist/src/sol-sdk/pump/instructions/buy.d.ts +29 -0
  179. package/dist/src/sol-sdk/pump/instructions/buy.d.ts.map +1 -0
  180. package/dist/src/sol-sdk/pump/instructions/buy.js +131 -0
  181. package/dist/src/sol-sdk/pump/instructions/buy.js.map +1 -0
  182. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts +36 -0
  183. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts.map +1 -0
  184. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js +77 -0
  185. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js.map +1 -0
  186. package/dist/src/sol-sdk/pump/instructions/sell.d.ts +7 -0
  187. package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -0
  188. package/dist/src/sol-sdk/pump/instructions/sell.js +38 -0
  189. package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -0
  190. package/dist/src/sol-sdk/pumpswap/index.d.ts +9 -0
  191. package/dist/src/sol-sdk/pumpswap/index.d.ts.map +1 -0
  192. package/dist/src/sol-sdk/pumpswap/index.js +27 -0
  193. package/dist/src/sol-sdk/pumpswap/index.js.map +1 -0
  194. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts +61 -0
  195. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts.map +1 -0
  196. package/dist/src/sol-sdk/pumpswap/instructions/buy.js +215 -0
  197. package/dist/src/sol-sdk/pumpswap/instructions/buy.js.map +1 -0
  198. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts +3 -0
  199. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts.map +1 -0
  200. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js +33 -0
  201. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js.map +1 -0
  202. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts +20 -0
  203. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts.map +1 -0
  204. package/dist/src/sol-sdk/pumpswap/instructions/sell.js +107 -0
  205. package/dist/src/sol-sdk/pumpswap/instructions/sell.js.map +1 -0
  206. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts +28 -0
  207. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts.map +1 -0
  208. package/dist/src/sol-sdk/pumpswap/rpc/index.js +63 -0
  209. package/dist/src/sol-sdk/pumpswap/rpc/index.js.map +1 -0
  210. package/dist/src/sol-sdk/raydium/index.d.ts +16 -0
  211. package/dist/src/sol-sdk/raydium/index.d.ts.map +1 -0
  212. package/dist/src/sol-sdk/raydium/index.js +47 -0
  213. package/dist/src/sol-sdk/raydium/index.js.map +1 -0
  214. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts +29 -0
  215. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts.map +1 -0
  216. package/dist/src/sol-sdk/raydium/instructions/buy.js +106 -0
  217. package/dist/src/sol-sdk/raydium/instructions/buy.js.map +1 -0
  218. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts +29 -0
  219. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts.map +1 -0
  220. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js +80 -0
  221. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js.map +1 -0
  222. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts +17 -0
  223. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts.map +1 -0
  224. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js +56 -0
  225. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js.map +1 -0
  226. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts +8558 -0
  227. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts.map +1 -0
  228. package/dist/src/sol-sdk/raydium/instructions/sell.js +70 -0
  229. package/dist/src/sol-sdk/raydium/instructions/sell.js.map +1 -0
  230. package/dist/src/sol-sdk/raydium/rpc/index.d.ts +39 -0
  231. package/dist/src/sol-sdk/raydium/rpc/index.d.ts.map +1 -0
  232. package/dist/src/sol-sdk/raydium/rpc/index.js +82 -0
  233. package/dist/src/sol-sdk/raydium/rpc/index.js.map +1 -0
  234. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts +5 -0
  235. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts.map +1 -0
  236. package/dist/src/sol-sdk/raydium/rpc/raydium.js +18 -0
  237. package/dist/src/sol-sdk/raydium/rpc/raydium.js.map +1 -0
  238. package/dist/src/sol-sdk/rpc/index.d.ts +33 -0
  239. package/dist/src/sol-sdk/rpc/index.d.ts.map +1 -0
  240. package/dist/src/sol-sdk/rpc/index.js +128 -0
  241. package/dist/src/sol-sdk/rpc/index.js.map +1 -0
  242. package/dist/src/sol-sdk/transfer/index.d.ts +24 -0
  243. package/dist/src/sol-sdk/transfer/index.d.ts.map +1 -0
  244. package/dist/src/sol-sdk/transfer/index.js +65 -0
  245. package/dist/src/sol-sdk/transfer/index.js.map +1 -0
  246. package/dist/src/sol-sdk/turnover/index.d.ts +84 -0
  247. package/dist/src/sol-sdk/turnover/index.d.ts.map +1 -0
  248. package/dist/src/sol-sdk/turnover/index.js +569 -0
  249. package/dist/src/sol-sdk/turnover/index.js.map +1 -0
  250. package/dist/src/tx-tracker/detail-adapter.d.ts +100 -0
  251. package/dist/src/tx-tracker/detail-adapter.d.ts.map +1 -0
  252. package/dist/src/tx-tracker/detail-adapter.js +215 -0
  253. package/dist/src/tx-tracker/detail-adapter.js.map +1 -0
  254. package/dist/src/tx-tracker/index.d.ts +142 -0
  255. package/dist/src/tx-tracker/index.d.ts.map +1 -0
  256. package/dist/src/tx-tracker/index.js +447 -0
  257. package/dist/src/tx-tracker/index.js.map +1 -0
  258. package/dist/src/types/index.d.ts +76 -0
  259. package/dist/src/types/index.d.ts.map +1 -0
  260. package/dist/src/types/index.js +69 -0
  261. package/dist/src/types/index.js.map +1 -0
  262. package/dist/src/types/websocket.d.ts +15 -0
  263. package/dist/src/types/websocket.d.ts.map +1 -0
  264. package/dist/src/types/websocket.js +18 -0
  265. package/dist/src/types/websocket.js.map +1 -0
  266. package/dist/src/utils/index.d.ts +13 -0
  267. package/dist/src/utils/index.d.ts.map +1 -0
  268. package/dist/src/utils/index.js +174 -0
  269. package/dist/src/utils/index.js.map +1 -0
  270. package/dist/src/wallet-store.d.ts +124 -0
  271. package/dist/src/wallet-store.d.ts.map +1 -0
  272. package/dist/src/wallet-store.js +524 -0
  273. package/dist/src/wallet-store.js.map +1 -0
  274. package/package.json +86 -0
  275. package/scripts/postinstall.js +88 -0
@@ -0,0 +1,590 @@
1
+ import { LAMPORTS_PER_SOL } from '@solana/web3.js';
2
+ import BigNumber from 'bignumber.js';
3
+ import BN from 'bn.js';
4
+ import { IDL as METEORA_DLMM_IDL } from '../const/IDL/meteora-DLMM.js';
5
+ export default class AmmCalc {
6
+ baseReserve;
7
+ quoteReserve;
8
+ baseDecimals;
9
+ quoteDecimals;
10
+ constructor(props) {
11
+ this.baseReserve = BigInt(props.baseReserve);
12
+ this.quoteReserve = BigInt(props.quoteReserve);
13
+ this.baseDecimals = props.baseDecimals;
14
+ this.quoteDecimals = props.quoteDecimals;
15
+ }
16
+ /**
17
+ * 获取当前储备情况
18
+ */
19
+ getReserves() {
20
+ return {
21
+ base: this.baseReserve.toString(),
22
+ quote: this.quoteReserve.toString(),
23
+ };
24
+ }
25
+ /**
26
+ * 根据 CPMM 恒定乘积公式计算输出数量
27
+ * @param amountIn 输入数量(bigint)
28
+ * @param reserveIn 输入方向储备
29
+ * @param reserveOut 输出方向储备
30
+ */
31
+ calculateAmountOut(amountIn, reserveIn, reserveOut) {
32
+ const amountInWithFee = amountIn; // 可以添加手续费逻辑
33
+ const numerator = amountInWithFee * reserveOut;
34
+ // const denominator = reserveIn * BigInt(1000) + amountInWithFee; // 假设 fee 为 0.3%,即 997/1000,可改为参数
35
+ const denominator = reserveIn + amountInWithFee; // 假设 fee 为 0.3%,即 997/1000,可改为参数
36
+ return numerator / denominator;
37
+ }
38
+ /**
39
+ * 执行交换操作
40
+ * @param amountIn 输入数量(字符串)
41
+ * @param isBaseToQuote true = base->quote,false = quote->base
42
+ */
43
+ swap(amountIn, isBaseToQuote) {
44
+ const inAmount = BigInt(amountIn);
45
+ if (inAmount <= BigInt(0))
46
+ throw new Error('AmountIn must be positive');
47
+ if (isBaseToQuote) {
48
+ const outAmount = this.calculateAmountOut(inAmount, this.baseReserve, this.quoteReserve);
49
+ if (outAmount > this.quoteReserve)
50
+ throw new Error('Insufficient quote reserve');
51
+ this.baseReserve += inAmount;
52
+ this.quoteReserve -= outAmount;
53
+ return outAmount.toString();
54
+ }
55
+ else {
56
+ const outAmount = this.calculateAmountOut(inAmount, this.quoteReserve, this.baseReserve);
57
+ if (outAmount > this.baseReserve)
58
+ throw new Error('Insufficient base reserve');
59
+ this.quoteReserve += inAmount;
60
+ this.baseReserve -= outAmount;
61
+ return outAmount.toString();
62
+ }
63
+ }
64
+ }
65
+ export class PumpAmmCalc {
66
+ tokenDecimals = 10 ** 6;
67
+ tokenTotalSupply = new BN(1000000000 * this.tokenDecimals);
68
+ initialVirtualSolReserves = new BN(28 * LAMPORTS_PER_SOL);
69
+ initialRealSolReserves = new BN(0);
70
+ initialVirtualTokenReserves = new BN(1073000000 * this.tokenDecimals);
71
+ initialRealTokenReserves = new BN(793100000 * this.tokenDecimals);
72
+ constructor(props) {
73
+ this.tokenTotalSupply = props.tokenTotalSupply ?? this.tokenTotalSupply;
74
+ this.initialVirtualSolReserves =
75
+ props.initialVirtualSolReserves ?? this.initialVirtualSolReserves;
76
+ this.initialRealSolReserves = props.initialRealSolReserves ?? this.initialRealSolReserves;
77
+ this.initialVirtualTokenReserves =
78
+ props.initialVirtualTokenReserves ?? this.initialVirtualTokenReserves;
79
+ this.initialRealTokenReserves = props.initialRealTokenReserves ?? this.initialRealTokenReserves;
80
+ }
81
+ /**
82
+ * 获取当前储备情况
83
+ */
84
+ getReserves() {
85
+ return {
86
+ virtualSolReserves: this.initialVirtualSolReserves,
87
+ virtualTokenReserves: this.initialVirtualTokenReserves,
88
+ realTokenReserves: this.initialRealTokenReserves,
89
+ realSolReserves: this.initialRealSolReserves,
90
+ tokenTotalSupply: this.tokenTotalSupply,
91
+ };
92
+ }
93
+ getPrice() {
94
+ const totalSolReserves = this.initialRealSolReserves.add(this.initialVirtualSolReserves);
95
+ const totalTokenReserves = this.initialRealTokenReserves.add(this.initialVirtualTokenReserves);
96
+ return totalSolReserves.div(totalTokenReserves);
97
+ }
98
+ calculateBuyAmountOut(amount) {
99
+ const solAmount = new BN(amount);
100
+ const virtualTokenReserves = this.initialVirtualTokenReserves; // BN,最小单位
101
+ const virtualSolReserves = this.initialVirtualSolReserves; // BN,lamports
102
+ const realSolReserves = this.initialRealSolReserves; // BN,lamports
103
+ const realTokenReserves = this.initialRealTokenReserves; // BN,最小单位
104
+ // k = virtual_token * (virtual_sol)
105
+ const k = virtualTokenReserves.mul(virtualSolReserves); // BN
106
+ // new_virtual_token = k / (virtual_sol + delta_sol)
107
+ const denominator = virtualSolReserves.add(solAmount); // BN
108
+ const newVirtualTokenReserves = k.div(denominator); // BN
109
+ // tokens_bought = virtual_token - new_virtual_token
110
+ let tokensToBuy = virtualTokenReserves.sub(newVirtualTokenReserves); // BN
111
+ // 最多只能买到真实储备剩余
112
+ tokensToBuy = BN.min(tokensToBuy, realTokenReserves);
113
+ // 更新储备(真实部分)
114
+ this.initialRealSolReserves = this.initialRealSolReserves.add(solAmount);
115
+ this.initialRealTokenReserves = this.initialRealTokenReserves.sub(tokensToBuy);
116
+ // 虚拟储备的变化按实际逻辑是否需要变动(多数项目不变)
117
+ this.initialVirtualTokenReserves = newVirtualTokenReserves;
118
+ return tokensToBuy; // 返回最小单位,前端展示时 / 1e6
119
+ }
120
+ /**
121
+ * 计算购买固定数量token需要的SOL数量
122
+ * @param tokenAmount 想要购买的token数量(最小单位字符串)
123
+ * @returns 需要的SOL数量(lamports)
124
+ */
125
+ calculateBuyExactAmountOut(tokenAmount) {
126
+ const tokensWanted = new BN(tokenAmount);
127
+ const virtualTokenReserves = this.initialVirtualTokenReserves; // BN,最小单位
128
+ const virtualSolReserves = this.initialVirtualSolReserves; // BN,lamports
129
+ const realSolReserves = this.initialRealSolReserves; // BN,lamports
130
+ const realTokenReserves = this.initialRealTokenReserves; // BN,最小单位
131
+ // 检查是否有足够的token可购买
132
+ if (tokensWanted.gt(realTokenReserves)) {
133
+ throw new Error('购买数量超过可用token储备');
134
+ }
135
+ if (tokensWanted.lte(new BN(0))) {
136
+ throw new Error('购买数量必须大于0');
137
+ }
138
+ // k = virtual_token * virtual_sol
139
+ const k = virtualTokenReserves.mul(virtualSolReserves);
140
+ // 计算购买后的新虚拟token储备
141
+ // new_virtual_token = virtual_token - tokens_wanted
142
+ const newVirtualTokenReserves = virtualTokenReserves.sub(tokensWanted);
143
+ // 根据恒定乘积公式计算新的虚拟SOL储备
144
+ // new_virtual_sol = k / new_virtual_token
145
+ const newVirtualSolReserves = k.div(newVirtualTokenReserves);
146
+ // 计算需要的SOL数量
147
+ // sol_needed = new_virtual_sol - virtual_sol
148
+ const solNeeded = newVirtualSolReserves.sub(virtualSolReserves);
149
+ // 检查计算结果是否合理
150
+ if (solNeeded.lte(new BN(0))) {
151
+ throw new Error('计算出的SOL数量异常');
152
+ }
153
+ // 更新储备(真实部分)
154
+ this.initialRealSolReserves = this.initialRealSolReserves.add(solNeeded);
155
+ this.initialRealTokenReserves = this.initialRealTokenReserves.sub(tokensWanted);
156
+ // 更新虚拟储备
157
+ this.initialVirtualTokenReserves = newVirtualTokenReserves;
158
+ return solNeeded; // 返回lamports,前端展示时 / 1e9 得到 SOL
159
+ }
160
+ calculateSellAmountOut(amount) {
161
+ const tokenAmount = new BN(amount);
162
+ const virtualTokenReserves = this.initialVirtualTokenReserves; // BN
163
+ const virtualSolReserves = this.initialVirtualSolReserves; // BN
164
+ const realSolReserves = this.initialRealSolReserves; // BN
165
+ const realTokenReserves = this.initialRealTokenReserves; // BN
166
+ // k = virtual_token * (virtual_sol + real_sol)
167
+ const k = virtualTokenReserves.mul(virtualSolReserves.add(realSolReserves));
168
+ // new_virtual_token = virtual_token + deltaToken
169
+ const newVirtualTokenReserves = virtualTokenReserves.add(tokenAmount);
170
+ // new_sol_reserves = k / new_virtual_token
171
+ const newSolReserves = k.div(newVirtualTokenReserves);
172
+ // solToReturn = (virtual_sol + real_sol) - new_sol_reserves
173
+ let solToReturn = virtualSolReserves.add(realSolReserves).sub(newSolReserves);
174
+ // 最多只能取出现实真实sol储备
175
+ solToReturn = BN.min(solToReturn, realSolReserves);
176
+ // 检查是否充足
177
+ if (solToReturn.lte(new BN(0)))
178
+ throw new Error('卖出数量异常');
179
+ // 更新储备
180
+ this.initialRealSolReserves = this.initialRealSolReserves.sub(solToReturn);
181
+ this.initialRealTokenReserves = this.initialRealTokenReserves.add(tokenAmount);
182
+ this.initialVirtualTokenReserves = newVirtualTokenReserves;
183
+ // 返回 lamports,前端再 / 1e9 得到 SOL
184
+ return solToReturn.toString();
185
+ }
186
+ }
187
+ export class LaunchlabAmmCalc {
188
+ baseDecimals = 6; // 代币精度
189
+ quoteDecimals = 9; // SOL精度
190
+ migrateType = 1;
191
+ supply; // 总供应量
192
+ totalBaseSell; // 可售卖代币数量
193
+ virtualBase; // 虚拟代币储备
194
+ virtualQuote; // 虚拟SOL储备
195
+ realBase; // 真实代币储备
196
+ realQuote; // 真实SOL储备
197
+ totalQuoteFundRaising; // 募资目标
198
+ constructor(props) {
199
+ // 使用提供的参数或默认值
200
+ this.baseDecimals = props.baseDecimals ?? 6;
201
+ this.quoteDecimals = props.quoteDecimals ?? 9;
202
+ this.migrateType = props.migrateType ?? 1;
203
+ this.supply = props.supply ?? new BN('1000000000000000'); // 1,000,000,000,000,000
204
+ this.totalBaseSell = props.totalBaseSell ?? new BN('793100000000000'); // 793,100,000,000,000
205
+ this.virtualBase = props.virtualBase ?? new BN('1073025605596382'); // 1,073,025,605,596,382
206
+ this.virtualQuote = props.virtualQuote ?? new BN('30000852951'); // 30,000,852,951
207
+ this.realBase = props.realBase ?? new BN('0'); // 初始真实代币储备为0
208
+ this.realQuote = props.realQuote ?? new BN('0'); // 初始真实SOL储备为0
209
+ this.totalQuoteFundRaising = props.totalQuoteFundRaising ?? new BN('85000000000'); // 85,000,000,000
210
+ }
211
+ /**
212
+ * 获取当前储备情况
213
+ */
214
+ getReserves() {
215
+ return {
216
+ baseDecimals: this.baseDecimals,
217
+ quoteDecimals: this.quoteDecimals,
218
+ migrateType: this.migrateType,
219
+ supply: this.supply,
220
+ totalBaseSell: this.totalBaseSell,
221
+ virtualBase: this.virtualBase,
222
+ virtualQuote: this.virtualQuote,
223
+ realBase: this.realBase,
224
+ realQuote: this.realQuote,
225
+ totalQuoteFundRaising: this.totalQuoteFundRaising,
226
+ };
227
+ }
228
+ /**
229
+ * 获取当前价格 (SOL/Token)
230
+ */
231
+ getPrice() {
232
+ const totalQuoteReserves = this.realQuote.add(this.virtualQuote);
233
+ // 修复:realBase代表已卖出的代币,所以可用base储备 = virtualBase - realBase
234
+ const totalBaseReserves = this.virtualBase.sub(this.realBase);
235
+ return totalQuoteReserves.div(totalBaseReserves);
236
+ }
237
+ /**
238
+ * 计算买入代币数量
239
+ * @param solAmount SOL数量(lamports字符串)
240
+ * @returns 能买到的代币数量(最小单位)
241
+ */
242
+ calculateBuyAmountOut(solAmount) {
243
+ const quoteAmountIn = new BN(solAmount);
244
+ // 计算总储备
245
+ const totalVirtualBase = this.virtualBase;
246
+ const totalVirtualQuote = this.virtualQuote;
247
+ const totalRealQuote = this.realQuote;
248
+ const totalRealBase = this.realBase;
249
+ console.log('totalVirtualBase: ', totalVirtualBase.toString());
250
+ console.log('totalVirtualQuote: ', totalVirtualQuote.toString());
251
+ console.log('totalRealQuote: ', totalRealQuote.toString());
252
+ console.log('totalRealBase: ', totalRealBase.toString());
253
+ // 修复:realBase代表已卖出的代币,所以可用base储备 = virtualBase - realBase
254
+ const totalBase = totalVirtualBase.sub(totalRealBase);
255
+ const totalQuote = totalVirtualQuote.add(totalRealQuote);
256
+ // 使用恒定乘积公式: k = (virtual_base - real_base) * (virtual_quote + real_quote)
257
+ const k = totalBase.mul(totalQuote);
258
+ // 计算新的quote储备
259
+ const newQuoteReserves = totalQuote.add(quoteAmountIn);
260
+ // 计算新的虚拟base储备: new_base = k / new_quote_reserves
261
+ const newBase = k.div(newQuoteReserves);
262
+ // 计算能买到的代币数量: tokens_out = totalBase - new_base
263
+ let tokensOut = totalBase.sub(newBase);
264
+ // 检查是否超过总可售代币数量
265
+ const remainingTokensForSale = this.totalBaseSell.sub(totalRealBase);
266
+ tokensOut = BN.min(tokensOut, remainingTokensForSale);
267
+ // 检查是否有足够的代币可售
268
+ if (tokensOut.lte(new BN(0))) {
269
+ throw new Error('购买数量异常:没有足够的代币可售');
270
+ }
271
+ // 更新储备状态(只更新真实储备,虚拟储备保持不变)
272
+ this.realQuote = this.realQuote.add(quoteAmountIn);
273
+ this.realBase = this.realBase.add(tokensOut); // realBase代表已卖出的代币,应该增加
274
+ return tokensOut;
275
+ }
276
+ /**
277
+ * 计算卖出获得的SOL数量
278
+ * @param tokenAmount 代币数量(最小单位字符串)
279
+ * @returns 能获得的SOL数量(lamports)
280
+ */
281
+ calculateSellAmountOut(tokenAmount) {
282
+ const baseAmountIn = new BN(tokenAmount);
283
+ // 计算总储备
284
+ const totalVirtualBase = this.virtualBase;
285
+ const totalVirtualQuote = this.virtualQuote;
286
+ const totalRealQuote = this.realQuote;
287
+ const totalRealBase = this.realBase;
288
+ // 修复:realBase代表已卖出的代币,所以可用base储备 = virtualBase - realBase
289
+ const totalBase = totalVirtualBase.sub(totalRealBase);
290
+ const totalQuote = totalVirtualQuote.add(totalRealQuote);
291
+ // 使用恒定乘积公式: k = (virtual_base - real_base) * (virtual_quote + real_quote)
292
+ const k = totalBase.mul(totalQuote);
293
+ // 计算新的base储备
294
+ const newBaseReserves = totalBase.add(baseAmountIn);
295
+ // 计算新的quote储备: new_quote_reserves = k / new_base_reserves
296
+ const newQuoteReserves = k.div(newBaseReserves);
297
+ // 计算能获得的SOL数量: sol_out = (virtual_quote + real_quote) - new_quote_reserves
298
+ let solOut = totalQuote.sub(newQuoteReserves);
299
+ // 确保不超过真实可用储备
300
+ solOut = BN.min(solOut, totalRealQuote);
301
+ // 检查是否有足够的SOL可售
302
+ if (solOut.lte(new BN(0))) {
303
+ throw new Error('卖出数量异常:没有足够的SOL可售');
304
+ }
305
+ // 检查是否有足够的已售代币可以回收
306
+ if (baseAmountIn.gt(totalRealBase)) {
307
+ throw new Error('卖出数量异常:超过已售代币数量');
308
+ }
309
+ // 更新储备状态(只更新真实储备,虚拟储备保持不变)
310
+ this.realBase = this.realBase.sub(baseAmountIn); // realBase代表已卖出的代币,卖出时应该减少
311
+ this.realQuote = this.realQuote.sub(solOut);
312
+ return solOut.toString();
313
+ }
314
+ /**
315
+ * 检查是否达到迁移条件
316
+ */
317
+ canMigrate() {
318
+ return this.realQuote.gte(this.totalQuoteFundRaising);
319
+ }
320
+ /**
321
+ * 获取资金筹集进度 (0-100)
322
+ */
323
+ getFundingProgress() {
324
+ const current = this.realQuote.toNumber();
325
+ const target = this.totalQuoteFundRaising.toNumber();
326
+ return Math.min((current / target) * 100, 100);
327
+ }
328
+ /**
329
+ * 获取剩余可售代币数量
330
+ */
331
+ getRemainingTokensForSale() {
332
+ return this.totalBaseSell.sub(this.realBase);
333
+ }
334
+ /**
335
+ * 获取市值(基于当前价格)
336
+ */
337
+ getMarketCap() {
338
+ const price = this.getPrice();
339
+ const totalSupplyInBase = this.supply;
340
+ return price.mul(totalSupplyInBase);
341
+ }
342
+ }
343
+ // Q64.64解码工具
344
+ function decodeQ64_64(priceBN) {
345
+ return new BigNumber(priceBN.toString()).div('18446744073709551616');
346
+ }
347
+ const CONSTANTS = Object.entries(METEORA_DLMM_IDL.constants);
348
+ const MAX_BIN_ARRAY_SIZE = new BN(CONSTANTS.find(([k, v]) => v.name == 'MAX_BIN_PER_ARRAY')?.[1].value ?? 0);
349
+ const BIN_ARRAY_BITMAP_SIZE = new BN(CONSTANTS.find(([k, v]) => v.name == 'BIN_ARRAY_BITMAP_SIZE')?.[1].value ?? 0);
350
+ export class MeteoraDLMMCalc {
351
+ /**
352
+ * DLMM核心参数
353
+ */
354
+ reserveX;
355
+ reserveY;
356
+ mintA;
357
+ mintB;
358
+ oracle;
359
+ binStep;
360
+ binArrayBitmap;
361
+ activeId;
362
+ vParameters;
363
+ /**
364
+ * DLMM所有bin的流动性与价格(需外部组装好,按binId升序排列)
365
+ */
366
+ allBins = [];
367
+ // 公式常量
368
+ static BASIS_POINT_MAX = 10000;
369
+ static MAX_FEE_RATE = 100_000_000;
370
+ static FEE_PRECISION = 100_000_000;
371
+ static OFFSET = 99_999_999_999;
372
+ static SCALE = 100_000_000_000;
373
+ baseDecimals = 6; // 默认6位
374
+ quoteDecimals = 9; // 默认9位
375
+ /**
376
+ * 构造函数支持传入allBins
377
+ */
378
+ constructor(info) {
379
+ this.reserveX = info.reserveX;
380
+ this.reserveY = info.reserveY;
381
+ this.mintA = info.mintA;
382
+ this.mintB = info.mintB;
383
+ this.oracle = info.oracle;
384
+ this.binStep = info.binStep;
385
+ this.binArrayBitmap = info.binArrayBitmap;
386
+ this.activeId = info.activeId;
387
+ this.vParameters = info.vParameters;
388
+ if (info.allBins)
389
+ this.allBins = info.allBins;
390
+ if (info.baseDecimals !== undefined)
391
+ this.baseDecimals = info.baseDecimals;
392
+ if (info.quoteDecimals !== undefined)
393
+ this.quoteDecimals = info.quoteDecimals;
394
+ if (info.binArrayBitmap !== undefined)
395
+ this.binArrayBitmap = info.binArrayBitmap;
396
+ }
397
+ /**
398
+ * 获取DLMM当前价格
399
+ * price = (1 + bin_step/BASIS_POINT_MAX) ^ active_id
400
+ * @returns number
401
+ */
402
+ getPrice() {
403
+ return Math.pow(1 + this.binStep / MeteoraDLMMCalc.BASIS_POINT_MAX, this.activeId);
404
+ }
405
+ /**
406
+ * 计算基础手续费率 base_fee_rate
407
+ * base_fee_rate = base_factor * bin_step * 10 * 10^base_fee_power_factor
408
+ * @param baseFactor number
409
+ * @param baseFeePowerFactor number
410
+ */
411
+ getBaseFeeRate(baseFactor, baseFeePowerFactor) {
412
+ return baseFactor * this.binStep * 10 * Math.pow(10, baseFeePowerFactor);
413
+ }
414
+ /**
415
+ * 计算浮动手续费率 variable_fee_rate
416
+ * variable_fee_rate = ((volatility_accumulator * bin_step)^2 * variable_fee_control + OFFSET) / SCALE
417
+ * @param variableFeeControl number
418
+ */
419
+ getVariableFeeRate(variableFeeControl) {
420
+ const { volatility_accumulator } = this.vParameters;
421
+ const t = volatility_accumulator * this.binStep;
422
+ return (t * t * variableFeeControl + MeteoraDLMMCalc.OFFSET) / MeteoraDLMMCalc.SCALE;
423
+ }
424
+ /**
425
+ * 计算总手续费率 total_fee_rate
426
+ * total_fee_rate = min(base_fee_rate + variable_fee_rate, MAX_FEE_RATE)
427
+ * @param baseFactor number
428
+ * @param baseFeePowerFactor number
429
+ * @param variableFeeControl number
430
+ */
431
+ getTotalFeeRate(baseFactor, baseFeePowerFactor, variableFeeControl) {
432
+ const baseFee = this.getBaseFeeRate(baseFactor, baseFeePowerFactor);
433
+ const variableFee = this.getVariableFeeRate(variableFeeControl);
434
+ return Math.min(baseFee + variableFee, MeteoraDLMMCalc.MAX_FEE_RATE);
435
+ }
436
+ /**
437
+ * 计算复合手续费 composition_fee
438
+ * composition_fee = swap_amount * total_fee_rate * (1 + total_fee_rate) / FEE_PRECISION^2
439
+ * @param swapAmount number
440
+ * @param totalFeeRate number
441
+ */
442
+ getCompositionFee(swapAmount, totalFeeRate) {
443
+ return (swapAmount * totalFeeRate * (1 + totalFeeRate)) / MeteoraDLMMCalc.FEE_PRECISION ** 2;
444
+ }
445
+ /**
446
+ * 计算价格冲击/滑点
447
+ * @param spotPrice number 当前价格
448
+ * @param maxPriceImpactBps number 最大价格冲击bps
449
+ * @param direction 'sellX' | 'sellY' 卖X还是卖Y
450
+ * @returns minPrice
451
+ */
452
+ getMinPrice(spotPrice, maxPriceImpactBps, direction) {
453
+ if (direction === 'sellX') {
454
+ // min_price = spot_price * (BASIS_POINT_MAX - max_price_impact_bps) / BASIS_POINT_MAX
455
+ return ((spotPrice * (MeteoraDLMMCalc.BASIS_POINT_MAX - maxPriceImpactBps)) /
456
+ MeteoraDLMMCalc.BASIS_POINT_MAX);
457
+ }
458
+ else {
459
+ // min_price = spot_price * BASIS_POINT_MAX / (BASIS_POINT_MAX - max_price_impact_bps)
460
+ return ((spotPrice * MeteoraDLMMCalc.BASIS_POINT_MAX) /
461
+ (MeteoraDLMMCalc.BASIS_POINT_MAX - maxPriceImpactBps));
462
+ }
463
+ }
464
+ /**
465
+ * 辅助函数:跳跃查找下一个有流动性的bin索引(买入方向)
466
+ * @param flatBins 扁平化bin数组
467
+ * @param startIdx 起始索引
468
+ * @returns 下一个有amountY流动性的bin索引,找不到则返回-1
469
+ */
470
+ findNextBinIndexWithLiquidityY(flatBins, startIdx) {
471
+ for (let i = startIdx; i < flatBins.length; i++) {
472
+ if (flatBins[i] && !new BN(flatBins[i].amountY).isZero()) {
473
+ return i;
474
+ }
475
+ }
476
+ return -1;
477
+ }
478
+ /**
479
+ * 辅助函数:跳跃查找下一个有流动性的bin索引(卖出方向)
480
+ * @param flatBins 扁平化bin数组
481
+ * @param startIdx 起始索引
482
+ * @returns 下一个有amountX流动性的bin索引,找不到则返回-1
483
+ */
484
+ findNextBinIndexWithLiquidityX(flatBins, startIdx) {
485
+ for (let i = startIdx; i >= 0; i--) {
486
+ if (flatBins[i] && !new BN(flatBins[i].amountX).isZero()) {
487
+ return i;
488
+ }
489
+ }
490
+ return -1;
491
+ }
492
+ binIdToBinArrayIndex(binId) {
493
+ const { div: idx, mod } = binId.divmod(MAX_BIN_ARRAY_SIZE);
494
+ return binId.isNeg() && !mod.isZero() ? idx.sub(new BN(1)) : idx;
495
+ }
496
+ internalBitmapRange() {
497
+ const lowerBinArrayIndex = BIN_ARRAY_BITMAP_SIZE.neg();
498
+ const upperBinArrayIndex = BIN_ARRAY_BITMAP_SIZE.sub(new BN(1));
499
+ return [lowerBinArrayIndex, upperBinArrayIndex];
500
+ }
501
+ /**
502
+ * 真实DLMM买入:遍历activeId及右侧bins,消耗quoteIn,返回能买到的base数量和涉及的binArray pubkey
503
+ * 优化:跳跃查找有流动性的bin,提升性能
504
+ */
505
+ calculateBuyAmountOut(quoteIn) {
506
+ let remainQuote = new BigNumber(quoteIn.toString());
507
+ let baseOut = new BigNumber(0);
508
+ const binArraysPubkeySet = new Set();
509
+ const flatBins = this.allBins
510
+ .map(item => {
511
+ const items = item.account.bins.map(item2 => ({
512
+ ...item2,
513
+ binArrayPubkey: item.publicKey.toBase58(),
514
+ }));
515
+ return items;
516
+ })
517
+ .flat();
518
+ let i = this.activeId;
519
+ while (i < flatBins.length) {
520
+ i = this.findNextBinIndexWithLiquidityY(flatBins, i);
521
+ if (i === -1)
522
+ break;
523
+ const bin = flatBins[i];
524
+ binArraysPubkeySet.add(bin.binArrayPubkey);
525
+ const maxBase = new BigNumber(bin.amountY.toString());
526
+ const price = decodeQ64_64(bin.price);
527
+ const maxQuote = maxBase.multipliedBy(price);
528
+ if (remainQuote.gte(maxQuote)) {
529
+ baseOut = baseOut.plus(maxBase);
530
+ remainQuote = remainQuote.minus(maxQuote);
531
+ i++;
532
+ }
533
+ else {
534
+ const buyBase = remainQuote.dividedBy(price);
535
+ baseOut = baseOut.plus(buyBase);
536
+ break;
537
+ }
538
+ if (remainQuote.lte(0))
539
+ break;
540
+ }
541
+ return {
542
+ amount: new BN(baseOut.integerValue(BigNumber.ROUND_DOWN).toString()),
543
+ binArraysPubkey: Array.from(binArraysPubkeySet),
544
+ };
545
+ }
546
+ /**
547
+ * 真实DLMM卖出:遍历activeId及左侧bins,消耗baseIn,返回能换到的quote数量和涉及的binArray pubkey
548
+ * 优化:跳跃查找有流动性的bin,提升性能
549
+ */
550
+ calculateSellAmountOut(baseIn) {
551
+ let remainBase = new BigNumber(baseIn.toString());
552
+ let quoteOut = new BigNumber(0);
553
+ const binArraysPubkeySet = new Set();
554
+ const flatBins = this.allBins
555
+ .map(item => {
556
+ const items = item.account.bins.map(item2 => ({
557
+ ...item2,
558
+ binArrayPubkey: item.publicKey.toBase58(),
559
+ }));
560
+ return items;
561
+ })
562
+ .flat();
563
+ let i = this.activeId;
564
+ while (i >= 0) {
565
+ i = this.findNextBinIndexWithLiquidityX(flatBins, i);
566
+ if (i === -1)
567
+ break;
568
+ const bin = flatBins[i];
569
+ binArraysPubkeySet.add(bin.binArrayPubkey);
570
+ const maxBase = new BigNumber(bin.amountX.toString());
571
+ const price = decodeQ64_64(bin.price);
572
+ if (remainBase.gte(maxBase)) {
573
+ quoteOut = quoteOut.plus(maxBase.multipliedBy(price));
574
+ remainBase = remainBase.minus(maxBase);
575
+ i--;
576
+ }
577
+ else {
578
+ quoteOut = quoteOut.plus(remainBase.multipliedBy(price));
579
+ break;
580
+ }
581
+ if (remainBase.lte(0))
582
+ break;
583
+ }
584
+ return {
585
+ amount: new BN(quoteOut.integerValue(BigNumber.ROUND_DOWN).toString()),
586
+ binArraysPubkey: Array.from(binArraysPubkeySet),
587
+ };
588
+ }
589
+ }
590
+ //# sourceMappingURL=calc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calc.js","sourceRoot":"","sources":["../../../src/sol-sdk/calc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sol-sdk/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sol-sdk/index.ts"],"names":[],"mappings":""}