@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
@@ -218,9 +218,8 @@ async function main() {
218
218
  `--mode <string>`,
219
219
  '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'
220
220
  )
221
- .option('--update-entire-config', 'If set, it will update entire reserve config in 1 instruction')
222
221
  .option(`--staging`, 'If true, will use the staging programs')
223
- .action(async ({ reserve, reserveConfigPath, mode, updateEntireConfig, staging }) => {
222
+ .action(async ({ reserve, reserveConfigPath, mode, staging }) => {
224
223
  const env = await initEnv(undefined, staging);
225
224
  const reserveAddress = address(reserve);
226
225
  const reserveState = await Reserve.fetch(env.c.rpc, reserveAddress, env.klendProgramId);
@@ -261,8 +260,7 @@ async function main() {
261
260
  marketWithAddress,
262
261
  reserveAddress,
263
262
  reserveConfig,
264
- reserveState,
265
- updateEntireConfig
263
+ reserveState
266
264
  );
267
265
 
268
266
  await processTx(
@@ -5,7 +5,6 @@ export * from './constants';
5
5
  export * from './idl';
6
6
  export * from './instruction';
7
7
  export * from './ObligationType';
8
- export * from './ReserveKind';
9
8
  export * from './seeds';
10
9
  export * from './slots';
11
10
  export * from './userMetadata';
@@ -44,6 +44,14 @@ export const BASE_SEED_SHORT_URL = 'short_url';
44
44
  * Short url seed
45
45
  */
46
46
  export const BASE_SEED_GLOBAL_CONFIG_STATE = 'global_config';
47
+ /**
48
+ * Withdraw ticket seed
49
+ */
50
+ export const WITHDRAW_TICKET_SEED = 'withdraw_ticket';
51
+ /**
52
+ * Owner queued collateral vault seed
53
+ */
54
+ export const OWNER_QUEUED_COLLATERAL_VAULT_SEED = 'owner_queued_collateral_vault';
47
55
  /**
48
56
  * Farm user state seed
49
57
  */
@@ -286,3 +294,44 @@ export async function getKVaultSharesMetadataPda(mint: Address): Promise<Program
286
294
  programAddress: METADATA_PROGRAM_ID,
287
295
  });
288
296
  }
297
+
298
+ /**
299
+ * Returns the PDA for a withdraw ticket
300
+ * @param reserve
301
+ * @param sequenceNumber
302
+ * @param programId
303
+ * @returns pda
304
+ */
305
+ export async function withdrawTicketPda(
306
+ reserve: Address,
307
+ sequenceNumber: bigint,
308
+ programId: Address = PROGRAM_ID
309
+ ): Promise<Address> {
310
+ const sequenceNumberBuffer = Buffer.alloc(8);
311
+ sequenceNumberBuffer.writeBigUInt64LE(sequenceNumber);
312
+
313
+ const [address] = await getProgramDerivedAddress({
314
+ seeds: [Buffer.from(WITHDRAW_TICKET_SEED), addressEncoder.encode(reserve), sequenceNumberBuffer],
315
+ programAddress: programId,
316
+ });
317
+ return address;
318
+ }
319
+
320
+ /**
321
+ * Returns the PDA for the owner's queued collateral vault
322
+ * @param reserve
323
+ * @param owner
324
+ * @param programId
325
+ * @returns pda
326
+ */
327
+ export async function ownerQueuedCollateralVaultPda(
328
+ reserve: Address,
329
+ owner: Address,
330
+ programId: Address = PROGRAM_ID
331
+ ): Promise<Address> {
332
+ const [address] = await getProgramDerivedAddress({
333
+ seeds: [Buffer.from(OWNER_QUEUED_COLLATERAL_VAULT_SEED), addressEncoder.encode(reserve), addressEncoder.encode(owner)],
334
+ programAddress: programId,
335
+ });
336
+ return address;
337
+ }
@@ -1,57 +0,0 @@
1
- import BN from 'bn.js';
2
- import { KaminoReserve } from '../classes/reserve';
3
- /**
4
- * Base class for reserve kind identification.
5
- * Since a market can have multiple reserves for the same mint (with different terms),
6
- * this kind specifies which reserve to select.
7
- */
8
- export declare abstract class ReserveKind {
9
- /**
10
- * Checks if a reserve matches this reserve kind's criteria
11
- */
12
- abstract matches(reserve: KaminoReserve): boolean;
13
- /**
14
- * Returns a human-readable string representation
15
- */
16
- abstract toString(): string;
17
- /**
18
- * Type check: returns true if this is an open-term reserve
19
- */
20
- abstract isFloatRate(): boolean;
21
- /**
22
- * Type check: returns true if this is a fixed-term reserve
23
- */
24
- abstract isFixedRate(): boolean;
25
- }
26
- /**
27
- * Represents an open-term reserve with no fixed maturity.
28
- */
29
- export declare class FloatRateReserveKind extends ReserveKind {
30
- /**
31
- * Checks if a reserve matches this open-term reserve kind (debtTermSeconds == 0)
32
- */
33
- matches(reserve: KaminoReserve): boolean;
34
- toString(): string;
35
- isFloatRate(): boolean;
36
- isFixedRate(): boolean;
37
- }
38
- /**
39
- * Represents a fixed-term reserve with specific loan parameters.
40
- */
41
- export declare class FixedRateReserveKind extends ReserveKind {
42
- readonly debtTermSeconds: BN;
43
- readonly borrowRateBps: number;
44
- /**
45
- * @param debtTermSeconds The debt term in seconds (e.g., new BN(30 * 24 * 60 * 60) for 30 days)
46
- * @param borrowRateBps The maximum borrow rate in basis points (e.g., 500 for 5%)
47
- */
48
- constructor(debtTermSeconds: BN, borrowRateBps: number);
49
- /**
50
- * Checks if a reserve matches this fixed-term reserve kind
51
- */
52
- matches(reserve: KaminoReserve): boolean;
53
- toString(): string;
54
- isFloatRate(): boolean;
55
- isFixedRate(): boolean;
56
- }
57
- //# sourceMappingURL=ReserveKind.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReserveKind.d.ts","sourceRoot":"","sources":["../../src/utils/ReserveKind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;GAIG;AACH,8BAAsB,WAAW;IAC/B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAEjD;;OAEG;IACH,QAAQ,CAAC,QAAQ,IAAI,MAAM;IAE3B;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAE/B;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;CAChC;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,OAAO;IAItB,WAAW,IAAI,OAAO;CAGvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;aAKvB,eAAe,EAAE,EAAE;aAAkB,aAAa,EAAE,MAAM;IAJtF;;;OAGG;gBACyB,eAAe,EAAE,EAAE,EAAkB,aAAa,EAAE,MAAM;IAItF;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAaxC,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,OAAO;IAItB,WAAW,IAAI,OAAO;CAGvB"}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FixedRateReserveKind = exports.FloatRateReserveKind = exports.ReserveKind = void 0;
7
- const bn_js_1 = __importDefault(require("bn.js"));
8
- /**
9
- * Base class for reserve kind identification.
10
- * Since a market can have multiple reserves for the same mint (with different terms),
11
- * this kind specifies which reserve to select.
12
- */
13
- class ReserveKind {
14
- }
15
- exports.ReserveKind = ReserveKind;
16
- /**
17
- * Represents an open-term reserve with no fixed maturity.
18
- */
19
- class FloatRateReserveKind extends ReserveKind {
20
- /**
21
- * Checks if a reserve matches this open-term reserve kind (debtTermSeconds == 0)
22
- */
23
- matches(reserve) {
24
- return reserve.state.config.debtTermSeconds.eq(new bn_js_1.default(0));
25
- }
26
- toString() {
27
- return 'FloatRate';
28
- }
29
- isFloatRate() {
30
- return true;
31
- }
32
- isFixedRate() {
33
- return false;
34
- }
35
- }
36
- exports.FloatRateReserveKind = FloatRateReserveKind;
37
- /**
38
- * Represents a fixed-term reserve with specific loan parameters.
39
- */
40
- class FixedRateReserveKind extends ReserveKind {
41
- debtTermSeconds;
42
- borrowRateBps;
43
- /**
44
- * @param debtTermSeconds The debt term in seconds (e.g., new BN(30 * 24 * 60 * 60) for 30 days)
45
- * @param borrowRateBps The maximum borrow rate in basis points (e.g., 500 for 5%)
46
- */
47
- constructor(debtTermSeconds, borrowRateBps) {
48
- super();
49
- this.debtTermSeconds = debtTermSeconds;
50
- this.borrowRateBps = borrowRateBps;
51
- }
52
- /**
53
- * Checks if a reserve matches this fixed-term reserve kind
54
- */
55
- matches(reserve) {
56
- // Check debt term matches
57
- if (!reserve.state.config.debtTermSeconds.eq(this.debtTermSeconds)) {
58
- return false;
59
- }
60
- // For fixed-term reserves, all points on the borrow rate curve should have the same rate
61
- const curvePoints = reserve.state.config.borrowRateCurve.points;
62
- // Check if all points have the expected borrow rate
63
- return curvePoints.every((point) => point.borrowRateBps === this.borrowRateBps);
64
- }
65
- toString() {
66
- return `FixedRate(term=${this.debtTermSeconds.toString()}s, rate=${this.borrowRateBps}bps)`;
67
- }
68
- isFloatRate() {
69
- return false;
70
- }
71
- isFixedRate() {
72
- return true;
73
- }
74
- }
75
- exports.FixedRateReserveKind = FixedRateReserveKind;
76
- //# sourceMappingURL=ReserveKind.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReserveKind.js","sourceRoot":"","sources":["../../src/utils/ReserveKind.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAuB;AAGvB;;;;GAIG;AACH,MAAsB,WAAW;CAoBhC;AApBD,kCAoBC;AAED;;GAEG;AACH,MAAa,oBAAqB,SAAQ,WAAW;IACnD;;OAEG;IACH,OAAO,CAAC,OAAsB;QAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ;QACN,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAnBD,oDAmBC;AAED;;GAEG;AACH,MAAa,oBAAqB,SAAQ,WAAW;IAKvB;IAAqC;IAJjE;;;OAGG;IACH,YAA4B,eAAmB,EAAkB,aAAqB;QACpF,KAAK,EAAE,CAAC;QADkB,oBAAe,GAAf,eAAe,CAAI;QAAkB,kBAAa,GAAb,aAAa,CAAQ;IAEtF,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAsB;QAC5B,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yFAAyF;QACzF,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;QAEhE,oDAAoD;QACpD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC;IAED,QAAQ;QACN,OAAO,kBAAkB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,aAAa,MAAM,CAAC;IAC9F,CAAC;IAED,WAAW;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AApCD,oDAoCC"}
@@ -1,94 +0,0 @@
1
- import BN from 'bn.js';
2
- import { KaminoReserve } from '../classes/reserve';
3
-
4
- /**
5
- * Base class for reserve kind identification.
6
- * Since a market can have multiple reserves for the same mint (with different terms),
7
- * this kind specifies which reserve to select.
8
- */
9
- export abstract class ReserveKind {
10
- /**
11
- * Checks if a reserve matches this reserve kind's criteria
12
- */
13
- abstract matches(reserve: KaminoReserve): boolean;
14
-
15
- /**
16
- * Returns a human-readable string representation
17
- */
18
- abstract toString(): string;
19
-
20
- /**
21
- * Type check: returns true if this is an open-term reserve
22
- */
23
- abstract isFloatRate(): boolean;
24
-
25
- /**
26
- * Type check: returns true if this is a fixed-term reserve
27
- */
28
- abstract isFixedRate(): boolean;
29
- }
30
-
31
- /**
32
- * Represents an open-term reserve with no fixed maturity.
33
- */
34
- export class FloatRateReserveKind extends ReserveKind {
35
- /**
36
- * Checks if a reserve matches this open-term reserve kind (debtTermSeconds == 0)
37
- */
38
- matches(reserve: KaminoReserve): boolean {
39
- return reserve.state.config.debtTermSeconds.eq(new BN(0));
40
- }
41
-
42
- toString(): string {
43
- return 'FloatRate';
44
- }
45
-
46
- isFloatRate(): boolean {
47
- return true;
48
- }
49
-
50
- isFixedRate(): boolean {
51
- return false;
52
- }
53
- }
54
-
55
- /**
56
- * Represents a fixed-term reserve with specific loan parameters.
57
- */
58
- export class FixedRateReserveKind extends ReserveKind {
59
- /**
60
- * @param debtTermSeconds The debt term in seconds (e.g., new BN(30 * 24 * 60 * 60) for 30 days)
61
- * @param borrowRateBps The maximum borrow rate in basis points (e.g., 500 for 5%)
62
- */
63
- constructor(public readonly debtTermSeconds: BN, public readonly borrowRateBps: number) {
64
- super();
65
- }
66
-
67
- /**
68
- * Checks if a reserve matches this fixed-term reserve kind
69
- */
70
- matches(reserve: KaminoReserve): boolean {
71
- // Check debt term matches
72
- if (!reserve.state.config.debtTermSeconds.eq(this.debtTermSeconds)) {
73
- return false;
74
- }
75
-
76
- // For fixed-term reserves, all points on the borrow rate curve should have the same rate
77
- const curvePoints = reserve.state.config.borrowRateCurve.points;
78
-
79
- // Check if all points have the expected borrow rate
80
- return curvePoints.every((point) => point.borrowRateBps === this.borrowRateBps);
81
- }
82
-
83
- toString(): string {
84
- return `FixedRate(term=${this.debtTermSeconds.toString()}s, rate=${this.borrowRateBps}bps)`;
85
- }
86
-
87
- isFloatRate(): boolean {
88
- return false;
89
- }
90
-
91
- isFixedRate(): boolean {
92
- return true;
93
- }
94
- }