@carrot-protocol/clend-vaults-rpc 0.0.29 → 0.0.30-exec-fee-2-dev-24ca68e

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.
package/dist/math.d.ts CHANGED
@@ -36,3 +36,12 @@ export declare function usdToAmount(usdAmount: number, decimals: number, price:
36
36
  */
37
37
  export declare function convertSharesToAsset(vaultNav: number, sharesAmountUi: number, assetDecimals: number, assetPrice: number): BN;
38
38
  export declare function convertAssetToShares(vaultNav: number, assetAmount: BN, assetDecimals: number, sharesDecimals: number, assetPrice: number): BN;
39
+ /**
40
+ * Adjusts an amount upwards to compensate for potential swap slippage,
41
+ * assuming worst-case based on slippageBps.
42
+ *
43
+ * @param amountToAdjust - The amount to adjust (native units, BN), typically after cost adjustments.
44
+ * @param slippageBps - The maximum slippage tolerance in basis points (e.g., 100 for 1%).
45
+ * @returns Adjusted amount (native units, BN), slightly more than the input amount. Returns input amount if slippageBps is zero or invalid.
46
+ */
47
+ export declare function adjustAmountForSlippage(amountToAdjust: BN, slippageBps: number): BN;
package/dist/math.js CHANGED
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.calculateVaultNav = calculateVaultNav;
4
7
  exports.usdEarned = usdEarned;
@@ -9,7 +12,10 @@ exports.amountToUsd = amountToUsd;
9
12
  exports.usdToAmount = usdToAmount;
10
13
  exports.convertSharesToAsset = convertSharesToAsset;
11
14
  exports.convertAssetToShares = convertAssetToShares;
15
+ exports.adjustAmountForSlippage = adjustAmountForSlippage;
16
+ const anchor_1 = require("@coral-xyz/anchor");
12
17
  const utils_1 = require("./utils");
18
+ const decimal_js_1 = __importDefault(require("decimal.js"));
13
19
  /**
14
20
  * Computes the net asset value (NAV) per share based on vault equity and share supply.
15
21
  */
@@ -78,4 +84,37 @@ function convertAssetToShares(vaultNav, assetAmount, assetDecimals, sharesDecima
78
84
  const assetUsd = amountToUsd(assetAmount, assetDecimals, assetPrice);
79
85
  return usdToAmount(assetUsd, sharesDecimals, vaultNav);
80
86
  }
87
+ /**
88
+ * Adjusts an amount upwards to compensate for potential swap slippage,
89
+ * assuming worst-case based on slippageBps.
90
+ *
91
+ * @param amountToAdjust - The amount to adjust (native units, BN), typically after cost adjustments.
92
+ * @param slippageBps - The maximum slippage tolerance in basis points (e.g., 100 for 1%).
93
+ * @returns Adjusted amount (native units, BN), slightly more than the input amount. Returns input amount if slippageBps is zero or invalid.
94
+ */
95
+ function adjustAmountForSlippage(amountToAdjust, slippageBps) {
96
+ if (slippageBps <= 0) {
97
+ return amountToAdjust; // No adjustment if no slippage tolerance
98
+ }
99
+ const S = new decimal_js_1.default(slippageBps).div(10000); // Slippage factor S as decimal
100
+ // Ensure S is less than 1 (100% slippage)
101
+ if (S.gte(1)) {
102
+ return amountToAdjust;
103
+ }
104
+ // Formula: B_actual ≈ B_ideal / (1 - S)
105
+ // We borrow slightly more, anticipating the swap output will be worth less by factor S.
106
+ const denominator = new decimal_js_1.default(1).sub(S);
107
+ // Should not happen with S < 1, but safety check
108
+ if (denominator.isZero() ||
109
+ denominator.isNaN() ||
110
+ !denominator.isFinite() ||
111
+ denominator.isNegative()) {
112
+ return amountToAdjust;
113
+ }
114
+ const amountToAdjustDecimal = new decimal_js_1.default(amountToAdjust.toString());
115
+ const adjustedAmountDecimal = amountToAdjustDecimal.div(denominator);
116
+ // Round up when increasing amount due to needing more input for slippage
117
+ const adjustedAmount = new anchor_1.BN(adjustedAmountDecimal.ceil().toFixed());
118
+ return adjustedAmount;
119
+ }
81
120
  //# sourceMappingURL=math.js.map
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":";;AAOA,8CAQC;AAKD,8BAEC;AAQD,gCAGC;AAQD,gCAEC;AAGD,sEAUC;AAKD,kCAMC;AAKD,kCAMC;AAKD,oDAWC;AAED,oDASC;AAvGD,mCAAkC;AAElC;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,cAAsB;IAEtB,IAAI,MAAM,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,MAAM,GAAG,cAAc,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,QAAgB,EAAE,GAAW;IACrD,OAAO,QAAQ,GAAG,GAAG,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,QAAgB;IAC3D,8BAA8B;IAC9B,OAAO,IAAA,eAAO,EAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,MAAU,EAAE,QAAgB;IACrD,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC;AAC5C,CAAC;AAED,kCAAkC;AAClC,SAAgB,6BAA6B,CAC3C,sBAAiC;IAEjC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC7C,oCAAoC;QACpC,aAAa;YACX,aAAa,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,MAAU,EACV,QAAgB,EAChB,KAAa;IAEb,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,SAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,OAAO,UAAU,CAAC,SAAS,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,cAAsB,EACtB,aAAqB,EACrB,UAAkB;IAElB,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,WAAe,EACf,aAAqB,EACrB,cAAsB,EACtB,UAAkB;IAElB,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
package/dist/program.d.ts CHANGED
@@ -15,14 +15,21 @@ export declare class ClendVaultsProgram {
15
15
  updateAssetFlags(vault: web3.PublicKey, manager: web3.PublicKey, assetMint: web3.PublicKey, newFlags: BN): Promise<web3.TransactionInstruction>;
16
16
  updateClendAccountFlags(vault: web3.PublicKey, manager: web3.PublicKey, clendAccount: web3.PublicKey, newFlags: BN): Promise<web3.TransactionInstruction>;
17
17
  updateVaultFlags(vault: web3.PublicKey, manager: web3.PublicKey, newFlags: BN): Promise<web3.TransactionInstruction>;
18
- issue(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, minAmountOut: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
18
+ userSession(vault: web3.PublicKey, manager: web3.PublicKey, user: web3.PublicKey, op: "issue" | "redeem", endSessionIxIndex: number): Promise<{
19
+ startIx: web3.TransactionInstruction;
20
+ endIx: web3.TransactionInstruction;
21
+ }>;
22
+ issue(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, minAmountOut: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<{
23
+ issueStartIxns: web3.TransactionInstruction[];
24
+ issueEndIxns: web3.TransactionInstruction[];
25
+ }>;
19
26
  redeem(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, minAmountOut: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
20
27
  clendAccountDeposit(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetMintTokenProgram: web3.PublicKey, amount: BN, vaultReserve: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
21
28
  clendAccountWithdraw(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetMintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
22
29
  clendAccountRepay(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, mintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
23
- clendAccountBorrow(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, mintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
30
+ clendAccountBorrow(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, mintTokenProgram: web3.PublicKey, userSession: web3.PublicKey | null, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
24
31
  clendAccountWithdrawEmissions(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, clendBank: web3.PublicKey, assetMint: web3.PublicKey, assetTokenProgram: web3.PublicKey): Promise<web3.TransactionInstruction>;
25
- swap(vault: web3.PublicKey, vaultManager: web3.PublicKey, assetInMint: web3.PublicKey, assetOutMint: web3.PublicKey, vaultAssetInReserve: web3.PublicKey, vaultAssetOutReserve: web3.PublicKey, swapData: Buffer, remainingAccounts: web3.AccountMeta[], swapProgram?: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
32
+ swap(vault: web3.PublicKey, vaultManager: web3.PublicKey, assetInMint: web3.PublicKey, assetOutMint: web3.PublicKey, vaultAssetInOracle: web3.PublicKey, vaultAssetOutOracle: web3.PublicKey, vaultAssetInReserve: web3.PublicKey, vaultAssetOutReserve: web3.PublicKey, userSession: web3.PublicKey | null, swapData: Buffer, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
26
33
  distributeFees(vault: web3.PublicKey, manager: web3.PublicKey, shares: web3.PublicKey, sharesDestinationOwner: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
27
34
  updateSbOraclePrice(vault: web3.PublicKey, shares: web3.PublicKey, queue: web3.PublicKey, feed: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction>;
28
35
  updateAssetOracle(vault: web3.PublicKey, manager: web3.PublicKey, assetMint: web3.PublicKey, oracleMaxAge: number | null, oracle: web3.PublicKey | null): Promise<web3.TransactionInstruction>;
package/dist/program.js CHANGED
@@ -127,25 +127,47 @@ class ClendVaultsProgram {
127
127
  .instruction();
128
128
  return ix;
129
129
  }
130
- // -----------------
131
- // Shares ops
132
- // -----------------
130
+ async userSession(vault, manager, user, op, endSessionIxIndex) {
131
+ const userSession = (0, addresses_1.getUserSessionPda)(vault, user);
132
+ const args = {
133
+ op: op === "issue" ? 0 : 1,
134
+ endSessionIxIndex,
135
+ };
136
+ const startIx = await this.program.methods
137
+ .userSessionStart(args)
138
+ .accountsStrict({
139
+ vault,
140
+ userSession,
141
+ user,
142
+ manager,
143
+ instructions: anchor_1.web3.SYSVAR_INSTRUCTIONS_PUBKEY,
144
+ systemProgram: anchor_1.web3.SystemProgram.programId,
145
+ })
146
+ .instruction();
147
+ const endIx = await this.program.methods
148
+ .userSessionEnd()
149
+ .accountsStrict({
150
+ vault,
151
+ userSession,
152
+ manager,
153
+ })
154
+ .instruction();
155
+ return { startIx, endIx };
156
+ }
133
157
  async issue(vault, sharesMint, user, assetMint, assetOracle, amount, minAmountOut, assetTokenProgram, sharesTokenProgram, remainingAccounts) {
134
158
  // Vault reserve (owner is vault PDA)
135
159
  const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
136
160
  // User ATAs (owner is user)
137
161
  const userAssetAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, user, true, assetTokenProgram);
138
162
  const userSharesAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(sharesMint, user, true, sharesTokenProgram);
139
- const ixns = [];
163
+ const userSession = (0, addresses_1.getUserSessionPda)(vault, user);
164
+ const issueStartIxns = [];
140
165
  if (assetMint.equals(SOL_MINT)) {
141
166
  // if the asset is sol, wrap it before issue
142
- ixns.push(...createWSolTokenAccountIxns(user, amount));
167
+ issueStartIxns.push(...createWSolTokenAccountIxns(user, amount));
143
168
  }
144
- // for shares received
145
- const createUserSharesIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userSharesAccount, user, sharesMint, sharesTokenProgram);
146
- ixns.push(createUserSharesIx);
147
- const ix = await this.program.methods
148
- .issue({ amount, minAmountOut })
169
+ const issueStartIx = await this.program.methods
170
+ .issueStart({ amount })
149
171
  .accountsStrict({
150
172
  vault,
151
173
  shares: sharesMint,
@@ -153,21 +175,38 @@ class ClendVaultsProgram {
153
175
  assetOracle,
154
176
  vaultAssetReserve,
155
177
  userAssetAccount,
156
- userSharesAccount,
178
+ userSession,
157
179
  user,
158
180
  clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
159
181
  assetTokenProgram,
160
- sharesTokenProgram,
161
182
  })
162
183
  .remainingAccounts(remainingAccounts)
163
184
  .instruction();
164
- ixns.push(ix);
165
- return ixns;
185
+ issueStartIxns.push(issueStartIx);
186
+ // for shares received
187
+ const createUserSharesIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userSharesAccount, user, sharesMint, sharesTokenProgram);
188
+ const issueEndIx = await this.program.methods
189
+ .issueEnd({ minAmountOut })
190
+ .accountsStrict({
191
+ vault,
192
+ shares: sharesMint,
193
+ userSession,
194
+ user,
195
+ userSharesAccount,
196
+ sharesTokenProgram,
197
+ })
198
+ .instruction();
199
+ const issueEndIxns = [
200
+ createUserSharesIx,
201
+ issueEndIx,
202
+ ];
203
+ return { issueStartIxns, issueEndIxns };
166
204
  }
167
205
  async redeem(vault, sharesMint, user, assetMint, assetOracle, amount, minAmountOut, assetTokenProgram, sharesTokenProgram, remainingAccounts) {
168
206
  const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
169
207
  const userAssetAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, user, true, assetTokenProgram);
170
208
  const userSharesAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(sharesMint, user, true, sharesTokenProgram);
209
+ const userSession = (0, addresses_1.getUserSessionPda)(vault, user);
171
210
  // Make sure the user asset ATA exists
172
211
  const createUserAssetIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userAssetAccount, user, assetMint, assetTokenProgram);
173
212
  const ix = await this.program.methods
@@ -180,6 +219,7 @@ class ClendVaultsProgram {
180
219
  vaultAssetReserve,
181
220
  userAssetAccount,
182
221
  userSharesAccount,
222
+ userSession,
183
223
  user,
184
224
  clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
185
225
  assetTokenProgram,
@@ -194,9 +234,6 @@ class ClendVaultsProgram {
194
234
  }
195
235
  return ixns;
196
236
  }
197
- // -----------------
198
- // Clend-account ops (builders; vault PDA signs via seeds)
199
- // -----------------
200
237
  async clendAccountDeposit(vault, vaultManager, clendGroup, clendAccount, assetMint, assetMintTokenProgram, amount, vaultReserve, remainingAccounts) {
201
238
  const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
202
239
  const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
@@ -264,7 +301,7 @@ class ClendVaultsProgram {
264
301
  .instruction();
265
302
  return [ix];
266
303
  }
267
- async clendAccountBorrow(vault, vaultManager, clendGroup, clendAccount, assetMint, mintTokenProgram, amount, remainingAccounts) {
304
+ async clendAccountBorrow(vault, vaultManager, clendGroup, clendAccount, assetMint, assetOracle, mintTokenProgram, userSession, amount, remainingAccounts) {
268
305
  const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
269
306
  const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
270
307
  const bankLiquidityVaultAuthority = (0, clend_rpc_1.getBankLiquidityVaultAuthorityPda)(bank);
@@ -274,12 +311,14 @@ class ClendVaultsProgram {
274
311
  .accountsStrict({
275
312
  vault,
276
313
  assetMint,
314
+ assetOracle,
277
315
  clendGroup,
278
316
  clendAccount,
279
317
  bank,
280
318
  destinationTokenAccount,
281
319
  bankLiquidityVaultAuthority,
282
320
  bankLiquidityVault,
321
+ userSession,
283
322
  manager: vaultManager,
284
323
  tokenProgram: mintTokenProgram,
285
324
  clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
@@ -310,17 +349,20 @@ class ClendVaultsProgram {
310
349
  .instruction();
311
350
  return ix;
312
351
  }
313
- async swap(vault, vaultManager, assetInMint, assetOutMint, vaultAssetInReserve, vaultAssetOutReserve, swapData, remainingAccounts, swapProgram = addresses_1.JUPITER_SWAP_PROGRAM_ID) {
352
+ async swap(vault, vaultManager, assetInMint, assetOutMint, vaultAssetInOracle, vaultAssetOutOracle, vaultAssetInReserve, vaultAssetOutReserve, userSession, swapData, remainingAccounts) {
314
353
  const ix = await this.program.methods
315
354
  .swap({ swapData: Buffer.from(swapData) })
316
355
  .accountsStrict({
317
356
  vault,
318
357
  assetInMint,
319
358
  assetOutMint,
359
+ vaultAssetInOracle,
360
+ vaultAssetOutOracle,
320
361
  vaultAssetInReserve,
321
362
  vaultAssetOutReserve,
363
+ userSession,
322
364
  manager: vaultManager,
323
- swapProgram,
365
+ systemProgram: anchor_1.web3.SystemProgram.programId,
324
366
  })
325
367
  .remainingAccounts(remainingAccounts)
326
368
  .instruction();
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
package/dist/rpc.d.ts CHANGED
@@ -33,10 +33,10 @@ export declare class ClendVaultsClient {
33
33
  updateAssetFlags(vault: web3.PublicKey, assetMint: web3.PublicKey, newFlags: BN): Promise<string>;
34
34
  updateClendAccountFlags(vault: web3.PublicKey, clendAccount: web3.PublicKey, newFlags: BN): Promise<string>;
35
35
  updateVaultFlags(vault: web3.PublicKey, newFlags: BN): Promise<string>;
36
- issue(vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN): Promise<string>;
37
- prepareIssueIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN): Promise<web3.TransactionInstruction[]>;
38
- redeem(vault: web3.PublicKey, assetMint: web3.PublicKey, sharesAmount: BN, minAmountOut: BN): Promise<string>;
39
- prepareRedeemIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN): Promise<web3.TransactionInstruction[]>;
36
+ issue(vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN, vaultManager?: web3.Signer): Promise<string>;
37
+ prepareIssueIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN, additionalIxnCount: number): Promise<web3.TransactionInstruction[]>;
38
+ redeem(vault: web3.PublicKey, assetMint: web3.PublicKey, sharesAmount: BN, minAmountOut: BN, vaultManager?: web3.Signer): Promise<string>;
39
+ prepareRedeemIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN, additionalIxnCount: number): Promise<web3.TransactionInstruction[]>;
40
40
  clendAccountDeposit(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
41
41
  clendAccountWithdraw(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
42
42
  clendAccountRepay(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN | number): Promise<string>;
package/dist/rpc.js CHANGED
@@ -74,9 +74,15 @@ class ClendVaultsClient {
74
74
  reserveEquity.push({ address: asset.reserve.address, equity: rEquity });
75
75
  vaultEquity += rEquity;
76
76
  }
77
+ const sharesSupplyUi = (0, math_1.amountToUi)(vault.sharesSupply, vault.sharesDecimals);
78
+ const adjustedSharesSupplyUi = (0, math_1.amountToUi)(vault.adjustedSharesSupply, vault.sharesDecimals);
79
+ const preFeeNav = (0, math_1.calculateVaultNav)(vaultEquity, sharesSupplyUi);
80
+ const postFeeNav = (0, math_1.calculateVaultNav)(vaultEquity, adjustedSharesSupplyUi);
77
81
  return {
78
82
  address: vault.address,
79
83
  vaultEquity,
84
+ preFeeNav,
85
+ postFeeNav,
80
86
  clendAccountEquity,
81
87
  reserveEquity,
82
88
  };
@@ -128,29 +134,52 @@ class ClendVaultsClient {
128
134
  const txSig = await this.send([ix]);
129
135
  return txSig;
130
136
  }
131
- async issue(vault, assetMint, amount, minAmountOut) {
132
- const ixns = await this.prepareIssueIxns(this.address(), vault, assetMint, amount, minAmountOut);
133
- const txSig = await this.send(ixns);
137
+ async issue(vault, assetMint, amount, minAmountOut, vaultManager) {
138
+ const ixns = await this.prepareIssueIxns(this.address(), vault, assetMint, amount, minAmountOut, 2);
139
+ const additionalSigners = vaultManager ? [vaultManager] : [];
140
+ const txSig = await this.send(ixns, additionalSigners);
134
141
  return txSig;
135
142
  }
136
- async prepareIssueIxns(user, vault, assetMint, amount, minAmountOut) {
143
+ async prepareIssueIxns(user, vault, assetMint, amount, minAmountOut, additionalIxnCount) {
137
144
  // get vault and asset data
138
145
  const vaultState = await this.getVault(vault);
139
146
  const assetData = vaultState.assets.find((a) => a.mint.address.equals(assetMint));
140
147
  const remainingAccounts = await buildEquityRemainingAccounts(vaultState, this.clendClient);
141
- const ixns = await this.program.issue(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
148
+ const { issueStartIxns, issueEndIxns } = await this.program.issue(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
149
+ const endSessionIxIndex = additionalIxnCount +
150
+ 1 + // userSessionStartIx
151
+ issueStartIxns.length +
152
+ issueEndIxns.length;
153
+ const { startIx: userSessionStartIx, endIx: userSessionEndIx } = await this.program.userSession(vault, vaultState.manager, user, "issue", endSessionIxIndex);
154
+ const ixns = [
155
+ userSessionStartIx,
156
+ ...issueStartIxns,
157
+ ...issueEndIxns,
158
+ userSessionEndIx,
159
+ ];
142
160
  return ixns;
143
161
  }
144
- async redeem(vault, assetMint, sharesAmount, minAmountOut) {
145
- const ixns = await this.prepareRedeemIxns(this.address(), vault, assetMint, sharesAmount, minAmountOut);
146
- const txSig = await this.send(ixns);
162
+ async redeem(vault, assetMint, sharesAmount, minAmountOut, vaultManager) {
163
+ const ixns = await this.prepareRedeemIxns(this.address(), vault, assetMint, sharesAmount, minAmountOut, 2);
164
+ const additionalSigners = vaultManager ? [vaultManager] : [];
165
+ const txSig = await this.send(ixns, additionalSigners);
147
166
  return txSig;
148
167
  }
149
- async prepareRedeemIxns(user, vault, assetMint, amount, minAmountOut) {
168
+ async prepareRedeemIxns(user, vault, assetMint, amount, minAmountOut, additionalIxnCount) {
150
169
  const vaultState = await this.getVault(vault);
151
170
  const assetData = vaultState.assets.find((a) => a.mint.address.equals(assetMint));
152
171
  const remainingAccounts = await buildEquityRemainingAccounts(vaultState, this.clendClient);
153
- return this.program.redeem(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
172
+ const redeemIxns = await this.program.redeem(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
173
+ const endSessionIxIndex = additionalIxnCount +
174
+ 1 + // userSessionStartIx
175
+ redeemIxns.length;
176
+ const { startIx: userSessionStartIx, endIx: userSessionEndIx } = await this.program.userSession(vault, vaultState.manager, user, "redeem", endSessionIxIndex);
177
+ const ixns = [
178
+ userSessionStartIx,
179
+ ...redeemIxns,
180
+ userSessionEndIx,
181
+ ];
182
+ return ixns;
154
183
  }
155
184
  async clendAccountDeposit(vault, clendAccount, assetMint, amount) {
156
185
  // fetch clend account data
@@ -219,7 +248,7 @@ class ClendVaultsClient {
219
248
  }
220
249
  const activeBankData = await this.clendClient.getBanks(clendAccountActiveBanks);
221
250
  const ra = (0, clend_rpc_1.getClendAccountRemainingAccounts)(activeBankData);
222
- const ixns = await this.program.clendAccountBorrow(vault, this.address(), clendAccountData.group, clendAccount, assetMint, assetData.mint.tokenProgram, amount, ra);
251
+ const ixns = await this.program.clendAccountBorrow(vault, this.address(), clendAccountData.group, clendAccount, assetMint, assetData.oracle.address, assetData.mint.tokenProgram, null, amount, ra);
223
252
  const txSig = await this.send(ixns);
224
253
  return txSig;
225
254
  }
@@ -409,9 +438,9 @@ class ClendVaultsClient {
409
438
  if (isIncrease && finalDebtDeltaUi > 0) {
410
439
  // how much debt is actually borrowable in UI terms
411
440
  const availableDebtUiRaw = (0, math_1.amountToUi)(debtBankData.availableSupply, debtDecimals);
412
- // leave a tiny buffer so we don't try to consume the very last lamport
413
- const MIN_REMAINING_UI = 0.01; // e.g. 1 cent of USDC
414
- const maxUsableDebtUi = Math.max(0, availableDebtUiRaw - MIN_REMAINING_UI);
441
+ // calculate the max usable debt based on the target pool utilization
442
+ const targetUtilFactor = 0.85; // target pool utilization is 85%
443
+ const maxUsableDebtUi = availableDebtUiRaw * targetUtilFactor;
415
444
  if (maxUsableDebtUi <= 0) {
416
445
  // error if there's literally no debt available to borrow
417
446
  throw new Error("Not enough debt available to adjust leverage");
@@ -503,7 +532,11 @@ class ClendVaultsClient {
503
532
  });
504
533
  const swapIxns = await this.swapper.getSwapIxns(swapQuote);
505
534
  const debtTokenProgram = await (0, clend_rpc_1.getTokenProgramForMintFromRpc)(this.program.program.provider.connection, debtBankData.mint);
506
- const borrowIxns = await this.program.clendAccountBorrow(vault, vaultManager, clendAccountState.group, clendAccount, debtBankData.mint, debtTokenProgram, additionalDebtAmount, remainingAccounts);
535
+ const debtVaultAssetState = vaultState.assets.find((a) => a.mint.address.equals(debtBankData.mint));
536
+ if (!debtVaultAssetState) {
537
+ throw new Error(`Vault asset not found: ${debtBankData.mint.toString()}`);
538
+ }
539
+ const borrowIxns = await this.program.clendAccountBorrow(vault, vaultManager, clendAccountState.group, clendAccount, debtBankData.mint, debtVaultAssetState.oracle.address, debtTokenProgram, null, additionalDebtAmount, remainingAccounts);
507
540
  const additionalCollateralAmount = swapQuote.outAmount;
508
541
  const depositIxns = await this.program.clendAccountDeposit(vault, vaultManager, clendAccountState.group, clendAccount, collateralBankData.mint, collateralTokenProgram, additionalCollateralAmount, userCollateralAta, remainingAccounts);
509
542
  instructions.push(...borrowIxns, ...swapIxns.ixns, ...depositIxns);
@@ -578,7 +611,8 @@ class ClendVaultsClient {
578
611
  prependedIxCount += cuIxCount;
579
612
  // get the redemption ixns
580
613
  // these are run after the withdraw leverage ixns
581
- const redeemIxns = await this.prepareRedeemIxns(user, vault, outputAssetMint, totalSharesToRedeem, new anchor_1.BN(0));
614
+ const redeemIxns = await this.prepareRedeemIxns(user, vault, outputAssetMint, totalSharesToRedeem, new anchor_1.BN(0), // TODO, maybe base this off slippage?
615
+ 2);
582
616
  // calculate parameters for withdraw leverage
583
617
  // based on output asset mint
584
618
  let debtToRepay;
@@ -665,11 +699,7 @@ class ClendVaultsClient {
665
699
  const debtToRepayUi = new decimal_js_1.Decimal((0, math_1.amountToUi)(debtToRepay, debtDecimals).toString());
666
700
  const collateralToSwapUi_ideal = debtToRepayUi.div(outAmountUi);
667
701
  const collateralToSwap_ideal = (0, math_1.uiToAmount)(collateralToSwapUi_ideal.toNumber(), collateralDecimals);
668
- collateralToSwap = collateralToSwap_ideal;
669
- //collateralToSwap = adjustAmountForSlippage(
670
- // collateralToSwap_ideal,
671
- // slippageBps,
672
- //);
702
+ collateralToSwap = (0, math_1.adjustAmountForSlippage)(collateralToSwap_ideal, slippageBps);
673
703
  // Step 4 (Final Quote): Get the real quote for the buffered amount.
674
704
  swapQuote = await this.swapper.getQuote(vault, {
675
705
  payer: vaultManager,
@@ -877,10 +907,8 @@ class ClendVaultsClient {
877
907
  return { ixns: instructions, luts: swapIxns.luts };
878
908
  }
879
909
  async swap(vault, inputMint, outputMint, inAmount) {
880
- const { state: inputMintState, tokenProgram: inputMintTokenProgram } = await (0, state_1.getMintState)(inputMint, this.connection);
881
- const { state: outputMintState, tokenProgram: outputMintTokenProgram } = await (0, state_1.getMintState)(outputMint, this.connection);
882
- const vaultAssetInReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(inputMint, vault, true, inputMintTokenProgram);
883
- const vaultAssetOutReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(outputMint, vault, true, outputMintTokenProgram);
910
+ const { state: inputMintState, tokenProgram: _inputMintTokenProgram } = await (0, state_1.getMintState)(inputMint, this.connection);
911
+ const { state: outputMintState, tokenProgram: _outputMintTokenProgram } = await (0, state_1.getMintState)(outputMint, this.connection);
884
912
  const quote = await this.swapper.getQuote(vault, {
885
913
  payer: this.address(),
886
914
  inputMint: inputMint,
@@ -892,35 +920,6 @@ class ClendVaultsClient {
892
920
  slippageBps: 30,
893
921
  });
894
922
  const swapIxns = await this.swapper.getSwapIxns(quote);
895
- //const swapIx = swapIxns.ixns[0];
896
- ////const swapIx = swapIxns.ixns.find((ix) =>
897
- //// ix.programId.equals(JUPITER_SWAP_PROGRAM_ID),
898
- ////);
899
- ////if (!swapIx) {
900
- //// throw new Error(
901
- //// `Swap ix not found in swapIxns, programIds: ${JSON.stringify(swapIxns.ixns.map((ix) => ix.programId.toString()))}`,
902
- //// );
903
- ////}
904
- //const swapRemainingAccounts: web3.AccountMeta[] = swapIx.keys.map(
905
- // (key) => ({
906
- // pubkey: key.pubkey,
907
- // // If the account is the vault PDA, mark it as NOT a signer for the client transaction.
908
- // isSigner: key.pubkey.equals(vault) ? false : key.isSigner,
909
- // isWritable: key.isWritable,
910
- // }),
911
- //);
912
- //const swapData = swapIx.data;
913
- //const ixns = await this.program.swap(
914
- // vault,
915
- // this.address(),
916
- // inputMint,
917
- // outputMint,
918
- // vaultAssetInReserve,
919
- // vaultAssetOutReserve,
920
- // swapData,
921
- // swapRemainingAccounts,
922
- // JUPITER_SWAP_PROGRAM_ID,
923
- //);
924
923
  const txSig = await this.send(swapIxns.ixns, [], swapIxns.luts);
925
924
  return txSig;
926
925
  }