Skip to main content

klend_interface/
lib.rs

1#![doc = include_str!("../README.md")]
2//!
3//! ## Example source code
4//!
5//! <details><summary><code>deposit_lending</code> — Deposit liquidity and receive cTokens directly</summary>
6//!
7//! ```rust,ignore
8#![doc = include_str!("../examples/deposit_lending.rs")]
9//! ```
10//! </details>
11//!
12//! <details><summary><code>deposit_borrowing</code> — Deposit as collateral into an obligation</summary>
13//!
14//! ```rust,ignore
15#![doc = include_str!("../examples/deposit_borrowing.rs")]
16//! ```
17//! </details>
18//!
19//! <details><summary><code>borrow</code> — Borrow liquidity against an obligation</summary>
20//!
21//! ```rust,ignore
22#![doc = include_str!("../examples/borrow.rs")]
23//! ```
24//! </details>
25//!
26//! <details><summary><code>repay</code> — Repay borrowed liquidity</summary>
27//!
28//! ```rust,ignore
29#![doc = include_str!("../examples/repay.rs")]
30//! ```
31//! </details>
32//!
33//! <details><summary><code>withdraw_obligation</code> — Withdraw collateral from an obligation and redeem for liquidity</summary>
34//!
35//! ```rust,ignore
36#![doc = include_str!("../examples/withdraw_obligation.rs")]
37//! ```
38//! </details>
39//!
40//! <details><summary><code>redeem_ctokens</code> — Redeem cTokens for the underlying liquidity (no obligation)</summary>
41//!
42//! ```rust,ignore
43#![doc = include_str!("../examples/redeem_ctokens.rs")]
44//! ```
45//! </details>
46//!
47//! <details><summary><code>flash_loan</code> — Flash-borrow and repay in a single transaction</summary>
48//!
49//! ```rust,ignore
50#![doc = include_str!("../examples/flash_loan.rs")]
51//! ```
52//! </details>
53//!
54//! <details><summary><code>market_data</code> — Fetch and inspect lending market and reserve data</summary>
55//!
56//! ```rust,ignore
57#![doc = include_str!("../examples/market_data.rs")]
58//! ```
59//! </details>
60//!
61//! <details><summary><code>user_position</code> — Read an obligation and display positions</summary>
62//!
63//! ```rust,ignore
64#![doc = include_str!("../examples/user_position.rs")]
65//! ```
66//! </details>
67//!
68//! <details><summary><code>cpi_deposit_and_borrow</code> — CPI from an Anchor program: deposit collateral and borrow</summary>
69//!
70//! ```rust,ignore
71#![doc = include_str!("../docs/cpi_deposit_and_borrow.rs")]
72//! ```
73//! </details>
74
75pub mod discriminators;
76pub mod errors;
77pub mod fraction;
78pub mod helpers;
79pub mod instructions;
80pub mod pda;
81pub mod state;
82pub mod types;
83pub mod util;
84
85// Convenience re-exports for the most commonly used types.
86pub use errors::LendingError;
87pub use fraction::{Fraction, FRACTION_ONE_SCALED};
88pub use helpers::{
89    CallbackAccounts, FarmsAccounts, ObligationContext, ObligationContextError, ObligationInfo,
90    ReserveInfo,
91};
92use solana_pubkey::{pubkey, Pubkey};
93pub use state::{from_account_data, AccountDataError};
94
95/// Sentinel value that tells the program to use the maximum available amount
96/// (e.g. repay all debt, withdraw all collateral).
97pub const MAX_AMOUNT: u64 = u64::MAX;
98
99/// Kamino Lending (mainnet) program ID.
100pub const KLEND_PROGRAM_ID: Pubkey = pubkey!("KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD");
101
102/// Kamino Lending (staging / devnet) program ID.
103pub const KLEND_STAGING_PROGRAM_ID: Pubkey = pubkey!("SLendK7ySfcEzyaFqy93gDnD3RtrpXJcnRwb6zFHJSh");
104
105/// Kamino Farms program ID.
106pub const FARMS_PROGRAM_ID: Pubkey = pubkey!("FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr");
107
108/// Kamino Vault (mainnet) program ID — used as the progress callback program
109/// for `KlendQueueAccountingHandlerOnKvault`.
110pub const KVAULT_PROGRAM_ID: Pubkey = pubkey!("KvauGMspG5k6rtzrqqn7WNn3oZdyKqLKwK2XWQ8FLjd");
111
112// Well-known program and sysvar IDs.
113pub const TOKEN_PROGRAM_ID: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
114pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey =
115    pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
116pub const SYSTEM_PROGRAM_ID: Pubkey = pubkey!("11111111111111111111111111111111");
117pub const SYSVAR_RENT_ID: Pubkey = pubkey!("SysvarRent111111111111111111111111111111111");
118pub const SYSVAR_INSTRUCTIONS_ID: Pubkey = pubkey!("Sysvar1nstructions1111111111111111111111111");