1use borsh::BorshDeserialize;
9use borsh::BorshSerialize;
10
11#[derive(Debug)]
13pub struct InitializeBinArrayBitmapExtension {
14 pub lb_pair: solana_pubkey::Pubkey,
15 pub bin_array_bitmap_extension: solana_pubkey::Pubkey,
17
18 pub funder: solana_pubkey::Pubkey,
19
20 pub system_program: solana_pubkey::Pubkey,
21
22 pub rent: solana_pubkey::Pubkey,
23}
24
25impl InitializeBinArrayBitmapExtension {
26 pub fn instruction(&self) -> solana_instruction::Instruction {
27 self.instruction_with_remaining_accounts(&[])
28 }
29 #[allow(clippy::arithmetic_side_effects)]
30 #[allow(clippy::vec_init_then_push)]
31 pub fn instruction_with_remaining_accounts(
32 &self,
33 remaining_accounts: &[solana_instruction::AccountMeta],
34 ) -> solana_instruction::Instruction {
35 let mut accounts = Vec::with_capacity(5 + remaining_accounts.len());
36 accounts.push(solana_instruction::AccountMeta::new_readonly(
37 self.lb_pair,
38 false,
39 ));
40 accounts.push(solana_instruction::AccountMeta::new(
41 self.bin_array_bitmap_extension,
42 false,
43 ));
44 accounts.push(solana_instruction::AccountMeta::new(self.funder, true));
45 accounts.push(solana_instruction::AccountMeta::new_readonly(
46 self.system_program,
47 false,
48 ));
49 accounts.push(solana_instruction::AccountMeta::new_readonly(
50 self.rent, false,
51 ));
52 accounts.extend_from_slice(remaining_accounts);
53 let data = borsh::to_vec(&InitializeBinArrayBitmapExtensionInstructionData::new()).unwrap();
54
55 solana_instruction::Instruction {
56 program_id: crate::LB_CLMM_ID,
57 accounts,
58 data,
59 }
60 }
61}
62
63#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
64#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
65pub struct InitializeBinArrayBitmapExtensionInstructionData {
66 discriminator: [u8; 8],
67}
68
69impl InitializeBinArrayBitmapExtensionInstructionData {
70 pub fn new() -> Self {
71 Self {
72 discriminator: [47, 157, 226, 180, 12, 240, 33, 71],
73 }
74 }
75}
76
77impl Default for InitializeBinArrayBitmapExtensionInstructionData {
78 fn default() -> Self {
79 Self::new()
80 }
81}
82
83#[derive(Clone, Debug, Default)]
93pub struct InitializeBinArrayBitmapExtensionBuilder {
94 lb_pair: Option<solana_pubkey::Pubkey>,
95 bin_array_bitmap_extension: Option<solana_pubkey::Pubkey>,
96 funder: Option<solana_pubkey::Pubkey>,
97 system_program: Option<solana_pubkey::Pubkey>,
98 rent: Option<solana_pubkey::Pubkey>,
99 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
100}
101
102impl InitializeBinArrayBitmapExtensionBuilder {
103 pub fn new() -> Self {
104 Self::default()
105 }
106 #[inline(always)]
107 pub fn lb_pair(&mut self, lb_pair: solana_pubkey::Pubkey) -> &mut Self {
108 self.lb_pair = Some(lb_pair);
109 self
110 }
111 #[inline(always)]
113 pub fn bin_array_bitmap_extension(
114 &mut self,
115 bin_array_bitmap_extension: solana_pubkey::Pubkey,
116 ) -> &mut Self {
117 self.bin_array_bitmap_extension = Some(bin_array_bitmap_extension);
118 self
119 }
120 #[inline(always)]
121 pub fn funder(&mut self, funder: solana_pubkey::Pubkey) -> &mut Self {
122 self.funder = Some(funder);
123 self
124 }
125 #[inline(always)]
127 pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
128 self.system_program = Some(system_program);
129 self
130 }
131 #[inline(always)]
133 pub fn rent(&mut self, rent: solana_pubkey::Pubkey) -> &mut Self {
134 self.rent = Some(rent);
135 self
136 }
137 #[inline(always)]
139 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
140 self.__remaining_accounts.push(account);
141 self
142 }
143 #[inline(always)]
145 pub fn add_remaining_accounts(
146 &mut self,
147 accounts: &[solana_instruction::AccountMeta],
148 ) -> &mut Self {
149 self.__remaining_accounts.extend_from_slice(accounts);
150 self
151 }
152 #[allow(clippy::clone_on_copy)]
153 pub fn instruction(&self) -> solana_instruction::Instruction {
154 let accounts = InitializeBinArrayBitmapExtension {
155 lb_pair: self.lb_pair.expect("lb_pair is not set"),
156 bin_array_bitmap_extension: self
157 .bin_array_bitmap_extension
158 .expect("bin_array_bitmap_extension is not set"),
159 funder: self.funder.expect("funder is not set"),
160 system_program: self
161 .system_program
162 .unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
163 rent: self.rent.unwrap_or(solana_pubkey::pubkey!(
164 "SysvarRent111111111111111111111111111111111"
165 )),
166 };
167
168 accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
169 }
170}
171
172pub struct InitializeBinArrayBitmapExtensionCpiAccounts<'a, 'b> {
174 pub lb_pair: &'b solana_account_info::AccountInfo<'a>,
175 pub bin_array_bitmap_extension: &'b solana_account_info::AccountInfo<'a>,
177
178 pub funder: &'b solana_account_info::AccountInfo<'a>,
179
180 pub system_program: &'b solana_account_info::AccountInfo<'a>,
181
182 pub rent: &'b solana_account_info::AccountInfo<'a>,
183}
184
185pub struct InitializeBinArrayBitmapExtensionCpi<'a, 'b> {
187 pub __program: &'b solana_account_info::AccountInfo<'a>,
189
190 pub lb_pair: &'b solana_account_info::AccountInfo<'a>,
191 pub bin_array_bitmap_extension: &'b solana_account_info::AccountInfo<'a>,
193
194 pub funder: &'b solana_account_info::AccountInfo<'a>,
195
196 pub system_program: &'b solana_account_info::AccountInfo<'a>,
197
198 pub rent: &'b solana_account_info::AccountInfo<'a>,
199}
200
201impl<'a, 'b> InitializeBinArrayBitmapExtensionCpi<'a, 'b> {
202 pub fn new(
203 program: &'b solana_account_info::AccountInfo<'a>,
204 accounts: InitializeBinArrayBitmapExtensionCpiAccounts<'a, 'b>,
205 ) -> Self {
206 Self {
207 __program: program,
208 lb_pair: accounts.lb_pair,
209 bin_array_bitmap_extension: accounts.bin_array_bitmap_extension,
210 funder: accounts.funder,
211 system_program: accounts.system_program,
212 rent: accounts.rent,
213 }
214 }
215 #[inline(always)]
216 pub fn invoke(&self) -> solana_program_entrypoint::ProgramResult {
217 self.invoke_signed_with_remaining_accounts(&[], &[])
218 }
219 #[inline(always)]
220 pub fn invoke_with_remaining_accounts(
221 &self,
222 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
223 ) -> solana_program_entrypoint::ProgramResult {
224 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
225 }
226 #[inline(always)]
227 pub fn invoke_signed(
228 &self,
229 signers_seeds: &[&[&[u8]]],
230 ) -> solana_program_entrypoint::ProgramResult {
231 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
232 }
233 #[allow(clippy::arithmetic_side_effects)]
234 #[allow(clippy::clone_on_copy)]
235 #[allow(clippy::vec_init_then_push)]
236 pub fn invoke_signed_with_remaining_accounts(
237 &self,
238 signers_seeds: &[&[&[u8]]],
239 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
240 ) -> solana_program_entrypoint::ProgramResult {
241 let mut accounts = Vec::with_capacity(5 + remaining_accounts.len());
242 accounts.push(solana_instruction::AccountMeta::new_readonly(
243 *self.lb_pair.key,
244 false,
245 ));
246 accounts.push(solana_instruction::AccountMeta::new(
247 *self.bin_array_bitmap_extension.key,
248 false,
249 ));
250 accounts.push(solana_instruction::AccountMeta::new(*self.funder.key, true));
251 accounts.push(solana_instruction::AccountMeta::new_readonly(
252 *self.system_program.key,
253 false,
254 ));
255 accounts.push(solana_instruction::AccountMeta::new_readonly(
256 *self.rent.key,
257 false,
258 ));
259 remaining_accounts.iter().for_each(|remaining_account| {
260 accounts.push(solana_instruction::AccountMeta {
261 pubkey: *remaining_account.0.key,
262 is_signer: remaining_account.1,
263 is_writable: remaining_account.2,
264 })
265 });
266 let data = borsh::to_vec(&InitializeBinArrayBitmapExtensionInstructionData::new()).unwrap();
267
268 let instruction = solana_instruction::Instruction {
269 program_id: crate::LB_CLMM_ID,
270 accounts,
271 data,
272 };
273 let mut account_infos = Vec::with_capacity(6 + remaining_accounts.len());
274 account_infos.push(self.__program.clone());
275 account_infos.push(self.lb_pair.clone());
276 account_infos.push(self.bin_array_bitmap_extension.clone());
277 account_infos.push(self.funder.clone());
278 account_infos.push(self.system_program.clone());
279 account_infos.push(self.rent.clone());
280 remaining_accounts
281 .iter()
282 .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
283
284 if signers_seeds.is_empty() {
285 solana_cpi::invoke(&instruction, &account_infos)
286 } else {
287 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
288 }
289 }
290}
291
292#[derive(Clone, Debug)]
302pub struct InitializeBinArrayBitmapExtensionCpiBuilder<'a, 'b> {
303 instruction: Box<InitializeBinArrayBitmapExtensionCpiBuilderInstruction<'a, 'b>>,
304}
305
306impl<'a, 'b> InitializeBinArrayBitmapExtensionCpiBuilder<'a, 'b> {
307 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
308 let instruction = Box::new(InitializeBinArrayBitmapExtensionCpiBuilderInstruction {
309 __program: program,
310 lb_pair: None,
311 bin_array_bitmap_extension: None,
312 funder: None,
313 system_program: None,
314 rent: None,
315 __remaining_accounts: Vec::new(),
316 });
317 Self { instruction }
318 }
319 #[inline(always)]
320 pub fn lb_pair(&mut self, lb_pair: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
321 self.instruction.lb_pair = Some(lb_pair);
322 self
323 }
324 #[inline(always)]
326 pub fn bin_array_bitmap_extension(
327 &mut self,
328 bin_array_bitmap_extension: &'b solana_account_info::AccountInfo<'a>,
329 ) -> &mut Self {
330 self.instruction.bin_array_bitmap_extension = Some(bin_array_bitmap_extension);
331 self
332 }
333 #[inline(always)]
334 pub fn funder(&mut self, funder: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
335 self.instruction.funder = Some(funder);
336 self
337 }
338 #[inline(always)]
339 pub fn system_program(
340 &mut self,
341 system_program: &'b solana_account_info::AccountInfo<'a>,
342 ) -> &mut Self {
343 self.instruction.system_program = Some(system_program);
344 self
345 }
346 #[inline(always)]
347 pub fn rent(&mut self, rent: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
348 self.instruction.rent = Some(rent);
349 self
350 }
351 #[inline(always)]
353 pub fn add_remaining_account(
354 &mut self,
355 account: &'b solana_account_info::AccountInfo<'a>,
356 is_writable: bool,
357 is_signer: bool,
358 ) -> &mut Self {
359 self.instruction
360 .__remaining_accounts
361 .push((account, is_writable, is_signer));
362 self
363 }
364 #[inline(always)]
369 pub fn add_remaining_accounts(
370 &mut self,
371 accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
372 ) -> &mut Self {
373 self.instruction
374 .__remaining_accounts
375 .extend_from_slice(accounts);
376 self
377 }
378 #[inline(always)]
379 pub fn invoke(&self) -> solana_program_entrypoint::ProgramResult {
380 self.invoke_signed(&[])
381 }
382 #[allow(clippy::clone_on_copy)]
383 #[allow(clippy::vec_init_then_push)]
384 pub fn invoke_signed(
385 &self,
386 signers_seeds: &[&[&[u8]]],
387 ) -> solana_program_entrypoint::ProgramResult {
388 let instruction = InitializeBinArrayBitmapExtensionCpi {
389 __program: self.instruction.__program,
390
391 lb_pair: self.instruction.lb_pair.expect("lb_pair is not set"),
392
393 bin_array_bitmap_extension: self
394 .instruction
395 .bin_array_bitmap_extension
396 .expect("bin_array_bitmap_extension is not set"),
397
398 funder: self.instruction.funder.expect("funder is not set"),
399
400 system_program: self
401 .instruction
402 .system_program
403 .expect("system_program is not set"),
404
405 rent: self.instruction.rent.expect("rent is not set"),
406 };
407 instruction.invoke_signed_with_remaining_accounts(
408 signers_seeds,
409 &self.instruction.__remaining_accounts,
410 )
411 }
412}
413
414#[derive(Clone, Debug)]
415struct InitializeBinArrayBitmapExtensionCpiBuilderInstruction<'a, 'b> {
416 __program: &'b solana_account_info::AccountInfo<'a>,
417 lb_pair: Option<&'b solana_account_info::AccountInfo<'a>>,
418 bin_array_bitmap_extension: Option<&'b solana_account_info::AccountInfo<'a>>,
419 funder: Option<&'b solana_account_info::AccountInfo<'a>>,
420 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
421 rent: Option<&'b solana_account_info::AccountInfo<'a>>,
422 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
424}