@kamino-finance/klend-sdk 5.13.6 → 5.13.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 (41) hide show
  1. package/dist/classes/manager.d.ts +26 -2
  2. package/dist/classes/manager.d.ts.map +1 -1
  3. package/dist/classes/manager.js +62 -2
  4. package/dist/classes/manager.js.map +1 -1
  5. package/dist/classes/obligation.d.ts +1 -0
  6. package/dist/classes/obligation.d.ts.map +1 -1
  7. package/dist/classes/obligation.js +7 -0
  8. package/dist/classes/obligation.js.map +1 -1
  9. package/dist/classes/vault.d.ts +9 -1
  10. package/dist/classes/vault.d.ts.map +1 -1
  11. package/dist/classes/vault.js +37 -0
  12. package/dist/classes/vault.js.map +1 -1
  13. package/dist/classes/vault_types.d.ts +4 -0
  14. package/dist/classes/vault_types.d.ts.map +1 -1
  15. package/dist/client_kamino_manager.d.ts.map +1 -1
  16. package/dist/client_kamino_manager.js +32 -2
  17. package/dist/client_kamino_manager.js.map +1 -1
  18. package/dist/lending_operations/repay_with_collateral_calcs.d.ts +3 -4
  19. package/dist/lending_operations/repay_with_collateral_calcs.d.ts.map +1 -1
  20. package/dist/lending_operations/repay_with_collateral_calcs.js +36 -34
  21. package/dist/lending_operations/repay_with_collateral_calcs.js.map +1 -1
  22. package/dist/lending_operations/repay_with_collateral_operations.d.ts +3 -2
  23. package/dist/lending_operations/repay_with_collateral_operations.d.ts.map +1 -1
  24. package/dist/lending_operations/repay_with_collateral_operations.js +40 -30
  25. package/dist/lending_operations/repay_with_collateral_operations.js.map +1 -1
  26. package/dist/utils/metadata.js +1 -1
  27. package/dist/utils/metadata.js.map +1 -1
  28. package/dist/utils/multisig.d.ts +26 -0
  29. package/dist/utils/multisig.d.ts.map +1 -0
  30. package/dist/utils/multisig.js +22 -0
  31. package/dist/utils/multisig.js.map +1 -0
  32. package/package.json +1 -1
  33. package/src/classes/manager.ts +70 -3
  34. package/src/classes/obligation.ts +10 -0
  35. package/src/classes/vault.ts +51 -0
  36. package/src/classes/vault_types.ts +5 -0
  37. package/src/client_kamino_manager.ts +54 -2
  38. package/src/lending_operations/repay_with_collateral_calcs.ts +56 -39
  39. package/src/lending_operations/repay_with_collateral_operations.ts +84 -33
  40. package/src/utils/metadata.ts +1 -1
  41. package/src/utils/multisig.ts +47 -0
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getMaxWithdrawLtvCheck = exports.MaxWithdrawLtvCheck = void 0;
7
7
  exports.getRepayWithCollSwapInputs = getRepayWithCollSwapInputs;
8
8
  exports.getRepayWithCollIxs = getRepayWithCollIxs;
9
+ exports.getMaxCollateralFromRepayAmount = getMaxCollateralFromRepayAmount;
9
10
  const classes_1 = require("../classes");
10
11
  const leverage_1 = require("../leverage");
11
12
  const utils_1 = require("../utils");
@@ -17,14 +18,8 @@ var MaxWithdrawLtvCheck;
17
18
  MaxWithdrawLtvCheck[MaxWithdrawLtvCheck["LIQUIDATION_THRESHOLD"] = 1] = "LIQUIDATION_THRESHOLD";
18
19
  })(MaxWithdrawLtvCheck || (exports.MaxWithdrawLtvCheck = MaxWithdrawLtvCheck = {}));
19
20
  async function getRepayWithCollSwapInputs({ collTokenMint, currentSlot, debtTokenMint, kaminoMarket, obligation, quoter, referrer, repayAmount, isClosingPosition, budgetAndPriorityFeeIxs, scopeRefreshConfig, useV2Ixs, }) {
20
- const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
21
- const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
22
- if (!collReserve) {
23
- throw new Error(`Collateral reserve with mint ${collTokenMint} not found in market ${kaminoMarket.getAddress()}`);
24
- }
25
- if (!debtReserve) {
26
- throw new Error(`Debt reserve with mint ${debtTokenMint} not found in market ${kaminoMarket.getAddress()}`);
27
- }
21
+ const collReserve = kaminoMarket.getExistingReserveByMint(collTokenMint);
22
+ const debtReserve = kaminoMarket.getExistingReserveByMint(debtTokenMint);
28
23
  const { repayAmountLamports, flashRepayAmountLamports, repayAmount: finalRepayAmount, } = (0, repay_with_collateral_calcs_1.calcRepayAmountWithSlippage)(kaminoMarket, debtReserve, currentSlot, obligation, repayAmount, referrer);
29
24
  const debtPosition = obligation.getBorrowByReserve(debtReserve.address);
30
25
  const collPosition = obligation.getDepositByReserve(collReserve.address);
@@ -34,15 +29,9 @@ async function getRepayWithCollSwapInputs({ collTokenMint, currentSlot, debtToke
34
29
  if (!collPosition) {
35
30
  throw new Error(`Collateral position not found for ${collReserve.stats.symbol} reserve ${collReserve.address} in obligation ${obligation.obligationAddress}`);
36
31
  }
37
- const { withdrawableCollLamports } = (0, repay_with_collateral_calcs_1.calcMaxWithdrawCollateral)(kaminoMarket, obligation, collReserve.address, debtReserve.address, repayAmountLamports);
38
- // sanity check: we have extra collateral to swap, but we want to ensure we don't quote for way more than needed and get a bad px
39
- const maxCollNeededFromOracle = finalRepayAmount
40
- .mul(debtReserve.getOracleMarketPrice())
41
- .div(collReserve.getOracleMarketPrice())
42
- .mul('1.1')
43
- .mul(collReserve.getMintFactor())
44
- .ceil();
45
- const inputAmountLamports = decimal_js_1.default.min(withdrawableCollLamports, maxCollNeededFromOracle);
32
+ const { maxWithdrawableCollLamports } = (0, repay_with_collateral_calcs_1.calcMaxWithdrawCollateral)(kaminoMarket, obligation, collReserve.address, debtReserve.address, repayAmountLamports);
33
+ const maxCollNeededFromOracle = getMaxCollateralFromRepayAmount(finalRepayAmount, debtReserve, collReserve);
34
+ const inputAmountLamports = decimal_js_1.default.min(maxWithdrawableCollLamports, maxCollNeededFromOracle);
46
35
  // Build the repay & withdraw collateral tx to get the number of accounts
47
36
  const klendIxs = await buildRepayWithCollateralIxs(kaminoMarket, debtReserve, collReserve, obligation, referrer, currentSlot, budgetAndPriorityFeeIxs, scopeRefreshConfig, {
48
37
  preActionIxs: [],
@@ -54,7 +43,7 @@ async function getRepayWithCollSwapInputs({ collTokenMint, currentSlot, debtToke
54
43
  inputAmountLamports,
55
44
  inputMint: collTokenMint,
56
45
  outputMint: debtTokenMint,
57
- amountDebtAtaBalance: new decimal_js_1.default(0), // only used for kTokens
46
+ amountDebtAtaBalance: undefined, // only used for kTokens
58
47
  };
59
48
  const swapQuote = await quoter(swapQuoteInputs, uniqueKlendAccounts);
60
49
  const swapQuotePxDebtToColl = swapQuote.priceAInB;
@@ -69,13 +58,13 @@ async function getRepayWithCollSwapInputs({ collTokenMint, currentSlot, debtToke
69
58
  minOutAmountLamports: flashRepayAmountLamports,
70
59
  inputMint: collTokenMint,
71
60
  outputMint: debtTokenMint,
72
- amountDebtAtaBalance: new decimal_js_1.default(0), // only used for kTokens
61
+ amountDebtAtaBalance: undefined, // only used for kTokens
73
62
  },
74
63
  flashLoanInfo: klendIxs.flashLoanInfo,
75
64
  initialInputs: {
76
65
  debtRepayAmountLamports: repayAmountLamports,
77
66
  flashRepayAmountLamports,
78
- maxCollateralWithdrawLamports: withdrawableCollLamports,
67
+ maxCollateralWithdrawLamports: maxWithdrawableCollLamports,
79
68
  swapQuote,
80
69
  currentSlot,
81
70
  klendAccounts: uniqueKlendAccounts,
@@ -99,14 +88,8 @@ async function getRepayWithCollIxs({ repayAmount, isClosingPosition, budgetAndPr
99
88
  });
100
89
  const { debtRepayAmountLamports, flashRepayAmountLamports, maxCollateralWithdrawLamports, swapQuote } = initialInputs;
101
90
  const { inputAmountLamports: collSwapInLamports } = swapInputs;
102
- const collReserve = kaminoMarket.getReserveByMint(collTokenMint);
103
- if (!collReserve) {
104
- throw new Error(`Collateral reserve with mint ${collTokenMint} not found in market ${kaminoMarket.getAddress()}`);
105
- }
106
- const debtReserve = kaminoMarket.getReserveByMint(debtTokenMint);
107
- if (!debtReserve) {
108
- throw new Error(`Debt reserve with mint ${debtTokenMint} not found in market ${kaminoMarket.getAddress()}`);
109
- }
91
+ const collReserve = kaminoMarket.getExistingReserveByMint(collTokenMint);
92
+ const debtReserve = kaminoMarket.getExistingReserveByMint(debtTokenMint);
110
93
  // the client should use these values to prevent this input, but the tx may succeed, so we don't want to fail
111
94
  // there is also a chance that the tx will consume debt token from the user's ata which they would not expect
112
95
  if (collSwapInLamports.greaterThan(maxCollateralWithdrawLamports)) {
@@ -152,7 +135,7 @@ async function buildRepayWithCollateralIxs(market, debtReserve, collReserve, obl
152
135
  programId: market.programId,
153
136
  });
154
137
  const requestElevationGroup = !isClosingPosition && obligation.state.elevationGroup !== 0;
155
- const maxWithdrawLtvCheck = (0, exports.getMaxWithdrawLtvCheck)(obligation);
138
+ const maxWithdrawLtvCheck = (0, exports.getMaxWithdrawLtvCheck)(obligation, debtRepayAmountLamports, debtReserve, collWithdrawLamports, collReserve);
156
139
  // 3. Repay using the flash borrowed funds & withdraw collateral to swap and pay the flash loan
157
140
  let repayAndWithdrawAction;
158
141
  if (maxWithdrawLtvCheck === MaxWithdrawLtvCheck.MAX_LTV) {
@@ -183,10 +166,37 @@ async function buildRepayWithCollateralIxs(market, debtReserve, collReserve, obl
183
166
  };
184
167
  return res;
185
168
  }
186
- const getMaxWithdrawLtvCheck = (obligation) => {
169
+ const getMaxWithdrawLtvCheck = (obligation, repayAmountLamports, debtReserve, collWithdrawAmount, collReserve) => {
170
+ const [finalLtv, finalMaxLtv] = calculatePostOperationLtv(obligation, repayAmountLamports, debtReserve, collWithdrawAmount, collReserve);
171
+ if (finalLtv.lte(finalMaxLtv)) {
172
+ return MaxWithdrawLtvCheck.MAX_LTV;
173
+ }
187
174
  return obligation.refreshedStats.userTotalBorrowBorrowFactorAdjusted.gte(obligation.refreshedStats.borrowLimit)
188
175
  ? MaxWithdrawLtvCheck.LIQUIDATION_THRESHOLD
189
176
  : MaxWithdrawLtvCheck.MAX_LTV;
190
177
  };
191
178
  exports.getMaxWithdrawLtvCheck = getMaxWithdrawLtvCheck;
179
+ function calculatePostOperationLtv(obligation, repayAmountLamports, debtReserve, collWithdrawAmount, collReserve) {
180
+ const repayValue = repayAmountLamports
181
+ .div(debtReserve.getMintFactor())
182
+ .mul(debtReserve.getOracleMarketPrice())
183
+ .mul(debtReserve.getBorrowFactor());
184
+ const collWithdrawValue = collWithdrawAmount.div(collReserve.getMintFactor()).mul(collReserve.getOracleMarketPrice());
185
+ // Calculate new borrow value and deposit value
186
+ const newBorrowBfValue = decimal_js_1.default.max(new decimal_js_1.default(0), obligation.refreshedStats.userTotalBorrowBorrowFactorAdjusted.sub(repayValue));
187
+ const newDepositValue = decimal_js_1.default.max(new decimal_js_1.default(0), obligation.refreshedStats.userTotalDeposit.sub(collWithdrawValue));
188
+ const newMaxBorrowableValue = decimal_js_1.default.max(new decimal_js_1.default(0), obligation.refreshedStats.borrowLimit.sub(collWithdrawValue.mul(collReserve.stats.loanToValue)));
189
+ const newMaxLtv = newMaxBorrowableValue.div(newDepositValue);
190
+ // return final ltv and final max ltv
191
+ return [newBorrowBfValue.div(newDepositValue), newMaxLtv];
192
+ }
193
+ function getMaxCollateralFromRepayAmount(repayAmount, debtReserve, collReserve) {
194
+ // sanity check: we have extra collateral to swap, but we want to ensure we don't quote for way more than needed and get a bad px
195
+ return repayAmount
196
+ .mul(debtReserve.getOracleMarketPrice())
197
+ .div(collReserve.getOracleMarketPrice())
198
+ .mul('1.1')
199
+ .mul(collReserve.getMintFactor())
200
+ .ceil();
201
+ }
192
202
  //# sourceMappingURL=repay_with_collateral_operations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repay_with_collateral_operations.js","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repay_with_collateral_operations.js","sourceRoot":"","sources":["../../src/lending_operations/repay_with_collateral_operations.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ function resolveMetadataFromToken(token, extra) {
32
32
  console.log('token', token);
33
33
  console.log('extra', extra);
34
34
  const name = `kVault ${token} ${extra}`;
35
- const symbol = `kV${token.toUpperCase()}`;
35
+ const symbol = `kV-${token.toUpperCase()}`;
36
36
  return { name, symbol };
37
37
  }
38
38
  function resolveMetadataUriFromMint(mint) {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/utils/metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/utils/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ export declare function walletIsSquadsMultisig(wallet: PublicKey): Promise<boolean>;
3
+ export declare function getSquadsMultisigAdminsAndThreshold(wallet: PublicKey): Promise<{
4
+ adminsNumber: number;
5
+ threshold: number;
6
+ }>;
7
+ export type SquadsMultisigResponse = {
8
+ isSquad: boolean;
9
+ version: string;
10
+ };
11
+ export interface WalletType {
12
+ walletType: 'simpleWallet' | 'squadsMultisig';
13
+ walletAdminsNumber: number;
14
+ walletThreshold: number;
15
+ }
16
+ export type SquadsMultisigAccountResponse = {
17
+ allow_external_execute: boolean;
18
+ authority_index: number;
19
+ bump: number;
20
+ create_key: string;
21
+ keys: number[][];
22
+ ms_change_index: number;
23
+ threshold: number;
24
+ transaction_index: number;
25
+ };
26
+ //# sourceMappingURL=multisig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../../src/utils/multisig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,SAAS,oBAK7D;AAGD,wBAAsB,mCAAmC,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IACpF,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAQD;AAGD,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walletIsSquadsMultisig = walletIsSquadsMultisig;
4
+ exports.getSquadsMultisigAdminsAndThreshold = getSquadsMultisigAdminsAndThreshold;
5
+ const SQUADS_API_BASE_URL = 'https://4fnetmviidiqkjzenwxe66vgoa0soerr.lambda-url.us-east-1.on.aws';
6
+ async function walletIsSquadsMultisig(wallet) {
7
+ const response = await fetch(`${SQUADS_API_BASE_URL}/isSquad/${wallet.toBase58()}`);
8
+ const data = await response.json();
9
+ const squadsResponse = data;
10
+ return squadsResponse.isSquad;
11
+ }
12
+ // todo: find a way to get the admins number and threshold
13
+ async function getSquadsMultisigAdminsAndThreshold(wallet) {
14
+ const response = await fetch(`${SQUADS_API_BASE_URL}/multisig/${wallet.toBase58()}`);
15
+ const data = await response.json();
16
+ const squadsResponse = data;
17
+ return {
18
+ adminsNumber: squadsResponse.keys.length,
19
+ threshold: squadsResponse.threshold,
20
+ };
21
+ }
22
+ //# sourceMappingURL=multisig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisig.js","sourceRoot":"","sources":["../../src/utils/multisig.ts"],"names":[],"mappings":";;AAIA,wDAKC;AAGD,kFAWC;AArBD,MAAM,mBAAmB,GAAG,sEAAsE,CAAC;AAE5F,KAAK,UAAU,sBAAsB,CAAC,MAAiB;IAC5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,mBAAmB,YAAY,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,IAA8B,CAAC;IACtD,OAAO,cAAc,CAAC,OAAO,CAAC;AAChC,CAAC;AAED,0DAA0D;AACnD,KAAK,UAAU,mCAAmC,CAAC,MAAiB;IAIzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,mBAAmB,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,IAAqC,CAAC;IAC7D,OAAO;QACL,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM;QACxC,SAAS,EAAE,cAAc,CAAC,SAAS;KACpC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kamino-finance/klend-sdk",
3
- "version": "5.13.6",
3
+ "version": "5.13.8",
4
4
  "description": "Typescript SDK for interacting with the Kamino Lending (klend) protocol",
5
5
  "repository": {
6
6
  "type": "git",
@@ -93,6 +93,7 @@ import {
93
93
  } from './vault_types';
94
94
  import { FarmState } from '@kamino-finance/farms-sdk/dist';
95
95
  import SwitchboardProgram from '@switchboard-xyz/sbv2-lite';
96
+ import { getSquadsMultisigAdminsAndThreshold, walletIsSquadsMultisig, WalletType } from '../utils/multisig';
96
97
 
97
98
  /**
98
99
  * KaminoManager is a class that provides a high-level interface to interact with the Kamino Lend and Kamino Vault programs, in order to create and manage a market, as well as vaults
@@ -1124,11 +1125,24 @@ export class KaminoManager {
1124
1125
  }
1125
1126
 
1126
1127
  /**
1127
- * This retruns an instruction to be used to update the market owner. This can only be executed by the current lendingMarketOwnerCached
1128
+ * This retruns an array of instructions to be used to update the pending lending market admin; if the admin is the same the list will be empty otherwise it will have an instruction to update the cached (pending) admin
1128
1129
  * @param marketWithAddress - the market address and market state object
1129
- * @param newMarket - the lending market state with the new configuration - to be build we new config options from the previous state
1130
+ * @param newAdmin - the new admin
1130
1131
  * @returns - an array of instructions
1131
1132
  */
1133
+ updatePendingLendingMarketAdminIx(
1134
+ marketWithAddress: MarketWithAddress,
1135
+ newAdmin: PublicKey
1136
+ ): TransactionInstruction[] {
1137
+ const newMarket = new LendingMarket({ ...marketWithAddress.state, lendingMarketOwnerCached: newAdmin });
1138
+ return this.updateLendingMarketIxs(marketWithAddress, newMarket);
1139
+ }
1140
+
1141
+ /**
1142
+ * This retruns an instruction to be used to update the market owner. This can only be executed by the current lendingMarketOwnerCached
1143
+ * @param marketWithAddress - the market address and market state object
1144
+ * @returns - an instruction for the new owner
1145
+ */
1132
1146
  updateLendingMarketOwnerIxs(marketWithAddress: MarketWithAddress): TransactionInstruction {
1133
1147
  const accounts: UpdateLendingMarketOwnerAccounts = {
1134
1148
  lendingMarketOwnerCached: marketWithAddress.state.lendingMarketOwnerCached,
@@ -1137,8 +1151,61 @@ export class KaminoManager {
1137
1151
 
1138
1152
  return updateLendingMarketOwner(accounts, this._kaminoLendProgramId);
1139
1153
  }
1140
- } // KaminoManager
1141
1154
 
1155
+ /**
1156
+ * This will check if the given wallet is a squads multisig
1157
+ * @param wallet - the wallet to check
1158
+ * @returns true if the wallet is a squads multisig, false otherwise
1159
+ */
1160
+ static async walletIsSquadsMultisig(wallet: PublicKey) {
1161
+ return walletIsSquadsMultisig(wallet);
1162
+ }
1163
+
1164
+ /**
1165
+ * This will get the wallet type, admins number and threshold for the given authority
1166
+ * @param connection - the connection to use
1167
+ * @param address - the address to get the wallet info for
1168
+ * @returns the wallet type, admins number and threshold
1169
+ */
1170
+ static async getMarketOrVaultAdminInfo(connection: Connection, address: PublicKey): Promise<WalletType | undefined> {
1171
+ try {
1172
+ // Try to fetch vault state first
1173
+ const vaultState = await VaultState.fetch(connection, address);
1174
+ if (!vaultState) {
1175
+ throw new Error('Vault not found');
1176
+ }
1177
+ return await KaminoManager.getWalletInfo(connection, vaultState.vaultAdminAuthority);
1178
+ } catch (error) {
1179
+ // If vault not found, try to fetch market state
1180
+ const market = await LendingMarket.fetch(connection, address);
1181
+ if (!market) {
1182
+ return undefined;
1183
+ }
1184
+ return await KaminoManager.getWalletInfo(connection, market.lendingMarketOwner);
1185
+ }
1186
+ }
1187
+
1188
+ /**
1189
+ * Helper method to get wallet information for a given authority
1190
+ */
1191
+ private static async getWalletInfo(connection: Connection, authority: PublicKey): Promise<WalletType> {
1192
+ const isSquadsMultisig = await KaminoManager.walletIsSquadsMultisig(authority);
1193
+ let walletAdminsNumber = 1;
1194
+ let walletThreshold = 1;
1195
+
1196
+ if (isSquadsMultisig) {
1197
+ const { adminsNumber, threshold } = await getSquadsMultisigAdminsAndThreshold(authority);
1198
+ walletAdminsNumber = adminsNumber;
1199
+ walletThreshold = threshold;
1200
+ }
1201
+
1202
+ return {
1203
+ walletType: isSquadsMultisig ? 'squadsMultisig' : 'simpleWallet',
1204
+ walletAdminsNumber,
1205
+ walletThreshold,
1206
+ };
1207
+ }
1208
+ } // KaminoManager
1142
1209
  export type BaseLendingMarketKey = keyof LendingMarketFields;
1143
1210
  const EXCLUDED_LENDING_MARKET_KEYS = [
1144
1211
  'version',
@@ -1458,6 +1458,16 @@ export class KaminoObligation {
1458
1458
  );
1459
1459
  }
1460
1460
 
1461
+ getObligationLiquidityByReserve(reserveAddress: PublicKey): ObligationLiquidity {
1462
+ const obligationLiquidity = this.state.borrows.find((borrow) => borrow.borrowReserve.equals(reserveAddress));
1463
+
1464
+ if (!obligationLiquidity) {
1465
+ throw new Error(`Obligation liquidity not found given reserve ${reserveAddress.toString()}`);
1466
+ }
1467
+
1468
+ return obligationLiquidity;
1469
+ }
1470
+
1461
1471
  /**
1462
1472
  *
1463
1473
  * @returns Total borrowed amount for the specified obligation liquidity/borrow asset
@@ -89,6 +89,7 @@ import {
89
89
  UpdateReserveAllocationIxs,
90
90
  UpdateVaultConfigIxs,
91
91
  UserSharesForVault,
92
+ WithdrawAndBlockReserveIxs,
92
93
  WithdrawIxs,
93
94
  } from './vault_types';
94
95
  import { batchFetch, collToLamportsDecimal, ZERO } from '@kamino-finance/kliquidity-sdk';
@@ -443,6 +444,56 @@ export class KaminoVaultClient {
443
444
  return updateReserveAllocationIxs;
444
445
  }
445
446
 
447
+ /**
448
+ * This method withdraws all the funds from a reserve and blocks it from being invested by setting its weight and ctoken allocation to 0
449
+ * @param vault - the vault to withdraw the funds from
450
+ * @param reserve - the reserve to withdraw the funds from
451
+ * @param payer - the payer of the transaction. If not provided, the admin of the vault will be used
452
+ * @returns - a struct with an instruction to update the reserve allocation and an optional list of instructions to update the lookup table for the allocation changes
453
+ */
454
+ async withdrawEverythingAndBLockReserve(
455
+ vault: KaminoVault,
456
+ reserve: PublicKey,
457
+ payer?: PublicKey
458
+ ): Promise<WithdrawAndBlockReserveIxs> {
459
+ const vaultState = await vault.getState(this.getConnection());
460
+
461
+ const reserveIsPartOfAllocation = vaultState.vaultAllocationStrategy.some((allocation) =>
462
+ allocation.reserve.equals(reserve)
463
+ );
464
+
465
+ const withdrawAndBlockReserveIxs: WithdrawAndBlockReserveIxs = {
466
+ updateReserveAllocationIxs: [],
467
+ investIxs: [],
468
+ };
469
+ if (!reserveIsPartOfAllocation) {
470
+ return withdrawAndBlockReserveIxs;
471
+ }
472
+
473
+ const reserveState = await Reserve.fetch(this.getConnection(), reserve);
474
+ if (!reserveState) {
475
+ return withdrawAndBlockReserveIxs;
476
+ }
477
+ const reserveWithAddress: ReserveWithAddress = {
478
+ address: reserve,
479
+ state: reserveState,
480
+ };
481
+ const reserveAllocationConfig = new ReserveAllocationConfig(reserveWithAddress, 0, new Decimal(0));
482
+
483
+ // update allocation to have 0 weight and 0 cap
484
+ const updateAllocIxs = await this.updateReserveAllocationIxs(vault, reserveAllocationConfig);
485
+
486
+ const investPayer = payer ? payer : vaultState.vaultAdminAuthority;
487
+ const investIx = await this.investSingleReserveIxs(investPayer, vault, reserveWithAddress);
488
+ withdrawAndBlockReserveIxs.updateReserveAllocationIxs = [
489
+ updateAllocIxs.updateReserveAllocationIx,
490
+ ...updateAllocIxs.updateLUTIxs,
491
+ ];
492
+ withdrawAndBlockReserveIxs.investIxs = investIx;
493
+
494
+ return withdrawAndBlockReserveIxs;
495
+ }
496
+
446
497
  /**
447
498
  * This method removes a reserve from the vault allocation strategy if already part of the allocation strategy
448
499
  * @param vault - vault to remove the reserve from
@@ -22,6 +22,11 @@ export type UpdateReserveAllocationIxs = {
22
22
  updateLUTIxs: TransactionInstruction[];
23
23
  };
24
24
 
25
+ export type WithdrawAndBlockReserveIxs = {
26
+ updateReserveAllocationIxs: TransactionInstruction[];
27
+ investIxs: TransactionInstruction[];
28
+ };
29
+
25
30
  export type UpdateVaultConfigIxs = {
26
31
  updateVaultConfigIx: TransactionInstruction;
27
32
  updateLUTIxs: TransactionInstruction[];
@@ -290,13 +290,20 @@ async function main() {
290
290
  const _createVaultSig = await processTxn(
291
291
  env.client,
292
292
  env.payer,
293
- [...instructions.initVaultIxs, instructions.createLUTIx, instructions.initSharesMetadataIx],
293
+ [...instructions.createAtaIfNeededIxs, ...instructions.initVaultIxs, instructions.createLUTIx],
294
294
  mode,
295
295
  2500,
296
296
  [vaultKp]
297
297
  );
298
298
  await sleep(2000);
299
- const _populateLUTSig = await processTxn(env.client, env.payer, instructions.populateLUTIxs, mode, 2500, []);
299
+ const _populateLUTSig = await processTxn(
300
+ env.client,
301
+ env.payer,
302
+ [...instructions.populateLUTIxs, ...instructions.cleanupIxs],
303
+ mode,
304
+ 2500,
305
+ []
306
+ );
300
307
 
301
308
  const _setSharesMetadataSig = await processTxn(
302
309
  env.client,
@@ -679,6 +686,42 @@ async function main() {
679
686
  mode === 'execute' && console.log('Pending fees withdrawn:', withdrawPendingFeesSig);
680
687
  });
681
688
 
689
+ commands
690
+ .command('remove-vault-allocation')
691
+ .requiredOption('--vault <string>', 'Vault address')
692
+ .requiredOption('--reserve <string>', 'Reserve address')
693
+ .requiredOption(
694
+ `--mode <string>`,
695
+ 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'
696
+ )
697
+ .option(`--staging`, 'If true, will use the staging programs')
698
+ .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
699
+ .action(async ({ vault, reserve, mode, staging, multisig }) => {
700
+ const env = initializeClient(mode === 'multisig', staging);
701
+ const reserveAddress = new PublicKey(reserve);
702
+ const vaultAddress = new PublicKey(vault);
703
+
704
+ if (mode === 'multisig' && !multisig) {
705
+ throw new Error('If using multisig mode, multisig is required');
706
+ }
707
+
708
+ const kaminoManager = new KaminoManager(
709
+ env.connection,
710
+ DEFAULT_RECENT_SLOT_DURATION_MS,
711
+ env.kLendProgramId,
712
+ env.kVaultProgramId
713
+ );
714
+
715
+ const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kVaultProgramId);
716
+ const instruction = await kaminoManager.removeReserveFromAllocationIx(kaminoVault, reserveAddress);
717
+
718
+ if (instruction) {
719
+ const updateVaultAllocationSig = await processTxn(env.client, env.payer, [instruction], mode, 2500, []);
720
+
721
+ mode === 'execute' && console.log('Vault allocation updated:', updateVaultAllocationSig);
722
+ }
723
+ });
724
+
682
725
  commands
683
726
  .command('stake')
684
727
  .requiredOption('--vault <string>', 'Vault address')
@@ -1441,6 +1484,15 @@ async function main() {
1441
1484
  );
1442
1485
  });
1443
1486
 
1487
+ commands
1488
+ .command('get-market-or-vault-admin-info')
1489
+ .requiredOption('--address <string>', 'Address of the market or vault')
1490
+ .action(async ({ address }) => {
1491
+ const env = initializeClient(false, false);
1492
+ const adminInfo = await KaminoManager.getMarketOrVaultAdminInfo(env.connection, new PublicKey(address));
1493
+ console.log(adminInfo);
1494
+ });
1495
+
1444
1496
  await commands.parseAsync();
1445
1497
  }
1446
1498