@kamino-finance/klend-sdk 7.4.0-beta.2 → 7.4.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@codegen/klend/accounts/LendingMarket.d.ts +150 -3
- package/dist/@codegen/klend/accounts/LendingMarket.d.ts.map +1 -1
- package/dist/@codegen/klend/accounts/LendingMarket.js +91 -2
- package/dist/@codegen/klend/accounts/LendingMarket.js.map +1 -1
- package/dist/@codegen/klend/accounts/Reserve.d.ts +6 -0
- package/dist/@codegen/klend/accounts/Reserve.d.ts.map +1 -1
- package/dist/@codegen/klend/accounts/Reserve.js +8 -1
- package/dist/@codegen/klend/accounts/Reserve.js.map +1 -1
- package/dist/@codegen/klend/accounts/WithdrawTicket.d.ts +144 -0
- package/dist/@codegen/klend/accounts/WithdrawTicket.d.ts.map +1 -0
- package/dist/@codegen/klend/accounts/WithdrawTicket.js +205 -0
- package/dist/@codegen/klend/accounts/WithdrawTicket.js.map +1 -0
- package/dist/@codegen/klend/accounts/index.d.ts +2 -0
- package/dist/@codegen/klend/accounts/index.d.ts.map +1 -1
- package/dist/@codegen/klend/accounts/index.js +3 -1
- package/dist/@codegen/klend/accounts/index.js.map +1 -1
- package/dist/@codegen/klend/errors/custom.d.ts +81 -1
- package/dist/@codegen/klend/errors/custom.d.ts.map +1 -1
- package/dist/@codegen/klend/errors/custom.js +142 -1
- package/dist/@codegen/klend/errors/custom.js.map +1 -1
- package/dist/@codegen/klend/instructions/enqueueToWithdraw.d.ts +62 -0
- package/dist/@codegen/klend/instructions/enqueueToWithdraw.d.ts.map +1 -0
- package/dist/@codegen/klend/instructions/enqueueToWithdraw.js +79 -0
- package/dist/@codegen/klend/instructions/enqueueToWithdraw.js.map +1 -0
- package/dist/@codegen/klend/instructions/index.d.ts +6 -0
- package/dist/@codegen/klend/instructions/index.d.ts.map +1 -1
- package/dist/@codegen/klend/instructions/index.js +8 -2
- package/dist/@codegen/klend/instructions/index.js.map +1 -1
- package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.d.ts +54 -0
- package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.d.ts.map +1 -0
- package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.js +66 -0
- package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.js.map +1 -0
- package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.d.ts +66 -0
- package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.d.ts.map +1 -0
- package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.js +41 -0
- package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.js.map +1 -0
- package/dist/@codegen/klend/types/BorrowOrder.d.ts +3 -3
- package/dist/@codegen/klend/types/BorrowOrder.js +1 -1
- package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.d.ts +145 -0
- package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.d.ts.map +1 -0
- package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.js +144 -0
- package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.js.map +1 -0
- package/dist/@codegen/klend/types/ObligationLiquidity.d.ts +29 -0
- package/dist/@codegen/klend/types/ObligationLiquidity.d.ts.map +1 -1
- package/dist/@codegen/klend/types/ObligationLiquidity.js +15 -1
- package/dist/@codegen/klend/types/ObligationLiquidity.js.map +1 -1
- package/dist/@codegen/klend/types/ProgressCallbackType.d.ts +32 -0
- package/dist/@codegen/klend/types/ProgressCallbackType.d.ts.map +1 -0
- package/dist/@codegen/klend/types/ProgressCallbackType.js +108 -0
- package/dist/@codegen/klend/types/ProgressCallbackType.js.map +1 -0
- package/dist/@codegen/klend/types/ReserveLiquidity.d.ts +26 -8
- package/dist/@codegen/klend/types/ReserveLiquidity.d.ts.map +1 -1
- package/dist/@codegen/klend/types/ReserveLiquidity.js +14 -8
- package/dist/@codegen/klend/types/ReserveLiquidity.js.map +1 -1
- package/dist/@codegen/klend/types/UpdateConfigMode.d.ts +7 -7
- package/dist/@codegen/klend/types/UpdateConfigMode.d.ts.map +1 -1
- package/dist/@codegen/klend/types/UpdateConfigMode.js +12 -12
- package/dist/@codegen/klend/types/UpdateConfigMode.js.map +1 -1
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts +78 -0
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts.map +1 -1
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.js +145 -1
- package/dist/@codegen/klend/types/UpdateLendingMarketMode.js.map +1 -1
- package/dist/@codegen/klend/types/WithdrawQueue.d.ts +64 -0
- package/dist/@codegen/klend/types/WithdrawQueue.d.ts.map +1 -0
- package/dist/@codegen/klend/types/WithdrawQueue.js +104 -0
- package/dist/@codegen/klend/types/WithdrawQueue.js.map +1 -0
- package/dist/@codegen/klend/types/index.d.ts +23 -4
- package/dist/@codegen/klend/types/index.d.ts.map +1 -1
- package/dist/@codegen/klend/types/index.js +7 -1
- package/dist/@codegen/klend/types/index.js.map +1 -1
- package/dist/classes/action.d.ts +11 -0
- package/dist/classes/action.d.ts.map +1 -1
- package/dist/classes/action.js +66 -0
- package/dist/classes/action.js.map +1 -1
- package/dist/classes/actionTypes.d.ts +29 -0
- package/dist/classes/actionTypes.d.ts.map +1 -1
- package/dist/classes/manager.d.ts +1 -1
- package/dist/classes/manager.d.ts.map +1 -1
- package/dist/classes/manager.js +9 -8
- package/dist/classes/manager.js.map +1 -1
- package/dist/classes/market.d.ts +7 -102
- package/dist/classes/market.d.ts.map +1 -1
- package/dist/classes/market.js +8 -153
- package/dist/classes/market.js.map +1 -1
- package/dist/classes/reserve.d.ts +3 -10
- package/dist/classes/reserve.d.ts.map +1 -1
- package/dist/classes/reserve.js +45 -51
- package/dist/classes/reserve.js.map +1 -1
- package/dist/idl/klend.json +860 -32
- package/dist/manager/client_kamino_manager.js +2 -3
- package/dist/manager/client_kamino_manager.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +0 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/seeds.d.ts +24 -0
- package/dist/utils/seeds.d.ts.map +1 -1
- package/dist/utils/seeds.js +41 -1
- package/dist/utils/seeds.js.map +1 -1
- package/package.json +1 -1
- package/src/@codegen/klend/accounts/LendingMarket.ts +205 -4
- package/src/@codegen/klend/accounts/Reserve.ts +12 -1
- package/src/@codegen/klend/accounts/WithdrawTicket.ts +280 -0
- package/src/@codegen/klend/accounts/index.ts +2 -0
- package/src/@codegen/klend/errors/custom.ts +161 -0
- package/src/@codegen/klend/instructions/enqueueToWithdraw.ts +120 -0
- package/src/@codegen/klend/instructions/index.ts +12 -0
- package/src/@codegen/klend/instructions/recoverInvalidTicketCollateral.ts +103 -0
- package/src/@codegen/klend/instructions/withdrawQueuedLiquidity.ts +118 -0
- package/src/@codegen/klend/types/BorrowOrder.ts +3 -3
- package/src/@codegen/klend/types/FixedTermBorrowRolloverConfig.ts +199 -0
- package/src/@codegen/klend/types/ObligationLiquidity.ts +37 -1
- package/src/@codegen/klend/types/ProgressCallbackType.ts +91 -0
- package/src/@codegen/klend/types/ReserveLiquidity.ts +30 -12
- package/src/@codegen/klend/types/UpdateConfigMode.ts +13 -13
- package/src/@codegen/klend/types/UpdateLendingMarketMode.ts +180 -0
- package/src/@codegen/klend/types/WithdrawQueue.ts +117 -0
- package/src/@codegen/klend/types/index.ts +42 -2
- package/src/classes/action.ts +115 -1
- package/src/classes/actionTypes.ts +31 -0
- package/src/classes/manager.ts +19 -27
- package/src/classes/market.ts +8 -183
- package/src/classes/reserve.ts +45 -68
- package/src/idl/klend.json +860 -32
- package/src/manager/client_kamino_manager.ts +2 -4
- package/src/utils/index.ts +0 -1
- package/src/utils/seeds.ts +49 -0
- package/dist/utils/ReserveKind.d.ts +0 -57
- package/dist/utils/ReserveKind.d.ts.map +0 -1
- package/dist/utils/ReserveKind.js +0 -76
- package/dist/utils/ReserveKind.js.map +0 -1
- package/src/utils/ReserveKind.ts +0 -94
package/src/classes/market.ts
CHANGED
|
@@ -40,10 +40,8 @@ import {
|
|
|
40
40
|
MultiplyObligation,
|
|
41
41
|
MultiplyObligationFixedRate,
|
|
42
42
|
ObligationType,
|
|
43
|
-
FloatRateReserveKind,
|
|
44
43
|
PythPrices,
|
|
45
44
|
referrerTokenStatePda,
|
|
46
|
-
ReserveKind,
|
|
47
45
|
setOrAppend,
|
|
48
46
|
userMetadataPda,
|
|
49
47
|
VanillaObligation,
|
|
@@ -573,12 +571,6 @@ export class KaminoMarket {
|
|
|
573
571
|
return checkDefined(this.getReserveByAddress(address), `${description} reserve ${address} not found`);
|
|
574
572
|
}
|
|
575
573
|
|
|
576
|
-
/**
|
|
577
|
-
* Returns all reserves for the given mint address (both float rate and fixed rate).
|
|
578
|
-
*
|
|
579
|
-
* @param mint The liquidity mint address
|
|
580
|
-
* @returns Array of all reserves for this mint
|
|
581
|
-
*/
|
|
582
574
|
getReservesByMint(address: Address): KaminoReserve[] {
|
|
583
575
|
const reserves: KaminoReserve[] = [];
|
|
584
576
|
for (const reserve of this.reserves.values()) {
|
|
@@ -589,97 +581,14 @@ export class KaminoMarket {
|
|
|
589
581
|
return reserves;
|
|
590
582
|
}
|
|
591
583
|
|
|
592
|
-
getExistingReservesByMint(address: Address, description: string = 'Requested'): KaminoReserve[] {
|
|
593
|
-
return checkArrayNotEmpty(this.getReservesByMint(address), `${description} reserve with mint ${address} not found`);
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
/**
|
|
597
|
-
* Returns this market's reserve matching the given mint address and reserve kind.
|
|
598
|
-
* Since a market can have multiple reserves for the same mint (with different terms),
|
|
599
|
-
* the reserve kind specifies which reserve to select.
|
|
600
|
-
*
|
|
601
|
-
* Example for fixed-term reserves:
|
|
602
|
-
* const fixedReserveKind = new FixedReserveKind(new BN(30 * 24 * 60 * 60), 500); // 30 days, 5% borrow rate
|
|
603
|
-
* const fixedReserve = market.getReserveByMintAndKind(tokenMint, fixedReserveKind)!;
|
|
604
|
-
|
|
605
|
-
* @param mint The liquidity mint address
|
|
606
|
-
* @param reserveKind The reserve kind to match (e.g., FloatRateReserveKind or FixedRateReserveKind)
|
|
607
|
-
*/
|
|
608
|
-
getReserveByMintAndKind(mint: Address, reserveKind: ReserveKind): KaminoReserve | undefined {
|
|
609
|
-
for (const reserve of this.reserves.values()) {
|
|
610
|
-
if (reserve.getLiquidityMint() === mint && reserveKind.matches(reserve)) {
|
|
611
|
-
return reserve;
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
return undefined;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
/**
|
|
618
|
-
* Returns this market's reserve matching the given mint address and reserve kind,
|
|
619
|
-
* or throws an error if not found.
|
|
620
|
-
*
|
|
621
|
-
* @param mint The liquidity mint address
|
|
622
|
-
* @param reserveKind The reserve kind to match
|
|
623
|
-
* @param description Optional description for the error message
|
|
624
|
-
*/
|
|
625
|
-
getExistingReserveByMintAndKind(
|
|
626
|
-
mint: Address,
|
|
627
|
-
reserveKind: ReserveKind,
|
|
628
|
-
description: string = 'Requested'
|
|
629
|
-
): KaminoReserve {
|
|
630
|
-
return checkDefined(
|
|
631
|
-
this.getReserveByMintAndKind(mint, reserveKind),
|
|
632
|
-
`${description} reserve with mint ${mint} and kind ${reserveKind.toString()} not found`
|
|
633
|
-
);
|
|
634
|
-
}
|
|
635
|
-
|
|
636
584
|
/**
|
|
637
|
-
* Returns this market's
|
|
638
|
-
*
|
|
639
|
-
*
|
|
640
|
-
* @param mint The liquidity mint address
|
|
641
|
-
* @returns The float rate reserve, or undefined if not found
|
|
585
|
+
* Returns this market's reserve of the given mint address, or throws an error (including the given description) if
|
|
586
|
+
* such reserve does not exist.
|
|
642
587
|
*/
|
|
643
|
-
|
|
644
|
-
return this.
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
/**
|
|
648
|
-
* Returns this market's float rate reserve for the given mint address,
|
|
649
|
-
* or throws an error if not found.
|
|
650
|
-
*
|
|
651
|
-
* @param mint The liquidity mint address
|
|
652
|
-
* @param description Optional description for the error message
|
|
653
|
-
* @returns The float rate reserve
|
|
654
|
-
*/
|
|
655
|
-
getExistingFloatRateReserveByMint(mint: Address, description: string = 'Requested'): KaminoReserve {
|
|
656
|
-
return checkDefined(this.getFloatRateReserveByMint(mint), `${description} float rate reserve with mint ${mint} not found`);
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
/**
|
|
660
|
-
* Returns all fixed rate reserves for the given mint address.
|
|
661
|
-
* Fixed rate reserves have a non-zero debt term (debtTermSeconds > 0).
|
|
662
|
-
*
|
|
663
|
-
* @param mint The liquidity mint address
|
|
664
|
-
* @returns Array of all fixed rate reserves for this mint
|
|
665
|
-
*/
|
|
666
|
-
getFixedRateReservesByMint(mint: Address): KaminoReserve[] {
|
|
667
|
-
const fixedRateReserves: KaminoReserve[] = [];
|
|
668
|
-
const floatRateReserveKind = new FloatRateReserveKind();
|
|
669
|
-
for (const reserve of this.reserves.values()) {
|
|
670
|
-
if (reserve.getLiquidityMint() === mint && !floatRateReserveKind.matches(reserve)) {
|
|
671
|
-
fixedRateReserves.push(reserve);
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
return fixedRateReserves;
|
|
588
|
+
getExistingReservesByMint(address: Address, description: string = 'Requested'): KaminoReserve[] {
|
|
589
|
+
return checkArrayNotEmpty(this.getReservesByMint(address), `${description} reserve with mint ${address} not found`);
|
|
675
590
|
}
|
|
676
591
|
|
|
677
|
-
/**
|
|
678
|
-
* Returns all reserves for the given symbol (both float rate and fixed rate).
|
|
679
|
-
*
|
|
680
|
-
* @param symbol The reserve symbol
|
|
681
|
-
* @returns Array of all reserves for this symbol
|
|
682
|
-
*/
|
|
683
592
|
getReservesBySymbol(symbol: string): KaminoReserve[] {
|
|
684
593
|
const reserves: KaminoReserve[] = [];
|
|
685
594
|
for (const reserve of this.reserves.values()) {
|
|
@@ -690,6 +599,10 @@ export class KaminoMarket {
|
|
|
690
599
|
return reserves;
|
|
691
600
|
}
|
|
692
601
|
|
|
602
|
+
/**
|
|
603
|
+
* Returns this market's reserve of the given symbol, or throws an error (including the given description) if
|
|
604
|
+
* such reserve does not exist.
|
|
605
|
+
*/
|
|
693
606
|
getExistingReservesBySymbol(symbol: string, description: string = 'Requested'): KaminoReserve[] {
|
|
694
607
|
return checkArrayNotEmpty(
|
|
695
608
|
this.getReservesBySymbol(symbol),
|
|
@@ -697,94 +610,6 @@ export class KaminoMarket {
|
|
|
697
610
|
);
|
|
698
611
|
}
|
|
699
612
|
|
|
700
|
-
/**
|
|
701
|
-
* Returns this market's reserve matching the given symbol and reserve kind.
|
|
702
|
-
* Since a market can have multiple reserves for the same symbol (with different terms),
|
|
703
|
-
* the reserve kind specifies which reserve to select.
|
|
704
|
-
*
|
|
705
|
-
* @param symbol The reserve symbol
|
|
706
|
-
* @param reserveKind The reserve kind to match (e.g., FloatRateReserveKind or FixedRateReserveKind)
|
|
707
|
-
*/
|
|
708
|
-
getReserveBySymbolAndKind(symbol: string, reserveKind: ReserveKind): KaminoReserve | undefined {
|
|
709
|
-
for (const reserve of this.reserves.values()) {
|
|
710
|
-
if (reserve.symbol === symbol && reserveKind.matches(reserve)) {
|
|
711
|
-
return reserve;
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
return undefined;
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
/**
|
|
718
|
-
* Returns this market's reserve matching the given symbol and reserve kind,
|
|
719
|
-
* or throws an error if not found.
|
|
720
|
-
*
|
|
721
|
-
* @param symbol The reserve symbol
|
|
722
|
-
* @param reserveKind The reserve kind to match
|
|
723
|
-
* @param description Optional description for the error message
|
|
724
|
-
*/
|
|
725
|
-
getExistingReserveBySymbolAndKind(
|
|
726
|
-
symbol: string,
|
|
727
|
-
reserveKind: ReserveKind,
|
|
728
|
-
description: string = 'Requested'
|
|
729
|
-
): KaminoReserve {
|
|
730
|
-
return checkDefined(
|
|
731
|
-
this.getReserveBySymbolAndKind(symbol, reserveKind),
|
|
732
|
-
`${description} reserve with symbol ${symbol} and kind ${reserveKind.toString()} not found`
|
|
733
|
-
);
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
/**
|
|
737
|
-
* Returns this market's float rate reserve for the given symbol.
|
|
738
|
-
* Float rate reserves are reserves without a fixed term (debtTermSeconds = 0).
|
|
739
|
-
*
|
|
740
|
-
* @param symbol The reserve symbol
|
|
741
|
-
* @returns The float rate reserve, or undefined if not found
|
|
742
|
-
*/
|
|
743
|
-
getFloatRateReserveBySymbol(symbol: string): KaminoReserve | undefined {
|
|
744
|
-
return this.getReserveBySymbolAndKind(symbol, new FloatRateReserveKind());
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
/**
|
|
748
|
-
* Returns this market's float rate reserve for the given symbol,
|
|
749
|
-
* or throws an error if not found.
|
|
750
|
-
*
|
|
751
|
-
* @param symbol The reserve symbol
|
|
752
|
-
* @param description Optional description for the error message
|
|
753
|
-
* @returns The float rate reserve
|
|
754
|
-
*/
|
|
755
|
-
getExistingFloatRateReserveBySymbol(symbol: string, description: string = 'Requested'): KaminoReserve {
|
|
756
|
-
return checkDefined(
|
|
757
|
-
this.getFloatRateReserveBySymbol(symbol),
|
|
758
|
-
`${description} float rate reserve with symbol ${symbol} not found`
|
|
759
|
-
);
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
/**
|
|
763
|
-
* Returns all fixed rate reserves for the given symbol.
|
|
764
|
-
* Fixed rate reserves have a non-zero debt term (debtTermSeconds > 0).
|
|
765
|
-
*
|
|
766
|
-
* @param symbol The reserve symbol
|
|
767
|
-
* @returns Array of all fixed rate reserves for this symbol
|
|
768
|
-
*/
|
|
769
|
-
getFixedRateReservesBySymbol(symbol: string): KaminoReserve[] {
|
|
770
|
-
const fixedRateReserves: KaminoReserve[] = [];
|
|
771
|
-
const floatRateReserveKind = new FloatRateReserveKind();
|
|
772
|
-
for (const reserve of this.reserves.values()) {
|
|
773
|
-
if (reserve.symbol === symbol && !floatRateReserveKind.matches(reserve)) {
|
|
774
|
-
fixedRateReserves.push(reserve);
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
return fixedRateReserves;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
getReserveMintBySymbol(symbol: string) {
|
|
781
|
-
const reserves = this.getReservesBySymbol(symbol);
|
|
782
|
-
if (reserves.length === 0) {
|
|
783
|
-
throw new Error(`No reserves found for symbol ${symbol}`);
|
|
784
|
-
}
|
|
785
|
-
return reserves[0].getLiquidityMint();
|
|
786
|
-
}
|
|
787
|
-
|
|
788
613
|
async getReserveFarmInfo(
|
|
789
614
|
reserveAddress: Address,
|
|
790
615
|
getRewardPrice: (mint: Address) => Promise<number>
|
package/src/classes/reserve.ts
CHANGED
|
@@ -19,7 +19,6 @@ import Decimal from 'decimal.js';
|
|
|
19
19
|
import {
|
|
20
20
|
AllOracleAccounts,
|
|
21
21
|
DEFAULT_PUBLIC_KEY,
|
|
22
|
-
FixedRateReserveKind,
|
|
23
22
|
getTokenOracleData,
|
|
24
23
|
globalConfigPda,
|
|
25
24
|
INITIAL_COLLATERAL_RATE,
|
|
@@ -27,9 +26,7 @@ import {
|
|
|
27
26
|
MarketWithAddress,
|
|
28
27
|
MIN_INITIAL_DEPOSIT,
|
|
29
28
|
ONE_HUNDRED_PCT_IN_BPS,
|
|
30
|
-
FloatRateReserveKind,
|
|
31
29
|
reservePdas,
|
|
32
|
-
ReserveKind,
|
|
33
30
|
SLOTS_PER_DAY,
|
|
34
31
|
SLOTS_PER_SECOND,
|
|
35
32
|
SLOTS_PER_YEAR,
|
|
@@ -79,7 +76,6 @@ export class KaminoReserve {
|
|
|
79
76
|
private readonly recentSlotDurationMs: number;
|
|
80
77
|
|
|
81
78
|
private metadata?: ScopeEntryMetadata[];
|
|
82
|
-
private reserveKind: ReserveKind;
|
|
83
79
|
|
|
84
80
|
constructor(
|
|
85
81
|
state: Reserve,
|
|
@@ -95,7 +91,6 @@ export class KaminoReserve {
|
|
|
95
91
|
this.rpc = connection;
|
|
96
92
|
this.symbol = parseTokenSymbol(state.config.tokenInfo.name);
|
|
97
93
|
this.recentSlotDurationMs = recentSlotDurationMs;
|
|
98
|
-
this.reserveKind = KaminoReserve.createReserveKind(state);
|
|
99
94
|
}
|
|
100
95
|
|
|
101
96
|
static initialize(
|
|
@@ -135,16 +130,6 @@ export class KaminoReserve {
|
|
|
135
130
|
return new KaminoReserve(reserve, address, tokenOracleData, rpc, recentSlotDurationMs);
|
|
136
131
|
}
|
|
137
132
|
|
|
138
|
-
static createReserveKind(state: Reserve): ReserveKind {
|
|
139
|
-
const debtTermSeconds = state.config.debtTermSeconds;
|
|
140
|
-
if (debtTermSeconds.eqn(0)) {
|
|
141
|
-
return new FloatRateReserveKind();
|
|
142
|
-
} else {
|
|
143
|
-
const borrowRateBps = state.config.borrowRateCurve.points[0]?.borrowRateBps || 0;
|
|
144
|
-
return new FixedRateReserveKind(debtTermSeconds, borrowRateBps);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
133
|
/// GETTERS
|
|
149
134
|
|
|
150
135
|
/**
|
|
@@ -178,7 +163,7 @@ export class KaminoReserve {
|
|
|
178
163
|
* @returns the available liquidity amount of the reserve in lamports
|
|
179
164
|
*/
|
|
180
165
|
getLiquidityAvailableAmount(): Decimal {
|
|
181
|
-
return new Decimal(this.state.liquidity.
|
|
166
|
+
return new Decimal(this.state.liquidity.totalAvailableAmount.toString());
|
|
182
167
|
}
|
|
183
168
|
|
|
184
169
|
/**
|
|
@@ -748,15 +733,6 @@ export class KaminoReserve {
|
|
|
748
733
|
return this.state.collateral.mintPubkey;
|
|
749
734
|
}
|
|
750
735
|
|
|
751
|
-
/**
|
|
752
|
-
* Returns the reserve kind (FloatRateReserveKind or FixedRateReserveKind) for this reserve.
|
|
753
|
-
*
|
|
754
|
-
* @returns The reserve kind instance
|
|
755
|
-
*/
|
|
756
|
-
getKind(): ReserveKind {
|
|
757
|
-
return this.reserveKind;
|
|
758
|
-
}
|
|
759
|
-
|
|
760
736
|
calculateFees(
|
|
761
737
|
amountLamports: Decimal,
|
|
762
738
|
borrowFeeRate: Decimal,
|
|
@@ -1299,7 +1275,7 @@ export const RESERVE_CONFIG_UPDATER = new ConfigUpdater(UpdateConfigMode.fromDec
|
|
|
1299
1275
|
[UpdateConfigMode.UpdateSwitchboardFeed.kind]: config.tokenInfo.switchboardConfiguration.priceAggregator,
|
|
1300
1276
|
[UpdateConfigMode.UpdateSwitchboardTwapFeed.kind]: config.tokenInfo.switchboardConfiguration.twapAggregator,
|
|
1301
1277
|
[UpdateConfigMode.UpdateBorrowRateCurve.kind]: config.borrowRateCurve,
|
|
1302
|
-
[UpdateConfigMode.
|
|
1278
|
+
[UpdateConfigMode.DeprecatedUpdateEntireReserveConfig.kind]: [], // technically `config` would be a valid thing here, but we actually do NOT want entire config update among ixs produced for field-by-field updates
|
|
1303
1279
|
[UpdateConfigMode.UpdateDebtWithdrawalCap.kind]: new CompositeConfigItem(
|
|
1304
1280
|
config.debtWithdrawalCap.configCapacity,
|
|
1305
1281
|
config.debtWithdrawalCap.configIntervalLengthSeconds
|
|
@@ -1339,32 +1315,6 @@ export const RESERVE_CONFIG_UPDATER = new ConfigUpdater(UpdateConfigMode.fromDec
|
|
|
1339
1315
|
[UpdateConfigMode.UpdateDebtTermSeconds.kind]: config.debtTermSeconds,
|
|
1340
1316
|
}));
|
|
1341
1317
|
|
|
1342
|
-
export async function updateEntireReserveConfigIx(
|
|
1343
|
-
signer: TransactionSigner,
|
|
1344
|
-
marketAddress: Address,
|
|
1345
|
-
reserveAddress: Address,
|
|
1346
|
-
reserveConfig: ReserveConfig,
|
|
1347
|
-
programId: Address
|
|
1348
|
-
): Promise<Instruction> {
|
|
1349
|
-
const args: UpdateReserveConfigArgs = {
|
|
1350
|
-
mode: new UpdateConfigMode.UpdateEntireReserveConfig(),
|
|
1351
|
-
value: encodeUsingLayout(ReserveConfig.layout(), reserveConfig),
|
|
1352
|
-
skipConfigIntegrityValidation: false,
|
|
1353
|
-
};
|
|
1354
|
-
|
|
1355
|
-
const globalConfig = await globalConfigPda(programId);
|
|
1356
|
-
const accounts: UpdateReserveConfigAccounts = {
|
|
1357
|
-
signer,
|
|
1358
|
-
lendingMarket: marketAddress,
|
|
1359
|
-
reserve: reserveAddress,
|
|
1360
|
-
globalConfig,
|
|
1361
|
-
};
|
|
1362
|
-
|
|
1363
|
-
const ix = updateReserveConfig(args, accounts, undefined, programId);
|
|
1364
|
-
|
|
1365
|
-
return ix;
|
|
1366
|
-
}
|
|
1367
|
-
|
|
1368
1318
|
export function parseForChangesReserveConfigAndGetIxs(
|
|
1369
1319
|
marketWithAddress: MarketWithAddress,
|
|
1370
1320
|
reserve: Reserve | undefined,
|
|
@@ -1395,30 +1345,57 @@ export type ReserveWithAddress = {
|
|
|
1395
1345
|
state: Reserve;
|
|
1396
1346
|
};
|
|
1397
1347
|
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
UpdateConfigMode.
|
|
1401
|
-
UpdateConfigMode.
|
|
1402
|
-
UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator,
|
|
1403
|
-
UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator,
|
|
1404
|
-
UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator,
|
|
1405
|
-
UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator,
|
|
1348
|
+
// Updating the deposit/borrow limit will automatically unblock usage and force validation inside the smart contract
|
|
1349
|
+
const VALIDATED_DISCRIMINATORS = [
|
|
1350
|
+
UpdateConfigMode.UpdateDepositLimit.discriminator,
|
|
1351
|
+
UpdateConfigMode.UpdateBorrowLimit.discriminator,
|
|
1406
1352
|
];
|
|
1407
1353
|
|
|
1408
|
-
function shouldSkipValidation(mode: UpdateConfigModeKind, reserve: Reserve | undefined): boolean {
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
)
|
|
1354
|
+
export function shouldSkipValidation(mode: UpdateConfigModeKind, reserve: Reserve | undefined): boolean {
|
|
1355
|
+
if (VALIDATED_DISCRIMINATORS.includes(mode.discriminator)) {
|
|
1356
|
+
return false;
|
|
1357
|
+
}
|
|
1358
|
+
if (reserve == undefined) {
|
|
1359
|
+
return true;
|
|
1360
|
+
}
|
|
1361
|
+
return reserve.config.depositLimit.isZero() && reserve.config.borrowLimit.isZero();
|
|
1413
1362
|
}
|
|
1414
1363
|
|
|
1415
|
-
|
|
1364
|
+
// Lowest priority gets updated first
|
|
1365
|
+
export function priorityOf(mode: UpdateConfigModeKind): number {
|
|
1416
1366
|
switch (mode.discriminator) {
|
|
1417
1367
|
case UpdateConfigMode.UpdateScopePriceFeed.discriminator:
|
|
1418
|
-
|
|
1368
|
+
case UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator:
|
|
1419
1369
|
case UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator:
|
|
1370
|
+
case UpdateConfigMode.UpdateTokenInfoLowerHeuristic.discriminator:
|
|
1371
|
+
case UpdateConfigMode.UpdateTokenInfoUpperHeuristic.discriminator:
|
|
1372
|
+
case UpdateConfigMode.UpdateTokenInfoExpHeuristic.discriminator:
|
|
1373
|
+
case UpdateConfigMode.UpdateTokenInfoTwapDivergence.discriminator:
|
|
1374
|
+
case UpdateConfigMode.UpdateTokenInfoName.discriminator:
|
|
1375
|
+
case UpdateConfigMode.UpdateTokenInfoPriceMaxAge.discriminator:
|
|
1376
|
+
case UpdateConfigMode.UpdateTokenInfoTwapMaxAge.discriminator:
|
|
1377
|
+
case UpdateConfigMode.UpdatePythPrice.discriminator:
|
|
1378
|
+
case UpdateConfigMode.UpdateSwitchboardFeed.discriminator:
|
|
1379
|
+
case UpdateConfigMode.UpdateSwitchboardTwapFeed.discriminator:
|
|
1420
1380
|
return 0;
|
|
1381
|
+
case UpdateConfigMode.UpdateDeleveragingBonusIncreaseBpsPerDay.discriminator:
|
|
1382
|
+
case UpdateConfigMode.UpdateDeleveragingMarginCallPeriod.discriminator:
|
|
1383
|
+
case UpdateConfigMode.UpdateDeleveragingThresholdDecreaseBpsPerDay.discriminator:
|
|
1384
|
+
return 3;
|
|
1385
|
+
case UpdateConfigMode.UpdateAutodeleverageEnabled.discriminator:
|
|
1386
|
+
return 4;
|
|
1387
|
+
case UpdateConfigMode.UpdateBorrowFactor.discriminator:
|
|
1388
|
+
return 7;
|
|
1389
|
+
case UpdateConfigMode.UpdateLoanToValuePct.discriminator:
|
|
1390
|
+
return 8;
|
|
1391
|
+
case UpdateConfigMode.UpdateLiquidationThresholdPct.discriminator:
|
|
1392
|
+
return 9;
|
|
1393
|
+
// Always update last bc we cannot skip validation
|
|
1394
|
+
case UpdateConfigMode.UpdateDepositLimit.discriminator:
|
|
1395
|
+
return 63;
|
|
1396
|
+
case UpdateConfigMode.UpdateBorrowLimit.discriminator:
|
|
1397
|
+
return 63;
|
|
1421
1398
|
default:
|
|
1422
|
-
return
|
|
1399
|
+
return 10;
|
|
1423
1400
|
}
|
|
1424
1401
|
}
|