Skip to main content

klend_interface/
types.rs

1use borsh::{BorshDeserialize, BorshSerialize};
2use solana_pubkey::Pubkey;
3
4use crate::KVAULT_PROGRAM_ID;
5
6#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
7pub struct InitObligationArgs {
8    pub tag: u8,
9    pub id: u8,
10}
11
12#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
13pub struct BorrowOrderConfigArgs {
14    pub remaining_debt_amount: u64,
15    pub max_borrow_rate_bps: u32,
16    pub min_debt_term_seconds: u64,
17    pub fillable_until_timestamp: u64,
18}
19
20#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
21pub struct ObligationOrder {
22    pub condition_threshold_sf: u128,
23    pub opportunity_parameter_sf: u128,
24    pub min_execution_bonus_bps: u16,
25    pub max_execution_bonus_bps: u16,
26    pub condition_type: u8,
27    pub opportunity_type: u8,
28    pub padding1: [u8; 10],
29    pub padding2: [u128; 5],
30}
31
32#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Default, PartialEq, Eq)]
33#[repr(u8)]
34pub enum ProgressCallbackType {
35    #[default]
36    None = 0,
37    KlendQueueAccountingHandlerOnKvault = 1,
38}
39
40impl ProgressCallbackType {
41    /// The target program to be called-back, matching the on-chain validation.
42    pub fn program_address(&self) -> Pubkey {
43        match self {
44            ProgressCallbackType::None => Pubkey::default(),
45            ProgressCallbackType::KlendQueueAccountingHandlerOnKvault => KVAULT_PROGRAM_ID,
46        }
47    }
48}
49
50/// Optional customizations applied after cloning a reserve config.
51#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
52pub struct ReserveConfigCustomizationArgs {
53    /// Gate flag for `fixed_borrow_rate_bps` (0 = don't override).
54    pub override_fixed_rate_bps: u8,
55    /// Fixed borrow rate to apply (only effective when `override_fixed_rate_bps != 0`).
56    pub fixed_borrow_rate_bps: u32,
57    /// Gate flag for `debt_term_seconds` (0 = don't override).
58    pub override_debt_term_seconds: u8,
59    /// Debt term override value (only effective when `override_debt_term_seconds != 0`).
60    pub debt_term_seconds: u64,
61    /// Whether to clear elevation groups from the cloned config.
62    pub clear_elevation_groups: u8,
63}
64
65/// Mode for the `update_obligation_config` instruction.
66#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, PartialEq, Eq)]
67#[repr(u8)]
68pub enum UpdateObligationConfigMode {
69    FixedTermRolloverEnabled = 0,
70    FixedTermRolloverMaxBorrowRateBps = 1,
71    FixedTermRolloverMinDebtTermSeconds = 2,
72    FixedTermRolloverOpenTermAllowed = 3,
73    MigrationToFixedEnabled = 4,
74}