1use serde::{Deserialize, Serialize};
2use solana_pubkey::Pubkey;
3
4pub const KAMINO_FRACTION_SCALE: u128 = 1 << 60;
8
9#[derive(Serialize, Deserialize, Clone, Debug, Default)]
15pub struct KaminoReserve {
16 pub version: u64,
17 pub last_update: KaminoLastUpdate,
18 pub lending_market: Pubkey,
19 pub farm_collateral: Pubkey,
20 pub farm_debt: Pubkey,
21 pub liquidity: KaminoReserveLiquidity,
22 pub collateral: KaminoReserveCollateral,
23 pub config: KaminoReserveConfig,
24 pub borrowed_amount_outside_elevation_group: u64,
25 pub borrowed_amounts_against_this_reserve_in_elevation_groups: [u64; 32],
26 pub withdraw_queue: KaminoWithdrawQueue,
27}
28
29#[derive(Serialize, Deserialize, Clone, Debug, Default)]
30pub struct KaminoReserveLiquidity {
31 pub mint_pubkey: Pubkey,
32 pub supply_vault: Pubkey,
33 pub fee_vault: Pubkey,
34 pub total_available_amount: u64,
35 pub borrowed_amount_sf: u128,
36 pub market_price_sf: u128,
37 pub market_price_last_updated_ts: u64,
38 pub mint_decimals: u64,
39 pub deposit_limit_crossed_timestamp: u64,
40 pub borrow_limit_crossed_timestamp: u64,
41 pub cumulative_borrow_rate_bsf: KaminoBigFractionBytes,
42 pub accumulated_protocol_fees_sf: u128,
43 pub accumulated_referrer_fees_sf: u128,
44 pub pending_referrer_fees_sf: u128,
45 pub absolute_referral_rate_sf: u128,
46 pub token_program: Pubkey,
47}
48
49#[derive(Serialize, Deserialize, Clone, Debug, Default)]
50pub struct KaminoReserveCollateral {
51 pub mint_pubkey: Pubkey,
52 pub mint_total_supply: u64,
53 pub supply_vault: Pubkey,
54}
55
56#[derive(Serialize, Deserialize, Clone, Debug, Default)]
57pub struct KaminoReserveConfig {
58 pub status: u8,
59 pub host_fixed_interest_rate_bps: u16,
60 pub min_deleveraging_bonus_bps: u16,
61 pub block_ctoken_usage: u8,
62 pub protocol_order_execution_fee_pct: u8,
63 pub protocol_take_rate_pct: u8,
64 pub protocol_liquidation_fee_pct: u8,
65 pub loan_to_value_pct: u8,
66 pub liquidation_threshold_pct: u8,
67 pub min_liquidation_bonus_bps: u16,
68 pub max_liquidation_bonus_bps: u16,
69 pub bad_debt_liquidation_bonus_bps: u16,
70 pub deleveraging_margin_call_period_secs: u64,
71 pub deleveraging_threshold_decrease_bps_per_day: u64,
72 pub fees: KaminoReserveFees,
73 pub borrow_rate_curve: KaminoBorrowRateCurve,
74 pub borrow_factor_pct: u64,
75 pub deposit_limit: u64,
76 pub borrow_limit: u64,
77 pub token_info: KaminoTokenInfo,
78 pub deposit_withdrawal_cap: KaminoWithdrawalCaps,
79 pub debt_withdrawal_cap: KaminoWithdrawalCaps,
80 pub elevation_groups: [u8; 20],
81 pub disable_usage_as_coll_outside_emode: u8,
82 pub utilization_limit_block_borrowing_above_pct: u8,
83 pub autodeleverage_enabled: u8,
84 pub borrow_limit_outside_elevation_group: u64,
85 pub borrow_limit_against_this_collateral_in_elevation_group: [u64; 32],
86 pub deleveraging_bonus_increase_bps_per_day: u64,
87 pub debt_maturity_timestamp: u64,
88 pub debt_term_seconds: u64,
89}
90
91#[derive(Serialize, Deserialize, Clone, Debug, Default)]
92pub struct KaminoReserveFees {
93 pub origination_fee_sf: u64,
94 pub flash_loan_fee_sf: u64,
95}
96
97#[derive(Serialize, Deserialize, Clone, Debug, Default)]
98pub struct KaminoBorrowRateCurve {
99 pub points: [KaminoCurvePoint; 11],
100}
101
102#[derive(Serialize, Deserialize, Clone, Debug, Default, Copy)]
103pub struct KaminoCurvePoint {
104 pub utilization_rate_bps: u32,
105 pub borrow_rate_bps: u32,
106}
107
108#[derive(Serialize, Deserialize, Clone, Debug, Default)]
109pub struct KaminoTokenInfo {
110 pub name: String,
111 pub heuristic: KaminoPriceHeuristic,
112 pub max_twap_divergence_bps: u64,
113 pub max_age_price_seconds: u64,
114 pub max_age_twap_seconds: u64,
115 pub scope_configuration: KaminoScopeConfiguration,
116 pub switchboard_configuration: KaminoSwitchboardConfiguration,
117 pub pyth_configuration: KaminoPythConfiguration,
118 pub block_price_usage: u8,
119}
120
121#[derive(Serialize, Deserialize, Clone, Debug, Default)]
122pub struct KaminoPriceHeuristic {
123 pub lower: u64,
124 pub upper: u64,
125 pub exp: u64,
126}
127
128#[derive(Serialize, Deserialize, Clone, Debug, Default)]
129pub struct KaminoScopeConfiguration {
130 pub price_feed: Pubkey,
131 pub price_chain: [u16; 4],
132 pub twap_chain: [u16; 4],
133}
134
135#[derive(Serialize, Deserialize, Clone, Debug, Default)]
136pub struct KaminoSwitchboardConfiguration {
137 pub price_aggregator: Pubkey,
138 pub twap_aggregator: Pubkey,
139}
140
141#[derive(Serialize, Deserialize, Clone, Debug, Default)]
142pub struct KaminoPythConfiguration {
143 pub price: Pubkey,
144}
145
146#[derive(Serialize, Deserialize, Clone, Debug, Default)]
147pub struct KaminoWithdrawalCaps {
148 pub config_capacity: i64,
149 pub current_total: i64,
150 pub last_interval_start_timestamp: u64,
151 pub config_interval_length_seconds: u64,
152}
153
154#[derive(Serialize, Deserialize, Clone, Debug, Default)]
155pub struct KaminoWithdrawQueue {
156 pub queued_collateral_amount: u64,
157 pub next_issued_ticket_sequence_number: u64,
158 pub next_withdrawable_ticket_sequence_number: u64,
159}
160
161#[derive(Serialize, Deserialize, Clone, Debug, Default)]
162pub struct KaminoLastUpdate {
163 pub slot: u64,
164 pub stale: u8,
165 pub price_status: u8,
166}
167
168#[derive(Serialize, Deserialize, Clone, Debug, Default)]
170pub struct KaminoBigFractionBytes {
171 pub value: [u64; 4],
172}
173
174#[derive(Serialize, Deserialize, Clone, Debug, Default)]
180pub struct KaminoObligation {
181 pub tag: u64,
182 pub last_update: KaminoLastUpdate,
183 pub lending_market: Pubkey,
184 pub owner: Pubkey,
185 pub deposits: [KaminoObligationCollateral; 8],
186 pub lowest_reserve_deposit_liquidation_ltv: u64,
187 pub deposited_value_sf: u128,
188 pub borrows: [KaminoObligationLiquidity; 5],
189 pub borrow_factor_adjusted_debt_value_sf: u128,
190 pub borrowed_assets_market_value_sf: u128,
191 pub allowed_borrow_value_sf: u128,
192 pub unhealthy_borrow_value_sf: u128,
193 pub elevation_group: u8,
194 pub num_of_obsolete_deposit_reserves: u8,
195 pub has_debt: u8,
196 pub referrer: Pubkey,
197 pub borrowing_disabled: u8,
198 pub autodeleverage_target_ltv_pct: u8,
199 pub lowest_reserve_deposit_max_ltv_pct: u8,
200 pub num_of_obsolete_borrow_reserves: u8,
201 pub highest_borrow_factor_pct: u64,
202 pub autodeleverage_margin_call_started_timestamp: u64,
203 pub obligation_orders: [KaminoObligationOrder; 2],
204 pub borrow_order: KaminoBorrowOrder,
205}
206
207#[derive(Serialize, Deserialize, Clone, Debug, Default)]
208pub struct KaminoObligationCollateral {
209 pub deposit_reserve: Pubkey,
210 pub deposited_amount: u64,
211 pub market_value_sf: u128,
212 pub borrowed_amount_against_this_collateral_in_elevation_group: u64,
213}
214
215#[derive(Serialize, Deserialize, Clone, Debug, Default)]
216pub struct KaminoObligationLiquidity {
217 pub borrow_reserve: Pubkey,
218 pub cumulative_borrow_rate_bsf: KaminoBigFractionBytes,
219 pub last_borrowed_at_timestamp: u64,
220 pub borrowed_amount_sf: u128,
221 pub market_value_sf: u128,
222 pub borrow_factor_adjusted_market_value_sf: u128,
223 pub borrowed_amount_outside_elevation_groups: u64,
224 pub fixed_term_borrow_rollover_config: KaminoFixedTermBorrowRolloverConfig,
225 pub borrowed_amount_at_expiration: u64,
226}
227
228#[derive(Serialize, Deserialize, Clone, Debug, Default)]
229pub struct KaminoObligationOrder {
230 pub condition_threshold_sf: u128,
231 pub opportunity_parameter_sf: u128,
232 pub min_execution_bonus_bps: u16,
233 pub max_execution_bonus_bps: u16,
234 pub condition_type: u8,
235 pub opportunity_type: u8,
236}
237
238#[derive(Serialize, Deserialize, Clone, Debug, Default)]
239pub struct KaminoBorrowOrder {
240 pub debt_liquidity_mint: Pubkey,
241 pub remaining_debt_amount: u64,
242 pub filled_debt_destination: Pubkey,
243 pub min_debt_term_seconds: u64,
244 pub fillable_until_timestamp: u64,
245 pub placed_at_timestamp: u64,
246 pub last_updated_at_timestamp: u64,
247 pub requested_debt_amount: u64,
248 pub max_borrow_rate_bps: u32,
249 pub active: u8,
250 pub enable_auto_rollover_on_filled_borrows: u8,
251}
252
253#[derive(Serialize, Deserialize, Clone, Debug, Default)]
254pub struct KaminoFixedTermBorrowRolloverConfig {
255 pub auto_rollover_enabled: u8,
256 pub open_term_allowed: u8,
257 pub migration_to_fixed_enabled: u8,
258 pub max_borrow_rate_bps: u32,
259 pub min_debt_term_seconds: u64,
260}
261
262#[derive(Serialize, Deserialize, Clone, Debug)]
267pub struct KaminoWithdrawTicket {
268 pub sequence_number: u64,
269 pub owner: Pubkey,
270 pub reserve: Pubkey,
271 pub user_destination_liquidity_ta: Pubkey,
272 pub queued_collateral_amount: u64,
273 pub created_at_timestamp: u64,
274 pub invalid: u8,
275}
276
277#[derive(Serialize, Deserialize, Clone, Debug, Default)]
282pub struct KaminoElevationGroup {
283 pub max_liquidation_bonus_bps: u16,
284 pub id: u8,
285 pub ltv_pct: u8,
286 pub liquidation_threshold_pct: u8,
287 pub allow_new_loans: u8,
288 pub max_reserves_as_collateral: u8,
289 pub debt_reserve: Pubkey,
290}