1use serde::{Deserialize, Serialize};
2use solana_pubkey::Pubkey;
3
4pub const KAMINO_FRACTION_SCALE: u128 = 1 << 60;
8
9#[derive(Serialize, Deserialize, Clone, Debug)]
14pub struct KaminoReserve {
15 pub lending_market: Pubkey,
16 pub liquidity: KaminoReserveLiquidity,
17 pub collateral: KaminoReserveCollateral,
18 pub config: KaminoReserveConfig,
19 pub last_update: KaminoLastUpdate,
20}
21
22#[derive(Serialize, Deserialize, Clone, Debug)]
24pub struct KaminoReserveLiquidity {
25 pub mint_pubkey: Pubkey,
26 pub supply_vault: Pubkey,
27 pub fee_vault: Pubkey,
28 pub total_available_amount: u64,
29 pub borrowed_amount_sf: u128,
30 pub cumulative_borrow_rate_bsf: KaminoBigFractionBytes,
31 #[serde(default)]
32 pub accumulated_protocol_fees_sf: u128,
33 #[serde(default)]
34 pub accumulated_referrer_fees_sf: u128,
35 #[serde(default)]
36 pub pending_referrer_fees_sf: u128,
37 pub mint_decimals: u64,
38 pub market_price_sf: u128,
39 #[serde(default)]
41 pub token_program: Pubkey,
42}
43
44#[derive(Serialize, Deserialize, Clone, Debug)]
46pub struct KaminoReserveCollateral {
47 pub mint_pubkey: Pubkey,
48 pub supply_vault: Pubkey,
49 pub mint_total_supply: u64,
50}
51
52#[derive(Serialize, Deserialize, Clone, Debug)]
54pub struct KaminoReserveConfig {
55 pub loan_to_value_pct: u8,
56 pub liquidation_threshold_pct: u8,
57 pub protocol_take_rate_pct: u8,
58 pub protocol_liquidation_fee_pct: u8,
59 pub borrow_factor_pct: u64,
60 pub deposit_limit: u64,
61 pub borrow_limit: u64,
62 pub fees: KaminoReserveFees,
63 pub borrow_rate_curve: KaminoBorrowRateCurve,
64 pub deposit_withdrawal_cap: KaminoWithdrawalCaps,
65 pub debt_withdrawal_cap: KaminoWithdrawalCaps,
66 pub elevation_groups: [u8; 20],
67}
68
69#[derive(Serialize, Deserialize, Clone, Debug)]
73pub struct KaminoObligation {
74 pub lending_market: Pubkey,
75 #[serde(default)]
76 pub owner: Pubkey,
77 pub deposits: Vec<KaminoObligationCollateral>,
78 pub borrows: Vec<KaminoObligationLiquidity>,
79 pub deposited_value_sf: u128,
80 pub borrowed_assets_market_value_sf: u128,
81 pub allowed_borrow_value_sf: u128,
82 pub unhealthy_borrow_value_sf: u128,
83 pub has_debt: u8,
84 pub elevation_group: u8,
85 pub last_update: KaminoLastUpdate,
86}
87
88#[derive(Serialize, Deserialize, Clone, Debug, Default)]
90pub struct KaminoObligationCollateral {
91 pub deposit_reserve: Pubkey,
92 pub deposited_amount: u64,
93 pub market_value_sf: u128,
94}
95
96#[derive(Serialize, Deserialize, Clone, Debug, Default)]
98pub struct KaminoObligationLiquidity {
99 pub borrow_reserve: Pubkey,
100 pub cumulative_borrow_rate_bsf: KaminoBigFractionBytes,
101 pub borrowed_amount_sf: u128,
102 pub market_value_sf: u128,
103 pub borrow_factor_adjusted_market_value_sf: u128,
104}
105
106#[derive(Serialize, Deserialize, Clone, Debug)]
108pub struct KaminoWithdrawTicket {
109 pub sequence_number: u64,
110 pub owner: Pubkey,
111 pub reserve: Pubkey,
112 pub user_destination_liquidity_ta: Pubkey,
113 pub queued_collateral_amount: u64,
114 pub created_at_timestamp: u64,
115 pub invalid: u8,
116}
117
118#[derive(Serialize, Deserialize, Clone, Debug, Default)]
120pub struct KaminoElevationGroup {
121 pub max_liquidation_bonus_bps: u16,
122 pub id: u8,
123 pub ltv_pct: u8,
124 pub liquidation_threshold_pct: u8,
125 pub allow_new_loans: u8,
126 pub max_reserves_as_collateral: u8,
127 pub debt_reserve: Pubkey,
128}
129
130#[derive(Serialize, Deserialize, Clone, Debug, Default)]
132pub struct KaminoLastUpdate {
133 pub slot: u64,
134 pub stale: u8,
135}
136
137#[derive(Serialize, Deserialize, Clone, Debug, Default)]
139pub struct KaminoBigFractionBytes {
140 pub value: [u64; 4],
141}
142
143#[derive(Serialize, Deserialize, Clone, Debug, Default)]
145pub struct KaminoReserveFees {
146 #[serde(default)]
147 pub origination_fee_sf: u64,
148 #[serde(default)]
149 pub flash_loan_fee_sf: u64,
150}
151
152#[derive(Serialize, Deserialize, Clone, Debug, Default)]
154pub struct KaminoBorrowRateCurve {
155 pub points: [KaminoCurvePoint; 11],
156}
157
158#[derive(Serialize, Deserialize, Clone, Debug, Default, Copy)]
160pub struct KaminoCurvePoint {
161 pub utilization_rate_bps: u32,
162 pub borrow_rate_bps: u32,
163}
164
165#[derive(Serialize, Deserialize, Clone, Debug, Default)]
167pub struct KaminoWithdrawalCaps {
168 pub config_capacity: i64,
169 pub current_total: i64,
170 pub last_interval_start_timestamp: u64,
171 pub config_interval_length_seconds: u64,
172}