@kamino-finance/klend-sdk 7.2.6 → 7.3.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.
- package/README.md +1 -0
- package/dist/@codegen/klend/accounts/LendingMarket.d.ts +33 -0
- package/dist/@codegen/klend/accounts/LendingMarket.d.ts.map +1 -1
- package/dist/@codegen/klend/accounts/LendingMarket.js +24 -2
- package/dist/@codegen/klend/accounts/LendingMarket.js.map +1 -1
- package/dist/@codegen/klend/errors/custom.d.ts +26 -2
- package/dist/@codegen/klend/errors/custom.d.ts.map +1 -1
- package/dist/@codegen/klend/errors/custom.js +45 -3
- package/dist/@codegen/klend/errors/custom.js.map +1 -1
- package/dist/@codegen/klend/instructions/index.d.ts +2 -0
- package/dist/@codegen/klend/instructions/index.d.ts.map +1 -1
- package/dist/@codegen/klend/instructions/index.js +3 -1
- package/dist/@codegen/klend/instructions/index.js.map +1 -1
- package/dist/@codegen/klend/instructions/initReserve.d.ts +1 -1
- package/dist/@codegen/klend/instructions/initReserve.d.ts.map +1 -1
- package/dist/@codegen/klend/instructions/initReserve.js +1 -5
- package/dist/@codegen/klend/instructions/initReserve.js.map +1 -1
- package/dist/@codegen/klend/instructions/liquidateObligationAndRedeemReserveCollateralV2.js +1 -1
- package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.d.ts +13 -0
- package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.d.ts.map +1 -0
- package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.js +24 -0
- package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.js.map +1 -0
- package/dist/@codegen/klend/instructions/withdrawObligationCollateral.js +1 -1
- package/dist/@codegen/klend/instructions/withdrawObligationCollateralV2.js +1 -1
- package/dist/@codegen/klend/types/ReserveConfig.d.ts +58 -24
- package/dist/@codegen/klend/types/ReserveConfig.d.ts.map +1 -1
- package/dist/@codegen/klend/types/ReserveConfig.js +40 -18
- package/dist/@codegen/klend/types/ReserveConfig.js.map +1 -1
- package/dist/@codegen/klend/types/ReserveFees.d.ts +8 -8
- package/dist/@codegen/klend/types/ReserveFees.d.ts.map +1 -1
- package/dist/@codegen/klend/types/ReserveFees.js +8 -8
- package/dist/@codegen/klend/types/ReserveFees.js.map +1 -1
- package/dist/@codegen/klend/types/UpdateConfigMode.d.ts +46 -7
- package/dist/@codegen/klend/types/UpdateConfigMode.d.ts.map +1 -1
- package/dist/@codegen/klend/types/UpdateConfigMode.js +85 -12
- package/dist/@codegen/klend/types/UpdateConfigMode.js.map +1 -1
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts +26 -0
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts.map +1 -1
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.js +49 -1
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.js.map +1 -1
- package/dist/@codegen/klend/types/index.d.ts +4 -4
- package/dist/@codegen/klend/types/index.d.ts.map +1 -1
- package/dist/@codegen/klend/types/index.js.map +1 -1
- package/dist/@codegen/kvault/accounts/GlobalConfig.d.ts +32 -0
- package/dist/@codegen/kvault/accounts/GlobalConfig.d.ts.map +1 -0
- package/dist/@codegen/kvault/accounts/GlobalConfig.js +125 -0
- package/dist/@codegen/kvault/accounts/GlobalConfig.js.map +1 -0
- package/dist/@codegen/kvault/accounts/Reserve.js +1 -1
- package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.d.ts +52 -0
- package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.d.ts.map +1 -0
- package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.js +127 -0
- package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.js.map +1 -0
- package/dist/@codegen/kvault/accounts/VaultState.d.ts +18 -0
- package/dist/@codegen/kvault/accounts/VaultState.d.ts.map +1 -1
- package/dist/@codegen/kvault/accounts/VaultState.js +39 -1
- package/dist/@codegen/kvault/accounts/VaultState.js.map +1 -1
- package/dist/@codegen/kvault/accounts/index.d.ts +4 -0
- package/dist/@codegen/kvault/accounts/index.d.ts.map +1 -1
- package/dist/@codegen/kvault/accounts/index.js +5 -1
- package/dist/@codegen/kvault/accounts/index.js.map +1 -1
- package/dist/@codegen/kvault/errors/custom.d.ts +61 -5
- package/dist/@codegen/kvault/errors/custom.d.ts.map +1 -1
- package/dist/@codegen/kvault/errors/custom.js +108 -9
- package/dist/@codegen/kvault/errors/custom.js.map +1 -1
- package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.d.ts +16 -0
- package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.d.ts.map +1 -0
- package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.js +66 -0
- package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.js.map +1 -0
- package/dist/@codegen/kvault/instructions/buy.d.ts +24 -0
- package/dist/@codegen/kvault/instructions/buy.d.ts.map +1 -0
- package/dist/@codegen/kvault/instructions/buy.js +67 -0
- package/dist/@codegen/kvault/instructions/buy.js.map +1 -0
- package/dist/@codegen/kvault/instructions/index.d.ts +12 -0
- package/dist/@codegen/kvault/instructions/index.d.ts.map +1 -1
- package/dist/@codegen/kvault/instructions/index.js +13 -1
- package/dist/@codegen/kvault/instructions/index.js.map +1 -1
- package/dist/@codegen/kvault/instructions/initGlobalConfig.d.ts +11 -0
- package/dist/@codegen/kvault/instructions/initGlobalConfig.d.ts.map +1 -0
- package/dist/@codegen/kvault/instructions/initGlobalConfig.js +20 -0
- package/dist/@codegen/kvault/instructions/initGlobalConfig.js.map +1 -0
- package/dist/@codegen/kvault/instructions/invest.d.ts +2 -1
- package/dist/@codegen/kvault/instructions/invest.d.ts.map +1 -1
- package/dist/@codegen/kvault/instructions/invest.js +5 -0
- package/dist/@codegen/kvault/instructions/invest.js.map +1 -1
- package/dist/@codegen/kvault/instructions/sell.d.ts +40 -0
- package/dist/@codegen/kvault/instructions/sell.d.ts.map +1 -0
- package/dist/@codegen/kvault/instructions/sell.js +98 -0
- package/dist/@codegen/kvault/instructions/sell.js.map +1 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfig.d.ts +13 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfig.d.ts.map +1 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfig.js +63 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfig.js.map +1 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.d.ts +8 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.d.ts.map +1 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.js +21 -0
- package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.js.map +1 -0
- package/dist/@codegen/kvault/instructions/updateReserveAllocation.d.ts +2 -1
- package/dist/@codegen/kvault/instructions/updateReserveAllocation.d.ts.map +1 -1
- package/dist/@codegen/kvault/instructions/updateReserveAllocation.js +5 -0
- package/dist/@codegen/kvault/instructions/updateReserveAllocation.js.map +1 -1
- package/dist/@codegen/kvault/instructions/updateVaultConfig.d.ts +2 -1
- package/dist/@codegen/kvault/instructions/updateVaultConfig.d.ts.map +1 -1
- package/dist/@codegen/kvault/instructions/updateVaultConfig.js +2 -5
- package/dist/@codegen/kvault/instructions/updateVaultConfig.js.map +1 -1
- package/dist/@codegen/kvault/instructions/withdraw.d.ts +1 -0
- package/dist/@codegen/kvault/instructions/withdraw.d.ts.map +1 -1
- package/dist/@codegen/kvault/instructions/withdraw.js +1 -0
- package/dist/@codegen/kvault/instructions/withdraw.js.map +1 -1
- package/dist/@codegen/kvault/instructions/withdrawFromAvailable.d.ts +1 -0
- package/dist/@codegen/kvault/instructions/withdrawFromAvailable.d.ts.map +1 -1
- package/dist/@codegen/kvault/instructions/withdrawFromAvailable.js +1 -0
- package/dist/@codegen/kvault/instructions/withdrawFromAvailable.js.map +1 -1
- package/dist/@codegen/kvault/types/ReserveConfig.d.ts +27 -34
- package/dist/@codegen/kvault/types/ReserveConfig.d.ts.map +1 -1
- package/dist/@codegen/kvault/types/ReserveConfig.js +20 -17
- package/dist/@codegen/kvault/types/ReserveConfig.js.map +1 -1
- package/dist/@codegen/kvault/types/ReserveFees.d.ts +8 -8
- package/dist/@codegen/kvault/types/ReserveFees.d.ts.map +1 -1
- package/dist/@codegen/kvault/types/ReserveFees.js +8 -8
- package/dist/@codegen/kvault/types/ReserveFees.js.map +1 -1
- package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.d.ts +68 -0
- package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.d.ts.map +1 -0
- package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.js +162 -0
- package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.js.map +1 -0
- package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.d.ts +46 -0
- package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.d.ts.map +1 -0
- package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.js +124 -0
- package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.js.map +1 -0
- package/dist/@codegen/kvault/types/VaultConfigField.d.ts +65 -0
- package/dist/@codegen/kvault/types/VaultConfigField.d.ts.map +1 -1
- package/dist/@codegen/kvault/types/VaultConfigField.js +121 -1
- package/dist/@codegen/kvault/types/VaultConfigField.js.map +1 -1
- package/dist/@codegen/kvault/types/index.d.ts +10 -2
- package/dist/@codegen/kvault/types/index.d.ts.map +1 -1
- package/dist/@codegen/kvault/types/index.js +5 -1
- package/dist/@codegen/kvault/types/index.js.map +1 -1
- package/dist/classes/manager.d.ts +17 -1
- package/dist/classes/manager.d.ts.map +1 -1
- package/dist/classes/manager.js +22 -0
- package/dist/classes/manager.js.map +1 -1
- package/dist/classes/reserve.d.ts.map +1 -1
- package/dist/classes/reserve.js +7 -4
- package/dist/classes/reserve.js.map +1 -1
- package/dist/classes/vault.d.ts +29 -5
- package/dist/classes/vault.d.ts.map +1 -1
- package/dist/classes/vault.js +119 -48
- package/dist/classes/vault.js.map +1 -1
- package/dist/idl/klend.json +129 -59
- package/dist/lib.d.ts +1 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +4 -2
- package/dist/lib.js.map +1 -1
- package/dist/manager/client_kamino_manager.js +206 -15
- package/dist/manager/client_kamino_manager.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/managerTypes.d.ts +1 -1
- package/dist/utils/managerTypes.d.ts.map +1 -1
- package/dist/utils/managerTypes.js +5 -3
- package/dist/utils/managerTypes.js.map +1 -1
- package/dist/utils/parse.d.ts +10 -0
- package/dist/utils/parse.d.ts.map +1 -0
- package/dist/utils/parse.js +24 -0
- package/dist/utils/parse.js.map +1 -0
- package/dist/utils/seeds.d.ts +5 -5
- package/dist/utils/seeds.d.ts.map +1 -1
- package/dist/utils/seeds.js +13 -13
- package/dist/utils/seeds.js.map +1 -1
- package/dist/utils/vault.d.ts.map +1 -1
- package/dist/utils/vault.js +6 -0
- package/dist/utils/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/@codegen/klend/accounts/LendingMarket.ts +46 -2
- package/src/@codegen/klend/errors/custom.ts +47 -2
- package/src/@codegen/klend/instructions/index.ts +2 -0
- package/src/@codegen/klend/instructions/initReserve.ts +2 -6
- package/src/@codegen/klend/instructions/liquidateObligationAndRedeemReserveCollateralV2.ts +1 -1
- package/src/@codegen/klend/instructions/seedDepositOnInitReserve.ts +50 -0
- package/src/@codegen/klend/instructions/withdrawObligationCollateral.ts +1 -1
- package/src/@codegen/klend/instructions/withdrawObligationCollateralV2.ts +1 -1
- package/src/@codegen/klend/types/ReserveConfig.ts +72 -30
- package/src/@codegen/klend/types/ReserveFees.ts +12 -12
- package/src/@codegen/klend/types/UpdateConfigMode.ts +103 -13
- package/src/@codegen/klend/types/UpdateLendingMarketMode.ts +60 -0
- package/src/@codegen/klend/types/index.ts +12 -2
- package/src/@codegen/kvault/accounts/GlobalConfig.ts +136 -0
- package/src/@codegen/kvault/accounts/Reserve.ts +1 -1
- package/src/@codegen/kvault/accounts/ReserveWhitelistEntry.ts +157 -0
- package/src/@codegen/kvault/accounts/VaultState.ts +57 -1
- package/src/@codegen/kvault/accounts/index.ts +7 -0
- package/src/@codegen/kvault/errors/custom.ts +109 -8
- package/src/@codegen/kvault/instructions/addUpdateWhitelistedReserve.ts +64 -0
- package/src/@codegen/kvault/instructions/buy.ts +74 -0
- package/src/@codegen/kvault/instructions/index.ts +18 -0
- package/src/@codegen/kvault/instructions/initGlobalConfig.ts +44 -0
- package/src/@codegen/kvault/instructions/invest.ts +4 -0
- package/src/@codegen/kvault/instructions/sell.ts +122 -0
- package/src/@codegen/kvault/instructions/updateGlobalConfig.ts +58 -0
- package/src/@codegen/kvault/instructions/updateGlobalConfigAdmin.ts +42 -0
- package/src/@codegen/kvault/instructions/updateReserveAllocation.ts +4 -0
- package/src/@codegen/kvault/instructions/updateVaultConfig.ts +4 -6
- package/src/@codegen/kvault/instructions/withdraw.ts +2 -0
- package/src/@codegen/kvault/instructions/withdrawFromAvailable.ts +2 -0
- package/src/@codegen/kvault/types/ReserveConfig.ts +34 -37
- package/src/@codegen/kvault/types/ReserveFees.ts +12 -12
- package/src/@codegen/kvault/types/UpdateGlobalConfigMode.ts +160 -0
- package/src/@codegen/kvault/types/UpdateReserveWhitelistMode.ts +117 -0
- package/src/@codegen/kvault/types/VaultConfigField.ts +150 -0
- package/src/@codegen/kvault/types/index.ts +31 -0
- package/src/classes/manager.ts +29 -1
- package/src/classes/reserve.ts +7 -5
- package/src/classes/vault.ts +166 -48
- package/src/idl/klend.json +130 -60
- package/src/idl/kvault.json +582 -23
- package/src/lib.ts +2 -1
- package/src/manager/client_kamino_manager.ts +313 -18
- package/src/utils/index.ts +2 -1
- package/src/utils/managerTypes.ts +6 -4
- package/src/utils/parse.ts +18 -0
- package/src/utils/seeds.ts +13 -17
- package/src/utils/vault.ts +6 -0
package/dist/classes/vault.js
CHANGED
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.VaultHoldings = exports.ReserveAllocationConfig = exports.KaminoVaultConfig = exports.KaminoVault = exports.KaminoVaultClient = exports.INITIAL_DEPOSIT_LAMPORTS = exports.METADATA_PROGRAM_ID = exports.METADATA_SEED = exports.kaminoVaultStagingId = exports.kaminoVaultId = void 0;
|
|
7
7
|
exports.getCTokenVaultPda = getCTokenVaultPda;
|
|
8
8
|
exports.getEventAuthorityPda = getEventAuthorityPda;
|
|
9
|
+
exports.getKvaultGlobalConfigPda = getKvaultGlobalConfigPda;
|
|
10
|
+
exports.getReserveWhitelistEntryPda = getReserveWhitelistEntryPda;
|
|
9
11
|
const bn_js_1 = __importDefault(require("bn.js"));
|
|
10
12
|
const kit_1 = require("@solana/kit");
|
|
11
13
|
const lib_1 = require("../lib");
|
|
@@ -42,6 +44,8 @@ const BASE_VAULT_AUTHORITY_SEED = 'authority';
|
|
|
42
44
|
const SHARES_SEED = 'shares';
|
|
43
45
|
const EVENT_AUTHORITY_SEED = '__event_authority';
|
|
44
46
|
exports.METADATA_SEED = 'metadata';
|
|
47
|
+
const GLOBAL_CONFIG_STATE_SEED = 'global_config';
|
|
48
|
+
const WHITELISTED_RESERVES_SEED = 'whitelisted_reserves';
|
|
45
49
|
exports.METADATA_PROGRAM_ID = (0, kit_1.address)('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
|
|
46
50
|
exports.INITIAL_DEPOSIT_LAMPORTS = 1000;
|
|
47
51
|
const addressEncoder = (0, kit_1.getAddressEncoder)();
|
|
@@ -95,6 +99,23 @@ class KaminoVaultClient {
|
|
|
95
99
|
holdings.print();
|
|
96
100
|
console.log('Tokens per share: ', tokensPerShare);
|
|
97
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* This method initializes the kvault global config (one off, needs to be signed by program owner)
|
|
104
|
+
* @param admin - the admin of the kvault program
|
|
105
|
+
* @returns - an instruction to initialize the kvault global config
|
|
106
|
+
*/
|
|
107
|
+
async initKvaultGlobalConfigIx(admin) {
|
|
108
|
+
const globalConfigAddress = await getKvaultGlobalConfigPda(this.getProgramID());
|
|
109
|
+
const programData = await (0, utils_2.programDataPda)(this.getProgramID());
|
|
110
|
+
const ix = (0, instructions_1.initKVaultGlobalConfig)({
|
|
111
|
+
payer: admin,
|
|
112
|
+
globalConfig: globalConfigAddress,
|
|
113
|
+
programData: programData,
|
|
114
|
+
systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS,
|
|
115
|
+
rent: sysvars_1.SYSVAR_RENT_ADDRESS,
|
|
116
|
+
}, undefined, this.getProgramID());
|
|
117
|
+
return ix;
|
|
118
|
+
}
|
|
98
119
|
/**
|
|
99
120
|
* This method will create a vault with a given config. The config can be changed later on, but it is recommended to set it up correctly from the start
|
|
100
121
|
* @param vaultConfig - the config object used to create a vault
|
|
@@ -174,21 +195,21 @@ class KaminoVaultClient {
|
|
|
174
195
|
farm_utils_1.FARMS_GLOBAL_CONFIG_MAINNET,
|
|
175
196
|
];
|
|
176
197
|
const insertIntoLUTIxs = await (0, lookupTable_1.insertIntoLookupTableIxs)(this.getConnection(), vaultConfig.admin, lut, accountsToBeInserted, []);
|
|
177
|
-
const setLUTIx = this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.LookupTable(), lut.toString());
|
|
198
|
+
const setLUTIx = await this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.LookupTable(), lut.toString());
|
|
178
199
|
const ixs = [createVaultIx, initVaultIx, setLUTIx];
|
|
179
200
|
if (vaultConfig.getPerformanceFeeBps() > 0) {
|
|
180
|
-
const setPerformanceFeeIx = this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.PerformanceFeeBps(), vaultConfig.getPerformanceFeeBps().toString());
|
|
201
|
+
const setPerformanceFeeIx = await this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.PerformanceFeeBps(), vaultConfig.getPerformanceFeeBps().toString());
|
|
181
202
|
ixs.push(setPerformanceFeeIx);
|
|
182
203
|
}
|
|
183
204
|
if (vaultConfig.getManagementFeeBps() > 0) {
|
|
184
|
-
const setManagementFeeIx = this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.ManagementFeeBps(), vaultConfig.getManagementFeeBps().toString());
|
|
205
|
+
const setManagementFeeIx = await this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.ManagementFeeBps(), vaultConfig.getManagementFeeBps().toString());
|
|
185
206
|
ixs.push(setManagementFeeIx);
|
|
186
207
|
}
|
|
187
208
|
if (vaultConfig.name && vaultConfig.name.length > 0) {
|
|
188
|
-
const setNameIx = this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.Name(), vaultConfig.name);
|
|
209
|
+
const setNameIx = await this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.Name(), vaultConfig.name);
|
|
189
210
|
ixs.push(setNameIx);
|
|
190
211
|
}
|
|
191
|
-
const setFarmIx = this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.Farm(), createVaultFarm.farm.address);
|
|
212
|
+
const setFarmIx = await this.updateUninitialisedVaultConfigIx(vaultConfig.admin, vaultState.address, new types_1.VaultConfigField.Farm(), createVaultFarm.farm.address);
|
|
192
213
|
const metadataIx = await this.getSetSharesMetadataIx(this.getConnection(), vaultConfig.admin, vaultState.address, sharesMint, baseVaultAuthority, vaultConfig.vaultTokenSymbol, vaultConfig.vaultTokenName);
|
|
193
214
|
return {
|
|
194
215
|
vault: vaultState,
|
|
@@ -254,6 +275,7 @@ class KaminoVaultClient {
|
|
|
254
275
|
const vaultState = await vault.getState();
|
|
255
276
|
const reserveState = reserveAllocationConfig.getReserveState();
|
|
256
277
|
const cTokenVault = await getCTokenVaultPda(vault.address, reserveAllocationConfig.getReserveAddress(), this._kaminoVaultProgramId);
|
|
278
|
+
const reserveWhitelistEntryOption = await getReserveWhitelistEntryIfExists(reserveAllocationConfig.getReserveAddress(), this.getConnection(), this._kaminoVaultProgramId);
|
|
257
279
|
const vaultAdmin = parseVaultAdmin(vaultState, vaultAdminAuthority);
|
|
258
280
|
const updateReserveAllocationAccounts = {
|
|
259
281
|
signer: vaultAdmin,
|
|
@@ -262,6 +284,7 @@ class KaminoVaultClient {
|
|
|
262
284
|
reserveCollateralMint: reserveState.collateral.mintPubkey,
|
|
263
285
|
reserve: reserveAllocationConfig.getReserveAddress(),
|
|
264
286
|
ctokenVault: cTokenVault,
|
|
287
|
+
reserveWhitelistEntry: reserveWhitelistEntryOption,
|
|
265
288
|
systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS,
|
|
266
289
|
rent: sysvars_1.SYSVAR_RENT_ADDRESS,
|
|
267
290
|
reserveCollateralTokenProgram: token_1.TOKEN_PROGRAM_ADDRESS,
|
|
@@ -436,41 +459,26 @@ class KaminoVaultClient {
|
|
|
436
459
|
* @param vault the vault to update
|
|
437
460
|
* @param mode the field to update (based on VaultConfigFieldKind enum)
|
|
438
461
|
* @param value the value to update the field with
|
|
439
|
-
* @param [
|
|
462
|
+
* @param [adminAuthority] the signer of the transaction. Optional. If not provided the admin of the vault will be used. It should be used when changing the admin of the vault if we want to build or batch multiple ixs in the same tx.
|
|
463
|
+
* The global admin should be passed in when wanting to change the AllowAllocationsInWhitelistedReservesOnly or AllowInvestInWhitelistedReservesOnly fields to false
|
|
440
464
|
* @param [lutIxsSigner] the signer of the transaction to be used for the lookup table instructions. Optional. If not provided the admin of the vault will be used. It should be used when changing the admin of the vault if we want to build or batch multiple ixs in the same tx
|
|
441
465
|
* @param [skipLutUpdate] if true, the lookup table instructions will not be included in the returned instructions
|
|
442
466
|
* @returns a struct that contains the instruction to update the field and an optional list of instructions to update the lookup table
|
|
443
467
|
*/
|
|
444
|
-
async updateVaultConfigIxs(vault, mode, value,
|
|
468
|
+
async updateVaultConfigIxs(vault, mode, value, adminAuthority, lutIxsSigner, skipLutUpdate = false) {
|
|
445
469
|
const vaultState = await vault.getState();
|
|
446
|
-
const admin = parseVaultAdmin(vaultState,
|
|
470
|
+
const admin = parseVaultAdmin(vaultState, adminAuthority);
|
|
471
|
+
const globalConfig = await getKvaultGlobalConfigPda(this._kaminoVaultProgramId);
|
|
447
472
|
const updateVaultConfigAccs = {
|
|
448
|
-
|
|
473
|
+
signer: admin,
|
|
474
|
+
globalConfig: globalConfig,
|
|
449
475
|
vaultState: vault.address,
|
|
450
476
|
klendProgram: this._kaminoLendProgramId,
|
|
451
477
|
};
|
|
452
|
-
if (vaultAdminAuthority) {
|
|
453
|
-
updateVaultConfigAccs.vaultAdminAuthority = vaultAdminAuthority;
|
|
454
|
-
}
|
|
455
478
|
const updateVaultConfigArgs = {
|
|
456
479
|
entry: mode,
|
|
457
|
-
data:
|
|
480
|
+
data: this.getValueForModeAsBuffer(mode, value),
|
|
458
481
|
};
|
|
459
|
-
if (isNaN(+value) || value === lib_1.DEFAULT_PUBLIC_KEY) {
|
|
460
|
-
if (mode.kind === new types_1.VaultConfigField.Name().kind) {
|
|
461
|
-
const data = Array.from(this.encodeVaultName(value));
|
|
462
|
-
updateVaultConfigArgs.data = Buffer.from(data);
|
|
463
|
-
}
|
|
464
|
-
else {
|
|
465
|
-
const data = (0, kit_1.address)(value);
|
|
466
|
-
updateVaultConfigArgs.data = Buffer.from(addressEncoder.encode(data));
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
const buffer = Buffer.alloc(8);
|
|
471
|
-
buffer.writeBigUInt64LE(BigInt(value.toString()));
|
|
472
|
-
updateVaultConfigArgs.data = buffer;
|
|
473
|
-
}
|
|
474
482
|
const vaultReserves = this.getVaultReserves(vaultState);
|
|
475
483
|
const vaultReservesState = await this.loadVaultReserves(vaultState);
|
|
476
484
|
let updateVaultConfigIx = (0, instructions_1.updateVaultConfig)(updateVaultConfigArgs, updateVaultConfigAccs, undefined, this._kaminoVaultProgramId);
|
|
@@ -503,6 +511,30 @@ class KaminoVaultClient {
|
|
|
503
511
|
};
|
|
504
512
|
return updateVaultConfigIxs;
|
|
505
513
|
}
|
|
514
|
+
/**
|
|
515
|
+
* Add or update a reserve whitelist entry. This controls whether the reserve is whitelisted for adding/updating
|
|
516
|
+
* allocations or for invest, depending on the mode parameter.
|
|
517
|
+
*
|
|
518
|
+
* @param reserve - Address of the reserve to whitelist
|
|
519
|
+
* @param mode - The whitelist mode: either 'Invest' or 'AddAllocation' with a value (1 = allow, 0 = deny)
|
|
520
|
+
* @param globalAdmin - The global admin that signs the transaction
|
|
521
|
+
* @returns - An instruction to add/update the whitelisted reserve
|
|
522
|
+
*/
|
|
523
|
+
async addUpdateWhitelistedReserveIx(reserve, mode, globalAdmin) {
|
|
524
|
+
const globalConfig = await getKvaultGlobalConfigPda(this._kaminoVaultProgramId);
|
|
525
|
+
const reserveWhitelistEntry = await getReserveWhitelistEntryPda(reserve, this._kaminoVaultProgramId);
|
|
526
|
+
const accounts = {
|
|
527
|
+
globalAdmin,
|
|
528
|
+
globalConfig,
|
|
529
|
+
reserve,
|
|
530
|
+
reserveWhitelistEntry,
|
|
531
|
+
systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS,
|
|
532
|
+
};
|
|
533
|
+
const args = {
|
|
534
|
+
update: mode,
|
|
535
|
+
};
|
|
536
|
+
return (0, instructions_1.addUpdateWhitelistedReserve)(args, accounts, undefined, this._kaminoVaultProgramId);
|
|
537
|
+
}
|
|
506
538
|
/** Sets the farm where the shares can be staked. This is store in vault state and a vault can only have one farm, so the new farm will ovveride the old farm
|
|
507
539
|
* @param vault - vault to set the farm for
|
|
508
540
|
* @param farm - the farm where the vault shares can be staked
|
|
@@ -520,38 +552,28 @@ class KaminoVaultClient {
|
|
|
520
552
|
return this.updateVaultConfigIxs(vault, new types_1.VaultConfigField.Farm(), farm, vaultAdminAuthority, lutIxsSigner, skipLutUpdate);
|
|
521
553
|
}
|
|
522
554
|
/**
|
|
523
|
-
* This method updates the vault config
|
|
524
|
-
*
|
|
555
|
+
* This method updates the vault config during vault initialization, within the same transaction
|
|
556
|
+
* where the vault is created. Use this when the vault state is not yet committed to the chain
|
|
557
|
+
* and cannot be fetched via RPC. For updates to existing vaults, use updateVaultConfigIxs instead.
|
|
558
|
+
*
|
|
559
|
+
* @param admin - the admin that signs the transaction
|
|
525
560
|
* @param vault - address of vault to be updated
|
|
526
561
|
* @param mode - the field to be updated
|
|
527
562
|
* @param value - the new value for the field to be updated (number or pubkey)
|
|
528
563
|
* @returns - an instruction to update the vault config
|
|
529
564
|
*/
|
|
530
|
-
updateUninitialisedVaultConfigIx(admin, vault, mode, value) {
|
|
565
|
+
async updateUninitialisedVaultConfigIx(admin, vault, mode, value) {
|
|
566
|
+
const globalConfig = await getKvaultGlobalConfigPda(this._kaminoVaultProgramId);
|
|
531
567
|
const updateVaultConfigAccs = {
|
|
532
|
-
|
|
568
|
+
signer: admin,
|
|
569
|
+
globalConfig: globalConfig,
|
|
533
570
|
vaultState: vault,
|
|
534
571
|
klendProgram: this._kaminoLendProgramId,
|
|
535
572
|
};
|
|
536
573
|
const updateVaultConfigArgs = {
|
|
537
574
|
entry: mode,
|
|
538
|
-
data:
|
|
575
|
+
data: this.getValueForModeAsBuffer(mode, value),
|
|
539
576
|
};
|
|
540
|
-
if (isNaN(+value)) {
|
|
541
|
-
if (mode.kind === new types_1.VaultConfigField.Name().kind) {
|
|
542
|
-
const data = Array.from(this.encodeVaultName(value));
|
|
543
|
-
updateVaultConfigArgs.data = Buffer.from(data);
|
|
544
|
-
}
|
|
545
|
-
else {
|
|
546
|
-
const data = (0, kit_1.address)(value);
|
|
547
|
-
updateVaultConfigArgs.data = Buffer.from(addressEncoder.encode(data));
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
const buffer = Buffer.alloc(8);
|
|
552
|
-
buffer.writeBigUInt64LE(BigInt(value.toString()));
|
|
553
|
-
updateVaultConfigArgs.data = buffer;
|
|
554
|
-
}
|
|
555
577
|
const updateVaultConfigIx = (0, instructions_1.updateVaultConfig)(updateVaultConfigArgs, updateVaultConfigAccs, undefined, this._kaminoVaultProgramId);
|
|
556
578
|
return updateVaultConfigIx;
|
|
557
579
|
}
|
|
@@ -1036,6 +1058,7 @@ class KaminoVaultClient {
|
|
|
1036
1058
|
if (createAtaIfNeeded) {
|
|
1037
1059
|
ixs.push(createAtaIx);
|
|
1038
1060
|
}
|
|
1061
|
+
const reserveWhitelistEntryOption = await getReserveWhitelistEntryIfExists(reserve.address, this.getConnection(), this._kaminoVaultProgramId);
|
|
1039
1062
|
const investAccounts = {
|
|
1040
1063
|
payer,
|
|
1041
1064
|
vaultState: vault.address,
|
|
@@ -1048,6 +1071,7 @@ class KaminoVaultClient {
|
|
|
1048
1071
|
lendingMarketAuthority: lendingMarketAuth,
|
|
1049
1072
|
reserveLiquiditySupply: reserve.state.liquidity.supplyVault,
|
|
1050
1073
|
reserveCollateralMint: reserve.state.collateral.mintPubkey,
|
|
1074
|
+
reserveWhitelistEntry: reserveWhitelistEntryOption,
|
|
1051
1075
|
klendProgram: this._kaminoLendProgramId,
|
|
1052
1076
|
instructionSysvarAccount: sysvars_1.SYSVAR_INSTRUCTIONS_ADDRESS,
|
|
1053
1077
|
tokenProgram: tokenProgram,
|
|
@@ -1072,13 +1096,39 @@ class KaminoVaultClient {
|
|
|
1072
1096
|
decodeVaultName(token) {
|
|
1073
1097
|
return (0, utils_1.decodeVaultName)(token);
|
|
1074
1098
|
}
|
|
1099
|
+
/** Helper to serialize value as Buffer for updateVaultConfig instruction */
|
|
1100
|
+
getValueForModeAsBuffer(mode, value) {
|
|
1101
|
+
const isWhitelistOnlyFlag = mode.kind === new types_1.VaultConfigField.AllowInvestInWhitelistedReservesOnly().kind ||
|
|
1102
|
+
mode.kind === new types_1.VaultConfigField.AllowAllocationsInWhitelistedReservesOnly().kind;
|
|
1103
|
+
if (isWhitelistOnlyFlag) {
|
|
1104
|
+
const flag = (0, utils_2.parseBooleanFlag)(value);
|
|
1105
|
+
return Buffer.from([flag]);
|
|
1106
|
+
}
|
|
1107
|
+
else if (isNaN(+value)) {
|
|
1108
|
+
if (mode.kind === new types_1.VaultConfigField.Name().kind) {
|
|
1109
|
+
const data = Array.from(this.encodeVaultName(value));
|
|
1110
|
+
return Buffer.from(data);
|
|
1111
|
+
}
|
|
1112
|
+
else {
|
|
1113
|
+
const data = (0, kit_1.address)(value);
|
|
1114
|
+
return Buffer.from(addressEncoder.encode(data));
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
else {
|
|
1118
|
+
const buffer = Buffer.alloc(8);
|
|
1119
|
+
buffer.writeBigUInt64LE(BigInt(value.toString()));
|
|
1120
|
+
return buffer;
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1075
1123
|
async withdrawIx(user, vault, vaultState, marketAddress, reserve, userSharesAta, userTokenAta, shareAmountLamports, vaultReservesState) {
|
|
1076
1124
|
const [lendingMarketAuth] = await (0, utils_2.lendingMarketAuthPda)(marketAddress, this._kaminoLendProgramId);
|
|
1125
|
+
const globalConfig = await getKvaultGlobalConfigPda(this._kaminoVaultProgramId);
|
|
1077
1126
|
const eventAuthority = await getEventAuthorityPda(this._kaminoVaultProgramId);
|
|
1078
1127
|
const withdrawAccounts = {
|
|
1079
1128
|
withdrawFromAvailable: {
|
|
1080
1129
|
user,
|
|
1081
1130
|
vaultState: vault.address,
|
|
1131
|
+
globalConfig: globalConfig,
|
|
1082
1132
|
tokenVault: vaultState.tokenVault,
|
|
1083
1133
|
baseVaultAuthority: vaultState.baseVaultAuthority,
|
|
1084
1134
|
userTokenAta: userTokenAta,
|
|
@@ -1114,10 +1164,12 @@ class KaminoVaultClient {
|
|
|
1114
1164
|
return withdrawIxn;
|
|
1115
1165
|
}
|
|
1116
1166
|
async withdrawFromAvailableIx(user, vault, vaultState, userSharesAta, userTokenAta, shareAmountLamports) {
|
|
1167
|
+
const globalConfig = await getKvaultGlobalConfigPda(this._kaminoVaultProgramId);
|
|
1117
1168
|
const eventAuthority = await getEventAuthorityPda(this._kaminoVaultProgramId);
|
|
1118
1169
|
const withdrawFromAvailableAccounts = {
|
|
1119
1170
|
user,
|
|
1120
1171
|
vaultState: vault.address,
|
|
1172
|
+
globalConfig: globalConfig,
|
|
1121
1173
|
tokenVault: vaultState.tokenVault,
|
|
1122
1174
|
baseVaultAuthority: vaultState.baseVaultAuthority,
|
|
1123
1175
|
userTokenAta,
|
|
@@ -2853,6 +2905,25 @@ async function getEventAuthorityPda(kaminoVaultProgramId) {
|
|
|
2853
2905
|
programAddress: kaminoVaultProgramId,
|
|
2854
2906
|
}))[0];
|
|
2855
2907
|
}
|
|
2908
|
+
async function getKvaultGlobalConfigPda(kaminoVaultProgramId) {
|
|
2909
|
+
return (await (0, kit_1.getProgramDerivedAddress)({
|
|
2910
|
+
seeds: [Buffer.from(GLOBAL_CONFIG_STATE_SEED)],
|
|
2911
|
+
programAddress: kaminoVaultProgramId,
|
|
2912
|
+
}))[0];
|
|
2913
|
+
}
|
|
2914
|
+
async function getReserveWhitelistEntryPda(reserveAddress, kaminoVaultProgramId) {
|
|
2915
|
+
return (await (0, kit_1.getProgramDerivedAddress)({
|
|
2916
|
+
seeds: [Buffer.from(WHITELISTED_RESERVES_SEED), addressEncoder.encode(reserveAddress)],
|
|
2917
|
+
programAddress: kaminoVaultProgramId,
|
|
2918
|
+
}))[0];
|
|
2919
|
+
}
|
|
2920
|
+
async function getReserveWhitelistEntryIfExists(reserveAddress, rpc, kaminoVaultProgramId) {
|
|
2921
|
+
const reserveWhitelistEntry = await getReserveWhitelistEntryPda(reserveAddress, kaminoVaultProgramId);
|
|
2922
|
+
const reserveWhitelistEntryAccount = await (0, kit_1.fetchEncodedAccount)(rpc, reserveWhitelistEntry, {
|
|
2923
|
+
commitment: 'processed',
|
|
2924
|
+
});
|
|
2925
|
+
return reserveWhitelistEntryAccount.exists ? (0, kit_1.some)(reserveWhitelistEntry) : (0, kit_1.none)();
|
|
2926
|
+
}
|
|
2856
2927
|
function parseVaultAdmin(vault, signer) {
|
|
2857
2928
|
return signer ?? (0, signer_1.noopSigner)(vault.vaultAdminAuthority);
|
|
2858
2929
|
}
|