Skip to main content

satrush_client/generated/instructions/
select_epoch_winner.rs

1//! This code was AUTOGENERATED using the codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7
8use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const SELECT_EPOCH_WINNER_DISCRIMINATOR: [u8; 8] = [222, 36, 211, 175, 4, 220, 2, 251];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct SelectEpochWinner {
16      
17              
18          pub authority: solana_address::Address,
19          
20              
21          pub satrush_config: solana_address::Address,
22          
23              
24          pub epoch_vault: solana_address::Address,
25          
26              
27          pub epoch_vault_iteration: solana_address::Address,
28          
29              
30          pub epoch_vault_page: solana_address::Address,
31      }
32
33impl SelectEpochWinner {
34  pub fn instruction(&self, args: SelectEpochWinnerInstructionArgs) -> solana_instruction::Instruction {
35    self.instruction_with_remaining_accounts(args, &[])
36  }
37  #[allow(clippy::arithmetic_side_effects)]
38  #[allow(clippy::vec_init_then_push)]
39  pub fn instruction_with_remaining_accounts(&self, args: SelectEpochWinnerInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
40    let mut accounts = Vec::with_capacity(5+ remaining_accounts.len());
41                            accounts.push(solana_instruction::AccountMeta::new_readonly(
42            self.authority,
43            true
44          ));
45                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
46            self.satrush_config,
47            false
48          ));
49                                          accounts.push(solana_instruction::AccountMeta::new(
50            self.epoch_vault,
51            false
52          ));
53                                          accounts.push(solana_instruction::AccountMeta::new(
54            self.epoch_vault_iteration,
55            false
56          ));
57                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
58            self.epoch_vault_page,
59            false
60          ));
61                      accounts.extend_from_slice(remaining_accounts);
62    let mut data = SelectEpochWinnerInstructionData::new().try_to_vec().unwrap();
63          let mut args = args.try_to_vec().unwrap();
64      data.append(&mut args);
65    
66    solana_instruction::Instruction {
67      program_id: crate::SATRUSH_ID,
68      accounts,
69      data,
70    }
71  }
72}
73
74#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
75 pub struct SelectEpochWinnerInstructionData {
76            discriminator: [u8; 8],
77            }
78
79impl SelectEpochWinnerInstructionData {
80  pub fn new() -> Self {
81    Self {
82                        discriminator: [222, 36, 211, 175, 4, 220, 2, 251],
83                                }
84  }
85
86    pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
87    borsh::to_vec(self)
88  }
89  }
90
91impl Default for SelectEpochWinnerInstructionData {
92  fn default() -> Self {
93    Self::new()
94  }
95}
96
97#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
98 pub struct SelectEpochWinnerInstructionArgs {
99                  pub page_index: u16,
100      }
101
102impl SelectEpochWinnerInstructionArgs {
103  pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
104    borsh::to_vec(self)
105  }
106}
107
108
109/// Instruction builder for `SelectEpochWinner`.
110///
111/// ### Accounts:
112///
113                ///   0. `[signer]` authority
114          ///   1. `[]` satrush_config
115                ///   2. `[writable]` epoch_vault
116                ///   3. `[writable]` epoch_vault_iteration
117          ///   4. `[]` epoch_vault_page
118#[derive(Clone, Debug, Default)]
119pub struct SelectEpochWinnerBuilder {
120            authority: Option<solana_address::Address>,
121                satrush_config: Option<solana_address::Address>,
122                epoch_vault: Option<solana_address::Address>,
123                epoch_vault_iteration: Option<solana_address::Address>,
124                epoch_vault_page: Option<solana_address::Address>,
125                        page_index: Option<u16>,
126        __remaining_accounts: Vec<solana_instruction::AccountMeta>,
127}
128
129impl SelectEpochWinnerBuilder {
130  pub fn new() -> Self {
131    Self::default()
132  }
133            #[inline(always)]
134    pub fn authority(&mut self, authority: solana_address::Address) -> &mut Self {
135                        self.authority = Some(authority);
136                    self
137    }
138            #[inline(always)]
139    pub fn satrush_config(&mut self, satrush_config: solana_address::Address) -> &mut Self {
140                        self.satrush_config = Some(satrush_config);
141                    self
142    }
143            #[inline(always)]
144    pub fn epoch_vault(&mut self, epoch_vault: solana_address::Address) -> &mut Self {
145                        self.epoch_vault = Some(epoch_vault);
146                    self
147    }
148            #[inline(always)]
149    pub fn epoch_vault_iteration(&mut self, epoch_vault_iteration: solana_address::Address) -> &mut Self {
150                        self.epoch_vault_iteration = Some(epoch_vault_iteration);
151                    self
152    }
153            #[inline(always)]
154    pub fn epoch_vault_page(&mut self, epoch_vault_page: solana_address::Address) -> &mut Self {
155                        self.epoch_vault_page = Some(epoch_vault_page);
156                    self
157    }
158                    #[inline(always)]
159      pub fn page_index(&mut self, page_index: u16) -> &mut Self {
160        self.page_index = Some(page_index);
161        self
162      }
163        /// Add an additional account to the instruction.
164  #[inline(always)]
165  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
166    self.__remaining_accounts.push(account);
167    self
168  }
169  /// Add additional accounts to the instruction.
170  #[inline(always)]
171  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
172    self.__remaining_accounts.extend_from_slice(accounts);
173    self
174  }
175  #[allow(clippy::clone_on_copy)]
176  pub fn instruction(&self) -> solana_instruction::Instruction {
177    let accounts = SelectEpochWinner {
178                              authority: self.authority.expect("authority is not set"),
179                                        satrush_config: self.satrush_config.expect("satrush_config is not set"),
180                                        epoch_vault: self.epoch_vault.expect("epoch_vault is not set"),
181                                        epoch_vault_iteration: self.epoch_vault_iteration.expect("epoch_vault_iteration is not set"),
182                                        epoch_vault_page: self.epoch_vault_page.expect("epoch_vault_page is not set"),
183                      };
184          let args = SelectEpochWinnerInstructionArgs {
185                                                              page_index: self.page_index.clone().expect("page_index is not set"),
186                                    };
187    
188    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
189  }
190}
191
192  /// `select_epoch_winner` CPI accounts.
193  pub struct SelectEpochWinnerCpiAccounts<'a, 'b> {
194          
195                    
196              pub authority: &'b solana_account_info::AccountInfo<'a>,
197                
198                    
199              pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
200                
201                    
202              pub epoch_vault: &'b solana_account_info::AccountInfo<'a>,
203                
204                    
205              pub epoch_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
206                
207                    
208              pub epoch_vault_page: &'b solana_account_info::AccountInfo<'a>,
209            }
210
211/// `select_epoch_winner` CPI instruction.
212pub struct SelectEpochWinnerCpi<'a, 'b> {
213  /// The program to invoke.
214  pub __program: &'b solana_account_info::AccountInfo<'a>,
215      
216              
217          pub authority: &'b solana_account_info::AccountInfo<'a>,
218          
219              
220          pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
221          
222              
223          pub epoch_vault: &'b solana_account_info::AccountInfo<'a>,
224          
225              
226          pub epoch_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
227          
228              
229          pub epoch_vault_page: &'b solana_account_info::AccountInfo<'a>,
230            /// The arguments for the instruction.
231    pub __args: SelectEpochWinnerInstructionArgs,
232  }
233
234impl<'a, 'b> SelectEpochWinnerCpi<'a, 'b> {
235  pub fn new(
236    program: &'b solana_account_info::AccountInfo<'a>,
237          accounts: SelectEpochWinnerCpiAccounts<'a, 'b>,
238              args: SelectEpochWinnerInstructionArgs,
239      ) -> Self {
240    Self {
241      __program: program,
242              authority: accounts.authority,
243              satrush_config: accounts.satrush_config,
244              epoch_vault: accounts.epoch_vault,
245              epoch_vault_iteration: accounts.epoch_vault_iteration,
246              epoch_vault_page: accounts.epoch_vault_page,
247                    __args: args,
248          }
249  }
250  #[inline(always)]
251  pub fn invoke(&self) -> solana_program_error::ProgramResult {
252    self.invoke_signed_with_remaining_accounts(&[], &[])
253  }
254  #[inline(always)]
255  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
256    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
257  }
258  #[inline(always)]
259  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
260    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
261  }
262  #[allow(clippy::arithmetic_side_effects)]
263  #[allow(clippy::clone_on_copy)]
264  #[allow(clippy::vec_init_then_push)]
265  pub fn invoke_signed_with_remaining_accounts(
266    &self,
267    signers_seeds: &[&[&[u8]]],
268    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
269  ) -> solana_program_error::ProgramResult {
270    let mut accounts = Vec::with_capacity(5+ remaining_accounts.len());
271                            accounts.push(solana_instruction::AccountMeta::new_readonly(
272            *self.authority.key,
273            true
274          ));
275                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
276            *self.satrush_config.key,
277            false
278          ));
279                                          accounts.push(solana_instruction::AccountMeta::new(
280            *self.epoch_vault.key,
281            false
282          ));
283                                          accounts.push(solana_instruction::AccountMeta::new(
284            *self.epoch_vault_iteration.key,
285            false
286          ));
287                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
288            *self.epoch_vault_page.key,
289            false
290          ));
291                      remaining_accounts.iter().for_each(|remaining_account| {
292      accounts.push(solana_instruction::AccountMeta {
293          pubkey: *remaining_account.0.key,
294          is_signer: remaining_account.1,
295          is_writable: remaining_account.2,
296      })
297    });
298    let mut data = SelectEpochWinnerInstructionData::new().try_to_vec().unwrap();
299          let mut args = self.__args.try_to_vec().unwrap();
300      data.append(&mut args);
301    
302    let instruction = solana_instruction::Instruction {
303      program_id: crate::SATRUSH_ID,
304      accounts,
305      data,
306    };
307    let mut account_infos = Vec::with_capacity(6 + remaining_accounts.len());
308    account_infos.push(self.__program.clone());
309                  account_infos.push(self.authority.clone());
310                        account_infos.push(self.satrush_config.clone());
311                        account_infos.push(self.epoch_vault.clone());
312                        account_infos.push(self.epoch_vault_iteration.clone());
313                        account_infos.push(self.epoch_vault_page.clone());
314              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
315
316    if signers_seeds.is_empty() {
317      solana_cpi::invoke(&instruction, &account_infos)
318    } else {
319      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
320    }
321  }
322}
323
324/// Instruction builder for `SelectEpochWinner` via CPI.
325///
326/// ### Accounts:
327///
328                ///   0. `[signer]` authority
329          ///   1. `[]` satrush_config
330                ///   2. `[writable]` epoch_vault
331                ///   3. `[writable]` epoch_vault_iteration
332          ///   4. `[]` epoch_vault_page
333#[derive(Clone, Debug)]
334pub struct SelectEpochWinnerCpiBuilder<'a, 'b> {
335  instruction: Box<SelectEpochWinnerCpiBuilderInstruction<'a, 'b>>,
336}
337
338impl<'a, 'b> SelectEpochWinnerCpiBuilder<'a, 'b> {
339  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
340    let instruction = Box::new(SelectEpochWinnerCpiBuilderInstruction {
341      __program: program,
342              authority: None,
343              satrush_config: None,
344              epoch_vault: None,
345              epoch_vault_iteration: None,
346              epoch_vault_page: None,
347                                            page_index: None,
348                    __remaining_accounts: Vec::new(),
349    });
350    Self { instruction }
351  }
352      #[inline(always)]
353    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
354                        self.instruction.authority = Some(authority);
355                    self
356    }
357      #[inline(always)]
358    pub fn satrush_config(&mut self, satrush_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
359                        self.instruction.satrush_config = Some(satrush_config);
360                    self
361    }
362      #[inline(always)]
363    pub fn epoch_vault(&mut self, epoch_vault: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
364                        self.instruction.epoch_vault = Some(epoch_vault);
365                    self
366    }
367      #[inline(always)]
368    pub fn epoch_vault_iteration(&mut self, epoch_vault_iteration: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
369                        self.instruction.epoch_vault_iteration = Some(epoch_vault_iteration);
370                    self
371    }
372      #[inline(always)]
373    pub fn epoch_vault_page(&mut self, epoch_vault_page: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
374                        self.instruction.epoch_vault_page = Some(epoch_vault_page);
375                    self
376    }
377                    #[inline(always)]
378      pub fn page_index(&mut self, page_index: u16) -> &mut Self {
379        self.instruction.page_index = Some(page_index);
380        self
381      }
382        /// Add an additional account to the instruction.
383  #[inline(always)]
384  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
385    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
386    self
387  }
388  /// Add additional accounts to the instruction.
389  ///
390  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
391  /// and a `bool` indicating whether the account is a signer or not.
392  #[inline(always)]
393  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
394    self.instruction.__remaining_accounts.extend_from_slice(accounts);
395    self
396  }
397  #[inline(always)]
398  pub fn invoke(&self) -> solana_program_error::ProgramResult {
399    self.invoke_signed(&[])
400  }
401  #[allow(clippy::clone_on_copy)]
402  #[allow(clippy::vec_init_then_push)]
403  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
404          let args = SelectEpochWinnerInstructionArgs {
405                                                              page_index: self.instruction.page_index.clone().expect("page_index is not set"),
406                                    };
407        let instruction = SelectEpochWinnerCpi {
408        __program: self.instruction.__program,
409                  
410          authority: self.instruction.authority.expect("authority is not set"),
411                  
412          satrush_config: self.instruction.satrush_config.expect("satrush_config is not set"),
413                  
414          epoch_vault: self.instruction.epoch_vault.expect("epoch_vault is not set"),
415                  
416          epoch_vault_iteration: self.instruction.epoch_vault_iteration.expect("epoch_vault_iteration is not set"),
417                  
418          epoch_vault_page: self.instruction.epoch_vault_page.expect("epoch_vault_page is not set"),
419                          __args: args,
420            };
421    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
422  }
423}
424
425#[derive(Clone, Debug)]
426struct SelectEpochWinnerCpiBuilderInstruction<'a, 'b> {
427  __program: &'b solana_account_info::AccountInfo<'a>,
428            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
429                satrush_config: Option<&'b solana_account_info::AccountInfo<'a>>,
430                epoch_vault: Option<&'b solana_account_info::AccountInfo<'a>>,
431                epoch_vault_iteration: Option<&'b solana_account_info::AccountInfo<'a>>,
432                epoch_vault_page: Option<&'b solana_account_info::AccountInfo<'a>>,
433                        page_index: Option<u16>,
434        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
435  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
436}
437