@kamino-finance/klend-sdk 3.2.17 → 3.2.19

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 (48) hide show
  1. package/README.md +42 -0
  2. package/dist/classes/manager.js +0 -17
  3. package/dist/classes/manager.js.map +1 -1
  4. package/dist/classes/market.d.ts +15 -0
  5. package/dist/classes/market.js +153 -0
  6. package/dist/classes/market.js.map +1 -1
  7. package/dist/classes/obligation.js.map +1 -1
  8. package/dist/classes/reserve.js +5 -49
  9. package/dist/classes/reserve.js.map +1 -1
  10. package/dist/client_kamino_manager.d.ts +2 -1
  11. package/dist/client_kamino_manager.js +22 -21
  12. package/dist/client_kamino_manager.js.map +1 -1
  13. package/dist/idl.json +41 -19
  14. package/dist/idl_codegen/accounts/LendingMarket.d.ts +6 -6
  15. package/dist/idl_codegen/accounts/LendingMarket.js +5 -5
  16. package/dist/idl_codegen/accounts/LendingMarket.js.map +1 -1
  17. package/dist/idl_codegen/errors/custom.d.ts +25 -1
  18. package/dist/idl_codegen/errors/custom.js +40 -1
  19. package/dist/idl_codegen/errors/custom.js.map +1 -1
  20. package/dist/idl_codegen/instructions/flashBorrowReserveLiquidity.d.ts +0 -1
  21. package/dist/idl_codegen/instructions/flashBorrowReserveLiquidity.js +1 -1
  22. package/dist/idl_codegen/instructions/flashBorrowReserveLiquidity.js.map +1 -1
  23. package/dist/idl_codegen/instructions/flashRepayReserveLiquidity.d.ts +0 -1
  24. package/dist/idl_codegen/instructions/flashRepayReserveLiquidity.js +1 -1
  25. package/dist/idl_codegen/instructions/flashRepayReserveLiquidity.js.map +1 -1
  26. package/dist/idl_codegen/instructions/index.d.ts +2 -0
  27. package/dist/idl_codegen/instructions/index.js +3 -1
  28. package/dist/idl_codegen/instructions/index.js.map +1 -1
  29. package/dist/idl_codegen/instructions/refreshReservesBatch.d.ts +6 -0
  30. package/dist/idl_codegen/instructions/refreshReservesBatch.js +43 -0
  31. package/dist/idl_codegen/instructions/refreshReservesBatch.js.map +1 -0
  32. package/dist/idl_codegen/programId.js.map +1 -1
  33. package/dist/idl_codegen/types/ReserveConfig.d.ts +16 -16
  34. package/dist/idl_codegen/types/ReserveConfig.js +12 -12
  35. package/dist/idl_codegen/types/ReserveConfig.js.map +1 -1
  36. package/dist/idl_codegen/types/UpdateConfigMode.d.ts +14 -14
  37. package/dist/idl_codegen/types/UpdateConfigMode.js +25 -25
  38. package/dist/idl_codegen/types/UpdateConfigMode.js.map +1 -1
  39. package/dist/idl_codegen/types/UpdateLendingMarketMode.d.ts +20 -7
  40. package/dist/idl_codegen/types/UpdateLendingMarketMode.js +39 -13
  41. package/dist/idl_codegen/types/UpdateLendingMarketMode.js.map +1 -1
  42. package/dist/idl_codegen/types/index.d.ts +4 -4
  43. package/dist/idl_codegen/types/index.js.map +1 -1
  44. package/dist/utils/instruction.js +0 -1
  45. package/dist/utils/instruction.js.map +1 -1
  46. package/dist/utils/managerTypes.js +2 -2
  47. package/dist/utils/managerTypes.js.map +1 -1
  48. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
- import { Keypair, PublicKey } from '@solana/web3.js';
1
+ import { Connection, Keypair, PublicKey } from '@solana/web3.js';
2
2
  import { Web3Client } from './lib';
3
3
  import * as anchor from '@coral-xyz/anchor';
4
4
  export declare function parseKeypairFile(file: string): Keypair;
5
5
  export type Env = {
6
6
  provider: anchor.AnchorProvider;
7
7
  payer: Keypair;
8
+ connection: Connection;
8
9
  client: Web3Client;
9
10
  kLendProgramId: PublicKey;
10
11
  kVaultProgramId: PublicKey;
@@ -67,7 +67,7 @@ function main() {
67
67
  throw new Error('If using multisig mode, multisig pubkey is required');
68
68
  }
69
69
  const multisigPk = multisig ? new web3_js_1.PublicKey(multisig) : web3_js_1.PublicKey.default;
70
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
70
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
71
71
  const { market: marketKp, ixns: createMarketIxns } = yield kaminoManager.createMarketIxs({
72
72
  admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,
73
73
  });
@@ -92,7 +92,7 @@ function main() {
92
92
  throw new Error('If using multisig mode, multisig is required');
93
93
  }
94
94
  const multisigPk = multisig ? new web3_js_1.PublicKey(multisig) : web3_js_1.PublicKey.default;
95
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
95
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
96
96
  const reserveConfigFromFile = JSON.parse(fs.readFileSync(reserveConfigPath, 'utf8'));
97
97
  const reserveConfig = parseReserveConfigFromFile(reserveConfigFromFile);
98
98
  const assetConfig = new lib_1.AssetReserveConfigCli(tokenMint, tokenMintProgramId, reserveConfig);
@@ -117,12 +117,12 @@ function main() {
117
117
  .action((_a) => __awaiter(this, [_a], void 0, function* ({ reserve, reserveConfigPath, mode, updateEntireConfig, staging, multisig }) {
118
118
  const env = initializeClient(mode === 'multisig', staging);
119
119
  const reserveAddress = new web3_js_1.PublicKey(reserve);
120
- const reserveState = yield lib_1.Reserve.fetch(env.provider.connection, reserveAddress, env.kLendProgramId);
120
+ const reserveState = yield lib_1.Reserve.fetch(env.connection, reserveAddress, env.kLendProgramId);
121
121
  if (!reserveState) {
122
122
  throw new Error('Reserve not found');
123
123
  }
124
124
  const marketAddress = reserveState.lendingMarket;
125
- const marketState = yield lib_1.LendingMarket.fetch(env.provider.connection, marketAddress, env.kLendProgramId);
125
+ const marketState = yield lib_1.LendingMarket.fetch(env.connection, marketAddress, env.kLendProgramId);
126
126
  if (!marketState) {
127
127
  throw new Error('Market not found');
128
128
  }
@@ -133,7 +133,7 @@ function main() {
133
133
  if (mode === 'multisig' && !multisig) {
134
134
  throw new Error('If using multisig mode, multisig is required');
135
135
  }
136
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
136
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
137
137
  const reserveConfigFromFile = JSON.parse(fs.readFileSync(reserveConfigPath, 'utf8'));
138
138
  const reserveConfig = parseReserveConfigFromFile(reserveConfigFromFile);
139
139
  const ixns = yield kaminoManager.updateReserveIxs(marketWithAddress, reserveAddress, reserveConfig, reserveState, updateEntireConfig);
@@ -147,7 +147,7 @@ function main() {
147
147
  .action((_a) => __awaiter(this, [_a], void 0, function* ({ reserve, staging }) {
148
148
  const env = initializeClient(false, staging);
149
149
  const reserveAddress = new web3_js_1.PublicKey(reserve);
150
- const reserveState = yield lib_1.Reserve.fetch(env.provider.connection, reserveAddress, env.kLendProgramId);
150
+ const reserveState = yield lib_1.Reserve.fetch(env.connection, reserveAddress, env.kLendProgramId);
151
151
  if (!reserveState) {
152
152
  throw new Error('Reserve not found');
153
153
  }
@@ -170,7 +170,7 @@ function main() {
170
170
  throw new Error('If using multisig mode, multisig is required');
171
171
  }
172
172
  const multisigPk = multisig ? new web3_js_1.PublicKey(multisig) : web3_js_1.PublicKey.default;
173
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
173
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
174
174
  const kaminoVaultConfig = new lib_1.KaminoVaultConfig({
175
175
  admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,
176
176
  tokenMint: tokenMint,
@@ -200,8 +200,8 @@ function main() {
200
200
  if (mode === 'multisig' && !multisig) {
201
201
  throw new Error('If using multisig mode, multisig is required');
202
202
  }
203
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
204
- const reserveState = yield lib_1.Reserve.fetch(env.provider.connection, reserveAddress, env.kLendProgramId);
203
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
204
+ const reserveState = yield lib_1.Reserve.fetch(env.connection, reserveAddress, env.kLendProgramId);
205
205
  if (!reserveState) {
206
206
  throw new Error('Reserve not found');
207
207
  }
@@ -217,7 +217,7 @@ function main() {
217
217
  }));
218
218
  commands.command('get-oracle-mappings').action(() => __awaiter(this, void 0, void 0, function* () {
219
219
  const env = initializeClient(false, false);
220
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
220
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
221
221
  console.log('Getting oracle mappings');
222
222
  const oracleConfigs = yield kaminoManager.getScopeOracleConfigs();
223
223
  console.log('oracleConfigs', JSON.parse(JSON.stringify(oracleConfigs)));
@@ -229,7 +229,7 @@ function main() {
229
229
  .action((_a) => __awaiter(this, [_a], void 0, function* ({ lendingMarket, staging }) {
230
230
  const env = initializeClient(false, staging);
231
231
  const lendingMarketAddress = new web3_js_1.PublicKey(lendingMarket);
232
- const lendingMarketState = yield lib_1.LendingMarket.fetch(env.provider.connection, lendingMarketAddress, env.kLendProgramId);
232
+ const lendingMarketState = yield lib_1.LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);
233
233
  if (!lendingMarketState) {
234
234
  throw new Error('Lending Market not found');
235
235
  }
@@ -245,11 +245,11 @@ function main() {
245
245
  const env = initializeClient(false, staging);
246
246
  const decoder = new TextDecoder('utf-8');
247
247
  const lendingMarketAddress = new web3_js_1.PublicKey(lendingMarket);
248
- const kaminoMarket = yield lib_1.KaminoMarket.load(env.provider.connection, lendingMarketAddress, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.kLendProgramId);
248
+ const kaminoMarket = yield lib_1.KaminoMarket.load(env.connection, lendingMarketAddress, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.kLendProgramId);
249
249
  if (!kaminoMarket) {
250
250
  throw new Error('Lending Market not found');
251
251
  }
252
- const lendingMarketState = yield lib_1.LendingMarket.fetch(env.provider.connection, lendingMarketAddress, env.kLendProgramId);
252
+ const lendingMarketState = yield lib_1.LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);
253
253
  if (!lendingMarketState) {
254
254
  throw new Error('Lending Market not found');
255
255
  }
@@ -272,7 +272,7 @@ function main() {
272
272
  .action((_a) => __awaiter(this, [_a], void 0, function* ({ lendingMarket, lendingMarketConfigPath, mode, staging }) {
273
273
  const env = initializeClient(mode === 'multisig', staging);
274
274
  const lendingMarketAddress = new web3_js_1.PublicKey(lendingMarket);
275
- const lendingMarketState = yield lib_1.LendingMarket.fetch(env.provider.connection, lendingMarketAddress, env.kLendProgramId);
275
+ const lendingMarketState = yield lib_1.LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);
276
276
  if (!lendingMarketState) {
277
277
  throw new Error('Lending Market not found');
278
278
  }
@@ -283,7 +283,7 @@ function main() {
283
283
  if (mode === 'multisig') {
284
284
  throw new Error('If using multisig mode, multisig is required');
285
285
  }
286
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
286
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
287
287
  const newLendingMarket = lib_1.LendingMarket.fromJSON(JSON.parse(fs.readFileSync(lendingMarketConfigPath, 'utf8')));
288
288
  const ixns = kaminoManager.updateLendingMarketIxs(marketWithAddress, newLendingMarket);
289
289
  // executing 6 ixns in a txn to make sure they fit
@@ -302,7 +302,7 @@ function main() {
302
302
  .action((_a) => __awaiter(this, [_a], void 0, function* ({ lendingMarket, mode, staging }) {
303
303
  const env = initializeClient(mode === 'multisig', staging);
304
304
  const lendingMarketAddress = new web3_js_1.PublicKey(lendingMarket);
305
- const lendingMarketState = yield lib_1.LendingMarket.fetch(env.provider.connection, lendingMarketAddress, env.kLendProgramId);
305
+ const lendingMarketState = yield lib_1.LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);
306
306
  if (!lendingMarketState) {
307
307
  throw new Error('Lending Market not found');
308
308
  }
@@ -316,7 +316,7 @@ function main() {
316
316
  if (mode === 'multisig') {
317
317
  throw new Error('If using multisig mode, multisig is required');
318
318
  }
319
- const kaminoManager = new lib_1.KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);
319
+ const kaminoManager = new lib_1.KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);
320
320
  const ixn = kaminoManager.updateLendingMarketOwnerIxs(marketWithAddress);
321
321
  const _updateLendingMarketSig = yield processTxn(env.client, env.payer, [ixn], mode, 2500, [], 400000);
322
322
  mode === 'execute' &&
@@ -372,6 +372,7 @@ function setUpProgram(args) {
372
372
  provider,
373
373
  payer,
374
374
  client,
375
+ connection,
375
376
  kLendProgramId: args.kLendProgramId,
376
377
  kVaultProgramId: args.kVaultProgramId,
377
378
  };
@@ -441,7 +442,6 @@ function parseReserveConfigFromFile(farmConfigFromFile) {
441
442
  protocolLiquidationFeePct: farmConfigFromFile.protocolLiquidationFeePct,
442
443
  protocolTakeRatePct: farmConfigFromFile.protocolLiquidationFeePct,
443
444
  assetTier: farmConfigFromFile.assetTier,
444
- multiplierSideBoost: farmConfigFromFile.multiplierSideBoost,
445
445
  maxLiquidationBonusBps: farmConfigFromFile.maxLiquidationBonusBps,
446
446
  badDebtLiquidationBonusBps: farmConfigFromFile.badDebtLiquidationBonusBps,
447
447
  fees: {
@@ -473,13 +473,14 @@ function parseReserveConfigFromFile(farmConfigFromFile) {
473
473
  borrowFactorPct: new anchor_1.BN(farmConfigFromFile.borrowFactorPct),
474
474
  elevationGroups: farmConfigFromFile.elevationGroups,
475
475
  deleveragingThresholdSlotsPerBps: new anchor_1.BN(farmConfigFromFile.deleveragingThresholdSlotsPerBps),
476
- multiplierTagBoost: farmConfigFromFile.multiplierTagBoost,
477
476
  disableUsageAsCollOutsideEmode: farmConfigFromFile.disableUsageAsCollOutsideEmode,
478
477
  utilizationLimitBlockBorrowingAbove: farmConfigFromFile.utilizationLimitBlockBorrowingAbove,
479
478
  hostFixedInterestRateBps: farmConfigFromFile.hostFixedInterestRateBps,
480
479
  borrowLimitOutsideElevationGroup: new anchor_1.BN(farmConfigFromFile.borrowLimitOutsideElevationGroup),
481
480
  borrowLimitAgainstThisCollateralInElevationGroup: parseReserveBorrowLimitAgainstCollInEmode(farmConfigFromFile),
482
481
  reserved1: Array(2).fill(0),
482
+ reserved2: Array(2).fill(0),
483
+ reserved3: Array(8).fill(0),
483
484
  };
484
485
  return new types_1.ReserveConfig(reserveConfigFields);
485
486
  }
@@ -534,7 +535,6 @@ function parseReserveConfigToFile(reserveConfig) {
534
535
  protocolLiquidationFeePct: reserveConfig.protocolLiquidationFeePct,
535
536
  protocolTakeRatePct: reserveConfig.protocolLiquidationFeePct,
536
537
  assetTier: reserveConfig.assetTier,
537
- multiplierSideBoost: reserveConfig.multiplierSideBoost,
538
538
  maxLiquidationBonusBps: reserveConfig.maxLiquidationBonusBps,
539
539
  badDebtLiquidationBonusBps: reserveConfig.badDebtLiquidationBonusBps,
540
540
  fees: {
@@ -566,13 +566,14 @@ function parseReserveConfigToFile(reserveConfig) {
566
566
  borrowFactorPct: reserveConfig.borrowFactorPct.toString(),
567
567
  elevationGroups: reserveConfig.elevationGroups,
568
568
  deleveragingThresholdSlotsPerBps: reserveConfig.deleveragingThresholdSlotsPerBps.toString(),
569
- multiplierTagBoost: reserveConfig.multiplierTagBoost,
570
569
  disableUsageAsCollOutsideEmode: reserveConfig.disableUsageAsCollOutsideEmode,
571
570
  utilizationLimitBlockBorrowingAbove: reserveConfig.utilizationLimitBlockBorrowingAbove,
572
571
  hostFixedInterestRateBps: reserveConfig.hostFixedInterestRateBps,
573
572
  borrowLimitOutsideElevationGroup: reserveConfig.borrowLimitOutsideElevationGroup.toString(),
574
573
  borrowLimitAgainstThisCollateralInElevationGroup: reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((entry) => entry.toString()),
575
574
  reserved1: Array(2).fill(0),
575
+ reserved2: Array(2).fill(0),
576
+ reserved3: Array(8).fill(0),
576
577
  };
577
578
  }
578
579
  //# sourceMappingURL=client_kamino_manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client_kamino_manager.js","sourceRoot":"","sources":["../src/client_kamino_manager.ts"],"names":[],"mappings":"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","sourcesContent":["import dotenv from 'dotenv';\nimport { Command } from 'commander';\nimport {\n ComputeBudgetProgram,\n Keypair,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n TransactionSignature,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AssetReserveConfigCli,\n Chain,\n DEFAULT_RECENT_SLOT_DURATION_MS,\n encodeTokenName,\n KaminoManager,\n KaminoMarket,\n KaminoVault,\n KaminoVaultConfig,\n LendingMarket,\n MAINNET_BETA_CHAIN_ID,\n Reserve,\n ReserveAllocationConfig,\n ReserveWithAddress,\n signSendAndConfirmRawTransactionWithRetry,\n Web3Client,\n} from './lib';\nimport * as anchor from '@coral-xyz/anchor';\nimport { binary_to_base58 } from 'base58-js';\nimport {\n BorrowRateCurve,\n CurvePointFields,\n PriceHeuristic,\n ReserveConfig,\n ReserveConfigFields,\n ScopeConfiguration,\n TokenInfo,\n WithdrawalCaps,\n} from './idl_codegen/types';\nimport { Fraction } from './classes/fraction';\nimport Decimal from 'decimal.js';\nimport { BN } from '@coral-xyz/anchor';\nimport { PythConfiguration, SwitchboardConfiguration } from './idl_codegen_kamino_vault/types';\nimport * as fs from 'fs';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\nimport { MarketWithAddress } from './utils/managerTypes';\n\ndotenv.config({\n path: `.env${process.env.ENV ? '.' + process.env.ENV : ''}`,\n});\n\nasync function main() {\n const commands = new Command();\n\n commands.name('kamino-manager-cli').description('CLI to interact with the kvaults and klend programs');\n\n commands\n .command('create-market')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig pubkey is required');\n }\n\n const multisigPk = multisig ? new PublicKey(multisig) : PublicKey.default;\n\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const { market: marketKp, ixns: createMarketIxns } = await kaminoManager.createMarketIxs({\n admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,\n });\n\n const _createMarketSig = await processTxn(env.client, env.payer, createMarketIxns, mode, 2500, [marketKp]);\n\n mode === 'execute' && console.log('Market created:', marketKp.publicKey.toBase58());\n });\n\n commands\n .command('add-asset-to-market')\n .requiredOption('--market <string>', 'Market addres to add asset to')\n .requiredOption('--mint <string>', 'Reserve liquidity token mint')\n .requiredOption('--mint-program-id <string>', 'Reserve liquidity token mint program id')\n .requiredOption('--reserve-config-path <string>', 'Path for the reserve config')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ market, mint, mintProgramId, reserveConfigPath, mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const tokenMint = new PublicKey(mint);\n const tokenMintProgramId = new PublicKey(mintProgramId);\n const marketAddress = new PublicKey(market);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const multisigPk = multisig ? new PublicKey(multisig) : PublicKey.default;\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const reserveConfigFromFile = JSON.parse(fs.readFileSync(reserveConfigPath, 'utf8'));\n\n const reserveConfig = parseReserveConfigFromFile(reserveConfigFromFile);\n const assetConfig = new AssetReserveConfigCli(tokenMint, tokenMintProgramId, reserveConfig);\n\n const { reserve, txnIxns } = await kaminoManager.addAssetToMarketIxs({\n admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,\n marketAddress: marketAddress,\n assetConfig: assetConfig,\n });\n\n console.log('reserve: ', reserve.publicKey);\n\n const _createReserveSig = await processTxn(env.client, env.payer, txnIxns[0], mode, 2500, [reserve]);\n\n const _updateReserveSig = await processTxn(env.client, env.payer, txnIxns[1], mode, 2500, [], 400_000);\n\n mode === 'execute' &&\n console.log(\n 'Reserve Created with config:',\n JSON.parse(JSON.stringify(reserveConfig)),\n '\\nreserve address:',\n reserve.publicKey.toBase58()\n );\n });\n\n commands\n .command('update-reserve-config')\n .requiredOption('--reserve <string>', 'Reserve address')\n .requiredOption('--reserve-config-path <string>', 'Path for the reserve config')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option('--update-entire-config', 'If set, it will update entire reserve config in 1 instruction')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ reserve, reserveConfigPath, mode, updateEntireConfig, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const reserveAddress = new PublicKey(reserve);\n const reserveState = await Reserve.fetch(env.provider.connection, reserveAddress, env.kLendProgramId);\n if (!reserveState) {\n throw new Error('Reserve not found');\n }\n\n const marketAddress = reserveState.lendingMarket;\n const marketState = await LendingMarket.fetch(env.provider.connection, marketAddress, env.kLendProgramId);\n if (!marketState) {\n throw new Error('Market not found');\n }\n const marketWithAddress: MarketWithAddress = {\n address: marketAddress,\n state: marketState,\n };\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const reserveConfigFromFile = JSON.parse(fs.readFileSync(reserveConfigPath, 'utf8'));\n\n const reserveConfig = parseReserveConfigFromFile(reserveConfigFromFile);\n\n const ixns = await kaminoManager.updateReserveIxs(\n marketWithAddress,\n reserveAddress,\n reserveConfig,\n reserveState,\n updateEntireConfig\n );\n\n const _updateReserveSig = await processTxn(env.client, env.payer, ixns, mode, 2500, [], 400_000);\n\n mode === 'execute' && console.log('Reserve Updated with config -> ', JSON.parse(JSON.stringify(reserveConfig)));\n });\n\n commands\n .command('download-reserve-config')\n .requiredOption('--reserve <string>', 'Reserve address')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ reserve, staging }) => {\n const env = initializeClient(false, staging);\n const reserveAddress = new PublicKey(reserve);\n const reserveState = await Reserve.fetch(env.provider.connection, reserveAddress, env.kLendProgramId);\n if (!reserveState) {\n throw new Error('Reserve not found');\n }\n\n fs.mkdirSync('./configs/' + reserveState.lendingMarket.toBase58(), { recursive: true });\n\n const decoder = new TextDecoder('utf-8');\n const reserveName = decoder.decode(Uint8Array.from(reserveState.config.tokenInfo.name)).replace(/\\0/g, '');\n\n const reserveConfigDisplay = parseReserveConfigToFile(reserveState.config);\n\n fs.writeFileSync(\n './configs/' + reserveState.lendingMarket.toBase58() + '/' + reserveName + '.json',\n JSON.stringify(reserveConfigDisplay, null, 2)\n );\n });\n\n commands\n .command('create-vault')\n .requiredOption('--mint <string>', 'Vault token mint')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ mint, mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const tokenMint = new PublicKey(mint);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const multisigPk = multisig ? new PublicKey(multisig) : PublicKey.default;\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const kaminoVaultConfig = new KaminoVaultConfig({\n admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,\n tokenMint: tokenMint,\n tokenMintProgramId: TOKEN_PROGRAM_ID,\n performanceFeeRate: new Decimal(0.0),\n managementFeeRate: new Decimal(0.0),\n });\n\n const { vault: vaultKp, ixns: instructions } = await kaminoManager.createVaultIxs(kaminoVaultConfig);\n\n const _createVaultSig = await processTxn(env.client, env.payer, instructions, mode, 2500, [vaultKp]);\n\n mode === 'execute' && console.log('Vault created:', vaultKp.publicKey.toBase58());\n });\n\n commands\n .command('update-vault-reserve-allocation')\n .requiredOption('--vault <string>', 'Vault address')\n .requiredOption('--reserve <string>', 'Reserve address')\n .requiredOption('--allocation-weight <number>', 'Allocation weight')\n .requiredOption('--allocation-cap <string>', 'Allocation cap decimal value')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ vault, reserve, allocationWeight, allocationCap, mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const reserveAddress = new PublicKey(reserve);\n const vaultAddress = new PublicKey(vault);\n const allocationWeightValue = Number(allocationWeight);\n const allocationCapDecimal = new Decimal(allocationCap);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n const reserveState = await Reserve.fetch(env.provider.connection, reserveAddress, env.kLendProgramId);\n if (!reserveState) {\n throw new Error('Reserve not found');\n }\n\n const reserveWithAddress: ReserveWithAddress = {\n address: reserveAddress,\n state: reserveState,\n };\n const firstReserveAllocationConfig = new ReserveAllocationConfig(\n reserveWithAddress,\n allocationWeightValue,\n allocationCapDecimal\n );\n const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kVaultProgramId);\n const instructions = await kaminoManager.updateVaultReserveAllocationIxs(\n kaminoVault,\n firstReserveAllocationConfig\n );\n\n const updateVaultAllocationSig = await processTxn(env.client, env.payer, [instructions], mode, 2500, []);\n\n mode === 'execute' && console.log('Vault allocation updated:', updateVaultAllocationSig);\n });\n\n commands.command('get-oracle-mappings').action(async () => {\n const env = initializeClient(false, false);\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n console.log('Getting oracle mappings');\n const oracleConfigs = await kaminoManager.getScopeOracleConfigs();\n console.log('oracleConfigs', JSON.parse(JSON.stringify(oracleConfigs)));\n });\n\n commands\n .command('download-lending-market-config')\n .requiredOption('--lending-market <string>', 'Lending Market Address')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, staging }) => {\n const env = initializeClient(false, staging);\n const lendingMarketAddress = new PublicKey(lendingMarket);\n const lendingMarketState = await LendingMarket.fetch(\n env.provider.connection,\n lendingMarketAddress,\n env.kLendProgramId\n );\n\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n\n fs.mkdirSync('./configs/' + lendingMarketAddress.toBase58(), { recursive: true });\n\n const lendingMarketConfigForFile = lendingMarketState.toJSON();\n\n fs.writeFileSync(\n './configs/' + lendingMarketAddress.toBase58() + '/market-' + lendingMarketAddress.toBase58() + '.json',\n JSON.stringify(lendingMarketConfigForFile, null, 2)\n );\n });\n\n commands\n .command('download-lending-market-config-and-all-reserves-configs')\n .requiredOption('--lending-market <string>', 'Lending Market Address')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, staging }) => {\n const env = initializeClient(false, staging);\n const decoder = new TextDecoder('utf-8');\n const lendingMarketAddress = new PublicKey(lendingMarket);\n\n const kaminoMarket = await KaminoMarket.load(\n env.provider.connection,\n lendingMarketAddress,\n DEFAULT_RECENT_SLOT_DURATION_MS,\n env.kLendProgramId\n );\n\n if (!kaminoMarket) {\n throw new Error('Lending Market not found');\n }\n\n const lendingMarketState = await LendingMarket.fetch(\n env.provider.connection,\n lendingMarketAddress,\n env.kLendProgramId\n );\n\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n\n fs.mkdirSync('./configs/' + lendingMarketAddress.toBase58(), { recursive: true });\n\n const lendingMarketConfigForFile = lendingMarketState.toJSON();\n\n fs.writeFileSync(\n './configs/' + lendingMarketAddress.toBase58() + '/market-' + lendingMarketAddress.toBase58() + '.json',\n JSON.stringify(lendingMarketConfigForFile, null, 2)\n );\n\n kaminoMarket.reserves.forEach(async (reserve) => {\n const reserveState = reserve.state;\n const reserveName = decoder.decode(Uint8Array.from(reserveState.config.tokenInfo.name)).replace(/\\0/g, '');\n\n const reserveConfigDisplay = parseReserveConfigToFile(reserveState.config);\n\n fs.writeFileSync(\n './configs/' + lendingMarketAddress.toBase58() + '/' + reserveName + '.json',\n JSON.stringify(reserveConfigDisplay, null, 2)\n );\n });\n });\n\n commands\n .command('update-lending-market-from-config')\n .requiredOption('--lending-market <string>', 'Lending Market address')\n .requiredOption('--lending-market-config-path <string>', 'Path for the market config')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, lendingMarketConfigPath, mode, staging }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const lendingMarketAddress = new PublicKey(lendingMarket);\n const lendingMarketState = await LendingMarket.fetch(\n env.provider.connection,\n lendingMarketAddress,\n env.kLendProgramId\n );\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n const marketWithAddress = {\n address: lendingMarketAddress,\n state: lendingMarketState,\n };\n\n if (mode === 'multisig') {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const newLendingMarket = LendingMarket.fromJSON(JSON.parse(fs.readFileSync(lendingMarketConfigPath, 'utf8')));\n\n const ixns = kaminoManager.updateLendingMarketIxs(marketWithAddress, newLendingMarket);\n\n // executing 6 ixns in a txn to make sure they fit\n for (let ixnIndex = 0; ixnIndex < ixns.length; ixnIndex += 6) {\n const ixnToExecute = ixns.slice(ixnIndex, ixnIndex + 6);\n const _updateLendingMarketSig = await processTxn(env.client, env.payer, ixnToExecute, mode, 2500, [], 400_000);\n }\n\n mode === 'execute' &&\n console.log('Reserve Updated with new config -> ', JSON.parse(JSON.stringify(newLendingMarket)));\n });\n\n commands\n .command('update-lending-market-owner')\n .requiredOption('--lending-market <string>', 'Lending Market address')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, mode, staging }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const lendingMarketAddress = new PublicKey(lendingMarket);\n const lendingMarketState = await LendingMarket.fetch(\n env.provider.connection,\n lendingMarketAddress,\n env.kLendProgramId\n );\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n const marketWithAddress = {\n address: lendingMarketAddress,\n state: lendingMarketState,\n };\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n\n if (mode === 'multisig') {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.provider.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const ixn = kaminoManager.updateLendingMarketOwnerIxs(marketWithAddress);\n\n const _updateLendingMarketSig = await processTxn(env.client, env.payer, [ixn], mode, 2500, [], 400_000);\n\n mode === 'execute' &&\n console.log(\n 'Lending market admin updated to the new admin -> ',\n JSON.parse(JSON.stringify(lendingMarketState.lendingMarketOwnerCached))\n );\n });\n\n await commands.parseAsync();\n}\n\nmain()\n .then(() => {\n process.exit();\n })\n .catch((e) => {\n console.error('\\n\\nKamino CLI exited with error:\\n\\n', e);\n process.exit(1);\n });\n\nexport function parseKeypairFile(file: string): Keypair {\n return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('fs').readFileSync(file))));\n}\n\nfunction initializeClient(multisig: boolean, staging: boolean): Env {\n const admin = process.env.ADMIN!;\n const rpc = process.env.RPC!;\n const kLendProgramId = staging ? process.env.KLEND_PROGRAM_ID_STAGING! : process.env.KLEND_PROGRAM_ID_MAINNET!;\n const kVaultProgramId = staging ? process.env.KVAULT_PROGRAM_ID_STAGING! : process.env.KVAULT_PROGRAM_ID_MAINNET!;\n\n // Get connection first\n const env: Env = setUpProgram({\n adminFilePath: admin,\n rpc: rpc,\n kLendProgramId: new PublicKey(kLendProgramId),\n kVaultProgramId: new PublicKey(kVaultProgramId),\n });\n\n !multisig && console.log('\\nSettings ⚙️');\n !multisig && console.log('Admin:', admin);\n !multisig && console.log('Rpc:', rpc);\n !multisig && console.log('kLendProgramId:', kLendProgramId);\n !multisig && console.log('kVaultProgramId:', kVaultProgramId);\n\n return env;\n}\n\nfunction setUpProgram(args: {\n adminFilePath: string;\n rpc: string;\n kLendProgramId: PublicKey;\n kVaultProgramId: PublicKey;\n}): Env {\n const chain: Chain = {\n name: 'mainnet-beta',\n endpoint: args.rpc,\n wsEndpoint: args.rpc,\n chainID: MAINNET_BETA_CHAIN_ID,\n displayName: 'Mainnet Beta (Triton)',\n };\n const client = new Web3Client(chain);\n const connection = client.sendConnection;\n const payer = parseKeypairFile(args.adminFilePath);\n const wallet = new anchor.Wallet(payer);\n const provider = new anchor.AnchorProvider(connection, wallet, anchor.AnchorProvider.defaultOptions());\n\n return {\n provider,\n payer,\n client,\n kLendProgramId: args.kLendProgramId,\n kVaultProgramId: args.kVaultProgramId,\n };\n}\n\nexport type Env = {\n provider: anchor.AnchorProvider;\n payer: Keypair;\n client: Web3Client;\n kLendProgramId: PublicKey;\n kVaultProgramId: PublicKey;\n};\n\nasync function processTxn(\n web3Client: Web3Client,\n admin: Keypair,\n ixns: TransactionInstruction[],\n mode: string,\n priorityFeeMultiplier: number = 2500,\n extraSigners: Signer[],\n computeUnits: number = 200_000,\n priorityFeeLamports: number = 1000\n): Promise<TransactionSignature> {\n if (mode !== 'inspect' && mode !== 'simulate' && mode !== 'execute' && mode !== 'multisig') {\n throw new Error('Invalid mode: ' + mode + '. Must be one of: inspect/simulate/execute/multisig');\n }\n if (mode === 'multisig') {\n const { blockhash } = await web3Client.connection.getLatestBlockhash();\n const txn = new Transaction();\n txn.add(...ixns);\n txn.recentBlockhash = blockhash;\n txn.feePayer = admin.publicKey;\n\n console.log(binary_to_base58(txn.serializeMessage()));\n\n return '';\n } else {\n const microLamport = priorityFeeLamports * 10 ** 6; // 1000 lamports\n const microLamportsPrioritizationFee = microLamport / computeUnits;\n\n const tx = new Transaction();\n const { blockhash } = await web3Client.connection.getLatestBlockhash();\n if (priorityFeeMultiplier) {\n const priorityFeeIxn = createAddExtraComputeUnitFeeTransaction(\n computeUnits,\n microLamportsPrioritizationFee * priorityFeeMultiplier\n );\n tx.add(...priorityFeeIxn);\n }\n tx.recentBlockhash = blockhash;\n tx.feePayer = admin.publicKey;\n tx.add(...ixns);\n\n if (mode === 'execute') {\n return await signSendAndConfirmRawTransactionWithRetry({\n mainConnection: web3Client.sendConnection,\n extraConnections: [],\n tx: new VersionedTransaction(tx.compileMessage()),\n signers: [admin, ...extraSigners],\n commitment: 'confirmed',\n sendTransactionOptions: {\n skipPreflight: true,\n preflightCommitment: 'confirmed',\n },\n });\n } else if (mode === 'simulate') {\n const simulation = await web3Client.sendConnection.simulateTransaction(\n new VersionedTransaction(tx.compileMessage())\n );\n console.log('Simulation: \\n' + simulation.value.logs);\n } else if (mode === 'inspect') {\n console.log(\n 'Tx in B64',\n `https://explorer.solana.com/tx/inspector?message=${encodeURIComponent(\n tx.serializeMessage().toString('base64')\n )}`\n );\n }\n return '';\n }\n}\n\nfunction createAddExtraComputeUnitFeeTransaction(units: number, microLamports: number): TransactionInstruction[] {\n const ixns: TransactionInstruction[] = [];\n ixns.push(ComputeBudgetProgram.setComputeUnitLimit({ units }));\n ixns.push(ComputeBudgetProgram.setComputeUnitPrice({ microLamports }));\n return ixns;\n}\n\nfunction parseReserveConfigFromFile(farmConfigFromFile: any): ReserveConfig {\n const reserveConfigFields: ReserveConfigFields = {\n status: farmConfigFromFile.status,\n loanToValuePct: farmConfigFromFile.loanToValuePct,\n liquidationThresholdPct: farmConfigFromFile.liquidationThresholdPct,\n minLiquidationBonusBps: farmConfigFromFile.minLiquidationBonusBps,\n protocolLiquidationFeePct: farmConfigFromFile.protocolLiquidationFeePct,\n protocolTakeRatePct: farmConfigFromFile.protocolLiquidationFeePct,\n assetTier: farmConfigFromFile.assetTier,\n multiplierSideBoost: farmConfigFromFile.multiplierSideBoost,\n maxLiquidationBonusBps: farmConfigFromFile.maxLiquidationBonusBps,\n badDebtLiquidationBonusBps: farmConfigFromFile.badDebtLiquidationBonusBps,\n fees: {\n borrowFeeSf: Fraction.fromDecimal(new Decimal(farmConfigFromFile.fees.borrowFee)).valueSf,\n flashLoanFeeSf: Fraction.fromDecimal(new Decimal(farmConfigFromFile.fees.flashLoanFee)).valueSf,\n padding: Array(8).fill(0),\n },\n depositLimit: new BN(farmConfigFromFile.depositLimit),\n borrowLimit: new BN(farmConfigFromFile.borrowLimit),\n tokenInfo: {\n name: encodeTokenName(farmConfigFromFile.tokenInfo.name),\n heuristic: new PriceHeuristic({\n lower: new BN(farmConfigFromFile.tokenInfo.heuristic.lower),\n upper: new BN(farmConfigFromFile.tokenInfo.heuristic.upper),\n exp: new BN(farmConfigFromFile.tokenInfo.heuristic.exp),\n }),\n maxTwapDivergenceBps: new BN(farmConfigFromFile.tokenInfo.maxTwapDivergenceBps),\n maxAgePriceSeconds: new BN(farmConfigFromFile.tokenInfo.maxAgePriceSeconds),\n maxAgeTwapSeconds: new BN(farmConfigFromFile.tokenInfo.maxAgeTwapSeconds),\n ...parseOracleConfiguration(farmConfigFromFile),\n blockPriceUsage: farmConfigFromFile.tokenInfo.blockPriceUsage,\n reserved: Array(7).fill(0),\n padding: Array(19).fill(new BN(0)),\n } as TokenInfo,\n borrowRateCurve: parseBorrowRateCurve(farmConfigFromFile),\n depositWithdrawalCap: new WithdrawalCaps({\n configCapacity: new BN(farmConfigFromFile.depositWithdrawalCap.configCapacity),\n currentTotal: new BN(0),\n lastIntervalStartTimestamp: new BN(0),\n configIntervalLengthSeconds: new BN(farmConfigFromFile.depositWithdrawalCap.configIntervalLengthSeconds),\n }),\n debtWithdrawalCap: new WithdrawalCaps({\n configCapacity: new BN(farmConfigFromFile.debtWithdrawalCap.configCapacity),\n currentTotal: new BN(0),\n lastIntervalStartTimestamp: new BN(0),\n configIntervalLengthSeconds: new BN(farmConfigFromFile.debtWithdrawalCap.configIntervalLengthSeconds),\n }),\n deleveragingMarginCallPeriodSecs: new BN(farmConfigFromFile.deleveragingMarginCallPeriodSecs),\n borrowFactorPct: new BN(farmConfigFromFile.borrowFactorPct),\n elevationGroups: farmConfigFromFile.elevationGroups,\n deleveragingThresholdSlotsPerBps: new BN(farmConfigFromFile.deleveragingThresholdSlotsPerBps),\n multiplierTagBoost: farmConfigFromFile.multiplierTagBoost,\n disableUsageAsCollOutsideEmode: farmConfigFromFile.disableUsageAsCollOutsideEmode,\n utilizationLimitBlockBorrowingAbove: farmConfigFromFile.utilizationLimitBlockBorrowingAbove,\n hostFixedInterestRateBps: farmConfigFromFile.hostFixedInterestRateBps,\n borrowLimitOutsideElevationGroup: new BN(farmConfigFromFile.borrowLimitOutsideElevationGroup),\n borrowLimitAgainstThisCollateralInElevationGroup: parseReserveBorrowLimitAgainstCollInEmode(farmConfigFromFile),\n reserved1: Array(2).fill(0),\n };\n\n return new ReserveConfig(reserveConfigFields);\n}\n\nfunction parseOracleConfiguration(farmConfigFromFile: any): {\n pythConfiguration: PythConfiguration;\n switchboardConfiguration: SwitchboardConfiguration;\n scopeConfiguration: ScopeConfiguration;\n} {\n const pythConfiguration = new PythConfiguration({\n price: new PublicKey(farmConfigFromFile.tokenInfo.pythConfiguration.price),\n });\n const switchboardConfiguration = new SwitchboardConfiguration({\n priceAggregator: new PublicKey(farmConfigFromFile.tokenInfo.switchboardConfiguration.priceAggregator),\n twapAggregator: new PublicKey(farmConfigFromFile.tokenInfo.switchboardConfiguration.twapAggregator),\n });\n const priceChain = [65535, 65535, 65535, 65535];\n const twapChain = [65535, 65535, 65535, 65535];\n\n const priceChainFromFile: number[] = farmConfigFromFile.tokenInfo.scopeConfiguration.priceChain;\n const twapChainFromFile: number[] = farmConfigFromFile.tokenInfo.scopeConfiguration.twapChain;\n\n priceChainFromFile.forEach((value, index) => (priceChain[index] = value));\n twapChainFromFile.forEach((value, index) => (twapChain[index] = value));\n\n const scopeConfiguration = new ScopeConfiguration({\n priceFeed: new PublicKey(farmConfigFromFile.tokenInfo.scopeConfiguration.priceFeed),\n priceChain: priceChain,\n twapChain: twapChain,\n });\n\n return {\n pythConfiguration,\n switchboardConfiguration,\n scopeConfiguration,\n };\n}\n\nfunction parseBorrowRateCurve(farmConfigFromFile: any): BorrowRateCurve {\n const curvePoints: CurvePointFields[] = [];\n\n farmConfigFromFile.borrowRateCurve.points.forEach((curvePoint: { utilizationRateBps: any; borrowRateBps: any }) =>\n curvePoints.push({\n utilizationRateBps: curvePoint.utilizationRateBps,\n borrowRateBps: curvePoint.borrowRateBps,\n })\n );\n\n const finalCruvePoints: CurvePointFields[] = Array(11).fill(curvePoints[curvePoints.length - 1]);\n\n curvePoints.forEach((curvePoint, index) => (finalCruvePoints[index] = curvePoint));\n\n const borrowRateCurve = new BorrowRateCurve({ points: finalCruvePoints });\n\n return borrowRateCurve;\n}\n\nfunction parseReserveBorrowLimitAgainstCollInEmode(farmConfigFromFile: any): BN[] {\n const reserveBorrowLimitAgainstCollInEmode: BN[] = Array(32).fill(new BN(0));\n\n farmConfigFromFile.borrowLimitAgainstThisCollateralInElevationGroup.forEach(\n (limit: any, index: number) => (reserveBorrowLimitAgainstCollInEmode[index] = new BN(limit))\n );\n\n return reserveBorrowLimitAgainstCollInEmode;\n}\n\nfunction parseReserveConfigToFile(reserveConfig: ReserveConfig) {\n const decoder = new TextDecoder('utf-8');\n\n return {\n status: reserveConfig.status,\n loanToValuePct: reserveConfig.loanToValuePct,\n liquidationThresholdPct: reserveConfig.liquidationThresholdPct,\n minLiquidationBonusBps: reserveConfig.minLiquidationBonusBps,\n protocolLiquidationFeePct: reserveConfig.protocolLiquidationFeePct,\n protocolTakeRatePct: reserveConfig.protocolLiquidationFeePct,\n assetTier: reserveConfig.assetTier,\n multiplierSideBoost: reserveConfig.multiplierSideBoost,\n maxLiquidationBonusBps: reserveConfig.maxLiquidationBonusBps,\n badDebtLiquidationBonusBps: reserveConfig.badDebtLiquidationBonusBps,\n fees: {\n borrowFee: new Fraction(reserveConfig.fees.borrowFeeSf).toDecimal().toString(),\n flashLoanFee: new Fraction(reserveConfig.fees.flashLoanFeeSf).toDecimal().toString(),\n padding: Array(8).fill(0),\n },\n depositLimit: reserveConfig.depositLimit.toString(),\n borrowLimit: reserveConfig.borrowLimit.toString(),\n tokenInfo: {\n name: decoder.decode(Uint8Array.from(reserveConfig.tokenInfo.name)).replace(/\\0/g, ''),\n heuristic: {\n exp: reserveConfig.tokenInfo.heuristic.exp.toString(),\n lower: reserveConfig.tokenInfo.heuristic.lower.toString(),\n upper: reserveConfig.tokenInfo.heuristic.upper.toString(),\n },\n maxTwapDivergenceBps: reserveConfig.tokenInfo.maxTwapDivergenceBps.toString(),\n maxAgePriceSeconds: reserveConfig.tokenInfo.maxAgePriceSeconds.toString(),\n maxAgeTwapSeconds: reserveConfig.tokenInfo.maxAgeTwapSeconds.toString(),\n scopeConfiguration: reserveConfig.tokenInfo.scopeConfiguration,\n switchboardConfiguration: reserveConfig.tokenInfo.switchboardConfiguration,\n pythConfiguration: reserveConfig.tokenInfo.pythConfiguration,\n blockPriceUsage: reserveConfig.tokenInfo.blockPriceUsage,\n },\n borrowRateCurve: reserveConfig.borrowRateCurve,\n depositWithdrawalCap: reserveConfig.depositWithdrawalCap,\n debtWithdrawalCap: reserveConfig.debtWithdrawalCap,\n deleveragingMarginCallPeriodSecs: reserveConfig.deleveragingMarginCallPeriodSecs.toString(),\n borrowFactorPct: reserveConfig.borrowFactorPct.toString(),\n elevationGroups: reserveConfig.elevationGroups,\n deleveragingThresholdSlotsPerBps: reserveConfig.deleveragingThresholdSlotsPerBps.toString(),\n multiplierTagBoost: reserveConfig.multiplierTagBoost,\n disableUsageAsCollOutsideEmode: reserveConfig.disableUsageAsCollOutsideEmode,\n utilizationLimitBlockBorrowingAbove: reserveConfig.utilizationLimitBlockBorrowingAbove,\n hostFixedInterestRateBps: reserveConfig.hostFixedInterestRateBps,\n borrowLimitOutsideElevationGroup: reserveConfig.borrowLimitOutsideElevationGroup.toString(),\n borrowLimitAgainstThisCollateralInElevationGroup:\n reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((entry) => entry.toString()),\n reserved1: Array(2).fill(0),\n };\n}\n"]}
1
+ {"version":3,"file":"client_kamino_manager.js","sourceRoot":"","sources":["../src/client_kamino_manager.ts"],"names":[],"mappings":"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","sourcesContent":["import dotenv from 'dotenv';\nimport { Command } from 'commander';\nimport {\n ComputeBudgetProgram,\n Connection,\n Keypair,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n TransactionSignature,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AssetReserveConfigCli,\n Chain,\n DEFAULT_RECENT_SLOT_DURATION_MS,\n encodeTokenName,\n KaminoManager,\n KaminoMarket,\n KaminoVault,\n KaminoVaultConfig,\n LendingMarket,\n MAINNET_BETA_CHAIN_ID,\n Reserve,\n ReserveAllocationConfig,\n ReserveWithAddress,\n signSendAndConfirmRawTransactionWithRetry,\n Web3Client,\n} from './lib';\nimport * as anchor from '@coral-xyz/anchor';\nimport { binary_to_base58 } from 'base58-js';\nimport {\n BorrowRateCurve,\n CurvePointFields,\n PriceHeuristic,\n ReserveConfig,\n ReserveConfigFields,\n ScopeConfiguration,\n TokenInfo,\n WithdrawalCaps,\n} from './idl_codegen/types';\nimport { Fraction } from './classes/fraction';\nimport Decimal from 'decimal.js';\nimport { BN } from '@coral-xyz/anchor';\nimport { PythConfiguration, SwitchboardConfiguration } from './idl_codegen_kamino_vault/types';\nimport * as fs from 'fs';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\nimport { MarketWithAddress } from './utils/managerTypes';\n\ndotenv.config({\n path: `.env${process.env.ENV ? '.' + process.env.ENV : ''}`,\n});\n\nasync function main() {\n const commands = new Command();\n\n commands.name('kamino-manager-cli').description('CLI to interact with the kvaults and klend programs');\n\n commands\n .command('create-market')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig pubkey is required');\n }\n\n const multisigPk = multisig ? new PublicKey(multisig) : PublicKey.default;\n\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const { market: marketKp, ixns: createMarketIxns } = await kaminoManager.createMarketIxs({\n admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,\n });\n\n const _createMarketSig = await processTxn(env.client, env.payer, createMarketIxns, mode, 2500, [marketKp]);\n\n mode === 'execute' && console.log('Market created:', marketKp.publicKey.toBase58());\n });\n\n commands\n .command('add-asset-to-market')\n .requiredOption('--market <string>', 'Market addres to add asset to')\n .requiredOption('--mint <string>', 'Reserve liquidity token mint')\n .requiredOption('--mint-program-id <string>', 'Reserve liquidity token mint program id')\n .requiredOption('--reserve-config-path <string>', 'Path for the reserve config')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ market, mint, mintProgramId, reserveConfigPath, mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const tokenMint = new PublicKey(mint);\n const tokenMintProgramId = new PublicKey(mintProgramId);\n const marketAddress = new PublicKey(market);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const multisigPk = multisig ? new PublicKey(multisig) : PublicKey.default;\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const reserveConfigFromFile = JSON.parse(fs.readFileSync(reserveConfigPath, 'utf8'));\n\n const reserveConfig = parseReserveConfigFromFile(reserveConfigFromFile);\n const assetConfig = new AssetReserveConfigCli(tokenMint, tokenMintProgramId, reserveConfig);\n\n const { reserve, txnIxns } = await kaminoManager.addAssetToMarketIxs({\n admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,\n marketAddress: marketAddress,\n assetConfig: assetConfig,\n });\n\n console.log('reserve: ', reserve.publicKey);\n\n const _createReserveSig = await processTxn(env.client, env.payer, txnIxns[0], mode, 2500, [reserve]);\n\n const _updateReserveSig = await processTxn(env.client, env.payer, txnIxns[1], mode, 2500, [], 400_000);\n\n mode === 'execute' &&\n console.log(\n 'Reserve Created with config:',\n JSON.parse(JSON.stringify(reserveConfig)),\n '\\nreserve address:',\n reserve.publicKey.toBase58()\n );\n });\n\n commands\n .command('update-reserve-config')\n .requiredOption('--reserve <string>', 'Reserve address')\n .requiredOption('--reserve-config-path <string>', 'Path for the reserve config')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option('--update-entire-config', 'If set, it will update entire reserve config in 1 instruction')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ reserve, reserveConfigPath, mode, updateEntireConfig, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const reserveAddress = new PublicKey(reserve);\n const reserveState = await Reserve.fetch(env.connection, reserveAddress, env.kLendProgramId);\n if (!reserveState) {\n throw new Error('Reserve not found');\n }\n\n const marketAddress = reserveState.lendingMarket;\n const marketState = await LendingMarket.fetch(env.connection, marketAddress, env.kLendProgramId);\n if (!marketState) {\n throw new Error('Market not found');\n }\n const marketWithAddress: MarketWithAddress = {\n address: marketAddress,\n state: marketState,\n };\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const reserveConfigFromFile = JSON.parse(fs.readFileSync(reserveConfigPath, 'utf8'));\n\n const reserveConfig = parseReserveConfigFromFile(reserveConfigFromFile);\n\n const ixns = await kaminoManager.updateReserveIxs(\n marketWithAddress,\n reserveAddress,\n reserveConfig,\n reserveState,\n updateEntireConfig\n );\n\n const _updateReserveSig = await processTxn(env.client, env.payer, ixns, mode, 2500, [], 400_000);\n\n mode === 'execute' && console.log('Reserve Updated with config -> ', JSON.parse(JSON.stringify(reserveConfig)));\n });\n\n commands\n .command('download-reserve-config')\n .requiredOption('--reserve <string>', 'Reserve address')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ reserve, staging }) => {\n const env = initializeClient(false, staging);\n const reserveAddress = new PublicKey(reserve);\n const reserveState = await Reserve.fetch(env.connection, reserveAddress, env.kLendProgramId);\n if (!reserveState) {\n throw new Error('Reserve not found');\n }\n\n fs.mkdirSync('./configs/' + reserveState.lendingMarket.toBase58(), { recursive: true });\n\n const decoder = new TextDecoder('utf-8');\n const reserveName = decoder.decode(Uint8Array.from(reserveState.config.tokenInfo.name)).replace(/\\0/g, '');\n\n const reserveConfigDisplay = parseReserveConfigToFile(reserveState.config);\n\n fs.writeFileSync(\n './configs/' + reserveState.lendingMarket.toBase58() + '/' + reserveName + '.json',\n JSON.stringify(reserveConfigDisplay, null, 2)\n );\n });\n\n commands\n .command('create-vault')\n .requiredOption('--mint <string>', 'Vault token mint')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ mint, mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const tokenMint = new PublicKey(mint);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const multisigPk = multisig ? new PublicKey(multisig) : PublicKey.default;\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const kaminoVaultConfig = new KaminoVaultConfig({\n admin: mode === 'multisig' ? multisigPk : env.payer.publicKey,\n tokenMint: tokenMint,\n tokenMintProgramId: TOKEN_PROGRAM_ID,\n performanceFeeRate: new Decimal(0.0),\n managementFeeRate: new Decimal(0.0),\n });\n\n const { vault: vaultKp, ixns: instructions } = await kaminoManager.createVaultIxs(kaminoVaultConfig);\n\n const _createVaultSig = await processTxn(env.client, env.payer, instructions, mode, 2500, [vaultKp]);\n\n mode === 'execute' && console.log('Vault created:', vaultKp.publicKey.toBase58());\n });\n\n commands\n .command('update-vault-reserve-allocation')\n .requiredOption('--vault <string>', 'Vault address')\n .requiredOption('--reserve <string>', 'Reserve address')\n .requiredOption('--allocation-weight <number>', 'Allocation weight')\n .requiredOption('--allocation-cap <string>', 'Allocation cap decimal value')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')\n .action(async ({ vault, reserve, allocationWeight, allocationCap, mode, staging, multisig }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const reserveAddress = new PublicKey(reserve);\n const vaultAddress = new PublicKey(vault);\n const allocationWeightValue = Number(allocationWeight);\n const allocationCapDecimal = new Decimal(allocationCap);\n\n if (mode === 'multisig' && !multisig) {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n const reserveState = await Reserve.fetch(env.connection, reserveAddress, env.kLendProgramId);\n if (!reserveState) {\n throw new Error('Reserve not found');\n }\n\n const reserveWithAddress: ReserveWithAddress = {\n address: reserveAddress,\n state: reserveState,\n };\n const firstReserveAllocationConfig = new ReserveAllocationConfig(\n reserveWithAddress,\n allocationWeightValue,\n allocationCapDecimal\n );\n const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kVaultProgramId);\n const instructions = await kaminoManager.updateVaultReserveAllocationIxs(\n kaminoVault,\n firstReserveAllocationConfig\n );\n\n const updateVaultAllocationSig = await processTxn(env.client, env.payer, [instructions], mode, 2500, []);\n\n mode === 'execute' && console.log('Vault allocation updated:', updateVaultAllocationSig);\n });\n\n commands.command('get-oracle-mappings').action(async () => {\n const env = initializeClient(false, false);\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n console.log('Getting oracle mappings');\n const oracleConfigs = await kaminoManager.getScopeOracleConfigs();\n console.log('oracleConfigs', JSON.parse(JSON.stringify(oracleConfigs)));\n });\n\n commands\n .command('download-lending-market-config')\n .requiredOption('--lending-market <string>', 'Lending Market Address')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, staging }) => {\n const env = initializeClient(false, staging);\n const lendingMarketAddress = new PublicKey(lendingMarket);\n const lendingMarketState = await LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);\n\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n\n fs.mkdirSync('./configs/' + lendingMarketAddress.toBase58(), { recursive: true });\n\n const lendingMarketConfigForFile = lendingMarketState.toJSON();\n\n fs.writeFileSync(\n './configs/' + lendingMarketAddress.toBase58() + '/market-' + lendingMarketAddress.toBase58() + '.json',\n JSON.stringify(lendingMarketConfigForFile, null, 2)\n );\n });\n\n commands\n .command('download-lending-market-config-and-all-reserves-configs')\n .requiredOption('--lending-market <string>', 'Lending Market Address')\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, staging }) => {\n const env = initializeClient(false, staging);\n const decoder = new TextDecoder('utf-8');\n const lendingMarketAddress = new PublicKey(lendingMarket);\n\n const kaminoMarket = await KaminoMarket.load(\n env.connection,\n lendingMarketAddress,\n DEFAULT_RECENT_SLOT_DURATION_MS,\n env.kLendProgramId\n );\n\n if (!kaminoMarket) {\n throw new Error('Lending Market not found');\n }\n\n const lendingMarketState = await LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);\n\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n\n fs.mkdirSync('./configs/' + lendingMarketAddress.toBase58(), { recursive: true });\n\n const lendingMarketConfigForFile = lendingMarketState.toJSON();\n\n fs.writeFileSync(\n './configs/' + lendingMarketAddress.toBase58() + '/market-' + lendingMarketAddress.toBase58() + '.json',\n JSON.stringify(lendingMarketConfigForFile, null, 2)\n );\n\n kaminoMarket.reserves.forEach(async (reserve) => {\n const reserveState = reserve.state;\n const reserveName = decoder.decode(Uint8Array.from(reserveState.config.tokenInfo.name)).replace(/\\0/g, '');\n\n const reserveConfigDisplay = parseReserveConfigToFile(reserveState.config);\n\n fs.writeFileSync(\n './configs/' + lendingMarketAddress.toBase58() + '/' + reserveName + '.json',\n JSON.stringify(reserveConfigDisplay, null, 2)\n );\n });\n });\n\n commands\n .command('update-lending-market-from-config')\n .requiredOption('--lending-market <string>', 'Lending Market address')\n .requiredOption('--lending-market-config-path <string>', 'Path for the market config')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, lendingMarketConfigPath, mode, staging }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const lendingMarketAddress = new PublicKey(lendingMarket);\n const lendingMarketState = await LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n const marketWithAddress = {\n address: lendingMarketAddress,\n state: lendingMarketState,\n };\n\n if (mode === 'multisig') {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const newLendingMarket = LendingMarket.fromJSON(JSON.parse(fs.readFileSync(lendingMarketConfigPath, 'utf8')));\n\n const ixns = kaminoManager.updateLendingMarketIxs(marketWithAddress, newLendingMarket);\n\n // executing 6 ixns in a txn to make sure they fit\n for (let ixnIndex = 0; ixnIndex < ixns.length; ixnIndex += 6) {\n const ixnToExecute = ixns.slice(ixnIndex, ixnIndex + 6);\n const _updateLendingMarketSig = await processTxn(env.client, env.payer, ixnToExecute, mode, 2500, [], 400_000);\n }\n\n mode === 'execute' &&\n console.log('Reserve Updated with new config -> ', JSON.parse(JSON.stringify(newLendingMarket)));\n });\n\n commands\n .command('update-lending-market-owner')\n .requiredOption('--lending-market <string>', 'Lending Market address')\n .requiredOption(\n `--mode <string>`,\n 'simulate - to print txn simulation, inspect - to get txn simulation in explorer, execute - execute txn, multisig - to get bs58 txn for multisig usage'\n )\n .option(`--staging`, 'If true, will use the staging programs')\n .action(async ({ lendingMarket, mode, staging }) => {\n const env = initializeClient(mode === 'multisig', staging);\n const lendingMarketAddress = new PublicKey(lendingMarket);\n const lendingMarketState = await LendingMarket.fetch(env.connection, lendingMarketAddress, env.kLendProgramId);\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n const marketWithAddress = {\n address: lendingMarketAddress,\n state: lendingMarketState,\n };\n if (!lendingMarketState) {\n throw new Error('Lending Market not found');\n }\n\n if (mode === 'multisig') {\n throw new Error('If using multisig mode, multisig is required');\n }\n\n const kaminoManager = new KaminoManager(env.connection, env.kLendProgramId, env.kVaultProgramId);\n\n const ixn = kaminoManager.updateLendingMarketOwnerIxs(marketWithAddress);\n\n const _updateLendingMarketSig = await processTxn(env.client, env.payer, [ixn], mode, 2500, [], 400_000);\n\n mode === 'execute' &&\n console.log(\n 'Lending market admin updated to the new admin -> ',\n JSON.parse(JSON.stringify(lendingMarketState.lendingMarketOwnerCached))\n );\n });\n\n await commands.parseAsync();\n}\n\nmain()\n .then(() => {\n process.exit();\n })\n .catch((e) => {\n console.error('\\n\\nKamino CLI exited with error:\\n\\n', e);\n process.exit(1);\n });\n\nexport function parseKeypairFile(file: string): Keypair {\n return Keypair.fromSecretKey(Buffer.from(JSON.parse(require('fs').readFileSync(file))));\n}\n\nfunction initializeClient(multisig: boolean, staging: boolean): Env {\n const admin = process.env.ADMIN!;\n const rpc = process.env.RPC!;\n const kLendProgramId = staging ? process.env.KLEND_PROGRAM_ID_STAGING! : process.env.KLEND_PROGRAM_ID_MAINNET!;\n const kVaultProgramId = staging ? process.env.KVAULT_PROGRAM_ID_STAGING! : process.env.KVAULT_PROGRAM_ID_MAINNET!;\n\n // Get connection first\n const env: Env = setUpProgram({\n adminFilePath: admin,\n rpc: rpc,\n kLendProgramId: new PublicKey(kLendProgramId),\n kVaultProgramId: new PublicKey(kVaultProgramId),\n });\n\n !multisig && console.log('\\nSettings ⚙️');\n !multisig && console.log('Admin:', admin);\n !multisig && console.log('Rpc:', rpc);\n !multisig && console.log('kLendProgramId:', kLendProgramId);\n !multisig && console.log('kVaultProgramId:', kVaultProgramId);\n\n return env;\n}\n\nfunction setUpProgram(args: {\n adminFilePath: string;\n rpc: string;\n kLendProgramId: PublicKey;\n kVaultProgramId: PublicKey;\n}): Env {\n const chain: Chain = {\n name: 'mainnet-beta',\n endpoint: args.rpc,\n wsEndpoint: args.rpc,\n chainID: MAINNET_BETA_CHAIN_ID,\n displayName: 'Mainnet Beta (Triton)',\n };\n const client = new Web3Client(chain);\n const connection = client.sendConnection;\n const payer = parseKeypairFile(args.adminFilePath);\n const wallet = new anchor.Wallet(payer);\n const provider = new anchor.AnchorProvider(connection, wallet, anchor.AnchorProvider.defaultOptions());\n\n return {\n provider,\n payer,\n client,\n connection,\n kLendProgramId: args.kLendProgramId,\n kVaultProgramId: args.kVaultProgramId,\n };\n}\n\nexport type Env = {\n provider: anchor.AnchorProvider;\n payer: Keypair;\n connection: Connection;\n client: Web3Client;\n kLendProgramId: PublicKey;\n kVaultProgramId: PublicKey;\n};\n\nasync function processTxn(\n web3Client: Web3Client,\n admin: Keypair,\n ixns: TransactionInstruction[],\n mode: string,\n priorityFeeMultiplier: number = 2500,\n extraSigners: Signer[],\n computeUnits: number = 200_000,\n priorityFeeLamports: number = 1000\n): Promise<TransactionSignature> {\n if (mode !== 'inspect' && mode !== 'simulate' && mode !== 'execute' && mode !== 'multisig') {\n throw new Error('Invalid mode: ' + mode + '. Must be one of: inspect/simulate/execute/multisig');\n }\n if (mode === 'multisig') {\n const { blockhash } = await web3Client.connection.getLatestBlockhash();\n const txn = new Transaction();\n txn.add(...ixns);\n txn.recentBlockhash = blockhash;\n txn.feePayer = admin.publicKey;\n\n console.log(binary_to_base58(txn.serializeMessage()));\n\n return '';\n } else {\n const microLamport = priorityFeeLamports * 10 ** 6; // 1000 lamports\n const microLamportsPrioritizationFee = microLamport / computeUnits;\n\n const tx = new Transaction();\n const { blockhash } = await web3Client.connection.getLatestBlockhash();\n if (priorityFeeMultiplier) {\n const priorityFeeIxn = createAddExtraComputeUnitFeeTransaction(\n computeUnits,\n microLamportsPrioritizationFee * priorityFeeMultiplier\n );\n tx.add(...priorityFeeIxn);\n }\n tx.recentBlockhash = blockhash;\n tx.feePayer = admin.publicKey;\n tx.add(...ixns);\n\n if (mode === 'execute') {\n return await signSendAndConfirmRawTransactionWithRetry({\n mainConnection: web3Client.sendConnection,\n extraConnections: [],\n tx: new VersionedTransaction(tx.compileMessage()),\n signers: [admin, ...extraSigners],\n commitment: 'confirmed',\n sendTransactionOptions: {\n skipPreflight: true,\n preflightCommitment: 'confirmed',\n },\n });\n } else if (mode === 'simulate') {\n const simulation = await web3Client.sendConnection.simulateTransaction(\n new VersionedTransaction(tx.compileMessage())\n );\n console.log('Simulation: \\n' + simulation.value.logs);\n } else if (mode === 'inspect') {\n console.log(\n 'Tx in B64',\n `https://explorer.solana.com/tx/inspector?message=${encodeURIComponent(\n tx.serializeMessage().toString('base64')\n )}`\n );\n }\n return '';\n }\n}\n\nfunction createAddExtraComputeUnitFeeTransaction(units: number, microLamports: number): TransactionInstruction[] {\n const ixns: TransactionInstruction[] = [];\n ixns.push(ComputeBudgetProgram.setComputeUnitLimit({ units }));\n ixns.push(ComputeBudgetProgram.setComputeUnitPrice({ microLamports }));\n return ixns;\n}\n\nfunction parseReserveConfigFromFile(farmConfigFromFile: any): ReserveConfig {\n const reserveConfigFields: ReserveConfigFields = {\n status: farmConfigFromFile.status,\n loanToValuePct: farmConfigFromFile.loanToValuePct,\n liquidationThresholdPct: farmConfigFromFile.liquidationThresholdPct,\n minLiquidationBonusBps: farmConfigFromFile.minLiquidationBonusBps,\n protocolLiquidationFeePct: farmConfigFromFile.protocolLiquidationFeePct,\n protocolTakeRatePct: farmConfigFromFile.protocolLiquidationFeePct,\n assetTier: farmConfigFromFile.assetTier,\n maxLiquidationBonusBps: farmConfigFromFile.maxLiquidationBonusBps,\n badDebtLiquidationBonusBps: farmConfigFromFile.badDebtLiquidationBonusBps,\n fees: {\n borrowFeeSf: Fraction.fromDecimal(new Decimal(farmConfigFromFile.fees.borrowFee)).valueSf,\n flashLoanFeeSf: Fraction.fromDecimal(new Decimal(farmConfigFromFile.fees.flashLoanFee)).valueSf,\n padding: Array(8).fill(0),\n },\n depositLimit: new BN(farmConfigFromFile.depositLimit),\n borrowLimit: new BN(farmConfigFromFile.borrowLimit),\n tokenInfo: {\n name: encodeTokenName(farmConfigFromFile.tokenInfo.name),\n heuristic: new PriceHeuristic({\n lower: new BN(farmConfigFromFile.tokenInfo.heuristic.lower),\n upper: new BN(farmConfigFromFile.tokenInfo.heuristic.upper),\n exp: new BN(farmConfigFromFile.tokenInfo.heuristic.exp),\n }),\n maxTwapDivergenceBps: new BN(farmConfigFromFile.tokenInfo.maxTwapDivergenceBps),\n maxAgePriceSeconds: new BN(farmConfigFromFile.tokenInfo.maxAgePriceSeconds),\n maxAgeTwapSeconds: new BN(farmConfigFromFile.tokenInfo.maxAgeTwapSeconds),\n ...parseOracleConfiguration(farmConfigFromFile),\n blockPriceUsage: farmConfigFromFile.tokenInfo.blockPriceUsage,\n reserved: Array(7).fill(0),\n padding: Array(19).fill(new BN(0)),\n } as TokenInfo,\n borrowRateCurve: parseBorrowRateCurve(farmConfigFromFile),\n depositWithdrawalCap: new WithdrawalCaps({\n configCapacity: new BN(farmConfigFromFile.depositWithdrawalCap.configCapacity),\n currentTotal: new BN(0),\n lastIntervalStartTimestamp: new BN(0),\n configIntervalLengthSeconds: new BN(farmConfigFromFile.depositWithdrawalCap.configIntervalLengthSeconds),\n }),\n debtWithdrawalCap: new WithdrawalCaps({\n configCapacity: new BN(farmConfigFromFile.debtWithdrawalCap.configCapacity),\n currentTotal: new BN(0),\n lastIntervalStartTimestamp: new BN(0),\n configIntervalLengthSeconds: new BN(farmConfigFromFile.debtWithdrawalCap.configIntervalLengthSeconds),\n }),\n deleveragingMarginCallPeriodSecs: new BN(farmConfigFromFile.deleveragingMarginCallPeriodSecs),\n borrowFactorPct: new BN(farmConfigFromFile.borrowFactorPct),\n elevationGroups: farmConfigFromFile.elevationGroups,\n deleveragingThresholdSlotsPerBps: new BN(farmConfigFromFile.deleveragingThresholdSlotsPerBps),\n disableUsageAsCollOutsideEmode: farmConfigFromFile.disableUsageAsCollOutsideEmode,\n utilizationLimitBlockBorrowingAbove: farmConfigFromFile.utilizationLimitBlockBorrowingAbove,\n hostFixedInterestRateBps: farmConfigFromFile.hostFixedInterestRateBps,\n borrowLimitOutsideElevationGroup: new BN(farmConfigFromFile.borrowLimitOutsideElevationGroup),\n borrowLimitAgainstThisCollateralInElevationGroup: parseReserveBorrowLimitAgainstCollInEmode(farmConfigFromFile),\n reserved1: Array(2).fill(0),\n reserved2: Array(2).fill(0),\n reserved3: Array(8).fill(0),\n };\n\n return new ReserveConfig(reserveConfigFields);\n}\n\nfunction parseOracleConfiguration(farmConfigFromFile: any): {\n pythConfiguration: PythConfiguration;\n switchboardConfiguration: SwitchboardConfiguration;\n scopeConfiguration: ScopeConfiguration;\n} {\n const pythConfiguration = new PythConfiguration({\n price: new PublicKey(farmConfigFromFile.tokenInfo.pythConfiguration.price),\n });\n const switchboardConfiguration = new SwitchboardConfiguration({\n priceAggregator: new PublicKey(farmConfigFromFile.tokenInfo.switchboardConfiguration.priceAggregator),\n twapAggregator: new PublicKey(farmConfigFromFile.tokenInfo.switchboardConfiguration.twapAggregator),\n });\n const priceChain = [65535, 65535, 65535, 65535];\n const twapChain = [65535, 65535, 65535, 65535];\n\n const priceChainFromFile: number[] = farmConfigFromFile.tokenInfo.scopeConfiguration.priceChain;\n const twapChainFromFile: number[] = farmConfigFromFile.tokenInfo.scopeConfiguration.twapChain;\n\n priceChainFromFile.forEach((value, index) => (priceChain[index] = value));\n twapChainFromFile.forEach((value, index) => (twapChain[index] = value));\n\n const scopeConfiguration = new ScopeConfiguration({\n priceFeed: new PublicKey(farmConfigFromFile.tokenInfo.scopeConfiguration.priceFeed),\n priceChain: priceChain,\n twapChain: twapChain,\n });\n\n return {\n pythConfiguration,\n switchboardConfiguration,\n scopeConfiguration,\n };\n}\n\nfunction parseBorrowRateCurve(farmConfigFromFile: any): BorrowRateCurve {\n const curvePoints: CurvePointFields[] = [];\n\n farmConfigFromFile.borrowRateCurve.points.forEach((curvePoint: { utilizationRateBps: any; borrowRateBps: any }) =>\n curvePoints.push({\n utilizationRateBps: curvePoint.utilizationRateBps,\n borrowRateBps: curvePoint.borrowRateBps,\n })\n );\n\n const finalCruvePoints: CurvePointFields[] = Array(11).fill(curvePoints[curvePoints.length - 1]);\n\n curvePoints.forEach((curvePoint, index) => (finalCruvePoints[index] = curvePoint));\n\n const borrowRateCurve = new BorrowRateCurve({ points: finalCruvePoints });\n\n return borrowRateCurve;\n}\n\nfunction parseReserveBorrowLimitAgainstCollInEmode(farmConfigFromFile: any): BN[] {\n const reserveBorrowLimitAgainstCollInEmode: BN[] = Array(32).fill(new BN(0));\n\n farmConfigFromFile.borrowLimitAgainstThisCollateralInElevationGroup.forEach(\n (limit: any, index: number) => (reserveBorrowLimitAgainstCollInEmode[index] = new BN(limit))\n );\n\n return reserveBorrowLimitAgainstCollInEmode;\n}\n\nfunction parseReserveConfigToFile(reserveConfig: ReserveConfig) {\n const decoder = new TextDecoder('utf-8');\n\n return {\n status: reserveConfig.status,\n loanToValuePct: reserveConfig.loanToValuePct,\n liquidationThresholdPct: reserveConfig.liquidationThresholdPct,\n minLiquidationBonusBps: reserveConfig.minLiquidationBonusBps,\n protocolLiquidationFeePct: reserveConfig.protocolLiquidationFeePct,\n protocolTakeRatePct: reserveConfig.protocolLiquidationFeePct,\n assetTier: reserveConfig.assetTier,\n maxLiquidationBonusBps: reserveConfig.maxLiquidationBonusBps,\n badDebtLiquidationBonusBps: reserveConfig.badDebtLiquidationBonusBps,\n fees: {\n borrowFee: new Fraction(reserveConfig.fees.borrowFeeSf).toDecimal().toString(),\n flashLoanFee: new Fraction(reserveConfig.fees.flashLoanFeeSf).toDecimal().toString(),\n padding: Array(8).fill(0),\n },\n depositLimit: reserveConfig.depositLimit.toString(),\n borrowLimit: reserveConfig.borrowLimit.toString(),\n tokenInfo: {\n name: decoder.decode(Uint8Array.from(reserveConfig.tokenInfo.name)).replace(/\\0/g, ''),\n heuristic: {\n exp: reserveConfig.tokenInfo.heuristic.exp.toString(),\n lower: reserveConfig.tokenInfo.heuristic.lower.toString(),\n upper: reserveConfig.tokenInfo.heuristic.upper.toString(),\n },\n maxTwapDivergenceBps: reserveConfig.tokenInfo.maxTwapDivergenceBps.toString(),\n maxAgePriceSeconds: reserveConfig.tokenInfo.maxAgePriceSeconds.toString(),\n maxAgeTwapSeconds: reserveConfig.tokenInfo.maxAgeTwapSeconds.toString(),\n scopeConfiguration: reserveConfig.tokenInfo.scopeConfiguration,\n switchboardConfiguration: reserveConfig.tokenInfo.switchboardConfiguration,\n pythConfiguration: reserveConfig.tokenInfo.pythConfiguration,\n blockPriceUsage: reserveConfig.tokenInfo.blockPriceUsage,\n },\n borrowRateCurve: reserveConfig.borrowRateCurve,\n depositWithdrawalCap: reserveConfig.depositWithdrawalCap,\n debtWithdrawalCap: reserveConfig.debtWithdrawalCap,\n deleveragingMarginCallPeriodSecs: reserveConfig.deleveragingMarginCallPeriodSecs.toString(),\n borrowFactorPct: reserveConfig.borrowFactorPct.toString(),\n elevationGroups: reserveConfig.elevationGroups,\n deleveragingThresholdSlotsPerBps: reserveConfig.deleveragingThresholdSlotsPerBps.toString(),\n disableUsageAsCollOutsideEmode: reserveConfig.disableUsageAsCollOutsideEmode,\n utilizationLimitBlockBorrowingAbove: reserveConfig.utilizationLimitBlockBorrowingAbove,\n hostFixedInterestRateBps: reserveConfig.hostFixedInterestRateBps,\n borrowLimitOutsideElevationGroup: reserveConfig.borrowLimitOutsideElevationGroup.toString(),\n borrowLimitAgainstThisCollateralInElevationGroup:\n reserveConfig.borrowLimitAgainstThisCollateralInElevationGroup.map((entry) => entry.toString()),\n reserved1: Array(2).fill(0),\n reserved2: Array(2).fill(0),\n reserved3: Array(8).fill(0),\n };\n}\n"]}