four-flap-meme-sdk 1.5.6 → 1.5.8

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 (158) hide show
  1. package/README.zh-CN.pdf +0 -0
  2. package/dist/abis/common.js +2 -0
  3. package/dist/contracts/tm-bundle-merkle/config.d.ts +0 -1
  4. package/dist/contracts/tm-bundle-merkle/config.js +0 -1
  5. package/dist/contracts/tm-bundle-merkle/core.js +13 -9
  6. package/dist/flap/portal-bundle-merkle/config.d.ts +0 -1
  7. package/dist/flap/portal-bundle-merkle/config.js +0 -1
  8. package/dist/flap/portal-bundle-merkle/create-to-dex.d.ts +8 -2
  9. package/dist/flap/portal-bundle-merkle/create-to-dex.js +170 -128
  10. package/dist/flap/portal-bundle-merkle/encryption.d.ts +16 -0
  11. package/dist/flap/portal-bundle-merkle/encryption.js +146 -0
  12. package/dist/index.d.ts +0 -1
  13. package/dist/index.js +1 -1
  14. package/package.json +5 -41
  15. package/dist/sol/constants.d.ts +0 -150
  16. package/dist/sol/constants.js +0 -188
  17. package/dist/sol/dex/blockrazor/client.d.ts +0 -51
  18. package/dist/sol/dex/blockrazor/client.js +0 -96
  19. package/dist/sol/dex/blockrazor/constants.d.ts +0 -34
  20. package/dist/sol/dex/blockrazor/constants.js +0 -55
  21. package/dist/sol/dex/blockrazor/geyser.d.ts +0 -128
  22. package/dist/sol/dex/blockrazor/geyser.js +0 -530
  23. package/dist/sol/dex/blockrazor/index.d.ts +0 -18
  24. package/dist/sol/dex/blockrazor/index.js +0 -23
  25. package/dist/sol/dex/blockrazor/send.d.ts +0 -135
  26. package/dist/sol/dex/blockrazor/send.js +0 -254
  27. package/dist/sol/dex/blockrazor/types.d.ts +0 -191
  28. package/dist/sol/dex/blockrazor/types.js +0 -5
  29. package/dist/sol/dex/index.d.ts +0 -10
  30. package/dist/sol/dex/index.js +0 -16
  31. package/dist/sol/dex/jup/client.d.ts +0 -33
  32. package/dist/sol/dex/jup/client.js +0 -110
  33. package/dist/sol/dex/jup/index.d.ts +0 -16
  34. package/dist/sol/dex/jup/index.js +0 -148
  35. package/dist/sol/dex/jup/legacy.d.ts +0 -623
  36. package/dist/sol/dex/jup/legacy.js +0 -416
  37. package/dist/sol/dex/jup/lend.d.ts +0 -640
  38. package/dist/sol/dex/jup/lend.js +0 -603
  39. package/dist/sol/dex/jup/portfolio.d.ts +0 -362
  40. package/dist/sol/dex/jup/portfolio.js +0 -367
  41. package/dist/sol/dex/jup/price.d.ts +0 -173
  42. package/dist/sol/dex/jup/price.js +0 -220
  43. package/dist/sol/dex/jup/recurring.d.ts +0 -437
  44. package/dist/sol/dex/jup/recurring.js +0 -320
  45. package/dist/sol/dex/jup/send.d.ts +0 -282
  46. package/dist/sol/dex/jup/send.js +0 -295
  47. package/dist/sol/dex/jup/studio.d.ts +0 -457
  48. package/dist/sol/dex/jup/studio.js +0 -488
  49. package/dist/sol/dex/jup/tokens.d.ts +0 -767
  50. package/dist/sol/dex/jup/tokens.js +0 -697
  51. package/dist/sol/dex/jup/trigger.d.ts +0 -511
  52. package/dist/sol/dex/jup/trigger.js +0 -397
  53. package/dist/sol/dex/jup/types.d.ts +0 -433
  54. package/dist/sol/dex/jup/types.js +0 -5
  55. package/dist/sol/dex/jup/ultra.d.ts +0 -646
  56. package/dist/sol/dex/jup/ultra.js +0 -853
  57. package/dist/sol/dex/meteora/client.d.ts +0 -76
  58. package/dist/sol/dex/meteora/client.js +0 -219
  59. package/dist/sol/dex/meteora/damm-v1-bundle.d.ts +0 -61
  60. package/dist/sol/dex/meteora/damm-v1-bundle.js +0 -112
  61. package/dist/sol/dex/meteora/damm-v1.d.ts +0 -118
  62. package/dist/sol/dex/meteora/damm-v1.js +0 -315
  63. package/dist/sol/dex/meteora/damm-v2-bundle.d.ts +0 -82
  64. package/dist/sol/dex/meteora/damm-v2-bundle.js +0 -242
  65. package/dist/sol/dex/meteora/damm-v2.d.ts +0 -172
  66. package/dist/sol/dex/meteora/damm-v2.js +0 -632
  67. package/dist/sol/dex/meteora/dbc-bundle.d.ts +0 -123
  68. package/dist/sol/dex/meteora/dbc-bundle.js +0 -304
  69. package/dist/sol/dex/meteora/dbc.d.ts +0 -192
  70. package/dist/sol/dex/meteora/dbc.js +0 -619
  71. package/dist/sol/dex/meteora/dlmm-bundle.d.ts +0 -39
  72. package/dist/sol/dex/meteora/dlmm-bundle.js +0 -189
  73. package/dist/sol/dex/meteora/dlmm.d.ts +0 -157
  74. package/dist/sol/dex/meteora/dlmm.js +0 -671
  75. package/dist/sol/dex/meteora/index.d.ts +0 -25
  76. package/dist/sol/dex/meteora/index.js +0 -65
  77. package/dist/sol/dex/meteora/types.d.ts +0 -787
  78. package/dist/sol/dex/meteora/types.js +0 -110
  79. package/dist/sol/dex/orca/index.d.ts +0 -10
  80. package/dist/sol/dex/orca/index.js +0 -16
  81. package/dist/sol/dex/orca/orca-bundle.d.ts +0 -41
  82. package/dist/sol/dex/orca/orca-bundle.js +0 -173
  83. package/dist/sol/dex/orca/orca.d.ts +0 -65
  84. package/dist/sol/dex/orca/orca.js +0 -474
  85. package/dist/sol/dex/orca/types.d.ts +0 -263
  86. package/dist/sol/dex/orca/types.js +0 -38
  87. package/dist/sol/dex/orca/wavebreak-bundle.d.ts +0 -34
  88. package/dist/sol/dex/orca/wavebreak-bundle.js +0 -198
  89. package/dist/sol/dex/orca/wavebreak-types.d.ts +0 -227
  90. package/dist/sol/dex/orca/wavebreak-types.js +0 -23
  91. package/dist/sol/dex/orca/wavebreak.d.ts +0 -78
  92. package/dist/sol/dex/orca/wavebreak.js +0 -497
  93. package/dist/sol/dex/pump/index.d.ts +0 -9
  94. package/dist/sol/dex/pump/index.js +0 -14
  95. package/dist/sol/dex/pump/pump-bundle.d.ts +0 -92
  96. package/dist/sol/dex/pump/pump-bundle.js +0 -383
  97. package/dist/sol/dex/pump/pump-swap-bundle.d.ts +0 -103
  98. package/dist/sol/dex/pump/pump-swap-bundle.js +0 -380
  99. package/dist/sol/dex/pump/pump-swap.d.ts +0 -46
  100. package/dist/sol/dex/pump/pump-swap.js +0 -199
  101. package/dist/sol/dex/pump/pump.d.ts +0 -35
  102. package/dist/sol/dex/pump/pump.js +0 -352
  103. package/dist/sol/dex/pump/types.d.ts +0 -215
  104. package/dist/sol/dex/pump/types.js +0 -5
  105. package/dist/sol/dex/raydium/index.d.ts +0 -8
  106. package/dist/sol/dex/raydium/index.js +0 -12
  107. package/dist/sol/dex/raydium/launchlab.d.ts +0 -68
  108. package/dist/sol/dex/raydium/launchlab.js +0 -210
  109. package/dist/sol/dex/raydium/raydium-bundle.d.ts +0 -64
  110. package/dist/sol/dex/raydium/raydium-bundle.js +0 -324
  111. package/dist/sol/dex/raydium/raydium.d.ts +0 -40
  112. package/dist/sol/dex/raydium/raydium.js +0 -366
  113. package/dist/sol/dex/raydium/types.d.ts +0 -240
  114. package/dist/sol/dex/raydium/types.js +0 -5
  115. package/dist/sol/index.d.ts +0 -11
  116. package/dist/sol/index.js +0 -18
  117. package/dist/sol/jito/bundle.d.ts +0 -90
  118. package/dist/sol/jito/bundle.js +0 -263
  119. package/dist/sol/jito/index.d.ts +0 -7
  120. package/dist/sol/jito/index.js +0 -7
  121. package/dist/sol/jito/tip.d.ts +0 -51
  122. package/dist/sol/jito/tip.js +0 -83
  123. package/dist/sol/jito/types.d.ts +0 -100
  124. package/dist/sol/jito/types.js +0 -5
  125. package/dist/sol/nozomi/client.d.ts +0 -63
  126. package/dist/sol/nozomi/client.js +0 -222
  127. package/dist/sol/nozomi/index.d.ts +0 -8
  128. package/dist/sol/nozomi/index.js +0 -8
  129. package/dist/sol/nozomi/tip.d.ts +0 -50
  130. package/dist/sol/nozomi/tip.js +0 -80
  131. package/dist/sol/nozomi/types.d.ts +0 -96
  132. package/dist/sol/nozomi/types.js +0 -5
  133. package/dist/sol/token/create-complete.d.ts +0 -115
  134. package/dist/sol/token/create-complete.js +0 -235
  135. package/dist/sol/token/create-token.d.ts +0 -57
  136. package/dist/sol/token/create-token.js +0 -230
  137. package/dist/sol/token/index.d.ts +0 -9
  138. package/dist/sol/token/index.js +0 -14
  139. package/dist/sol/token/metadata-upload.d.ts +0 -86
  140. package/dist/sol/token/metadata-upload.js +0 -173
  141. package/dist/sol/token/metadata.d.ts +0 -92
  142. package/dist/sol/token/metadata.js +0 -274
  143. package/dist/sol/token/types.d.ts +0 -153
  144. package/dist/sol/token/types.js +0 -5
  145. package/dist/sol/types.d.ts +0 -176
  146. package/dist/sol/types.js +0 -7
  147. package/dist/sol/utils/balance.d.ts +0 -160
  148. package/dist/sol/utils/balance.js +0 -638
  149. package/dist/sol/utils/connection.d.ts +0 -78
  150. package/dist/sol/utils/connection.js +0 -168
  151. package/dist/sol/utils/index.d.ts +0 -9
  152. package/dist/sol/utils/index.js +0 -9
  153. package/dist/sol/utils/lp-inspect.d.ts +0 -129
  154. package/dist/sol/utils/lp-inspect.js +0 -900
  155. package/dist/sol/utils/transfer.d.ts +0 -196
  156. package/dist/sol/utils/transfer.js +0 -307
  157. package/dist/sol/utils/wallet.d.ts +0 -107
  158. package/dist/sol/utils/wallet.js +0 -210
@@ -1,603 +0,0 @@
1
- /**
2
- * Jupiter Lend API (Jupiter Earn)
3
- * @module sol/dex/jup/lend
4
- *
5
- * Lend API 提供存款赚息功能
6
- * 用户可以存入代币获取 APY 收益
7
- */
8
- import { jupGet, jupPost } from './client.js';
9
- // ============================================================================
10
- // Deposit - 存款
11
- // ============================================================================
12
- /**
13
- * 构建存款交易
14
- *
15
- * 将代币存入 Jupiter Earn 赚取利息。
16
- *
17
- * @param params 存款参数
18
- * @param config Jupiter 配置
19
- * @returns 未签名交易
20
- *
21
- * @example
22
- * ```typescript
23
- * import { Sol } from 'four-flap-meme-sdk'
24
- *
25
- * Sol.setJupiterConfig({ apiKey: 'your-api-key' })
26
- *
27
- * // 存入 5 USDC
28
- * const result = await Sol.buildLendDeposit({
29
- * asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
30
- * signer: wallet.publicKey.toBase58(),
31
- * amount: '5', // 5 USDC
32
- * })
33
- *
34
- * // 签名并发送
35
- * const tx = VersionedTransaction.deserialize(
36
- * Buffer.from(result.transaction, 'base64')
37
- * )
38
- * tx.sign([wallet])
39
- * const signature = await connection.sendTransaction(tx)
40
- * ```
41
- */
42
- export async function buildLendDeposit(params, config) {
43
- return jupPost('/lend/v1/earn/deposit', params, config);
44
- }
45
- // ============================================================================
46
- // Withdraw - 取款
47
- // ============================================================================
48
- /**
49
- * 构建取款交易
50
- *
51
- * 从 Jupiter Earn 取出存款和收益。
52
- *
53
- * @param params 取款参数
54
- * @param config Jupiter 配置
55
- * @returns 未签名交易
56
- *
57
- * @example
58
- * ```typescript
59
- * // 取出 5 USDC
60
- * const result = await Sol.buildLendWithdraw({
61
- * asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
62
- * signer: wallet.publicKey.toBase58(),
63
- * amount: '5',
64
- * })
65
- *
66
- * // 签名并发送
67
- * const tx = VersionedTransaction.deserialize(
68
- * Buffer.from(result.transaction, 'base64')
69
- * )
70
- * tx.sign([wallet])
71
- * await connection.sendTransaction(tx)
72
- * ```
73
- */
74
- export async function buildLendWithdraw(params, config) {
75
- return jupPost('/lend/v1/earn/withdraw', params, config);
76
- }
77
- // ============================================================================
78
- // Mint - 按份额存款
79
- // ============================================================================
80
- /**
81
- * 构建 Mint 交易 (按份额存款)
82
- *
83
- * 使用份额 (shares) 而非代币数量来存款。
84
- * 这是更底层的接口,适合精确控制份额的场景。
85
- *
86
- * @param params Mint 参数
87
- * @param config Jupiter 配置
88
- * @returns 未签名交易
89
- *
90
- * @example
91
- * ```typescript
92
- * const result = await Sol.buildLendMint({
93
- * asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
94
- * signer: wallet.publicKey.toBase58(),
95
- * shares: '1000000', // 份额数量
96
- * })
97
- * ```
98
- */
99
- export async function buildLendMint(params, config) {
100
- return jupPost('/lend/v1/earn/mint', params, config);
101
- }
102
- // ============================================================================
103
- // Burn - 按份额取款
104
- // ============================================================================
105
- /**
106
- * 构建 Burn 交易 (按份额取款)
107
- *
108
- * 使用份额 (shares) 而非代币数量来取款。
109
- * 这是更底层的接口,适合精确控制份额的场景。
110
- *
111
- * @param params Burn 参数
112
- * @param config Jupiter 配置
113
- * @returns 未签名交易
114
- *
115
- * @example
116
- * ```typescript
117
- * const result = await Sol.buildLendBurn({
118
- * asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
119
- * signer: wallet.publicKey.toBase58(),
120
- * shares: '1000000', // 份额数量
121
- * })
122
- * ```
123
- */
124
- export async function buildLendBurn(params, config) {
125
- return jupPost('/lend/v1/earn/burn', params, config);
126
- }
127
- // ============================================================================
128
- // Redeem - 按份额赎回
129
- // ============================================================================
130
- /**
131
- * 构建 Redeem 交易 (按份额赎回)
132
- *
133
- * 与 Burn 类似,使用份额来赎回代币。
134
- *
135
- * @param params Redeem 参数
136
- * @param config Jupiter 配置
137
- * @returns 未签名交易
138
- *
139
- * @example
140
- * ```typescript
141
- * const result = await Sol.buildLendRedeem({
142
- * asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
143
- * signer: wallet.publicKey.toBase58(),
144
- * shares: '1000000',
145
- * })
146
- * ```
147
- */
148
- export async function buildLendRedeem(params, config) {
149
- return jupPost('/lend/v1/earn/redeem', params, config);
150
- }
151
- // ============================================================================
152
- // Instructions - 获取分解指令
153
- // ============================================================================
154
- /**
155
- * 获取存款指令
156
- *
157
- * 返回单个指令而非完整交易,适合自定义组装交易。
158
- *
159
- * @param params 存款参数
160
- * @param config Jupiter 配置
161
- * @returns 指令
162
- *
163
- * @example
164
- * ```typescript
165
- * const instruction = await Sol.getLendDepositInstruction({
166
- * asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
167
- * signer: wallet.publicKey.toBase58(),
168
- * amount: '5',
169
- * })
170
- *
171
- * // 反序列化为 TransactionInstruction
172
- * const ix = new TransactionInstruction({
173
- * programId: new PublicKey(instruction.programId),
174
- * keys: instruction.accounts.map(acc => ({
175
- * pubkey: new PublicKey(acc.pubkey),
176
- * isSigner: acc.isSigner,
177
- * isWritable: acc.isWritable,
178
- * })),
179
- * data: Buffer.from(instruction.data, 'base64'),
180
- * })
181
- * ```
182
- */
183
- export async function getLendDepositInstruction(params, config) {
184
- return jupPost('/lend/v1/earn/deposit-instructions', params, config);
185
- }
186
- /**
187
- * 获取取款指令
188
- *
189
- * @param params 取款参数
190
- * @param config Jupiter 配置
191
- * @returns 指令
192
- */
193
- export async function getLendWithdrawInstruction(params, config) {
194
- return jupPost('/lend/v1/earn/withdraw-instructions', params, config);
195
- }
196
- /**
197
- * 获取 Mint 指令
198
- *
199
- * @param params Mint 参数
200
- * @param config Jupiter 配置
201
- * @returns 指令
202
- */
203
- export async function getLendMintInstruction(params, config) {
204
- return jupPost('/lend/v1/earn/mint-instructions', params, config);
205
- }
206
- /**
207
- * 获取 Burn 指令
208
- *
209
- * @param params Burn 参数
210
- * @param config Jupiter 配置
211
- * @returns 指令
212
- */
213
- export async function getLendBurnInstruction(params, config) {
214
- return jupPost('/lend/v1/earn/burn-instructions', params, config);
215
- }
216
- /**
217
- * 获取 Redeem 指令
218
- *
219
- * @param params Redeem 参数
220
- * @param config Jupiter 配置
221
- * @returns 指令
222
- */
223
- export async function getLendRedeemInstruction(params, config) {
224
- return jupPost('/lend/v1/earn/redeem-instructions', params, config);
225
- }
226
- // ============================================================================
227
- // Tokens - 获取支持的代币
228
- // ============================================================================
229
- /**
230
- * 获取所有 Earn 支持的代币
231
- *
232
- * 返回详细的代币信息,包括:
233
- * - jl 代币地址和底层资产地址
234
- * - 当前收益率 (APY)
235
- * - 总存款量和总供应量
236
- * - 份额转换比率
237
- * - 流动性数据
238
- *
239
- * @param config Jupiter 配置
240
- * @returns 代币信息数组
241
- *
242
- * @example
243
- * ```typescript
244
- * const tokens = await Sol.getEarnTokens()
245
- *
246
- * tokens.forEach(token => {
247
- * // 计算 APY (基点转百分比)
248
- * const apy = Number(token.totalRate) / 100
249
- *
250
- * console.log(`${token.symbol}:`)
251
- * console.log(` APY: ${apy.toFixed(2)}%`)
252
- * console.log(` 底层资产: ${token.asset.symbol}`)
253
- * console.log(` 价格: $${token.asset.price}`)
254
- * console.log(` jl代币地址: ${token.address}`)
255
- * console.log(` 资产地址: ${token.assetAddress}`)
256
- * })
257
- *
258
- * // 示例输出:
259
- * // jlUSDC:
260
- * // APY: 5.46%
261
- * // 底层资产: USDC
262
- * // 价格: $0.999730840125
263
- * ```
264
- */
265
- export async function getEarnTokens(config) {
266
- return jupGet('/lend/v1/earn/tokens', {}, config);
267
- }
268
- /**
269
- * 获取单个代币的 Earn 信息
270
- *
271
- * @param assetMint 底层资产 Mint 地址
272
- * @param config Jupiter 配置
273
- * @returns 代币信息或 null
274
- *
275
- * @example
276
- * ```typescript
277
- * const usdcInfo = await Sol.getEarnTokenByAsset(
278
- * 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
279
- * )
280
- *
281
- * if (usdcInfo) {
282
- * console.log('USDC APY:', Number(usdcInfo.totalRate) / 100, '%')
283
- * }
284
- * ```
285
- */
286
- export async function getEarnTokenByAsset(assetMint, config) {
287
- const tokens = await getEarnTokens(config);
288
- return tokens.find(t => t.assetAddress === assetMint) || null;
289
- }
290
- /**
291
- * 获取所有 Earn APY 信息
292
- *
293
- * @param config Jupiter 配置
294
- * @returns APY 映射 { assetMint: { symbol, apy, supplyRate, rewardsRate } }
295
- *
296
- * @example
297
- * ```typescript
298
- * const apys = await Sol.getEarnApys()
299
- *
300
- * // { 'EPj...': { symbol: 'USDC', apy: 5.46, ... }, ... }
301
- * console.log('USDC APY:', apys['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'].apy)
302
- * ```
303
- */
304
- export async function getEarnApys(config) {
305
- const tokens = await getEarnTokens(config);
306
- const result = {};
307
- for (const token of tokens) {
308
- result[token.assetAddress] = {
309
- symbol: token.asset.symbol,
310
- jlSymbol: token.symbol,
311
- apy: Number(token.totalRate) / 100, // 基点转百分比
312
- supplyRate: Number(token.supplyRate) / 100,
313
- rewardsRate: Number(token.rewardsRate) / 100,
314
- price: parseFloat(token.asset.price),
315
- };
316
- }
317
- return result;
318
- }
319
- /**
320
- * 计算份额对应的资产数量
321
- *
322
- * @param shares 份额数量 (最小单位)
323
- * @param tokenInfo 代币信息
324
- * @returns 资产数量 (最小单位)
325
- */
326
- export function sharesToAssets(shares, tokenInfo) {
327
- const sharesNum = BigInt(shares);
328
- const convertToAssets = BigInt(tokenInfo.convertToAssets);
329
- // convertToAssets 是 1e6 份额对应的资产数量
330
- return sharesNum * convertToAssets / BigInt(1000000);
331
- }
332
- /**
333
- * 计算资产数量对应的份额
334
- *
335
- * @param assets 资产数量 (最小单位)
336
- * @param tokenInfo 代币信息
337
- * @returns 份额数量 (最小单位)
338
- */
339
- export function assetsToShares(assets, tokenInfo) {
340
- const assetsNum = BigInt(assets);
341
- const convertToShares = BigInt(tokenInfo.convertToShares);
342
- // convertToShares 是 1e6 资产对应的份额数量
343
- return assetsNum * convertToShares / BigInt(1000000);
344
- }
345
- // ============================================================================
346
- // Positions - 用户仓位
347
- // ============================================================================
348
- /**
349
- * 获取用户的 Earn 仓位
350
- *
351
- * 返回用户在所有 Earn 代币的存款仓位。
352
- *
353
- * @param users 用户地址(支持单个或多个,逗号分隔)
354
- * @param config Jupiter 配置
355
- * @returns 仓位数组
356
- *
357
- * @example
358
- * ```typescript
359
- * const positions = await Sol.getEarnPositions(
360
- * '9yFqMjJgsEcZ8GnEtFqxw1oFbPPVpypMVgYzQWgECFNy'
361
- * )
362
- *
363
- * positions.forEach(pos => {
364
- * if (BigInt(pos.shares) > 0n) {
365
- * console.log(`${pos.token.asset.symbol}:`)
366
- * console.log(` 份额: ${pos.shares}`)
367
- * console.log(` 底层资产: ${pos.underlyingAssets}`)
368
- * console.log(` APY: ${Number(pos.token.totalRate) / 100}%`)
369
- * }
370
- * })
371
- * ```
372
- */
373
- export async function getEarnPositions(users, config) {
374
- const usersParam = Array.isArray(users) ? users.join(',') : users;
375
- return jupGet('/lend/v1/earn/positions', { users: usersParam }, config);
376
- }
377
- /**
378
- * 获取用户在指定代币的 Earn 仓位
379
- *
380
- * @param user 用户地址
381
- * @param assetMint 底层资产 Mint 地址
382
- * @param config Jupiter 配置
383
- * @returns 仓位或 null
384
- *
385
- * @example
386
- * ```typescript
387
- * const usdcPosition = await Sol.getEarnPositionByAsset(
388
- * '9yFqMjJgsEcZ8GnEtFqxw1oFbPPVpypMVgYzQWgECFNy',
389
- * 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
390
- * )
391
- *
392
- * if (usdcPosition && BigInt(usdcPosition.shares) > 0n) {
393
- * console.log('USDC 存款:', usdcPosition.underlyingAssets)
394
- * }
395
- * ```
396
- */
397
- export async function getEarnPositionByAsset(user, assetMint, config) {
398
- const positions = await getEarnPositions(user, config);
399
- return positions.find(p => p.token.assetAddress === assetMint) || null;
400
- }
401
- /**
402
- * 获取用户的非零 Earn 仓位
403
- *
404
- * @param user 用户地址
405
- * @param config Jupiter 配置
406
- * @returns 非零仓位数组
407
- *
408
- * @example
409
- * ```typescript
410
- * const activePositions = await Sol.getActiveEarnPositions(
411
- * '9yFqMjJgsEcZ8GnEtFqxw1oFbPPVpypMVgYzQWgECFNy'
412
- * )
413
- *
414
- * activePositions.forEach(pos => {
415
- * console.log(`${pos.token.asset.symbol}: ${pos.underlyingAssets}`)
416
- * })
417
- * ```
418
- */
419
- export async function getActiveEarnPositions(user, config) {
420
- const positions = await getEarnPositions(user, config);
421
- return positions.filter(p => BigInt(p.shares) > 0n || BigInt(p.underlyingBalance) > 0n);
422
- }
423
- /**
424
- * 获取用户的 Earn 资产总值 (USD)
425
- *
426
- * @param user 用户地址
427
- * @param config Jupiter 配置
428
- * @returns 总值 USD
429
- *
430
- * @example
431
- * ```typescript
432
- * const totalValue = await Sol.getEarnTotalValue(
433
- * '9yFqMjJgsEcZ8GnEtFqxw1oFbPPVpypMVgYzQWgECFNy'
434
- * )
435
- * console.log('Earn 总值: $' + totalValue.toFixed(2))
436
- * ```
437
- */
438
- export async function getEarnTotalValue(user, config) {
439
- const positions = await getEarnPositions(user, config);
440
- let totalValue = 0;
441
- for (const pos of positions) {
442
- const underlyingAssets = BigInt(pos.underlyingAssets);
443
- if (underlyingAssets > 0n) {
444
- const price = parseFloat(pos.token.asset.price);
445
- const decimals = pos.token.decimals;
446
- const uiAmount = Number(underlyingAssets) / Math.pow(10, decimals);
447
- totalValue += uiAmount * price;
448
- }
449
- }
450
- return totalValue;
451
- }
452
- // ============================================================================
453
- // Earnings - 收益统计
454
- // ============================================================================
455
- /**
456
- * 获取用户的收益统计
457
- *
458
- * 返回用户的存款、取款和收益汇总。
459
- *
460
- * @param user 用户地址(可选,不传则获取所有)
461
- * @param config Jupiter 配置
462
- * @returns 收益信息数组
463
- *
464
- * @example
465
- * ```typescript
466
- * const earnings = await Sol.getEarnEarnings(
467
- * '9yFqMjJgsEcZ8GnEtFqxw1oFbPPVpypMVgYzQWgECFNy'
468
- * )
469
- *
470
- * earnings.forEach(e => {
471
- * console.log(`代币: ${e.address}`)
472
- * console.log(` 总存款: ${e.totalDeposits}`)
473
- * console.log(` 总取款: ${e.totalWithdraws}`)
474
- * console.log(` 当前余额: ${e.totalBalance}`)
475
- * console.log(` 收益: ${e.earnings}`)
476
- * })
477
- * ```
478
- */
479
- export async function getEarnEarnings(user, config) {
480
- const params = {};
481
- if (user) {
482
- params.user = user;
483
- }
484
- return jupGet('/lend/v1/earn/earnings', params, config);
485
- }
486
- /**
487
- * 获取用户在指定代币的收益
488
- *
489
- * @param user 用户地址
490
- * @param jlTokenAddress jl 代币地址(如 jlUSDC 地址)
491
- * @param config Jupiter 配置
492
- * @returns 收益信息或 null
493
- */
494
- export async function getEarnEarningsByToken(user, jlTokenAddress, config) {
495
- const earnings = await getEarnEarnings(user, config);
496
- return earnings.find(e => e.address === jlTokenAddress) || null;
497
- }
498
- /**
499
- * 获取用户的总收益汇总
500
- *
501
- * @param user 用户地址
502
- * @param config Jupiter 配置
503
- * @returns 汇总信息
504
- *
505
- * @example
506
- * ```typescript
507
- * const summary = await Sol.getEarnEarningsSummary(user)
508
- * console.log('总存款:', summary.totalDeposits)
509
- * console.log('总取款:', summary.totalWithdraws)
510
- * console.log('总收益:', summary.totalEarnings)
511
- * ```
512
- */
513
- export async function getEarnEarningsSummary(user, config) {
514
- const earnings = await getEarnEarnings(user, config);
515
- let totalDeposits = 0n;
516
- let totalWithdraws = 0n;
517
- let totalBalance = 0n;
518
- let totalEarnings = 0n;
519
- for (const e of earnings) {
520
- totalDeposits += BigInt(e.totalDeposits || '0');
521
- totalWithdraws += BigInt(e.totalWithdraws || '0');
522
- totalBalance += BigInt(e.totalBalance || '0');
523
- totalEarnings += BigInt(e.earnings || '0');
524
- }
525
- return {
526
- totalDeposits,
527
- totalWithdraws,
528
- totalBalance,
529
- totalEarnings,
530
- };
531
- }
532
- // ============================================================================
533
- // 便捷方法
534
- // ============================================================================
535
- /** 常见的 Earn 支持代币 */
536
- export const LEND_SUPPORTED_ASSETS = {
537
- /** USDC */
538
- USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
539
- /** USDT */
540
- USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
541
- /** SOL */
542
- SOL: 'So11111111111111111111111111111111111111112',
543
- };
544
- /**
545
- * 存入 USDC
546
- *
547
- * @param signer 签名者公钥
548
- * @param amount 数量 (UI 数量,如 "100" 表示 100 USDC)
549
- * @param config Jupiter 配置
550
- * @returns 未签名交易
551
- */
552
- export async function depositUsdc(signer, amount, config) {
553
- return buildLendDeposit({
554
- asset: LEND_SUPPORTED_ASSETS.USDC,
555
- signer,
556
- amount,
557
- }, config);
558
- }
559
- /**
560
- * 取出 USDC
561
- *
562
- * @param signer 签名者公钥
563
- * @param amount 数量
564
- * @param config Jupiter 配置
565
- * @returns 未签名交易
566
- */
567
- export async function withdrawUsdc(signer, amount, config) {
568
- return buildLendWithdraw({
569
- asset: LEND_SUPPORTED_ASSETS.USDC,
570
- signer,
571
- amount,
572
- }, config);
573
- }
574
- /**
575
- * 存入 SOL
576
- *
577
- * @param signer 签名者公钥
578
- * @param amount 数量 (UI 数量,如 "1" 表示 1 SOL)
579
- * @param config Jupiter 配置
580
- * @returns 未签名交易
581
- */
582
- export async function depositSol(signer, amount, config) {
583
- return buildLendDeposit({
584
- asset: LEND_SUPPORTED_ASSETS.SOL,
585
- signer,
586
- amount,
587
- }, config);
588
- }
589
- /**
590
- * 取出 SOL
591
- *
592
- * @param signer 签名者公钥
593
- * @param amount 数量
594
- * @param config Jupiter 配置
595
- * @returns 未签名交易
596
- */
597
- export async function withdrawSol(signer, amount, config) {
598
- return buildLendWithdraw({
599
- asset: LEND_SUPPORTED_ASSETS.SOL,
600
- signer,
601
- amount,
602
- }, config);
603
- }