klend_interface/instructions/
deposit.rs1use borsh::BorshSerialize;
2use solana_instruction::Instruction;
3use solana_pubkey::Pubkey;
4
5use crate::{
6 discriminators, util::*, FARMS_PROGRAM_ID, KLEND_PROGRAM_ID, SYSVAR_INSTRUCTIONS_ID,
7 TOKEN_PROGRAM_ID,
8};
9
10pub struct DepositReserveLiquidityAccounts {
15 pub owner: Pubkey,
16 pub reserve: Pubkey,
17 pub lending_market: Pubkey,
18 pub lending_market_authority: Pubkey,
19 pub reserve_liquidity_mint: Pubkey,
20 pub reserve_liquidity_supply: Pubkey,
21 pub reserve_collateral_mint: Pubkey,
22 pub user_source_liquidity: Pubkey,
23 pub user_destination_collateral: Pubkey,
24 pub liquidity_token_program: Pubkey,
25}
26
27pub fn deposit_reserve_liquidity(
28 accounts: DepositReserveLiquidityAccounts,
29 liquidity_amount: u64,
30) -> Instruction {
31 #[derive(BorshSerialize)]
32 struct Args {
33 liquidity_amount: u64,
34 }
35
36 let args = Args { liquidity_amount };
37 let mut data = discriminators::DEPOSIT_RESERVE_LIQUIDITY.to_vec();
38 args.serialize(&mut data).unwrap();
39
40 Instruction {
41 program_id: KLEND_PROGRAM_ID,
42 accounts: vec![
43 signer(accounts.owner),
44 writable(accounts.reserve),
45 readonly(accounts.lending_market),
46 readonly(accounts.lending_market_authority),
47 readonly(accounts.reserve_liquidity_mint),
48 writable(accounts.reserve_liquidity_supply),
49 writable(accounts.reserve_collateral_mint),
50 writable(accounts.user_source_liquidity),
51 writable(accounts.user_destination_collateral),
52 readonly(TOKEN_PROGRAM_ID),
53 readonly(accounts.liquidity_token_program),
54 readonly(SYSVAR_INSTRUCTIONS_ID),
55 ],
56 data,
57 }
58}
59
60pub struct DepositObligationCollateralV2Accounts {
65 pub owner: Pubkey,
67 pub obligation: Pubkey,
68 pub lending_market: Pubkey,
69 pub deposit_reserve: Pubkey,
70 pub reserve_destination_collateral: Pubkey,
71 pub user_source_collateral: Pubkey,
72 pub lending_market_authority: Pubkey,
74 pub obligation_farm_user_state: Option<Pubkey>,
75 pub reserve_farm_state: Option<Pubkey>,
76}
77
78pub fn deposit_obligation_collateral_v2(
79 accounts: DepositObligationCollateralV2Accounts,
80 collateral_amount: u64,
81) -> Instruction {
82 #[derive(BorshSerialize)]
83 struct Args {
84 collateral_amount: u64,
85 }
86
87 let args = Args { collateral_amount };
88 let mut data = discriminators::DEPOSIT_OBLIGATION_COLLATERAL_V2.to_vec();
89 args.serialize(&mut data).unwrap();
90
91 Instruction {
92 program_id: KLEND_PROGRAM_ID,
93 accounts: vec![
94 signer(accounts.owner),
96 writable(accounts.obligation),
97 readonly(accounts.lending_market),
98 writable(accounts.deposit_reserve),
99 writable(accounts.reserve_destination_collateral),
100 writable(accounts.user_source_collateral),
101 readonly(TOKEN_PROGRAM_ID),
102 readonly(SYSVAR_INSTRUCTIONS_ID),
103 readonly(accounts.lending_market_authority),
105 optional_account(&KLEND_PROGRAM_ID, accounts.obligation_farm_user_state, true),
106 optional_account(&KLEND_PROGRAM_ID, accounts.reserve_farm_state, true),
107 readonly(FARMS_PROGRAM_ID),
108 ],
109 data,
110 }
111}
112
113pub struct DepositReserveLiquidityAndObligationCollateralV2Accounts {
118 pub owner: Pubkey,
120 pub obligation: Pubkey,
121 pub lending_market: Pubkey,
122 pub lending_market_authority: Pubkey,
123 pub reserve: Pubkey,
124 pub reserve_liquidity_mint: Pubkey,
125 pub reserve_liquidity_supply: Pubkey,
126 pub reserve_collateral_mint: Pubkey,
127 pub reserve_destination_deposit_collateral: Pubkey,
128 pub user_source_liquidity: Pubkey,
129 pub placeholder_user_destination_collateral: Option<Pubkey>,
130 pub liquidity_token_program: Pubkey,
131 pub obligation_farm_user_state: Option<Pubkey>,
133 pub reserve_farm_state: Option<Pubkey>,
134}
135
136pub fn deposit_reserve_liquidity_and_obligation_collateral_v2(
137 accounts: DepositReserveLiquidityAndObligationCollateralV2Accounts,
138 liquidity_amount: u64,
139) -> Instruction {
140 #[derive(BorshSerialize)]
141 struct Args {
142 liquidity_amount: u64,
143 }
144
145 let args = Args { liquidity_amount };
146 let mut data = discriminators::DEPOSIT_RESERVE_LIQUIDITY_AND_OBLIGATION_COLLATERAL_V2.to_vec();
147 args.serialize(&mut data).unwrap();
148
149 Instruction {
150 program_id: KLEND_PROGRAM_ID,
151 accounts: vec![
152 signer_writable(accounts.owner),
154 writable(accounts.obligation),
155 readonly(accounts.lending_market),
156 readonly(accounts.lending_market_authority),
157 writable(accounts.reserve),
158 readonly(accounts.reserve_liquidity_mint),
159 writable(accounts.reserve_liquidity_supply),
160 writable(accounts.reserve_collateral_mint),
161 writable(accounts.reserve_destination_deposit_collateral),
162 writable(accounts.user_source_liquidity),
163 optional_account(
164 &KLEND_PROGRAM_ID,
165 accounts.placeholder_user_destination_collateral,
166 false,
167 ),
168 readonly(TOKEN_PROGRAM_ID),
169 readonly(accounts.liquidity_token_program),
170 readonly(SYSVAR_INSTRUCTIONS_ID),
171 optional_account(&KLEND_PROGRAM_ID, accounts.obligation_farm_user_state, true),
173 optional_account(&KLEND_PROGRAM_ID, accounts.reserve_farm_state, true),
174 readonly(FARMS_PROGRAM_ID),
175 ],
176 data,
177 }
178}