@kamino-finance/klend-sdk 7.1.10 → 7.2.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.
@@ -20,7 +20,6 @@ import {
20
20
  lamportsToDecimal,
21
21
  LendingMarket,
22
22
  parseZeroPaddedUtf8,
23
- printHoldings,
24
23
  Reserve,
25
24
  ReserveAllocationConfig,
26
25
  ReserveWithAddress,
@@ -49,6 +48,7 @@ import { initEnv, ManagerEnv } from './tx/ManagerEnv';
49
48
  import { processTx } from './tx/processor';
50
49
  import { getPriorityFeeAndCuIxs } from '../client/tx/priorityFee';
51
50
  import { fetchAddressLookupTable, fetchAllAddressLookupTable } from '@solana-program/address-lookup-table';
51
+ import { noopSigner } from '../utils/signer';
52
52
 
53
53
  dotenv.config({
54
54
  path: `.env${process.env.ENV ? '.' + process.env.ENV : ''}`,
@@ -401,7 +401,7 @@ async function main() {
401
401
  .option(`--staging`, 'If true, will use the staging programs')
402
402
  .action(async ({ vault, mode, symbol, extraName, staging }) => {
403
403
  const env = await initEnv(undefined, staging);
404
- const kVault = new KaminoVault(address(vault));
404
+ const kVault = new KaminoVault(env.c.rpc, address(vault));
405
405
 
406
406
  const kaminoManager = new KaminoManager(
407
407
  env.c.rpc,
@@ -409,7 +409,7 @@ async function main() {
409
409
  env.klendProgramId,
410
410
  env.kvaultProgramId
411
411
  );
412
- const vaultState = await kVault.getState(env.c.rpc);
412
+ const vaultState = await kVault.getState();
413
413
  const signer = await env.getSigner({ vaultState });
414
414
  const ix = await kaminoManager.getSetSharesMetadataIx(signer, kVault, symbol, extraName);
415
415
 
@@ -447,8 +447,8 @@ async function main() {
447
447
  env.kvaultProgramId
448
448
  );
449
449
 
450
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
451
- const vaultState = await kaminoVault.getState(env.c.rpc);
450
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
451
+ const vaultState = await kaminoVault.getState();
452
452
  const signer = await env.getSigner({ vaultState });
453
453
 
454
454
  const instructions = await kaminoManager.updateVaultConfigIxs(
@@ -496,8 +496,8 @@ async function main() {
496
496
  env.kvaultProgramId
497
497
  );
498
498
 
499
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
500
- const vaultState = await kaminoVault.getState(env.c.rpc);
499
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
500
+ const vaultState = await kaminoVault.getState();
501
501
  const signer = await env.getSigner({ vaultState });
502
502
 
503
503
  const instructions = await kaminoManager.updateVaultConfigIxs(kaminoVault, field, value, signer);
@@ -539,8 +539,8 @@ async function main() {
539
539
  env.kvaultProgramId
540
540
  );
541
541
 
542
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
543
- const vaultState = await kaminoVault.getState(env.c.rpc);
542
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
543
+ const vaultState = await kaminoVault.getState();
544
544
  const signer = await env.getSigner({ vaultState });
545
545
  const instructions = await kaminoManager.updateVaultConfigIxs(
546
546
  kaminoVault,
@@ -651,8 +651,8 @@ async function main() {
651
651
  env.kvaultProgramId
652
652
  );
653
653
 
654
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
655
- const vaultState = await kaminoVault.getState(env.c.rpc);
654
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
655
+ const vaultState = await kaminoVault.getState();
656
656
  const signer = await env.getSigner({ vaultState });
657
657
  const syncLUTIxs = await kaminoManager.syncVaultLUTIxs(signer, kaminoVault);
658
658
 
@@ -711,8 +711,8 @@ async function main() {
711
711
  env.kvaultProgramId
712
712
  );
713
713
 
714
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
715
- const vaultState = await kaminoVault.getState(env.c.rpc);
714
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
715
+ const vaultState = await kaminoVault.getState();
716
716
  const signer = await env.getSigner({ vaultState });
717
717
  const instructions = await kaminoManager.updateVaultConfigIxs(
718
718
  kaminoVault,
@@ -757,8 +757,8 @@ async function main() {
757
757
  env.kvaultProgramId
758
758
  );
759
759
 
760
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
761
- const vaultState = await kaminoVault.getState(env.c.rpc);
760
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
761
+ const vaultState = await kaminoVault.getState();
762
762
  const pendingAdmin = await env.getSigner({
763
763
  vaultState,
764
764
  useVaultPendingAdmin: true,
@@ -835,8 +835,8 @@ async function main() {
835
835
  env.kvaultProgramId
836
836
  );
837
837
 
838
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
839
- const vaultState = await kaminoVault.getState(env.c.rpc);
838
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
839
+ const vaultState = await kaminoVault.getState();
840
840
  const signer = await env.getSigner({ vaultState });
841
841
  const instruction = await kaminoManager.giveUpPendingFeesIx(kaminoVault, new Decimal(maxAmountToGiveUp), signer);
842
842
 
@@ -875,8 +875,8 @@ async function main() {
875
875
  env.kvaultProgramId
876
876
  );
877
877
 
878
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
879
- const vaultState = await kaminoVault.getState(env.c.rpc);
878
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
879
+ const vaultState = await kaminoVault.getState();
880
880
  const signer = await env.getSigner({ vaultState });
881
881
 
882
882
  const instructions = await kaminoManager.withdrawPendingFeesIxs(
@@ -922,8 +922,8 @@ async function main() {
922
922
  env.kvaultProgramId
923
923
  );
924
924
 
925
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
926
- const vaultState = await kaminoVault.getState(env.c.rpc);
925
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
926
+ const vaultState = await kaminoVault.getState();
927
927
  const signer = await env.getSigner({ vaultState });
928
928
 
929
929
  const ixs = await kaminoManager.fullRemoveReserveFromVaultIxs(signer, kaminoVault, reserveAddress);
@@ -964,7 +964,7 @@ async function main() {
964
964
  const user = await env.getSigner();
965
965
  const vaultAddress = address(vault);
966
966
 
967
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
967
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
968
968
 
969
969
  const stakeIxs = await new KaminoManager(
970
970
  env.c.rpc,
@@ -1008,8 +1008,8 @@ async function main() {
1008
1008
  const env = await initEnv(staging, ms);
1009
1009
  const reserveAddress = address(reserve);
1010
1010
  const vaultAddress = address(vault);
1011
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1012
- const vaultState = await kaminoVault.getState(env.c.rpc);
1011
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
1012
+ const vaultState = await kaminoVault.getState();
1013
1013
  const signer = await env.getSigner({ vaultState });
1014
1014
  const allocationWeightValue = Number(allocationWeight);
1015
1015
  const allocationCapDecimal = new Decimal(allocationCap);
@@ -1081,7 +1081,7 @@ async function main() {
1081
1081
  env.kvaultProgramId
1082
1082
  );
1083
1083
 
1084
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1084
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
1085
1085
  const payer = await env.getSigner();
1086
1086
  const depositInstructions = await kaminoManager.depositToVaultIxs(payer, kaminoVault, amount);
1087
1087
  const instructions = [...depositInstructions.depositIxs, ...depositInstructions.stakeInFarmIfNeededIxs];
@@ -1128,8 +1128,8 @@ async function main() {
1128
1128
  env.kvaultProgramId
1129
1129
  );
1130
1130
 
1131
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1132
- const vaultState = await kaminoVault.getState(env.c.rpc);
1131
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
1132
+ const vaultState = await kaminoVault.getState();
1133
1133
  const lookupTableAddresses = [];
1134
1134
  if (vaultState.vaultLookupTable !== DEFAULT_PUBLIC_KEY) {
1135
1135
  lookupTableAddresses.push(vaultState.vaultLookupTable);
@@ -1186,7 +1186,7 @@ async function main() {
1186
1186
  env.kvaultProgramId
1187
1187
  );
1188
1188
 
1189
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1189
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
1190
1190
  const instructions = await kaminoManager.investAllReservesIxs(payer, kaminoVault);
1191
1191
 
1192
1192
  for (let i = 0; i < instructions.length; i++) {
@@ -1234,7 +1234,8 @@ async function main() {
1234
1234
  env.kvaultProgramId
1235
1235
  );
1236
1236
 
1237
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1237
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
1238
+
1238
1239
  const reserveAddress = address(reserve);
1239
1240
  const reserveState = await Reserve.fetch(env.c.rpc, reserveAddress, env.klendProgramId);
1240
1241
  if (!reserveState) {
@@ -1292,7 +1293,7 @@ async function main() {
1292
1293
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1293
1294
 
1294
1295
  const vaultAddress = address(vault);
1295
- const vaultState = await new KaminoVault(vaultAddress, undefined, env.kvaultProgramId).getState(env.c.rpc);
1296
+ const vaultState = await new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId).getState();
1296
1297
  const vaultCollaterals = await kaminoManager.getVaultCollaterals(
1297
1298
  vaultState,
1298
1299
  await env.c.rpc.getSlot({ commitment: 'confirmed' }).send()
@@ -1317,9 +1318,9 @@ async function main() {
1317
1318
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1318
1319
 
1319
1320
  const vaultAddress = address(vault);
1320
- const vaultState = await new KaminoVault(vaultAddress, undefined, env.kvaultProgramId).getState(env.c.rpc);
1321
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
1321
1322
  const vaultOverview = await kaminoManager.getVaultOverview(
1322
- vaultState,
1323
+ kaminoVault,
1323
1324
  new Decimal(tokenPrice),
1324
1325
  await env.c.rpc.getSlot({ commitment: 'confirmed' }).send()
1325
1326
  );
@@ -1342,7 +1343,7 @@ async function main() {
1342
1343
 
1343
1344
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1344
1345
 
1345
- const kaminoVault = new KaminoVault(address(vault));
1346
+ const kaminoVault = new KaminoVault(env.c.rpc, address(vault), undefined, env.kvaultProgramId, slotDuration);
1346
1347
  const farmAPY = await kaminoManager.getVaultFarmRewardsAPY(kaminoVault, new Decimal(tokenPrice));
1347
1348
  console.log('farmAPY', farmAPY);
1348
1349
  });
@@ -1373,7 +1374,7 @@ async function main() {
1373
1374
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1374
1375
 
1375
1376
  const vaultAddress = address(vault);
1376
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1377
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId, slotDuration);
1377
1378
 
1378
1379
  const allVaultsTokenMints = await kaminoManager.getAllVaultsTokenMintsIncludingRewards([kaminoVault]);
1379
1380
  console.log('allVaultsTokenMints', allVaultsTokenMints);
@@ -1390,7 +1391,13 @@ async function main() {
1390
1391
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1391
1392
 
1392
1393
  const vaultAddress = address(vault);
1393
- const vaultState = await new KaminoVault(vaultAddress, undefined, env.kvaultProgramId).getState(env.c.rpc);
1394
+ const vaultState = await new KaminoVault(
1395
+ env.c.rpc,
1396
+ vaultAddress,
1397
+ undefined,
1398
+ env.kvaultProgramId,
1399
+ slotDuration
1400
+ ).getState();
1394
1401
  const allocationDistribution = kaminoManager.getAllocationsDistribuionPct(vaultState);
1395
1402
 
1396
1403
  allocationDistribution.forEach((allocation, reserveAddress) => {
@@ -1412,7 +1419,7 @@ async function main() {
1412
1419
 
1413
1420
  const vaultAddress = address(vault);
1414
1421
  const walletAddress = address(wallet);
1415
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1422
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId, slotDuration);
1416
1423
  const userShares = await kaminoManager.getUserSharesBalanceSingleVault(walletAddress, kaminoVault);
1417
1424
  console.log(
1418
1425
  `User shares for vault ${vaultAddress}: unstaked shares: ${userShares.unstakedShares} staked shares: ${userShares.stakedShares} total shares: ${userShares.totalShares}`
@@ -1451,7 +1458,7 @@ async function main() {
1451
1458
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1452
1459
 
1453
1460
  const vaultAddress = address(vault);
1454
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1461
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId, slotDuration);
1455
1462
  const tokensPerShare = await kaminoManager.getTokensPerShareSingleVault(
1456
1463
  kaminoVault,
1457
1464
  await env.c.rpc.getSlot({ commitment: 'confirmed' }).send()
@@ -1470,26 +1477,25 @@ async function main() {
1470
1477
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1471
1478
 
1472
1479
  const vaultAddress = address(vault);
1473
- const kaminoVault = new KaminoVault(vaultAddress, undefined, env.kvaultProgramId);
1474
- await kaminoVault.getState(env.c.rpc);
1480
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId, slotDuration);
1481
+ const vaultState = await kaminoVault.getState();
1475
1482
 
1476
1483
  const slot = await env.c.rpc.getSlot({ commitment: 'confirmed' }).send();
1477
1484
  const tokensPerShare = await kaminoManager.getTokensPerShareSingleVault(kaminoVault, slot);
1478
1485
  const holdings = await kaminoManager.getVaultHoldings(kaminoVault.state!, slot);
1479
- const vaultState = kaminoVault.state!;
1480
1486
 
1481
1487
  const sharesIssued = lamportsToDecimal(
1482
1488
  vaultState.sharesIssued.toString(),
1483
1489
  vaultState.sharesMintDecimals.toString()
1484
1490
  );
1485
1491
 
1486
- const vaultOverview = await kaminoManager.getVaultOverview(vaultState, new Decimal(1.0), slot);
1492
+ const vaultOverview = await kaminoManager.getVaultOverview(kaminoVault, new Decimal(1.0), slot);
1487
1493
 
1488
1494
  console.log('farm', vaultState.vaultFarm.toString());
1489
1495
  console.log('vault token mint', vaultState.tokenMint);
1490
1496
  console.log('Name: ', kaminoManager.getDecodedVaultName(kaminoVault.state!));
1491
1497
  console.log('Shares issued: ', sharesIssued);
1492
- printHoldings(holdings);
1498
+ holdings.print();
1493
1499
  console.log(`Tokens per share for vault ${vaultAddress}: ${tokensPerShare}`);
1494
1500
  console.log('vaultOverview', vaultOverview);
1495
1501
 
@@ -1613,7 +1619,13 @@ async function main() {
1613
1619
  const slotDuration = await getMedianSlotDurationInMsFromLastEpochs();
1614
1620
 
1615
1621
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1616
- const vaultState = await new KaminoVault(vaultAddress, undefined, env.kvaultProgramId).getState(env.c.rpc);
1622
+ const vaultState = await new KaminoVault(
1623
+ env.c.rpc,
1624
+ vaultAddress,
1625
+ undefined,
1626
+ env.kvaultProgramId,
1627
+ slotDuration
1628
+ ).getState();
1617
1629
 
1618
1630
  const simulatedHoldings = await kaminoManager.calculateSimulatedHoldingsWithInterest(vaultState);
1619
1631
 
@@ -1657,7 +1669,13 @@ async function main() {
1657
1669
  const slotDuration = await getMedianSlotDurationInMsFromLastEpochs();
1658
1670
 
1659
1671
  const kaminoManager = new KaminoManager(env.c.rpc, slotDuration, env.klendProgramId, env.kvaultProgramId);
1660
- const vaultState = await new KaminoVault(vaultAddress, undefined, env.kvaultProgramId).getState(env.c.rpc);
1672
+ const vaultState = await new KaminoVault(
1673
+ env.c.rpc,
1674
+ vaultAddress,
1675
+ undefined,
1676
+ env.kvaultProgramId,
1677
+ slotDuration
1678
+ ).getState();
1661
1679
 
1662
1680
  const computedAllocation = await kaminoManager.getVaultComputedReservesAllocation(vaultState);
1663
1681
  console.log('computedAllocation', computedAllocation);
@@ -1975,6 +1993,47 @@ async function main() {
1975
1993
  console.log(adminInfo);
1976
1994
  });
1977
1995
 
1996
+ commands
1997
+ .command('claim-rewards-for-vault')
1998
+ .requiredOption('--vault <string>', 'Vault address')
1999
+ .requiredOption(
2000
+ `--mode <string>`,
2001
+ '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'
2002
+ )
2003
+ .option(`--staging`, 'If true, will use the staging programs')
2004
+ .option(`--user <string>`, 'User address')
2005
+ .action(async ({ vault, mode, staging, user }) => {
2006
+ const env = await initEnv(staging);
2007
+ const vaultAddress = address(vault);
2008
+ const kaminoVault = new KaminoVault(env.c.rpc, vaultAddress);
2009
+ const kaminoManager = new KaminoManager(
2010
+ env.c.rpc,
2011
+ DEFAULT_RECENT_SLOT_DURATION_MS,
2012
+ env.klendProgramId,
2013
+ env.kvaultProgramId
2014
+ );
2015
+ const userWallet = user ? noopSigner(address(user)) : await env.getSigner();
2016
+ const rewardsIxs = await kaminoManager.getClaimAllRewardsForVaultIxs(userWallet, kaminoVault);
2017
+
2018
+ if (rewardsIxs.length > 0) {
2019
+ await processTx(
2020
+ env.c,
2021
+ userWallet,
2022
+ [
2023
+ ...rewardsIxs,
2024
+ ...getPriorityFeeAndCuIxs({
2025
+ priorityFeeMultiplier: 2500,
2026
+ computeUnits: 400_000,
2027
+ }),
2028
+ ],
2029
+ mode,
2030
+ []
2031
+ );
2032
+ } else {
2033
+ console.log('No rewards to claim');
2034
+ }
2035
+ });
2036
+
1978
2037
  await commands.parseAsync();
1979
2038
  }
1980
2039
 
@@ -20,7 +20,6 @@ export async function getReserveFarmRewardsAPY(
20
20
  farmsClient: Farms,
21
21
  slot: Slot,
22
22
  reserveState?: Reserve,
23
- cTokenMintDecimals?: number,
24
23
  tokensPrices?: Map<Address, Decimal>
25
24
  ): Promise<ReserveIncentives> {
26
25
  const reserveIncentives: ReserveIncentives = {