|
@@ -0,0 +1,483 @@
|
|
|
+//! This code was AUTOGENERATED using the codama library.
|
|
|
+//! Please DO NOT EDIT THIS FILE, instead use visitors
|
|
|
+//! to add features, then rerun codama to update it.
|
|
|
+//!
|
|
|
+//! <https://github.com/codama-idl/codama>
|
|
|
+//!
|
|
|
+
|
|
|
+use borsh::BorshDeserialize;
|
|
|
+use borsh::BorshSerialize;
|
|
|
+
|
|
|
+/// Accounts.
|
|
|
+#[derive(Debug)]
|
|
|
+pub struct SetupExtraMetas {
|
|
|
+ pub authority: solana_program::pubkey::Pubkey,
|
|
|
+
|
|
|
+ pub config: solana_program::pubkey::Pubkey,
|
|
|
+
|
|
|
+ pub mint: solana_program::pubkey::Pubkey,
|
|
|
+
|
|
|
+ pub extra_metas: solana_program::pubkey::Pubkey,
|
|
|
+
|
|
|
+ pub system_program: solana_program::pubkey::Pubkey,
|
|
|
+}
|
|
|
+
|
|
|
+impl SetupExtraMetas {
|
|
|
+ pub fn instruction(
|
|
|
+ &self,
|
|
|
+ args: SetupExtraMetasInstructionArgs,
|
|
|
+ ) -> solana_program::instruction::Instruction {
|
|
|
+ self.instruction_with_remaining_accounts(args, &[])
|
|
|
+ }
|
|
|
+ #[allow(clippy::arithmetic_side_effects)]
|
|
|
+ #[allow(clippy::vec_init_then_push)]
|
|
|
+ pub fn instruction_with_remaining_accounts(
|
|
|
+ &self,
|
|
|
+ args: SetupExtraMetasInstructionArgs,
|
|
|
+ remaining_accounts: &[solana_program::instruction::AccountMeta],
|
|
|
+ ) -> solana_program::instruction::Instruction {
|
|
|
+ let mut accounts = Vec::with_capacity(5 + remaining_accounts.len());
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new(
|
|
|
+ self.authority,
|
|
|
+ true,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new_readonly(
|
|
|
+ self.config,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new_readonly(
|
|
|
+ self.mint, false,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new(
|
|
|
+ self.extra_metas,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new_readonly(
|
|
|
+ self.system_program,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ accounts.extend_from_slice(remaining_accounts);
|
|
|
+ let mut data = borsh::to_vec(&SetupExtraMetasInstructionData::new()).unwrap();
|
|
|
+ let mut args = borsh::to_vec(&args).unwrap();
|
|
|
+ data.append(&mut args);
|
|
|
+
|
|
|
+ solana_program::instruction::Instruction {
|
|
|
+ program_id: crate::BLOCK_LIST_ID,
|
|
|
+ accounts,
|
|
|
+ data,
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
|
|
|
+#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
|
+pub struct SetupExtraMetasInstructionData {
|
|
|
+ discriminator: u8,
|
|
|
+}
|
|
|
+
|
|
|
+impl SetupExtraMetasInstructionData {
|
|
|
+ pub fn new() -> Self {
|
|
|
+ Self { discriminator: 106 }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+impl Default for SetupExtraMetasInstructionData {
|
|
|
+ fn default() -> Self {
|
|
|
+ Self::new()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
|
|
|
+#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
|
|
+pub struct SetupExtraMetasInstructionArgs {
|
|
|
+ pub check_both_wallets: bool,
|
|
|
+}
|
|
|
+
|
|
|
+/// Instruction builder for `SetupExtraMetas`.
|
|
|
+///
|
|
|
+/// ### Accounts:
|
|
|
+///
|
|
|
+/// 0. `[writable, signer]` authority
|
|
|
+/// 1. `[]` config
|
|
|
+/// 2. `[]` mint
|
|
|
+/// 3. `[writable]` extra_metas
|
|
|
+/// 4. `[optional]` system_program (default to `11111111111111111111111111111111`)
|
|
|
+#[derive(Clone, Debug, Default)]
|
|
|
+pub struct SetupExtraMetasBuilder {
|
|
|
+ authority: Option<solana_program::pubkey::Pubkey>,
|
|
|
+ config: Option<solana_program::pubkey::Pubkey>,
|
|
|
+ mint: Option<solana_program::pubkey::Pubkey>,
|
|
|
+ extra_metas: Option<solana_program::pubkey::Pubkey>,
|
|
|
+ system_program: Option<solana_program::pubkey::Pubkey>,
|
|
|
+ check_both_wallets: Option<bool>,
|
|
|
+ __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
|
|
|
+}
|
|
|
+
|
|
|
+impl SetupExtraMetasBuilder {
|
|
|
+ pub fn new() -> Self {
|
|
|
+ Self::default()
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn authority(&mut self, authority: solana_program::pubkey::Pubkey) -> &mut Self {
|
|
|
+ self.authority = Some(authority);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn config(&mut self, config: solana_program::pubkey::Pubkey) -> &mut Self {
|
|
|
+ self.config = Some(config);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn mint(&mut self, mint: solana_program::pubkey::Pubkey) -> &mut Self {
|
|
|
+ self.mint = Some(mint);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn extra_metas(&mut self, extra_metas: solana_program::pubkey::Pubkey) -> &mut Self {
|
|
|
+ self.extra_metas = Some(extra_metas);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// `[optional account, default to '11111111111111111111111111111111']`
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn system_program(&mut self, system_program: solana_program::pubkey::Pubkey) -> &mut Self {
|
|
|
+ self.system_program = Some(system_program);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// `[optional argument, defaults to 'false']`
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn check_both_wallets(&mut self, check_both_wallets: bool) -> &mut Self {
|
|
|
+ self.check_both_wallets = Some(check_both_wallets);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// Add an additional account to the instruction.
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn add_remaining_account(
|
|
|
+ &mut self,
|
|
|
+ account: solana_program::instruction::AccountMeta,
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.__remaining_accounts.push(account);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// Add additional accounts to the instruction.
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn add_remaining_accounts(
|
|
|
+ &mut self,
|
|
|
+ accounts: &[solana_program::instruction::AccountMeta],
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.__remaining_accounts.extend_from_slice(accounts);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[allow(clippy::clone_on_copy)]
|
|
|
+ pub fn instruction(&self) -> solana_program::instruction::Instruction {
|
|
|
+ let accounts = SetupExtraMetas {
|
|
|
+ authority: self.authority.expect("authority is not set"),
|
|
|
+ config: self.config.expect("config is not set"),
|
|
|
+ mint: self.mint.expect("mint is not set"),
|
|
|
+ extra_metas: self.extra_metas.expect("extra_metas is not set"),
|
|
|
+ system_program: self
|
|
|
+ .system_program
|
|
|
+ .unwrap_or(solana_program::pubkey!("11111111111111111111111111111111")),
|
|
|
+ };
|
|
|
+ let args = SetupExtraMetasInstructionArgs {
|
|
|
+ check_both_wallets: self.check_both_wallets.clone().unwrap_or(false),
|
|
|
+ };
|
|
|
+
|
|
|
+ accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/// `setup_extra_metas` CPI accounts.
|
|
|
+pub struct SetupExtraMetasCpiAccounts<'a, 'b> {
|
|
|
+ pub authority: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub config: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub mint: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub extra_metas: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+}
|
|
|
+
|
|
|
+/// `setup_extra_metas` CPI instruction.
|
|
|
+pub struct SetupExtraMetasCpi<'a, 'b> {
|
|
|
+ /// The program to invoke.
|
|
|
+ pub __program: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub authority: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub config: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub mint: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub extra_metas: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+
|
|
|
+ pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ /// The arguments for the instruction.
|
|
|
+ pub __args: SetupExtraMetasInstructionArgs,
|
|
|
+}
|
|
|
+
|
|
|
+impl<'a, 'b> SetupExtraMetasCpi<'a, 'b> {
|
|
|
+ pub fn new(
|
|
|
+ program: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ accounts: SetupExtraMetasCpiAccounts<'a, 'b>,
|
|
|
+ args: SetupExtraMetasInstructionArgs,
|
|
|
+ ) -> Self {
|
|
|
+ Self {
|
|
|
+ __program: program,
|
|
|
+ authority: accounts.authority,
|
|
|
+ config: accounts.config,
|
|
|
+ mint: accounts.mint,
|
|
|
+ extra_metas: accounts.extra_metas,
|
|
|
+ system_program: accounts.system_program,
|
|
|
+ __args: args,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
|
|
|
+ self.invoke_signed_with_remaining_accounts(&[], &[])
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn invoke_with_remaining_accounts(
|
|
|
+ &self,
|
|
|
+ remaining_accounts: &[(
|
|
|
+ &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ bool,
|
|
|
+ bool,
|
|
|
+ )],
|
|
|
+ ) -> solana_program::entrypoint::ProgramResult {
|
|
|
+ self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn invoke_signed(
|
|
|
+ &self,
|
|
|
+ signers_seeds: &[&[&[u8]]],
|
|
|
+ ) -> solana_program::entrypoint::ProgramResult {
|
|
|
+ self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
|
|
|
+ }
|
|
|
+ #[allow(clippy::arithmetic_side_effects)]
|
|
|
+ #[allow(clippy::clone_on_copy)]
|
|
|
+ #[allow(clippy::vec_init_then_push)]
|
|
|
+ pub fn invoke_signed_with_remaining_accounts(
|
|
|
+ &self,
|
|
|
+ signers_seeds: &[&[&[u8]]],
|
|
|
+ remaining_accounts: &[(
|
|
|
+ &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ bool,
|
|
|
+ bool,
|
|
|
+ )],
|
|
|
+ ) -> solana_program::entrypoint::ProgramResult {
|
|
|
+ let mut accounts = Vec::with_capacity(5 + remaining_accounts.len());
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new(
|
|
|
+ *self.authority.key,
|
|
|
+ true,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new_readonly(
|
|
|
+ *self.config.key,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new_readonly(
|
|
|
+ *self.mint.key,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new(
|
|
|
+ *self.extra_metas.key,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta::new_readonly(
|
|
|
+ *self.system_program.key,
|
|
|
+ false,
|
|
|
+ ));
|
|
|
+ remaining_accounts.iter().for_each(|remaining_account| {
|
|
|
+ accounts.push(solana_program::instruction::AccountMeta {
|
|
|
+ pubkey: *remaining_account.0.key,
|
|
|
+ is_signer: remaining_account.1,
|
|
|
+ is_writable: remaining_account.2,
|
|
|
+ })
|
|
|
+ });
|
|
|
+ let mut data = borsh::to_vec(&SetupExtraMetasInstructionData::new()).unwrap();
|
|
|
+ let mut args = borsh::to_vec(&self.__args).unwrap();
|
|
|
+ data.append(&mut args);
|
|
|
+
|
|
|
+ let instruction = solana_program::instruction::Instruction {
|
|
|
+ program_id: crate::BLOCK_LIST_ID,
|
|
|
+ accounts,
|
|
|
+ data,
|
|
|
+ };
|
|
|
+ let mut account_infos = Vec::with_capacity(6 + remaining_accounts.len());
|
|
|
+ account_infos.push(self.__program.clone());
|
|
|
+ account_infos.push(self.authority.clone());
|
|
|
+ account_infos.push(self.config.clone());
|
|
|
+ account_infos.push(self.mint.clone());
|
|
|
+ account_infos.push(self.extra_metas.clone());
|
|
|
+ account_infos.push(self.system_program.clone());
|
|
|
+ remaining_accounts
|
|
|
+ .iter()
|
|
|
+ .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
|
|
|
+
|
|
|
+ if signers_seeds.is_empty() {
|
|
|
+ solana_program::program::invoke(&instruction, &account_infos)
|
|
|
+ } else {
|
|
|
+ solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/// Instruction builder for `SetupExtraMetas` via CPI.
|
|
|
+///
|
|
|
+/// ### Accounts:
|
|
|
+///
|
|
|
+/// 0. `[writable, signer]` authority
|
|
|
+/// 1. `[]` config
|
|
|
+/// 2. `[]` mint
|
|
|
+/// 3. `[writable]` extra_metas
|
|
|
+/// 4. `[]` system_program
|
|
|
+#[derive(Clone, Debug)]
|
|
|
+pub struct SetupExtraMetasCpiBuilder<'a, 'b> {
|
|
|
+ instruction: Box<SetupExtraMetasCpiBuilderInstruction<'a, 'b>>,
|
|
|
+}
|
|
|
+
|
|
|
+impl<'a, 'b> SetupExtraMetasCpiBuilder<'a, 'b> {
|
|
|
+ pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
|
|
|
+ let instruction = Box::new(SetupExtraMetasCpiBuilderInstruction {
|
|
|
+ __program: program,
|
|
|
+ authority: None,
|
|
|
+ config: None,
|
|
|
+ mint: None,
|
|
|
+ extra_metas: None,
|
|
|
+ system_program: None,
|
|
|
+ check_both_wallets: None,
|
|
|
+ __remaining_accounts: Vec::new(),
|
|
|
+ });
|
|
|
+ Self { instruction }
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn authority(
|
|
|
+ &mut self,
|
|
|
+ authority: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.instruction.authority = Some(authority);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn config(
|
|
|
+ &mut self,
|
|
|
+ config: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.instruction.config = Some(config);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn mint(&mut self, mint: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
|
|
|
+ self.instruction.mint = Some(mint);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn extra_metas(
|
|
|
+ &mut self,
|
|
|
+ extra_metas: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.instruction.extra_metas = Some(extra_metas);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn system_program(
|
|
|
+ &mut self,
|
|
|
+ system_program: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.instruction.system_program = Some(system_program);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// `[optional argument, defaults to 'false']`
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn check_both_wallets(&mut self, check_both_wallets: bool) -> &mut Self {
|
|
|
+ self.instruction.check_both_wallets = Some(check_both_wallets);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// Add an additional account to the instruction.
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn add_remaining_account(
|
|
|
+ &mut self,
|
|
|
+ account: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ is_writable: bool,
|
|
|
+ is_signer: bool,
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.instruction
|
|
|
+ .__remaining_accounts
|
|
|
+ .push((account, is_writable, is_signer));
|
|
|
+ self
|
|
|
+ }
|
|
|
+ /// Add additional accounts to the instruction.
|
|
|
+ ///
|
|
|
+ /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
|
|
|
+ /// and a `bool` indicating whether the account is a signer or not.
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn add_remaining_accounts(
|
|
|
+ &mut self,
|
|
|
+ accounts: &[(
|
|
|
+ &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ bool,
|
|
|
+ bool,
|
|
|
+ )],
|
|
|
+ ) -> &mut Self {
|
|
|
+ self.instruction
|
|
|
+ .__remaining_accounts
|
|
|
+ .extend_from_slice(accounts);
|
|
|
+ self
|
|
|
+ }
|
|
|
+ #[inline(always)]
|
|
|
+ pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
|
|
|
+ self.invoke_signed(&[])
|
|
|
+ }
|
|
|
+ #[allow(clippy::clone_on_copy)]
|
|
|
+ #[allow(clippy::vec_init_then_push)]
|
|
|
+ pub fn invoke_signed(
|
|
|
+ &self,
|
|
|
+ signers_seeds: &[&[&[u8]]],
|
|
|
+ ) -> solana_program::entrypoint::ProgramResult {
|
|
|
+ let args = SetupExtraMetasInstructionArgs {
|
|
|
+ check_both_wallets: self.instruction.check_both_wallets.clone().unwrap_or(false),
|
|
|
+ };
|
|
|
+ let instruction = SetupExtraMetasCpi {
|
|
|
+ __program: self.instruction.__program,
|
|
|
+
|
|
|
+ authority: self.instruction.authority.expect("authority is not set"),
|
|
|
+
|
|
|
+ config: self.instruction.config.expect("config is not set"),
|
|
|
+
|
|
|
+ mint: self.instruction.mint.expect("mint is not set"),
|
|
|
+
|
|
|
+ extra_metas: self
|
|
|
+ .instruction
|
|
|
+ .extra_metas
|
|
|
+ .expect("extra_metas is not set"),
|
|
|
+
|
|
|
+ system_program: self
|
|
|
+ .instruction
|
|
|
+ .system_program
|
|
|
+ .expect("system_program is not set"),
|
|
|
+ __args: args,
|
|
|
+ };
|
|
|
+ instruction.invoke_signed_with_remaining_accounts(
|
|
|
+ signers_seeds,
|
|
|
+ &self.instruction.__remaining_accounts,
|
|
|
+ )
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[derive(Clone, Debug)]
|
|
|
+struct SetupExtraMetasCpiBuilderInstruction<'a, 'b> {
|
|
|
+ __program: &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ authority: Option<&'b solana_program::account_info::AccountInfo<'a>>,
|
|
|
+ config: Option<&'b solana_program::account_info::AccountInfo<'a>>,
|
|
|
+ mint: Option<&'b solana_program::account_info::AccountInfo<'a>>,
|
|
|
+ extra_metas: Option<&'b solana_program::account_info::AccountInfo<'a>>,
|
|
|
+ system_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
|
|
|
+ check_both_wallets: Option<bool>,
|
|
|
+ /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
|
|
|
+ __remaining_accounts: Vec<(
|
|
|
+ &'b solana_program::account_info::AccountInfo<'a>,
|
|
|
+ bool,
|
|
|
+ bool,
|
|
|
+ )>,
|
|
|
+}
|