Skip to main content

satrush_client/generated/instructions/
create_treasury.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 CREATE_TREASURY_DISCRIMINATOR: [u8; 8] = [254, 98, 217, 51, 25, 88, 140, 45];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct CreateTreasury {
16      
17              
18          pub authority: solana_address::Address,
19          
20              
21          pub satrush_config: solana_address::Address,
22          
23              
24          pub treasury: solana_address::Address,
25          
26              
27          pub usd_mint: solana_address::Address,
28                /// The treasury's USD fee pool — holds exactly `treasury.pending_usd_amount`.
29
30    
31              
32          pub treasury_usd_ata: solana_address::Address,
33          
34              
35          pub token_program: solana_address::Address,
36          
37              
38          pub associated_token_program: solana_address::Address,
39          
40              
41          pub system_program: solana_address::Address,
42      }
43
44impl CreateTreasury {
45  pub fn instruction(&self) -> solana_instruction::Instruction {
46    self.instruction_with_remaining_accounts(&[])
47  }
48  #[allow(clippy::arithmetic_side_effects)]
49  #[allow(clippy::vec_init_then_push)]
50  pub fn instruction_with_remaining_accounts(&self, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
51    let mut accounts = Vec::with_capacity(8+ remaining_accounts.len());
52                            accounts.push(solana_instruction::AccountMeta::new(
53            self.authority,
54            true
55          ));
56                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
57            self.satrush_config,
58            false
59          ));
60                                          accounts.push(solana_instruction::AccountMeta::new(
61            self.treasury,
62            false
63          ));
64                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
65            self.usd_mint,
66            false
67          ));
68                                          accounts.push(solana_instruction::AccountMeta::new(
69            self.treasury_usd_ata,
70            false
71          ));
72                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
73            self.token_program,
74            false
75          ));
76                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
77            self.associated_token_program,
78            false
79          ));
80                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
81            self.system_program,
82            false
83          ));
84                      accounts.extend_from_slice(remaining_accounts);
85    let data = CreateTreasuryInstructionData::new().try_to_vec().unwrap();
86    
87    solana_instruction::Instruction {
88      program_id: crate::SATRUSH_ID,
89      accounts,
90      data,
91    }
92  }
93}
94
95#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
96 pub struct CreateTreasuryInstructionData {
97            discriminator: [u8; 8],
98      }
99
100impl CreateTreasuryInstructionData {
101  pub fn new() -> Self {
102    Self {
103                        discriminator: [254, 98, 217, 51, 25, 88, 140, 45],
104                  }
105  }
106
107    pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
108    borsh::to_vec(self)
109  }
110  }
111
112impl Default for CreateTreasuryInstructionData {
113  fn default() -> Self {
114    Self::new()
115  }
116}
117
118
119
120/// Instruction builder for `CreateTreasury`.
121///
122/// ### Accounts:
123///
124                      ///   0. `[writable, signer]` authority
125          ///   1. `[]` satrush_config
126                ///   2. `[writable]` treasury
127          ///   3. `[]` usd_mint
128                ///   4. `[writable]` treasury_usd_ata
129                ///   5. `[optional]` token_program (default to `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`)
130                ///   6. `[optional]` associated_token_program (default to `ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`)
131                ///   7. `[optional]` system_program (default to `11111111111111111111111111111111`)
132#[derive(Clone, Debug, Default)]
133pub struct CreateTreasuryBuilder {
134            authority: Option<solana_address::Address>,
135                satrush_config: Option<solana_address::Address>,
136                treasury: Option<solana_address::Address>,
137                usd_mint: Option<solana_address::Address>,
138                treasury_usd_ata: Option<solana_address::Address>,
139                token_program: Option<solana_address::Address>,
140                associated_token_program: Option<solana_address::Address>,
141                system_program: Option<solana_address::Address>,
142                __remaining_accounts: Vec<solana_instruction::AccountMeta>,
143}
144
145impl CreateTreasuryBuilder {
146  pub fn new() -> Self {
147    Self::default()
148  }
149            #[inline(always)]
150    pub fn authority(&mut self, authority: solana_address::Address) -> &mut Self {
151                        self.authority = Some(authority);
152                    self
153    }
154            #[inline(always)]
155    pub fn satrush_config(&mut self, satrush_config: solana_address::Address) -> &mut Self {
156                        self.satrush_config = Some(satrush_config);
157                    self
158    }
159            #[inline(always)]
160    pub fn treasury(&mut self, treasury: solana_address::Address) -> &mut Self {
161                        self.treasury = Some(treasury);
162                    self
163    }
164            #[inline(always)]
165    pub fn usd_mint(&mut self, usd_mint: solana_address::Address) -> &mut Self {
166                        self.usd_mint = Some(usd_mint);
167                    self
168    }
169            /// The treasury's USD fee pool — holds exactly `treasury.pending_usd_amount`.
170#[inline(always)]
171    pub fn treasury_usd_ata(&mut self, treasury_usd_ata: solana_address::Address) -> &mut Self {
172                        self.treasury_usd_ata = Some(treasury_usd_ata);
173                    self
174    }
175            /// `[optional account, default to 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA']`
176#[inline(always)]
177    pub fn token_program(&mut self, token_program: solana_address::Address) -> &mut Self {
178                        self.token_program = Some(token_program);
179                    self
180    }
181            /// `[optional account, default to 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL']`
182#[inline(always)]
183    pub fn associated_token_program(&mut self, associated_token_program: solana_address::Address) -> &mut Self {
184                        self.associated_token_program = Some(associated_token_program);
185                    self
186    }
187            /// `[optional account, default to '11111111111111111111111111111111']`
188#[inline(always)]
189    pub fn system_program(&mut self, system_program: solana_address::Address) -> &mut Self {
190                        self.system_program = Some(system_program);
191                    self
192    }
193            /// Add an additional account to the instruction.
194  #[inline(always)]
195  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
196    self.__remaining_accounts.push(account);
197    self
198  }
199  /// Add additional accounts to the instruction.
200  #[inline(always)]
201  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
202    self.__remaining_accounts.extend_from_slice(accounts);
203    self
204  }
205  #[allow(clippy::clone_on_copy)]
206  pub fn instruction(&self) -> solana_instruction::Instruction {
207    let accounts = CreateTreasury {
208                              authority: self.authority.expect("authority is not set"),
209                                        satrush_config: self.satrush_config.expect("satrush_config is not set"),
210                                        treasury: self.treasury.expect("treasury is not set"),
211                                        usd_mint: self.usd_mint.expect("usd_mint is not set"),
212                                        treasury_usd_ata: self.treasury_usd_ata.expect("treasury_usd_ata is not set"),
213                                        token_program: self.token_program.unwrap_or(solana_address::address!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")),
214                                        associated_token_program: self.associated_token_program.unwrap_or(solana_address::address!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL")),
215                                        system_program: self.system_program.unwrap_or(solana_address::address!("11111111111111111111111111111111")),
216                      };
217    
218    accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
219  }
220}
221
222  /// `create_treasury` CPI accounts.
223  pub struct CreateTreasuryCpiAccounts<'a, 'b> {
224          
225                    
226              pub authority: &'b solana_account_info::AccountInfo<'a>,
227                
228                    
229              pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
230                
231                    
232              pub treasury: &'b solana_account_info::AccountInfo<'a>,
233                
234                    
235              pub usd_mint: &'b solana_account_info::AccountInfo<'a>,
236                        /// The treasury's USD fee pool — holds exactly `treasury.pending_usd_amount`.
237
238      
239                    
240              pub treasury_usd_ata: &'b solana_account_info::AccountInfo<'a>,
241                
242                    
243              pub token_program: &'b solana_account_info::AccountInfo<'a>,
244                
245                    
246              pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
247                
248                    
249              pub system_program: &'b solana_account_info::AccountInfo<'a>,
250            }
251
252/// `create_treasury` CPI instruction.
253pub struct CreateTreasuryCpi<'a, 'b> {
254  /// The program to invoke.
255  pub __program: &'b solana_account_info::AccountInfo<'a>,
256      
257              
258          pub authority: &'b solana_account_info::AccountInfo<'a>,
259          
260              
261          pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
262          
263              
264          pub treasury: &'b solana_account_info::AccountInfo<'a>,
265          
266              
267          pub usd_mint: &'b solana_account_info::AccountInfo<'a>,
268                /// The treasury's USD fee pool — holds exactly `treasury.pending_usd_amount`.
269
270    
271              
272          pub treasury_usd_ata: &'b solana_account_info::AccountInfo<'a>,
273          
274              
275          pub token_program: &'b solana_account_info::AccountInfo<'a>,
276          
277              
278          pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
279          
280              
281          pub system_program: &'b solana_account_info::AccountInfo<'a>,
282        }
283
284impl<'a, 'b> CreateTreasuryCpi<'a, 'b> {
285  pub fn new(
286    program: &'b solana_account_info::AccountInfo<'a>,
287          accounts: CreateTreasuryCpiAccounts<'a, 'b>,
288          ) -> Self {
289    Self {
290      __program: program,
291              authority: accounts.authority,
292              satrush_config: accounts.satrush_config,
293              treasury: accounts.treasury,
294              usd_mint: accounts.usd_mint,
295              treasury_usd_ata: accounts.treasury_usd_ata,
296              token_program: accounts.token_program,
297              associated_token_program: accounts.associated_token_program,
298              system_program: accounts.system_program,
299                }
300  }
301  #[inline(always)]
302  pub fn invoke(&self) -> solana_program_error::ProgramResult {
303    self.invoke_signed_with_remaining_accounts(&[], &[])
304  }
305  #[inline(always)]
306  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
307    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
308  }
309  #[inline(always)]
310  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
311    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
312  }
313  #[allow(clippy::arithmetic_side_effects)]
314  #[allow(clippy::clone_on_copy)]
315  #[allow(clippy::vec_init_then_push)]
316  pub fn invoke_signed_with_remaining_accounts(
317    &self,
318    signers_seeds: &[&[&[u8]]],
319    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
320  ) -> solana_program_error::ProgramResult {
321    let mut accounts = Vec::with_capacity(8+ remaining_accounts.len());
322                            accounts.push(solana_instruction::AccountMeta::new(
323            *self.authority.key,
324            true
325          ));
326                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
327            *self.satrush_config.key,
328            false
329          ));
330                                          accounts.push(solana_instruction::AccountMeta::new(
331            *self.treasury.key,
332            false
333          ));
334                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
335            *self.usd_mint.key,
336            false
337          ));
338                                          accounts.push(solana_instruction::AccountMeta::new(
339            *self.treasury_usd_ata.key,
340            false
341          ));
342                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
343            *self.token_program.key,
344            false
345          ));
346                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
347            *self.associated_token_program.key,
348            false
349          ));
350                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
351            *self.system_program.key,
352            false
353          ));
354                      remaining_accounts.iter().for_each(|remaining_account| {
355      accounts.push(solana_instruction::AccountMeta {
356          pubkey: *remaining_account.0.key,
357          is_signer: remaining_account.1,
358          is_writable: remaining_account.2,
359      })
360    });
361    let data = CreateTreasuryInstructionData::new().try_to_vec().unwrap();
362    
363    let instruction = solana_instruction::Instruction {
364      program_id: crate::SATRUSH_ID,
365      accounts,
366      data,
367    };
368    let mut account_infos = Vec::with_capacity(9 + remaining_accounts.len());
369    account_infos.push(self.__program.clone());
370                  account_infos.push(self.authority.clone());
371                        account_infos.push(self.satrush_config.clone());
372                        account_infos.push(self.treasury.clone());
373                        account_infos.push(self.usd_mint.clone());
374                        account_infos.push(self.treasury_usd_ata.clone());
375                        account_infos.push(self.token_program.clone());
376                        account_infos.push(self.associated_token_program.clone());
377                        account_infos.push(self.system_program.clone());
378              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
379
380    if signers_seeds.is_empty() {
381      solana_cpi::invoke(&instruction, &account_infos)
382    } else {
383      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
384    }
385  }
386}
387
388/// Instruction builder for `CreateTreasury` via CPI.
389///
390/// ### Accounts:
391///
392                      ///   0. `[writable, signer]` authority
393          ///   1. `[]` satrush_config
394                ///   2. `[writable]` treasury
395          ///   3. `[]` usd_mint
396                ///   4. `[writable]` treasury_usd_ata
397          ///   5. `[]` token_program
398          ///   6. `[]` associated_token_program
399          ///   7. `[]` system_program
400#[derive(Clone, Debug)]
401pub struct CreateTreasuryCpiBuilder<'a, 'b> {
402  instruction: Box<CreateTreasuryCpiBuilderInstruction<'a, 'b>>,
403}
404
405impl<'a, 'b> CreateTreasuryCpiBuilder<'a, 'b> {
406  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
407    let instruction = Box::new(CreateTreasuryCpiBuilderInstruction {
408      __program: program,
409              authority: None,
410              satrush_config: None,
411              treasury: None,
412              usd_mint: None,
413              treasury_usd_ata: None,
414              token_program: None,
415              associated_token_program: None,
416              system_program: None,
417                                __remaining_accounts: Vec::new(),
418    });
419    Self { instruction }
420  }
421      #[inline(always)]
422    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
423                        self.instruction.authority = Some(authority);
424                    self
425    }
426      #[inline(always)]
427    pub fn satrush_config(&mut self, satrush_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
428                        self.instruction.satrush_config = Some(satrush_config);
429                    self
430    }
431      #[inline(always)]
432    pub fn treasury(&mut self, treasury: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
433                        self.instruction.treasury = Some(treasury);
434                    self
435    }
436      #[inline(always)]
437    pub fn usd_mint(&mut self, usd_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
438                        self.instruction.usd_mint = Some(usd_mint);
439                    self
440    }
441      /// The treasury's USD fee pool — holds exactly `treasury.pending_usd_amount`.
442#[inline(always)]
443    pub fn treasury_usd_ata(&mut self, treasury_usd_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
444                        self.instruction.treasury_usd_ata = Some(treasury_usd_ata);
445                    self
446    }
447      #[inline(always)]
448    pub fn token_program(&mut self, token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
449                        self.instruction.token_program = Some(token_program);
450                    self
451    }
452      #[inline(always)]
453    pub fn associated_token_program(&mut self, associated_token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
454                        self.instruction.associated_token_program = Some(associated_token_program);
455                    self
456    }
457      #[inline(always)]
458    pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
459                        self.instruction.system_program = Some(system_program);
460                    self
461    }
462            /// Add an additional account to the instruction.
463  #[inline(always)]
464  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
465    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
466    self
467  }
468  /// Add additional accounts to the instruction.
469  ///
470  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
471  /// and a `bool` indicating whether the account is a signer or not.
472  #[inline(always)]
473  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
474    self.instruction.__remaining_accounts.extend_from_slice(accounts);
475    self
476  }
477  #[inline(always)]
478  pub fn invoke(&self) -> solana_program_error::ProgramResult {
479    self.invoke_signed(&[])
480  }
481  #[allow(clippy::clone_on_copy)]
482  #[allow(clippy::vec_init_then_push)]
483  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
484        let instruction = CreateTreasuryCpi {
485        __program: self.instruction.__program,
486                  
487          authority: self.instruction.authority.expect("authority is not set"),
488                  
489          satrush_config: self.instruction.satrush_config.expect("satrush_config is not set"),
490                  
491          treasury: self.instruction.treasury.expect("treasury is not set"),
492                  
493          usd_mint: self.instruction.usd_mint.expect("usd_mint is not set"),
494                  
495          treasury_usd_ata: self.instruction.treasury_usd_ata.expect("treasury_usd_ata is not set"),
496                  
497          token_program: self.instruction.token_program.expect("token_program is not set"),
498                  
499          associated_token_program: self.instruction.associated_token_program.expect("associated_token_program is not set"),
500                  
501          system_program: self.instruction.system_program.expect("system_program is not set"),
502                    };
503    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
504  }
505}
506
507#[derive(Clone, Debug)]
508struct CreateTreasuryCpiBuilderInstruction<'a, 'b> {
509  __program: &'b solana_account_info::AccountInfo<'a>,
510            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
511                satrush_config: Option<&'b solana_account_info::AccountInfo<'a>>,
512                treasury: Option<&'b solana_account_info::AccountInfo<'a>>,
513                usd_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
514                treasury_usd_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
515                token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
516                associated_token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
517                system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
518                /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
519  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
520}
521