@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
|
@@ -70,7 +70,7 @@ async function main() {
|
|
|
70
70
|
throw new Error('If using multisig mode, multisig pubkey is required');
|
|
71
71
|
}
|
|
72
72
|
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
73
|
-
const env = await (0, ManagerEnv_1.initEnv)(
|
|
73
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
74
74
|
const admin = await env.getSigner();
|
|
75
75
|
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
76
76
|
const { market: marketKp, ixs: createMarketIxs } = await kaminoManager.createMarketIxs({
|
|
@@ -196,6 +196,44 @@ async function main() {
|
|
|
196
196
|
const reserveConfigDisplay = parseReserveConfigToFile(reserveState.config);
|
|
197
197
|
fs.writeFileSync('./configs/' + reserveState.lendingMarket + '/' + reserveName + '.json', JSON.stringify(reserveConfigDisplay, null, 2));
|
|
198
198
|
});
|
|
199
|
+
commands
|
|
200
|
+
.command('init-kvault-global-config')
|
|
201
|
+
.requiredOption('--mode <string>', 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
|
|
202
|
+
.option(`--staging`, 'If true, will use the staging programs')
|
|
203
|
+
.option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
|
|
204
|
+
.option('--signer-path <string>', 'If set, it will use the provided signer')
|
|
205
|
+
.action(async ({ mode, staging, multisig, signerPath }) => {
|
|
206
|
+
if (mode === 'multisig' && !multisig) {
|
|
207
|
+
throw new Error('If using multisig mode, multisig is required');
|
|
208
|
+
}
|
|
209
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
210
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms, signerPath);
|
|
211
|
+
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
212
|
+
let signer = undefined;
|
|
213
|
+
if (signerPath) {
|
|
214
|
+
signer = await (0, signer_1.parseKeypairFile)(signerPath);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
const programData = await (0, lib_1.programDataPda)(env.kvaultProgramId);
|
|
218
|
+
const programDataInfo = await env.c.rpc.getAccountInfo(programData).send();
|
|
219
|
+
if (programDataInfo === null) {
|
|
220
|
+
throw new Error('KVault program data not found');
|
|
221
|
+
}
|
|
222
|
+
const programAdmin = programDataInfo.value?.owner.toString();
|
|
223
|
+
if (!programAdmin) {
|
|
224
|
+
throw new Error('Program admin not found');
|
|
225
|
+
}
|
|
226
|
+
signer = (0, signer_1.noopSigner)((0, kit_1.address)(programAdmin));
|
|
227
|
+
}
|
|
228
|
+
const ix = await kaminoManager.initKvaultGlobalConfigIx(signer);
|
|
229
|
+
await (0, processor_1.processTx)(env.c, signer, [
|
|
230
|
+
ix,
|
|
231
|
+
...(0, priorityFee_1.getPriorityFeeAndCuIxs)({
|
|
232
|
+
priorityFeeMultiplier: 2500,
|
|
233
|
+
}),
|
|
234
|
+
], mode, []);
|
|
235
|
+
mode === 'execute' && console.log('KVault global config initialized');
|
|
236
|
+
});
|
|
199
237
|
commands
|
|
200
238
|
.command('create-vault')
|
|
201
239
|
.requiredOption('--mint <string>', 'Vault token mint')
|
|
@@ -313,13 +351,29 @@ async function main() {
|
|
|
313
351
|
.option(`--staging`, 'If true, will use the staging programs')
|
|
314
352
|
.option(`--skip-lut-update`, 'If set, it will skip the LUT update')
|
|
315
353
|
.option(`--lutSigner <string>`, 'If set, it will use the provided signer instead of the default one for the LUT update')
|
|
316
|
-
.
|
|
317
|
-
|
|
354
|
+
.option(`--global-admin <string>`, 'Global admin signer (keypair path in execute/simulate modes, pubkey in multisig mode). Required when setting AllowInvestInWhitelistedReservesOnly or AllowAllocationsInWhitelistedReservesOnly to false')
|
|
355
|
+
.option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
|
|
356
|
+
.action(async ({ vault, field, value, mode, staging, skipLutUpdate, lutSigner, globalAdmin, multisig }) => {
|
|
357
|
+
if (mode === 'multisig' && !multisig) {
|
|
358
|
+
throw new Error('If using multisig mode, multisig pubkey is required');
|
|
359
|
+
}
|
|
360
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
361
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
318
362
|
const vaultAddress = (0, kit_1.address)(vault);
|
|
319
363
|
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
320
364
|
const kaminoVault = new lib_1.KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
|
|
321
365
|
const vaultState = await kaminoVault.getState();
|
|
322
|
-
|
|
366
|
+
// Use global admin signer if provided, otherwise fall back to vault admin/noop signer depending on mode
|
|
367
|
+
let signer;
|
|
368
|
+
if (mode === 'multisig' && globalAdmin) {
|
|
369
|
+
signer = (0, signer_1.noopSigner)((0, kit_1.address)(globalAdmin));
|
|
370
|
+
}
|
|
371
|
+
else if (globalAdmin) {
|
|
372
|
+
signer = await (0, signer_1.parseKeypairFile)(globalAdmin);
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
signer = await env.getSigner({ vaultState });
|
|
376
|
+
}
|
|
323
377
|
let lutSignerOrUndefined = undefined;
|
|
324
378
|
if (lutSigner) {
|
|
325
379
|
lutSignerOrUndefined = await (0, signer_1.parseKeypairFile)(lutSigner);
|
|
@@ -335,10 +389,142 @@ async function main() {
|
|
|
335
389
|
], mode, []);
|
|
336
390
|
mode === 'execute' && console.log('Vault updated');
|
|
337
391
|
});
|
|
392
|
+
commands
|
|
393
|
+
.command('add-update-whitelisted-reserve')
|
|
394
|
+
.requiredOption('--reserve <string>', 'Reserve address to whitelist')
|
|
395
|
+
.requiredOption('--whitelist-mode <string>', 'Whitelist mode: "Invest" or "AddAllocation"')
|
|
396
|
+
.requiredOption('--value <string>', 'Value: "1" or "true" to add to whitelist, "0" or "false" to remove from whitelist')
|
|
397
|
+
.requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
|
|
398
|
+
.requiredOption('--global-admin <string>', 'Global admin signer (keypair path in execute/simulate modes, pubkey in multisig mode)')
|
|
399
|
+
.option(`--staging`, 'If true, will use the staging programs')
|
|
400
|
+
.option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
|
|
401
|
+
.action(async ({ reserve, whitelistMode, value, mode, globalAdmin, staging, multisig }) => {
|
|
402
|
+
if (mode === 'multisig' && !multisig) {
|
|
403
|
+
throw new Error('If using multisig mode, multisig pubkey is required');
|
|
404
|
+
}
|
|
405
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
406
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
407
|
+
const reserveAddress = (0, kit_1.address)(reserve);
|
|
408
|
+
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
409
|
+
// Parse the value (1/true = add, 0/false = remove)
|
|
410
|
+
const flagValue = (0, lib_1.parseBooleanFlag)(value);
|
|
411
|
+
// Parse the whitelist mode
|
|
412
|
+
let whitelistModeEnum;
|
|
413
|
+
if (whitelistMode === 'Invest') {
|
|
414
|
+
whitelistModeEnum = new types_2.UpdateReserveWhitelistMode.Invest([flagValue]);
|
|
415
|
+
}
|
|
416
|
+
else if (whitelistMode === 'AddAllocation') {
|
|
417
|
+
whitelistModeEnum = new types_2.UpdateReserveWhitelistMode.AddAllocation([flagValue]);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
throw new Error(`Invalid whitelist mode '${whitelistMode}'. Expected 'Invest' or 'AddAllocation'.`);
|
|
421
|
+
}
|
|
422
|
+
let globalAdminSigner;
|
|
423
|
+
if (mode === 'multisig') {
|
|
424
|
+
globalAdminSigner = (0, signer_1.noopSigner)((0, kit_1.address)(globalAdmin));
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
globalAdminSigner = await (0, signer_1.parseKeypairFile)(globalAdmin);
|
|
428
|
+
}
|
|
429
|
+
const instruction = await kaminoManager.addUpdateWhitelistedReserveIx(reserveAddress, whitelistModeEnum, globalAdminSigner);
|
|
430
|
+
await (0, processor_1.processTx)(env.c, globalAdminSigner, [
|
|
431
|
+
instruction,
|
|
432
|
+
...(0, priorityFee_1.getPriorityFeeAndCuIxs)({
|
|
433
|
+
priorityFeeMultiplier: 2500,
|
|
434
|
+
}),
|
|
435
|
+
], mode, []);
|
|
436
|
+
mode === 'execute' &&
|
|
437
|
+
console.log(`Reserve ${reserveAddress} whitelisted for ${whitelistMode} with value ${flagValue ? 'ALLOW' : 'DENY'}`);
|
|
438
|
+
});
|
|
439
|
+
commands
|
|
440
|
+
.command('backfill-whitelisted-reserves')
|
|
441
|
+
.option('--value <string>', 'Value: "1" or "true" to add to whitelist, "0" or "false" to remove from whitelist', '1')
|
|
442
|
+
.requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
|
|
443
|
+
.requiredOption('--global-admin <string>', 'Global admin signer (keypair path in execute/simulate modes, pubkey in multisig mode)')
|
|
444
|
+
.option(`--markets <string>`, 'Comma-separated list of market addresses. If not provided, all markets will be processed')
|
|
445
|
+
.option(`--staging`, 'If true, will use the staging programs')
|
|
446
|
+
.option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
|
|
447
|
+
.action(async ({ value, mode, globalAdmin, markets, staging, multisig }) => {
|
|
448
|
+
if (mode === 'multisig' && !multisig) {
|
|
449
|
+
throw new Error('If using multisig mode, multisig pubkey is required');
|
|
450
|
+
}
|
|
451
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
452
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
453
|
+
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
454
|
+
let globalAdminSigner;
|
|
455
|
+
if (mode === 'multisig') {
|
|
456
|
+
globalAdminSigner = (0, signer_1.noopSigner)((0, kit_1.address)(globalAdmin));
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
globalAdminSigner = await (0, signer_1.parseKeypairFile)(globalAdmin);
|
|
460
|
+
}
|
|
461
|
+
// Get markets to process
|
|
462
|
+
let marketsToProcess;
|
|
463
|
+
if (markets) {
|
|
464
|
+
const marketAddresses = markets.split(',').map((m) => (0, kit_1.address)(m.trim()));
|
|
465
|
+
console.log(`Processing ${marketAddresses.length} specified markets...`);
|
|
466
|
+
marketsToProcess = await Promise.all(marketAddresses.map(async (marketAddress) => {
|
|
467
|
+
const market = await lib_1.KaminoMarket.load(env.c.rpc, marketAddress, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId);
|
|
468
|
+
if (!market) {
|
|
469
|
+
throw new Error(`Market ${marketAddress} not found`);
|
|
470
|
+
}
|
|
471
|
+
return market;
|
|
472
|
+
}));
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
console.log('Fetching all markets...');
|
|
476
|
+
marketsToProcess = await kaminoManager.getAllMarkets(env.klendProgramId);
|
|
477
|
+
console.log(`Found ${marketsToProcess.length} markets`);
|
|
478
|
+
}
|
|
479
|
+
// Collect all reserves from all markets
|
|
480
|
+
const allReserves = [];
|
|
481
|
+
for (const market of marketsToProcess) {
|
|
482
|
+
const marketName = (0, lib_1.parseTokenSymbol)(market.state.name);
|
|
483
|
+
const reserveAddresses = Array.from(market.reserves.keys());
|
|
484
|
+
console.log(`Market ${market.getAddress()} (${marketName}): ${reserveAddresses.length} reserves`);
|
|
485
|
+
allReserves.push(...reserveAddresses);
|
|
486
|
+
}
|
|
487
|
+
console.log(`\nTotal reserves to whitelist: ${allReserves.length}`);
|
|
488
|
+
console.log(`Whitelist modes: Invest AND AddAllocation (both will be set)`);
|
|
489
|
+
// Parse the value (1/true = add, 0/false = remove)
|
|
490
|
+
const flagValue = (0, lib_1.parseBooleanFlag)(value);
|
|
491
|
+
console.log(`Action: ${flagValue ? 'ADD to whitelist' : 'REMOVE from whitelist'}`);
|
|
492
|
+
if (mode === 'simulate') {
|
|
493
|
+
console.log('\nSimulation mode - no transactions will be executed');
|
|
494
|
+
}
|
|
495
|
+
// Create whitelist mode enums for both Invest and AddAllocation
|
|
496
|
+
const investModeEnum = new types_2.UpdateReserveWhitelistMode.Invest([flagValue]);
|
|
497
|
+
const addAllocationModeEnum = new types_2.UpdateReserveWhitelistMode.AddAllocation([flagValue]);
|
|
498
|
+
// Process each reserve with both whitelist modes
|
|
499
|
+
let successCount = 0;
|
|
500
|
+
let errorCount = 0;
|
|
501
|
+
for (const reserveAddress of allReserves) {
|
|
502
|
+
try {
|
|
503
|
+
const investInstruction = await kaminoManager.addUpdateWhitelistedReserveIx(reserveAddress, investModeEnum, globalAdminSigner);
|
|
504
|
+
const addAllocationInstruction = await kaminoManager.addUpdateWhitelistedReserveIx(reserveAddress, addAllocationModeEnum, globalAdminSigner);
|
|
505
|
+
await (0, processor_1.processTx)(env.c, globalAdminSigner, [
|
|
506
|
+
investInstruction,
|
|
507
|
+
addAllocationInstruction,
|
|
508
|
+
...(0, priorityFee_1.getPriorityFeeAndCuIxs)({
|
|
509
|
+
priorityFeeMultiplier: 2500,
|
|
510
|
+
}),
|
|
511
|
+
], mode, []);
|
|
512
|
+
successCount++;
|
|
513
|
+
console.log(`✓ [${successCount}/${allReserves.length}] ${reserveAddress} (Invest + AddAllocation)`);
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
errorCount++;
|
|
517
|
+
console.error(`✗ Failed to whitelist ${reserveAddress}:`, error);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
console.log(`\nBackfill complete!`);
|
|
521
|
+
console.log(`Success: ${successCount} reserves (both modes set)`);
|
|
522
|
+
console.log(`Errors: ${errorCount}`);
|
|
523
|
+
});
|
|
338
524
|
commands
|
|
339
525
|
.command('update-vault-mgmt-fee')
|
|
340
526
|
.requiredOption('--vault <string>', 'Vault address')
|
|
341
|
-
.requiredOption('--fee-bps <string>', '
|
|
527
|
+
.requiredOption('--fee-bps <string>', 'Management fee to set (in basis points)')
|
|
342
528
|
.requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
|
|
343
529
|
.option(`--staging`, 'If true, will use the staging programs')
|
|
344
530
|
.action(async ({ vault, feeBps, mode, staging }) => {
|
|
@@ -367,7 +553,11 @@ async function main() {
|
|
|
367
553
|
.option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
|
|
368
554
|
.option(`--signer <string>`, 'If set, it will use the provided signer instead of the default one')
|
|
369
555
|
.action(async ({ lut, addresses, mode, staging, multisig, signer }) => {
|
|
370
|
-
|
|
556
|
+
if (mode === 'multisig' && !multisig) {
|
|
557
|
+
throw new Error('If using multisig mode, multisig is required');
|
|
558
|
+
}
|
|
559
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
560
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
371
561
|
const lutAddress = (0, kit_1.address)(lut);
|
|
372
562
|
let txSigner = await env.getSigner();
|
|
373
563
|
// if the signer is provided (path to a keypair) we use it, otherwise we use the default one
|
|
@@ -375,9 +565,6 @@ async function main() {
|
|
|
375
565
|
txSigner = await (0, signer_1.parseKeypairFile)(signer);
|
|
376
566
|
}
|
|
377
567
|
const addressesArr = addresses.split(' ').map((a) => (0, kit_1.address)(a));
|
|
378
|
-
if (mode === 'multisig' && !multisig) {
|
|
379
|
-
throw new Error('If using multisig mode, multisig is required');
|
|
380
|
-
}
|
|
381
568
|
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
382
569
|
const instructions = await kaminoManager.insertIntoLutIxs(txSigner, lutAddress, addressesArr);
|
|
383
570
|
await (0, processor_1.processTx)(env.c, txSigner, [
|
|
@@ -443,7 +630,7 @@ async function main() {
|
|
|
443
630
|
commands
|
|
444
631
|
.command('update-vault-perf-fee')
|
|
445
632
|
.requiredOption('--vault <string>', 'Vault address')
|
|
446
|
-
.requiredOption('--fee-bps <string>', '
|
|
633
|
+
.requiredOption('--fee-bps <string>', 'Performance fee to set (in basis points)')
|
|
447
634
|
.requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
|
|
448
635
|
.option(`--staging`, 'If true, will use the staging programs')
|
|
449
636
|
.action(async ({ vault, feeBps, mode, staging }) => {
|
|
@@ -683,7 +870,8 @@ async function main() {
|
|
|
683
870
|
if (mode === 'multisig' && !multisig) {
|
|
684
871
|
throw new Error('If using multisig mode, multisig is required');
|
|
685
872
|
}
|
|
686
|
-
const
|
|
873
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
874
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
687
875
|
const vaultAddress = (0, kit_1.address)(vault);
|
|
688
876
|
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
689
877
|
const kaminoVault = new lib_1.KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
|
|
@@ -710,7 +898,8 @@ async function main() {
|
|
|
710
898
|
if (mode === 'multisig' && !multisig) {
|
|
711
899
|
throw new Error('If using multisig mode, multisig is required');
|
|
712
900
|
}
|
|
713
|
-
const
|
|
901
|
+
const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
|
|
902
|
+
const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
|
|
714
903
|
const signer = await env.getSigner();
|
|
715
904
|
const vaultAddress = (0, kit_1.address)(vault);
|
|
716
905
|
const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
|
|
@@ -1327,7 +1516,7 @@ function parseReserveConfigFromFile(reserveConfigFromFile) {
|
|
|
1327
1516
|
maxLiquidationBonusBps: reserveConfigFromFile.maxLiquidationBonusBps,
|
|
1328
1517
|
badDebtLiquidationBonusBps: reserveConfigFromFile.badDebtLiquidationBonusBps,
|
|
1329
1518
|
fees: {
|
|
1330
|
-
|
|
1519
|
+
originationFeeSf: fraction_1.Fraction.fromDecimal(new decimal_js_1.default(reserveConfigFromFile.fees.borrowFee)).valueSf,
|
|
1331
1520
|
flashLoanFeeSf: fraction_1.Fraction.fromDecimal(new decimal_js_1.default(reserveConfigFromFile.fees.flashLoanFee)).valueSf,
|
|
1332
1521
|
padding: Array(8).fill(0),
|
|
1333
1522
|
},
|
|
@@ -1373,7 +1562,9 @@ function parseReserveConfigFromFile(reserveConfigFromFile) {
|
|
|
1373
1562
|
borrowLimitAgainstThisCollateralInElevationGroup: parseReserveBorrowLimitAgainstCollInEmode(reserveConfigFromFile),
|
|
1374
1563
|
deleveragingBonusIncreaseBpsPerDay: new bn_js_1.default(reserveConfigFromFile.deleveragingBonusIncreaseBpsPerDay),
|
|
1375
1564
|
reserved1: Array(1).fill(0),
|
|
1376
|
-
|
|
1565
|
+
minDeleveragingBonusBps: 0,
|
|
1566
|
+
proposerAuthorityLocked: 0,
|
|
1567
|
+
blockCtokenUsage: 0,
|
|
1377
1568
|
};
|
|
1378
1569
|
return new types_1.ReserveConfig(reserveConfigFields);
|
|
1379
1570
|
}
|
|
@@ -1432,7 +1623,7 @@ function parseReserveConfigToFile(reserveConfig) {
|
|
|
1432
1623
|
maxLiquidationBonusBps: reserveConfig.maxLiquidationBonusBps,
|
|
1433
1624
|
badDebtLiquidationBonusBps: reserveConfig.badDebtLiquidationBonusBps,
|
|
1434
1625
|
fees: {
|
|
1435
|
-
borrowFee: new fraction_1.Fraction(reserveConfig.fees.
|
|
1626
|
+
borrowFee: new fraction_1.Fraction(reserveConfig.fees.originationFeeSf).toDecimal().toString(),
|
|
1436
1627
|
flashLoanFee: new fraction_1.Fraction(reserveConfig.fees.flashLoanFeeSf).toDecimal().toString(),
|
|
1437
1628
|
padding: Array(8).fill(0),
|
|
1438
1629
|
},
|