@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.
Files changed (132) hide show
  1. package/dist/@codegen/klend/accounts/LendingMarket.d.ts +150 -3
  2. package/dist/@codegen/klend/accounts/LendingMarket.d.ts.map +1 -1
  3. package/dist/@codegen/klend/accounts/LendingMarket.js +91 -2
  4. package/dist/@codegen/klend/accounts/LendingMarket.js.map +1 -1
  5. package/dist/@codegen/klend/accounts/Reserve.d.ts +6 -0
  6. package/dist/@codegen/klend/accounts/Reserve.d.ts.map +1 -1
  7. package/dist/@codegen/klend/accounts/Reserve.js +8 -1
  8. package/dist/@codegen/klend/accounts/Reserve.js.map +1 -1
  9. package/dist/@codegen/klend/accounts/WithdrawTicket.d.ts +144 -0
  10. package/dist/@codegen/klend/accounts/WithdrawTicket.d.ts.map +1 -0
  11. package/dist/@codegen/klend/accounts/WithdrawTicket.js +205 -0
  12. package/dist/@codegen/klend/accounts/WithdrawTicket.js.map +1 -0
  13. package/dist/@codegen/klend/accounts/index.d.ts +2 -0
  14. package/dist/@codegen/klend/accounts/index.d.ts.map +1 -1
  15. package/dist/@codegen/klend/accounts/index.js +3 -1
  16. package/dist/@codegen/klend/accounts/index.js.map +1 -1
  17. package/dist/@codegen/klend/errors/custom.d.ts +81 -1
  18. package/dist/@codegen/klend/errors/custom.d.ts.map +1 -1
  19. package/dist/@codegen/klend/errors/custom.js +142 -1
  20. package/dist/@codegen/klend/errors/custom.js.map +1 -1
  21. package/dist/@codegen/klend/instructions/enqueueToWithdraw.d.ts +62 -0
  22. package/dist/@codegen/klend/instructions/enqueueToWithdraw.d.ts.map +1 -0
  23. package/dist/@codegen/klend/instructions/enqueueToWithdraw.js +79 -0
  24. package/dist/@codegen/klend/instructions/enqueueToWithdraw.js.map +1 -0
  25. package/dist/@codegen/klend/instructions/index.d.ts +6 -0
  26. package/dist/@codegen/klend/instructions/index.d.ts.map +1 -1
  27. package/dist/@codegen/klend/instructions/index.js +8 -2
  28. package/dist/@codegen/klend/instructions/index.js.map +1 -1
  29. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.d.ts +54 -0
  30. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.d.ts.map +1 -0
  31. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.js +66 -0
  32. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.js.map +1 -0
  33. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.d.ts +66 -0
  34. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.d.ts.map +1 -0
  35. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.js +41 -0
  36. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.js.map +1 -0
  37. package/dist/@codegen/klend/types/BorrowOrder.d.ts +3 -3
  38. package/dist/@codegen/klend/types/BorrowOrder.js +1 -1
  39. package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.d.ts +145 -0
  40. package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.d.ts.map +1 -0
  41. package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.js +144 -0
  42. package/dist/@codegen/klend/types/FixedTermBorrowRolloverConfig.js.map +1 -0
  43. package/dist/@codegen/klend/types/ObligationLiquidity.d.ts +29 -0
  44. package/dist/@codegen/klend/types/ObligationLiquidity.d.ts.map +1 -1
  45. package/dist/@codegen/klend/types/ObligationLiquidity.js +15 -1
  46. package/dist/@codegen/klend/types/ObligationLiquidity.js.map +1 -1
  47. package/dist/@codegen/klend/types/ProgressCallbackType.d.ts +32 -0
  48. package/dist/@codegen/klend/types/ProgressCallbackType.d.ts.map +1 -0
  49. package/dist/@codegen/klend/types/ProgressCallbackType.js +108 -0
  50. package/dist/@codegen/klend/types/ProgressCallbackType.js.map +1 -0
  51. package/dist/@codegen/klend/types/ReserveLiquidity.d.ts +26 -8
  52. package/dist/@codegen/klend/types/ReserveLiquidity.d.ts.map +1 -1
  53. package/dist/@codegen/klend/types/ReserveLiquidity.js +14 -8
  54. package/dist/@codegen/klend/types/ReserveLiquidity.js.map +1 -1
  55. package/dist/@codegen/klend/types/UpdateConfigMode.d.ts +7 -7
  56. package/dist/@codegen/klend/types/UpdateConfigMode.d.ts.map +1 -1
  57. package/dist/@codegen/klend/types/UpdateConfigMode.js +12 -12
  58. package/dist/@codegen/klend/types/UpdateConfigMode.js.map +1 -1
  59. package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts +78 -0
  60. package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts.map +1 -1
  61. package/dist/@codegen/klend/types/UpdateLendingMarketMode.js +145 -1
  62. package/dist/@codegen/klend/types/UpdateLendingMarketMode.js.map +1 -1
  63. package/dist/@codegen/klend/types/WithdrawQueue.d.ts +64 -0
  64. package/dist/@codegen/klend/types/WithdrawQueue.d.ts.map +1 -0
  65. package/dist/@codegen/klend/types/WithdrawQueue.js +104 -0
  66. package/dist/@codegen/klend/types/WithdrawQueue.js.map +1 -0
  67. package/dist/@codegen/klend/types/index.d.ts +23 -4
  68. package/dist/@codegen/klend/types/index.d.ts.map +1 -1
  69. package/dist/@codegen/klend/types/index.js +7 -1
  70. package/dist/@codegen/klend/types/index.js.map +1 -1
  71. package/dist/classes/action.d.ts +11 -0
  72. package/dist/classes/action.d.ts.map +1 -1
  73. package/dist/classes/action.js +66 -0
  74. package/dist/classes/action.js.map +1 -1
  75. package/dist/classes/actionTypes.d.ts +29 -0
  76. package/dist/classes/actionTypes.d.ts.map +1 -1
  77. package/dist/classes/manager.d.ts +1 -1
  78. package/dist/classes/manager.d.ts.map +1 -1
  79. package/dist/classes/manager.js +9 -8
  80. package/dist/classes/manager.js.map +1 -1
  81. package/dist/classes/market.d.ts +7 -102
  82. package/dist/classes/market.d.ts.map +1 -1
  83. package/dist/classes/market.js +8 -153
  84. package/dist/classes/market.js.map +1 -1
  85. package/dist/classes/reserve.d.ts +3 -10
  86. package/dist/classes/reserve.d.ts.map +1 -1
  87. package/dist/classes/reserve.js +45 -51
  88. package/dist/classes/reserve.js.map +1 -1
  89. package/dist/idl/klend.json +860 -32
  90. package/dist/manager/client_kamino_manager.js +2 -3
  91. package/dist/manager/client_kamino_manager.js.map +1 -1
  92. package/dist/utils/index.d.ts +0 -1
  93. package/dist/utils/index.d.ts.map +1 -1
  94. package/dist/utils/index.js +0 -1
  95. package/dist/utils/index.js.map +1 -1
  96. package/dist/utils/seeds.d.ts +24 -0
  97. package/dist/utils/seeds.d.ts.map +1 -1
  98. package/dist/utils/seeds.js +41 -1
  99. package/dist/utils/seeds.js.map +1 -1
  100. package/package.json +1 -1
  101. package/src/@codegen/klend/accounts/LendingMarket.ts +205 -4
  102. package/src/@codegen/klend/accounts/Reserve.ts +12 -1
  103. package/src/@codegen/klend/accounts/WithdrawTicket.ts +280 -0
  104. package/src/@codegen/klend/accounts/index.ts +2 -0
  105. package/src/@codegen/klend/errors/custom.ts +161 -0
  106. package/src/@codegen/klend/instructions/enqueueToWithdraw.ts +120 -0
  107. package/src/@codegen/klend/instructions/index.ts +12 -0
  108. package/src/@codegen/klend/instructions/recoverInvalidTicketCollateral.ts +103 -0
  109. package/src/@codegen/klend/instructions/withdrawQueuedLiquidity.ts +118 -0
  110. package/src/@codegen/klend/types/BorrowOrder.ts +3 -3
  111. package/src/@codegen/klend/types/FixedTermBorrowRolloverConfig.ts +199 -0
  112. package/src/@codegen/klend/types/ObligationLiquidity.ts +37 -1
  113. package/src/@codegen/klend/types/ProgressCallbackType.ts +91 -0
  114. package/src/@codegen/klend/types/ReserveLiquidity.ts +30 -12
  115. package/src/@codegen/klend/types/UpdateConfigMode.ts +13 -13
  116. package/src/@codegen/klend/types/UpdateLendingMarketMode.ts +180 -0
  117. package/src/@codegen/klend/types/WithdrawQueue.ts +117 -0
  118. package/src/@codegen/klend/types/index.ts +42 -2
  119. package/src/classes/action.ts +115 -1
  120. package/src/classes/actionTypes.ts +31 -0
  121. package/src/classes/manager.ts +19 -27
  122. package/src/classes/market.ts +8 -183
  123. package/src/classes/reserve.ts +45 -68
  124. package/src/idl/klend.json +860 -32
  125. package/src/manager/client_kamino_manager.ts +2 -4
  126. package/src/utils/index.ts +0 -1
  127. package/src/utils/seeds.ts +49 -0
  128. package/dist/utils/ReserveKind.d.ts +0 -57
  129. package/dist/utils/ReserveKind.d.ts.map +0 -1
  130. package/dist/utils/ReserveKind.js +0 -76
  131. package/dist/utils/ReserveKind.js.map +0 -1
  132. package/src/utils/ReserveKind.ts +0 -94
@@ -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 float rate reserve for the given mint address.
638
- * Float rate reserves are reserves without a fixed term (debtTermSeconds = 0).
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
- getFloatRateReserveByMint(mint: Address): KaminoReserve | undefined {
644
- return this.getReserveByMintAndKind(mint, new FloatRateReserveKind());
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>
@@ -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.availableAmount.toString());
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.UpdateEntireReserveConfig.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
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
- const NON_VALIDATED_DISCRIMINATORS = [
1399
- UpdateConfigMode.UpdateScopePriceFeed.discriminator,
1400
- UpdateConfigMode.UpdateTokenInfoScopeChain.discriminator,
1401
- UpdateConfigMode.UpdateTokenInfoScopeTwap.discriminator,
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
- return (
1410
- NON_VALIDATED_DISCRIMINATORS.includes(mode.discriminator) &&
1411
- !reserve?.liquidity.availableAmount.gten(MIN_INITIAL_DEPOSIT)
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
- function priorityOf(mode: UpdateConfigModeKind): number {
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
- return 0;
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 1;
1399
+ return 10;
1423
1400
  }
1424
1401
  }