klend_interface/instructions/
flash.rs1use borsh::BorshSerialize;
2use solana_instruction::Instruction;
3use solana_pubkey::Pubkey;
4
5use crate::{discriminators, util::*, KLEND_PROGRAM_ID, SYSVAR_INSTRUCTIONS_ID};
6
7pub struct FlashBorrowReserveLiquidityAccounts {
12 pub user_transfer_authority: Pubkey,
13 pub lending_market_authority: Pubkey,
14 pub lending_market: Pubkey,
15 pub reserve: Pubkey,
16 pub reserve_liquidity_mint: Pubkey,
17 pub reserve_source_liquidity: Pubkey,
18 pub user_destination_liquidity: Pubkey,
19 pub reserve_liquidity_fee_receiver: Pubkey,
20 pub referrer_token_state: Option<Pubkey>,
21 pub referrer_account: Option<Pubkey>,
22 pub token_program: Pubkey,
23}
24
25pub fn flash_borrow_reserve_liquidity(
26 accounts: FlashBorrowReserveLiquidityAccounts,
27 liquidity_amount: u64,
28) -> Instruction {
29 #[derive(BorshSerialize)]
30 struct Args {
31 liquidity_amount: u64,
32 }
33
34 let args = Args { liquidity_amount };
35 let mut data = discriminators::FLASH_BORROW_RESERVE_LIQUIDITY.to_vec();
36 args.serialize(&mut data).unwrap();
37
38 Instruction {
39 program_id: KLEND_PROGRAM_ID,
40 accounts: vec![
41 signer(accounts.user_transfer_authority),
42 readonly(accounts.lending_market_authority),
43 readonly(accounts.lending_market),
44 writable(accounts.reserve),
45 readonly(accounts.reserve_liquidity_mint),
46 writable(accounts.reserve_source_liquidity),
47 writable(accounts.user_destination_liquidity),
48 writable(accounts.reserve_liquidity_fee_receiver),
49 optional_account(&KLEND_PROGRAM_ID, accounts.referrer_token_state, true),
50 optional_account(&KLEND_PROGRAM_ID, accounts.referrer_account, true),
51 readonly(SYSVAR_INSTRUCTIONS_ID),
52 readonly(accounts.token_program),
53 ],
54 data,
55 }
56}
57
58pub struct FlashRepayReserveLiquidityAccounts {
63 pub user_transfer_authority: Pubkey,
64 pub lending_market_authority: Pubkey,
65 pub lending_market: Pubkey,
66 pub reserve: Pubkey,
67 pub reserve_liquidity_mint: Pubkey,
68 pub reserve_destination_liquidity: Pubkey,
69 pub user_source_liquidity: Pubkey,
70 pub reserve_liquidity_fee_receiver: Pubkey,
71 pub referrer_token_state: Option<Pubkey>,
72 pub referrer_account: Option<Pubkey>,
73 pub token_program: Pubkey,
74}
75
76pub fn flash_repay_reserve_liquidity(
77 accounts: FlashRepayReserveLiquidityAccounts,
78 liquidity_amount: u64,
79 borrow_instruction_index: u8,
80) -> Instruction {
81 #[derive(BorshSerialize)]
82 struct Args {
83 liquidity_amount: u64,
84 borrow_instruction_index: u8,
85 }
86
87 let args = Args {
88 liquidity_amount,
89 borrow_instruction_index,
90 };
91 let mut data = discriminators::FLASH_REPAY_RESERVE_LIQUIDITY.to_vec();
92 args.serialize(&mut data).unwrap();
93
94 Instruction {
95 program_id: KLEND_PROGRAM_ID,
96 accounts: vec![
97 signer(accounts.user_transfer_authority),
98 readonly(accounts.lending_market_authority),
99 readonly(accounts.lending_market),
100 writable(accounts.reserve),
101 readonly(accounts.reserve_liquidity_mint),
102 writable(accounts.reserve_destination_liquidity),
103 writable(accounts.user_source_liquidity),
104 writable(accounts.reserve_liquidity_fee_receiver),
105 optional_account(&KLEND_PROGRAM_ID, accounts.referrer_token_state, true),
106 optional_account(&KLEND_PROGRAM_ID, accounts.referrer_account, true),
107 readonly(SYSVAR_INSTRUCTIONS_ID),
108 readonly(accounts.token_program),
109 ],
110 data,
111 }
112}