From f6fd3ea080e8fb18ecd530ee40f2aa13407ee6c8 Mon Sep 17 00:00:00 2001 From: Aursen Date: Wed, 3 Dec 2025 09:52:17 +0700 Subject: [PATCH 01/15] lang: Remove AccountInfo from Context --- lang/attribute/event/src/lib.rs | 4 +- lang/derive/accounts/src/lib.rs | 12 +- lang/src/accounts/account_info.rs | 29 +- lang/src/accounts/account_loader.rs | 2 +- lang/src/accounts/mod.rs | 3 +- lang/src/accounts/unchecked_account.rs | 6 +- lang/src/common.rs | 5 +- lang/src/system_program.rs | 150 ++++++---- lang/src/vec.rs | 4 +- lang/syn/src/codegen/accounts/constraints.rs | 1 - lang/syn/src/codegen/accounts/try_accounts.rs | 13 +- lang/syn/src/codegen/program/idl.rs | 10 +- lang/syn/src/lib.rs | 9 - lang/syn/src/parser/accounts/mod.rs | 1 - lang/tests/generics_test.rs | 2 +- spl/src/associated_token.rs | 42 ++- spl/src/metadata.rs | 264 +++++++++--------- spl/src/stake.rs | 24 +- spl/src/token.rs | 196 +++++++------ spl/src/token_2022.rs | 241 +++++++++------- spl/src/token_2022_extensions/cpi_guard.rs | 24 +- .../default_account_state.rs | 27 +- .../group_member_pointer.rs | 27 +- .../token_2022_extensions/group_pointer.rs | 26 +- .../token_2022_extensions/immutable_owner.rs | 15 +- .../interest_bearing_mint.rs | 27 +- .../token_2022_extensions/memo_transfer.rs | 24 +- .../token_2022_extensions/metadata_pointer.rs | 15 +- .../mint_close_authority.rs | 15 +- .../token_2022_extensions/non_transferable.rs | 15 +- .../permanent_delegate.rs | 15 +- spl/src/token_2022_extensions/token_group.rs | 46 ++- .../token_2022_extensions/token_metadata.rs | 52 ++-- spl/src/token_2022_extensions/transfer_fee.rs | 88 +++--- .../token_2022_extensions/transfer_hook.rs | 27 +- .../programs/auction-house/src/lib.rs | 14 +- tests/bench/programs/bench/src/lib.rs | 30 +- .../programs/cashiers-check/src/lib.rs | 18 +- tests/chat/programs/chat/src/lib.rs | 2 +- .../programs/native-system/src/lib.rs | 26 +- tests/errors/programs/errors/src/lib.rs | 6 +- tests/escrow/programs/escrow/src/lib.rs | 10 +- tests/ido-pool/programs/ido-pool/src/lib.rs | 4 +- tests/lockup/programs/lockup/src/lib.rs | 22 +- tests/lockup/programs/registry/src/lib.rs | 72 ++--- .../programs/misc-optional/src/context.rs | 16 +- tests/misc/programs/misc/src/context.rs | 108 +++---- tests/multisig/programs/multisig/src/lib.rs | 4 +- .../programs/pda-derivation/src/lib.rs | 4 +- tests/pyth/programs/pyth/src/lib.rs | 4 +- .../programs/account-info/src/lib.rs | 2 +- .../programs/ignore-non-accounts/src/lib.rs | 6 +- .../signature-verification-test/src/lib.rs | 6 +- .../programs/token-extensions/src/utils.rs | 6 +- .../programs/token-proxy/src/lib.rs | 12 +- .../programs/token-wrapper/src/lib.rs | 6 +- tests/swap/programs/swap/src/lib.rs | 52 ++-- tests/zero-copy/programs/zero-copy/src/lib.rs | 2 +- tests/zero-copy/programs/zero-cpi/src/lib.rs | 2 +- .../program/lib.rs | 22 +- ts/packages/spl-binary-option/program/lib.rs | 46 +-- .../spl-binary-oracle-pair/program/lib.rs | 48 ++-- .../spl-feature-proposal/program/lib.rs | 14 +- ts/packages/spl-governance/program/lib.rs | 202 +++++++------- ts/packages/spl-name-service/program/lib.rs | 20 +- ts/packages/spl-record/program/lib.rs | 14 +- ts/packages/spl-stake-pool/program/lib.rs | 224 +++++++-------- ts/packages/spl-stateless-asks/program/lib.rs | 16 +- ts/packages/spl-token-lending/program/lib.rs | 152 +++++----- ts/packages/spl-token-swap/program/lib.rs | 94 +++---- ts/packages/spl-token/program/lib.rs | 88 +++--- 71 files changed, 1447 insertions(+), 1388 deletions(-) diff --git a/lang/attribute/event/src/lib.rs b/lang/attribute/event/src/lib.rs index ba5085998f..b194ff4054 100644 --- a/lang/attribute/event/src/lib.rs +++ b/lang/attribute/event/src/lib.rs @@ -215,9 +215,9 @@ pub fn emit_cpi(input: proc_macro::TokenStream) -> proc_macro::TokenStream { /// pub signer: Signer<'info>, /// /// CHECK: Only the event authority can invoke self-CPI /// #[account(seeds = [b"__event_authority"], bump)] -/// pub event_authority: AccountInfo<'info>, +/// pub event_authority: UncheckedAccount<'info>, /// /// CHECK: Self-CPI will fail if the program is not the current program -/// pub program: AccountInfo<'info>, +/// pub program: UncheckedAccount<'info>, /// } /// ``` /// diff --git a/lang/derive/accounts/src/lib.rs b/lang/derive/accounts/src/lib.rs index 7cfb19479b..85238f0798 100644 --- a/lang/derive/accounts/src/lib.rs +++ b/lang/derive/accounts/src/lib.rs @@ -65,7 +65,7 @@ use syn::parse_macro_input; /// Example: ///

 /// #[account(signer)]
-/// pub authority: AccountInfo<'info>,
+/// pub authority: UncheckedAccount<'info>,
 /// #[account(signer @ MyError::MyErrorCode)]
 /// pub payer: AccountInfo<'info>
 ///                 
@@ -174,13 +174,13 @@ use syn::parse_macro_input; ///         init, payer = payer, ///         space = 8 + 8, owner = other_program.key() ///     )] -///     pub account_for_other_program: AccountInfo<'info>, +///     pub account_for_other_program: UncheckedAccount<'info>, ///     #[account( ///         init, payer = payer, space = 8 + 8, ///         owner = other_program.key(), ///         seeds = [b"other_seed"], bump ///     )] -///     pub pda_for_other_program: AccountInfo<'info>, +///     pub pda_for_other_program: UncheckedAccount<'info>, ///     #[account(mut)] ///     pub payer: Signer<'info>, ///     pub system_program: Program<'info, System>, @@ -255,13 +255,13 @@ use syn::parse_macro_input; /// #[instruction(first_bump: u8, second_bump: u8)] /// pub struct Example { /// #[account(seeds = [b"example_seed"], bump)] -/// pub canonical_pda: AccountInfo<'info>, +/// pub canonical_pda: UncheckedAccount<'info>, /// #[account( /// seeds = [b"example_seed"], /// bump, /// seeds::program = other_program.key() /// )] -/// pub canonical_pda_two: AccountInfo<'info>, +/// pub canonical_pda_two: UncheckedAccount<'info>, /// #[account(seeds = [b"other_seed"], bump = first_bump)] /// pub arbitrary_pda: AccountInfo<'info> /// #[account( @@ -269,7 +269,7 @@ use syn::parse_macro_input; /// bump = second_bump, /// seeds::program = other_program.key() /// )] -/// pub arbitrary_pda_two: AccountInfo<'info>, +/// pub arbitrary_pda_two: UncheckedAccount<'info>, /// pub other_program: Program<'info, OtherProgram> /// } /// diff --git a/lang/src/accounts/account_info.rs b/lang/src/accounts/account_info.rs index 40667a5af1..ed553ff015 100644 --- a/lang/src/accounts/account_info.rs +++ b/lang/src/accounts/account_info.rs @@ -1,32 +1,9 @@ -//! AccountInfo can be used as a type but -//! [Unchecked Account](crate::accounts::unchecked_account::UncheckedAccount) -//! should be used instead. - -use crate::error::ErrorCode; use crate::solana_program::account_info::AccountInfo; use crate::solana_program::instruction::AccountMeta; use crate::solana_program::pubkey::Pubkey; -use crate::{Accounts, AccountsExit, Key, Result, ToAccountInfos, ToAccountMetas}; -use std::collections::BTreeSet; +use crate::{Key, ToAccountInfos, ToAccountMetas}; -impl<'info, B> Accounts<'info, B> for AccountInfo<'info> { - fn try_accounts( - _program_id: &Pubkey, - accounts: &mut &[AccountInfo<'info>], - _ix_data: &[u8], - _bumps: &mut B, - _reallocs: &mut BTreeSet, - ) -> Result { - if accounts.is_empty() { - return Err(ErrorCode::AccountNotEnoughKeys.into()); - } - let account = &accounts[0]; - *accounts = &accounts[1..]; - Ok(account.clone()) - } -} - -impl ToAccountMetas for AccountInfo<'_> { +impl<'info> ToAccountMetas for AccountInfo<'info> { fn to_account_metas(&self, is_signer: Option) -> Vec { let is_signer = is_signer.unwrap_or(self.is_signer); let meta = match self.is_writable { @@ -43,8 +20,6 @@ impl<'info> ToAccountInfos<'info> for AccountInfo<'info> { } } -impl<'info> AccountsExit<'info> for AccountInfo<'info> {} - impl Key for AccountInfo<'_> { fn key(&self) -> Pubkey { *self.key diff --git a/lang/src/accounts/account_loader.rs b/lang/src/accounts/account_loader.rs index 4746c54b32..6ba015045b 100644 --- a/lang/src/accounts/account_loader.rs +++ b/lang/src/accounts/account_loader.rs @@ -79,7 +79,7 @@ use std::ops::DerefMut; /// bar: AccountLoader<'info, Bar>, /// #[account(mut)] /// authority: Signer<'info>, -/// system_program: AccountInfo<'info>, +/// system_program: UncheckedAccount<'info>, /// } /// /// #[derive(Accounts)] diff --git a/lang/src/accounts/mod.rs b/lang/src/accounts/mod.rs index 7f92e3cd15..d3a4b06715 100644 --- a/lang/src/accounts/mod.rs +++ b/lang/src/accounts/mod.rs @@ -1,7 +1,8 @@ //! Account types that can be used in the account validation struct. +mod account_info; + pub mod account; -pub mod account_info; pub mod account_loader; pub mod boxed; pub mod interface; diff --git a/lang/src/accounts/unchecked_account.rs b/lang/src/accounts/unchecked_account.rs index 350090c0c1..79680821c0 100644 --- a/lang/src/accounts/unchecked_account.rs +++ b/lang/src/accounts/unchecked_account.rs @@ -14,9 +14,9 @@ use std::ops::Deref; #[derive(Debug, Clone)] pub struct UncheckedAccount<'info>(&'info AccountInfo<'info>); -impl<'info> UncheckedAccount<'info> { - pub fn try_from(acc_info: &'info AccountInfo<'info>) -> Self { - Self(acc_info) +impl<'info> From<&'info AccountInfo<'info>> for UncheckedAccount<'info> { + fn from(value: &'info AccountInfo<'info>) -> Self { + Self(value) } } diff --git a/lang/src/common.rs b/lang/src/common.rs index 7683ca1440..f40f7ec948 100644 --- a/lang/src/common.rs +++ b/lang/src/common.rs @@ -3,7 +3,10 @@ use crate::solana_program::account_info::AccountInfo; use crate::solana_program::system_program; use crate::Result; -pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info>) -> Result<()> { +pub fn close<'info>( + info: UncheckedAccount<'info>, + sol_destination: AccountInfo<'info>, +) -> Result<()> { // Transfer tokens from the account to the sol_destination. let dest_starting_lamports = sol_destination.lamports(); **sol_destination.lamports.borrow_mut() = diff --git a/lang/src/system_program.rs b/lang/src/system_program.rs index 5af169c68a..8fdcdd5de5 100644 --- a/lang/src/system_program.rs +++ b/lang/src/system_program.rs @@ -24,9 +24,9 @@ pub fn advance_nonce_account<'info>( crate::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.nonce, - ctx.accounts.recent_blockhashes, - ctx.accounts.authorized, + ctx.accounts.nonce.to_account_info(), + ctx.accounts.recent_blockhashes.to_account_info(), + ctx.accounts.authorized.to_account_info(), ], ctx.signer_seeds, ) @@ -35,9 +35,9 @@ pub fn advance_nonce_account<'info>( #[derive(Accounts)] pub struct AdvanceNonceAccount<'info> { - pub nonce: AccountInfo<'info>, - pub authorized: AccountInfo<'info>, - pub recent_blockhashes: AccountInfo<'info>, + pub nonce: UncheckedAccount<'info>, + pub authorized: UncheckedAccount<'info>, + pub recent_blockhashes: UncheckedAccount<'info>, } pub fn allocate<'info>( @@ -50,7 +50,7 @@ pub fn allocate<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_to_allocate], + &[ctx.accounts.account_to_allocate.to_account_info()], ctx.signer_seeds, ) .map_err(Into::into) @@ -58,7 +58,7 @@ pub fn allocate<'info>( #[derive(Accounts)] pub struct Allocate<'info> { - pub account_to_allocate: AccountInfo<'info>, + pub account_to_allocate: UncheckedAccount<'info>, } pub fn allocate_with_seed<'info>( @@ -76,7 +76,10 @@ pub fn allocate_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_to_allocate, ctx.accounts.base], + &[ + ctx.accounts.account_to_allocate.to_account_info(), + ctx.accounts.base.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -84,8 +87,8 @@ pub fn allocate_with_seed<'info>( #[derive(Accounts)] pub struct AllocateWithSeed<'info> { - pub account_to_allocate: AccountInfo<'info>, - pub base: AccountInfo<'info>, + pub account_to_allocate: UncheckedAccount<'info>, + pub base: UncheckedAccount<'info>, } pub fn assign<'info>( @@ -98,7 +101,7 @@ pub fn assign<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_to_assign], + &[ctx.accounts.account_to_assign.to_account_info()], ctx.signer_seeds, ) .map_err(Into::into) @@ -106,7 +109,7 @@ pub fn assign<'info>( #[derive(Accounts)] pub struct Assign<'info> { - pub account_to_assign: AccountInfo<'info>, + pub account_to_assign: UncheckedAccount<'info>, } pub fn assign_with_seed<'info>( @@ -122,7 +125,10 @@ pub fn assign_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_to_assign, ctx.accounts.base], + &[ + ctx.accounts.account_to_assign.to_account_info(), + ctx.accounts.base.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -130,8 +136,8 @@ pub fn assign_with_seed<'info>( #[derive(Accounts)] pub struct AssignWithSeed<'info> { - pub account_to_assign: AccountInfo<'info>, - pub base: AccountInfo<'info>, + pub account_to_assign: UncheckedAccount<'info>, + pub base: UncheckedAccount<'info>, } pub fn authorize_nonce_account<'info>( @@ -145,7 +151,10 @@ pub fn authorize_nonce_account<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.nonce, ctx.accounts.authorized], + &[ + ctx.accounts.nonce.to_account_info(), + ctx.accounts.authorized.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -153,8 +162,8 @@ pub fn authorize_nonce_account<'info>( #[derive(Accounts)] pub struct AuthorizeNonceAccount<'info> { - pub nonce: AccountInfo<'info>, - pub authorized: AccountInfo<'info>, + pub nonce: UncheckedAccount<'info>, + pub authorized: UncheckedAccount<'info>, } pub fn create_account<'info>( @@ -172,7 +181,10 @@ pub fn create_account<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.to], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.to.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -180,8 +192,8 @@ pub fn create_account<'info>( #[derive(Accounts)] pub struct CreateAccount<'info> { - pub from: AccountInfo<'info>, - pub to: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, } pub fn create_account_with_seed<'info>( @@ -202,7 +214,11 @@ pub fn create_account_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.base], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.to.to_account_info(), + ctx.accounts.base.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -210,9 +226,9 @@ pub fn create_account_with_seed<'info>( #[derive(Accounts)] pub struct CreateAccountWithSeed<'info> { - pub from: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub base: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub base: UncheckedAccount<'info>, } pub fn create_nonce_account<'info>( @@ -228,16 +244,19 @@ pub fn create_nonce_account<'info>( ); crate::solana_program::program::invoke_signed( &ixs[0], - &[ctx.accounts.from, ctx.accounts.nonce.clone()], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.nonce.to_account_info(), + ], ctx.signer_seeds, )?; crate::solana_program::program::invoke_signed( &ixs[1], &[ - ctx.accounts.nonce, - ctx.accounts.recent_blockhashes, - ctx.accounts.rent, + ctx.accounts.nonce.to_account_info(), + ctx.accounts.recent_blockhashes.to_account_info(), + ctx.accounts.rent.to_account_info(), ], ctx.signer_seeds, ) @@ -246,10 +265,10 @@ pub fn create_nonce_account<'info>( #[derive(Accounts)] pub struct CreateNonceAccount<'info> { - pub from: AccountInfo<'info>, - pub nonce: AccountInfo<'info>, - pub recent_blockhashes: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub nonce: UncheckedAccount<'info>, + pub recent_blockhashes: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } pub fn create_nonce_account_with_seed<'info>( @@ -269,9 +288,9 @@ pub fn create_nonce_account_with_seed<'info>( crate::solana_program::program::invoke_signed( &ixs[0], &[ - ctx.accounts.from, - ctx.accounts.nonce.clone(), - ctx.accounts.base, + ctx.accounts.from.to_account_info(), + ctx.accounts.nonce.to_account_info(), + ctx.accounts.base.to_account_info(), ], ctx.signer_seeds, )?; @@ -279,9 +298,9 @@ pub fn create_nonce_account_with_seed<'info>( crate::solana_program::program::invoke_signed( &ixs[1], &[ - ctx.accounts.nonce, - ctx.accounts.recent_blockhashes, - ctx.accounts.rent, + ctx.accounts.nonce.to_account_info(), + ctx.accounts.recent_blockhashes.to_account_info(), + ctx.accounts.rent.to_account_info(), ], ctx.signer_seeds, ) @@ -290,11 +309,11 @@ pub fn create_nonce_account_with_seed<'info>( #[derive(Accounts)] pub struct CreateNonceAccountWithSeed<'info> { - pub from: AccountInfo<'info>, - pub nonce: AccountInfo<'info>, - pub base: AccountInfo<'info>, - pub recent_blockhashes: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub nonce: UncheckedAccount<'info>, + pub base: UncheckedAccount<'info>, + pub recent_blockhashes: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } pub fn transfer<'info>( @@ -308,7 +327,10 @@ pub fn transfer<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.to], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.to.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -316,8 +338,8 @@ pub fn transfer<'info>( #[derive(Accounts)] pub struct Transfer<'info> { - pub from: AccountInfo<'info>, - pub to: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, } pub fn transfer_with_seed<'info>( @@ -336,7 +358,11 @@ pub fn transfer_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.base, ctx.accounts.to], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.base.to_account_info(), + ctx.accounts.to.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -344,9 +370,9 @@ pub fn transfer_with_seed<'info>( #[derive(Accounts)] pub struct TransferWithSeed<'info> { - pub from: AccountInfo<'info>, - pub base: AccountInfo<'info>, - pub to: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub base: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, } pub fn withdraw_nonce_account<'info>( @@ -362,11 +388,11 @@ pub fn withdraw_nonce_account<'info>( crate::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.nonce, - ctx.accounts.to, - ctx.accounts.recent_blockhashes, - ctx.accounts.rent, - ctx.accounts.authorized, + ctx.accounts.nonce.to_account_info(), + ctx.accounts.to.to_account_info(), + ctx.accounts.recent_blockhashes.to_account_info(), + ctx.accounts.rent.to_account_info(), + ctx.accounts.authorized.to_account_info(), ], ctx.signer_seeds, ) @@ -375,9 +401,9 @@ pub fn withdraw_nonce_account<'info>( #[derive(Accounts)] pub struct WithdrawNonceAccount<'info> { - pub nonce: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub recent_blockhashes: AccountInfo<'info>, - pub rent: AccountInfo<'info>, - pub authorized: AccountInfo<'info>, + pub nonce: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub recent_blockhashes: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, + pub authorized: UncheckedAccount<'info>, } diff --git a/lang/src/vec.rs b/lang/src/vec.rs index ed49bb11cd..cc9d501387 100644 --- a/lang/src/vec.rs +++ b/lang/src/vec.rs @@ -39,14 +39,14 @@ impl<'info, B, T: Accounts<'info, B>> Accounts<'info, B> for Vec { #[cfg(test)] mod tests { - use crate::solana_program::pubkey::Pubkey; + use crate::{prelude::UncheckedAccount, solana_program::pubkey::Pubkey}; use super::*; #[derive(Accounts)] pub struct Test<'info> { #[account(signer)] - test: AccountInfo<'info>, + test: UncheckedAccount<'info>, } #[test] diff --git a/lang/syn/src/codegen/accounts/constraints.rs b/lang/syn/src/codegen/accounts/constraints.rs index 2d9116b7f4..be99fab0b6 100644 --- a/lang/syn/src/codegen/accounts/constraints.rs +++ b/lang/syn/src/codegen/accounts/constraints.rs @@ -1770,7 +1770,6 @@ fn generate_account_ref(field: &Field) -> proc_macro2::TokenStream { let name = &field.ident; match &field.ty { - Ty::AccountInfo => quote!(&#name), Ty::Account(acc) if acc.boxed => quote!(AsRef::::as_ref(#name.as_ref())), Ty::InterfaceAccount(acc) if acc.boxed => { quote!(AsRef::::as_ref(#name.as_ref())) diff --git a/lang/syn/src/codegen/accounts/try_accounts.rs b/lang/syn/src/codegen/accounts/try_accounts.rs index 30721f4000..fe91aa520f 100644 --- a/lang/syn/src/codegen/accounts/try_accounts.rs +++ b/lang/syn/src/codegen/accounts/try_accounts.rs @@ -1,6 +1,6 @@ use crate::codegen::accounts::{bumps, constraints, generics, ParsedGenerics}; -use crate::{AccountField, AccountsStruct, Ty}; -use quote::{quote, quote_spanned}; +use crate::{AccountField, AccountsStruct}; +use quote::quote; use syn::Expr; // Generates the `Accounts` trait implementation. @@ -69,20 +69,11 @@ pub fn generate(accs: &AccountsStruct) -> proc_macro2::TokenStream { let name = f.ident.to_string(); let typed_name = f.typed_ident(); - // Generate the deprecation call if it is an AccountInfo - let warning = if matches!(f.ty, Ty::AccountInfo) { - quote_spanned! { f.ty_span => - ::anchor_lang::deprecated_account_info_usage(); - } - } else { - quote! {} - }; quote! { #[cfg(feature = "anchor-debug")] ::anchor_lang::solana_program::log::sol_log(stringify!(#typed_name)); let #typed_name = anchor_lang::Accounts::try_accounts(__program_id, __accounts, __ix_data, __bumps, __reallocs) .map_err(|e| e.with_account_name(#name))?; - #warning } } } diff --git a/lang/syn/src/codegen/program/idl.rs b/lang/syn/src/codegen/program/idl.rs index 957ce1f87b..7784f00460 100644 --- a/lang/syn/src/codegen/program/idl.rs +++ b/lang/syn/src/codegen/program/idl.rs @@ -38,20 +38,20 @@ pub fn idl_accounts_and_functions() -> proc_macro2::TokenStream { pub struct IdlCreateAccounts<'info> { // Payer of the transaction. #[account(signer)] - pub from: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, // The deterministically defined "state" account being created via // `create_account_with_seed`. #[account(mut)] - pub to: AccountInfo<'info>, + pub to: UncheckedAccount<'info>, // The program-derived-address signing off on the account creation. // Seeds = &[] + bump seed. #[account(seeds = [], bump)] - pub base: AccountInfo<'info>, + pub base: UncheckedAccount<'info>, // The system program. pub system_program: Program<'info, System>, // The program whose state is being constructed. #[account(executable)] - pub program: AccountInfo<'info>, + pub program: UncheckedAccount<'info>, } // Accounts for Idl instructions. @@ -103,7 +103,7 @@ pub fn idl_accounts_and_functions() -> proc_macro2::TokenStream { #[account(constraint = authority.key != &ERASED_AUTHORITY)] pub authority: Signer<'info>, #[account(mut)] - pub sol_destination: AccountInfo<'info>, + pub sol_destination: UncheckedAccount<'info>, } diff --git a/lang/syn/src/lib.rs b/lang/syn/src/lib.rs index 446bc5b64e..b228173a34 100644 --- a/lang/syn/src/lib.rs +++ b/lang/syn/src/lib.rs @@ -300,9 +300,6 @@ impl Field { let account_ty = self.account_ty(); let container_ty = self.container_ty(); let inner_ty = match &self.ty { - Ty::AccountInfo => quote! { - AccountInfo - }, Ty::UncheckedAccount => quote! { UncheckedAccount }, @@ -393,7 +390,6 @@ impl Field { }, }; match &self.ty { - Ty::AccountInfo => quote! { #field.to_account_info() }, Ty::UncheckedAccount => { quote! { UncheckedAccount::try_from(&#field) } } @@ -493,7 +489,6 @@ impl Field { Ty::InterfaceAccount(_) => { quote! { anchor_lang::accounts::interface_account::InterfaceAccount } } - Ty::AccountInfo => quote! {}, Ty::UncheckedAccount => quote! {}, Ty::Signer => quote! {}, Ty::SystemAccount => quote! {}, @@ -504,9 +499,6 @@ impl Field { // Returns the inner account struct type. pub fn account_ty(&self) -> proc_macro2::TokenStream { match &self.ty { - Ty::AccountInfo => quote! { - AccountInfo - }, Ty::UncheckedAccount => quote! { UncheckedAccount }, @@ -590,7 +582,6 @@ pub struct CompositeField { // A type of an account field. #[derive(Debug, PartialEq, Eq)] pub enum Ty { - AccountInfo, UncheckedAccount, AccountLoader(AccountLoaderTy), Sysvar(SysvarTy), diff --git a/lang/syn/src/parser/accounts/mod.rs b/lang/syn/src/parser/accounts/mod.rs index 83f82d60d8..6ef4441a34 100644 --- a/lang/syn/src/parser/accounts/mod.rs +++ b/lang/syn/src/parser/accounts/mod.rs @@ -363,7 +363,6 @@ fn parse_ty(f: &syn::Field) -> ParseResult<(Ty, bool)> { let (ident, optional, path) = ident_string(f)?; let ty = match ident.as_str() { "Sysvar" => Ty::Sysvar(parse_sysvar(&path)?), - "AccountInfo" => Ty::AccountInfo, "UncheckedAccount" => Ty::UncheckedAccount, "AccountLoader" => Ty::AccountLoader(parse_program_account_loader(&path)?), "Account" => Ty::Account(parse_account_ty(&path)?), diff --git a/lang/tests/generics_test.rs b/lang/tests/generics_test.rs index 5531b60cd1..2b7d68c2c4 100644 --- a/lang/tests/generics_test.rs +++ b/lang/tests/generics_test.rs @@ -20,7 +20,7 @@ where T: AccountSerialize + AccountDeserialize + Owner + Clone, U: BorshSerialize + BorshDeserialize + Default + Clone, { - pub non_generic: AccountInfo<'info>, + pub non_generic: UncheckedAccount<'info>, pub generic: Account<'info, T>, pub const_generic: AccountLoader<'info, FooAccount>, diff --git a/spl/src/associated_token.rs b/spl/src/associated_token.rs index 6c1da8cd69..0b27c62476 100644 --- a/spl/src/associated_token.rs +++ b/spl/src/associated_token.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; pub use ::spl_associated_token_account_interface as spl_associated_token_account; pub use ::spl_associated_token_account_interface::{ @@ -21,12 +19,12 @@ pub fn create<'info>(ctx: CpiContext<'_, '_, '_, 'info, Create<'info>>) -> Resul anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.payer, - ctx.accounts.associated_token, - ctx.accounts.authority, - ctx.accounts.mint, - ctx.accounts.system_program, - ctx.accounts.token_program, + ctx.accounts.payer.to_account_info(), + ctx.accounts.associated_token.to_account_info(), + ctx.accounts.authority.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.system_program.to_account_info(), + ctx.accounts.token_program.to_account_info(), ], ctx.signer_seeds, ) @@ -45,12 +43,12 @@ pub fn create_idempotent<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.payer, - ctx.accounts.associated_token, - ctx.accounts.authority, - ctx.accounts.mint, - ctx.accounts.system_program, - ctx.accounts.token_program, + ctx.accounts.payer.to_account_info(), + ctx.accounts.associated_token.to_account_info(), + ctx.accounts.authority.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.system_program.to_account_info(), + ctx.accounts.token_program.to_account_info(), ], ctx.signer_seeds, ) @@ -59,12 +57,12 @@ pub fn create_idempotent<'info>( #[derive(Accounts)] pub struct Create<'info> { - pub payer: AccountInfo<'info>, - pub associated_token: AccountInfo<'info>, - pub authority: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, - pub token_program: AccountInfo<'info>, + pub payer: UncheckedAccount<'info>, + pub associated_token: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub system_program: UncheckedAccount<'info>, + pub token_program: UncheckedAccount<'info>, } type CreateIdempotent<'info> = Create<'info>; diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index de8aeadf95..2d2384193c 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -547,92 +547,92 @@ pub fn unverify_sized_collection_item<'info>( #[derive(Accounts)] pub struct ApproveCollectionAuthority<'info> { - pub collection_authority_record: AccountInfo<'info>, - pub new_collection_authority: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub collection_authority_record: UncheckedAccount<'info>, + pub new_collection_authority: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct BubblegumSetCollectionSize<'info> { - pub metadata_account: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub bubblegum_signer: AccountInfo<'info>, + pub metadata_account: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub bubblegum_signer: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct BurnEditionNft<'info> { - pub metadata: AccountInfo<'info>, - pub owner: AccountInfo<'info>, - pub print_edition_mint: AccountInfo<'info>, - pub master_edition_mint: AccountInfo<'info>, - pub print_edition_token: AccountInfo<'info>, - pub master_edition_token: AccountInfo<'info>, - pub master_edition: AccountInfo<'info>, - pub print_edition: AccountInfo<'info>, - pub edition_marker: AccountInfo<'info>, - pub spl_token: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub owner: UncheckedAccount<'info>, + pub print_edition_mint: UncheckedAccount<'info>, + pub master_edition_mint: UncheckedAccount<'info>, + pub print_edition_token: UncheckedAccount<'info>, + pub master_edition_token: UncheckedAccount<'info>, + pub master_edition: UncheckedAccount<'info>, + pub print_edition: UncheckedAccount<'info>, + pub edition_marker: UncheckedAccount<'info>, + pub spl_token: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct BurnNft<'info> { - pub metadata: AccountInfo<'info>, - pub owner: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub token: AccountInfo<'info>, - pub edition: AccountInfo<'info>, - pub spl_token: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub owner: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub token: UncheckedAccount<'info>, + pub edition: UncheckedAccount<'info>, + pub spl_token: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CreateMetadataAccountsV3<'info> { - pub metadata: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub mint_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub mint_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub system_program: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UpdateMetadataAccountsV2<'info> { - pub metadata: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CreateMasterEditionV3<'info> { - pub edition: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub mint_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub token_program: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub edition: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub mint_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub token_program: UncheckedAccount<'info>, + pub system_program: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct MintNewEditionFromMasterEditionViaToken<'info> { - pub new_metadata: AccountInfo<'info>, - pub new_edition: AccountInfo<'info>, - pub master_edition: AccountInfo<'info>, - pub new_mint: AccountInfo<'info>, - pub edition_mark_pda: AccountInfo<'info>, - pub new_mint_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub token_account_owner: AccountInfo<'info>, - pub token_account: AccountInfo<'info>, - pub new_metadata_update_authority: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub token_program: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub new_metadata: UncheckedAccount<'info>, + pub new_edition: UncheckedAccount<'info>, + pub master_edition: UncheckedAccount<'info>, + pub new_mint: UncheckedAccount<'info>, + pub edition_mark_pda: UncheckedAccount<'info>, + pub new_mint_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub token_account_owner: UncheckedAccount<'info>, + pub token_account: UncheckedAccount<'info>, + pub new_metadata_update_authority: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub token_program: UncheckedAccount<'info>, + pub system_program: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, // // Not actually used by the program but still needed because it's needed // for the pda calculation in the helper. :/ @@ -640,140 +640,140 @@ pub struct MintNewEditionFromMasterEditionViaToken<'info> { // The better thing to do would be to remove this and have the instruction // helper pass in the `edition_mark_pda` directly. // - pub metadata_mint: AccountInfo<'info>, + pub metadata_mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct RevokeCollectionAuthority<'info> { - pub collection_authority_record: AccountInfo<'info>, - pub delegate_authority: AccountInfo<'info>, - pub revoke_authority: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub collection_authority_record: UncheckedAccount<'info>, + pub delegate_authority: UncheckedAccount<'info>, + pub revoke_authority: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetCollectionSize<'info> { - pub metadata: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub system_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetTokenStandard<'info> { - pub metadata_account: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub mint_account: AccountInfo<'info>, + pub metadata_account: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub mint_account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct VerifyCollection<'info> { - pub payer: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub collection_authority: AccountInfo<'info>, - pub collection_mint: AccountInfo<'info>, - pub collection_metadata: AccountInfo<'info>, - pub collection_master_edition: AccountInfo<'info>, + pub payer: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub collection_authority: UncheckedAccount<'info>, + pub collection_mint: UncheckedAccount<'info>, + pub collection_metadata: UncheckedAccount<'info>, + pub collection_master_edition: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct VerifySizedCollectionItem<'info> { - pub payer: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub collection_authority: AccountInfo<'info>, - pub collection_mint: AccountInfo<'info>, - pub collection_metadata: AccountInfo<'info>, - pub collection_master_edition: AccountInfo<'info>, + pub payer: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub collection_authority: UncheckedAccount<'info>, + pub collection_mint: UncheckedAccount<'info>, + pub collection_metadata: UncheckedAccount<'info>, + pub collection_master_edition: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetAndVerifyCollection<'info> { - pub metadata: AccountInfo<'info>, - pub collection_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub collection_mint: AccountInfo<'info>, - pub collection_metadata: AccountInfo<'info>, - pub collection_master_edition: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub collection_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub collection_mint: UncheckedAccount<'info>, + pub collection_metadata: UncheckedAccount<'info>, + pub collection_master_edition: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetAndVerifySizedCollectionItem<'info> { - pub metadata: AccountInfo<'info>, - pub collection_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub collection_mint: AccountInfo<'info>, - pub collection_metadata: AccountInfo<'info>, - pub collection_master_edition: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub collection_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub collection_mint: UncheckedAccount<'info>, + pub collection_metadata: UncheckedAccount<'info>, + pub collection_master_edition: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct FreezeDelegatedAccount<'info> { - pub metadata: AccountInfo<'info>, - pub delegate: AccountInfo<'info>, - pub token_account: AccountInfo<'info>, - pub edition: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub token_program: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub delegate: UncheckedAccount<'info>, + pub token_account: UncheckedAccount<'info>, + pub edition: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub token_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct ThawDelegatedAccount<'info> { - pub metadata: AccountInfo<'info>, - pub delegate: AccountInfo<'info>, - pub token_account: AccountInfo<'info>, - pub edition: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub token_program: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub delegate: UncheckedAccount<'info>, + pub token_account: UncheckedAccount<'info>, + pub edition: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub token_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UpdatePrimarySaleHappenedViaToken<'info> { - pub metadata: AccountInfo<'info>, - pub owner: AccountInfo<'info>, - pub token: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub owner: UncheckedAccount<'info>, + pub token: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SignMetadata<'info> { - pub creator: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, + pub creator: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct RemoveCreatorVerification<'info> { - pub creator: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, + pub creator: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Utilize<'info> { - pub metadata: AccountInfo<'info>, - pub token_account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub use_authority: AccountInfo<'info>, - pub owner: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub token_account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub use_authority: UncheckedAccount<'info>, + pub owner: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UnverifyCollection<'info> { - pub metadata: AccountInfo<'info>, - pub collection_authority: AccountInfo<'info>, - pub collection_mint: AccountInfo<'info>, - pub collection: AccountInfo<'info>, - pub collection_master_edition_account: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub collection_authority: UncheckedAccount<'info>, + pub collection_mint: UncheckedAccount<'info>, + pub collection: UncheckedAccount<'info>, + pub collection_master_edition_account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UnverifySizedCollectionItem<'info> { - pub metadata: AccountInfo<'info>, - pub collection_authority: AccountInfo<'info>, - pub payer: AccountInfo<'info>, - pub collection_mint: AccountInfo<'info>, - pub collection: AccountInfo<'info>, - pub collection_master_edition_account: AccountInfo<'info>, + pub metadata: UncheckedAccount<'info>, + pub collection_authority: UncheckedAccount<'info>, + pub payer: UncheckedAccount<'info>, + pub collection_mint: UncheckedAccount<'info>, + pub collection: UncheckedAccount<'info>, + pub collection_master_edition_account: UncheckedAccount<'info>, } #[derive(Clone, Debug, PartialEq)] diff --git a/spl/src/stake.rs b/spl/src/stake.rs index aa7ce7404e..c9b6a5ab53 100644 --- a/spl/src/stake.rs +++ b/spl/src/stake.rs @@ -80,46 +80,46 @@ pub fn deactivate_stake<'info>( #[derive(Accounts)] pub struct Authorize<'info> { /// The stake account to be updated - pub stake: AccountInfo<'info>, + pub stake: UncheckedAccount<'info>, /// The existing authority - pub authorized: AccountInfo<'info>, + pub authorized: UncheckedAccount<'info>, /// The new authority to replace the existing authority - pub new_authorized: AccountInfo<'info>, + pub new_authorized: UncheckedAccount<'info>, /// Clock sysvar - pub clock: AccountInfo<'info>, + pub clock: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Withdraw<'info> { /// The stake account to be updated - pub stake: AccountInfo<'info>, + pub stake: UncheckedAccount<'info>, /// The stake account's withdraw authority - pub withdrawer: AccountInfo<'info>, + pub withdrawer: UncheckedAccount<'info>, /// Account to send withdrawn lamports to - pub to: AccountInfo<'info>, + pub to: UncheckedAccount<'info>, /// Clock sysvar - pub clock: AccountInfo<'info>, + pub clock: UncheckedAccount<'info>, /// StakeHistory sysvar - pub stake_history: AccountInfo<'info>, + pub stake_history: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DeactivateStake<'info> { /// The stake account to be deactivated - pub stake: AccountInfo<'info>, + pub stake: UncheckedAccount<'info>, /// The stake account's stake authority - pub staker: AccountInfo<'info>, + pub staker: UncheckedAccount<'info>, /// Clock sysvar - pub clock: AccountInfo<'info>, + pub clock: UncheckedAccount<'info>, } // State diff --git a/spl/src/token.rs b/spl/src/token.rs index fd7d2a1516..e6d070d79b 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -1,10 +1,8 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::program_pack::Pack; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use std::ops::Deref; pub use spl_token::ID; @@ -24,7 +22,11 @@ pub fn transfer<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.authority], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.to.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -48,10 +50,10 @@ pub fn transfer_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from, - ctx.accounts.mint, - ctx.accounts.to, - ctx.accounts.authority, + ctx.accounts.from.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.to.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -72,7 +74,11 @@ pub fn mint_to<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority], + &[ + ctx.accounts.to.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -89,7 +95,11 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64) )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -110,9 +120,9 @@ pub fn approve<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to, - ctx.accounts.delegate, - ctx.accounts.authority, + ctx.accounts.to.to_account_info(), + ctx.accounts.delegate.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -137,10 +147,10 @@ pub fn approve_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to, - ctx.accounts.mint, - ctx.accounts.delegate, - ctx.accounts.authority, + ctx.accounts.to.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.delegate.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -156,7 +166,10 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.source, ctx.accounts.authority], + &[ + ctx.accounts.source.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -174,10 +187,10 @@ pub fn initialize_account<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.mint, - ctx.accounts.authority, - ctx.accounts.rent, + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ctx.accounts.rent.to_account_info(), ], ctx.signer_seeds, ) @@ -195,7 +208,10 @@ pub fn initialize_account3<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account, ctx.accounts.mint], + &[ + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -212,9 +228,9 @@ pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'inf anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.destination, - ctx.accounts.authority, + ctx.accounts.account.to_account_info(), + ctx.accounts.destination.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -234,9 +250,9 @@ pub fn freeze_account<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -254,9 +270,9 @@ pub fn thaw_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, ThawAccount<'info> anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -278,7 +294,10 @@ pub fn initialize_mint<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.mint, ctx.accounts.rent], + &[ + ctx.accounts.mint.to_account_info(), + ctx.accounts.rent.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -297,8 +316,12 @@ pub fn initialize_mint2<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke_signed(&ix, &[ctx.accounts.mint], ctx.signer_seeds) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke_signed( + &ix, + &[ctx.accounts.mint.to_account_info()], + ctx.signer_seeds, + ) + .map_err(Into::into) } pub fn set_authority<'info>( @@ -316,7 +339,10 @@ pub fn set_authority<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_or_mint, ctx.accounts.current_authority], + &[ + ctx.accounts.account_or_mint.to_account_info(), + ctx.accounts.current_authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -326,7 +352,7 @@ pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) let ix = spl_token::instruction::sync_native(&spl_token::ID, ctx.accounts.account.key)?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account], + &[ctx.accounts.account.to_account_info()], ctx.signer_seeds, ) .map_err(Into::into) @@ -334,110 +360,110 @@ pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) #[derive(Accounts)] pub struct Transfer<'info> { - pub from: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct TransferChecked<'info> { - pub from: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct MintTo<'info> { - pub mint: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Burn<'info> { - pub mint: AccountInfo<'info>, - pub from: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub from: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Approve<'info> { - pub to: AccountInfo<'info>, - pub delegate: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub to: UncheckedAccount<'info>, + pub delegate: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct ApproveChecked<'info> { - pub to: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub delegate: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub to: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub delegate: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Revoke<'info> { - pub source: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub source: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeAccount<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeAccount3<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CloseAccount<'info> { - pub account: AccountInfo<'info>, - pub destination: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub destination: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct FreezeAccount<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct ThawAccount<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMint<'info> { - pub mint: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMint2<'info> { - pub mint: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetAuthority<'info> { - pub current_authority: AccountInfo<'info>, - pub account_or_mint: AccountInfo<'info>, + pub current_authority: UncheckedAccount<'info>, + pub account_or_mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SyncNative<'info> { - pub account: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, } #[derive(Clone, Debug, Default, PartialEq, Copy)] @@ -516,21 +542,21 @@ impl anchor_lang::Id for Token { pub mod accessor { use super::*; - pub fn amount(account: &AccountInfo) -> Result { + pub fn amount(account: &UncheckedAccount) -> Result { let bytes = account.try_borrow_data()?; let mut amount_bytes = [0u8; 8]; amount_bytes.copy_from_slice(&bytes[64..72]); Ok(u64::from_le_bytes(amount_bytes)) } - pub fn mint(account: &AccountInfo) -> Result { + pub fn mint(account: &UncheckedAccount) -> Result { let bytes = account.try_borrow_data()?; let mut mint_bytes = [0u8; 32]; mint_bytes.copy_from_slice(&bytes[..32]); Ok(Pubkey::new_from_array(mint_bytes)) } - pub fn authority(account: &AccountInfo) -> Result { + pub fn authority(account: &UncheckedAccount) -> Result { let bytes = account.try_borrow_data()?; let mut owner_bytes = [0u8; 32]; owner_bytes.copy_from_slice(&bytes[32..64]); diff --git a/spl/src/token_2022.rs b/spl/src/token_2022.rs index 766b4d0883..57ecf44103 100644 --- a/spl/src/token_2022.rs +++ b/spl/src/token_2022.rs @@ -1,8 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; use anchor_lang::Result; +use anchor_lang::ToAccountInfo; use anchor_lang::{context::CpiContext, Accounts}; pub use spl_token_2022::ID; @@ -27,7 +26,11 @@ pub fn transfer<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.authority], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.to.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -51,10 +54,10 @@ pub fn transfer_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from, - ctx.accounts.mint, - ctx.accounts.to, - ctx.accounts.authority, + ctx.accounts.from.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.to.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -75,7 +78,11 @@ pub fn mint_to<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority], + &[ + ctx.accounts.to.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -97,7 +104,11 @@ pub fn mint_to_checked<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority], + &[ + ctx.accounts.to.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -114,7 +125,11 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64) )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -136,7 +151,11 @@ pub fn burn_checked<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority], + &[ + ctx.accounts.from.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -157,9 +176,9 @@ pub fn approve<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to, - ctx.accounts.delegate, - ctx.accounts.authority, + ctx.accounts.to.to_account_info(), + ctx.accounts.delegate.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -184,10 +203,10 @@ pub fn approve_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to, - ctx.accounts.mint, - ctx.accounts.delegate, - ctx.accounts.authority, + ctx.accounts.to.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.delegate.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -203,7 +222,10 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.source, ctx.accounts.authority], + &[ + ctx.accounts.source.to_account_info(), + ctx.accounts.authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -221,10 +243,10 @@ pub fn initialize_account<'info>( anchor_lang::solana_program::program::invoke( &ix, &[ - ctx.accounts.account, - ctx.accounts.mint, - ctx.accounts.authority, - ctx.accounts.rent, + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), + ctx.accounts.rent.to_account_info(), ], ) .map_err(Into::into) @@ -239,8 +261,14 @@ pub fn initialize_account3<'info>( ctx.accounts.mint.key, ctx.accounts.authority.key, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account, ctx.accounts.mint]) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke( + &ix, + &[ + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], + ) + .map_err(Into::into) } pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'info>>) -> Result<()> { @@ -254,9 +282,9 @@ pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'inf anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.destination, - ctx.accounts.authority, + ctx.accounts.account.to_account_info(), + ctx.accounts.destination.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -276,9 +304,9 @@ pub fn freeze_account<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -296,9 +324,9 @@ pub fn thaw_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, ThawAccount<'info> anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.account.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -318,8 +346,14 @@ pub fn initialize_mint<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint, ctx.accounts.rent]) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke( + &ix, + &[ + ctx.accounts.mint.to_account_info(), + ctx.accounts.rent.to_account_info(), + ], + ) + .map_err(Into::into) } pub fn initialize_mint2<'info>( @@ -335,7 +369,8 @@ pub fn initialize_mint2<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint.to_account_info()]) + .map_err(Into::into) } pub fn set_authority<'info>( @@ -353,7 +388,10 @@ pub fn set_authority<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_or_mint, ctx.accounts.current_authority], + &[ + ctx.accounts.account_or_mint.to_account_info(), + ctx.accounts.current_authority.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -361,7 +399,8 @@ pub fn set_authority<'info>( pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> { let ix = spl_token_2022::instruction::sync_native(&ctx.program_id, ctx.accounts.account.key)?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]).map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()]) + .map_err(Into::into) } pub fn get_account_data_size<'info>( @@ -373,7 +412,7 @@ pub fn get_account_data_size<'info>( ctx.accounts.mint.key, extension_types, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint])?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint.to_account_info()])?; anchor_lang::solana_program::program::get_return_data() .ok_or(anchor_lang::solana_program::program_error::ProgramError::InvalidInstructionData) .and_then(|(key, data)| { @@ -397,7 +436,8 @@ pub fn initialize_mint_close_authority<'info>( ctx.accounts.mint.key, close_authority, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint.to_account_info()]) + .map_err(Into::into) } pub fn initialize_immutable_owner<'info>( @@ -407,7 +447,8 @@ pub fn initialize_immutable_owner<'info>( &ctx.program_id, ctx.accounts.account.key, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]).map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()]) + .map_err(Into::into) } pub fn amount_to_ui_amount<'info>( @@ -419,7 +460,7 @@ pub fn amount_to_ui_amount<'info>( ctx.accounts.account.key, amount, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account])?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()])?; anchor_lang::solana_program::program::get_return_data() .ok_or(anchor_lang::solana_program::program_error::ProgramError::InvalidInstructionData) .and_then(|(key, data)| { @@ -443,7 +484,7 @@ pub fn ui_amount_to_amount<'info>( ctx.accounts.account.key, ui_amount, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account])?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()])?; anchor_lang::solana_program::program::get_return_data() .ok_or(anchor_lang::solana_program::program_error::ProgramError::InvalidInstructionData) .and_then(|(key, data)| { @@ -460,149 +501,149 @@ pub fn ui_amount_to_amount<'info>( #[derive(Accounts)] pub struct Transfer<'info> { - pub from: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct TransferChecked<'info> { - pub from: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub from: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct MintTo<'info> { - pub mint: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct MintToChecked<'info> { - pub mint: AccountInfo<'info>, - pub to: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub to: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Burn<'info> { - pub mint: AccountInfo<'info>, - pub from: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub from: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct BurnChecked<'info> { - pub mint: AccountInfo<'info>, - pub from: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub from: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Approve<'info> { - pub to: AccountInfo<'info>, - pub delegate: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub to: UncheckedAccount<'info>, + pub delegate: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct ApproveChecked<'info> { - pub to: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub delegate: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub to: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub delegate: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Revoke<'info> { - pub source: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub source: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeAccount<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeAccount3<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CloseAccount<'info> { - pub account: AccountInfo<'info>, - pub destination: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub destination: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct FreezeAccount<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct ThawAccount<'info> { - pub account: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMint<'info> { - pub mint: AccountInfo<'info>, - pub rent: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, + pub rent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMint2<'info> { - pub mint: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetAuthority<'info> { - pub current_authority: AccountInfo<'info>, - pub account_or_mint: AccountInfo<'info>, + pub current_authority: UncheckedAccount<'info>, + pub account_or_mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SyncNative<'info> { - pub account: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct GetAccountDataSize<'info> { - pub mint: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMintCloseAuthority<'info> { - pub mint: AccountInfo<'info>, + pub mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeImmutableOwner<'info> { - pub account: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct AmountToUiAmount<'info> { - pub account: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UiAmountToAmount<'info> { - pub account: AccountInfo<'info>, + pub account: UncheckedAccount<'info>, } #[derive(Clone)] diff --git a/spl/src/token_2022_extensions/cpi_guard.rs b/spl/src/token_2022_extensions/cpi_guard.rs index 35a794c330..0ab1175e98 100644 --- a/spl/src/token_2022_extensions/cpi_guard.rs +++ b/spl/src/token_2022_extensions/cpi_guard.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn cpi_guard_enable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'info>>) -> Result<()> { @@ -16,9 +14,9 @@ pub fn cpi_guard_enable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'info anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.account, - ctx.accounts.owner, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.account.to_account_info(), + ctx.accounts.owner.to_account_info(), ], ctx.signer_seeds, ) @@ -36,9 +34,9 @@ pub fn cpi_guard_disable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'inf anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.account, - ctx.accounts.owner, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.account.to_account_info(), + ctx.accounts.owner.to_account_info(), ], ctx.signer_seeds, ) @@ -47,7 +45,7 @@ pub fn cpi_guard_disable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'inf #[derive(Accounts)] pub struct CpiGuard<'info> { - pub token_program_id: AccountInfo<'info>, - pub account: AccountInfo<'info>, - pub owner: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub account: UncheckedAccount<'info>, + pub owner: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/default_account_state.rs b/spl/src/token_2022_extensions/default_account_state.rs index e424dda5f6..d3d6ed619f 100644 --- a/spl/src/token_2022_extensions/default_account_state.rs +++ b/spl/src/token_2022_extensions/default_account_state.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022::state::AccountState; use spl_token_2022_interface as spl_token_2022; @@ -18,7 +16,10 @@ pub fn default_account_state_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -26,8 +27,8 @@ pub fn default_account_state_initialize<'info>( #[derive(Accounts)] pub struct DefaultAccountStateInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn default_account_state_update<'info>( @@ -45,9 +46,9 @@ pub fn default_account_state_update<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.freeze_authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.freeze_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -56,7 +57,7 @@ pub fn default_account_state_update<'info>( #[derive(Accounts)] pub struct DefaultAccountStateUpdate<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub freeze_authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub freeze_authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/group_member_pointer.rs b/spl/src/token_2022_extensions/group_member_pointer.rs index 41487563de..dc0c025f64 100644 --- a/spl/src/token_2022_extensions/group_member_pointer.rs +++ b/spl/src/token_2022_extensions/group_member_pointer.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn group_member_pointer_initialize<'info>( @@ -19,7 +17,10 @@ pub fn group_member_pointer_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -27,8 +28,8 @@ pub fn group_member_pointer_initialize<'info>( #[derive(Accounts)] pub struct GroupMemberPointerInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn group_member_pointer_update<'info>( @@ -45,9 +46,9 @@ pub fn group_member_pointer_update<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -56,7 +57,7 @@ pub fn group_member_pointer_update<'info>( #[derive(Accounts)] pub struct GroupMemberPointerUpdate<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/group_pointer.rs b/spl/src/token_2022_extensions/group_pointer.rs index 3932bbbbfd..6fe4cc7536 100644 --- a/spl/src/token_2022_extensions/group_pointer.rs +++ b/spl/src/token_2022_extensions/group_pointer.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn group_pointer_initialize<'info>( @@ -19,7 +17,10 @@ pub fn group_pointer_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -27,8 +28,8 @@ pub fn group_pointer_initialize<'info>( #[derive(Accounts)] pub struct GroupPointerInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn group_pointer_update<'info>( @@ -44,7 +45,10 @@ pub fn group_pointer_update<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -52,7 +56,7 @@ pub fn group_pointer_update<'info>( #[derive(Accounts)] pub struct GroupPointerUpdate<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/immutable_owner.rs b/spl/src/token_2022_extensions/immutable_owner.rs index be3528e5ec..09161115ab 100644 --- a/spl/src/token_2022_extensions/immutable_owner.rs +++ b/spl/src/token_2022_extensions/immutable_owner.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn immutable_owner_initialize<'info>( @@ -15,7 +13,10 @@ pub fn immutable_owner_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.token_account], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.token_account.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -23,6 +24,6 @@ pub fn immutable_owner_initialize<'info>( #[derive(Accounts)] pub struct ImmutableOwnerInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub token_account: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub token_account: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/interest_bearing_mint.rs b/spl/src/token_2022_extensions/interest_bearing_mint.rs index d50d69b031..ff6233c77d 100644 --- a/spl/src/token_2022_extensions/interest_bearing_mint.rs +++ b/spl/src/token_2022_extensions/interest_bearing_mint.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn interest_bearing_mint_initialize<'info>( @@ -19,7 +17,10 @@ pub fn interest_bearing_mint_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -27,8 +28,8 @@ pub fn interest_bearing_mint_initialize<'info>( #[derive(Accounts)] pub struct InterestBearingMintInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn interest_bearing_mint_update_rate<'info>( @@ -45,9 +46,9 @@ pub fn interest_bearing_mint_update_rate<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.rate_authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.rate_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -56,7 +57,7 @@ pub fn interest_bearing_mint_update_rate<'info>( #[derive(Accounts)] pub struct InterestBearingMintUpdateRate<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub rate_authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub rate_authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/memo_transfer.rs b/spl/src/token_2022_extensions/memo_transfer.rs index e53b752640..4c24d9a344 100644 --- a/spl/src/token_2022_extensions/memo_transfer.rs +++ b/spl/src/token_2022_extensions/memo_transfer.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn memo_transfer_initialize<'info>( @@ -18,9 +16,9 @@ pub fn memo_transfer_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.account, - ctx.accounts.owner, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.account.to_account_info(), + ctx.accounts.owner.to_account_info(), ], ctx.signer_seeds, ) @@ -40,9 +38,9 @@ pub fn memo_transfer_disable<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.account, - ctx.accounts.owner, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.account.to_account_info(), + ctx.accounts.owner.to_account_info(), ], ctx.signer_seeds, ) @@ -51,7 +49,7 @@ pub fn memo_transfer_disable<'info>( #[derive(Accounts)] pub struct MemoTransfer<'info> { - pub token_program_id: AccountInfo<'info>, - pub account: AccountInfo<'info>, - pub owner: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub account: UncheckedAccount<'info>, + pub owner: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/metadata_pointer.rs b/spl/src/token_2022_extensions/metadata_pointer.rs index e91be5bf10..ba3414dd81 100644 --- a/spl/src/token_2022_extensions/metadata_pointer.rs +++ b/spl/src/token_2022_extensions/metadata_pointer.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn metadata_pointer_initialize<'info>( @@ -19,7 +17,10 @@ pub fn metadata_pointer_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -27,6 +28,6 @@ pub fn metadata_pointer_initialize<'info>( #[derive(Accounts)] pub struct MetadataPointerInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/mint_close_authority.rs b/spl/src/token_2022_extensions/mint_close_authority.rs index 2f770439aa..1926e2743b 100644 --- a/spl/src/token_2022_extensions/mint_close_authority.rs +++ b/spl/src/token_2022_extensions/mint_close_authority.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn mint_close_authority_initialize<'info>( @@ -17,7 +15,10 @@ pub fn mint_close_authority_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -25,6 +26,6 @@ pub fn mint_close_authority_initialize<'info>( #[derive(Accounts)] pub struct MintCloseAuthorityInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/non_transferable.rs b/spl/src/token_2022_extensions/non_transferable.rs index a8587d265a..dfe087659b 100644 --- a/spl/src/token_2022_extensions/non_transferable.rs +++ b/spl/src/token_2022_extensions/non_transferable.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn non_transferable_mint_initialize<'info>( @@ -15,7 +13,10 @@ pub fn non_transferable_mint_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -23,6 +24,6 @@ pub fn non_transferable_mint_initialize<'info>( #[derive(Accounts)] pub struct NonTransferableMintInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/permanent_delegate.rs b/spl/src/token_2022_extensions/permanent_delegate.rs index 1f2912e356..b9a378cac7 100644 --- a/spl/src/token_2022_extensions/permanent_delegate.rs +++ b/spl/src/token_2022_extensions/permanent_delegate.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn permanent_delegate_initialize<'info>( @@ -17,7 +15,10 @@ pub fn permanent_delegate_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -25,6 +26,6 @@ pub fn permanent_delegate_initialize<'info>( #[derive(Accounts)] pub struct PermanentDelegateInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/token_group.rs b/spl/src/token_2022_extensions/token_group.rs index 940bba7805..aa6c3bccd5 100644 --- a/spl/src/token_2022_extensions/token_group.rs +++ b/spl/src/token_2022_extensions/token_group.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; pub fn token_group_initialize<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenGroupInitialize<'info>>, @@ -21,10 +19,10 @@ pub fn token_group_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id, - ctx.accounts.group, - ctx.accounts.mint, - ctx.accounts.mint_authority, + ctx.accounts.program_id.to_account_info(), + ctx.accounts.group.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.mint_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -33,10 +31,10 @@ pub fn token_group_initialize<'info>( #[derive(Accounts)] pub struct TokenGroupInitialize<'info> { - pub program_id: AccountInfo<'info>, - pub group: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub mint_authority: AccountInfo<'info>, + pub program_id: UncheckedAccount<'info>, + pub group: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub mint_authority: UncheckedAccount<'info>, } pub fn token_member_initialize<'info>( @@ -53,12 +51,12 @@ pub fn token_member_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id, - ctx.accounts.member, - ctx.accounts.member_mint, - ctx.accounts.member_mint_authority, - ctx.accounts.group, - ctx.accounts.group_update_authority, + ctx.accounts.program_id.to_account_info(), + ctx.accounts.member.to_account_info(), + ctx.accounts.member_mint.to_account_info(), + ctx.accounts.member_mint_authority.to_account_info(), + ctx.accounts.group.to_account_info(), + ctx.accounts.group_update_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -67,10 +65,10 @@ pub fn token_member_initialize<'info>( #[derive(Accounts)] pub struct TokenMemberInitialize<'info> { - pub program_id: AccountInfo<'info>, - pub member: AccountInfo<'info>, - pub member_mint: AccountInfo<'info>, - pub member_mint_authority: AccountInfo<'info>, - pub group: AccountInfo<'info>, - pub group_update_authority: AccountInfo<'info>, + pub program_id: UncheckedAccount<'info>, + pub member: UncheckedAccount<'info>, + pub member_mint: UncheckedAccount<'info>, + pub member_mint_authority: UncheckedAccount<'info>, + pub group: UncheckedAccount<'info>, + pub group_update_authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/token_metadata.rs b/spl/src/token_2022_extensions/token_metadata.rs index 5a64c9f697..dc9d764569 100644 --- a/spl/src/token_2022_extensions/token_metadata.rs +++ b/spl/src/token_2022_extensions/token_metadata.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_pod::optional_keys::OptionalNonZeroPubkey; use spl_token_metadata_interface::state::Field; @@ -27,11 +25,11 @@ pub fn token_metadata_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id, - ctx.accounts.metadata, - ctx.accounts.update_authority, - ctx.accounts.mint, - ctx.accounts.mint_authority, + ctx.accounts.program_id.to_account_info(), + ctx.accounts.metadata.to_account_info(), + ctx.accounts.update_authority.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.mint_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -40,11 +38,11 @@ pub fn token_metadata_initialize<'info>( #[derive(Accounts)] pub struct TokenMetadataInitialize<'info> { - pub program_id: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, - pub mint_authority: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub program_id: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, + pub mint_authority: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn token_metadata_update_authority<'info>( @@ -60,9 +58,9 @@ pub fn token_metadata_update_authority<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id, - ctx.accounts.metadata, - ctx.accounts.current_authority, + ctx.accounts.program_id.to_account_info(), + ctx.accounts.metadata.to_account_info(), + ctx.accounts.current_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -71,10 +69,10 @@ pub fn token_metadata_update_authority<'info>( #[derive(Accounts)] pub struct TokenMetadataUpdateAuthority<'info> { - pub program_id: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub current_authority: AccountInfo<'info>, - pub new_authority: AccountInfo<'info>, + pub program_id: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub current_authority: UncheckedAccount<'info>, + pub new_authority: UncheckedAccount<'info>, } pub fn token_metadata_update_field<'info>( @@ -92,9 +90,9 @@ pub fn token_metadata_update_field<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id, - ctx.accounts.metadata, - ctx.accounts.update_authority, + ctx.accounts.program_id.to_account_info(), + ctx.accounts.metadata.to_account_info(), + ctx.accounts.update_authority.to_account_info(), ], ctx.signer_seeds, ) @@ -103,7 +101,7 @@ pub fn token_metadata_update_field<'info>( #[derive(Accounts)] pub struct TokenMetadataUpdateField<'info> { - pub program_id: AccountInfo<'info>, - pub metadata: AccountInfo<'info>, - pub update_authority: AccountInfo<'info>, + pub program_id: UncheckedAccount<'info>, + pub metadata: UncheckedAccount<'info>, + pub update_authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/transfer_fee.rs b/spl/src/token_2022_extensions/transfer_fee.rs index 4c489fc8e4..84a8c0ac00 100644 --- a/spl/src/token_2022_extensions/transfer_fee.rs +++ b/spl/src/token_2022_extensions/transfer_fee.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::{AccountInfo, UncheckedAccount}; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn transfer_fee_initialize<'info>( @@ -23,7 +21,10 @@ pub fn transfer_fee_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -31,8 +32,8 @@ pub fn transfer_fee_initialize<'info>( #[derive(Accounts)] pub struct TransferFeeInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn transfer_fee_set<'info>( @@ -51,9 +52,9 @@ pub fn transfer_fee_set<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -62,9 +63,9 @@ pub fn transfer_fee_set<'info>( #[derive(Accounts)] pub struct TransferFeeSetTransferFee<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } pub fn transfer_checked_with_fee<'info>( @@ -87,11 +88,11 @@ pub fn transfer_checked_with_fee<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.source, - ctx.accounts.mint, - ctx.accounts.destination, - ctx.accounts.authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.source.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.destination.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -100,11 +101,11 @@ pub fn transfer_checked_with_fee<'info>( #[derive(Accounts)] pub struct TransferCheckedWithFee<'info> { - pub token_program_id: AccountInfo<'info>, - pub source: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub destination: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub source: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub destination: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } pub fn harvest_withheld_tokens_to_mint<'info>( @@ -117,7 +118,10 @@ pub fn harvest_withheld_tokens_to_mint<'info>( sources.iter().map(|a| a.key).collect::>().as_slice(), )?; - let mut account_infos = vec![ctx.accounts.token_program_id, ctx.accounts.mint]; + let mut account_infos = vec![ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ]; account_infos.extend_from_slice(&sources); anchor_lang::solana_program::program::invoke_signed(&ix, &account_infos, ctx.signer_seeds) @@ -126,8 +130,8 @@ pub fn harvest_withheld_tokens_to_mint<'info>( #[derive(Accounts)] pub struct HarvestWithheldTokensToMint<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn withdraw_withheld_tokens_from_mint<'info>( @@ -144,10 +148,10 @@ pub fn withdraw_withheld_tokens_from_mint<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.destination, - ctx.accounts.authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.destination.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -156,10 +160,10 @@ pub fn withdraw_withheld_tokens_from_mint<'info>( #[derive(Accounts)] pub struct WithdrawWithheldTokensFromMint<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub destination: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub destination: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } pub fn withdraw_withheld_tokens_from_accounts<'info>( @@ -176,10 +180,10 @@ pub fn withdraw_withheld_tokens_from_accounts<'info>( )?; let mut account_infos = vec![ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.destination, - ctx.accounts.authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.destination.to_account_info(), + ctx.accounts.authority.to_account_info(), ]; account_infos.extend_from_slice(&sources); @@ -189,8 +193,8 @@ pub fn withdraw_withheld_tokens_from_accounts<'info>( #[derive(Accounts)] pub struct WithdrawWithheldTokensFromAccounts<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub destination: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub destination: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } diff --git a/spl/src/token_2022_extensions/transfer_hook.rs b/spl/src/token_2022_extensions/transfer_hook.rs index 1b698d5703..b6b76887cd 100644 --- a/spl/src/token_2022_extensions/transfer_hook.rs +++ b/spl/src/token_2022_extensions/transfer_hook.rs @@ -1,9 +1,7 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::UncheckedAccount; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfo}; use spl_token_2022_interface as spl_token_2022; pub fn transfer_hook_initialize<'info>( @@ -19,7 +17,10 @@ pub fn transfer_hook_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.token_program_id, ctx.accounts.mint], + &[ + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ], ctx.signer_seeds, ) .map_err(Into::into) @@ -27,8 +28,8 @@ pub fn transfer_hook_initialize<'info>( #[derive(Accounts)] pub struct TransferHookInitialize<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, } pub fn transfer_hook_update<'info>( @@ -45,9 +46,9 @@ pub fn transfer_hook_update<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ctx.accounts.authority, + ctx.accounts.token_program_id.to_account_info(), + ctx.accounts.mint.to_account_info(), + ctx.accounts.authority.to_account_info(), ], ctx.signer_seeds, ) @@ -56,7 +57,7 @@ pub fn transfer_hook_update<'info>( #[derive(Accounts)] pub struct TransferHookUpdate<'info> { - pub token_program_id: AccountInfo<'info>, - pub mint: AccountInfo<'info>, - pub authority: AccountInfo<'info>, + pub token_program_id: UncheckedAccount<'info>, + pub mint: UncheckedAccount<'info>, + pub authority: UncheckedAccount<'info>, } diff --git a/tests/auction-house/programs/auction-house/src/lib.rs b/tests/auction-house/programs/auction-house/src/lib.rs index 13b9bcfd7d..c1d62fdaa1 100644 --- a/tests/auction-house/programs/auction-house/src/lib.rs +++ b/tests/auction-house/programs/auction-house/src/lib.rs @@ -1118,7 +1118,7 @@ pub struct CreateAuctionHouse<'info> { treasury_mint: Account<'info, Mint>, #[account(mut)] payer: Signer<'info>, - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account(mut)] fee_withdrawal_destination: UncheckedAccount<'info>, treasury_withdrawal_destination_owner: UncheckedAccount<'info>, @@ -1192,7 +1192,7 @@ pub struct Deposit<'info> { escrow_payment_account: UncheckedAccount<'info>, treasury_mint: Account<'info, Mint>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account( mut, seeds=[ @@ -1247,7 +1247,7 @@ pub struct Withdraw<'info> { escrow_payment_account: UncheckedAccount<'info>, treasury_mint: Account<'info, Mint>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, token_program: Program<'info, Token>, system_program: Program<'info, System>, associated_token_program: Program<'info, AssociatedToken>, @@ -1261,7 +1261,7 @@ pub struct Sell<'info> { token_account: Account<'info, TokenAccount>, metadata: UncheckedAccount<'info>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account( seeds=[ PREFIX.as_bytes(), @@ -1335,7 +1335,7 @@ pub struct Cancel<'info> { #[account(mut)] token_account: Account<'info, TokenAccount>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, treasury_mint: UncheckedAccount<'info>, #[account( seeds=[ @@ -1388,7 +1388,7 @@ pub struct Buy<'info> { token_account: Account<'info, TokenAccount>, metadata: UncheckedAccount<'info>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account( seeds=[ PREFIX.as_bytes(), @@ -1460,7 +1460,7 @@ pub struct ExecuteSale<'info> { #[account(mut)] buyer_receipt_token_account: UncheckedAccount<'info>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account( seeds=[ PREFIX.as_bytes(), diff --git a/tests/bench/programs/bench/src/lib.rs b/tests/bench/programs/bench/src/lib.rs index acfa1bd5d6..fbb0021ea5 100644 --- a/tests/bench/programs/bench/src/lib.rs +++ b/tests/bench/programs/bench/src/lib.rs @@ -383,33 +383,33 @@ pub struct Unsized { #[derive(Accounts)] pub struct AccountInfo1<'info> { - pub account1: AccountInfo<'info>, + pub account1: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct AccountInfo2<'info> { - pub account1: AccountInfo<'info>, - pub account2: AccountInfo<'info>, + pub account1: UncheckedAccount<'info>, + pub account2: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct AccountInfo4<'info> { - pub account1: AccountInfo<'info>, - pub account2: AccountInfo<'info>, - pub account3: AccountInfo<'info>, - pub account4: AccountInfo<'info>, + pub account1: UncheckedAccount<'info>, + pub account2: UncheckedAccount<'info>, + pub account3: UncheckedAccount<'info>, + pub account4: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct AccountInfo8<'info> { - pub account1: AccountInfo<'info>, - pub account2: AccountInfo<'info>, - pub account3: AccountInfo<'info>, - pub account4: AccountInfo<'info>, - pub account5: AccountInfo<'info>, - pub account6: AccountInfo<'info>, - pub account7: AccountInfo<'info>, - pub account8: AccountInfo<'info>, + pub account1: UncheckedAccount<'info>, + pub account2: UncheckedAccount<'info>, + pub account3: UncheckedAccount<'info>, + pub account4: UncheckedAccount<'info>, + pub account5: UncheckedAccount<'info>, + pub account6: UncheckedAccount<'info>, + pub account7: UncheckedAccount<'info>, + pub account8: UncheckedAccount<'info>, } #[derive(Accounts)] diff --git a/tests/cashiers-check/programs/cashiers-check/src/lib.rs b/tests/cashiers-check/programs/cashiers-check/src/lib.rs index 77523bb68a..53d267b41c 100644 --- a/tests/cashiers-check/programs/cashiers-check/src/lib.rs +++ b/tests/cashiers-check/programs/cashiers-check/src/lib.rs @@ -91,7 +91,7 @@ pub struct CreateCheck<'info> { #[account(mut, constraint = &vault.owner == check_signer.key)] vault: Account<'info, TokenAccount>, // Program derived address for the check. - check_signer: AccountInfo<'info>, + check_signer: UncheckedAccount<'info>, // Token account the check is made from. #[account(mut, has_one = owner)] from: Account<'info, TokenAccount>, @@ -99,8 +99,8 @@ pub struct CreateCheck<'info> { #[account(constraint = from.mint == to.mint)] to: Account<'info, TokenAccount>, // Owner of the `from` token account. - owner: AccountInfo<'info>, - token_program: AccountInfo<'info>, + owner: UncheckedAccount<'info>, + token_program: UncheckedAccount<'info>, } impl<'info> CreateCheck<'info> { @@ -122,16 +122,16 @@ pub struct CashCheck<'info> { #[account(mut, has_one = vault, has_one = to)] check: Account<'info, Check>, #[account(mut)] - vault: AccountInfo<'info>, + vault: UncheckedAccount<'info>, #[account( seeds = [check.to_account_info().key.as_ref()], bump = check.nonce, )] - check_signer: AccountInfo<'info>, + check_signer: UncheckedAccount<'info>, #[account(mut, has_one = owner)] to: Account<'info, TokenAccount>, owner: Signer<'info>, - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -139,16 +139,16 @@ pub struct CancelCheck<'info> { #[account(mut, has_one = vault, has_one = from)] check: Account<'info, Check>, #[account(mut)] - vault: AccountInfo<'info>, + vault: UncheckedAccount<'info>, #[account( seeds = [check.to_account_info().key.as_ref()], bump = check.nonce, )] - check_signer: AccountInfo<'info>, + check_signer: UncheckedAccount<'info>, #[account(mut, has_one = owner)] from: Account<'info, TokenAccount>, owner: Signer<'info>, - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } #[account] diff --git a/tests/chat/programs/chat/src/lib.rs b/tests/chat/programs/chat/src/lib.rs index e1b850d19b..5d35fbf5f4 100644 --- a/tests/chat/programs/chat/src/lib.rs +++ b/tests/chat/programs/chat/src/lib.rs @@ -50,7 +50,7 @@ pub struct CreateUser<'info> { user: Account<'info, User>, #[account(mut)] authority: Signer<'info>, - system_program: AccountInfo<'info>, + system_program: UncheckedAccount<'info>, } #[derive(Accounts)] diff --git a/tests/custom-coder/programs/native-system/src/lib.rs b/tests/custom-coder/programs/native-system/src/lib.rs index 8ac2b71574..a6b9774478 100644 --- a/tests/custom-coder/programs/native-system/src/lib.rs +++ b/tests/custom-coder/programs/native-system/src/lib.rs @@ -112,7 +112,7 @@ pub struct Transfer<'info> { from: Signer<'info>, #[account(mut)] /// CHECK: - to: AccountInfo<'info>, + to: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -121,7 +121,7 @@ pub struct CreateAccountWithSeed<'info> { from: Signer<'info>, #[account(mut)] /// CHECK: - to: AccountInfo<'info>, + to: UncheckedAccount<'info>, base: Signer<'info>, } @@ -129,9 +129,9 @@ pub struct CreateAccountWithSeed<'info> { pub struct AdvanceNonceAccount<'info> { #[account(mut)] /// CHECK: - nonce: AccountInfo<'info>, + nonce: UncheckedAccount<'info>, /// CHECK: - recent_blockhashes: AccountInfo<'info>, + recent_blockhashes: UncheckedAccount<'info>, authorized: Signer<'info>, } @@ -139,12 +139,12 @@ pub struct AdvanceNonceAccount<'info> { pub struct WithdrawNonceAccount<'info> { #[account(mut)] /// CHECK: - nonce: AccountInfo<'info>, + nonce: UncheckedAccount<'info>, #[account(mut)] /// CHECK: - to: AccountInfo<'info>, + to: UncheckedAccount<'info>, /// CHECK: - recent_blockhashes: AccountInfo<'info>, + recent_blockhashes: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, authorized: Signer<'info>, } @@ -154,7 +154,7 @@ pub struct InitializeNonceAccount<'info> { #[account(mut)] nonce: Signer<'info>, /// CHECK: - recent_blockhashes: AccountInfo<'info>, + recent_blockhashes: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, } @@ -162,7 +162,7 @@ pub struct InitializeNonceAccount<'info> { pub struct AuthorizeNonceAccount<'info> { #[account(mut)] /// CHECK: - nonce: AccountInfo<'info>, + nonce: UncheckedAccount<'info>, authorized: Signer<'info>, } @@ -176,7 +176,7 @@ pub struct Allocate<'info> { pub struct AllocateWithSeed<'info> { #[account(mut)] /// CHECK: - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, base: Signer<'info>, } @@ -184,7 +184,7 @@ pub struct AllocateWithSeed<'info> { pub struct AssignWithSeed<'info> { #[account(mut)] /// CHECK: - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, base: Signer<'info>, } @@ -192,11 +192,11 @@ pub struct AssignWithSeed<'info> { pub struct TransferWithSeed<'info> { #[account(mut)] /// CHECK: - from: AccountInfo<'info>, + from: UncheckedAccount<'info>, base: Signer<'info>, #[account(mut)] /// CHECK: - to: AccountInfo<'info>, + to: UncheckedAccount<'info>, } #[derive(AnchorSerialize, AnchorDeserialize, Clone)] diff --git a/tests/errors/programs/errors/src/lib.rs b/tests/errors/programs/errors/src/lib.rs index 168015f405..21818c1cad 100644 --- a/tests/errors/programs/errors/src/lib.rs +++ b/tests/errors/programs/errors/src/lib.rs @@ -143,14 +143,14 @@ pub struct Hello {} #[derive(Accounts)] pub struct MutError<'info> { #[account(mut)] - my_account: AccountInfo<'info>, + my_account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct HasOneError<'info> { #[account(zero, has_one = owner)] my_account: Account<'info, HasOneAccount>, - owner: AccountInfo<'info>, + owner: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -166,7 +166,7 @@ pub struct HasOneAccount { #[derive(Accounts)] pub struct RawCustomError<'info> { #[account(constraint = *my_account.key == ID @ MyError::HelloCustom)] - my_account: AccountInfo<'info>, + my_account: UncheckedAccount<'info>, } #[account] diff --git a/tests/escrow/programs/escrow/src/lib.rs b/tests/escrow/programs/escrow/src/lib.rs index f124be8947..10e0e4ab5e 100644 --- a/tests/escrow/programs/escrow/src/lib.rs +++ b/tests/escrow/programs/escrow/src/lib.rs @@ -128,7 +128,7 @@ pub struct InitializeEscrow<'info> { pub struct Exchange<'info> { #[account(signer)] /// CHECK: - pub taker: AccountInfo<'info>, + pub taker: UncheckedAccount<'info>, #[account(mut, token::mint = deposit_mint)] pub taker_deposit_token_account: Box>, #[account(mut, token::mint = receive_mint)] @@ -139,7 +139,7 @@ pub struct Exchange<'info> { pub initializer_receive_token_account: Box>, #[account(mut)] /// CHECK: - pub initializer_main_account: AccountInfo<'info>, + pub initializer_main_account: UncheckedAccount<'info>, #[account( mut, constraint = escrow_account.taker_amount <= taker_deposit_token_account.amount, @@ -150,7 +150,7 @@ pub struct Exchange<'info> { )] pub escrow_account: Account<'info, EscrowAccount>, /// CHECK: - pub pda_account: AccountInfo<'info>, + pub pda_account: UncheckedAccount<'info>, pub deposit_mint: Box>, pub receive_mint: Box>, pub deposit_token_program: Interface<'info, TokenInterface>, @@ -160,11 +160,11 @@ pub struct Exchange<'info> { #[derive(Accounts)] pub struct CancelEscrow<'info> { /// CHECK: - pub initializer: AccountInfo<'info>, + pub initializer: UncheckedAccount<'info>, #[account(mut)] pub pda_deposit_token_account: InterfaceAccount<'info, TokenAccount>, /// CHECK: - pub pda_account: AccountInfo<'info>, + pub pda_account: UncheckedAccount<'info>, #[account( mut, constraint = escrow_account.initializer_key == *initializer.key, diff --git a/tests/ido-pool/programs/ido-pool/src/lib.rs b/tests/ido-pool/programs/ido-pool/src/lib.rs index d2e1010275..793750440b 100644 --- a/tests/ido-pool/programs/ido-pool/src/lib.rs +++ b/tests/ido-pool/programs/ido-pool/src/lib.rs @@ -457,7 +457,7 @@ pub struct ExchangeRedeemableForWatermelon<'info> { pub payer: Signer<'info>, // User Accounts #[account(mut)] // Sol rent from empty redeemable account is refunded to the user - pub user_authority: AccountInfo<'info>, + pub user_authority: UncheckedAccount<'info>, // TODO replace with ATA constraints #[account(mut, constraint = user_watermelon.owner == user_authority.key(), @@ -520,7 +520,7 @@ pub struct WithdrawFromEscrow<'info> { pub payer: Signer<'info>, // User Accounts #[account(mut)] - pub user_authority: AccountInfo<'info>, + pub user_authority: UncheckedAccount<'info>, #[account(mut, constraint = user_usdc.owner == user_authority.key(), constraint = user_usdc.mint == usdc_mint.key())] diff --git a/tests/lockup/programs/lockup/src/lib.rs b/tests/lockup/programs/lockup/src/lib.rs index 2c9aac54e3..0861a809ac 100644 --- a/tests/lockup/programs/lockup/src/lib.rs +++ b/tests/lockup/programs/lockup/src/lib.rs @@ -204,7 +204,7 @@ pub mod lockup { #[derive(Accounts)] pub struct Auth<'info> { #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -216,12 +216,12 @@ pub struct CreateVesting<'info> { pub vault: Account<'info, TokenAccount>, // Depositor. #[account(mut)] - pub depositor: AccountInfo<'info>, + pub depositor: UncheckedAccount<'info>, #[account(signer)] - pub depositor_authority: AccountInfo<'info>, + pub depositor_authority: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - pub token_program: AccountInfo<'info>, + pub token_program: UncheckedAccount<'info>, pub clock: Sysvar<'info, Clock>, } @@ -257,13 +257,13 @@ pub struct Withdraw<'info> { seeds = [vesting.to_account_info().key.as_ref()], bump = vesting.nonce, )] - vesting_signer: AccountInfo<'info>, + vesting_signer: UncheckedAccount<'info>, // Withdraw receiving target.. #[account(mut)] token: Account<'info, TokenAccount>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, } @@ -281,7 +281,7 @@ pub struct WhitelistDeposit<'info> { pub struct WhitelistTransfer<'info> { lockup: ProgramState<'info, Lockup>, beneficiary: Signer<'info>, - whitelisted_program: AccountInfo<'info>, + whitelisted_program: UncheckedAccount<'info>, // Whitelist interface. #[account(mut, has_one = beneficiary, has_one = vault)] @@ -292,12 +292,12 @@ pub struct WhitelistTransfer<'info> { seeds = [vesting.to_account_info().key.as_ref()], bump = vesting.nonce, )] - vesting_signer: AccountInfo<'info>, + vesting_signer: UncheckedAccount<'info>, #[account("token_program.key == &token::ID")] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, #[account(mut)] - whitelisted_program_vault: AccountInfo<'info>, - whitelisted_program_vault_authority: AccountInfo<'info>, + whitelisted_program_vault: UncheckedAccount<'info>, + whitelisted_program_vault_authority: UncheckedAccount<'info>, } #[derive(Accounts)] diff --git a/tests/lockup/programs/registry/src/lib.rs b/tests/lockup/programs/registry/src/lib.rs index c7fe9e35f9..6d13b154a6 100644 --- a/tests/lockup/programs/registry/src/lib.rs +++ b/tests/lockup/programs/registry/src/lib.rs @@ -619,10 +619,10 @@ pub struct CreateMember<'info> { "balances_locked.vault.mint == registrar.mint" )] balances_locked: BalanceSandboxAccounts<'info>, - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, // Misc. #[account("token_program.key == &token::ID")] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } impl<'info> CreateMember<'info> { @@ -665,7 +665,7 @@ pub struct BalanceSandboxAccounts<'info> { #[derive(Accounts)] pub struct Ctor<'info> { - lockup_program: AccountInfo<'info>, + lockup_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -701,12 +701,12 @@ pub struct Deposit<'info> { vault: Account<'info, TokenAccount>, // Depositor. #[account(mut)] - depositor: AccountInfo<'info>, + depositor: UncheckedAccount<'info>, #[account(signer, constraint = depositor_authority.key == &member.beneficiary)] - depositor_authority: AccountInfo<'info>, + depositor_authority: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -718,12 +718,12 @@ pub struct DepositLocked<'info> { )] vesting: Box>, #[account(mut, constraint = vesting_vault.key == &vesting.vault)] - vesting_vault: AccountInfo<'info>, + vesting_vault: UncheckedAccount<'info>, // Note: no need to verify the depositor_authority since the SPL program // will fail the transaction if it's not correct. pub depositor_authority: Signer<'info>, #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, #[account( mut, constraint = member_vault.to_account_info().key == &member.balances_locked.vault @@ -733,7 +733,7 @@ pub struct DepositLocked<'info> { seeds = [registrar.to_account_info().key.as_ref(), member.to_account_info().key.as_ref()], bump = member.nonce, )] - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, // Program specific. registry: ProgramState<'info, Registry>, @@ -766,17 +766,17 @@ pub struct Stake<'info> { seeds = [registrar.to_account_info().key.as_ref(), member.to_account_info().key.as_ref()], bump = member.nonce, )] - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, #[account( seeds = [registrar.to_account_info().key.as_ref()], bump = registrar.nonce, )] - registrar_signer: AccountInfo<'info>, + registrar_signer: UncheckedAccount<'info>, // Misc. clock: Sysvar<'info, Clock>, #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -786,7 +786,7 @@ pub struct StartUnstake<'info> { registrar: Account<'info, Registrar>, reward_event_q: Account<'info, RewardQueue>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, // Member. #[account(zero)] @@ -804,11 +804,11 @@ pub struct StartUnstake<'info> { seeds = [registrar.to_account_info().key.as_ref(), member.to_account_info().key.as_ref()], bump = member.nonce, )] - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, } @@ -827,19 +827,19 @@ pub struct EndUnstake<'info> { // // Note: we do the constraints check in the handler, not here. #[account(mut)] - vault: AccountInfo<'info>, + vault: UncheckedAccount<'info>, #[account(mut)] - vault_pw: AccountInfo<'info>, + vault_pw: UncheckedAccount<'info>, #[account( seeds = [registrar.to_account_info().key.as_ref(), member.to_account_info().key.as_ref()], bump = member.nonce, )] - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -856,13 +856,13 @@ pub struct Withdraw<'info> { seeds = [registrar.to_account_info().key.as_ref(), member.to_account_info().key.as_ref()], bump = member.nonce, )] - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, // Receiver. #[account(mut)] - depositor: AccountInfo<'info>, + depositor: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -874,10 +874,10 @@ pub struct WithdrawLocked<'info> { )] vesting: Box>, #[account(mut, constraint = vesting_vault.key == &vesting.vault)] - vesting_vault: AccountInfo<'info>, + vesting_vault: UncheckedAccount<'info>, vesting_signer: Signer<'info>, #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, #[account( mut, constraint = member_vault.to_account_info().key == &member.balances_locked.vault @@ -887,7 +887,7 @@ pub struct WithdrawLocked<'info> { seeds = [registrar.to_account_info().key.as_ref(), member.to_account_info().key.as_ref()], bump = member.nonce, )] - member_signer: AccountInfo<'info>, + member_signer: UncheckedAccount<'info>, // Program specific. registry: ProgramState<'info, Registry>, @@ -912,12 +912,12 @@ pub struct DropReward<'info> { vendor_vault: Account<'info, TokenAccount>, // Depositor. #[account(mut)] - depositor: AccountInfo<'info>, + depositor: UncheckedAccount<'info>, #[account(signer)] - depositor_authority: AccountInfo<'info>, + depositor_authority: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, } @@ -945,7 +945,7 @@ pub struct ClaimReward<'info> { cmn: ClaimRewardCommon<'info>, // Account to send reward to. #[account(mut)] - to: AccountInfo<'info>, + to: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -953,7 +953,7 @@ pub struct ClaimRewardLocked<'info> { cmn: ClaimRewardCommon<'info>, registry: ProgramState<'info, Registry>, #[account("lockup_program.key == ®istry.lockup_program")] - lockup_program: AccountInfo<'info>, + lockup_program: UncheckedAccount<'info>, } // Accounts common to both claim reward locked/unlocked instructions. @@ -973,15 +973,15 @@ pub struct ClaimRewardCommon<'info> { #[account(has_one = registrar, has_one = vault)] vendor: Account<'info, RewardVendor>, #[account(mut)] - vault: AccountInfo<'info>, + vault: UncheckedAccount<'info>, #[account( seeds = [registrar.to_account_info().key.as_ref(), vendor.to_account_info().key.as_ref()], bump = vendor.nonce, )] - vendor_signer: AccountInfo<'info>, + vendor_signer: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, } @@ -998,14 +998,14 @@ pub struct ExpireReward<'info> { seeds = [registrar.to_account_info().key.as_ref(), vendor.to_account_info().key.as_ref()], bump = vendor.nonce )] - vendor_signer: AccountInfo<'info>, + vendor_signer: UncheckedAccount<'info>, // Receiver. expiry_receiver: Signer<'info>, #[account(mut)] - expiry_receiver_token: AccountInfo<'info>, + expiry_receiver_token: UncheckedAccount<'info>, // Misc. #[account(constraint = token_program.key == &token::ID)] - token_program: AccountInfo<'info>, + token_program: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, } diff --git a/tests/misc/programs/misc-optional/src/context.rs b/tests/misc/programs/misc-optional/src/context.rs index 1a06393a95..af713cbca9 100644 --- a/tests/misc/programs/misc-optional/src/context.rs +++ b/tests/misc/programs/misc-optional/src/context.rs @@ -151,23 +151,23 @@ pub struct InitializeSkipRentExempt<'info> { #[derive(Accounts)] pub struct InitializeNoRentExempt<'info> { /// CHECK: - pub data: Option>, + pub data: Option>, } #[derive(Accounts)] pub struct TestOwner<'info> { #[account(owner = *misc.key)] /// CHECK: - pub data: Option>, + pub data: Option>, /// CHECK: - pub misc: AccountInfo<'info>, + pub misc: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct TestExecutable<'info> { #[account(executable)] /// CHECK: - pub program: Option>, + pub program: Option>, } #[derive(Accounts)] @@ -332,7 +332,7 @@ pub struct TestInitIfNeededChecksOwner<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: - pub owner: AccountInfo<'info>, + pub owner: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -676,7 +676,7 @@ pub struct TestAssociatedToken<'info> { )] pub token: Option>, pub mint: Option>, - pub authority: Option>, + pub authority: Option>, } #[derive(Accounts)] @@ -689,9 +689,9 @@ pub struct TestAssociatedTokenWithTokenProgramConstraint<'info> { pub token: Option>, pub mint: InterfaceAccount<'info, MintInterface>, /// CHECK: ignore - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, /// CHECK: ignore - pub associated_token_token_program: Option>, + pub associated_token_token_program: Option>, } #[derive(Accounts)] diff --git a/tests/misc/programs/misc/src/context.rs b/tests/misc/programs/misc/src/context.rs index d19c84c562..bd8d898073 100644 --- a/tests/misc/programs/misc/src/context.rs +++ b/tests/misc/programs/misc/src/context.rs @@ -27,7 +27,7 @@ pub struct TestTokenSeedsInit<'info> { pub my_pda: Account<'info, TokenAccount>, #[account(mut)] /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, pub system_program: Program<'info, System>, pub token_program: Program<'info, Token>, } @@ -64,7 +64,7 @@ pub struct TestInitAssociatedTokenWithTokenProgram<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: ignore - pub associated_token_token_program: AccountInfo<'info>, + pub associated_token_token_program: UncheckedAccount<'info>, pub associated_token_program: Program<'info, AssociatedToken>, } @@ -77,7 +77,7 @@ pub struct TestValidateAssociatedToken<'info> { pub token: Account<'info, TokenAccount>, pub mint: Account<'info, Mint>, /// CHECK: - pub wallet: AccountInfo<'info>, + pub wallet: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -88,9 +88,9 @@ pub struct TestInstructionConstraint<'info> { bump = nonce, )] /// CHECK: - pub my_pda: AccountInfo<'info>, + pub my_pda: UncheckedAccount<'info>, /// CHECK: - pub my_account: AccountInfo<'info>, + pub my_account: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -107,7 +107,7 @@ pub struct TestPdaInit<'info> { #[account(mut)] pub my_payer: Signer<'info>, /// CHECK: - pub foo: AccountInfo<'info>, + pub foo: UncheckedAccount<'info>, pub system_program: Program<'info, System>, } @@ -135,7 +135,7 @@ pub struct TestPdaMutZeroCopy<'info> { )] pub my_pda: AccountLoader<'info, DataZeroCopy>, /// CHECK: - pub my_payer: AccountInfo<'info>, + pub my_payer: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -159,23 +159,23 @@ pub struct InitializeSkipRentExempt<'info> { #[derive(Accounts)] pub struct InitializeNoRentExempt<'info> { /// CHECK: - pub data: AccountInfo<'info>, + pub data: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct TestOwner<'info> { #[account(owner = *misc.key)] /// CHECK: - pub data: AccountInfo<'info>, + pub data: UncheckedAccount<'info>, /// CHECK: - pub misc: AccountInfo<'info>, + pub misc: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct TestExecutable<'info> { #[account(executable)] /// CHECK: - pub program: AccountInfo<'info>, + pub program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -183,7 +183,7 @@ pub struct TestClose<'info> { #[account(mut, close = sol_dest)] pub data: Account<'info, Data>, /// CHECK: - sol_dest: AccountInfo<'info>, + sol_dest: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -191,7 +191,7 @@ pub struct TestCloseTwice<'info> { #[account(mut, close = sol_dest)] pub data: Account<'info, Data>, /// CHECK: - pub sol_dest: AccountInfo<'info>, + pub sol_dest: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -199,7 +199,7 @@ pub struct TestCloseMut<'info> { #[account(mut)] pub data: Account<'info, Data>, /// CHECK: - pub sol_dest: AccountInfo<'info>, + pub sol_dest: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -247,7 +247,7 @@ pub struct TestInitMintWithTokenProgram<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: ignore - pub mint_token_program: AccountInfo<'info>, + pub mint_token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -275,7 +275,7 @@ pub struct TestInitTokenWithTokenProgram<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: ignore - pub token_token_program: AccountInfo<'info>, + pub token_token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -308,7 +308,7 @@ pub struct TestInitWithEmptySeeds<'info> { pub struct TestEmptySeedsConstraint<'info> { #[account(seeds = [], bump)] /// CHECK: - pub pda: AccountInfo<'info>, + pub pda: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -339,7 +339,7 @@ pub struct TestInitIfNeededChecksOwner<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: - pub owner: AccountInfo<'info>, + pub owner: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -363,9 +363,9 @@ pub struct TestInitMintIfNeeded<'info> { pub system_program: Program<'info, System>, pub token_program: Program<'info, Token>, /// CHECK: - pub mint_authority: AccountInfo<'info>, + pub mint_authority: UncheckedAccount<'info>, /// CHECK: - pub freeze_authority: AccountInfo<'info>, + pub freeze_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -382,11 +382,11 @@ pub struct TestInitMintIfNeededWithTokenProgram<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: ignore - pub mint_token_program: AccountInfo<'info>, + pub mint_token_program: UncheckedAccount<'info>, /// CHECK: ignore - pub mint_authority: AccountInfo<'info>, + pub mint_authority: UncheckedAccount<'info>, /// CHECK: ignore - pub freeze_authority: AccountInfo<'info>, + pub freeze_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -399,7 +399,7 @@ pub struct TestInitTokenIfNeeded<'info> { pub system_program: Program<'info, System>, pub token_program: Program<'info, Token>, /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -416,9 +416,9 @@ pub struct TestInitTokenIfNeededWithTokenProgram<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: ignore - pub token_token_program: AccountInfo<'info>, + pub token_token_program: UncheckedAccount<'info>, /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -436,7 +436,7 @@ pub struct TestInitAssociatedTokenIfNeeded<'info> { pub token_program: Program<'info, Token>, pub associated_token_program: Program<'info, AssociatedToken>, /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -453,10 +453,10 @@ pub struct TestInitAssociatedTokenIfNeededWithTokenProgram<'info> { pub payer: Signer<'info>, pub system_program: Program<'info, System>, /// CHECK: ignore - pub associated_token_token_program: AccountInfo<'info>, + pub associated_token_token_program: UncheckedAccount<'info>, pub associated_token_program: Program<'info, AssociatedToken>, /// CHECK: ignore - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -486,21 +486,21 @@ pub struct TestMultidimensionalArrayConstSizes<'info> { #[derive(Accounts)] pub struct NoRentExempt<'info> { /// CHECK: - pub data: AccountInfo<'info>, + pub data: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct EnforceRentExempt<'info> { #[account(rent_exempt = enforce)] /// CHECK: - pub data: AccountInfo<'info>, + pub data: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitDecreaseLamports<'info> { #[account(init, payer = user, space = 1000)] /// CHECK: - pub data: AccountInfo<'info>, + pub data: UncheckedAccount<'info>, #[account(mut)] pub user: Signer<'info>, pub system_program: Program<'info, System>, @@ -510,7 +510,7 @@ pub struct InitDecreaseLamports<'info> { pub struct InitIfNeededChecksRentExemption<'info> { #[account(init_if_needed, payer = user, space = 1000)] /// CHECK: - pub data: AccountInfo<'info>, + pub data: UncheckedAccount<'info>, #[account(mut)] pub user: Signer<'info>, pub system_program: Program<'info, System>, @@ -523,11 +523,11 @@ pub struct TestProgramIdConstraint<'info> { // just deriving like this for testing purposes #[account(seeds = [b"seed"], bump = bump, seeds::program = anchor_spl::associated_token::ID)] /// CHECK: - first: AccountInfo<'info>, + first: UncheckedAccount<'info>, #[account(seeds = [b"seed"], bump = second_bump, seeds::program = crate::ID)] /// CHECK: - second: AccountInfo<'info>, + second: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -536,11 +536,11 @@ pub struct TestProgramIdConstraintUsingFindPda<'info> { // just deriving like this for testing purposes #[account(seeds = [b"seed"], bump, seeds::program = anchor_spl::associated_token::ID)] /// CHECK: - first: AccountInfo<'info>, + first: UncheckedAccount<'info>, #[account(seeds = [b"seed"], bump, seeds::program = crate::ID)] /// CHECK: - second: AccountInfo<'info>, + second: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -583,7 +583,7 @@ pub struct TestAuthorityConstraint<'info> { pub token: Account<'info, TokenAccount>, pub mint: Account<'info, Mint>, /// CHECK: ignore - pub fake_authority: AccountInfo<'info>, + pub fake_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -603,7 +603,7 @@ pub struct TestOnlyTokenProgramConstraint<'info> { )] pub token: Account<'info, TokenAccount>, /// CHECK: ignore - pub token_token_program: AccountInfo<'info>, + pub token_token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -625,9 +625,9 @@ pub struct TestMintConstraint<'info> { )] pub mint: Account<'info, Mint>, /// CHECK: ignore - pub mint_authority: AccountInfo<'info>, + pub mint_authority: UncheckedAccount<'info>, /// CHECK: ignore - pub freeze_authority: AccountInfo<'info>, + pub freeze_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -647,9 +647,9 @@ pub struct TestMintAuthorityConstraint<'info> { )] pub mint: Account<'info, Mint>, /// CHECK: ignore - pub mint_authority: AccountInfo<'info>, + pub mint_authority: UncheckedAccount<'info>, /// CHECK: ignore - pub freeze_authority: AccountInfo<'info>, + pub freeze_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -659,7 +659,7 @@ pub struct TestMintOneAuthorityConstraint<'info> { )] pub mint: Account<'info, Mint>, /// CHECK: ignore - pub mint_authority: AccountInfo<'info>, + pub mint_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -671,7 +671,7 @@ pub struct TestMintMissMintAuthConstraint<'info> { )] pub mint: Account<'info, Mint>, /// CHECK: ignore - pub freeze_authority: AccountInfo<'info>, + pub freeze_authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -681,7 +681,7 @@ pub struct TestMintOnlyTokenProgramConstraint<'info> { )] pub mint: Account<'info, Mint>, /// CHECK: ignore - pub mint_token_program: AccountInfo<'info>, + pub mint_token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -693,7 +693,7 @@ pub struct TestAssociatedToken<'info> { pub token: Account<'info, TokenAccount>, pub mint: Account<'info, Mint>, /// CHECK: ignore - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -706,9 +706,9 @@ pub struct TestAssociatedTokenWithTokenProgramConstraint<'info> { pub token: InterfaceAccount<'info, TokenAccountInterface>, pub mint: InterfaceAccount<'info, MintInterface>, /// CHECK: ignore - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, /// CHECK: ignore - pub associated_token_token_program: AccountInfo<'info>, + pub associated_token_token_program: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -726,32 +726,32 @@ pub struct TestUsedIdentifiers<'info> { constraint = 4 == remaining_accounts, )] /// CHECK: ignore - pub test: AccountInfo<'info>, + pub test: UncheckedAccount<'info>, #[account( seeds = [&[program_id], &[accounts], &[ix_data], &[remaining_accounts]], bump = program_id, )] /// CHECK: ignore - pub test1: AccountInfo<'info>, + pub test1: UncheckedAccount<'info>, #[account( seeds = [&[program_id], &[accounts], &[ix_data], &[remaining_accounts]], bump = accounts, )] /// CHECK: ignore - pub test2: AccountInfo<'info>, + pub test2: UncheckedAccount<'info>, #[account( seeds = [&[program_id], &[accounts], &[ix_data], &[remaining_accounts]], bump = ix_data, )] /// CHECK: ignore - pub test3: AccountInfo<'info>, + pub test3: UncheckedAccount<'info>, #[account( seeds = [&[program_id], &[accounts], &[ix_data], &[remaining_accounts]], bump = remaining_accounts, )] /// CHECK: ignore - pub test4: AccountInfo<'info>, + pub test4: UncheckedAccount<'info>, } #[derive(Accounts)] diff --git a/tests/multisig/programs/multisig/src/lib.rs b/tests/multisig/programs/multisig/src/lib.rs index 847161cc4a..448153727b 100644 --- a/tests/multisig/programs/multisig/src/lib.rs +++ b/tests/multisig/programs/multisig/src/lib.rs @@ -197,7 +197,7 @@ pub struct Auth<'info> { seeds = [multisig.to_account_info().key.as_ref()], bump = multisig.nonce, )] - multisig_signer: AccountInfo<'info>, + multisig_signer: UncheckedAccount<'info>, } #[derive(Accounts)] @@ -207,7 +207,7 @@ pub struct ExecuteTransaction<'info> { seeds = [multisig.to_account_info().key.as_ref()], bump = multisig.nonce, )] - multisig_signer: AccountInfo<'info>, + multisig_signer: UncheckedAccount<'info>, #[account(mut, has_one = multisig)] transaction: Account<'info, Transaction>, } diff --git a/tests/pda-derivation/programs/pda-derivation/src/lib.rs b/tests/pda-derivation/programs/pda-derivation/src/lib.rs index 6d27afa42b..e8d5adb71e 100644 --- a/tests/pda-derivation/programs/pda-derivation/src/lib.rs +++ b/tests/pda-derivation/programs/pda-derivation/src/lib.rs @@ -109,7 +109,7 @@ pub struct InitMyAccount<'info> { base: Account<'info, BaseAccount>, // Intentionally using this qualified form instead of importing to test parsing another_base: Account<'info, crate::other::AnotherBaseAccount>, - base2: AccountInfo<'info>, + base2: UncheckedAccount<'info>, #[account( init, payer = payer, @@ -153,7 +153,7 @@ pub struct Nested<'info> { bump, )] /// CHECK: Not needed - account_nested: AccountInfo<'info>, + account_nested: UncheckedAccount<'info>, } #[derive(Accounts)] diff --git a/tests/pyth/programs/pyth/src/lib.rs b/tests/pyth/programs/pyth/src/lib.rs index ff85804237..1a004f09f9 100644 --- a/tests/pyth/programs/pyth/src/lib.rs +++ b/tests/pyth/programs/pyth/src/lib.rs @@ -31,11 +31,11 @@ pub mod pyth { #[derive(Accounts)] pub struct SetPrice<'info> { #[account(mut)] - pub price: AccountInfo<'info>, + pub price: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Initialize<'info> { #[account(mut)] - pub price: AccountInfo<'info>, + pub price: UncheckedAccount<'info>, } diff --git a/tests/safety-checks/programs/account-info/src/lib.rs b/tests/safety-checks/programs/account-info/src/lib.rs index 74d8f12182..04b711a6d2 100644 --- a/tests/safety-checks/programs/account-info/src/lib.rs +++ b/tests/safety-checks/programs/account-info/src/lib.rs @@ -12,5 +12,5 @@ pub mod account_info { #[derive(Accounts)] pub struct Initialize<'info> { - unchecked: AccountInfo<'info>, + unchecked: UncheckedAccount<'info>, } diff --git a/tests/safety-checks/programs/ignore-non-accounts/src/lib.rs b/tests/safety-checks/programs/ignore-non-accounts/src/lib.rs index 30f4bea6b1..9e55e84bc5 100644 --- a/tests/safety-checks/programs/ignore-non-accounts/src/lib.rs +++ b/tests/safety-checks/programs/ignore-non-accounts/src/lib.rs @@ -15,16 +15,16 @@ pub struct Initialize<'info> { /// CHECK: checked1: UncheckedAccount<'info>, /// CHECK: - checked2: AccountInfo<'info>, + checked2: UncheckedAccount<'info>, } #[derive(Debug)] pub struct ShouldIgnore1<'info> { unchecked1: UncheckedAccount<'info>, - unchecked2: AccountInfo<'info>, + unchecked2: UncheckedAccount<'info>, } pub struct ShouldIgnore2<'info> { unchecked1: UncheckedAccount<'info>, - unchecked2: AccountInfo<'info>, + unchecked2: UncheckedAccount<'info>, } diff --git a/tests/signature-verification/programs/signature-verification-test/src/lib.rs b/tests/signature-verification/programs/signature-verification-test/src/lib.rs index 22da669aad..afe686880b 100644 --- a/tests/signature-verification/programs/signature-verification-test/src/lib.rs +++ b/tests/signature-verification/programs/signature-verification-test/src/lib.rs @@ -54,15 +54,15 @@ pub mod signature_verification_test { #[derive(Accounts)] pub struct VerifyEd25519Signature<'info> { /// CHECK: Signer account - pub signer: AccountInfo<'info>, + pub signer: UncheckedAccount<'info>, /// CHECK: Instructions sysvar account #[account(address = solana_sdk_ids::sysvar::instructions::ID)] - pub ix_sysvar: AccountInfo<'info>, + pub ix_sysvar: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct VerifySecp256k1Signature<'info> { /// CHECK: Instructions sysvar account #[account(address = solana_sdk_ids::sysvar::instructions::ID)] - pub ix_sysvar: AccountInfo<'info>, + pub ix_sysvar: UncheckedAccount<'info>, } diff --git a/tests/spl/token-extensions/programs/token-extensions/src/utils.rs b/tests/spl/token-extensions/programs/token-extensions/src/utils.rs index fcc6063d85..6c0d870e0b 100644 --- a/tests/spl/token-extensions/programs/token-extensions/src/utils.rs +++ b/tests/spl/token-extensions/programs/token-extensions/src/utils.rs @@ -22,9 +22,9 @@ pub const APPROVE_ACCOUNT_SEED: &[u8] = b"approve-account"; pub const META_LIST_ACCOUNT_SEED: &[u8] = b"extra-account-metas"; pub fn update_account_lamports_to_minimum_balance<'info>( - account: AccountInfo<'info>, - payer: AccountInfo<'info>, - system_program: AccountInfo<'info>, + account: UncheckedAccount<'info>, + payer: UncheckedAccount<'info>, + system_program: UncheckedAccount<'info>, ) -> Result<()> { let extra_lamports = Rent::get()?.minimum_balance(account.data_len()) - account.get_lamports(); if extra_lamports > 0 { diff --git a/tests/spl/token-proxy/programs/token-proxy/src/lib.rs b/tests/spl/token-proxy/programs/token-proxy/src/lib.rs index a5e7e2f353..e12374156a 100644 --- a/tests/spl/token-proxy/programs/token-proxy/src/lib.rs +++ b/tests/spl/token-proxy/programs/token-proxy/src/lib.rs @@ -96,7 +96,7 @@ pub enum AuthorityType { pub struct ProxyTransfer<'info> { #[account(signer)] /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, #[account(mut)] pub from: InterfaceAccount<'info, TokenAccount>, #[account(mut)] @@ -108,7 +108,7 @@ pub struct ProxyTransfer<'info> { pub struct ProxyOptionalTransfer<'info> { #[account(signer)] /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, #[account(mut)] pub from: InterfaceAccount<'info, TokenAccount>, #[account(mut)] @@ -121,7 +121,7 @@ pub struct ProxyOptionalTransfer<'info> { pub struct ProxyMintTo<'info> { #[account(signer)] /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, #[account(mut)] pub mint: InterfaceAccount<'info, Mint>, #[account(mut)] @@ -133,7 +133,7 @@ pub struct ProxyMintTo<'info> { pub struct ProxyBurn<'info> { #[account(signer)] /// CHECK: - pub authority: AccountInfo<'info>, + pub authority: UncheckedAccount<'info>, #[account(mut)] pub mint: InterfaceAccount<'info, Mint>, #[account(mut)] @@ -145,10 +145,10 @@ pub struct ProxyBurn<'info> { pub struct ProxySetAuthority<'info> { #[account(signer)] /// CHECK: - pub current_authority: AccountInfo<'info>, + pub current_authority: UncheckedAccount<'info>, #[account(mut)] /// CHECK: - pub account_or_mint: AccountInfo<'info>, + pub account_or_mint: UncheckedAccount<'info>, pub token_program: Interface<'info, TokenInterface>, } diff --git a/tests/spl/token-wrapper/programs/token-wrapper/src/lib.rs b/tests/spl/token-wrapper/programs/token-wrapper/src/lib.rs index 9f1886f244..886b0aa2ce 100644 --- a/tests/spl/token-wrapper/programs/token-wrapper/src/lib.rs +++ b/tests/spl/token-wrapper/programs/token-wrapper/src/lib.rs @@ -202,7 +202,7 @@ pub struct Initialize<'info> { seeds = [WRAPPER_AUTH_SEED, deposit_mint.key().as_ref(), wrapped_mint.key().as_ref()], bump, )] - pub wrapper_authority: AccountInfo<'info>, + pub wrapper_authority: UncheckedAccount<'info>, pub system_program: Program<'info, System>, pub deposit_token_program: Interface<'info, TokenInterface>, @@ -253,7 +253,7 @@ pub struct Wrap<'info> { seeds = [WRAPPER_AUTH_SEED, deposit_mint.key().as_ref(), wrapped_mint.key().as_ref()], bump, )] - pub wrapper_authority: AccountInfo<'info>, + pub wrapper_authority: UncheckedAccount<'info>, pub deposit_token_program: Interface<'info, TokenInterface>, pub wrapped_token_program: Interface<'info, TokenInterface>, @@ -303,7 +303,7 @@ pub struct Unwrap<'info> { seeds = [crate::token_wrapper::WRAPPER_AUTH_SEED, deposit_mint.key().as_ref(), wrapped_mint.key().as_ref()], bump, )] - pub wrapper_authority: AccountInfo<'info>, + pub wrapper_authority: UncheckedAccount<'info>, pub deposit_token_program: Interface<'info, TokenInterface>, pub wrapped_token_program: Interface<'info, TokenInterface>, diff --git a/tests/swap/programs/swap/src/lib.rs b/tests/swap/programs/swap/src/lib.rs index c04102f1ba..6249b2c51e 100644 --- a/tests/swap/programs/swap/src/lib.rs +++ b/tests/swap/programs/swap/src/lib.rs @@ -192,14 +192,14 @@ fn apply_risk_checks(event: DidSwap) -> Result<()> { pub struct Swap<'info> { market: MarketAccounts<'info>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account(mut)] - pc_wallet: AccountInfo<'info>, + pc_wallet: UncheckedAccount<'info>, // Programs. - dex_program: AccountInfo<'info>, - token_program: AccountInfo<'info>, + dex_program: UncheckedAccount<'info>, + token_program: UncheckedAccount<'info>, // Sysvars. - rent: AccountInfo<'info>, + rent: UncheckedAccount<'info>, } impl<'info> From<&Swap<'info>> for OrderbookClient<'info> { @@ -225,14 +225,14 @@ pub struct SwapTransitive<'info> { to: MarketAccounts<'info>, // Must be the authority over all open orders accounts used. #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, #[account(mut)] - pc_wallet: AccountInfo<'info>, + pc_wallet: UncheckedAccount<'info>, // Programs. - dex_program: AccountInfo<'info>, - token_program: AccountInfo<'info>, + dex_program: UncheckedAccount<'info>, + token_program: UncheckedAccount<'info>, // Sysvars. - rent: AccountInfo<'info>, + rent: UncheckedAccount<'info>, } impl<'info> SwapTransitive<'info> { @@ -261,11 +261,11 @@ impl<'info> SwapTransitive<'info> { // Client for sending orders to the Serum DEX. struct OrderbookClient<'info> { market: MarketAccounts<'info>, - authority: AccountInfo<'info>, - pc_wallet: AccountInfo<'info>, - dex_program: AccountInfo<'info>, - token_program: AccountInfo<'info>, - rent: AccountInfo<'info>, + authority: UncheckedAccount<'info>, + pc_wallet: UncheckedAccount<'info>, + dex_program: UncheckedAccount<'info>, + token_program: UncheckedAccount<'info>, + rent: UncheckedAccount<'info>, } impl<'info> OrderbookClient<'info> { @@ -394,36 +394,36 @@ fn coin_lots(market: &MarketState, size: u64) -> u64 { #[derive(Accounts, Clone)] pub struct MarketAccounts<'info> { #[account(mut)] - market: AccountInfo<'info>, + market: UncheckedAccount<'info>, #[account(mut)] - open_orders: AccountInfo<'info>, + open_orders: UncheckedAccount<'info>, #[account(mut)] - request_queue: AccountInfo<'info>, + request_queue: UncheckedAccount<'info>, #[account(mut)] - event_queue: AccountInfo<'info>, + event_queue: UncheckedAccount<'info>, #[account(mut)] - bids: AccountInfo<'info>, + bids: UncheckedAccount<'info>, #[account(mut)] - asks: AccountInfo<'info>, + asks: UncheckedAccount<'info>, // The `spl_token::Account` that funds will be taken from, i.e., transferred // from the user into the market's vault. // // For bids, this is the base currency. For asks, the quote. #[account(mut)] - order_payer_token_account: AccountInfo<'info>, + order_payer_token_account: UncheckedAccount<'info>, // Also known as the "base" currency. For a given A/B market, // this is the vault for the A mint. #[account(mut)] - coin_vault: AccountInfo<'info>, + coin_vault: UncheckedAccount<'info>, // Also known as the "quote" currency. For a given A/B market, // this is the vault for the B mint. #[account(mut)] - pc_vault: AccountInfo<'info>, + pc_vault: UncheckedAccount<'info>, // PDA owner of the DEX's token accounts for base + quote currencies. - vault_signer: AccountInfo<'info>, + vault_signer: UncheckedAccount<'info>, // User wallets. #[account(mut)] - coin_wallet: AccountInfo<'info>, + coin_wallet: UncheckedAccount<'info>, } #[derive(AnchorSerialize, AnchorDeserialize)] diff --git a/tests/zero-copy/programs/zero-copy/src/lib.rs b/tests/zero-copy/programs/zero-copy/src/lib.rs index a71c562e3f..6f4257f391 100644 --- a/tests/zero-copy/programs/zero-copy/src/lib.rs +++ b/tests/zero-copy/programs/zero-copy/src/lib.rs @@ -104,7 +104,7 @@ pub struct CreateBar<'info> { #[account(mut)] authority: Signer<'info>, foo: AccountLoader<'info, Foo>, - system_program: AccountInfo<'info>, + system_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UpdateBar<'info> { diff --git a/tests/zero-copy/programs/zero-cpi/src/lib.rs b/tests/zero-copy/programs/zero-cpi/src/lib.rs index 307be50fb0..4ad9c60301 100644 --- a/tests/zero-copy/programs/zero-cpi/src/lib.rs +++ b/tests/zero-copy/programs/zero-cpi/src/lib.rs @@ -28,7 +28,7 @@ pub struct CheckCpi<'info> { )] bar: AccountLoader<'info, Bar>, #[account(signer)] - authority: AccountInfo<'info>, + authority: UncheckedAccount<'info>, foo: AccountLoader<'info, Foo>, zero_copy_program: Program<'info, ZeroCopy>, } diff --git a/ts/packages/spl-associated-token-account/program/lib.rs b/ts/packages/spl-associated-token-account/program/lib.rs index 5bb187f3f1..19206b2e12 100644 --- a/ts/packages/spl-associated-token-account/program/lib.rs +++ b/ts/packages/spl-associated-token-account/program/lib.rs @@ -26,9 +26,9 @@ pub struct Create<'info> { #[account(mut)] funding_address: Signer<'info>, #[account(mut)] - associated_account_address: AccountInfo<'info>, - wallet_address: AccountInfo<'info>, - token_mint_address: AccountInfo<'info>, + associated_account_address: UncheckedAccount<'info>, + wallet_address: UncheckedAccount<'info>, + token_mint_address: UncheckedAccount<'info>, system_program: Program<'info, System>, token_program: Program<'info, Token>, } @@ -38,9 +38,9 @@ pub struct CreateIdempotent<'info> { #[account(mut)] funding_address: Signer<'info>, #[account(mut)] - associated_account_address: AccountInfo<'info>, - wallet_address: AccountInfo<'info>, - token_mint_address: AccountInfo<'info>, + associated_account_address: UncheckedAccount<'info>, + wallet_address: UncheckedAccount<'info>, + token_mint_address: UncheckedAccount<'info>, system_program: Program<'info, System>, token_program: Program<'info, Token>, } @@ -48,12 +48,12 @@ pub struct CreateIdempotent<'info> { #[derive(Accounts)] pub struct RecoverNested<'info> { #[account(mut)] - nested_associated_account_address: AccountInfo<'info>, - nested_token_mint_address: AccountInfo<'info>, + nested_associated_account_address: UncheckedAccount<'info>, + nested_token_mint_address: UncheckedAccount<'info>, #[account(mut)] - destination_associated_account_address: AccountInfo<'info>, - owner_associated_account_address: AccountInfo<'info>, - owner_token_mint_address: AccountInfo<'info>, + destination_associated_account_address: UncheckedAccount<'info>, + owner_associated_account_address: UncheckedAccount<'info>, + owner_token_mint_address: UncheckedAccount<'info>, #[account(mut)] wallet_address: Signer<'info>, token_program: Program<'info, Token>, diff --git a/ts/packages/spl-binary-option/program/lib.rs b/ts/packages/spl-binary-option/program/lib.rs index a66f889ac0..9888ad6de9 100644 --- a/ts/packages/spl-binary-option/program/lib.rs +++ b/ts/packages/spl-binary-option/program/lib.rs @@ -32,7 +32,7 @@ pub mod spl_binary_option { pub struct InitializeBinaryOption<'info> { #[account(mut)] pool_account: Signer<'info>, - escrow_mint: AccountInfo<'info>, + escrow_mint: UncheckedAccount<'info>, #[account(mut)] escrow_account: Signer<'info>, #[account(mut)] @@ -49,58 +49,58 @@ pub struct InitializeBinaryOption<'info> { #[derive(Accounts)] pub struct Trade<'info> { #[account(mut)] - pool_account: AccountInfo<'info>, + pool_account: UncheckedAccount<'info>, #[account(mut)] - escrow_account: AccountInfo<'info>, + escrow_account: UncheckedAccount<'info>, #[account(mut)] - long_token_mint: AccountInfo<'info>, + long_token_mint: UncheckedAccount<'info>, #[account(mut)] - short_token_mint: AccountInfo<'info>, + short_token_mint: UncheckedAccount<'info>, buyer: Signer<'info>, seller: Signer<'info>, #[account(mut)] - buyer_account: AccountInfo<'info>, + buyer_account: UncheckedAccount<'info>, #[account(mut)] - seller_account: AccountInfo<'info>, + seller_account: UncheckedAccount<'info>, #[account(mut)] - buyer_long_token_account: AccountInfo<'info>, + buyer_long_token_account: UncheckedAccount<'info>, #[account(mut)] - buyer_short_token_account: AccountInfo<'info>, + buyer_short_token_account: UncheckedAccount<'info>, #[account(mut)] - seller_long_token_account: AccountInfo<'info>, + seller_long_token_account: UncheckedAccount<'info>, #[account(mut)] - seller_short_token_account: AccountInfo<'info>, - escrow_authority: AccountInfo<'info>, + seller_short_token_account: UncheckedAccount<'info>, + escrow_authority: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct Settle<'info> { #[account(mut)] - pool_account: AccountInfo<'info>, - winning_mint: AccountInfo<'info>, + pool_account: UncheckedAccount<'info>, + winning_mint: UncheckedAccount<'info>, pool_authority: Signer<'info>, } #[derive(Accounts)] pub struct Collect<'info> { #[account(mut)] - pool_account: AccountInfo<'info>, - collector_account: AccountInfo<'info>, + pool_account: UncheckedAccount<'info>, + collector_account: UncheckedAccount<'info>, #[account(mut)] - collector_long_token_account: AccountInfo<'info>, + collector_long_token_account: UncheckedAccount<'info>, #[account(mut)] - collector_short_token_account: AccountInfo<'info>, + collector_short_token_account: UncheckedAccount<'info>, #[account(mut)] - collector_collateral_account: AccountInfo<'info>, + collector_collateral_account: UncheckedAccount<'info>, #[account(mut)] - long_token_mint_account: AccountInfo<'info>, + long_token_mint_account: UncheckedAccount<'info>, #[account(mut)] - short_token_mint_account: AccountInfo<'info>, + short_token_mint_account: UncheckedAccount<'info>, #[account(mut)] - escrow_account: AccountInfo<'info>, + escrow_account: UncheckedAccount<'info>, #[account(mut)] - escrow_authority_account: AccountInfo<'info>, + escrow_authority_account: UncheckedAccount<'info>, token_program: Program<'info, Token>, } diff --git a/ts/packages/spl-binary-oracle-pair/program/lib.rs b/ts/packages/spl-binary-oracle-pair/program/lib.rs index b0a1ef4a43..7b6e16e41d 100644 --- a/ts/packages/spl-binary-oracle-pair/program/lib.rs +++ b/ts/packages/spl-binary-oracle-pair/program/lib.rs @@ -33,58 +33,58 @@ pub mod spl_binary_oracle_pair { #[derive(Accounts)] pub struct InitPool<'info> { #[account(mut)] - pool: AccountInfo<'info>, - authority: AccountInfo<'info>, - decider: AccountInfo<'info>, - deposit_token_mint: AccountInfo<'info>, + pool: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, + decider: UncheckedAccount<'info>, + deposit_token_mint: UncheckedAccount<'info>, #[account(mut)] - deposit_account: AccountInfo<'info>, + deposit_account: UncheckedAccount<'info>, #[account(mut)] - token_pass_mint: AccountInfo<'info>, + token_pass_mint: UncheckedAccount<'info>, #[account(mut)] - token_fail_mint: AccountInfo<'info>, + token_fail_mint: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct Deposit<'info> { - pool: AccountInfo<'info>, - authority: AccountInfo<'info>, + pool: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - user_token_account: AccountInfo<'info>, + user_token_account: UncheckedAccount<'info>, #[account(mut)] - pool_deposit_token_account: AccountInfo<'info>, + pool_deposit_token_account: UncheckedAccount<'info>, #[account(mut)] - token_pass_mint: AccountInfo<'info>, + token_pass_mint: UncheckedAccount<'info>, #[account(mut)] - token_fail_mint: AccountInfo<'info>, + token_fail_mint: UncheckedAccount<'info>, #[account(mut)] - token_pass_destination_account: AccountInfo<'info>, + token_pass_destination_account: UncheckedAccount<'info>, #[account(mut)] - token_fail_destination_account: AccountInfo<'info>, + token_fail_destination_account: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct Withdraw<'info> { - pool: AccountInfo<'info>, - authority: AccountInfo<'info>, + pool: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - pool_deposit_token_account: AccountInfo<'info>, + pool_deposit_token_account: UncheckedAccount<'info>, #[account(mut)] - token_pass_user_account: AccountInfo<'info>, + token_pass_user_account: UncheckedAccount<'info>, #[account(mut)] - token_fail_user_account: AccountInfo<'info>, + token_fail_user_account: UncheckedAccount<'info>, #[account(mut)] - token_pass_mint: AccountInfo<'info>, + token_pass_mint: UncheckedAccount<'info>, #[account(mut)] - token_fail_mint: AccountInfo<'info>, + token_fail_mint: UncheckedAccount<'info>, #[account(mut)] - user_token_destination_account: AccountInfo<'info>, + user_token_destination_account: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, } @@ -92,7 +92,7 @@ pub struct Withdraw<'info> { #[derive(Accounts)] pub struct Decide<'info> { #[account(mut)] - pool: AccountInfo<'info>, + pool: UncheckedAccount<'info>, decider: Signer<'info>, clock: Sysvar<'info, Clock>, } diff --git a/ts/packages/spl-feature-proposal/program/lib.rs b/ts/packages/spl-feature-proposal/program/lib.rs index 60c14709a1..91132a7497 100644 --- a/ts/packages/spl-feature-proposal/program/lib.rs +++ b/ts/packages/spl-feature-proposal/program/lib.rs @@ -28,13 +28,13 @@ pub struct Propose<'info> { #[account(mut)] feature_proposal_address: Signer<'info>, #[account(mut)] - mint_address: AccountInfo<'info>, + mint_address: UncheckedAccount<'info>, #[account(mut)] - distributor_token_address: AccountInfo<'info>, + distributor_token_address: UncheckedAccount<'info>, #[account(mut)] - acceptance_token_address: AccountInfo<'info>, + acceptance_token_address: UncheckedAccount<'info>, #[account(mut)] - feature: AccountInfo<'info>, + feature: UncheckedAccount<'info>, system_program: Program<'info, System>, token_program: Program<'info, Token>, rent: Sysvar<'info, Rent>, @@ -43,10 +43,10 @@ pub struct Propose<'info> { #[derive(Accounts)] pub struct Tally<'info> { #[account(mut)] - feature_proposal_address: AccountInfo<'info>, - acceptance_token_address: AccountInfo<'info>, + feature_proposal_address: UncheckedAccount<'info>, + acceptance_token_address: UncheckedAccount<'info>, #[account(mut)] - feature: AccountInfo<'info>, + feature: UncheckedAccount<'info>, system_program: Program<'info, System>, clock: Sysvar<'info, Clock>, } diff --git a/ts/packages/spl-governance/program/lib.rs b/ts/packages/spl-governance/program/lib.rs index 7ae438cda8..b169e405d5 100644 --- a/ts/packages/spl-governance/program/lib.rs +++ b/ts/packages/spl-governance/program/lib.rs @@ -163,36 +163,36 @@ pub mod spl_governance { #[derive(Accounts)] pub struct CreateRealm<'info> { #[account(mut)] - realm_address: AccountInfo<'info>, - realm_authority: AccountInfo<'info>, - community_token_mint: AccountInfo<'info>, + realm_address: UncheckedAccount<'info>, + realm_authority: UncheckedAccount<'info>, + community_token_mint: UncheckedAccount<'info>, #[account(mut)] - community_token_holding_address: AccountInfo<'info>, + community_token_holding_address: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, token_program: Program<'info, Token>, rent: Sysvar<'info, Rent>, - // optional_council_token_mint: AccountInfo<'info>, + // optional_council_token_mint: UncheckedAccount<'info>, // #[account(mut)] - // optional_council_token_holding_address: AccountInfo<'info>, + // optional_council_token_holding_address: UncheckedAccount<'info>, // optional_community_voter_weight_addin: Signer<'info>, // optional_max_community_voter_weight_addin: Signer<'info>, // #[account(mut)] - // optional_realm_config_address: AccountInfo<'info>, + // optional_realm_config_address: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DepositGoverningTokens<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governing_token_holding_address: AccountInfo<'info>, + governing_token_holding_address: UncheckedAccount<'info>, #[account(mut)] - governing_token_source: AccountInfo<'info>, + governing_token_source: UncheckedAccount<'info>, governing_token_owner: Signer<'info>, governing_token_transfer_authority: Signer<'info>, #[account(mut)] - token_owner_record_address: AccountInfo<'info>, + token_owner_record_address: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -201,14 +201,14 @@ pub struct DepositGoverningTokens<'info> { #[derive(Accounts)] pub struct WithdrawGoverningTokens<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governing_token_holding_address: AccountInfo<'info>, + governing_token_holding_address: UncheckedAccount<'info>, #[account(mut)] - governing_token_destination: AccountInfo<'info>, + governing_token_destination: UncheckedAccount<'info>, governing_token_owner: Signer<'info>, #[account(mut)] - token_owner_record_address: AccountInfo<'info>, + token_owner_record_address: UncheckedAccount<'info>, token_program: Program<'info, Token>, } @@ -216,16 +216,16 @@ pub struct WithdrawGoverningTokens<'info> { pub struct SetGovernanceDelegate<'info> { governance_authority: Signer<'info>, #[account(mut)] - vote_record_address: AccountInfo<'info>, + vote_record_address: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CreateGovernance<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governance_address: AccountInfo<'info>, - governed_account_address: AccountInfo<'info>, - token_owner_record: AccountInfo<'info>, + governance_address: UncheckedAccount<'info>, + governed_account_address: UncheckedAccount<'info>, + token_owner_record: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -234,31 +234,31 @@ pub struct CreateGovernance<'info> { #[derive(Accounts)] pub struct CreateProgramGovernance<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - program_governance_address: AccountInfo<'info>, - governed_program: AccountInfo<'info>, + program_governance_address: UncheckedAccount<'info>, + governed_program: UncheckedAccount<'info>, #[account(mut)] - governed_program_data_address: AccountInfo<'info>, + governed_program_data_address: UncheckedAccount<'info>, governed_program_upgrade_authority: Signer<'info>, - token_owner_record: AccountInfo<'info>, + token_owner_record: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, - bpf_loader_upgradeable: AccountInfo<'info>, + bpf_loader_upgradeable: UncheckedAccount<'info>, system_program: Program<'info, System>, create_authority: Signer<'info>, } #[derive(Accounts)] pub struct CreateProposal<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - proposal_address: AccountInfo<'info>, + proposal_address: UncheckedAccount<'info>, #[account(mut)] - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal_owner_record: AccountInfo<'info>, - governing_token_mint: AccountInfo<'info>, + proposal_owner_record: UncheckedAccount<'info>, + governing_token_mint: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] payer: Signer<'info>, @@ -268,11 +268,11 @@ pub struct CreateProposal<'info> { #[derive(Accounts)] pub struct AddSignatory<'info> { #[account(mut)] - proposal: AccountInfo<'info>, - token_owner_record: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, + token_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] - signatory_record_address: AccountInfo<'info>, + signatory_record_address: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -281,24 +281,24 @@ pub struct AddSignatory<'info> { #[derive(Accounts)] pub struct RemoveSignatory<'info> { #[account(mut)] - proposal: AccountInfo<'info>, - token_owner_record: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, + token_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] - signatory_record_address: AccountInfo<'info>, + signatory_record_address: UncheckedAccount<'info>, #[account(mut)] - beneficiary: AccountInfo<'info>, + beneficiary: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InsertTransaction<'info> { - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, - token_owner_record: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, + token_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] - proposal_transaction_address: AccountInfo<'info>, + proposal_transaction_address: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -308,58 +308,58 @@ pub struct InsertTransaction<'info> { #[derive(Accounts)] pub struct RemoveTransaction<'info> { #[account(mut)] - proposal: AccountInfo<'info>, - token_owner_record: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, + token_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] - proposal_transaction: AccountInfo<'info>, + proposal_transaction: UncheckedAccount<'info>, #[account(mut)] - beneficiary: AccountInfo<'info>, + beneficiary: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CancelProposal<'info> { #[account(mut)] - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, #[account(mut)] - proposal_owner_record: AccountInfo<'info>, + proposal_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, } #[derive(Accounts)] pub struct SignOffProposal<'info> { #[account(mut)] - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, signatory: Signer<'info>, - // optional_proposal_owner_record: AccountInfo<'info>, + // optional_proposal_owner_record: UncheckedAccount<'info>, // #[account(mut)] - // optional_signatory_record_address: AccountInfo<'info>, + // optional_signatory_record_address: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CastVote<'info> { #[account(mut)] - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, #[account(mut)] - proposal_owner_record: AccountInfo<'info>, + proposal_owner_record: UncheckedAccount<'info>, #[account(mut)] - voter_token_owner_record: AccountInfo<'info>, + voter_token_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] - vote_record_address: AccountInfo<'info>, - vote_governing_token_mint: AccountInfo<'info>, + vote_record_address: UncheckedAccount<'info>, + vote_governing_token_mint: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -368,51 +368,51 @@ pub struct CastVote<'info> { #[derive(Accounts)] pub struct FinalizeVote<'info> { #[account(mut)] - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, #[account(mut)] - proposal_owner_record: AccountInfo<'info>, - governing_token_mint: AccountInfo<'info>, + proposal_owner_record: UncheckedAccount<'info>, + governing_token_mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct RelinquishVote<'info> { - realm: AccountInfo<'info>, - governance: AccountInfo<'info>, + realm: UncheckedAccount<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, #[account(mut)] - token_owner_record: AccountInfo<'info>, + token_owner_record: UncheckedAccount<'info>, #[account(mut)] - vote_record_address: AccountInfo<'info>, - vote_governing_token_mint: AccountInfo<'info>, + vote_record_address: UncheckedAccount<'info>, + vote_governing_token_mint: UncheckedAccount<'info>, // optional_governance_authority: Signer<'info>, // #[account(mut)] - // optional_beneficiary: AccountInfo<'info>, + // optional_beneficiary: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct ExecuteTransaction<'info> { - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - proposal: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, #[account(mut)] - proposal_transaction: AccountInfo<'info>, - instruction_program: AccountInfo<'info>, + proposal_transaction: UncheckedAccount<'info>, + instruction_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CreateMintGovernance<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - mint_governance_address: AccountInfo<'info>, + mint_governance_address: UncheckedAccount<'info>, #[account(mut)] - governed_mint: AccountInfo<'info>, + governed_mint: UncheckedAccount<'info>, governed_mint_authority: Signer<'info>, - token_owner_record: AccountInfo<'info>, + token_owner_record: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, token_program: Program<'info, Token>, @@ -422,13 +422,13 @@ pub struct CreateMintGovernance<'info> { #[derive(Accounts)] pub struct CreateTokenGovernance<'info> { - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, #[account(mut)] - token_governance_address: AccountInfo<'info>, + token_governance_address: UncheckedAccount<'info>, #[account(mut)] - governed_token: AccountInfo<'info>, + governed_token: UncheckedAccount<'info>, governed_token_owner: Signer<'info>, - token_owner_record: AccountInfo<'info>, + token_owner_record: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, token_program: Program<'info, Token>, @@ -445,17 +445,17 @@ pub struct SetGovernanceConfig<'info> { #[derive(Accounts)] pub struct FlagTransactionError<'info> { #[account(mut)] - proposal: AccountInfo<'info>, - token_owner_record: AccountInfo<'info>, + proposal: UncheckedAccount<'info>, + token_owner_record: UncheckedAccount<'info>, governance_authority: Signer<'info>, #[account(mut)] - proposal_transaction: AccountInfo<'info>, + proposal_transaction: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetRealmAuthority<'info> { #[account(mut)] - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, realm_authority: Signer<'info>, // optional_new_realm_authority: Signer<'info>, } @@ -463,14 +463,14 @@ pub struct SetRealmAuthority<'info> { #[derive(Accounts)] pub struct SetRealmConfig<'info> { #[account(mut)] - realm: AccountInfo<'info>, + realm: UncheckedAccount<'info>, realm_authority: Signer<'info>, - // optional_council_token_mint: AccountInfo<'info>, + // optional_council_token_mint: UncheckedAccount<'info>, // #[account(mut)] - // optional_council_token_holding_address: AccountInfo<'info>, + // optional_council_token_holding_address: UncheckedAccount<'info>, // optional_system_program: Program<'info, System>, // #[account(mut)] - // optional_realm_config_address: AccountInfo<'info>, + // optional_realm_config_address: UncheckedAccount<'info>, // optional_community_voter_weight_addin: Signer<'info>, // optional_max_community_voter_weight_addin: Signer<'info>, // #[account(mut)] @@ -479,11 +479,11 @@ pub struct SetRealmConfig<'info> { #[derive(Accounts)] pub struct CreateTokenOwnerRecord<'info> { - realm: AccountInfo<'info>, - governing_token_owner: AccountInfo<'info>, + realm: UncheckedAccount<'info>, + governing_token_owner: UncheckedAccount<'info>, #[account(mut)] - token_owner_record_address: AccountInfo<'info>, - governing_token_mint: AccountInfo<'info>, + token_owner_record_address: UncheckedAccount<'info>, + governing_token_mint: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -492,7 +492,7 @@ pub struct CreateTokenOwnerRecord<'info> { #[derive(Accounts)] pub struct UpdateProgramMetadata<'info> { #[account(mut)] - program_metadata_address: AccountInfo<'info>, + program_metadata_address: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, @@ -500,9 +500,9 @@ pub struct UpdateProgramMetadata<'info> { #[derive(Accounts)] pub struct CreateNativeTreasury<'info> { - governance: AccountInfo<'info>, + governance: UncheckedAccount<'info>, #[account(mut)] - native_treasury_address: AccountInfo<'info>, + native_treasury_address: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, system_program: Program<'info, System>, diff --git a/ts/packages/spl-name-service/program/lib.rs b/ts/packages/spl-name-service/program/lib.rs index 7b10b229fa..ee8929e8cc 100644 --- a/ts/packages/spl-name-service/program/lib.rs +++ b/ts/packages/spl-name-service/program/lib.rs @@ -36,28 +36,28 @@ pub struct Create<'info> { #[account(mut)] payer: Signer<'info>, #[account(mut)] - name_account: AccountInfo<'info>, - name_owner: AccountInfo<'info>, + name_account: UncheckedAccount<'info>, + name_owner: UncheckedAccount<'info>, // optional_name_class: Signer<'info>, - // optional_Pubkey: AccountInfo<'info>, - // optional_name_parent: AccountInfo<'info>, - // optional_Pubkey: AccountInfo<'info>, + // optional_Pubkey: UncheckedAccount<'info>, + // optional_name_parent: UncheckedAccount<'info>, + // optional_Pubkey: UncheckedAccount<'info>, // optional_key: Signer<'info>, } #[derive(Accounts)] pub struct Update<'info> { #[account(mut)] - name_account: AccountInfo<'info>, + name_account: UncheckedAccount<'info>, name_update_signer: Signer<'info>, // #[account(mut)] - // optional_name_parent: AccountInfo<'info>, + // optional_name_parent: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Transfer<'info> { #[account(mut)] - name_account: AccountInfo<'info>, + name_account: UncheckedAccount<'info>, name_owner: Signer<'info>, // optional_key: Signer<'info>, } @@ -65,10 +65,10 @@ pub struct Transfer<'info> { #[derive(Accounts)] pub struct Delete<'info> { #[account(mut)] - name_account: AccountInfo<'info>, + name_account: UncheckedAccount<'info>, name_owner: Signer<'info>, #[account(mut)] - refund_target: AccountInfo<'info>, + refund_target: UncheckedAccount<'info>, } #[account] diff --git a/ts/packages/spl-record/program/lib.rs b/ts/packages/spl-record/program/lib.rs index 5551d20d6a..21b6a85a0d 100644 --- a/ts/packages/spl-record/program/lib.rs +++ b/ts/packages/spl-record/program/lib.rs @@ -28,32 +28,32 @@ pub mod spl_record { #[derive(Accounts)] pub struct Initialize<'info> { #[account(mut)] - record_account: AccountInfo<'info>, - authority: AccountInfo<'info>, + record_account: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Write<'info> { #[account(mut)] - record_account: AccountInfo<'info>, + record_account: UncheckedAccount<'info>, signer: Signer<'info>, } #[derive(Accounts)] pub struct SetAuthority<'info> { #[account(mut)] - record_account: AccountInfo<'info>, + record_account: UncheckedAccount<'info>, signer: Signer<'info>, - new_authority: AccountInfo<'info>, + new_authority: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct CloseAccount<'info> { #[account(mut)] - record_account: AccountInfo<'info>, + record_account: UncheckedAccount<'info>, signer: Signer<'info>, #[account(mut)] - receiver: AccountInfo<'info>, + receiver: UncheckedAccount<'info>, } #[account] diff --git a/ts/packages/spl-stake-pool/program/lib.rs b/ts/packages/spl-stake-pool/program/lib.rs index 00907aff57..c47a29017a 100644 --- a/ts/packages/spl-stake-pool/program/lib.rs +++ b/ts/packages/spl-stake-pool/program/lib.rs @@ -126,17 +126,17 @@ pub mod spl_stake_pool { #[derive(Accounts)] pub struct Initialize<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, manager: Signer<'info>, - staker: AccountInfo<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + staker: UncheckedAccount<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - validator_list: AccountInfo<'info>, - reserve_stake: AccountInfo<'info>, + validator_list: UncheckedAccount<'info>, + reserve_stake: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] - manager_pool_account: AccountInfo<'info>, + manager_pool_account: UncheckedAccount<'info>, token_program: Program<'info, Token>, // optional_deposit_authority: Signer<'info>, } @@ -144,220 +144,220 @@ pub struct Initialize<'info> { #[derive(Accounts)] pub struct AddValidatorToPool<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, staker: Signer<'info>, #[account(mut)] funder: Signer<'info>, - stake_pool_withdraw: AccountInfo<'info>, + stake_pool_withdraw: UncheckedAccount<'info>, #[account(mut)] - validator_list: AccountInfo<'info>, + validator_list: UncheckedAccount<'info>, #[account(mut)] - stake: AccountInfo<'info>, - validator: AccountInfo<'info>, + stake: UncheckedAccount<'info>, + validator: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, clock: Sysvar<'info, Clock>, - sysvar_stake_history: AccountInfo<'info>, - stake_config: AccountInfo<'info>, + sysvar_stake_history: UncheckedAccount<'info>, + stake_config: UncheckedAccount<'info>, system_program: Program<'info, System>, - stake_program: AccountInfo<'info>, + stake_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct RemoveValidatorFromPool<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, staker: Signer<'info>, - stake_pool_withdraw: AccountInfo<'info>, - new_stake_authority: AccountInfo<'info>, + stake_pool_withdraw: UncheckedAccount<'info>, + new_stake_authority: UncheckedAccount<'info>, #[account(mut)] - validator_list: AccountInfo<'info>, + validator_list: UncheckedAccount<'info>, #[account(mut)] - stake_account: AccountInfo<'info>, - transient_stake_account: AccountInfo<'info>, + stake_account: UncheckedAccount<'info>, + transient_stake_account: UncheckedAccount<'info>, #[account(mut)] - destination_stake_account: AccountInfo<'info>, + destination_stake_account: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, - stake_program: AccountInfo<'info>, + stake_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DecreaseValidatorStake<'info> { - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, staker: Signer<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - validator_list: AccountInfo<'info>, + validator_list: UncheckedAccount<'info>, #[account(mut)] - validator_stake: AccountInfo<'info>, + validator_stake: UncheckedAccount<'info>, #[account(mut)] - transient_stake: AccountInfo<'info>, + transient_stake: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, rent: Sysvar<'info, Rent>, system_program: Program<'info, System>, - stake_program: AccountInfo<'info>, + stake_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct IncreaseValidatorStake<'info> { - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, staker: Signer<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - validator_list: AccountInfo<'info>, + validator_list: UncheckedAccount<'info>, #[account(mut)] - reserve_stake: AccountInfo<'info>, + reserve_stake: UncheckedAccount<'info>, #[account(mut)] - transient_stake: AccountInfo<'info>, - validator_stake: AccountInfo<'info>, - validator: AccountInfo<'info>, + transient_stake: UncheckedAccount<'info>, + validator_stake: UncheckedAccount<'info>, + validator: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, rent: Sysvar<'info, Rent>, - sysvar_stake_history: AccountInfo<'info>, - stake_config: AccountInfo<'info>, + sysvar_stake_history: UncheckedAccount<'info>, + stake_config: UncheckedAccount<'info>, system_program: Program<'info, System>, - stake_program: AccountInfo<'info>, + stake_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetPreferredValidator<'info> { #[account(mut)] - stake_pool_address: AccountInfo<'info>, + stake_pool_address: UncheckedAccount<'info>, staker: Signer<'info>, - validator_list_address: AccountInfo<'info>, + validator_list_address: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UpdateValidatorListBalance<'info> { - stake_pool: AccountInfo<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - validator_list_address: AccountInfo<'info>, + validator_list_address: UncheckedAccount<'info>, #[account(mut)] - reserve_stake: AccountInfo<'info>, + reserve_stake: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, - sysvar_stake_history: AccountInfo<'info>, - stake_program: AccountInfo<'info>, + sysvar_stake_history: UncheckedAccount<'info>, + stake_program: UncheckedAccount<'info>, // #[account(mut)] - // optional_validator_stake_account: AccountInfo<'info>, + // optional_validator_stake_account: UncheckedAccount<'info>, // #[account(mut)] - // optional_transient_stake_account: AccountInfo<'info>, + // optional_transient_stake_account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UpdateStakePoolBalance<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, - withdraw_authority: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, + withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - validator_list_storage: AccountInfo<'info>, - reserve_stake: AccountInfo<'info>, + validator_list_storage: UncheckedAccount<'info>, + reserve_stake: UncheckedAccount<'info>, #[account(mut)] - manager_fee_account: AccountInfo<'info>, + manager_fee_account: UncheckedAccount<'info>, #[account(mut)] - stake_pool_mint: AccountInfo<'info>, + stake_pool_mint: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct CleanupRemovedValidatorEntries<'info> { - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, #[account(mut)] - validator_list_storage: AccountInfo<'info>, + validator_list_storage: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DepositStake<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, #[account(mut)] - validator_list_storage: AccountInfo<'info>, - stake_pool_deposit_authority: AccountInfo<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + validator_list_storage: UncheckedAccount<'info>, + stake_pool_deposit_authority: UncheckedAccount<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - deposit_stake_address: AccountInfo<'info>, + deposit_stake_address: UncheckedAccount<'info>, #[account(mut)] - validator_stake_account: AccountInfo<'info>, + validator_stake_account: UncheckedAccount<'info>, #[account(mut)] - reserve_stake_account: AccountInfo<'info>, + reserve_stake_account: UncheckedAccount<'info>, #[account(mut)] - pool_tokens_to: AccountInfo<'info>, + pool_tokens_to: UncheckedAccount<'info>, #[account(mut)] - manager_fee_account: AccountInfo<'info>, + manager_fee_account: UncheckedAccount<'info>, #[account(mut)] - referrer_pool_tokens_account: AccountInfo<'info>, + referrer_pool_tokens_account: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, - sysvar_stake_history: AccountInfo<'info>, + sysvar_stake_history: UncheckedAccount<'info>, token_program: Program<'info, Token>, - stake_program: AccountInfo<'info>, + stake_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct WithdrawStake<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, #[account(mut)] - validator_list_storage: AccountInfo<'info>, - stake_pool_withdraw: AccountInfo<'info>, + validator_list_storage: UncheckedAccount<'info>, + stake_pool_withdraw: UncheckedAccount<'info>, #[account(mut)] - stake_to_split: AccountInfo<'info>, + stake_to_split: UncheckedAccount<'info>, #[account(mut)] - stake_to_receive: AccountInfo<'info>, - user_stake_authority: AccountInfo<'info>, + stake_to_receive: UncheckedAccount<'info>, + user_stake_authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - user_pool_token_account: AccountInfo<'info>, + user_pool_token_account: UncheckedAccount<'info>, #[account(mut)] - manager_fee_account: AccountInfo<'info>, + manager_fee_account: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, - stake_program: AccountInfo<'info>, + stake_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetManager<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, manager: Signer<'info>, new_manager: Signer<'info>, - new_fee_receiver: AccountInfo<'info>, + new_fee_receiver: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetFee<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, manager: Signer<'info>, } #[derive(Accounts)] pub struct SetStaker<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, set_staker_authority: Signer<'info>, - new_staker: AccountInfo<'info>, + new_staker: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DepositSol<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - reserve_stake_account: AccountInfo<'info>, + reserve_stake_account: UncheckedAccount<'info>, #[account(mut)] lamports_from: Signer<'info>, #[account(mut)] - pool_tokens_to: AccountInfo<'info>, + pool_tokens_to: UncheckedAccount<'info>, #[account(mut)] - manager_fee_account: AccountInfo<'info>, + manager_fee_account: UncheckedAccount<'info>, #[account(mut)] - referrer_pool_tokens_account: AccountInfo<'info>, + referrer_pool_tokens_account: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, system_program: Program<'info, System>, token_program: Program<'info, Token>, } @@ -365,56 +365,56 @@ pub struct DepositSol<'info> { #[derive(Accounts)] pub struct SetFundingAuthority<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, manager: Signer<'info>, - // optional_auth: AccountInfo<'info>, + // optional_auth: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct WithdrawSol<'info> { #[account(mut)] - stake_pool: AccountInfo<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - pool_tokens_from: AccountInfo<'info>, + pool_tokens_from: UncheckedAccount<'info>, #[account(mut)] - reserve_stake_account: AccountInfo<'info>, + reserve_stake_account: UncheckedAccount<'info>, #[account(mut)] - lamports_to: AccountInfo<'info>, + lamports_to: UncheckedAccount<'info>, #[account(mut)] - manager_fee_account: AccountInfo<'info>, + manager_fee_account: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, - sysvar_stake_history: AccountInfo<'info>, - stake_program: AccountInfo<'info>, + sysvar_stake_history: UncheckedAccount<'info>, + stake_program: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct CreateTokenMetadata<'info> { - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, manager: Signer<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, - pool_mint: AccountInfo<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] payer: Signer<'info>, #[account(mut)] - token_metadata: AccountInfo<'info>, - mpl_token_metadata: AccountInfo<'info>, + token_metadata: UncheckedAccount<'info>, + mpl_token_metadata: UncheckedAccount<'info>, system_program: Program<'info, System>, rent: Sysvar<'info, Rent>, } #[derive(Accounts)] pub struct UpdateTokenMetadata<'info> { - stake_pool: AccountInfo<'info>, + stake_pool: UncheckedAccount<'info>, manager: Signer<'info>, - stake_pool_withdraw_authority: AccountInfo<'info>, + stake_pool_withdraw_authority: UncheckedAccount<'info>, #[account(mut)] - token_metadata: AccountInfo<'info>, - mpl_token_metadata: AccountInfo<'info>, + token_metadata: UncheckedAccount<'info>, + mpl_token_metadata: UncheckedAccount<'info>, } #[account] diff --git a/ts/packages/spl-stateless-asks/program/lib.rs b/ts/packages/spl-stateless-asks/program/lib.rs index 5f40bf245c..b0505f96bb 100644 --- a/ts/packages/spl-stateless-asks/program/lib.rs +++ b/ts/packages/spl-stateless-asks/program/lib.rs @@ -21,19 +21,19 @@ pub mod spl_stateless_asks { #[derive(Accounts)] pub struct AcceptOffer<'info> { - maker_wallet: AccountInfo<'info>, + maker_wallet: UncheckedAccount<'info>, taker_wallet: Signer<'info>, #[account(mut)] - maker_src_account: AccountInfo<'info>, + maker_src_account: UncheckedAccount<'info>, #[account(mut)] - maker_dst_account: AccountInfo<'info>, + maker_dst_account: UncheckedAccount<'info>, #[account(mut)] - taker_src_account: AccountInfo<'info>, + taker_src_account: UncheckedAccount<'info>, #[account(mut)] - taker_dst_account: AccountInfo<'info>, - maker_mint: AccountInfo<'info>, - taker_mint: AccountInfo<'info>, - authority: AccountInfo<'info>, + taker_dst_account: UncheckedAccount<'info>, + maker_mint: UncheckedAccount<'info>, + taker_mint: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, token_program: Program<'info, Token>, // optional_system_program: Program<'info, System>, } diff --git a/ts/packages/spl-token-lending/program/lib.rs b/ts/packages/spl-token-lending/program/lib.rs index e6bf9d0f70..6973ab986b 100644 --- a/ts/packages/spl-token-lending/program/lib.rs +++ b/ts/packages/spl-token-lending/program/lib.rs @@ -100,40 +100,40 @@ pub mod spl_token_lending { #[derive(Accounts)] pub struct InitLendingMarket<'info> { #[account(mut)] - lending_market: AccountInfo<'info>, + lending_market: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, token_program: Program<'info, Token>, - oracle_program: AccountInfo<'info>, + oracle_program: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct SetLendingMarketOwner<'info> { #[account(mut)] - lending_market: AccountInfo<'info>, + lending_market: UncheckedAccount<'info>, lending_market_owner: Signer<'info>, } #[derive(Accounts)] pub struct InitReserve<'info> { #[account(mut)] - source_liquidity: AccountInfo<'info>, + source_liquidity: UncheckedAccount<'info>, #[account(mut)] - destination_collateral: AccountInfo<'info>, + destination_collateral: UncheckedAccount<'info>, #[account(mut)] - reserve: AccountInfo<'info>, - reserve_liquidity_mint: AccountInfo<'info>, + reserve: UncheckedAccount<'info>, + reserve_liquidity_mint: UncheckedAccount<'info>, #[account(mut)] - reserve_liquidity_supply: AccountInfo<'info>, + reserve_liquidity_supply: UncheckedAccount<'info>, #[account(mut)] - reserve_liquidity_fee_receiver: AccountInfo<'info>, + reserve_liquidity_fee_receiver: UncheckedAccount<'info>, #[account(mut)] - reserve_collateral_mint: AccountInfo<'info>, + reserve_collateral_mint: UncheckedAccount<'info>, #[account(mut)] - reserve_collateral_supply: AccountInfo<'info>, - pyth_product: AccountInfo<'info>, - pyth_price: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + reserve_collateral_supply: UncheckedAccount<'info>, + pyth_product: UncheckedAccount<'info>, + pyth_price: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, lending_market_owner: Signer<'info>, user_transfer_authority: Signer<'info>, clock: Sysvar<'info, Clock>, @@ -144,25 +144,25 @@ pub struct InitReserve<'info> { #[derive(Accounts)] pub struct RefreshReserve<'info> { #[account(mut)] - reserve: AccountInfo<'info>, - reserve_liquidity_oracle: AccountInfo<'info>, + reserve: UncheckedAccount<'info>, + reserve_liquidity_oracle: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, } #[derive(Accounts)] pub struct DepositReserveLiquidity<'info> { #[account(mut)] - source_liquidity: AccountInfo<'info>, + source_liquidity: UncheckedAccount<'info>, #[account(mut)] - destination_collateral: AccountInfo<'info>, + destination_collateral: UncheckedAccount<'info>, #[account(mut)] - reserve: AccountInfo<'info>, + reserve: UncheckedAccount<'info>, #[account(mut)] - reserve_liquidity_supply: AccountInfo<'info>, + reserve_liquidity_supply: UncheckedAccount<'info>, #[account(mut)] - reserve_collateral_mint: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + reserve_collateral_mint: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, @@ -171,17 +171,17 @@ pub struct DepositReserveLiquidity<'info> { #[derive(Accounts)] pub struct RedeemReserveCollateral<'info> { #[account(mut)] - source_collateral: AccountInfo<'info>, + source_collateral: UncheckedAccount<'info>, #[account(mut)] - destination_liquidity: AccountInfo<'info>, + destination_liquidity: UncheckedAccount<'info>, #[account(mut)] - reserve: AccountInfo<'info>, + reserve: UncheckedAccount<'info>, #[account(mut)] - reserve_collateral_mint: AccountInfo<'info>, + reserve_collateral_mint: UncheckedAccount<'info>, #[account(mut)] - reserve_liquidity_supply: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + reserve_liquidity_supply: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, @@ -190,8 +190,8 @@ pub struct RedeemReserveCollateral<'info> { #[derive(Accounts)] pub struct InitObligation<'info> { #[account(mut)] - obligation: AccountInfo<'info>, - lending_market: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, obligation_owner: Signer<'info>, clock: Sysvar<'info, Clock>, rent: Sysvar<'info, Rent>, @@ -201,21 +201,21 @@ pub struct InitObligation<'info> { #[derive(Accounts)] pub struct RefreshObligation<'info> { #[account(mut)] - obligation: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, clock: Sysvar<'info, Clock>, - // optional_pubkey: AccountInfo<'info>, + // optional_pubkey: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DepositObligationCollateral<'info> { #[account(mut)] - source_collateral: AccountInfo<'info>, + source_collateral: UncheckedAccount<'info>, #[account(mut)] - destination_collateral: AccountInfo<'info>, - deposit_reserve: AccountInfo<'info>, + destination_collateral: UncheckedAccount<'info>, + deposit_reserve: UncheckedAccount<'info>, #[account(mut)] - obligation: AccountInfo<'info>, - lending_market: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, obligation_owner: Signer<'info>, user_transfer_authority: Signer<'info>, clock: Sysvar<'info, Clock>, @@ -225,14 +225,14 @@ pub struct DepositObligationCollateral<'info> { #[derive(Accounts)] pub struct WithdrawObligationCollateral<'info> { #[account(mut)] - source_collateral: AccountInfo<'info>, + source_collateral: UncheckedAccount<'info>, #[account(mut)] - destination_collateral: AccountInfo<'info>, - withdraw_reserve: AccountInfo<'info>, + destination_collateral: UncheckedAccount<'info>, + withdraw_reserve: UncheckedAccount<'info>, #[account(mut)] - obligation: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, obligation_owner: Signer<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, @@ -241,35 +241,35 @@ pub struct WithdrawObligationCollateral<'info> { #[derive(Accounts)] pub struct BorrowObligationLiquidity<'info> { #[account(mut)] - source_liquidity: AccountInfo<'info>, + source_liquidity: UncheckedAccount<'info>, #[account(mut)] - destination_liquidity: AccountInfo<'info>, + destination_liquidity: UncheckedAccount<'info>, #[account(mut)] - borrow_reserve: AccountInfo<'info>, + borrow_reserve: UncheckedAccount<'info>, #[account(mut)] - borrow_reserve_liquidity_fee_receiver: AccountInfo<'info>, + borrow_reserve_liquidity_fee_receiver: UncheckedAccount<'info>, #[account(mut)] - obligation: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, obligation_owner: Signer<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, // #[account(mut)] - // optional_host_fee_receiver: AccountInfo<'info>, + // optional_host_fee_receiver: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct RepayObligationLiquidity<'info> { #[account(mut)] - source_liquidity: AccountInfo<'info>, + source_liquidity: UncheckedAccount<'info>, #[account(mut)] - destination_liquidity: AccountInfo<'info>, + destination_liquidity: UncheckedAccount<'info>, #[account(mut)] - repay_reserve: AccountInfo<'info>, + repay_reserve: UncheckedAccount<'info>, #[account(mut)] - obligation: AccountInfo<'info>, - lending_market: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, @@ -278,20 +278,20 @@ pub struct RepayObligationLiquidity<'info> { #[derive(Accounts)] pub struct LiquidateObligation<'info> { #[account(mut)] - source_liquidity: AccountInfo<'info>, + source_liquidity: UncheckedAccount<'info>, #[account(mut)] - destination_collateral: AccountInfo<'info>, + destination_collateral: UncheckedAccount<'info>, #[account(mut)] - repay_reserve: AccountInfo<'info>, + repay_reserve: UncheckedAccount<'info>, #[account(mut)] - repay_reserve_liquidity_supply: AccountInfo<'info>, - withdraw_reserve: AccountInfo<'info>, + repay_reserve_liquidity_supply: UncheckedAccount<'info>, + withdraw_reserve: UncheckedAccount<'info>, #[account(mut)] - withdraw_reserve_collateral_supply: AccountInfo<'info>, + withdraw_reserve_collateral_supply: UncheckedAccount<'info>, #[account(mut)] - obligation: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + obligation: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, clock: Sysvar<'info, Clock>, token_program: Program<'info, Token>, @@ -300,19 +300,19 @@ pub struct LiquidateObligation<'info> { #[derive(Accounts)] pub struct FlashLoan<'info> { #[account(mut)] - source_liquidity: AccountInfo<'info>, + source_liquidity: UncheckedAccount<'info>, #[account(mut)] - destination_liquidity: AccountInfo<'info>, + destination_liquidity: UncheckedAccount<'info>, #[account(mut)] - reserve: AccountInfo<'info>, + reserve: UncheckedAccount<'info>, #[account(mut)] - reserve_liquidity_fee_receiver: AccountInfo<'info>, + reserve_liquidity_fee_receiver: UncheckedAccount<'info>, #[account(mut)] - host_fee_receiver: AccountInfo<'info>, - lending_market: AccountInfo<'info>, - lending_market_authority: AccountInfo<'info>, + host_fee_receiver: UncheckedAccount<'info>, + lending_market: UncheckedAccount<'info>, + lending_market_authority: UncheckedAccount<'info>, token_program: Program<'info, Token>, - flash_loan_receiver_program: AccountInfo<'info>, + flash_loan_receiver_program: UncheckedAccount<'info>, } #[account] diff --git a/ts/packages/spl-token-swap/program/lib.rs b/ts/packages/spl-token-swap/program/lib.rs index ad7d31b9d5..fd0dd35165 100644 --- a/ts/packages/spl-token-swap/program/lib.rs +++ b/ts/packages/spl-token-swap/program/lib.rs @@ -55,116 +55,116 @@ pub mod spl_token_swap { pub struct Initialize<'info> { #[account(mut)] swap: Signer<'info>, - authority: AccountInfo<'info>, - token_a: AccountInfo<'info>, - token_b: AccountInfo<'info>, + authority: UncheckedAccount<'info>, + token_a: UncheckedAccount<'info>, + token_b: UncheckedAccount<'info>, #[account(mut)] - pool: AccountInfo<'info>, - fee: AccountInfo<'info>, + pool: UncheckedAccount<'info>, + fee: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct Swap<'info> { - swap: AccountInfo<'info>, - authority: AccountInfo<'info>, + swap: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - source: AccountInfo<'info>, + source: UncheckedAccount<'info>, #[account(mut)] - swap_source: AccountInfo<'info>, + swap_source: UncheckedAccount<'info>, #[account(mut)] - swap_destination: AccountInfo<'info>, + swap_destination: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] - pool_fee: AccountInfo<'info>, + pool_fee: UncheckedAccount<'info>, token_program: Program<'info, Token>, // #[account(mut)] - // optional_host_fee: AccountInfo<'info>, + // optional_host_fee: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct DepositAllTokenTypes<'info> { - swap: AccountInfo<'info>, - authority: AccountInfo<'info>, + swap: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - deposit_token_a: AccountInfo<'info>, + deposit_token_a: UncheckedAccount<'info>, #[account(mut)] - deposit_token_b: AccountInfo<'info>, + deposit_token_b: UncheckedAccount<'info>, #[account(mut)] - swap_token_a: AccountInfo<'info>, + swap_token_a: UncheckedAccount<'info>, #[account(mut)] - swap_token_b: AccountInfo<'info>, + swap_token_b: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct WithdrawAllTokenTypes<'info> { - swap: AccountInfo<'info>, - authority: AccountInfo<'info>, + swap: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] - source: AccountInfo<'info>, + source: UncheckedAccount<'info>, #[account(mut)] - swap_token_a: AccountInfo<'info>, + swap_token_a: UncheckedAccount<'info>, #[account(mut)] - swap_token_b: AccountInfo<'info>, + swap_token_b: UncheckedAccount<'info>, #[account(mut)] - destination_token_a: AccountInfo<'info>, + destination_token_a: UncheckedAccount<'info>, #[account(mut)] - destination_token_b: AccountInfo<'info>, + destination_token_b: UncheckedAccount<'info>, #[account(mut)] - fee_account: AccountInfo<'info>, + fee_account: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct DepositSingleTokenTypeExactAmountIn<'info> { - swap: AccountInfo<'info>, - authority: AccountInfo<'info>, + swap: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - source_token: AccountInfo<'info>, + source_token: UncheckedAccount<'info>, #[account(mut)] - swap_token_a: AccountInfo<'info>, + swap_token_a: UncheckedAccount<'info>, #[account(mut)] - swap_token_b: AccountInfo<'info>, + swap_token_b: UncheckedAccount<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, token_program: Program<'info, Token>, } #[derive(Accounts)] pub struct WithdrawSingleTokenTypeExactAmountOut<'info> { - swap: AccountInfo<'info>, - authority: AccountInfo<'info>, + swap: UncheckedAccount<'info>, + authority: UncheckedAccount<'info>, user_transfer_authority: Signer<'info>, #[account(mut)] - pool_mint: AccountInfo<'info>, + pool_mint: UncheckedAccount<'info>, #[account(mut)] - pool_token_source: AccountInfo<'info>, + pool_token_source: UncheckedAccount<'info>, #[account(mut)] - swap_token_a: AccountInfo<'info>, + swap_token_a: UncheckedAccount<'info>, #[account(mut)] - swap_token_b: AccountInfo<'info>, + swap_token_b: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, #[account(mut)] - fee_account: AccountInfo<'info>, + fee_account: UncheckedAccount<'info>, token_program: Program<'info, Token>, } diff --git a/ts/packages/spl-token/program/lib.rs b/ts/packages/spl-token/program/lib.rs index 39d88ba113..2ba9397ba7 100644 --- a/ts/packages/spl-token/program/lib.rs +++ b/ts/packages/spl-token/program/lib.rs @@ -130,33 +130,33 @@ pub mod spl_token { #[derive(Accounts)] pub struct InitializeMint<'info> { #[account(mut)] - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, } #[derive(Accounts)] pub struct InitializeAccount<'info> { #[account(mut)] - account: AccountInfo<'info>, - mint: AccountInfo<'info>, - owner: AccountInfo<'info>, + account: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, + owner: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, } #[derive(Accounts)] pub struct InitializeMultisig<'info> { #[account(mut)] - multisig: AccountInfo<'info>, + multisig: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, - // optional_signer: AccountInfo<'info>, + // optional_signer: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct Transfer<'info> { #[account(mut)] - source: AccountInfo<'info>, + source: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, authority: Signer<'info>, // optional_signer: Signer<'info>, } @@ -164,8 +164,8 @@ pub struct Transfer<'info> { #[derive(Accounts)] pub struct Approve<'info> { #[account(mut)] - source: AccountInfo<'info>, - delegate: AccountInfo<'info>, + source: UncheckedAccount<'info>, + delegate: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -173,7 +173,7 @@ pub struct Approve<'info> { #[derive(Accounts)] pub struct Revoke<'info> { #[account(mut)] - source: AccountInfo<'info>, + source: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -181,7 +181,7 @@ pub struct Revoke<'info> { #[derive(Accounts)] pub struct SetAuthority<'info> { #[account(mut)] - owned: AccountInfo<'info>, + owned: UncheckedAccount<'info>, owner: Signer<'info>, signer: Signer<'info>, } @@ -189,9 +189,9 @@ pub struct SetAuthority<'info> { #[derive(Accounts)] pub struct MintTo<'info> { #[account(mut)] - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -199,9 +199,9 @@ pub struct MintTo<'info> { #[derive(Accounts)] pub struct Burn<'info> { #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, #[account(mut)] - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, authority: Signer<'info>, // optional_signer: Signer<'info>, } @@ -209,9 +209,9 @@ pub struct Burn<'info> { #[derive(Accounts)] pub struct CloseAccount<'info> { #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -219,8 +219,8 @@ pub struct CloseAccount<'info> { #[derive(Accounts)] pub struct FreezeAccount<'info> { #[account(mut)] - account: AccountInfo<'info>, - mint: AccountInfo<'info>, + account: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -228,8 +228,8 @@ pub struct FreezeAccount<'info> { #[derive(Accounts)] pub struct ThawAccount<'info> { #[account(mut)] - account: AccountInfo<'info>, - mint: AccountInfo<'info>, + account: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -237,10 +237,10 @@ pub struct ThawAccount<'info> { #[derive(Accounts)] pub struct TransferChecked<'info> { #[account(mut)] - source: AccountInfo<'info>, - mint: AccountInfo<'info>, + source: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, #[account(mut)] - destination: AccountInfo<'info>, + destination: UncheckedAccount<'info>, authority: Signer<'info>, // optional_signer: Signer<'info>, } @@ -248,9 +248,9 @@ pub struct TransferChecked<'info> { #[derive(Accounts)] pub struct ApproveChecked<'info> { #[account(mut)] - source: AccountInfo<'info>, - mint: AccountInfo<'info>, - delegate: AccountInfo<'info>, + source: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, + delegate: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -258,9 +258,9 @@ pub struct ApproveChecked<'info> { #[derive(Accounts)] pub struct MintToChecked<'info> { #[account(mut)] - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, owner: Signer<'info>, // optional_signer: Signer<'info>, } @@ -268,9 +268,9 @@ pub struct MintToChecked<'info> { #[derive(Accounts)] pub struct BurnChecked<'info> { #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, #[account(mut)] - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, authority: Signer<'info>, // optional_signer: Signer<'info>, } @@ -278,56 +278,56 @@ pub struct BurnChecked<'info> { #[derive(Accounts)] pub struct InitializeAccount2<'info> { #[account(mut)] - account: AccountInfo<'info>, - mint: AccountInfo<'info>, + account: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, rent: Sysvar<'info, Rent>, } #[derive(Accounts)] pub struct SyncNative<'info> { #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeAccount3<'info> { #[account(mut)] - account: AccountInfo<'info>, - mint: AccountInfo<'info>, + account: UncheckedAccount<'info>, + mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMultisig2<'info> { #[account(mut)] - multisig: AccountInfo<'info>, - signer: AccountInfo<'info>, + multisig: UncheckedAccount<'info>, + signer: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeMint2<'info> { #[account(mut)] - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct GetAccountDataSize<'info> { - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct InitializeImmutableOwner<'info> { #[account(mut)] - account: AccountInfo<'info>, + account: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct AmountToUiAmount<'info> { - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, } #[derive(Accounts)] pub struct UiAmountToAmount<'info> { - mint: AccountInfo<'info>, + mint: UncheckedAccount<'info>, } #[account] From 88a4ae873ae8660bbfa5dfa942126bc98517e10a Mon Sep 17 00:00:00 2001 From: Aursen Date: Wed, 3 Dec 2025 09:57:38 +0700 Subject: [PATCH 02/15] fix common.rs --- lang/src/common.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lang/src/common.rs b/lang/src/common.rs index f40f7ec948..7683ca1440 100644 --- a/lang/src/common.rs +++ b/lang/src/common.rs @@ -3,10 +3,7 @@ use crate::solana_program::account_info::AccountInfo; use crate::solana_program::system_program; use crate::Result; -pub fn close<'info>( - info: UncheckedAccount<'info>, - sol_destination: AccountInfo<'info>, -) -> Result<()> { +pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info>) -> Result<()> { // Transfer tokens from the account to the sol_destination. let dest_starting_lamports = sol_destination.lamports(); **sol_destination.lamports.borrow_mut() = From d8f228b6c7c23bdb802f96c858da2826d6b11742 Mon Sep 17 00:00:00 2001 From: Aursen Date: Thu, 18 Dec 2025 16:01:12 +0700 Subject: [PATCH 03/15] fix system program --- lang/src/system_program.rs | 392 +++++++++++++++++++++++++++---------- 1 file changed, 291 insertions(+), 101 deletions(-) diff --git a/lang/src/system_program.rs b/lang/src/system_program.rs index 8fdcdd5de5..b907545512 100644 --- a/lang/src/system_program.rs +++ b/lang/src/system_program.rs @@ -24,20 +24,39 @@ pub fn advance_nonce_account<'info>( crate::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.nonce.to_account_info(), - ctx.accounts.recent_blockhashes.to_account_info(), - ctx.accounts.authorized.to_account_info(), + ctx.accounts.nonce, + ctx.accounts.recent_blockhashes, + ctx.accounts.authorized, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct AdvanceNonceAccount<'info> { - pub nonce: UncheckedAccount<'info>, - pub authorized: UncheckedAccount<'info>, - pub recent_blockhashes: UncheckedAccount<'info>, + pub nonce: AccountInfo<'info>, + pub authorized: AccountInfo<'info>, + pub recent_blockhashes: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for AdvanceNonceAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.nonce.to_owned(), + self.recent_blockhashes.to_owned(), + self.authorized.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for AdvanceNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.authorized.key(), true), + ] + } } pub fn allocate<'info>( @@ -50,15 +69,26 @@ pub fn allocate<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_to_allocate.to_account_info()], + &[ctx.accounts.account_to_allocate], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct Allocate<'info> { - pub account_to_allocate: UncheckedAccount<'info>, + pub account_to_allocate: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Allocate<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account_to_allocate.to_owned()] + } +} + +impl<'info> ToAccountMetas for Allocate<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![AccountMeta::new(self.account_to_allocate.key(), true)] + } } pub fn allocate_with_seed<'info>( @@ -76,19 +106,30 @@ pub fn allocate_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.account_to_allocate.to_account_info(), - ctx.accounts.base.to_account_info(), - ], + &[ctx.accounts.account_to_allocate, ctx.accounts.base], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct AllocateWithSeed<'info> { - pub account_to_allocate: UncheckedAccount<'info>, - pub base: UncheckedAccount<'info>, + pub account_to_allocate: AccountInfo<'info>, + pub base: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for AllocateWithSeed<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account_to_allocate.to_owned(), self.base.to_owned()] + } +} + +impl<'info> ToAccountMetas for AllocateWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.account_to_allocate.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + ] + } } pub fn assign<'info>( @@ -101,15 +142,26 @@ pub fn assign<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account_to_assign.to_account_info()], + &[ctx.accounts.account_to_assign], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct Assign<'info> { - pub account_to_assign: UncheckedAccount<'info>, + pub account_to_assign: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Assign<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account_to_assign.to_owned()] + } +} + +impl<'info> ToAccountMetas for Assign<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![AccountMeta::new(self.account_to_assign.key(), true)] + } } pub fn assign_with_seed<'info>( @@ -125,19 +177,30 @@ pub fn assign_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.account_to_assign.to_account_info(), - ctx.accounts.base.to_account_info(), - ], + &[ctx.accounts.account_to_assign, ctx.accounts.base], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct AssignWithSeed<'info> { - pub account_to_assign: UncheckedAccount<'info>, - pub base: UncheckedAccount<'info>, + pub account_to_assign: AccountInfo<'info>, + pub base: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for AssignWithSeed<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account_to_assign.to_owned(), self.base.to_owned()] + } +} + +impl<'info> ToAccountMetas for AssignWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.account_to_assign.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + ] + } } pub fn authorize_nonce_account<'info>( @@ -151,19 +214,30 @@ pub fn authorize_nonce_account<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.nonce.to_account_info(), - ctx.accounts.authorized.to_account_info(), - ], + &[ctx.accounts.nonce, ctx.accounts.authorized], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct AuthorizeNonceAccount<'info> { - pub nonce: UncheckedAccount<'info>, - pub authorized: UncheckedAccount<'info>, + pub nonce: AccountInfo<'info>, + pub authorized: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for AuthorizeNonceAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.nonce.to_owned(), self.authorized.to_owned()] + } +} + +impl<'info> ToAccountMetas for AuthorizeNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.authorized.key(), true), + ] + } } pub fn create_account<'info>( @@ -181,19 +255,30 @@ pub fn create_account<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.to.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.to], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct CreateAccount<'info> { - pub from: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub to: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CreateAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.from.to_owned(), self.to.to_owned()] + } +} + +impl<'info> ToAccountMetas for CreateAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.to.key(), true), + ] + } } pub fn create_account_with_seed<'info>( @@ -214,21 +299,36 @@ pub fn create_account_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.to.to_account_info(), - ctx.accounts.base.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.base], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct CreateAccountWithSeed<'info> { - pub from: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub base: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub base: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CreateAccountWithSeed<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.to.to_owned(), + self.base.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for CreateAccountWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.to.key(), false), + AccountMeta::new_readonly(self.to.key(), true), + ] + } } pub fn create_nonce_account<'info>( @@ -244,31 +344,49 @@ pub fn create_nonce_account<'info>( ); crate::solana_program::program::invoke_signed( &ixs[0], - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.nonce.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.nonce.clone()], ctx.signer_seeds, )?; crate::solana_program::program::invoke_signed( &ixs[1], &[ - ctx.accounts.nonce.to_account_info(), - ctx.accounts.recent_blockhashes.to_account_info(), - ctx.accounts.rent.to_account_info(), + ctx.accounts.nonce, + ctx.accounts.recent_blockhashes, + ctx.accounts.rent, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct CreateNonceAccount<'info> { - pub from: UncheckedAccount<'info>, - pub nonce: UncheckedAccount<'info>, - pub recent_blockhashes: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub nonce: AccountInfo<'info>, + pub recent_blockhashes: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CreateNonceAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.nonce.to_owned(), + self.recent_blockhashes.to_owned(), + self.rent.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for CreateNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.rent.key(), false), + ] + } } pub fn create_nonce_account_with_seed<'info>( @@ -288,9 +406,9 @@ pub fn create_nonce_account_with_seed<'info>( crate::solana_program::program::invoke_signed( &ixs[0], &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.nonce.to_account_info(), - ctx.accounts.base.to_account_info(), + ctx.accounts.from, + ctx.accounts.nonce.clone(), + ctx.accounts.base, ], ctx.signer_seeds, )?; @@ -298,22 +416,45 @@ pub fn create_nonce_account_with_seed<'info>( crate::solana_program::program::invoke_signed( &ixs[1], &[ - ctx.accounts.nonce.to_account_info(), - ctx.accounts.recent_blockhashes.to_account_info(), - ctx.accounts.rent.to_account_info(), + ctx.accounts.nonce, + ctx.accounts.recent_blockhashes, + ctx.accounts.rent, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct CreateNonceAccountWithSeed<'info> { - pub from: UncheckedAccount<'info>, - pub nonce: UncheckedAccount<'info>, - pub base: UncheckedAccount<'info>, - pub recent_blockhashes: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub nonce: AccountInfo<'info>, + pub base: AccountInfo<'info>, + pub recent_blockhashes: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CreateNonceAccountWithSeed<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.nonce.to_owned(), + self.base.to_owned(), + self.recent_blockhashes.to_owned(), + self.rent.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for CreateNonceAccountWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), false), + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.rent.key(), false), + ] + } } pub fn transfer<'info>( @@ -327,19 +468,30 @@ pub fn transfer<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.to.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.to], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct Transfer<'info> { - pub from: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub to: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Transfer<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.from.to_owned(), self.to.to_owned()] + } +} + +impl<'info> ToAccountMetas for Transfer<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.to.key(), false), + ] + } } pub fn transfer_with_seed<'info>( @@ -358,21 +510,36 @@ pub fn transfer_with_seed<'info>( ); crate::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.base.to_account_info(), - ctx.accounts.to.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.base, ctx.accounts.to], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TransferWithSeed<'info> { - pub from: UncheckedAccount<'info>, - pub base: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub base: AccountInfo<'info>, + pub to: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferWithSeed<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.base.to_owned(), + self.to.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for TransferWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + AccountMeta::new(self.to.key(), false), + ] + } } pub fn withdraw_nonce_account<'info>( @@ -388,22 +555,45 @@ pub fn withdraw_nonce_account<'info>( crate::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.nonce.to_account_info(), - ctx.accounts.to.to_account_info(), - ctx.accounts.recent_blockhashes.to_account_info(), - ctx.accounts.rent.to_account_info(), - ctx.accounts.authorized.to_account_info(), + ctx.accounts.nonce, + ctx.accounts.to, + ctx.accounts.recent_blockhashes, + ctx.accounts.rent, + ctx.accounts.authorized, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct WithdrawNonceAccount<'info> { - pub nonce: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub recent_blockhashes: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, - pub authorized: UncheckedAccount<'info>, + pub nonce: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub recent_blockhashes: AccountInfo<'info>, + pub rent: AccountInfo<'info>, + pub authorized: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for WithdrawNonceAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.nonce.to_owned(), + self.to.to_owned(), + self.recent_blockhashes.to_owned(), + self.rent.to_owned(), + self.authorized.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for WithdrawNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new(self.to.key(), false), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.rent.key(), false), + AccountMeta::new_readonly(self.authorized.key(), true), + ] + } } From 2ba898946558c1c2c83e3e04c8d1a91ea1a09ae9 Mon Sep 17 00:00:00 2001 From: Aursen Date: Thu, 18 Dec 2025 17:13:06 +0700 Subject: [PATCH 04/15] remove ToAccountMetas needed for cpi --- lang/src/context.rs | 24 +- lang/src/system_program.rs | 124 ----- spl/src/associated_token.rs | 56 ++- spl/src/memo.rs | 3 +- spl/src/metadata.rs | 312 ++++++------ spl/src/stake.rs | 69 ++- spl/src/token.rs | 353 +++++++++----- spl/src/token_2022.rs | 444 ++++++++++++------ spl/src/token_2022_extensions/cpi_guard.rs | 36 +- .../default_account_state.rs | 46 +- .../group_member_pointer.rs | 45 +- .../token_2022_extensions/group_pointer.rs | 44 +- .../token_2022_extensions/immutable_owner.rs | 26 +- .../interest_bearing_mint.rs | 45 +- .../token_2022_extensions/memo_transfer.rs | 36 +- .../token_2022_extensions/metadata_pointer.rs | 22 +- .../mint_close_authority.rs | 22 +- .../token_2022_extensions/non_transferable.rs | 23 +- .../permanent_delegate.rs | 22 +- spl/src/token_2022_extensions/token_group.rs | 72 ++- .../token_2022_extensions/token_metadata.rs | 89 ++-- spl/src/token_2022_extensions/transfer_fee.rs | 149 ++++-- .../token_2022_extensions/transfer_hook.rs | 45 +- tests/escrow/programs/escrow/src/lib.rs | 18 +- 24 files changed, 1228 insertions(+), 897 deletions(-) diff --git a/lang/src/context.rs b/lang/src/context.rs index 0e24b21efa..11bb2b63bc 100644 --- a/lang/src/context.rs +++ b/lang/src/context.rs @@ -1,7 +1,6 @@ //! Data structures that are used to provide non-argument inputs to program endpoints use crate::solana_program::account_info::AccountInfo; -use crate::solana_program::instruction::AccountMeta; use crate::solana_program::pubkey::Pubkey; use crate::{Accounts, Bumps, ToAccountInfos, ToAccountMetas}; use std::fmt; @@ -170,7 +169,7 @@ where /// ``` pub struct CpiContext<'a, 'b, 'c, 'info, T> where - T: ToAccountMetas + ToAccountInfos<'info>, + T: ToAccountInfos<'info>, { pub accounts: T, pub remaining_accounts: Vec>, @@ -180,7 +179,7 @@ where impl<'a, 'b, 'c, 'info, T> CpiContext<'a, 'b, 'c, 'info, T> where - T: ToAccountMetas + ToAccountInfos<'info>, + T: ToAccountInfos<'info>, { #[must_use] pub fn new(program_id: Pubkey, accounts: T) -> Self { @@ -228,22 +227,3 @@ impl<'info, T: ToAccountInfos<'info> + ToAccountMetas> ToAccountInfos<'info> infos } } - -impl<'info, T: ToAccountInfos<'info> + ToAccountMetas> ToAccountMetas - for CpiContext<'_, '_, '_, 'info, T> -{ - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut metas = self.accounts.to_account_metas(is_signer); - metas.append( - &mut self - .remaining_accounts - .iter() - .map(|acc| match acc.is_writable { - false => AccountMeta::new_readonly(*acc.key, acc.is_signer), - true => AccountMeta::new(*acc.key, acc.is_signer), - }) - .collect(), - ); - metas - } -} diff --git a/lang/src/system_program.rs b/lang/src/system_program.rs index b907545512..6ee6c26aa8 100644 --- a/lang/src/system_program.rs +++ b/lang/src/system_program.rs @@ -1,5 +1,3 @@ -// Avoiding AccountInfo deprecated msg in anchor context -#![allow(deprecated)] use crate::prelude::*; use crate::solana_program::pubkey::Pubkey; @@ -49,16 +47,6 @@ impl<'info> ToAccountInfos<'info> for AdvanceNonceAccount<'info> { } } -impl<'info> ToAccountMetas for AdvanceNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.authorized.key(), true), - ] - } -} - pub fn allocate<'info>( ctx: CpiContext<'_, '_, '_, 'info, Allocate<'info>>, space: u64, @@ -85,12 +73,6 @@ impl<'info> ToAccountInfos<'info> for Allocate<'info> { } } -impl<'info> ToAccountMetas for Allocate<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![AccountMeta::new(self.account_to_allocate.key(), true)] - } -} - pub fn allocate_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, AllocateWithSeed<'info>>, seed: &str, @@ -123,15 +105,6 @@ impl<'info> ToAccountInfos<'info> for AllocateWithSeed<'info> { } } -impl<'info> ToAccountMetas for AllocateWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.account_to_allocate.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - ] - } -} - pub fn assign<'info>( ctx: CpiContext<'_, '_, '_, 'info, Assign<'info>>, owner: &Pubkey, @@ -158,12 +131,6 @@ impl<'info> ToAccountInfos<'info> for Assign<'info> { } } -impl<'info> ToAccountMetas for Assign<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![AccountMeta::new(self.account_to_assign.key(), true)] - } -} - pub fn assign_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, AssignWithSeed<'info>>, seed: &str, @@ -194,15 +161,6 @@ impl<'info> ToAccountInfos<'info> for AssignWithSeed<'info> { } } -impl<'info> ToAccountMetas for AssignWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.account_to_assign.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - ] - } -} - pub fn authorize_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, AuthorizeNonceAccount<'info>>, new_authority: &Pubkey, @@ -231,15 +189,6 @@ impl<'info> ToAccountInfos<'info> for AuthorizeNonceAccount<'info> { } } -impl<'info> ToAccountMetas for AuthorizeNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.authorized.key(), true), - ] - } -} - pub fn create_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateAccount<'info>>, lamports: u64, @@ -272,15 +221,6 @@ impl<'info> ToAccountInfos<'info> for CreateAccount<'info> { } } -impl<'info> ToAccountMetas for CreateAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.to.key(), true), - ] - } -} - pub fn create_account_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateAccountWithSeed<'info>>, seed: &str, @@ -321,16 +261,6 @@ impl<'info> ToAccountInfos<'info> for CreateAccountWithSeed<'info> { } } -impl<'info> ToAccountMetas for CreateAccountWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.to.key(), false), - AccountMeta::new_readonly(self.to.key(), true), - ] - } -} - pub fn create_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccount<'info>>, lamports: u64, @@ -378,17 +308,6 @@ impl<'info> ToAccountInfos<'info> for CreateNonceAccount<'info> { } } -impl<'info> ToAccountMetas for CreateNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.rent.key(), false), - ] - } -} - pub fn create_nonce_account_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccountWithSeed<'info>>, lamports: u64, @@ -445,18 +364,6 @@ impl<'info> ToAccountInfos<'info> for CreateNonceAccountWithSeed<'info> { } } -impl<'info> ToAccountMetas for CreateNonceAccountWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), false), - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.rent.key(), false), - ] - } -} - pub fn transfer<'info>( ctx: CpiContext<'_, '_, '_, 'info, Transfer<'info>>, lamports: u64, @@ -485,15 +392,6 @@ impl<'info> ToAccountInfos<'info> for Transfer<'info> { } } -impl<'info> ToAccountMetas for Transfer<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.to.key(), false), - ] - } -} - pub fn transfer_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferWithSeed<'info>>, from_seed: String, @@ -532,16 +430,6 @@ impl<'info> ToAccountInfos<'info> for TransferWithSeed<'info> { } } -impl<'info> ToAccountMetas for TransferWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - AccountMeta::new(self.to.key(), false), - ] - } -} - pub fn withdraw_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawNonceAccount<'info>>, lamports: u64, @@ -585,15 +473,3 @@ impl<'info> ToAccountInfos<'info> for WithdrawNonceAccount<'info> { ] } } - -impl<'info> ToAccountMetas for WithdrawNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new(self.to.key(), false), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.rent.key(), false), - AccountMeta::new_readonly(self.authorized.key(), true), - ] - } -} diff --git a/spl/src/associated_token.rs b/spl/src/associated_token.rs index 0b27c62476..7ef639f0e7 100644 --- a/spl/src/associated_token.rs +++ b/spl/src/associated_token.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; pub use ::spl_associated_token_account_interface as spl_associated_token_account; pub use ::spl_associated_token_account_interface::{ @@ -19,12 +19,12 @@ pub fn create<'info>(ctx: CpiContext<'_, '_, '_, 'info, Create<'info>>) -> Resul anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.payer.to_account_info(), - ctx.accounts.associated_token.to_account_info(), - ctx.accounts.authority.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.system_program.to_account_info(), - ctx.accounts.token_program.to_account_info(), + ctx.accounts.payer, + ctx.accounts.associated_token, + ctx.accounts.authority, + ctx.accounts.mint, + ctx.accounts.system_program, + ctx.accounts.token_program, ], ctx.signer_seeds, ) @@ -43,26 +43,38 @@ pub fn create_idempotent<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.payer.to_account_info(), - ctx.accounts.associated_token.to_account_info(), - ctx.accounts.authority.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.system_program.to_account_info(), - ctx.accounts.token_program.to_account_info(), + ctx.accounts.payer, + ctx.accounts.associated_token, + ctx.accounts.authority, + ctx.accounts.mint, + ctx.accounts.system_program, + ctx.accounts.token_program, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct Create<'info> { - pub payer: UncheckedAccount<'info>, - pub associated_token: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub system_program: UncheckedAccount<'info>, - pub token_program: UncheckedAccount<'info>, + pub payer: AccountInfo<'info>, + pub associated_token: AccountInfo<'info>, + pub authority: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, + pub token_program: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Create<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.payer.to_owned(), + self.associated_token.to_owned(), + self.authority.to_owned(), + self.mint.to_owned(), + self.system_program.to_owned(), + self.token_program.to_owned(), + ] + } } type CreateIdempotent<'info> = Create<'info>; diff --git a/spl/src/memo.rs b/spl/src/memo.rs index a758d2da72..0cf53689a9 100644 --- a/spl/src/memo.rs +++ b/spl/src/memo.rs @@ -1,6 +1,6 @@ +use anchor_lang::context::CpiContext; use anchor_lang::solana_program::pubkey::Pubkey; use anchor_lang::Result; -use anchor_lang::{context::CpiContext, Accounts}; pub use spl_memo_interface::instruction as spl_memo; pub use spl_memo_interface::v3::ID; @@ -22,7 +22,6 @@ pub fn build_memo<'info>(ctx: CpiContext<'_, '_, '_, 'info, BuildMemo>, memo: &[ .map_err(Into::into) } -#[derive(Accounts)] pub struct BuildMemo {} #[derive(Clone)] diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index 2d2384193c..43a8e8e45f 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -1,8 +1,8 @@ use anchor_lang::context::CpiContext; use anchor_lang::error::ErrorCode; -use anchor_lang::solana_program::account_info::AccountInfo; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{system_program, Accounts, Result, ToAccountInfos}; +use anchor_lang::{system_program, Result, ToAccountInfos}; use std::ops::Deref; pub use mpl_token_metadata; @@ -545,94 +545,99 @@ pub fn unverify_sized_collection_item<'info>( .map_err(Into::into) } -#[derive(Accounts)] pub struct ApproveCollectionAuthority<'info> { - pub collection_authority_record: UncheckedAccount<'info>, - pub new_collection_authority: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub collection_authority_record: AccountInfo<'info>, + pub new_collection_authority: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for ApproveCollectionAuthority<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.collection_authority_record.to_owned(), + self.new_collection_authority.to_owned(), + self.update_authority.to_owned(), + self.payer.to_owned(), + self.metadata.to_owned(), + self.mint.to_owned(), + ] + } } -#[derive(Accounts)] pub struct BubblegumSetCollectionSize<'info> { - pub metadata_account: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub bubblegum_signer: UncheckedAccount<'info>, + pub metadata_account: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub bubblegum_signer: AccountInfo<'info>, } -#[derive(Accounts)] pub struct BurnEditionNft<'info> { - pub metadata: UncheckedAccount<'info>, - pub owner: UncheckedAccount<'info>, - pub print_edition_mint: UncheckedAccount<'info>, - pub master_edition_mint: UncheckedAccount<'info>, - pub print_edition_token: UncheckedAccount<'info>, - pub master_edition_token: UncheckedAccount<'info>, - pub master_edition: UncheckedAccount<'info>, - pub print_edition: UncheckedAccount<'info>, - pub edition_marker: UncheckedAccount<'info>, - pub spl_token: UncheckedAccount<'info>, -} - -#[derive(Accounts)] + pub metadata: AccountInfo<'info>, + pub owner: AccountInfo<'info>, + pub print_edition_mint: AccountInfo<'info>, + pub master_edition_mint: AccountInfo<'info>, + pub print_edition_token: AccountInfo<'info>, + pub master_edition_token: AccountInfo<'info>, + pub master_edition: AccountInfo<'info>, + pub print_edition: AccountInfo<'info>, + pub edition_marker: AccountInfo<'info>, + pub spl_token: AccountInfo<'info>, +} + pub struct BurnNft<'info> { - pub metadata: UncheckedAccount<'info>, - pub owner: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub token: UncheckedAccount<'info>, - pub edition: UncheckedAccount<'info>, - pub spl_token: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub owner: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub token: AccountInfo<'info>, + pub edition: AccountInfo<'info>, + pub spl_token: AccountInfo<'info>, } -#[derive(Accounts)] pub struct CreateMetadataAccountsV3<'info> { - pub metadata: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub mint_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub system_program: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub mint_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, + pub rent: AccountInfo<'info>, } -#[derive(Accounts)] pub struct UpdateMetadataAccountsV2<'info> { - pub metadata: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, } -#[derive(Accounts)] pub struct CreateMasterEditionV3<'info> { - pub edition: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub mint_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub token_program: UncheckedAccount<'info>, - pub system_program: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, -} - -#[derive(Accounts)] + pub edition: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub mint_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub token_program: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + pub struct MintNewEditionFromMasterEditionViaToken<'info> { - pub new_metadata: UncheckedAccount<'info>, - pub new_edition: UncheckedAccount<'info>, - pub master_edition: UncheckedAccount<'info>, - pub new_mint: UncheckedAccount<'info>, - pub edition_mark_pda: UncheckedAccount<'info>, - pub new_mint_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub token_account_owner: UncheckedAccount<'info>, - pub token_account: UncheckedAccount<'info>, - pub new_metadata_update_authority: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub token_program: UncheckedAccount<'info>, - pub system_program: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub new_metadata: AccountInfo<'info>, + pub new_edition: AccountInfo<'info>, + pub master_edition: AccountInfo<'info>, + pub new_mint: AccountInfo<'info>, + pub edition_mark_pda: AccountInfo<'info>, + pub new_mint_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub token_account_owner: AccountInfo<'info>, + pub token_account: AccountInfo<'info>, + pub new_metadata_update_authority: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub token_program: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, + pub rent: AccountInfo<'info>, // // Not actually used by the program but still needed because it's needed // for the pda calculation in the helper. :/ @@ -640,140 +645,125 @@ pub struct MintNewEditionFromMasterEditionViaToken<'info> { // The better thing to do would be to remove this and have the instruction // helper pass in the `edition_mark_pda` directly. // - pub metadata_mint: UncheckedAccount<'info>, + pub metadata_mint: AccountInfo<'info>, } -#[derive(Accounts)] pub struct RevokeCollectionAuthority<'info> { - pub collection_authority_record: UncheckedAccount<'info>, - pub delegate_authority: UncheckedAccount<'info>, - pub revoke_authority: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub collection_authority_record: AccountInfo<'info>, + pub delegate_authority: AccountInfo<'info>, + pub revoke_authority: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub mint: AccountInfo<'info>, } -#[derive(Accounts)] pub struct SetCollectionSize<'info> { - pub metadata: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub system_program: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, } -#[derive(Accounts)] pub struct SetTokenStandard<'info> { - pub metadata_account: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub mint_account: UncheckedAccount<'info>, + pub metadata_account: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub mint_account: AccountInfo<'info>, } -#[derive(Accounts)] pub struct VerifyCollection<'info> { - pub payer: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub collection_authority: UncheckedAccount<'info>, - pub collection_mint: UncheckedAccount<'info>, - pub collection_metadata: UncheckedAccount<'info>, - pub collection_master_edition: UncheckedAccount<'info>, + pub payer: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub collection_authority: AccountInfo<'info>, + pub collection_mint: AccountInfo<'info>, + pub collection_metadata: AccountInfo<'info>, + pub collection_master_edition: AccountInfo<'info>, } -#[derive(Accounts)] pub struct VerifySizedCollectionItem<'info> { - pub payer: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub collection_authority: UncheckedAccount<'info>, - pub collection_mint: UncheckedAccount<'info>, - pub collection_metadata: UncheckedAccount<'info>, - pub collection_master_edition: UncheckedAccount<'info>, + pub payer: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub collection_authority: AccountInfo<'info>, + pub collection_mint: AccountInfo<'info>, + pub collection_metadata: AccountInfo<'info>, + pub collection_master_edition: AccountInfo<'info>, } -#[derive(Accounts)] pub struct SetAndVerifyCollection<'info> { - pub metadata: UncheckedAccount<'info>, - pub collection_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub collection_mint: UncheckedAccount<'info>, - pub collection_metadata: UncheckedAccount<'info>, - pub collection_master_edition: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub collection_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub collection_mint: AccountInfo<'info>, + pub collection_metadata: AccountInfo<'info>, + pub collection_master_edition: AccountInfo<'info>, } -#[derive(Accounts)] pub struct SetAndVerifySizedCollectionItem<'info> { - pub metadata: UncheckedAccount<'info>, - pub collection_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub collection_mint: UncheckedAccount<'info>, - pub collection_metadata: UncheckedAccount<'info>, - pub collection_master_edition: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub collection_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub collection_mint: AccountInfo<'info>, + pub collection_metadata: AccountInfo<'info>, + pub collection_master_edition: AccountInfo<'info>, } -#[derive(Accounts)] pub struct FreezeDelegatedAccount<'info> { - pub metadata: UncheckedAccount<'info>, - pub delegate: UncheckedAccount<'info>, - pub token_account: UncheckedAccount<'info>, - pub edition: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub token_program: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub delegate: AccountInfo<'info>, + pub token_account: AccountInfo<'info>, + pub edition: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub token_program: AccountInfo<'info>, } -#[derive(Accounts)] pub struct ThawDelegatedAccount<'info> { - pub metadata: UncheckedAccount<'info>, - pub delegate: UncheckedAccount<'info>, - pub token_account: UncheckedAccount<'info>, - pub edition: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub token_program: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub delegate: AccountInfo<'info>, + pub token_account: AccountInfo<'info>, + pub edition: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub token_program: AccountInfo<'info>, } -#[derive(Accounts)] pub struct UpdatePrimarySaleHappenedViaToken<'info> { - pub metadata: UncheckedAccount<'info>, - pub owner: UncheckedAccount<'info>, - pub token: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub owner: AccountInfo<'info>, + pub token: AccountInfo<'info>, } -#[derive(Accounts)] pub struct SignMetadata<'info> { - pub creator: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, + pub creator: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, } -#[derive(Accounts)] pub struct RemoveCreatorVerification<'info> { - pub creator: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, + pub creator: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, } -#[derive(Accounts)] pub struct Utilize<'info> { - pub metadata: UncheckedAccount<'info>, - pub token_account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub use_authority: UncheckedAccount<'info>, - pub owner: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub token_account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub use_authority: AccountInfo<'info>, + pub owner: AccountInfo<'info>, } -#[derive(Accounts)] pub struct UnverifyCollection<'info> { - pub metadata: UncheckedAccount<'info>, - pub collection_authority: UncheckedAccount<'info>, - pub collection_mint: UncheckedAccount<'info>, - pub collection: UncheckedAccount<'info>, - pub collection_master_edition_account: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub collection_authority: AccountInfo<'info>, + pub collection_mint: AccountInfo<'info>, + pub collection: AccountInfo<'info>, + pub collection_master_edition_account: AccountInfo<'info>, } -#[derive(Accounts)] pub struct UnverifySizedCollectionItem<'info> { - pub metadata: UncheckedAccount<'info>, - pub collection_authority: UncheckedAccount<'info>, - pub payer: UncheckedAccount<'info>, - pub collection_mint: UncheckedAccount<'info>, - pub collection: UncheckedAccount<'info>, - pub collection_master_edition_account: UncheckedAccount<'info>, + pub metadata: AccountInfo<'info>, + pub collection_authority: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub collection_mint: AccountInfo<'info>, + pub collection: AccountInfo<'info>, + pub collection_master_edition_account: AccountInfo<'info>, } #[derive(Clone, Debug, PartialEq)] diff --git a/spl/src/stake.rs b/spl/src/stake.rs index c9b6a5ab53..4840beb668 100644 --- a/spl/src/stake.rs +++ b/spl/src/stake.rs @@ -1,8 +1,7 @@ -use anchor_lang::{ - context::CpiContext, - solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, -}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::solana_program::pubkey::Pubkey; +use anchor_lang::{Result, ToAccountInfos}; use borsh::BorshDeserialize; use solana_stake_interface::{ self as stake, @@ -77,49 +76,79 @@ pub fn deactivate_stake<'info>( // CPI accounts -#[derive(Accounts)] pub struct Authorize<'info> { /// The stake account to be updated - pub stake: UncheckedAccount<'info>, + pub stake: AccountInfo<'info>, /// The existing authority - pub authorized: UncheckedAccount<'info>, + pub authorized: AccountInfo<'info>, /// The new authority to replace the existing authority - pub new_authorized: UncheckedAccount<'info>, + pub new_authorized: AccountInfo<'info>, /// Clock sysvar - pub clock: UncheckedAccount<'info>, + pub clock: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Authorize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.stake.to_owned(), + self.authorized.to_owned(), + self.new_authorized.to_owned(), + self.clock.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Withdraw<'info> { /// The stake account to be updated - pub stake: UncheckedAccount<'info>, + pub stake: AccountInfo<'info>, /// The stake account's withdraw authority - pub withdrawer: UncheckedAccount<'info>, + pub withdrawer: AccountInfo<'info>, /// Account to send withdrawn lamports to - pub to: UncheckedAccount<'info>, + pub to: AccountInfo<'info>, /// Clock sysvar - pub clock: UncheckedAccount<'info>, + pub clock: AccountInfo<'info>, /// StakeHistory sysvar - pub stake_history: UncheckedAccount<'info>, + pub stake_history: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Withdraw<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.stake.to_owned(), + self.withdrawer.to_owned(), + self.to.to_owned(), + self.clock.to_owned(), + self.stake_history.to_owned(), + ] + } } -#[derive(Accounts)] pub struct DeactivateStake<'info> { /// The stake account to be deactivated - pub stake: UncheckedAccount<'info>, + pub stake: AccountInfo<'info>, /// The stake account's stake authority - pub staker: UncheckedAccount<'info>, + pub staker: AccountInfo<'info>, /// Clock sysvar - pub clock: UncheckedAccount<'info>, + pub clock: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for DeactivateStake<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.stake.to_owned(), + self.staker.to_owned(), + self.clock.to_owned(), + ] + } } // State diff --git a/spl/src/token.rs b/spl/src/token.rs index e6d070d79b..0ca37fa6d1 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -1,8 +1,8 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::program_pack::Pack; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use std::ops::Deref; pub use spl_token::ID; @@ -22,11 +22,7 @@ pub fn transfer<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.to.to_account_info(), - ctx.accounts.authority.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -50,10 +46,10 @@ pub fn transfer_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.to.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.from, + ctx.accounts.mint, + ctx.accounts.to, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -74,11 +70,7 @@ pub fn mint_to<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), - ], + &[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -95,11 +87,7 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64) )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), - ], + &[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -120,9 +108,9 @@ pub fn approve<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.delegate.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.to, + ctx.accounts.delegate, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -147,10 +135,10 @@ pub fn approve_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.delegate.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.to, + ctx.accounts.mint, + ctx.accounts.delegate, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -166,10 +154,7 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.source.to_account_info(), - ctx.accounts.authority.to_account_info(), - ], + &[ctx.accounts.source, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -187,10 +172,10 @@ pub fn initialize_account<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), - ctx.accounts.rent.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, + ctx.accounts.authority, + ctx.accounts.rent, ], ctx.signer_seeds, ) @@ -208,10 +193,7 @@ pub fn initialize_account3<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.account, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) @@ -228,9 +210,9 @@ pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'inf anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.destination.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.account, + ctx.accounts.destination, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -250,9 +232,9 @@ pub fn freeze_account<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -270,9 +252,9 @@ pub fn thaw_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, ThawAccount<'info> anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -294,10 +276,7 @@ pub fn initialize_mint<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.mint.to_account_info(), - ctx.accounts.rent.to_account_info(), - ], + &[ctx.accounts.mint, ctx.accounts.rent], ctx.signer_seeds, ) .map_err(Into::into) @@ -316,12 +295,8 @@ pub fn initialize_mint2<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke_signed( - &ix, - &[ctx.accounts.mint.to_account_info()], - ctx.signer_seeds, - ) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke_signed(&ix, &[ctx.accounts.mint], ctx.signer_seeds) + .map_err(Into::into) } pub fn set_authority<'info>( @@ -339,10 +314,7 @@ pub fn set_authority<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.account_or_mint.to_account_info(), - ctx.accounts.current_authority.to_account_info(), - ], + &[ctx.accounts.account_or_mint, ctx.accounts.current_authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -352,118 +324,248 @@ pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) let ix = spl_token::instruction::sync_native(&spl_token::ID, ctx.accounts.account.key)?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ctx.accounts.account.to_account_info()], + &[ctx.accounts.account], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct Transfer<'info> { - pub from: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Transfer<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct TransferChecked<'info> { - pub from: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferChecked<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.mint.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct MintTo<'info> { - pub mint: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for MintTo<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.mint.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Burn<'info> { - pub mint: UncheckedAccount<'info>, - pub from: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub from: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Burn<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.mint.to_owned(), + self.from.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Approve<'info> { - pub to: UncheckedAccount<'info>, - pub delegate: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub to: AccountInfo<'info>, + pub delegate: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Approve<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.to.to_owned(), + self.delegate.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct ApproveChecked<'info> { - pub to: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub delegate: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub to: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub delegate: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for ApproveChecked<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.to.to_owned(), + self.mint.to_owned(), + self.delegate.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Revoke<'info> { - pub source: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub source: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Revoke<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.source.to_owned(), self.authority.to_owned()] + } } -#[derive(Accounts)] pub struct InitializeAccount<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + self.rent.to_owned(), + ] + } } -#[derive(Accounts)] pub struct InitializeAccount3<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeAccount3<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct CloseAccount<'info> { - pub account: UncheckedAccount<'info>, - pub destination: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub destination: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CloseAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.destination.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct FreezeAccount<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for FreezeAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct ThawAccount<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for ThawAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct InitializeMint<'info> { - pub mint: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeMint<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.mint.to_owned(), self.rent.to_owned()] + } } -#[derive(Accounts)] pub struct InitializeMint2<'info> { - pub mint: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeMint2<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.mint.to_owned()] + } } -#[derive(Accounts)] pub struct SetAuthority<'info> { - pub current_authority: UncheckedAccount<'info>, - pub account_or_mint: UncheckedAccount<'info>, + pub current_authority: AccountInfo<'info>, + pub account_or_mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for SetAuthority<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.current_authority.to_owned(), + self.account_or_mint.to_owned(), + ] + } } -#[derive(Accounts)] pub struct SyncNative<'info> { - pub account: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for SyncNative<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account.to_owned()] + } } #[derive(Clone, Debug, Default, PartialEq, Copy)] @@ -541,6 +643,7 @@ impl anchor_lang::Id for Token { // outside of these methods. pub mod accessor { use super::*; + use anchor_lang::prelude::UncheckedAccount; pub fn amount(account: &UncheckedAccount) -> Result { let bytes = account.try_borrow_data()?; diff --git a/spl/src/token_2022.rs b/spl/src/token_2022.rs index 57ecf44103..79a94e34f6 100644 --- a/spl/src/token_2022.rs +++ b/spl/src/token_2022.rs @@ -1,8 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::Result; -use anchor_lang::ToAccountInfo; -use anchor_lang::{context::CpiContext, Accounts}; +use anchor_lang::{Result, ToAccountInfos}; pub use spl_token_2022::ID; pub use spl_token_2022_interface as spl_token_2022; @@ -27,9 +26,9 @@ pub fn transfer<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.to.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.from, + ctx.accounts.to, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -54,10 +53,10 @@ pub fn transfer_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.to.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.from, + ctx.accounts.mint, + ctx.accounts.to, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -79,9 +78,9 @@ pub fn mint_to<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.to, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -105,9 +104,9 @@ pub fn mint_to_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.to, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -126,9 +125,9 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64) anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.from, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -152,9 +151,9 @@ pub fn burn_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.from.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.from, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -176,9 +175,9 @@ pub fn approve<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.delegate.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.to, + ctx.accounts.delegate, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -203,10 +202,10 @@ pub fn approve_checked<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.to.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.delegate.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.to, + ctx.accounts.mint, + ctx.accounts.delegate, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -223,8 +222,8 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.source.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.source, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -243,10 +242,10 @@ pub fn initialize_account<'info>( anchor_lang::solana_program::program::invoke( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), - ctx.accounts.rent.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, + ctx.accounts.authority, + ctx.accounts.rent, ], ) .map_err(Into::into) @@ -264,8 +263,8 @@ pub fn initialize_account3<'info>( anchor_lang::solana_program::program::invoke( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, ], ) .map_err(Into::into) @@ -282,9 +281,9 @@ pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'inf anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.destination.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.account, + ctx.accounts.destination, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -304,9 +303,9 @@ pub fn freeze_account<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -324,9 +323,9 @@ pub fn thaw_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, ThawAccount<'info> anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.account, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) @@ -349,8 +348,8 @@ pub fn initialize_mint<'info>( anchor_lang::solana_program::program::invoke( &ix, &[ - ctx.accounts.mint.to_account_info(), - ctx.accounts.rent.to_account_info(), + ctx.accounts.mint, + ctx.accounts.rent, ], ) .map_err(Into::into) @@ -369,7 +368,7 @@ pub fn initialize_mint2<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint.to_account_info()]) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]) .map_err(Into::into) } @@ -389,8 +388,8 @@ pub fn set_authority<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.account_or_mint.to_account_info(), - ctx.accounts.current_authority.to_account_info(), + ctx.accounts.account_or_mint, + ctx.accounts.current_authority, ], ctx.signer_seeds, ) @@ -399,7 +398,7 @@ pub fn set_authority<'info>( pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> { let ix = spl_token_2022::instruction::sync_native(&ctx.program_id, ctx.accounts.account.key)?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()]) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]) .map_err(Into::into) } @@ -412,7 +411,7 @@ pub fn get_account_data_size<'info>( ctx.accounts.mint.key, extension_types, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint.to_account_info()])?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint])?; anchor_lang::solana_program::program::get_return_data() .ok_or(anchor_lang::solana_program::program_error::ProgramError::InvalidInstructionData) .and_then(|(key, data)| { @@ -436,7 +435,7 @@ pub fn initialize_mint_close_authority<'info>( ctx.accounts.mint.key, close_authority, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint.to_account_info()]) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]) .map_err(Into::into) } @@ -447,7 +446,7 @@ pub fn initialize_immutable_owner<'info>( &ctx.program_id, ctx.accounts.account.key, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()]) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]) .map_err(Into::into) } @@ -460,7 +459,7 @@ pub fn amount_to_ui_amount<'info>( ctx.accounts.account.key, amount, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()])?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account])?; anchor_lang::solana_program::program::get_return_data() .ok_or(anchor_lang::solana_program::program_error::ProgramError::InvalidInstructionData) .and_then(|(key, data)| { @@ -484,7 +483,7 @@ pub fn ui_amount_to_amount<'info>( ctx.accounts.account.key, ui_amount, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account.to_account_info()])?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account])?; anchor_lang::solana_program::program::get_return_data() .ok_or(anchor_lang::solana_program::program_error::ProgramError::InvalidInstructionData) .and_then(|(key, data)| { @@ -499,151 +498,324 @@ pub fn ui_amount_to_amount<'info>( .map_err(Into::into) } -#[derive(Accounts)] pub struct Transfer<'info> { - pub from: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Transfer<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct TransferChecked<'info> { - pub from: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub from: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferChecked<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.from.to_owned(), + self.mint.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct MintTo<'info> { - pub mint: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for MintTo<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.mint.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct MintToChecked<'info> { - pub mint: UncheckedAccount<'info>, - pub to: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub to: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for MintToChecked<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.mint.to_owned(), + self.to.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Burn<'info> { - pub mint: UncheckedAccount<'info>, - pub from: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub from: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Burn<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.mint.to_owned(), + self.from.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct BurnChecked<'info> { - pub mint: UncheckedAccount<'info>, - pub from: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub from: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for BurnChecked<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.mint.to_owned(), + self.from.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Approve<'info> { - pub to: UncheckedAccount<'info>, - pub delegate: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub to: AccountInfo<'info>, + pub delegate: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Approve<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.to.to_owned(), + self.delegate.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct ApproveChecked<'info> { - pub to: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub delegate: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub to: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub delegate: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for ApproveChecked<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.to.to_owned(), + self.mint.to_owned(), + self.delegate.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct Revoke<'info> { - pub source: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub source: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for Revoke<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.source.to_owned(), self.authority.to_owned()] + } } -#[derive(Accounts)] pub struct InitializeAccount<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + self.rent.to_owned(), + ] + } } -#[derive(Accounts)] pub struct InitializeAccount3<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeAccount3<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct CloseAccount<'info> { - pub account: UncheckedAccount<'info>, - pub destination: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub destination: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CloseAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.destination.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct FreezeAccount<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for FreezeAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct ThawAccount<'info> { - pub account: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for ThawAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.account.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } -#[derive(Accounts)] pub struct InitializeMint<'info> { - pub mint: UncheckedAccount<'info>, - pub rent: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, + pub rent: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeMint<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.mint.to_owned(), self.rent.to_owned()] + } } -#[derive(Accounts)] pub struct InitializeMint2<'info> { - pub mint: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeMint2<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.mint.to_owned()] + } } -#[derive(Accounts)] pub struct SetAuthority<'info> { - pub current_authority: UncheckedAccount<'info>, - pub account_or_mint: UncheckedAccount<'info>, + pub current_authority: AccountInfo<'info>, + pub account_or_mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for SetAuthority<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.current_authority.to_owned(), + self.account_or_mint.to_owned(), + ] + } } -#[derive(Accounts)] pub struct SyncNative<'info> { - pub account: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for SyncNative<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account.to_owned()] + } } -#[derive(Accounts)] pub struct GetAccountDataSize<'info> { - pub mint: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for GetAccountDataSize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.mint.to_owned()] + } } -#[derive(Accounts)] pub struct InitializeMintCloseAuthority<'info> { - pub mint: UncheckedAccount<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeMintCloseAuthority<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.mint.to_owned()] + } } -#[derive(Accounts)] pub struct InitializeImmutableOwner<'info> { - pub account: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InitializeImmutableOwner<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account.to_owned()] + } } -#[derive(Accounts)] pub struct AmountToUiAmount<'info> { - pub account: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for AmountToUiAmount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account.to_owned()] + } } -#[derive(Accounts)] pub struct UiAmountToAmount<'info> { - pub account: UncheckedAccount<'info>, + pub account: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for UiAmountToAmount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.account.to_owned()] + } } #[derive(Clone)] diff --git a/spl/src/token_2022_extensions/cpi_guard.rs b/spl/src/token_2022_extensions/cpi_guard.rs index 0ab1175e98..bca2257e9a 100644 --- a/spl/src/token_2022_extensions/cpi_guard.rs +++ b/spl/src/token_2022_extensions/cpi_guard.rs @@ -1,7 +1,6 @@ -use anchor_lang::prelude::UncheckedAccount; -use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn cpi_guard_enable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'info>>) -> Result<()> { @@ -14,9 +13,9 @@ pub fn cpi_guard_enable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'info anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.account.to_account_info(), - ctx.accounts.owner.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.account, + ctx.accounts.owner, ], ctx.signer_seeds, ) @@ -34,18 +33,27 @@ pub fn cpi_guard_disable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'inf anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.account.to_account_info(), - ctx.accounts.owner.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.account, + ctx.accounts.owner, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct CpiGuard<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub account: UncheckedAccount<'info>, - pub owner: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub account: AccountInfo<'info>, + pub owner: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for CpiGuard<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.account.to_owned(), + self.owner.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/default_account_state.rs b/spl/src/token_2022_extensions/default_account_state.rs index d3d6ed619f..169b1a8202 100644 --- a/spl/src/token_2022_extensions/default_account_state.rs +++ b/spl/src/token_2022_extensions/default_account_state.rs @@ -1,7 +1,6 @@ -use anchor_lang::prelude::UncheckedAccount; -use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022::state::AccountState; use spl_token_2022_interface as spl_token_2022; @@ -16,19 +15,21 @@ pub fn default_account_state_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct DefaultAccountStateInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for DefaultAccountStateInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn default_account_state_update<'info>( @@ -46,18 +47,27 @@ pub fn default_account_state_update<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.freeze_authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.freeze_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct DefaultAccountStateUpdate<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub freeze_authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub freeze_authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for DefaultAccountStateUpdate<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.freeze_authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/group_member_pointer.rs b/spl/src/token_2022_extensions/group_member_pointer.rs index dc0c025f64..57d332573d 100644 --- a/spl/src/token_2022_extensions/group_member_pointer.rs +++ b/spl/src/token_2022_extensions/group_member_pointer.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn group_member_pointer_initialize<'info>( @@ -17,19 +17,21 @@ pub fn group_member_pointer_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct GroupMemberPointerInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for GroupMemberPointerInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn group_member_pointer_update<'info>( @@ -46,18 +48,27 @@ pub fn group_member_pointer_update<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct GroupMemberPointerUpdate<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for GroupMemberPointerUpdate<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/group_pointer.rs b/spl/src/token_2022_extensions/group_pointer.rs index 6fe4cc7536..0cc5c94850 100644 --- a/spl/src/token_2022_extensions/group_pointer.rs +++ b/spl/src/token_2022_extensions/group_pointer.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn group_pointer_initialize<'info>( @@ -17,19 +17,21 @@ pub fn group_pointer_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct GroupPointerInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for GroupPointerInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn group_pointer_update<'info>( @@ -45,18 +47,24 @@ pub fn group_pointer_update<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct GroupPointerUpdate<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for GroupPointerUpdate<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/immutable_owner.rs b/spl/src/token_2022_extensions/immutable_owner.rs index 09161115ab..620f4ec401 100644 --- a/spl/src/token_2022_extensions/immutable_owner.rs +++ b/spl/src/token_2022_extensions/immutable_owner.rs @@ -1,7 +1,6 @@ -use anchor_lang::prelude::UncheckedAccount; -use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn immutable_owner_initialize<'info>( @@ -13,17 +12,22 @@ pub fn immutable_owner_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.token_account.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.token_account], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct ImmutableOwnerInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub token_account: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub token_account: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for ImmutableOwnerInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.token_account.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/interest_bearing_mint.rs b/spl/src/token_2022_extensions/interest_bearing_mint.rs index ff6233c77d..4dc0ba420b 100644 --- a/spl/src/token_2022_extensions/interest_bearing_mint.rs +++ b/spl/src/token_2022_extensions/interest_bearing_mint.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn interest_bearing_mint_initialize<'info>( @@ -17,19 +17,21 @@ pub fn interest_bearing_mint_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct InterestBearingMintInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InterestBearingMintInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn interest_bearing_mint_update_rate<'info>( @@ -46,18 +48,27 @@ pub fn interest_bearing_mint_update_rate<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.rate_authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.rate_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct InterestBearingMintUpdateRate<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub rate_authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub rate_authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for InterestBearingMintUpdateRate<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.rate_authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/memo_transfer.rs b/spl/src/token_2022_extensions/memo_transfer.rs index 4c24d9a344..3bb60f6c7e 100644 --- a/spl/src/token_2022_extensions/memo_transfer.rs +++ b/spl/src/token_2022_extensions/memo_transfer.rs @@ -1,7 +1,6 @@ -use anchor_lang::prelude::UncheckedAccount; -use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn memo_transfer_initialize<'info>( @@ -16,9 +15,9 @@ pub fn memo_transfer_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.account.to_account_info(), - ctx.accounts.owner.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.account, + ctx.accounts.owner, ], ctx.signer_seeds, ) @@ -38,18 +37,27 @@ pub fn memo_transfer_disable<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.account.to_account_info(), - ctx.accounts.owner.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.account, + ctx.accounts.owner, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct MemoTransfer<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub account: UncheckedAccount<'info>, - pub owner: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub account: AccountInfo<'info>, + pub owner: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for MemoTransfer<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.account.to_owned(), + self.owner.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/metadata_pointer.rs b/spl/src/token_2022_extensions/metadata_pointer.rs index ba3414dd81..908a61e97c 100644 --- a/spl/src/token_2022_extensions/metadata_pointer.rs +++ b/spl/src/token_2022_extensions/metadata_pointer.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn metadata_pointer_initialize<'info>( @@ -17,17 +17,19 @@ pub fn metadata_pointer_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct MetadataPointerInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for MetadataPointerInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } diff --git a/spl/src/token_2022_extensions/mint_close_authority.rs b/spl/src/token_2022_extensions/mint_close_authority.rs index 1926e2743b..3bcc8f4f04 100644 --- a/spl/src/token_2022_extensions/mint_close_authority.rs +++ b/spl/src/token_2022_extensions/mint_close_authority.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn mint_close_authority_initialize<'info>( @@ -15,17 +15,19 @@ pub fn mint_close_authority_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct MintCloseAuthorityInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for MintCloseAuthorityInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } diff --git a/spl/src/token_2022_extensions/non_transferable.rs b/spl/src/token_2022_extensions/non_transferable.rs index dfe087659b..1e83cc6d3a 100644 --- a/spl/src/token_2022_extensions/non_transferable.rs +++ b/spl/src/token_2022_extensions/non_transferable.rs @@ -1,7 +1,6 @@ -use anchor_lang::prelude::UncheckedAccount; -use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn non_transferable_mint_initialize<'info>( @@ -13,17 +12,19 @@ pub fn non_transferable_mint_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct NonTransferableMintInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for NonTransferableMintInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } diff --git a/spl/src/token_2022_extensions/permanent_delegate.rs b/spl/src/token_2022_extensions/permanent_delegate.rs index b9a378cac7..055d4b26dc 100644 --- a/spl/src/token_2022_extensions/permanent_delegate.rs +++ b/spl/src/token_2022_extensions/permanent_delegate.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn permanent_delegate_initialize<'info>( @@ -15,17 +15,19 @@ pub fn permanent_delegate_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct PermanentDelegateInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for PermanentDelegateInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } diff --git a/spl/src/token_2022_extensions/token_group.rs b/spl/src/token_2022_extensions/token_group.rs index aa6c3bccd5..4d94ab0f78 100644 --- a/spl/src/token_2022_extensions/token_group.rs +++ b/spl/src/token_2022_extensions/token_group.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; pub fn token_group_initialize<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenGroupInitialize<'info>>, @@ -19,22 +19,32 @@ pub fn token_group_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id.to_account_info(), - ctx.accounts.group.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.mint_authority.to_account_info(), + ctx.accounts.program_id, + ctx.accounts.group, + ctx.accounts.mint, + ctx.accounts.mint_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TokenGroupInitialize<'info> { - pub program_id: UncheckedAccount<'info>, - pub group: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub mint_authority: UncheckedAccount<'info>, + pub program_id: AccountInfo<'info>, + pub group: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub mint_authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TokenGroupInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.program_id.to_owned(), + self.group.to_owned(), + self.mint.to_owned(), + self.mint_authority.to_owned(), + ] + } } pub fn token_member_initialize<'info>( @@ -51,24 +61,36 @@ pub fn token_member_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id.to_account_info(), - ctx.accounts.member.to_account_info(), - ctx.accounts.member_mint.to_account_info(), - ctx.accounts.member_mint_authority.to_account_info(), - ctx.accounts.group.to_account_info(), - ctx.accounts.group_update_authority.to_account_info(), + ctx.accounts.program_id, + ctx.accounts.member, + ctx.accounts.member_mint, + ctx.accounts.member_mint_authority, + ctx.accounts.group, + ctx.accounts.group_update_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TokenMemberInitialize<'info> { - pub program_id: UncheckedAccount<'info>, - pub member: UncheckedAccount<'info>, - pub member_mint: UncheckedAccount<'info>, - pub member_mint_authority: UncheckedAccount<'info>, - pub group: UncheckedAccount<'info>, - pub group_update_authority: UncheckedAccount<'info>, + pub program_id: AccountInfo<'info>, + pub member: AccountInfo<'info>, + pub member_mint: AccountInfo<'info>, + pub member_mint_authority: AccountInfo<'info>, + pub group: AccountInfo<'info>, + pub group_update_authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TokenMemberInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.program_id.to_owned(), + self.member.to_owned(), + self.member_mint.to_owned(), + self.member_mint_authority.to_owned(), + self.group.to_owned(), + self.group_update_authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/token_metadata.rs b/spl/src/token_2022_extensions/token_metadata.rs index dc9d764569..7f9f928be3 100644 --- a/spl/src/token_2022_extensions/token_metadata.rs +++ b/spl/src/token_2022_extensions/token_metadata.rs @@ -1,7 +1,6 @@ -use anchor_lang::prelude::UncheckedAccount; -use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; +use anchor_lang::{Result, ToAccountInfos}; use spl_pod::optional_keys::OptionalNonZeroPubkey; use spl_token_metadata_interface::state::Field; @@ -25,24 +24,35 @@ pub fn token_metadata_initialize<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id.to_account_info(), - ctx.accounts.metadata.to_account_info(), - ctx.accounts.update_authority.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.mint_authority.to_account_info(), + ctx.accounts.program_id, + ctx.accounts.metadata, + ctx.accounts.update_authority, + ctx.accounts.mint, + ctx.accounts.mint_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TokenMetadataInitialize<'info> { - pub program_id: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, - pub mint_authority: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub program_id: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, + pub mint_authority: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TokenMetadataInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.program_id.to_owned(), + self.metadata.to_owned(), + self.update_authority.to_owned(), + self.mint_authority.to_owned(), + self.mint.to_owned(), + ] + } } pub fn token_metadata_update_authority<'info>( @@ -58,21 +68,31 @@ pub fn token_metadata_update_authority<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id.to_account_info(), - ctx.accounts.metadata.to_account_info(), - ctx.accounts.current_authority.to_account_info(), + ctx.accounts.program_id, + ctx.accounts.metadata, + ctx.accounts.current_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TokenMetadataUpdateAuthority<'info> { - pub program_id: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub current_authority: UncheckedAccount<'info>, - pub new_authority: UncheckedAccount<'info>, + pub program_id: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub current_authority: AccountInfo<'info>, + pub new_authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TokenMetadataUpdateAuthority<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.program_id.to_owned(), + self.metadata.to_owned(), + self.current_authority.to_owned(), + self.new_authority.to_owned(), + ] + } } pub fn token_metadata_update_field<'info>( @@ -90,18 +110,27 @@ pub fn token_metadata_update_field<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.program_id.to_account_info(), - ctx.accounts.metadata.to_account_info(), - ctx.accounts.update_authority.to_account_info(), + ctx.accounts.program_id, + ctx.accounts.metadata, + ctx.accounts.update_authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TokenMetadataUpdateField<'info> { - pub program_id: UncheckedAccount<'info>, - pub metadata: UncheckedAccount<'info>, - pub update_authority: UncheckedAccount<'info>, + pub program_id: AccountInfo<'info>, + pub metadata: AccountInfo<'info>, + pub update_authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TokenMetadataUpdateField<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.program_id.to_owned(), + self.metadata.to_owned(), + self.update_authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/transfer_fee.rs b/spl/src/token_2022_extensions/transfer_fee.rs index 84a8c0ac00..3b430cf729 100644 --- a/spl/src/token_2022_extensions/transfer_fee.rs +++ b/spl/src/token_2022_extensions/transfer_fee.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::{AccountInfo, UncheckedAccount}; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn transfer_fee_initialize<'info>( @@ -21,19 +21,21 @@ pub fn transfer_fee_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TransferFeeInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferFeeInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn transfer_fee_set<'info>( @@ -52,20 +54,29 @@ pub fn transfer_fee_set<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TransferFeeSetTransferFee<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferFeeSetTransferFee<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } pub fn transfer_checked_with_fee<'info>( @@ -88,24 +99,35 @@ pub fn transfer_checked_with_fee<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.source.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.destination.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.source, + ctx.accounts.mint, + ctx.accounts.destination, + ctx.accounts.authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TransferCheckedWithFee<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub source: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub destination: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub source: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub destination: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferCheckedWithFee<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.source.to_owned(), + self.mint.to_owned(), + self.destination.to_owned(), + self.authority.to_owned(), + ] + } } pub fn harvest_withheld_tokens_to_mint<'info>( @@ -119,8 +141,8 @@ pub fn harvest_withheld_tokens_to_mint<'info>( )?; let mut account_infos = vec![ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, ]; account_infos.extend_from_slice(&sources); @@ -128,10 +150,15 @@ pub fn harvest_withheld_tokens_to_mint<'info>( .map_err(Into::into) } -#[derive(Accounts)] pub struct HarvestWithheldTokensToMint<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for HarvestWithheldTokensToMint<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn withdraw_withheld_tokens_from_mint<'info>( @@ -148,22 +175,32 @@ pub fn withdraw_withheld_tokens_from_mint<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.destination.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.destination, + ctx.accounts.authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct WithdrawWithheldTokensFromMint<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub destination: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub destination: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for WithdrawWithheldTokensFromMint<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.destination.to_owned(), + self.authority.to_owned(), + ] + } } pub fn withdraw_withheld_tokens_from_accounts<'info>( @@ -180,10 +217,10 @@ pub fn withdraw_withheld_tokens_from_accounts<'info>( )?; let mut account_infos = vec![ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.destination.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.destination, + ctx.accounts.authority, ]; account_infos.extend_from_slice(&sources); @@ -191,10 +228,20 @@ pub fn withdraw_withheld_tokens_from_accounts<'info>( .map_err(Into::into) } -#[derive(Accounts)] pub struct WithdrawWithheldTokensFromAccounts<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub destination: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub destination: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for WithdrawWithheldTokensFromAccounts<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.destination.to_owned(), + self.authority.to_owned(), + ] + } } diff --git a/spl/src/token_2022_extensions/transfer_hook.rs b/spl/src/token_2022_extensions/transfer_hook.rs index b6b76887cd..2011ce1f52 100644 --- a/spl/src/token_2022_extensions/transfer_hook.rs +++ b/spl/src/token_2022_extensions/transfer_hook.rs @@ -1,7 +1,7 @@ -use anchor_lang::prelude::UncheckedAccount; +use anchor_lang::context::CpiContext; +use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{context::CpiContext, Accounts}; -use anchor_lang::{Result, ToAccountInfo}; +use anchor_lang::{Result, ToAccountInfos}; use spl_token_2022_interface as spl_token_2022; pub fn transfer_hook_initialize<'info>( @@ -17,19 +17,21 @@ pub fn transfer_hook_initialize<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ], + &[ctx.accounts.token_program_id, ctx.accounts.mint], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TransferHookInitialize<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferHookInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } } pub fn transfer_hook_update<'info>( @@ -46,18 +48,27 @@ pub fn transfer_hook_update<'info>( anchor_lang::solana_program::program::invoke_signed( &ix, &[ - ctx.accounts.token_program_id.to_account_info(), - ctx.accounts.mint.to_account_info(), - ctx.accounts.authority.to_account_info(), + ctx.accounts.token_program_id, + ctx.accounts.mint, + ctx.accounts.authority, ], ctx.signer_seeds, ) .map_err(Into::into) } -#[derive(Accounts)] pub struct TransferHookUpdate<'info> { - pub token_program_id: UncheckedAccount<'info>, - pub mint: UncheckedAccount<'info>, - pub authority: UncheckedAccount<'info>, + pub token_program_id: AccountInfo<'info>, + pub mint: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +impl<'info> ToAccountInfos<'info> for TransferHookUpdate<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } } diff --git a/tests/escrow/programs/escrow/src/lib.rs b/tests/escrow/programs/escrow/src/lib.rs index 10e0e4ab5e..8affe2aacb 100644 --- a/tests/escrow/programs/escrow/src/lib.rs +++ b/tests/escrow/programs/escrow/src/lib.rs @@ -193,10 +193,7 @@ impl<'info> From<&mut InitializeEscrow<'info>> { fn from(accounts: &mut InitializeEscrow<'info>) -> Self { let cpi_accounts = SetAuthority { - account_or_mint: accounts - .initializer_deposit_token_account - .to_account_info() - .clone(), + account_or_mint: accounts.initializer_deposit_token_account.to_account_info(), current_authority: accounts.initializer.to_account_info(), }; let cpi_program_id = accounts.token_program.key(); @@ -208,7 +205,7 @@ impl<'info> CancelEscrow<'info> { fn into_set_authority_context(&self) -> CpiContext<'_, '_, '_, 'info, SetAuthority<'info>> { let cpi_accounts = SetAuthority { account_or_mint: self.pda_deposit_token_account.to_account_info(), - current_authority: self.pda_account.clone(), + current_authority: self.pda_account.to_account_info(), }; let cpi_program_id = self.token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) @@ -219,7 +216,7 @@ impl<'info> Exchange<'info> { fn into_set_authority_context(&self) -> CpiContext<'_, '_, '_, 'info, SetAuthority<'info>> { let cpi_accounts = SetAuthority { account_or_mint: self.pda_deposit_token_account.to_account_info(), - current_authority: self.pda_account.clone(), + current_authority: self.pda_account.to_account_info(), }; let cpi_program_id = self.receive_token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) @@ -234,7 +231,7 @@ impl<'info> Exchange<'info> { from: self.pda_deposit_token_account.to_account_info(), mint: self.receive_mint.to_account_info(), to: self.taker_receive_token_account.to_account_info(), - authority: self.pda_account.clone(), + authority: self.pda_account.to_account_info(), }; let cpi_program_id = self.receive_token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) @@ -248,11 +245,8 @@ impl<'info> Exchange<'info> { let cpi_accounts = TransferChecked { from: self.taker_deposit_token_account.to_account_info(), mint: self.deposit_mint.to_account_info(), - to: self - .initializer_receive_token_account - .to_account_info() - .clone(), - authority: self.taker.clone(), + to: self.initializer_receive_token_account.to_account_info(), + authority: self.taker.to_account_info(), }; let cpi_program_id = self.deposit_token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) From 37ff1507f92a0edf039d7c5d3aa8a1741affaecb Mon Sep 17 00:00:00 2001 From: Aursen Date: Thu, 18 Dec 2025 17:49:27 +0700 Subject: [PATCH 05/15] implement manually --- lang/src/context.rs | 24 +- lang/src/system_program.rs | 122 ++++++++ spl/src/associated_token.rs | 15 +- spl/src/metadata.rs | 15 +- spl/src/stake.rs | 35 ++- spl/src/token.rs | 158 +++++++++- spl/src/token_2022.rs | 290 ++++++++++++++---- spl/src/token_2022_extensions/cpi_guard.rs | 12 +- .../default_account_state.rs | 21 +- .../group_member_pointer.rs | 21 +- .../token_2022_extensions/group_pointer.rs | 21 +- .../token_2022_extensions/immutable_owner.rs | 11 +- .../interest_bearing_mint.rs | 21 +- .../token_2022_extensions/memo_transfer.rs | 12 +- .../token_2022_extensions/metadata_pointer.rs | 11 +- .../mint_close_authority.rs | 11 +- .../token_2022_extensions/non_transferable.rs | 11 +- .../permanent_delegate.rs | 11 +- spl/src/token_2022_extensions/token_group.rs | 26 +- .../token_2022_extensions/token_metadata.rs | 35 ++- spl/src/token_2022_extensions/transfer_fee.rs | 69 ++++- .../token_2022_extensions/transfer_hook.rs | 21 +- .../programs/cashiers-check/src/lib.rs | 6 +- 23 files changed, 893 insertions(+), 86 deletions(-) diff --git a/lang/src/context.rs b/lang/src/context.rs index 11bb2b63bc..0e24b21efa 100644 --- a/lang/src/context.rs +++ b/lang/src/context.rs @@ -1,6 +1,7 @@ //! Data structures that are used to provide non-argument inputs to program endpoints use crate::solana_program::account_info::AccountInfo; +use crate::solana_program::instruction::AccountMeta; use crate::solana_program::pubkey::Pubkey; use crate::{Accounts, Bumps, ToAccountInfos, ToAccountMetas}; use std::fmt; @@ -169,7 +170,7 @@ where /// ``` pub struct CpiContext<'a, 'b, 'c, 'info, T> where - T: ToAccountInfos<'info>, + T: ToAccountMetas + ToAccountInfos<'info>, { pub accounts: T, pub remaining_accounts: Vec>, @@ -179,7 +180,7 @@ where impl<'a, 'b, 'c, 'info, T> CpiContext<'a, 'b, 'c, 'info, T> where - T: ToAccountInfos<'info>, + T: ToAccountMetas + ToAccountInfos<'info>, { #[must_use] pub fn new(program_id: Pubkey, accounts: T) -> Self { @@ -227,3 +228,22 @@ impl<'info, T: ToAccountInfos<'info> + ToAccountMetas> ToAccountInfos<'info> infos } } + +impl<'info, T: ToAccountInfos<'info> + ToAccountMetas> ToAccountMetas + for CpiContext<'_, '_, '_, 'info, T> +{ + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut metas = self.accounts.to_account_metas(is_signer); + metas.append( + &mut self + .remaining_accounts + .iter() + .map(|acc| match acc.is_writable { + false => AccountMeta::new_readonly(*acc.key, acc.is_signer), + true => AccountMeta::new(*acc.key, acc.is_signer), + }) + .collect(), + ); + metas + } +} diff --git a/lang/src/system_program.rs b/lang/src/system_program.rs index 6ee6c26aa8..99f744f33b 100644 --- a/lang/src/system_program.rs +++ b/lang/src/system_program.rs @@ -47,6 +47,16 @@ impl<'info> ToAccountInfos<'info> for AdvanceNonceAccount<'info> { } } +impl<'info> ToAccountMetas for AdvanceNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.authorized.key(), true), + ] + } +} + pub fn allocate<'info>( ctx: CpiContext<'_, '_, '_, 'info, Allocate<'info>>, space: u64, @@ -73,6 +83,12 @@ impl<'info> ToAccountInfos<'info> for Allocate<'info> { } } +impl<'info> ToAccountMetas for Allocate<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![AccountMeta::new(self.account_to_allocate.key(), true)] + } +} + pub fn allocate_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, AllocateWithSeed<'info>>, seed: &str, @@ -105,6 +121,15 @@ impl<'info> ToAccountInfos<'info> for AllocateWithSeed<'info> { } } +impl<'info> ToAccountMetas for AllocateWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.account_to_allocate.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + ] + } +} + pub fn assign<'info>( ctx: CpiContext<'_, '_, '_, 'info, Assign<'info>>, owner: &Pubkey, @@ -131,6 +156,12 @@ impl<'info> ToAccountInfos<'info> for Assign<'info> { } } +impl<'info> ToAccountMetas for Assign<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![AccountMeta::new(self.account_to_assign.key(), true)] + } +} + pub fn assign_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, AssignWithSeed<'info>>, seed: &str, @@ -161,6 +192,15 @@ impl<'info> ToAccountInfos<'info> for AssignWithSeed<'info> { } } +impl<'info> ToAccountMetas for AssignWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.account_to_assign.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + ] + } +} + pub fn authorize_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, AuthorizeNonceAccount<'info>>, new_authority: &Pubkey, @@ -189,6 +229,15 @@ impl<'info> ToAccountInfos<'info> for AuthorizeNonceAccount<'info> { } } +impl<'info> ToAccountMetas for AuthorizeNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.authorized.key(), true), + ] + } +} + pub fn create_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateAccount<'info>>, lamports: u64, @@ -221,6 +270,15 @@ impl<'info> ToAccountInfos<'info> for CreateAccount<'info> { } } +impl<'info> ToAccountMetas for CreateAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.to.key(), true), + ] + } +} + pub fn create_account_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateAccountWithSeed<'info>>, seed: &str, @@ -261,6 +319,16 @@ impl<'info> ToAccountInfos<'info> for CreateAccountWithSeed<'info> { } } +impl<'info> ToAccountMetas for CreateAccountWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.to.key(), false), + AccountMeta::new_readonly(self.to.key(), true), + ] + } +} + pub fn create_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccount<'info>>, lamports: u64, @@ -308,6 +376,17 @@ impl<'info> ToAccountInfos<'info> for CreateNonceAccount<'info> { } } +impl<'info> ToAccountMetas for CreateNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.rent.key(), false), + ] + } +} + pub fn create_nonce_account_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccountWithSeed<'info>>, lamports: u64, @@ -364,6 +443,18 @@ impl<'info> ToAccountInfos<'info> for CreateNonceAccountWithSeed<'info> { } } +impl<'info> ToAccountMetas for CreateNonceAccountWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), false), + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.rent.key(), false), + ] + } +} + pub fn transfer<'info>( ctx: CpiContext<'_, '_, '_, 'info, Transfer<'info>>, lamports: u64, @@ -392,6 +483,15 @@ impl<'info> ToAccountInfos<'info> for Transfer<'info> { } } +impl<'info> ToAccountMetas for Transfer<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), true), + AccountMeta::new(self.to.key(), false), + ] + } +} + pub fn transfer_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferWithSeed<'info>>, from_seed: String, @@ -430,6 +530,16 @@ impl<'info> ToAccountInfos<'info> for TransferWithSeed<'info> { } } +impl<'info> ToAccountMetas for TransferWithSeed<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.from.key(), false), + AccountMeta::new_readonly(self.base.key(), true), + AccountMeta::new(self.to.key(), false), + ] + } +} + pub fn withdraw_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawNonceAccount<'info>>, lamports: u64, @@ -473,3 +583,15 @@ impl<'info> ToAccountInfos<'info> for WithdrawNonceAccount<'info> { ] } } + +impl<'info> ToAccountMetas for WithdrawNonceAccount<'info> { + fn to_account_metas(&self, _: Option) -> Vec { + vec![ + AccountMeta::new(self.nonce.key(), false), + AccountMeta::new(self.to.key(), false), + AccountMeta::new_readonly(self.recent_blockhashes.key(), false), + AccountMeta::new_readonly(self.rent.key(), false), + AccountMeta::new_readonly(self.authorized.key(), true), + ] + } +} diff --git a/spl/src/associated_token.rs b/spl/src/associated_token.rs index 7ef639f0e7..4cd8af6415 100644 --- a/spl/src/associated_token.rs +++ b/spl/src/associated_token.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; pub use ::spl_associated_token_account_interface as spl_associated_token_account; pub use ::spl_associated_token_account_interface::{ @@ -77,6 +77,19 @@ impl<'info> ToAccountInfos<'info> for Create<'info> { } } +impl<'info> ToAccountMetas for Create<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.associated_token.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.system_program.to_account_metas(is_signer)); + account_metas.extend(self.token_program.to_account_metas(is_signer)); + account_metas + } +} + type CreateIdempotent<'info> = Create<'info>; #[derive(Clone)] diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index 43a8e8e45f..ec92d71559 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -2,7 +2,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::error::ErrorCode; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{system_program, Result, ToAccountInfos}; +use anchor_lang::{system_program, Result, ToAccountInfos, ToAccountMetas}; use std::ops::Deref; pub use mpl_token_metadata; @@ -567,6 +567,19 @@ impl<'info> ToAccountInfos<'info> for ApproveCollectionAuthority<'info> { } } +impl<'info> ToAccountMetas for ApproveCollectionAuthority<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.collection_authority_record.to_account_metas(is_signer)); + account_metas.extend(self.new_collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct BubblegumSetCollectionSize<'info> { pub metadata_account: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, diff --git a/spl/src/stake.rs b/spl/src/stake.rs index 4840beb668..48716c7c7e 100644 --- a/spl/src/stake.rs +++ b/spl/src/stake.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use borsh::BorshDeserialize; use solana_stake_interface::{ self as stake, @@ -101,6 +101,17 @@ impl<'info> ToAccountInfos<'info> for Authorize<'info> { } } +impl<'info> ToAccountMetas for Authorize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.stake.to_account_metas(is_signer)); + account_metas.extend(self.authorized.to_account_metas(is_signer)); + account_metas.extend(self.new_authorized.to_account_metas(is_signer)); + account_metas.extend(self.clock.to_account_metas(is_signer)); + account_metas + } +} + pub struct Withdraw<'info> { /// The stake account to be updated pub stake: AccountInfo<'info>, @@ -130,6 +141,18 @@ impl<'info> ToAccountInfos<'info> for Withdraw<'info> { } } +impl<'info> ToAccountMetas for Withdraw<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.stake.to_account_metas(is_signer)); + account_metas.extend(self.withdrawer.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.clock.to_account_metas(is_signer)); + account_metas.extend(self.stake_history.to_account_metas(is_signer)); + account_metas + } +} + pub struct DeactivateStake<'info> { /// The stake account to be deactivated pub stake: AccountInfo<'info>, @@ -151,6 +174,16 @@ impl<'info> ToAccountInfos<'info> for DeactivateStake<'info> { } } +impl<'info> ToAccountMetas for DeactivateStake<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.stake.to_account_metas(is_signer)); + account_metas.extend(self.staker.to_account_metas(is_signer)); + account_metas.extend(self.clock.to_account_metas(is_signer)); + account_metas + } +} + // State #[derive(Clone)] diff --git a/spl/src/token.rs b/spl/src/token.rs index 0ca37fa6d1..f979049b2f 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -2,7 +2,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::program_pack::Pack; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use std::ops::Deref; pub use spl_token::ID; @@ -346,6 +346,16 @@ impl<'info> ToAccountInfos<'info> for Transfer<'info> { } } +impl<'info> ToAccountMetas for Transfer<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct TransferChecked<'info> { pub from: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -364,6 +374,17 @@ impl<'info> ToAccountInfos<'info> for TransferChecked<'info> { } } +impl<'info> ToAccountMetas for TransferChecked<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct MintTo<'info> { pub mint: AccountInfo<'info>, pub to: AccountInfo<'info>, @@ -380,6 +401,16 @@ impl<'info> ToAccountInfos<'info> for MintTo<'info> { } } +impl<'info> ToAccountMetas for MintTo<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct Burn<'info> { pub mint: AccountInfo<'info>, pub from: AccountInfo<'info>, @@ -396,6 +427,16 @@ impl<'info> ToAccountInfos<'info> for Burn<'info> { } } +impl<'info> ToAccountMetas for Burn<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct Approve<'info> { pub to: AccountInfo<'info>, pub delegate: AccountInfo<'info>, @@ -412,6 +453,16 @@ impl<'info> ToAccountInfos<'info> for Approve<'info> { } } +impl<'info> ToAccountMetas for Approve<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.delegate.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct ApproveChecked<'info> { pub to: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -430,6 +481,17 @@ impl<'info> ToAccountInfos<'info> for ApproveChecked<'info> { } } +impl<'info> ToAccountMetas for ApproveChecked<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.delegate.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct Revoke<'info> { pub source: AccountInfo<'info>, pub authority: AccountInfo<'info>, @@ -441,6 +503,15 @@ impl<'info> ToAccountInfos<'info> for Revoke<'info> { } } +impl<'info> ToAccountMetas for Revoke<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.source.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -459,6 +530,17 @@ impl<'info> ToAccountInfos<'info> for InitializeAccount<'info> { } } +impl<'info> ToAccountMetas for InitializeAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeAccount3<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -475,6 +557,16 @@ impl<'info> ToAccountInfos<'info> for InitializeAccount3<'info> { } } +impl<'info> ToAccountMetas for InitializeAccount3<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct CloseAccount<'info> { pub account: AccountInfo<'info>, pub destination: AccountInfo<'info>, @@ -491,6 +583,16 @@ impl<'info> ToAccountInfos<'info> for CloseAccount<'info> { } } +impl<'info> ToAccountMetas for CloseAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.destination.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct FreezeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -507,6 +609,16 @@ impl<'info> ToAccountInfos<'info> for FreezeAccount<'info> { } } +impl<'info> ToAccountMetas for FreezeAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct ThawAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -523,6 +635,16 @@ impl<'info> ToAccountInfos<'info> for ThawAccount<'info> { } } +impl<'info> ToAccountMetas for ThawAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeMint<'info> { pub mint: AccountInfo<'info>, pub rent: AccountInfo<'info>, @@ -534,6 +656,15 @@ impl<'info> ToAccountInfos<'info> for InitializeMint<'info> { } } +impl<'info> ToAccountMetas for InitializeMint<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeMint2<'info> { pub mint: AccountInfo<'info>, } @@ -544,6 +675,14 @@ impl<'info> ToAccountInfos<'info> for InitializeMint2<'info> { } } +impl<'info> ToAccountMetas for InitializeMint2<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct SetAuthority<'info> { pub current_authority: AccountInfo<'info>, pub account_or_mint: AccountInfo<'info>, @@ -558,6 +697,15 @@ impl<'info> ToAccountInfos<'info> for SetAuthority<'info> { } } +impl<'info> ToAccountMetas for SetAuthority<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.current_authority.to_account_metas(is_signer)); + account_metas.extend(self.account_or_mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct SyncNative<'info> { pub account: AccountInfo<'info>, } @@ -568,6 +716,14 @@ impl<'info> ToAccountInfos<'info> for SyncNative<'info> { } } +impl<'info> ToAccountMetas for SyncNative<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas + } +} + #[derive(Clone, Debug, Default, PartialEq, Copy)] pub struct TokenAccount(spl_token::state::Account); diff --git a/spl/src/token_2022.rs b/spl/src/token_2022.rs index 79a94e34f6..c793e0450f 100644 --- a/spl/src/token_2022.rs +++ b/spl/src/token_2022.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; pub use spl_token_2022::ID; pub use spl_token_2022_interface as spl_token_2022; @@ -25,11 +25,7 @@ pub fn transfer<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from, - ctx.accounts.to, - ctx.accounts.authority, - ], + &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -77,11 +73,7 @@ pub fn mint_to<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.to, - ctx.accounts.mint, - ctx.accounts.authority, - ], + &[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -103,11 +95,7 @@ pub fn mint_to_checked<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.to, - ctx.accounts.mint, - ctx.accounts.authority, - ], + &[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -124,11 +112,7 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64) )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from, - ctx.accounts.mint, - ctx.accounts.authority, - ], + &[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -150,11 +134,7 @@ pub fn burn_checked<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.from, - ctx.accounts.mint, - ctx.accounts.authority, - ], + &[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -221,10 +201,7 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.source, - ctx.accounts.authority, - ], + &[ctx.accounts.source, ctx.accounts.authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -260,14 +237,8 @@ pub fn initialize_account3<'info>( ctx.accounts.mint.key, ctx.accounts.authority.key, )?; - anchor_lang::solana_program::program::invoke( - &ix, - &[ - ctx.accounts.account, - ctx.accounts.mint, - ], - ) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account, ctx.accounts.mint]) + .map_err(Into::into) } pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'info>>) -> Result<()> { @@ -345,14 +316,8 @@ pub fn initialize_mint<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke( - &ix, - &[ - ctx.accounts.mint, - ctx.accounts.rent, - ], - ) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint, ctx.accounts.rent]) + .map_err(Into::into) } pub fn initialize_mint2<'info>( @@ -368,8 +333,7 @@ pub fn initialize_mint2<'info>( freeze_authority, decimals, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into) } pub fn set_authority<'info>( @@ -387,10 +351,7 @@ pub fn set_authority<'info>( )?; anchor_lang::solana_program::program::invoke_signed( &ix, - &[ - ctx.accounts.account_or_mint, - ctx.accounts.current_authority, - ], + &[ctx.accounts.account_or_mint, ctx.accounts.current_authority], ctx.signer_seeds, ) .map_err(Into::into) @@ -398,8 +359,7 @@ pub fn set_authority<'info>( pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> { let ix = spl_token_2022::instruction::sync_native(&ctx.program_id, ctx.accounts.account.key)?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]).map_err(Into::into) } pub fn get_account_data_size<'info>( @@ -435,8 +395,7 @@ pub fn initialize_mint_close_authority<'info>( ctx.accounts.mint.key, close_authority, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into) } pub fn initialize_immutable_owner<'info>( @@ -446,8 +405,7 @@ pub fn initialize_immutable_owner<'info>( &ctx.program_id, ctx.accounts.account.key, )?; - anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]) - .map_err(Into::into) + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.account]).map_err(Into::into) } pub fn amount_to_ui_amount<'info>( @@ -514,6 +472,16 @@ impl<'info> ToAccountInfos<'info> for Transfer<'info> { } } +impl<'info> ToAccountMetas for Transfer<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct TransferChecked<'info> { pub from: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -532,6 +500,17 @@ impl<'info> ToAccountInfos<'info> for TransferChecked<'info> { } } +impl<'info> ToAccountMetas for TransferChecked<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct MintTo<'info> { pub mint: AccountInfo<'info>, pub to: AccountInfo<'info>, @@ -548,6 +527,16 @@ impl<'info> ToAccountInfos<'info> for MintTo<'info> { } } +impl<'info> ToAccountMetas for MintTo<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct MintToChecked<'info> { pub mint: AccountInfo<'info>, pub to: AccountInfo<'info>, @@ -564,6 +553,16 @@ impl<'info> ToAccountInfos<'info> for MintToChecked<'info> { } } +impl<'info> ToAccountMetas for MintToChecked<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct Burn<'info> { pub mint: AccountInfo<'info>, pub from: AccountInfo<'info>, @@ -580,6 +579,16 @@ impl<'info> ToAccountInfos<'info> for Burn<'info> { } } +impl<'info> ToAccountMetas for Burn<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct BurnChecked<'info> { pub mint: AccountInfo<'info>, pub from: AccountInfo<'info>, @@ -596,6 +605,16 @@ impl<'info> ToAccountInfos<'info> for BurnChecked<'info> { } } +impl<'info> ToAccountMetas for BurnChecked<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.from.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct Approve<'info> { pub to: AccountInfo<'info>, pub delegate: AccountInfo<'info>, @@ -612,6 +631,16 @@ impl<'info> ToAccountInfos<'info> for Approve<'info> { } } +impl<'info> ToAccountMetas for Approve<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.delegate.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct ApproveChecked<'info> { pub to: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -630,6 +659,17 @@ impl<'info> ToAccountInfos<'info> for ApproveChecked<'info> { } } +impl<'info> ToAccountMetas for ApproveChecked<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.to.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.delegate.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct Revoke<'info> { pub source: AccountInfo<'info>, pub authority: AccountInfo<'info>, @@ -641,6 +681,15 @@ impl<'info> ToAccountInfos<'info> for Revoke<'info> { } } +impl<'info> ToAccountMetas for Revoke<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.source.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -659,6 +708,17 @@ impl<'info> ToAccountInfos<'info> for InitializeAccount<'info> { } } +impl<'info> ToAccountMetas for InitializeAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeAccount3<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -675,6 +735,16 @@ impl<'info> ToAccountInfos<'info> for InitializeAccount3<'info> { } } +impl<'info> ToAccountMetas for InitializeAccount3<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct CloseAccount<'info> { pub account: AccountInfo<'info>, pub destination: AccountInfo<'info>, @@ -691,6 +761,16 @@ impl<'info> ToAccountInfos<'info> for CloseAccount<'info> { } } +impl<'info> ToAccountMetas for CloseAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.destination.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct FreezeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -707,6 +787,16 @@ impl<'info> ToAccountInfos<'info> for FreezeAccount<'info> { } } +impl<'info> ToAccountMetas for FreezeAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct ThawAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -723,6 +813,16 @@ impl<'info> ToAccountInfos<'info> for ThawAccount<'info> { } } +impl<'info> ToAccountMetas for ThawAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeMint<'info> { pub mint: AccountInfo<'info>, pub rent: AccountInfo<'info>, @@ -734,6 +834,15 @@ impl<'info> ToAccountInfos<'info> for InitializeMint<'info> { } } +impl<'info> ToAccountMetas for InitializeMint<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeMint2<'info> { pub mint: AccountInfo<'info>, } @@ -744,6 +853,14 @@ impl<'info> ToAccountInfos<'info> for InitializeMint2<'info> { } } +impl<'info> ToAccountMetas for InitializeMint2<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct SetAuthority<'info> { pub current_authority: AccountInfo<'info>, pub account_or_mint: AccountInfo<'info>, @@ -758,6 +875,15 @@ impl<'info> ToAccountInfos<'info> for SetAuthority<'info> { } } +impl<'info> ToAccountMetas for SetAuthority<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.current_authority.to_account_metas(is_signer)); + account_metas.extend(self.account_or_mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct SyncNative<'info> { pub account: AccountInfo<'info>, } @@ -768,6 +894,14 @@ impl<'info> ToAccountInfos<'info> for SyncNative<'info> { } } +impl<'info> ToAccountMetas for SyncNative<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas + } +} + pub struct GetAccountDataSize<'info> { pub mint: AccountInfo<'info>, } @@ -778,6 +912,14 @@ impl<'info> ToAccountInfos<'info> for GetAccountDataSize<'info> { } } +impl<'info> ToAccountMetas for GetAccountDataSize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeMintCloseAuthority<'info> { pub mint: AccountInfo<'info>, } @@ -788,6 +930,14 @@ impl<'info> ToAccountInfos<'info> for InitializeMintCloseAuthority<'info> { } } +impl<'info> ToAccountMetas for InitializeMintCloseAuthority<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct InitializeImmutableOwner<'info> { pub account: AccountInfo<'info>, } @@ -798,6 +948,14 @@ impl<'info> ToAccountInfos<'info> for InitializeImmutableOwner<'info> { } } +impl<'info> ToAccountMetas for InitializeImmutableOwner<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas + } +} + pub struct AmountToUiAmount<'info> { pub account: AccountInfo<'info>, } @@ -808,6 +966,14 @@ impl<'info> ToAccountInfos<'info> for AmountToUiAmount<'info> { } } +impl<'info> ToAccountMetas for AmountToUiAmount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas + } +} + pub struct UiAmountToAmount<'info> { pub account: AccountInfo<'info>, } @@ -818,6 +984,14 @@ impl<'info> ToAccountInfos<'info> for UiAmountToAmount<'info> { } } +impl<'info> ToAccountMetas for UiAmountToAmount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas + } +} + #[derive(Clone)] pub struct Token2022; diff --git a/spl/src/token_2022_extensions/cpi_guard.rs b/spl/src/token_2022_extensions/cpi_guard.rs index bca2257e9a..dd4294b397 100644 --- a/spl/src/token_2022_extensions/cpi_guard.rs +++ b/spl/src/token_2022_extensions/cpi_guard.rs @@ -1,6 +1,6 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn cpi_guard_enable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'info>>) -> Result<()> { @@ -57,3 +57,13 @@ impl<'info> ToAccountInfos<'info> for CpiGuard<'info> { ] } } + +impl<'info> ToAccountMetas for CpiGuard<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.owner.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/default_account_state.rs b/spl/src/token_2022_extensions/default_account_state.rs index 169b1a8202..6d4208207d 100644 --- a/spl/src/token_2022_extensions/default_account_state.rs +++ b/spl/src/token_2022_extensions/default_account_state.rs @@ -1,6 +1,6 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022::state::AccountState; use spl_token_2022_interface as spl_token_2022; @@ -32,6 +32,15 @@ impl<'info> ToAccountInfos<'info> for DefaultAccountStateInitialize<'info> { } } +impl<'info> ToAccountMetas for DefaultAccountStateInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn default_account_state_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, DefaultAccountStateUpdate<'info>>, state: &AccountState, @@ -71,3 +80,13 @@ impl<'info> ToAccountInfos<'info> for DefaultAccountStateUpdate<'info> { ] } } + +impl<'info> ToAccountMetas for DefaultAccountStateUpdate<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.freeze_authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/group_member_pointer.rs b/spl/src/token_2022_extensions/group_member_pointer.rs index 57d332573d..de81b0fd6c 100644 --- a/spl/src/token_2022_extensions/group_member_pointer.rs +++ b/spl/src/token_2022_extensions/group_member_pointer.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn group_member_pointer_initialize<'info>( @@ -34,6 +34,15 @@ impl<'info> ToAccountInfos<'info> for GroupMemberPointerInitialize<'info> { } } +impl<'info> ToAccountMetas for GroupMemberPointerInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn group_member_pointer_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, GroupMemberPointerUpdate<'info>>, member_address: Option, @@ -72,3 +81,13 @@ impl<'info> ToAccountInfos<'info> for GroupMemberPointerUpdate<'info> { ] } } + +impl<'info> ToAccountMetas for GroupMemberPointerUpdate<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/group_pointer.rs b/spl/src/token_2022_extensions/group_pointer.rs index 0cc5c94850..72e76e35a2 100644 --- a/spl/src/token_2022_extensions/group_pointer.rs +++ b/spl/src/token_2022_extensions/group_pointer.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn group_pointer_initialize<'info>( @@ -34,6 +34,15 @@ impl<'info> ToAccountInfos<'info> for GroupPointerInitialize<'info> { } } +impl<'info> ToAccountMetas for GroupPointerInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn group_pointer_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, GroupPointerUpdate<'info>>, group_address: Option, @@ -68,3 +77,13 @@ impl<'info> ToAccountInfos<'info> for GroupPointerUpdate<'info> { ] } } + +impl<'info> ToAccountMetas for GroupPointerUpdate<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/immutable_owner.rs b/spl/src/token_2022_extensions/immutable_owner.rs index 620f4ec401..d2752c74eb 100644 --- a/spl/src/token_2022_extensions/immutable_owner.rs +++ b/spl/src/token_2022_extensions/immutable_owner.rs @@ -1,6 +1,6 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn immutable_owner_initialize<'info>( @@ -31,3 +31,12 @@ impl<'info> ToAccountInfos<'info> for ImmutableOwnerInitialize<'info> { ] } } + +impl<'info> ToAccountMetas for ImmutableOwnerInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.token_account.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/interest_bearing_mint.rs b/spl/src/token_2022_extensions/interest_bearing_mint.rs index 4dc0ba420b..8532c55073 100644 --- a/spl/src/token_2022_extensions/interest_bearing_mint.rs +++ b/spl/src/token_2022_extensions/interest_bearing_mint.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn interest_bearing_mint_initialize<'info>( @@ -34,6 +34,15 @@ impl<'info> ToAccountInfos<'info> for InterestBearingMintInitialize<'info> { } } +impl<'info> ToAccountMetas for InterestBearingMintInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn interest_bearing_mint_update_rate<'info>( ctx: CpiContext<'_, '_, '_, 'info, InterestBearingMintUpdateRate<'info>>, rate: i16, @@ -72,3 +81,13 @@ impl<'info> ToAccountInfos<'info> for InterestBearingMintUpdateRate<'info> { ] } } + +impl<'info> ToAccountMetas for InterestBearingMintUpdateRate<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.rate_authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/memo_transfer.rs b/spl/src/token_2022_extensions/memo_transfer.rs index 3bb60f6c7e..478e0552c1 100644 --- a/spl/src/token_2022_extensions/memo_transfer.rs +++ b/spl/src/token_2022_extensions/memo_transfer.rs @@ -1,6 +1,6 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn memo_transfer_initialize<'info>( @@ -61,3 +61,13 @@ impl<'info> ToAccountInfos<'info> for MemoTransfer<'info> { ] } } + +impl<'info> ToAccountMetas for MemoTransfer<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.account.to_account_metas(is_signer)); + account_metas.extend(self.owner.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/metadata_pointer.rs b/spl/src/token_2022_extensions/metadata_pointer.rs index 908a61e97c..c8a92581b3 100644 --- a/spl/src/token_2022_extensions/metadata_pointer.rs +++ b/spl/src/token_2022_extensions/metadata_pointer.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn metadata_pointer_initialize<'info>( @@ -33,3 +33,12 @@ impl<'info> ToAccountInfos<'info> for MetadataPointerInitialize<'info> { vec![self.token_program_id.to_owned(), self.mint.to_owned()] } } + +impl<'info> ToAccountMetas for MetadataPointerInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/mint_close_authority.rs b/spl/src/token_2022_extensions/mint_close_authority.rs index 3bcc8f4f04..204d62690d 100644 --- a/spl/src/token_2022_extensions/mint_close_authority.rs +++ b/spl/src/token_2022_extensions/mint_close_authority.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn mint_close_authority_initialize<'info>( @@ -31,3 +31,12 @@ impl<'info> ToAccountInfos<'info> for MintCloseAuthorityInitialize<'info> { vec![self.token_program_id.to_owned(), self.mint.to_owned()] } } + +impl<'info> ToAccountMetas for MintCloseAuthorityInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/non_transferable.rs b/spl/src/token_2022_extensions/non_transferable.rs index 1e83cc6d3a..8e66515fbc 100644 --- a/spl/src/token_2022_extensions/non_transferable.rs +++ b/spl/src/token_2022_extensions/non_transferable.rs @@ -1,6 +1,6 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn non_transferable_mint_initialize<'info>( @@ -28,3 +28,12 @@ impl<'info> ToAccountInfos<'info> for NonTransferableMintInitialize<'info> { vec![self.token_program_id.to_owned(), self.mint.to_owned()] } } + +impl<'info> ToAccountMetas for NonTransferableMintInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/permanent_delegate.rs b/spl/src/token_2022_extensions/permanent_delegate.rs index 055d4b26dc..1319b6f8d3 100644 --- a/spl/src/token_2022_extensions/permanent_delegate.rs +++ b/spl/src/token_2022_extensions/permanent_delegate.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn permanent_delegate_initialize<'info>( @@ -31,3 +31,12 @@ impl<'info> ToAccountInfos<'info> for PermanentDelegateInitialize<'info> { vec![self.token_program_id.to_owned(), self.mint.to_owned()] } } + +impl<'info> ToAccountMetas for PermanentDelegateInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/token_group.rs b/spl/src/token_2022_extensions/token_group.rs index 4d94ab0f78..cf7a801ec3 100644 --- a/spl/src/token_2022_extensions/token_group.rs +++ b/spl/src/token_2022_extensions/token_group.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; pub fn token_group_initialize<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenGroupInitialize<'info>>, @@ -47,6 +47,17 @@ impl<'info> ToAccountInfos<'info> for TokenGroupInitialize<'info> { } } +impl<'info> ToAccountMetas for TokenGroupInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.program_id.to_account_metas(is_signer)); + account_metas.extend(self.group.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.mint_authority.to_account_metas(is_signer)); + account_metas + } +} + pub fn token_member_initialize<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMemberInitialize<'info>>, ) -> Result<()> { @@ -94,3 +105,16 @@ impl<'info> ToAccountInfos<'info> for TokenMemberInitialize<'info> { ] } } + +impl<'info> ToAccountMetas for TokenMemberInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.program_id.to_account_metas(is_signer)); + account_metas.extend(self.member.to_account_metas(is_signer)); + account_metas.extend(self.member_mint.to_account_metas(is_signer)); + account_metas.extend(self.member_mint_authority.to_account_metas(is_signer)); + account_metas.extend(self.group.to_account_metas(is_signer)); + account_metas.extend(self.group_update_authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/token_metadata.rs b/spl/src/token_2022_extensions/token_metadata.rs index 7f9f928be3..8b9c99cc7c 100644 --- a/spl/src/token_2022_extensions/token_metadata.rs +++ b/spl/src/token_2022_extensions/token_metadata.rs @@ -1,6 +1,6 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_pod::optional_keys::OptionalNonZeroPubkey; use spl_token_metadata_interface::state::Field; @@ -55,6 +55,18 @@ impl<'info> ToAccountInfos<'info> for TokenMetadataInitialize<'info> { } } +impl<'info> ToAccountMetas for TokenMetadataInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.program_id.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.mint_authority.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn token_metadata_update_authority<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMetadataUpdateAuthority<'info>>, new_authority: OptionalNonZeroPubkey, @@ -95,6 +107,17 @@ impl<'info> ToAccountInfos<'info> for TokenMetadataUpdateAuthority<'info> { } } +impl<'info> ToAccountMetas for TokenMetadataUpdateAuthority<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.program_id.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.current_authority.to_account_metas(is_signer)); + account_metas.extend(self.new_authority.to_account_metas(is_signer)); + account_metas + } +} + pub fn token_metadata_update_field<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMetadataUpdateField<'info>>, field: Field, @@ -134,3 +157,13 @@ impl<'info> ToAccountInfos<'info> for TokenMetadataUpdateField<'info> { ] } } + +impl<'info> ToAccountMetas for TokenMetadataUpdateField<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.program_id.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/transfer_fee.rs b/spl/src/token_2022_extensions/transfer_fee.rs index 3b430cf729..a517586adf 100644 --- a/spl/src/token_2022_extensions/transfer_fee.rs +++ b/spl/src/token_2022_extensions/transfer_fee.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn transfer_fee_initialize<'info>( @@ -38,6 +38,15 @@ impl<'info> ToAccountInfos<'info> for TransferFeeInitialize<'info> { } } +impl<'info> ToAccountMetas for TransferFeeInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn transfer_fee_set<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferFeeSetTransferFee<'info>>, transfer_fee_basis_points: u16, @@ -79,6 +88,16 @@ impl<'info> ToAccountInfos<'info> for TransferFeeSetTransferFee<'info> { } } +impl<'info> ToAccountMetas for TransferFeeSetTransferFee<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub fn transfer_checked_with_fee<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferCheckedWithFee<'info>>, amount: u64, @@ -130,6 +149,18 @@ impl<'info> ToAccountInfos<'info> for TransferCheckedWithFee<'info> { } } +impl<'info> ToAccountMetas for TransferCheckedWithFee<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.source.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.destination.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub fn harvest_withheld_tokens_to_mint<'info>( ctx: CpiContext<'_, '_, '_, 'info, HarvestWithheldTokensToMint<'info>>, sources: Vec>, @@ -140,10 +171,7 @@ pub fn harvest_withheld_tokens_to_mint<'info>( sources.iter().map(|a| a.key).collect::>().as_slice(), )?; - let mut account_infos = vec![ - ctx.accounts.token_program_id, - ctx.accounts.mint, - ]; + let mut account_infos = vec![ctx.accounts.token_program_id, ctx.accounts.mint]; account_infos.extend_from_slice(&sources); anchor_lang::solana_program::program::invoke_signed(&ix, &account_infos, ctx.signer_seeds) @@ -161,6 +189,15 @@ impl<'info> ToAccountInfos<'info> for HarvestWithheldTokensToMint<'info> { } } +impl<'info> ToAccountMetas for HarvestWithheldTokensToMint<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn withdraw_withheld_tokens_from_mint<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawWithheldTokensFromMint<'info>>, ) -> Result<()> { @@ -203,6 +240,17 @@ impl<'info> ToAccountInfos<'info> for WithdrawWithheldTokensFromMint<'info> { } } +impl<'info> ToAccountMetas for WithdrawWithheldTokensFromMint<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.destination.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} + pub fn withdraw_withheld_tokens_from_accounts<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawWithheldTokensFromAccounts<'info>>, sources: Vec>, @@ -245,3 +293,14 @@ impl<'info> ToAccountInfos<'info> for WithdrawWithheldTokensFromAccounts<'info> ] } } + +impl<'info> ToAccountMetas for WithdrawWithheldTokensFromAccounts<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.destination.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/transfer_hook.rs b/spl/src/token_2022_extensions/transfer_hook.rs index 2011ce1f52..443ead80fb 100644 --- a/spl/src/token_2022_extensions/transfer_hook.rs +++ b/spl/src/token_2022_extensions/transfer_hook.rs @@ -1,7 +1,7 @@ use anchor_lang::context::CpiContext; use anchor_lang::prelude::AccountInfo; use anchor_lang::solana_program::pubkey::Pubkey; -use anchor_lang::{Result, ToAccountInfos}; +use anchor_lang::{Result, ToAccountInfos, ToAccountMetas}; use spl_token_2022_interface as spl_token_2022; pub fn transfer_hook_initialize<'info>( @@ -34,6 +34,15 @@ impl<'info> ToAccountInfos<'info> for TransferHookInitialize<'info> { } } +impl<'info> ToAccountMetas for TransferHookInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub fn transfer_hook_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferHookUpdate<'info>>, transfer_hook_program_id: Option, @@ -72,3 +81,13 @@ impl<'info> ToAccountInfos<'info> for TransferHookUpdate<'info> { ] } } + +impl<'info> ToAccountMetas for TransferHookUpdate<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/tests/cashiers-check/programs/cashiers-check/src/lib.rs b/tests/cashiers-check/programs/cashiers-check/src/lib.rs index 53d267b41c..b05bf79fad 100644 --- a/tests/cashiers-check/programs/cashiers-check/src/lib.rs +++ b/tests/cashiers-check/programs/cashiers-check/src/lib.rs @@ -25,7 +25,7 @@ pub mod cashiers_check { let cpi_accounts = Transfer { from: ctx.accounts.from.to_account_info(), to: ctx.accounts.vault.to_account_info(), - authority: ctx.accounts.owner.clone(), + authority: ctx.accounts.owner.to_account_info(), }; let cpi_ctx = CpiContext::new(cpi_program_id, cpi_accounts); token::transfer(cpi_ctx, amount)?; @@ -53,7 +53,7 @@ pub mod cashiers_check { let cpi_accounts = Transfer { from: ctx.accounts.vault.to_account_info(), to: ctx.accounts.to.to_account_info(), - authority: ctx.accounts.check_signer.clone(), + authority: ctx.accounts.check_signer.to_account_info(), }; let cpi_ctx = CpiContext::new_with_signer(cpi_program_id, cpi_accounts, signer); token::transfer(cpi_ctx, ctx.accounts.check.amount)?; @@ -73,7 +73,7 @@ pub mod cashiers_check { let cpi_accounts = Transfer { from: ctx.accounts.vault.to_account_info(), to: ctx.accounts.from.to_account_info(), - authority: ctx.accounts.check_signer.clone(), + authority: ctx.accounts.check_signer.to_account_info(), }; let cpi_ctx = CpiContext::new_with_signer(cpi_program_id, cpi_accounts, signer); token::transfer(cpi_ctx, ctx.accounts.check.amount)?; From 24c6cda3f4d5b67abc9c1920ad1184dd30d8b309 Mon Sep 17 00:00:00 2001 From: Aursen Date: Thu, 18 Dec 2025 18:40:45 +0700 Subject: [PATCH 06/15] fix metadata --- spl/src/metadata.rs | 560 ++++++++++++++++++++ tests/ido-pool/programs/ido-pool/src/lib.rs | 4 +- 2 files changed, 562 insertions(+), 2 deletions(-) diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index ec92d71559..43720f1a89 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -587,6 +587,28 @@ pub struct BubblegumSetCollectionSize<'info> { pub bubblegum_signer: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for BubblegumSetCollectionSize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata_account.to_owned(), + self.update_authority.to_owned(), + self.mint.to_owned(), + self.bubblegum_signer.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for BubblegumSetCollectionSize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata_account.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.bubblegum_signer.to_account_metas(is_signer)); + account_metas + } +} + pub struct BurnEditionNft<'info> { pub metadata: AccountInfo<'info>, pub owner: AccountInfo<'info>, @@ -600,6 +622,40 @@ pub struct BurnEditionNft<'info> { pub spl_token: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for BurnEditionNft<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.owner.to_owned(), + self.print_edition_mint.to_owned(), + self.master_edition_mint.to_owned(), + self.print_edition_token.to_owned(), + self.master_edition_token.to_owned(), + self.master_edition.to_owned(), + self.print_edition.to_owned(), + self.edition_marker.to_owned(), + self.spl_token.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for BurnEditionNft<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.owner.to_account_metas(is_signer)); + account_metas.extend(self.print_edition_mint.to_account_metas(is_signer)); + account_metas.extend(self.master_edition_mint.to_account_metas(is_signer)); + account_metas.extend(self.print_edition_token.to_account_metas(is_signer)); + account_metas.extend(self.master_edition_token.to_account_metas(is_signer)); + account_metas.extend(self.master_edition.to_account_metas(is_signer)); + account_metas.extend(self.print_edition.to_account_metas(is_signer)); + account_metas.extend(self.edition_marker.to_account_metas(is_signer)); + account_metas.extend(self.spl_token.to_account_metas(is_signer)); + account_metas + } +} + pub struct BurnNft<'info> { pub metadata: AccountInfo<'info>, pub owner: AccountInfo<'info>, @@ -609,6 +665,32 @@ pub struct BurnNft<'info> { pub spl_token: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for BurnNft<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.owner.to_owned(), + self.mint.to_owned(), + self.token.to_owned(), + self.edition.to_owned(), + self.spl_token.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for BurnNft<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.owner.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.token.to_account_metas(is_signer)); + account_metas.extend(self.edition.to_account_metas(is_signer)); + account_metas.extend(self.spl_token.to_account_metas(is_signer)); + account_metas + } +} + pub struct CreateMetadataAccountsV3<'info> { pub metadata: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -619,11 +701,54 @@ pub struct CreateMetadataAccountsV3<'info> { pub rent: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for CreateMetadataAccountsV3<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.mint.to_owned(), + self.mint_authority.to_owned(), + self.payer.to_owned(), + self.update_authority.to_owned(), + self.system_program.to_owned(), + self.rent.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for CreateMetadataAccountsV3<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.mint_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.system_program.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas + } +} + pub struct UpdateMetadataAccountsV2<'info> { pub metadata: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for UpdateMetadataAccountsV2<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.metadata.to_owned(), self.update_authority.to_owned()] + } +} + +impl<'info> ToAccountMetas for UpdateMetadataAccountsV2<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas + } +} + pub struct CreateMasterEditionV3<'info> { pub edition: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -636,6 +761,38 @@ pub struct CreateMasterEditionV3<'info> { pub rent: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for CreateMasterEditionV3<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.edition.to_owned(), + self.mint.to_owned(), + self.update_authority.to_owned(), + self.mint_authority.to_owned(), + self.payer.to_owned(), + self.metadata.to_owned(), + self.token_program.to_owned(), + self.system_program.to_owned(), + self.rent.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for CreateMasterEditionV3<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.edition.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.mint_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.token_program.to_account_metas(is_signer)); + account_metas.extend(self.system_program.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas + } +} + pub struct MintNewEditionFromMasterEditionViaToken<'info> { pub new_metadata: AccountInfo<'info>, pub new_edition: AccountInfo<'info>, @@ -661,6 +818,53 @@ pub struct MintNewEditionFromMasterEditionViaToken<'info> { pub metadata_mint: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for MintNewEditionFromMasterEditionViaToken<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.new_metadata.to_owned(), + self.new_edition.to_owned(), + self.master_edition.to_owned(), + self.new_mint.to_owned(), + self.edition_mark_pda.to_owned(), + self.new_mint_authority.to_owned(), + self.payer.to_owned(), + self.token_account_owner.to_owned(), + self.token_account.to_owned(), + self.new_metadata_update_authority.to_owned(), + self.metadata.to_owned(), + self.token_program.to_owned(), + self.system_program.to_owned(), + self.rent.to_owned(), + self.metadata_mint.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for MintNewEditionFromMasterEditionViaToken<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.new_metadata.to_account_metas(is_signer)); + account_metas.extend(self.new_edition.to_account_metas(is_signer)); + account_metas.extend(self.master_edition.to_account_metas(is_signer)); + account_metas.extend(self.new_mint.to_account_metas(is_signer)); + account_metas.extend(self.edition_mark_pda.to_account_metas(is_signer)); + account_metas.extend(self.new_mint_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.token_account_owner.to_account_metas(is_signer)); + account_metas.extend(self.token_account.to_account_metas(is_signer)); + account_metas.extend( + self.new_metadata_update_authority + .to_account_metas(is_signer), + ); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.token_program.to_account_metas(is_signer)); + account_metas.extend(self.system_program.to_account_metas(is_signer)); + account_metas.extend(self.rent.to_account_metas(is_signer)); + account_metas.extend(self.metadata_mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct RevokeCollectionAuthority<'info> { pub collection_authority_record: AccountInfo<'info>, pub delegate_authority: AccountInfo<'info>, @@ -669,6 +873,30 @@ pub struct RevokeCollectionAuthority<'info> { pub mint: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for RevokeCollectionAuthority<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.collection_authority_record.to_owned(), + self.delegate_authority.to_owned(), + self.revoke_authority.to_owned(), + self.metadata.to_owned(), + self.mint.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for RevokeCollectionAuthority<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.collection_authority_record.to_account_metas(is_signer)); + account_metas.extend(self.delegate_authority.to_account_metas(is_signer)); + account_metas.extend(self.revoke_authority.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + pub struct SetCollectionSize<'info> { pub metadata: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -676,12 +904,54 @@ pub struct SetCollectionSize<'info> { pub system_program: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for SetCollectionSize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.mint.to_owned(), + self.update_authority.to_owned(), + self.system_program.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for SetCollectionSize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.system_program.to_account_metas(is_signer)); + account_metas + } +} + pub struct SetTokenStandard<'info> { pub metadata_account: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, pub mint_account: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for SetTokenStandard<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata_account.to_owned(), + self.update_authority.to_owned(), + self.mint_account.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for SetTokenStandard<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata_account.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.mint_account.to_account_metas(is_signer)); + account_metas + } +} + pub struct VerifyCollection<'info> { pub payer: AccountInfo<'info>, pub metadata: AccountInfo<'info>, @@ -691,6 +961,32 @@ pub struct VerifyCollection<'info> { pub collection_master_edition: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for VerifyCollection<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.payer.to_owned(), + self.metadata.to_owned(), + self.collection_authority.to_owned(), + self.collection_mint.to_owned(), + self.collection_metadata.to_owned(), + self.collection_master_edition.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for VerifyCollection<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.collection_mint.to_account_metas(is_signer)); + account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); + account_metas + } +} + pub struct VerifySizedCollectionItem<'info> { pub payer: AccountInfo<'info>, pub metadata: AccountInfo<'info>, @@ -700,6 +996,32 @@ pub struct VerifySizedCollectionItem<'info> { pub collection_master_edition: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for VerifySizedCollectionItem<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.payer.to_owned(), + self.metadata.to_owned(), + self.collection_authority.to_owned(), + self.collection_mint.to_owned(), + self.collection_metadata.to_owned(), + self.collection_master_edition.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for VerifySizedCollectionItem<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.collection_mint.to_account_metas(is_signer)); + account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); + account_metas + } +} + pub struct SetAndVerifyCollection<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -710,6 +1032,34 @@ pub struct SetAndVerifyCollection<'info> { pub collection_master_edition: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for SetAndVerifyCollection<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.collection_authority.to_owned(), + self.payer.to_owned(), + self.update_authority.to_owned(), + self.collection_mint.to_owned(), + self.collection_metadata.to_owned(), + self.collection_master_edition.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for SetAndVerifyCollection<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.collection_mint.to_account_metas(is_signer)); + account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); + account_metas + } +} + pub struct SetAndVerifySizedCollectionItem<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -720,6 +1070,34 @@ pub struct SetAndVerifySizedCollectionItem<'info> { pub collection_master_edition: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for SetAndVerifySizedCollectionItem<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.collection_authority.to_owned(), + self.payer.to_owned(), + self.update_authority.to_owned(), + self.collection_mint.to_owned(), + self.collection_metadata.to_owned(), + self.collection_master_edition.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for SetAndVerifySizedCollectionItem<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.update_authority.to_account_metas(is_signer)); + account_metas.extend(self.collection_mint.to_account_metas(is_signer)); + account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); + account_metas + } +} + pub struct FreezeDelegatedAccount<'info> { pub metadata: AccountInfo<'info>, pub delegate: AccountInfo<'info>, @@ -729,6 +1107,32 @@ pub struct FreezeDelegatedAccount<'info> { pub token_program: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for FreezeDelegatedAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.delegate.to_owned(), + self.token_account.to_owned(), + self.edition.to_owned(), + self.mint.to_owned(), + self.token_program.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for FreezeDelegatedAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.delegate.to_account_metas(is_signer)); + account_metas.extend(self.token_account.to_account_metas(is_signer)); + account_metas.extend(self.edition.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.token_program.to_account_metas(is_signer)); + account_metas + } +} + pub struct ThawDelegatedAccount<'info> { pub metadata: AccountInfo<'info>, pub delegate: AccountInfo<'info>, @@ -738,22 +1142,98 @@ pub struct ThawDelegatedAccount<'info> { pub token_program: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for ThawDelegatedAccount<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.delegate.to_owned(), + self.token_account.to_owned(), + self.edition.to_owned(), + self.mint.to_owned(), + self.token_program.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for ThawDelegatedAccount<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.delegate.to_account_metas(is_signer)); + account_metas.extend(self.token_account.to_account_metas(is_signer)); + account_metas.extend(self.edition.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.token_program.to_account_metas(is_signer)); + account_metas + } +} + pub struct UpdatePrimarySaleHappenedViaToken<'info> { pub metadata: AccountInfo<'info>, pub owner: AccountInfo<'info>, pub token: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for UpdatePrimarySaleHappenedViaToken<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.owner.to_owned(), + self.token.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for UpdatePrimarySaleHappenedViaToken<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.owner.to_account_metas(is_signer)); + account_metas.extend(self.token.to_account_metas(is_signer)); + account_metas + } +} + pub struct SignMetadata<'info> { pub creator: AccountInfo<'info>, pub metadata: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for SignMetadata<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.creator.to_owned(), self.metadata.to_owned()] + } +} + +impl<'info> ToAccountMetas for SignMetadata<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.creator.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas + } +} + pub struct RemoveCreatorVerification<'info> { pub creator: AccountInfo<'info>, pub metadata: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for RemoveCreatorVerification<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.creator.to_owned(), self.metadata.to_owned()] + } +} + +impl<'info> ToAccountMetas for RemoveCreatorVerification<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.creator.to_account_metas(is_signer)); + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas + } +} + pub struct Utilize<'info> { pub metadata: AccountInfo<'info>, pub token_account: AccountInfo<'info>, @@ -762,6 +1242,30 @@ pub struct Utilize<'info> { pub owner: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for Utilize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.token_account.to_owned(), + self.mint.to_owned(), + self.use_authority.to_owned(), + self.owner.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for Utilize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.token_account.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.use_authority.to_account_metas(is_signer)); + account_metas.extend(self.owner.to_account_metas(is_signer)); + account_metas + } +} + pub struct UnverifyCollection<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -770,6 +1274,33 @@ pub struct UnverifyCollection<'info> { pub collection_master_edition_account: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for UnverifyCollection<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.collection_authority.to_owned(), + self.collection_mint.to_owned(), + self.collection.to_owned(), + self.collection_master_edition_account.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for UnverifyCollection<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.collection_mint.to_account_metas(is_signer)); + account_metas.extend(self.collection.to_account_metas(is_signer)); + account_metas.extend( + self.collection_master_edition_account + .to_account_metas(is_signer), + ); + account_metas + } +} + pub struct UnverifySizedCollectionItem<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -779,6 +1310,35 @@ pub struct UnverifySizedCollectionItem<'info> { pub collection_master_edition_account: AccountInfo<'info>, } +impl<'info> ToAccountInfos<'info> for UnverifySizedCollectionItem<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.metadata.to_owned(), + self.collection_authority.to_owned(), + self.payer.to_owned(), + self.collection_mint.to_owned(), + self.collection.to_owned(), + self.collection_master_edition_account.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for UnverifySizedCollectionItem<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.metadata.to_account_metas(is_signer)); + account_metas.extend(self.collection_authority.to_account_metas(is_signer)); + account_metas.extend(self.payer.to_account_metas(is_signer)); + account_metas.extend(self.collection_mint.to_account_metas(is_signer)); + account_metas.extend(self.collection.to_account_metas(is_signer)); + account_metas.extend( + self.collection_master_edition_account + .to_account_metas(is_signer), + ); + account_metas + } +} + #[derive(Clone, Debug, PartialEq)] pub struct MetadataAccount(mpl_token_metadata::accounts::Metadata); diff --git a/tests/ido-pool/programs/ido-pool/src/lib.rs b/tests/ido-pool/programs/ido-pool/src/lib.rs index 793750440b..613515fe29 100644 --- a/tests/ido-pool/programs/ido-pool/src/lib.rs +++ b/tests/ido-pool/programs/ido-pool/src/lib.rs @@ -204,7 +204,7 @@ pub mod ido_pool { if ctx.accounts.user_redeemable.amount == 0 { let cpi_accounts = CloseAccount { account: ctx.accounts.user_redeemable.to_account_info(), - destination: ctx.accounts.user_authority.clone(), + destination: ctx.accounts.user_authority.to_account_info(), authority: ctx.accounts.ido_account.to_account_info(), }; let cpi_ctx = CpiContext::new_with_signer(cpi_program_id, cpi_accounts, signer); @@ -266,7 +266,7 @@ pub mod ido_pool { if ctx.accounts.escrow_usdc.amount == 0 { let cpi_accounts = CloseAccount { account: ctx.accounts.escrow_usdc.to_account_info(), - destination: ctx.accounts.user_authority.clone(), + destination: ctx.accounts.user_authority.to_account_info(), authority: ctx.accounts.ido_account.to_account_info(), }; let cpi_ctx = CpiContext::new_with_signer(cpi_program_id, cpi_accounts, signer); From 2690517986856455c77df35ff406e2f9a85d6695 Mon Sep 17 00:00:00 2001 From: Aursen Date: Fri, 19 Dec 2025 15:40:25 +0700 Subject: [PATCH 07/15] fix event cpi issues --- lang/syn/src/lib.rs | 2 +- lang/syn/src/parser/accounts/event_cpi.rs | 4 ++-- .../programs/token-extensions/src/utils.rs | 6 +++--- .../token-proxy/programs/token-proxy/src/lib.rs | 14 +++++++------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lang/syn/src/lib.rs b/lang/syn/src/lib.rs index b228173a34..47fac33122 100644 --- a/lang/syn/src/lib.rs +++ b/lang/syn/src/lib.rs @@ -391,7 +391,7 @@ impl Field { }; match &self.ty { Ty::UncheckedAccount => { - quote! { UncheckedAccount::try_from(&#field) } + quote! { UncheckedAccount::from(#field) } } Ty::Account(AccountTy { boxed, .. }) | Ty::InterfaceAccount(InterfaceAccountTy { boxed, .. }) => { diff --git a/lang/syn/src/parser/accounts/event_cpi.rs b/lang/syn/src/parser/accounts/event_cpi.rs index aa686c101c..41af733a2b 100644 --- a/lang/syn/src/parser/accounts/event_cpi.rs +++ b/lang/syn/src/parser/accounts/event_cpi.rs @@ -60,9 +60,9 @@ pub fn add_event_cpi_accounts( /// CHECK: Only the event authority can invoke self-CPI #[account(address = crate::EVENT_AUTHORITY_AND_BUMP.0)] - pub #authority_name: AccountInfo<#info_lifetime>, + pub #authority_name: UncheckedAccount<#info_lifetime>, /// CHECK: Self-CPI will fail if the program is not the current program - pub program: AccountInfo<#info_lifetime>, + pub program: UncheckedAccount<#info_lifetime>, } }; syn::parse2(accounts_struct) diff --git a/tests/spl/token-extensions/programs/token-extensions/src/utils.rs b/tests/spl/token-extensions/programs/token-extensions/src/utils.rs index 6c0d870e0b..fcc6063d85 100644 --- a/tests/spl/token-extensions/programs/token-extensions/src/utils.rs +++ b/tests/spl/token-extensions/programs/token-extensions/src/utils.rs @@ -22,9 +22,9 @@ pub const APPROVE_ACCOUNT_SEED: &[u8] = b"approve-account"; pub const META_LIST_ACCOUNT_SEED: &[u8] = b"extra-account-metas"; pub fn update_account_lamports_to_minimum_balance<'info>( - account: UncheckedAccount<'info>, - payer: UncheckedAccount<'info>, - system_program: UncheckedAccount<'info>, + account: AccountInfo<'info>, + payer: AccountInfo<'info>, + system_program: AccountInfo<'info>, ) -> Result<()> { let extra_lamports = Rent::get()?.minimum_balance(account.data_len()) - account.get_lamports(); if extra_lamports > 0 { diff --git a/tests/spl/token-proxy/programs/token-proxy/src/lib.rs b/tests/spl/token-proxy/programs/token-proxy/src/lib.rs index e12374156a..de65fa42d4 100644 --- a/tests/spl/token-proxy/programs/token-proxy/src/lib.rs +++ b/tests/spl/token-proxy/programs/token-proxy/src/lib.rs @@ -28,7 +28,7 @@ mod token_proxy { from: ctx.accounts.from.to_account_info(), mint: mint.to_account_info(), to: ctx.accounts.to.to_account_info(), - authority: ctx.accounts.authority.clone(), + authority: ctx.accounts.authority.to_account_info(), }; let cpi_program_id = token_program.key(); let cpi_context = CpiContext::new(cpi_program_id, cpi_accounts); @@ -37,7 +37,7 @@ mod token_proxy { let cpi_accounts = Transfer { from: ctx.accounts.from.to_account_info(), to: ctx.accounts.to.to_account_info(), - authority: ctx.accounts.authority.clone(), + authority: ctx.accounts.authority.to_account_info(), }; let cpi_program_id = token_program.key(); let cpi_context = CpiContext::new(cpi_program_id, cpi_accounts); @@ -211,7 +211,7 @@ impl<'a, 'b, 'c, 'info> From<&mut ProxyTransfer<'info>> let cpi_accounts = Transfer { from: accounts.from.to_account_info(), to: accounts.to.to_account_info(), - authority: accounts.authority.clone(), + authority: accounts.authority.to_account_info(), }; let cpi_program_id = accounts.token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) @@ -225,7 +225,7 @@ impl<'a, 'b, 'c, 'info> From<&mut ProxyMintTo<'info>> let cpi_accounts = MintTo { mint: accounts.mint.to_account_info(), to: accounts.to.to_account_info(), - authority: accounts.authority.clone(), + authority: accounts.authority.to_account_info(), }; let cpi_program_id = accounts.token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) @@ -237,7 +237,7 @@ impl<'a, 'b, 'c, 'info> From<&mut ProxyBurn<'info>> for CpiContext<'a, 'b, 'c, ' let cpi_accounts = Burn { mint: accounts.mint.to_account_info(), from: accounts.from.to_account_info(), - authority: accounts.authority.clone(), + authority: accounts.authority.to_account_info(), }; let cpi_program_id = accounts.token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) @@ -251,8 +251,8 @@ impl<'a, 'b, 'c, 'info> From<&mut ProxySetAuthority<'info>> accounts: &mut ProxySetAuthority<'info>, ) -> CpiContext<'a, 'b, 'c, 'info, SetAuthority<'info>> { let cpi_accounts = SetAuthority { - account_or_mint: accounts.account_or_mint.clone(), - current_authority: accounts.current_authority.clone(), + account_or_mint: accounts.account_or_mint.to_account_info(), + current_authority: accounts.current_authority.to_account_info(), }; // TODO: Support multisig signers let cpi_program_id = accounts.token_program.key(); CpiContext::new(cpi_program_id, cpi_accounts) From a2d904389721b1c12cf071faf116e03962d93334 Mon Sep 17 00:00:00 2001 From: Aursen Date: Fri, 19 Dec 2025 18:52:16 +0700 Subject: [PATCH 08/15] fix latest tests --- .../src/declare_program/mods/internal.rs | 4 +- .../programs/misc-optional/src/context.rs | 82 +++++++++---------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/lang/attribute/program/src/declare_program/mods/internal.rs b/lang/attribute/program/src/declare_program/mods/internal.rs index ffea579c9c..4648e76621 100644 --- a/lang/attribute/program/src/declare_program/mods/internal.rs +++ b/lang/attribute/program/src/declare_program/mods/internal.rs @@ -179,9 +179,9 @@ fn gen_internal_accounts_common( }; let acc_expr = if acc.optional { - quote! { Option } + quote! { Option } } else { - quote! { AccountInfo #generics } + quote! { UncheckedAccount #generics } }; quote! { diff --git a/tests/misc/programs/misc-optional/src/context.rs b/tests/misc/programs/misc-optional/src/context.rs index af713cbca9..71b2f16540 100644 --- a/tests/misc/programs/misc-optional/src/context.rs +++ b/tests/misc/programs/misc-optional/src/context.rs @@ -26,7 +26,7 @@ pub struct TestTokenSeedsInit<'info> { pub my_pda: Option>, #[account(mut)] /// CHECK: - pub authority: Option>, + pub authority: Option>, pub system_program: Option>, pub token_program: Option>, } @@ -62,7 +62,7 @@ pub struct TestInitAssociatedTokenWithTokenProgram<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: ignore - pub associated_token_token_program: Option>, + pub associated_token_token_program: Option>, pub associated_token_program: Option>, } @@ -75,7 +75,7 @@ pub struct TestValidateAssociatedToken<'info> { pub token: Option>, pub mint: Option>, /// CHECK: - pub wallet: Option>, + pub wallet: Option>, } #[derive(Accounts)] @@ -86,9 +86,9 @@ pub struct TestInstructionConstraint<'info> { bump = nonce, )] /// CHECK: - pub my_pda: Option>, + pub my_pda: Option>, /// CHECK: - pub my_account: Option>, + pub my_account: Option>, } #[derive(Accounts)] @@ -105,7 +105,7 @@ pub struct TestPdaInit<'info> { #[account(mut)] pub my_payer: Option>, /// CHECK: - pub foo: Option>, + pub foo: Option>, pub system_program: Option>, } @@ -133,7 +133,7 @@ pub struct TestPdaMutZeroCopy<'info> { )] pub my_pda: Option>, /// CHECK: - pub my_payer: Option>, + pub my_payer: Option>, } #[derive(Accounts)] @@ -175,7 +175,7 @@ pub struct TestClose<'info> { #[account(mut, close = sol_dest)] pub data: Option>, /// CHECK: - sol_dest: Option>, + sol_dest: Option>, } #[derive(Accounts)] @@ -183,7 +183,7 @@ pub struct TestCloseTwice<'info> { #[account(mut, close = sol_dest)] pub data: Option>, /// CHECK: - pub sol_dest: Option>, + pub sol_dest: Option>, } #[derive(Accounts)] @@ -191,7 +191,7 @@ pub struct TestCloseMut<'info> { #[account(mut)] pub data: Option>, /// CHECK: - pub sol_dest: Option>, + pub sol_dest: Option>, } #[derive(Accounts)] @@ -248,7 +248,7 @@ pub struct TestInitMintWithTokenProgram<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: ignore - pub mint_token_program: Option>, + pub mint_token_program: Option>, } #[derive(Accounts)] @@ -276,7 +276,7 @@ pub struct TestInitTokenWithTokenProgram<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: ignore - pub token_token_program: Option>, + pub token_token_program: Option>, } #[derive(Accounts)] @@ -301,7 +301,7 @@ pub struct TestInitWithEmptySeeds<'info> { pub struct TestEmptySeedsConstraint<'info> { #[account(seeds = [], bump)] /// CHECK: - pub pda: Option>, + pub pda: Option>, } #[derive(Accounts)] @@ -356,9 +356,9 @@ pub struct TestInitMintIfNeeded<'info> { pub system_program: Option>, pub token_program: Option>, /// CHECK: - pub mint_authority: Option>, + pub mint_authority: Option>, /// CHECK: - pub freeze_authority: Option>, + pub freeze_authority: Option>, } #[derive(Accounts)] @@ -375,11 +375,11 @@ pub struct TestInitMintIfNeededWithTokenProgram<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: ignore - pub mint_token_program: Option>, + pub mint_token_program: Option>, /// CHECK: ignore - pub mint_authority: Option>, + pub mint_authority: Option>, /// CHECK: ignore - pub freeze_authority: Option>, + pub freeze_authority: Option>, } #[derive(Accounts)] @@ -392,7 +392,7 @@ pub struct TestInitTokenIfNeeded<'info> { pub system_program: Option>, pub token_program: Option>, /// CHECK: - pub authority: Option>, + pub authority: Option>, } #[derive(Accounts)] @@ -409,9 +409,9 @@ pub struct TestInitTokenIfNeededWithTokenProgram<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: ignore - pub token_token_program: Option>, + pub token_token_program: Option>, /// CHECK: - pub authority: Option>, + pub authority: Option>, } #[derive(Accounts)] @@ -429,7 +429,7 @@ pub struct TestInitAssociatedTokenIfNeeded<'info> { pub token_program: Option>, pub associated_token_program: Option>, /// CHECK: - pub authority: Option>, + pub authority: Option>, } #[derive(Accounts)] @@ -446,10 +446,10 @@ pub struct TestInitAssociatedTokenIfNeededWithTokenProgram<'info> { pub payer: Option>, pub system_program: Option>, /// CHECK: ignore - pub associated_token_token_program: Option>, + pub associated_token_token_program: Option>, pub associated_token_program: Option>, /// CHECK: ignore - pub authority: Option>, + pub authority: Option>, } #[derive(Accounts)] @@ -479,21 +479,21 @@ pub struct TestMultidimensionalArrayConstSizes<'info> { #[derive(Accounts)] pub struct NoRentExempt<'info> { /// CHECK: - pub data: Option>, + pub data: Option>, } #[derive(Accounts)] pub struct EnforceRentExempt<'info> { #[account(rent_exempt = enforce)] /// CHECK: - pub data: Option>, + pub data: Option>, } #[derive(Accounts)] pub struct InitDecreaseLamports<'info> { #[account(init, payer = user, space = 1000)] /// CHECK: - pub data: Option>, + pub data: Option>, #[account(mut)] pub user: Option>, pub system_program: Option>, @@ -503,7 +503,7 @@ pub struct InitDecreaseLamports<'info> { pub struct InitIfNeededChecksRentExemption<'info> { #[account(init_if_needed, payer = user, space = 1000)] /// CHECK: - pub data: Option>, + pub data: Option>, #[account(mut)] pub user: Option>, pub system_program: Option>, @@ -516,11 +516,11 @@ pub struct TestProgramIdConstraint<'info> { // just deriving like this for testing purposes #[account(seeds = [b"seed"], bump = bump, seeds::program = anchor_spl::associated_token::ID)] /// CHECK: - first: Option>, + first: Option>, #[account(seeds = [b"seed"], bump = second_bump, seeds::program = crate::ID)] /// CHECK: - second: Option>, + second: Option>, } #[derive(Accounts)] @@ -529,11 +529,11 @@ pub struct TestProgramIdConstraintUsingFindPda<'info> { // just deriving like this for testing purposes #[account(seeds = [b"seed"], bump, seeds::program = anchor_spl::associated_token::ID)] /// CHECK: - first: Option>, + first: Option>, #[account(seeds = [b"seed"], bump, seeds::program = crate::ID)] /// CHECK: - second: Option>, + second: Option>, } #[derive(Accounts)] @@ -575,7 +575,7 @@ pub struct TestAuthorityConstraint<'info> { )] pub token: Option>, pub mint: Option>, - pub fake_authority: Option>, + pub fake_authority: Option>, } #[derive(Accounts)] pub struct TestOnlyAuthorityConstraint<'info> { @@ -593,7 +593,7 @@ pub struct TestOnlyTokenProgramConstraint<'info> { token::token_program = token_token_program )] pub token: Option>, - pub token_token_program: Option>, + pub token_token_program: Option>, } #[derive(Accounts)] @@ -614,8 +614,8 @@ pub struct TestMintConstraint<'info> { mint::freeze_authority = freeze_authority )] pub mint: Option>, - pub mint_authority: Option>, - pub freeze_authority: Option>, + pub mint_authority: Option>, + pub freeze_authority: Option>, } #[derive(Accounts)] @@ -634,8 +634,8 @@ pub struct TestMintAuthorityConstraint<'info> { mint::freeze_authority = freeze_authority )] pub mint: Option>, - pub mint_authority: Option>, - pub freeze_authority: Option>, + pub mint_authority: Option>, + pub freeze_authority: Option>, } #[derive(Accounts)] @@ -644,7 +644,7 @@ pub struct TestMintOneAuthorityConstraint<'info> { mint::authority = mint_authority, )] pub mint: Option>, - pub mint_authority: Option>, + pub mint_authority: Option>, } #[derive(Accounts)] @@ -655,7 +655,7 @@ pub struct TestMintMissMintAuthConstraint<'info> { mint::freeze_authority = freeze_authority, )] pub mint: Option>, - pub freeze_authority: Option>, + pub freeze_authority: Option>, } #[derive(Accounts)] @@ -665,7 +665,7 @@ pub struct TestMintOnlyTokenProgramConstraint<'info> { )] pub mint: Option>, /// CHECK: ignore - pub mint_token_program: Option>, + pub mint_token_program: Option>, } #[derive(Accounts)] From 3d73d6ea67f29e7bc80d36a06cb47da55d32a14d Mon Sep 17 00:00:00 2001 From: Aursen Date: Fri, 19 Dec 2025 19:38:28 +0700 Subject: [PATCH 09/15] update bench --- tests/bench/bench.json | 256 ++++++++++++++--------------------------- 1 file changed, 84 insertions(+), 172 deletions(-) diff --git a/tests/bench/bench.json b/tests/bench/bench.json index 6f30f0136b..7fc9f60c0b 100644 --- a/tests/bench/bench.json +++ b/tests/bench/bench.json @@ -1680,183 +1680,95 @@ "bench": 932424 }, "computeUnits": { - "accountInfo1": 702, - "accountInfo2": 1124, - "accountInfo4": 1921, - "accountInfo8": 3480, - "accountEmptyInit1": 4770, - "accountEmpty1": 738, - "accountEmptyInit2": 8487, - "accountEmpty2": 1138, - "accountEmptyInit4": 15915, - "accountEmpty4": 1923, - "accountEmptyInit8": 30779, - "accountEmpty8": 3500, - "accountSizedInit1": 4864, - "accountSized1": 786, - "accountSizedInit2": 8654, - "accountSized2": 1198, - "accountSizedInit4": 16236, - "accountSized4": 2031, - "accountSizedInit8": 31363, - "accountSized8": 3694, - "accountUnsizedInit1": 4967, - "accountUnsized1": 814, - "accountUnsizedInit2": 8841, - "accountUnsized2": 1240, - "accountUnsizedInit4": 16559, - "accountUnsized4": 2093, - "accountUnsizedInit8": 31985, - "accountUnsized8": 3797, - "boxedAccountEmptyInit1": 4864, - "boxedAccountEmpty1": 831, - "boxedAccountEmptyInit2": 8604, - "boxedAccountEmpty2": 1253, - "boxedAccountEmptyInit4": 16075, - "boxedAccountEmpty4": 2077, - "boxedAccountEmptyInit8": 31026, - "boxedAccountEmpty8": 3797, - "boxedAccountSizedInit1": 4952, - "boxedAccountSized1": 877, - "boxedAccountSizedInit2": 8756, - "boxedAccountSized2": 1318, - "boxedAccountSizedInit4": 16355, - "boxedAccountSized4": 2185, - "boxedAccountSizedInit8": 31562, - "boxedAccountSized8": 3984, - "boxedAccountUnsizedInit1": 5044, - "boxedAccountUnsized1": 907, - "boxedAccountUnsizedInit2": 8916, - "boxedAccountUnsized2": 1352, - "boxedAccountUnsizedInit4": 16651, - "boxedAccountUnsized4": 2234, - "boxedAccountUnsizedInit8": 32130, - "boxedAccountUnsized8": 4063, - "boxedInterfaceAccountMint1": 1092, - "boxedInterfaceAccountMint2": 1490, - "boxedInterfaceAccountMint4": 2276, - "boxedInterfaceAccountMint8": 3907, - "boxedInterfaceAccountToken1": 1219, - "boxedInterfaceAccountToken2": 1732, - "boxedInterfaceAccountToken4": 2748, - "boxedInterfaceAccountToken8": 4839, - "interfaceAccountMint1": 1107, - "interfaceAccountMint2": 1494, - "interfaceAccountMint4": 2276, - "interfaceAccountMint8": 3835, - "interfaceAccountToken1": 1239, - "interfaceAccountToken2": 1753, - "interfaceAccountToken4": 2783, - "interface1": 883, - "interface2": 1029, - "interface4": 1308, + "accountInfo1": 665, + "accountInfo2": 984, + "accountInfo4": 1612, + "accountInfo8": 2877, + "accountEmptyInit1": 4996, + "accountEmpty1": 803, + "accountEmptyInit2": 8919, + "accountEmpty2": 1235, + "accountEmptyInit4": 16759, + "accountEmpty4": 2087, + "accountEmptyInit8": 32446, + "accountEmpty8": 3801, + "accountSizedInit1": 5097, + "accountSized1": 842, + "accountSizedInit2": 9098, + "accountSized2": 1283, + "accountSizedInit4": 17102, + "accountSized4": 2171, + "accountSizedInit8": 33078, + "accountSized8": 3943, + "accountUnsizedInit1": 5199, + "accountUnsized1": 882, + "accountUnsizedInit2": 9285, + "accountUnsized2": 1345, + "accountUnsizedInit4": 17426, + "accountUnsized4": 2272, + "accountUnsizedInit8": 33700, + "accountUnsized8": 4120, + "boxedAccountEmptyInit1": 5088, + "boxedAccountEmpty1": 893, + "boxedAccountEmptyInit2": 9032, + "boxedAccountEmpty2": 1347, + "boxedAccountEmptyInit4": 16912, + "boxedAccountEmpty4": 2240, + "boxedAccountEmptyInit8": 32679, + "boxedAccountEmpty8": 4054, + "boxedAccountSizedInit1": 5181, + "boxedAccountSized1": 932, + "boxedAccountSizedInit2": 9194, + "boxedAccountSized2": 1398, + "boxedAccountSizedInit4": 17212, + "boxedAccountSized4": 2320, + "boxedAccountSizedInit8": 33255, + "boxedAccountSized8": 4188, + "boxedAccountUnsizedInit1": 5274, + "boxedAccountUnsized1": 972, + "boxedAccountUnsizedInit2": 9356, + "boxedAccountUnsized2": 1453, + "boxedAccountUnsizedInit4": 17512, + "boxedAccountUnsized4": 2408, + "boxedAccountUnsizedInit8": 33831, + "boxedAccountUnsized8": 4342, + "boxedInterfaceAccountMint1": 1153, + "boxedInterfaceAccountMint2": 1584, + "boxedInterfaceAccountMint4": 2434, + "boxedInterfaceAccountMint8": 4156, + "boxedInterfaceAccountToken1": 1278, + "boxedInterfaceAccountToken2": 1822, + "boxedInterfaceAccountToken4": 2898, + "boxedInterfaceAccountToken8": 5072, + "interfaceAccountMint1": 1169, + "interfaceAccountMint2": 1612, + "interfaceAccountMint4": 2496, + "interfaceAccountMint8": 4255, + "interfaceAccountToken1": 1300, + "interfaceAccountToken2": 1877, + "interfaceAccountToken4": 3017, + "interface1": 912, + "interface2": 1055, + "interface4": 1329, "interface8": 1887, - "program1": 899, - "program2": 1049, - "program4": 1336, - "program8": 1917, - "signer1": 888, + "program1": 932, + "program2": 1083, + "program4": 1373, + "program8": 1963, + "signer1": 908, "signer2": 1244, "signer4": 1904, - "signer8": 3293, - "systemAccount1": 910, - "systemAccount2": 1269, - "systemAccount4": 1972, - "systemAccount8": 3385, - "uncheckedAccount1": 896, + "signer8": 3234, + "systemAccount1": 945, + "systemAccount2": 1306, + "systemAccount4": 2016, + "systemAccount8": 3446, + "uncheckedAccount1": 916, "uncheckedAccount2": 1233, "uncheckedAccount4": 1861, - "uncheckedAccount8": 3171 + "uncheckedAccount8": 3126 }, - "stackMemory": { - "account_info1": 46, - "account_info2": 88, - "account_info4": 88, - "account_info8": 88, - "account_empty_init1": 88, - "account_empty_init2": 88, - "account_empty_init4": 88, - "account_empty_init8": 88, - "account_empty1": 88, - "account_empty2": 88, - "account_empty4": 88, - "account_empty8": 88, - "account_sized_init1": 88, - "account_sized_init2": 88, - "account_sized_init4": 88, - "account_sized_init8": 88, - "account_sized1": 88, - "account_sized2": 88, - "account_sized4": 88, - "account_sized8": 88, - "account_unsized_init1": 88, - "account_unsized_init2": 88, - "account_unsized_init4": 88, - "account_unsized_init8": 88, - "account_unsized1": 88, - "account_unsized2": 88, - "account_unsized4": 88, - "account_unsized8": 88, - "boxed_account_empty_init1": 88, - "boxed_account_empty_init2": 88, - "boxed_account_empty_init4": 88, - "boxed_account_empty_init8": 88, - "boxed_account_empty1": 88, - "boxed_account_empty2": 88, - "boxed_account_empty4": 88, - "boxed_account_empty8": 96, - "boxed_account_sized_init1": 88, - "boxed_account_sized_init2": 88, - "boxed_account_sized_init4": 88, - "boxed_account_sized_init8": 88, - "boxed_account_sized1": 88, - "boxed_account_sized2": 88, - "boxed_account_sized4": 88, - "boxed_account_sized8": 96, - "boxed_account_unsized_init1": 88, - "boxed_account_unsized_init2": 88, - "boxed_account_unsized_init4": 88, - "boxed_account_unsized_init8": 88, - "boxed_account_unsized1": 88, - "boxed_account_unsized2": 88, - "boxed_account_unsized4": 88, - "boxed_account_unsized8": 96, - "boxed_interface_account_mint1": 88, - "boxed_interface_account_mint2": 88, - "boxed_interface_account_mint4": 88, - "boxed_interface_account_mint8": 96, - "boxed_interface_account_token1": 88, - "boxed_interface_account_token2": 88, - "boxed_interface_account_token4": 88, - "boxed_interface_account_token8": 96, - "interface_account_mint1": 88, - "interface_account_mint2": 88, - "interface_account_mint4": 88, - "interface_account_mint8": 88, - "interface_account_token1": 104, - "interface_account_token2": 104, - "interface_account_token4": 104, - "interface1": 88, - "interface2": 88, - "interface4": 88, - "interface8": 88, - "program1": 88, - "program2": 88, - "program4": 88, - "program8": 88, - "signer1": 88, - "signer2": 88, - "signer4": 88, - "signer8": 88, - "system_account1": 88, - "system_account2": 88, - "system_account4": 88, - "system_account8": 88, - "unchecked_account1": 88, - "unchecked_account2": 88, - "unchecked_account4": 88, - "unchecked_account8": 88 - } + "stackMemory": {} } } -} +} \ No newline at end of file From fe573cf8f9e2bd5e2b29573b6428850bfbef3a7d Mon Sep 17 00:00:00 2001 From: Aursen <6496148+Aursen@users.noreply.github.com> Date: Sun, 10 May 2026 18:06:41 +0700 Subject: [PATCH 10/15] fix errors --- spl/src/associated_token.rs | 2 +- spl/src/token.rs | 2 +- spl/src/token_2022.rs | 2 +- spl/src/token_2022_extensions/cpi_guard.rs | 6 +-- .../default_account_state.rs | 5 +-- .../group_member_pointer.rs | 2 +- .../token_2022_extensions/group_pointer.rs | 2 +- .../token_2022_extensions/immutable_owner.rs | 4 +- .../interest_bearing_mint.rs | 2 +- .../token_2022_extensions/memo_transfer.rs | 5 +-- .../token_2022_extensions/metadata_pointer.rs | 2 +- .../mint_close_authority.rs | 2 +- .../token_2022_extensions/non_transferable.rs | 4 +- spl/src/token_2022_extensions/pausable.rs | 39 +++++++++++++++++-- .../permanent_delegate.rs | 2 +- spl/src/token_2022_extensions/token_group.rs | 2 +- spl/src/token_2022_extensions/transfer_fee.rs | 2 +- .../token_2022_extensions/transfer_hook.rs | 2 +- 18 files changed, 58 insertions(+), 29 deletions(-) diff --git a/spl/src/associated_token.rs b/spl/src/associated_token.rs index f0f0bda75c..219a5f1eab 100644 --- a/spl/src/associated_token.rs +++ b/spl/src/associated_token.rs @@ -8,7 +8,7 @@ pub use ::spl_associated_token_account_interface::{ use anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }; pub fn create<'info>(ctx: CpiContext<'_, '_, '_, 'info, Create<'info>>) -> Result<()> { diff --git a/spl/src/token.rs b/spl/src/token.rs index e1ce64deb3..edac628d54 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, program_pack::Pack, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, std::ops::Deref, }; diff --git a/spl/src/token_2022.rs b/spl/src/token_2022.rs index f86285e55b..991ebece87 100644 --- a/spl/src/token_2022.rs +++ b/spl/src/token_2022.rs @@ -3,7 +3,7 @@ use anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }; pub use {spl_token_2022::ID, spl_token_2022_interface as spl_token_2022}; diff --git a/spl/src/token_2022_extensions/cpi_guard.rs b/spl/src/token_2022_extensions/cpi_guard.rs index 079b876b49..375a5e6133 100644 --- a/spl/src/token_2022_extensions/cpi_guard.rs +++ b/spl/src/token_2022_extensions/cpi_guard.rs @@ -2,9 +2,8 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, - solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, + ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; @@ -65,7 +64,6 @@ pub fn cpi_guard_disable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'inf CpiGuardSettingsLocked). Kept only for the deprecated `cpi_guard_enable` / \ `cpi_guard_disable` wrappers; do not use in new code." )] -#[derive(Accounts)] pub struct CpiGuard<'info> { pub token_program_id: AccountInfo<'info>, pub account: AccountInfo<'info>, diff --git a/spl/src/token_2022_extensions/default_account_state.rs b/spl/src/token_2022_extensions/default_account_state.rs index e50ce36cc2..6fec3f6980 100644 --- a/spl/src/token_2022_extensions/default_account_state.rs +++ b/spl/src/token_2022_extensions/default_account_state.rs @@ -2,9 +2,8 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, - solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, + ToAccountMetas, }, spl_token_2022::state::AccountState, spl_token_2022_interface as spl_token_2022, diff --git a/spl/src/token_2022_extensions/group_member_pointer.rs b/spl/src/token_2022_extensions/group_member_pointer.rs index 877cc80f1e..269e669382 100644 --- a/spl/src/token_2022_extensions/group_member_pointer.rs +++ b/spl/src/token_2022_extensions/group_member_pointer.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/group_pointer.rs b/spl/src/token_2022_extensions/group_pointer.rs index f75f4602d6..5f1f4f45bb 100644 --- a/spl/src/token_2022_extensions/group_pointer.rs +++ b/spl/src/token_2022_extensions/group_pointer.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/immutable_owner.rs b/spl/src/token_2022_extensions/immutable_owner.rs index 32d10bc376..1e34ac2f51 100644 --- a/spl/src/token_2022_extensions/immutable_owner.rs +++ b/spl/src/token_2022_extensions/immutable_owner.rs @@ -3,8 +3,8 @@ use { anchor_lang::{ context::CpiContext, - solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + solana_program::account_info::AccountInfo, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/interest_bearing_mint.rs b/spl/src/token_2022_extensions/interest_bearing_mint.rs index ca48066431..670ceab9d7 100644 --- a/spl/src/token_2022_extensions/interest_bearing_mint.rs +++ b/spl/src/token_2022_extensions/interest_bearing_mint.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/memo_transfer.rs b/spl/src/token_2022_extensions/memo_transfer.rs index 3fa0b97cf4..dd11f35191 100644 --- a/spl/src/token_2022_extensions/memo_transfer.rs +++ b/spl/src/token_2022_extensions/memo_transfer.rs @@ -2,9 +2,8 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, - solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, + ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/metadata_pointer.rs b/spl/src/token_2022_extensions/metadata_pointer.rs index 3ddcc43f27..a7fbb305a4 100644 --- a/spl/src/token_2022_extensions/metadata_pointer.rs +++ b/spl/src/token_2022_extensions/metadata_pointer.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/mint_close_authority.rs b/spl/src/token_2022_extensions/mint_close_authority.rs index e7f7ab788a..f610cc3836 100644 --- a/spl/src/token_2022_extensions/mint_close_authority.rs +++ b/spl/src/token_2022_extensions/mint_close_authority.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/non_transferable.rs b/spl/src/token_2022_extensions/non_transferable.rs index 420c210341..ffb68cc5d2 100644 --- a/spl/src/token_2022_extensions/non_transferable.rs +++ b/spl/src/token_2022_extensions/non_transferable.rs @@ -3,8 +3,8 @@ use { anchor_lang::{ context::CpiContext, - solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + solana_program::account_info::AccountInfo, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/pausable.rs b/spl/src/token_2022_extensions/pausable.rs index f3dc817582..88360d598b 100644 --- a/spl/src/token_2022_extensions/pausable.rs +++ b/spl/src/token_2022_extensions/pausable.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; @@ -25,7 +25,6 @@ pub fn pausable_initialize<'info>( .map_err(Into::into) } -#[derive(Accounts)] pub struct PausableInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -73,9 +72,43 @@ pub fn pausable_pause<'info>( .map_err(Into::into) } -#[derive(Accounts)] pub struct PausableToggle<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } + +impl<'info> ToAccountInfos<'info> for PausableInitialize<'info> { + fn to_account_infos(&self) -> Vec> { + vec![self.token_program_id.to_owned(), self.mint.to_owned()] + } +} + +impl<'info> ToAccountMetas for PausableInitialize<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas + } +} + +impl<'info> ToAccountInfos<'info> for PausableToggle<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.token_program_id.to_owned(), + self.mint.to_owned(), + self.authority.to_owned(), + ] + } +} + +impl<'info> ToAccountMetas for PausableToggle<'info> { + fn to_account_metas(&self, is_signer: Option) -> Vec { + let mut account_metas = vec![]; + account_metas.extend(self.token_program_id.to_account_metas(is_signer)); + account_metas.extend(self.mint.to_account_metas(is_signer)); + account_metas.extend(self.authority.to_account_metas(is_signer)); + account_metas + } +} diff --git a/spl/src/token_2022_extensions/permanent_delegate.rs b/spl/src/token_2022_extensions/permanent_delegate.rs index b4b001aaee..1eaeff2dd2 100644 --- a/spl/src/token_2022_extensions/permanent_delegate.rs +++ b/spl/src/token_2022_extensions/permanent_delegate.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/token_group.rs b/spl/src/token_2022_extensions/token_group.rs index 38b146bfef..5f81b8bbbf 100644 --- a/spl/src/token_2022_extensions/token_group.rs +++ b/spl/src/token_2022_extensions/token_group.rs @@ -3,7 +3,7 @@ use anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }; pub fn token_group_initialize<'info>( diff --git a/spl/src/token_2022_extensions/transfer_fee.rs b/spl/src/token_2022_extensions/transfer_fee.rs index 36f11cc297..fc68def98a 100644 --- a/spl/src/token_2022_extensions/transfer_fee.rs +++ b/spl/src/token_2022_extensions/transfer_fee.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/transfer_hook.rs b/spl/src/token_2022_extensions/transfer_hook.rs index 30db5f6906..bf4cbcb963 100644 --- a/spl/src/token_2022_extensions/transfer_hook.rs +++ b/spl/src/token_2022_extensions/transfer_hook.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Accounts, Result, + Result, ToAccountInfos, ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; From 389b346f891c59aec98d68b2266cecdf19c31e41 Mon Sep 17 00:00:00 2001 From: Aursen <6496148+Aursen@users.noreply.github.com> Date: Sun, 10 May 2026 18:40:32 +0700 Subject: [PATCH 11/15] fix test --- tests/declare-program/programs/external/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/declare-program/programs/external/src/lib.rs b/tests/declare-program/programs/external/src/lib.rs index af56c79173..3cbf10bc0d 100644 --- a/tests/declare-program/programs/external/src/lib.rs +++ b/tests/declare-program/programs/external/src/lib.rs @@ -207,7 +207,7 @@ pub struct UpdateWithOptional<'info> { pub my_account: Account<'info, MyAccount>, /// CHECK: Optional account for testing #[account(mut)] - pub optional_account: Option>, + pub optional_account: Option>, } #[account] From 6f7226b4610b8f7244e4d6d87ea6f4cc1da17525 Mon Sep 17 00:00:00 2001 From: Aursen <6496148+Aursen@users.noreply.github.com> Date: Mon, 11 May 2026 09:33:03 +0700 Subject: [PATCH 12/15] fix tests --- spl/src/metadata.rs | 2 +- spl/src/token.rs | 3 +-- spl/src/token_2022_extensions/immutable_owner.rs | 5 ++--- spl/src/token_2022_extensions/non_transferable.rs | 5 ++--- tests/zero-copy/programs/zero-cpi/src/lib.rs | 2 +- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index 654e49435c..a573dbc4d5 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -4,7 +4,7 @@ use { context::CpiContext, error::ErrorCode, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - system_program, Accounts, Result, ToAccountInfos, + system_program, Result, ToAccountInfos, ToAccountMetas, }, std::ops::Deref, }; diff --git a/spl/src/token.rs b/spl/src/token.rs index edac628d54..7b1151968d 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -800,8 +800,7 @@ impl anchor_lang::Id for Token { // Field parsers to save compute. All account validation is assumed to be done // outside of these methods. pub mod accessor { - use super::*; - use anchor_lang::prelude::UncheckedAccount; + use {super::*, anchor_lang::prelude::UncheckedAccount}; pub fn amount(account: &UncheckedAccount) -> Result { let bytes = account.try_borrow_data()?; diff --git a/spl/src/token_2022_extensions/immutable_owner.rs b/spl/src/token_2022_extensions/immutable_owner.rs index 1e34ac2f51..e6a9e0d667 100644 --- a/spl/src/token_2022_extensions/immutable_owner.rs +++ b/spl/src/token_2022_extensions/immutable_owner.rs @@ -2,9 +2,8 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, - solana_program::account_info::AccountInfo, - Result, ToAccountInfos, ToAccountMetas, + context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, + ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/spl/src/token_2022_extensions/non_transferable.rs b/spl/src/token_2022_extensions/non_transferable.rs index ffb68cc5d2..063f4a9505 100644 --- a/spl/src/token_2022_extensions/non_transferable.rs +++ b/spl/src/token_2022_extensions/non_transferable.rs @@ -2,9 +2,8 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, - solana_program::account_info::AccountInfo, - Result, ToAccountInfos, ToAccountMetas, + context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, + ToAccountMetas, }, spl_token_2022_interface as spl_token_2022, }; diff --git a/tests/zero-copy/programs/zero-cpi/src/lib.rs b/tests/zero-copy/programs/zero-cpi/src/lib.rs index e0319e60b9..9af7a299f3 100644 --- a/tests/zero-copy/programs/zero-cpi/src/lib.rs +++ b/tests/zero-copy/programs/zero-cpi/src/lib.rs @@ -10,7 +10,7 @@ pub mod zero_cpi { use super::*; pub fn check_cpi(ctx: Context, data: u64) -> Result<()> { let cpi_accounts = UpdateBar { - authority: ctx.accounts.authority.clone(), + authority: ctx.accounts.authority.to_account_info(), bar: ctx.accounts.bar.to_account_info(), foo: ctx.accounts.foo.to_account_info(), }; From c97b2a6b14f3efedbe70eb2ae854c4d602e0a66a Mon Sep 17 00:00:00 2001 From: Aursen <6496148+Aursen@users.noreply.github.com> Date: Thu, 4 Jun 2026 16:32:41 +0200 Subject: [PATCH 13/15] fix fmt --- lang/syn/src/codegen/accounts/try_accounts.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/syn/src/codegen/accounts/try_accounts.rs b/lang/syn/src/codegen/accounts/try_accounts.rs index 8e97caf3ff..889dfe7651 100644 --- a/lang/syn/src/codegen/accounts/try_accounts.rs +++ b/lang/syn/src/codegen/accounts/try_accounts.rs @@ -3,7 +3,7 @@ use { codegen::accounts::{bumps, constraints, generics, ParsedGenerics}, AccountField, AccountsStruct, }, - quote::{quote}, + quote::quote, }; // Generates the `Accounts` trait implementation. From 4448ff2b2be9af899a05944d3ae02881ede10f8d Mon Sep 17 00:00:00 2001 From: Aursen <6496148+Aursen@users.noreply.github.com> Date: Thu, 4 Jun 2026 17:09:14 +0200 Subject: [PATCH 14/15] revert changes --- lang/src/accounts/unchecked_account.rs | 7 + lang/src/system_program.rs | 242 +------ lang/syn/src/codegen/accounts/constraints.rs | 1 + lang/syn/src/codegen/accounts/try_accounts.rs | 13 +- lang/syn/src/lib.rs | 9 + lang/syn/src/parser/accounts/mod.rs | 1 + spl/src/associated_token.rs | 29 +- spl/src/memo.rs | 1 + spl/src/metadata.rs | 611 +----------------- spl/src/stake.rs | 69 +- spl/src/token.rs | 328 +--------- spl/src/token_2022.rs | 437 +------------ spl/src/token_2022_extensions/cpi_guard.rs | 26 +- .../default_account_state.rs | 42 +- .../group_member_pointer.rs | 39 +- .../token_2022_extensions/group_pointer.rs | 39 +- .../token_2022_extensions/immutable_owner.rs | 24 +- .../interest_bearing_mint.rs | 39 +- .../token_2022_extensions/memo_transfer.rs | 26 +- .../token_2022_extensions/metadata_pointer.rs | 18 +- .../mint_close_authority.rs | 18 +- .../token_2022_extensions/non_transferable.rs | 21 +- spl/src/token_2022_extensions/pausable.rs | 39 +- .../permanent_delegate.rs | 18 +- spl/src/token_2022_extensions/token_group.rs | 52 +- .../token_2022_extensions/token_metadata.rs | 95 +-- spl/src/token_2022_extensions/transfer_fee.rs | 126 +--- .../token_2022_extensions/transfer_hook.rs | 39 +- 28 files changed, 176 insertions(+), 2233 deletions(-) diff --git a/lang/src/accounts/unchecked_account.rs b/lang/src/accounts/unchecked_account.rs index 096b344481..a93be46931 100644 --- a/lang/src/accounts/unchecked_account.rs +++ b/lang/src/accounts/unchecked_account.rs @@ -21,6 +21,13 @@ impl<'info> From<&'info AccountInfo<'info>> for UncheckedAccount<'info> { } } +impl<'info> UncheckedAccount<'info> { + #[deprecated(note = "Use `UncheckedAccount::from` instead; this constructor cannot fail")] + pub fn try_from(acc_info: &'info AccountInfo<'info>) -> Self { + Self(acc_info) + } +} + impl<'info, B> Accounts<'info, B> for UncheckedAccount<'info> { fn try_accounts( _program_id: &Pubkey, diff --git a/lang/src/system_program.rs b/lang/src/system_program.rs index bc17352c67..3bc00f25cf 100644 --- a/lang/src/system_program.rs +++ b/lang/src/system_program.rs @@ -31,32 +31,13 @@ pub fn advance_nonce_account<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct AdvanceNonceAccount<'info> { pub nonce: AccountInfo<'info>, pub authorized: AccountInfo<'info>, pub recent_blockhashes: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for AdvanceNonceAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.nonce.to_owned(), - self.recent_blockhashes.to_owned(), - self.authorized.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for AdvanceNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.authorized.key(), true), - ] - } -} - pub fn allocate<'info>( ctx: CpiContext<'_, '_, '_, 'info, Allocate<'info>>, space: u64, @@ -73,22 +54,11 @@ pub fn allocate<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct Allocate<'info> { pub account_to_allocate: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Allocate<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account_to_allocate.to_owned()] - } -} - -impl<'info> ToAccountMetas for Allocate<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![AccountMeta::new(self.account_to_allocate.key(), true)] - } -} - pub fn allocate_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, AllocateWithSeed<'info>>, seed: &str, @@ -110,26 +80,12 @@ pub fn allocate_with_seed<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct AllocateWithSeed<'info> { pub account_to_allocate: AccountInfo<'info>, pub base: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for AllocateWithSeed<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account_to_allocate.to_owned(), self.base.to_owned()] - } -} - -impl<'info> ToAccountMetas for AllocateWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.account_to_allocate.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - ] - } -} - pub fn assign<'info>( ctx: CpiContext<'_, '_, '_, 'info, Assign<'info>>, owner: &Pubkey, @@ -146,22 +102,11 @@ pub fn assign<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct Assign<'info> { pub account_to_assign: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Assign<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account_to_assign.to_owned()] - } -} - -impl<'info> ToAccountMetas for Assign<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![AccountMeta::new(self.account_to_assign.key(), true)] - } -} - pub fn assign_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, AssignWithSeed<'info>>, seed: &str, @@ -181,26 +126,12 @@ pub fn assign_with_seed<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct AssignWithSeed<'info> { pub account_to_assign: AccountInfo<'info>, pub base: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for AssignWithSeed<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account_to_assign.to_owned(), self.base.to_owned()] - } -} - -impl<'info> ToAccountMetas for AssignWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.account_to_assign.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - ] - } -} - pub fn authorize_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, AuthorizeNonceAccount<'info>>, new_authority: &Pubkey, @@ -218,26 +149,12 @@ pub fn authorize_nonce_account<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct AuthorizeNonceAccount<'info> { pub nonce: AccountInfo<'info>, pub authorized: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for AuthorizeNonceAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.nonce.to_owned(), self.authorized.to_owned()] - } -} - -impl<'info> ToAccountMetas for AuthorizeNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.authorized.key(), true), - ] - } -} - pub fn create_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateAccount<'info>>, lamports: u64, @@ -259,26 +176,12 @@ pub fn create_account<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct CreateAccount<'info> { pub from: AccountInfo<'info>, pub to: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CreateAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.from.to_owned(), self.to.to_owned()] - } -} - -impl<'info> ToAccountMetas for CreateAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.to.key(), true), - ] - } -} - pub fn create_account_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateAccountWithSeed<'info>>, seed: &str, @@ -303,32 +206,13 @@ pub fn create_account_with_seed<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct CreateAccountWithSeed<'info> { pub from: AccountInfo<'info>, pub to: AccountInfo<'info>, pub base: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CreateAccountWithSeed<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.to.to_owned(), - self.base.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CreateAccountWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.to.key(), false), - AccountMeta::new_readonly(self.to.key(), true), - ] - } -} - pub fn create_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccount<'info>>, lamports: u64, @@ -358,6 +242,7 @@ pub fn create_nonce_account<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct CreateNonceAccount<'info> { pub from: AccountInfo<'info>, pub nonce: AccountInfo<'info>, @@ -365,28 +250,6 @@ pub struct CreateNonceAccount<'info> { pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CreateNonceAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.nonce.to_owned(), - self.recent_blockhashes.to_owned(), - self.rent.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CreateNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.rent.key(), false), - ] - } -} - pub fn create_nonce_account_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccountWithSeed<'info>>, lamports: u64, @@ -423,6 +286,7 @@ pub fn create_nonce_account_with_seed<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct CreateNonceAccountWithSeed<'info> { pub from: AccountInfo<'info>, pub nonce: AccountInfo<'info>, @@ -431,30 +295,6 @@ pub struct CreateNonceAccountWithSeed<'info> { pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CreateNonceAccountWithSeed<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.nonce.to_owned(), - self.base.to_owned(), - self.recent_blockhashes.to_owned(), - self.rent.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CreateNonceAccountWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), false), - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.rent.key(), false), - ] - } -} - pub fn transfer<'info>( ctx: CpiContext<'_, '_, '_, 'info, Transfer<'info>>, lamports: u64, @@ -472,26 +312,12 @@ pub fn transfer<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct Transfer<'info> { pub from: AccountInfo<'info>, pub to: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Transfer<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.from.to_owned(), self.to.to_owned()] - } -} - -impl<'info> ToAccountMetas for Transfer<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), true), - AccountMeta::new(self.to.key(), false), - ] - } -} - pub fn transfer_with_seed<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferWithSeed<'info>>, from_seed: String, @@ -514,32 +340,13 @@ pub fn transfer_with_seed<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TransferWithSeed<'info> { pub from: AccountInfo<'info>, pub base: AccountInfo<'info>, pub to: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferWithSeed<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.base.to_owned(), - self.to.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TransferWithSeed<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.from.key(), false), - AccountMeta::new_readonly(self.base.key(), true), - AccountMeta::new(self.to.key(), false), - ] - } -} - pub fn withdraw_nonce_account<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawNonceAccount<'info>>, lamports: u64, @@ -564,6 +371,7 @@ pub fn withdraw_nonce_account<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct WithdrawNonceAccount<'info> { pub nonce: AccountInfo<'info>, pub to: AccountInfo<'info>, @@ -571,27 +379,3 @@ pub struct WithdrawNonceAccount<'info> { pub rent: AccountInfo<'info>, pub authorized: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for WithdrawNonceAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.nonce.to_owned(), - self.to.to_owned(), - self.recent_blockhashes.to_owned(), - self.rent.to_owned(), - self.authorized.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for WithdrawNonceAccount<'info> { - fn to_account_metas(&self, _: Option) -> Vec { - vec![ - AccountMeta::new(self.nonce.key(), false), - AccountMeta::new(self.to.key(), false), - AccountMeta::new_readonly(self.recent_blockhashes.key(), false), - AccountMeta::new_readonly(self.rent.key(), false), - AccountMeta::new_readonly(self.authorized.key(), true), - ] - } -} diff --git a/lang/syn/src/codegen/accounts/constraints.rs b/lang/syn/src/codegen/accounts/constraints.rs index b50e195dc2..4469d4238a 100644 --- a/lang/syn/src/codegen/accounts/constraints.rs +++ b/lang/syn/src/codegen/accounts/constraints.rs @@ -1838,6 +1838,7 @@ fn generate_account_ref(field: &Field) -> proc_macro2::TokenStream { let name = &field.ident; match &field.ty { + Ty::AccountInfo => quote!(&#name), Ty::Account(acc) if acc.boxed => quote!(AsRef::::as_ref(#name.as_ref())), Ty::InterfaceAccount(acc) if acc.boxed => { quote!(AsRef::::as_ref(#name.as_ref())) diff --git a/lang/syn/src/codegen/accounts/try_accounts.rs b/lang/syn/src/codegen/accounts/try_accounts.rs index 889dfe7651..6090d93d4d 100644 --- a/lang/syn/src/codegen/accounts/try_accounts.rs +++ b/lang/syn/src/codegen/accounts/try_accounts.rs @@ -1,9 +1,9 @@ use { crate::{ codegen::accounts::{bumps, constraints, generics, ParsedGenerics}, - AccountField, AccountsStruct, + AccountField, AccountsStruct, Ty, }, - quote::quote, + quote::{quote, quote_spanned}, }; // Generates the `Accounts` trait implementation. @@ -72,11 +72,20 @@ pub fn generate(accs: &AccountsStruct) -> proc_macro2::TokenStream { let name = f.ident.to_string(); let typed_name = f.typed_ident(); + // Generate the deprecation call if it is an AccountInfo + let warning = if matches!(f.ty, Ty::AccountInfo) { + quote_spanned! { f.ty_span => + ::anchor_lang::deprecated_account_info_usage(); + } + } else { + quote! {} + }; quote! { #[cfg(feature = "anchor-debug")] ::anchor_lang::solana_program::log::sol_log(stringify!(#typed_name)); let #typed_name = anchor_lang::Accounts::try_accounts(__program_id, __accounts, __ix_data, __bumps, __reallocs) .map_err(|e| e.with_account_name(#name))?; + #warning } } } diff --git a/lang/syn/src/lib.rs b/lang/syn/src/lib.rs index 834dbe88b3..423db800cb 100644 --- a/lang/syn/src/lib.rs +++ b/lang/syn/src/lib.rs @@ -350,6 +350,9 @@ impl Field { let account_ty = self.account_ty(); let container_ty = self.container_ty(); let inner_ty = match &self.ty { + Ty::AccountInfo => quote! { + AccountInfo + }, Ty::UncheckedAccount => quote! { UncheckedAccount }, @@ -447,6 +450,7 @@ impl Field { }, }; match &self.ty { + Ty::AccountInfo => quote! { #field.to_account_info() }, Ty::UncheckedAccount => { quote! { UncheckedAccount::from(#field) } } @@ -549,6 +553,7 @@ impl Field { Ty::InterfaceAccount(_) => { quote! { anchor_lang::accounts::interface_account::InterfaceAccount } } + Ty::AccountInfo => quote! {}, Ty::UncheckedAccount => quote! {}, Ty::Signer => quote! {}, Ty::SystemAccount => quote! {}, @@ -559,6 +564,9 @@ impl Field { // Returns the inner account struct type. pub fn account_ty(&self) -> proc_macro2::TokenStream { match &self.ty { + Ty::AccountInfo => quote! { + AccountInfo + }, Ty::UncheckedAccount => quote! { UncheckedAccount }, @@ -649,6 +657,7 @@ pub struct CompositeField { // A type of an account field. #[derive(Debug, PartialEq, Eq)] pub enum Ty { + AccountInfo, UncheckedAccount, AccountLoader(AccountLoaderTy), Sysvar(SysvarTy), diff --git a/lang/syn/src/parser/accounts/mod.rs b/lang/syn/src/parser/accounts/mod.rs index 9d1e643843..895a25891b 100644 --- a/lang/syn/src/parser/accounts/mod.rs +++ b/lang/syn/src/parser/accounts/mod.rs @@ -455,6 +455,7 @@ fn parse_ty(f: &syn::Field) -> ParseResult<(Ty, bool)> { let (ident, optional, path) = ident_string(f)?; let ty = match ident.as_str() { "Sysvar" => Ty::Sysvar(parse_sysvar(&path)?), + "AccountInfo" => Ty::AccountInfo, "UncheckedAccount" => Ty::UncheckedAccount, "AccountLoader" => Ty::AccountLoader(parse_program_account_loader(&path)?), "Account" => Ty::Account(parse_account_ty(&path)?), diff --git a/spl/src/associated_token.rs b/spl/src/associated_token.rs index 219a5f1eab..da7f7bb90b 100644 --- a/spl/src/associated_token.rs +++ b/spl/src/associated_token.rs @@ -8,7 +8,7 @@ pub use ::spl_associated_token_account_interface::{ use anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }; pub fn create<'info>(ctx: CpiContext<'_, '_, '_, 'info, Create<'info>>) -> Result<()> { @@ -57,6 +57,7 @@ pub fn create_idempotent<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct Create<'info> { pub payer: AccountInfo<'info>, pub associated_token: AccountInfo<'info>, @@ -66,32 +67,6 @@ pub struct Create<'info> { pub token_program: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Create<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.payer.to_owned(), - self.associated_token.to_owned(), - self.authority.to_owned(), - self.mint.to_owned(), - self.system_program.to_owned(), - self.token_program.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Create<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.associated_token.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.system_program.to_account_metas(is_signer)); - account_metas.extend(self.token_program.to_account_metas(is_signer)); - account_metas - } -} - type CreateIdempotent<'info> = Create<'info>; #[derive(Clone)] diff --git a/spl/src/memo.rs b/spl/src/memo.rs index 097a85e32f..7f81cda086 100644 --- a/spl/src/memo.rs +++ b/spl/src/memo.rs @@ -18,6 +18,7 @@ pub fn build_memo<'info>(ctx: CpiContext<'_, '_, '_, 'info, BuildMemo>, memo: &[ .map_err(Into::into) } +#[derive(Accounts)] pub struct BuildMemo {} #[derive(Clone)] diff --git a/spl/src/metadata.rs b/spl/src/metadata.rs index a573dbc4d5..f748c10111 100644 --- a/spl/src/metadata.rs +++ b/spl/src/metadata.rs @@ -4,7 +4,7 @@ use { context::CpiContext, error::ErrorCode, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - system_program, Result, ToAccountInfos, ToAccountMetas, + system_program, Accounts, Result, ToAccountInfos, }, std::ops::Deref, }; @@ -546,6 +546,7 @@ pub fn unverify_sized_collection_item<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct ApproveCollectionAuthority<'info> { pub collection_authority_record: AccountInfo<'info>, pub new_collection_authority: AccountInfo<'info>, @@ -555,32 +556,7 @@ pub struct ApproveCollectionAuthority<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for ApproveCollectionAuthority<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.collection_authority_record.to_owned(), - self.new_collection_authority.to_owned(), - self.update_authority.to_owned(), - self.payer.to_owned(), - self.metadata.to_owned(), - self.mint.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ApproveCollectionAuthority<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.collection_authority_record.to_account_metas(is_signer)); - account_metas.extend(self.new_collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct BubblegumSetCollectionSize<'info> { pub metadata_account: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, @@ -588,28 +564,7 @@ pub struct BubblegumSetCollectionSize<'info> { pub bubblegum_signer: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for BubblegumSetCollectionSize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata_account.to_owned(), - self.update_authority.to_owned(), - self.mint.to_owned(), - self.bubblegum_signer.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for BubblegumSetCollectionSize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata_account.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.bubblegum_signer.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct BurnEditionNft<'info> { pub metadata: AccountInfo<'info>, pub owner: AccountInfo<'info>, @@ -623,40 +578,7 @@ pub struct BurnEditionNft<'info> { pub spl_token: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for BurnEditionNft<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.owner.to_owned(), - self.print_edition_mint.to_owned(), - self.master_edition_mint.to_owned(), - self.print_edition_token.to_owned(), - self.master_edition_token.to_owned(), - self.master_edition.to_owned(), - self.print_edition.to_owned(), - self.edition_marker.to_owned(), - self.spl_token.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for BurnEditionNft<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.owner.to_account_metas(is_signer)); - account_metas.extend(self.print_edition_mint.to_account_metas(is_signer)); - account_metas.extend(self.master_edition_mint.to_account_metas(is_signer)); - account_metas.extend(self.print_edition_token.to_account_metas(is_signer)); - account_metas.extend(self.master_edition_token.to_account_metas(is_signer)); - account_metas.extend(self.master_edition.to_account_metas(is_signer)); - account_metas.extend(self.print_edition.to_account_metas(is_signer)); - account_metas.extend(self.edition_marker.to_account_metas(is_signer)); - account_metas.extend(self.spl_token.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct BurnNft<'info> { pub metadata: AccountInfo<'info>, pub owner: AccountInfo<'info>, @@ -666,32 +588,7 @@ pub struct BurnNft<'info> { pub spl_token: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for BurnNft<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.owner.to_owned(), - self.mint.to_owned(), - self.token.to_owned(), - self.edition.to_owned(), - self.spl_token.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for BurnNft<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.owner.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.token.to_account_metas(is_signer)); - account_metas.extend(self.edition.to_account_metas(is_signer)); - account_metas.extend(self.spl_token.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct CreateMetadataAccountsV3<'info> { pub metadata: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -702,54 +599,13 @@ pub struct CreateMetadataAccountsV3<'info> { pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CreateMetadataAccountsV3<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.mint.to_owned(), - self.mint_authority.to_owned(), - self.payer.to_owned(), - self.update_authority.to_owned(), - self.system_program.to_owned(), - self.rent.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CreateMetadataAccountsV3<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.mint_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.system_program.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct UpdateMetadataAccountsV2<'info> { pub metadata: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for UpdateMetadataAccountsV2<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.metadata.to_owned(), self.update_authority.to_owned()] - } -} - -impl<'info> ToAccountMetas for UpdateMetadataAccountsV2<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct CreateMasterEditionV3<'info> { pub edition: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -762,38 +618,7 @@ pub struct CreateMasterEditionV3<'info> { pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CreateMasterEditionV3<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.edition.to_owned(), - self.mint.to_owned(), - self.update_authority.to_owned(), - self.mint_authority.to_owned(), - self.payer.to_owned(), - self.metadata.to_owned(), - self.token_program.to_owned(), - self.system_program.to_owned(), - self.rent.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CreateMasterEditionV3<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.edition.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.mint_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.token_program.to_account_metas(is_signer)); - account_metas.extend(self.system_program.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct MintNewEditionFromMasterEditionViaToken<'info> { pub new_metadata: AccountInfo<'info>, pub new_edition: AccountInfo<'info>, @@ -819,53 +644,7 @@ pub struct MintNewEditionFromMasterEditionViaToken<'info> { pub metadata_mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for MintNewEditionFromMasterEditionViaToken<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.new_metadata.to_owned(), - self.new_edition.to_owned(), - self.master_edition.to_owned(), - self.new_mint.to_owned(), - self.edition_mark_pda.to_owned(), - self.new_mint_authority.to_owned(), - self.payer.to_owned(), - self.token_account_owner.to_owned(), - self.token_account.to_owned(), - self.new_metadata_update_authority.to_owned(), - self.metadata.to_owned(), - self.token_program.to_owned(), - self.system_program.to_owned(), - self.rent.to_owned(), - self.metadata_mint.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for MintNewEditionFromMasterEditionViaToken<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.new_metadata.to_account_metas(is_signer)); - account_metas.extend(self.new_edition.to_account_metas(is_signer)); - account_metas.extend(self.master_edition.to_account_metas(is_signer)); - account_metas.extend(self.new_mint.to_account_metas(is_signer)); - account_metas.extend(self.edition_mark_pda.to_account_metas(is_signer)); - account_metas.extend(self.new_mint_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.token_account_owner.to_account_metas(is_signer)); - account_metas.extend(self.token_account.to_account_metas(is_signer)); - account_metas.extend( - self.new_metadata_update_authority - .to_account_metas(is_signer), - ); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.token_program.to_account_metas(is_signer)); - account_metas.extend(self.system_program.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas.extend(self.metadata_mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct RevokeCollectionAuthority<'info> { pub collection_authority_record: AccountInfo<'info>, pub delegate_authority: AccountInfo<'info>, @@ -874,30 +653,7 @@ pub struct RevokeCollectionAuthority<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for RevokeCollectionAuthority<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.collection_authority_record.to_owned(), - self.delegate_authority.to_owned(), - self.revoke_authority.to_owned(), - self.metadata.to_owned(), - self.mint.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for RevokeCollectionAuthority<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.collection_authority_record.to_account_metas(is_signer)); - account_metas.extend(self.delegate_authority.to_account_metas(is_signer)); - account_metas.extend(self.revoke_authority.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SetCollectionSize<'info> { pub metadata: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -905,54 +661,14 @@ pub struct SetCollectionSize<'info> { pub system_program: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SetCollectionSize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.mint.to_owned(), - self.update_authority.to_owned(), - self.system_program.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for SetCollectionSize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.system_program.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SetTokenStandard<'info> { pub metadata_account: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, pub mint_account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SetTokenStandard<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata_account.to_owned(), - self.update_authority.to_owned(), - self.mint_account.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for SetTokenStandard<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata_account.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.mint_account.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct VerifyCollection<'info> { pub payer: AccountInfo<'info>, pub metadata: AccountInfo<'info>, @@ -962,32 +678,7 @@ pub struct VerifyCollection<'info> { pub collection_master_edition: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for VerifyCollection<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.payer.to_owned(), - self.metadata.to_owned(), - self.collection_authority.to_owned(), - self.collection_mint.to_owned(), - self.collection_metadata.to_owned(), - self.collection_master_edition.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for VerifyCollection<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.collection_mint.to_account_metas(is_signer)); - account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct VerifySizedCollectionItem<'info> { pub payer: AccountInfo<'info>, pub metadata: AccountInfo<'info>, @@ -997,32 +688,7 @@ pub struct VerifySizedCollectionItem<'info> { pub collection_master_edition: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for VerifySizedCollectionItem<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.payer.to_owned(), - self.metadata.to_owned(), - self.collection_authority.to_owned(), - self.collection_mint.to_owned(), - self.collection_metadata.to_owned(), - self.collection_master_edition.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for VerifySizedCollectionItem<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.collection_mint.to_account_metas(is_signer)); - account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SetAndVerifyCollection<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -1033,34 +699,7 @@ pub struct SetAndVerifyCollection<'info> { pub collection_master_edition: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SetAndVerifyCollection<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.collection_authority.to_owned(), - self.payer.to_owned(), - self.update_authority.to_owned(), - self.collection_mint.to_owned(), - self.collection_metadata.to_owned(), - self.collection_master_edition.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for SetAndVerifyCollection<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.collection_mint.to_account_metas(is_signer)); - account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SetAndVerifySizedCollectionItem<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -1071,34 +710,7 @@ pub struct SetAndVerifySizedCollectionItem<'info> { pub collection_master_edition: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SetAndVerifySizedCollectionItem<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.collection_authority.to_owned(), - self.payer.to_owned(), - self.update_authority.to_owned(), - self.collection_mint.to_owned(), - self.collection_metadata.to_owned(), - self.collection_master_edition.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for SetAndVerifySizedCollectionItem<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.collection_mint.to_account_metas(is_signer)); - account_metas.extend(self.collection_metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_master_edition.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct FreezeDelegatedAccount<'info> { pub metadata: AccountInfo<'info>, pub delegate: AccountInfo<'info>, @@ -1108,32 +720,7 @@ pub struct FreezeDelegatedAccount<'info> { pub token_program: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for FreezeDelegatedAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.delegate.to_owned(), - self.token_account.to_owned(), - self.edition.to_owned(), - self.mint.to_owned(), - self.token_program.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for FreezeDelegatedAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.delegate.to_account_metas(is_signer)); - account_metas.extend(self.token_account.to_account_metas(is_signer)); - account_metas.extend(self.edition.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.token_program.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct ThawDelegatedAccount<'info> { pub metadata: AccountInfo<'info>, pub delegate: AccountInfo<'info>, @@ -1143,98 +730,26 @@ pub struct ThawDelegatedAccount<'info> { pub token_program: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for ThawDelegatedAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.delegate.to_owned(), - self.token_account.to_owned(), - self.edition.to_owned(), - self.mint.to_owned(), - self.token_program.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ThawDelegatedAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.delegate.to_account_metas(is_signer)); - account_metas.extend(self.token_account.to_account_metas(is_signer)); - account_metas.extend(self.edition.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.token_program.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct UpdatePrimarySaleHappenedViaToken<'info> { pub metadata: AccountInfo<'info>, pub owner: AccountInfo<'info>, pub token: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for UpdatePrimarySaleHappenedViaToken<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.owner.to_owned(), - self.token.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for UpdatePrimarySaleHappenedViaToken<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.owner.to_account_metas(is_signer)); - account_metas.extend(self.token.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SignMetadata<'info> { pub creator: AccountInfo<'info>, pub metadata: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SignMetadata<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.creator.to_owned(), self.metadata.to_owned()] - } -} - -impl<'info> ToAccountMetas for SignMetadata<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.creator.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct RemoveCreatorVerification<'info> { pub creator: AccountInfo<'info>, pub metadata: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for RemoveCreatorVerification<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.creator.to_owned(), self.metadata.to_owned()] - } -} - -impl<'info> ToAccountMetas for RemoveCreatorVerification<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.creator.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Utilize<'info> { pub metadata: AccountInfo<'info>, pub token_account: AccountInfo<'info>, @@ -1243,30 +758,7 @@ pub struct Utilize<'info> { pub owner: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Utilize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.token_account.to_owned(), - self.mint.to_owned(), - self.use_authority.to_owned(), - self.owner.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Utilize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.token_account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.use_authority.to_account_metas(is_signer)); - account_metas.extend(self.owner.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct UnverifyCollection<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -1275,33 +767,7 @@ pub struct UnverifyCollection<'info> { pub collection_master_edition_account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for UnverifyCollection<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.collection_authority.to_owned(), - self.collection_mint.to_owned(), - self.collection.to_owned(), - self.collection_master_edition_account.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for UnverifyCollection<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.collection_mint.to_account_metas(is_signer)); - account_metas.extend(self.collection.to_account_metas(is_signer)); - account_metas.extend( - self.collection_master_edition_account - .to_account_metas(is_signer), - ); - account_metas - } -} - +#[derive(Accounts)] pub struct UnverifySizedCollectionItem<'info> { pub metadata: AccountInfo<'info>, pub collection_authority: AccountInfo<'info>, @@ -1311,35 +777,6 @@ pub struct UnverifySizedCollectionItem<'info> { pub collection_master_edition_account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for UnverifySizedCollectionItem<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.metadata.to_owned(), - self.collection_authority.to_owned(), - self.payer.to_owned(), - self.collection_mint.to_owned(), - self.collection.to_owned(), - self.collection_master_edition_account.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for UnverifySizedCollectionItem<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.collection_authority.to_account_metas(is_signer)); - account_metas.extend(self.payer.to_account_metas(is_signer)); - account_metas.extend(self.collection_mint.to_account_metas(is_signer)); - account_metas.extend(self.collection.to_account_metas(is_signer)); - account_metas.extend( - self.collection_master_edition_account - .to_account_metas(is_signer), - ); - account_metas - } -} - #[derive(Clone, Debug, PartialEq)] pub struct MetadataAccount(mpl_token_metadata::accounts::Metadata); diff --git a/spl/src/stake.rs b/spl/src/stake.rs index fb1ab0403d..fb4bebf45e 100644 --- a/spl/src/stake.rs +++ b/spl/src/stake.rs @@ -95,6 +95,7 @@ pub fn deactivate_stake<'info>( // CPI accounts +#[derive(Accounts)] pub struct Authorize<'info> { /// The stake account to be updated pub stake: AccountInfo<'info>, @@ -109,28 +110,7 @@ pub struct Authorize<'info> { pub clock: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Authorize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.stake.to_owned(), - self.authorized.to_owned(), - self.new_authorized.to_owned(), - self.clock.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Authorize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.stake.to_account_metas(is_signer)); - account_metas.extend(self.authorized.to_account_metas(is_signer)); - account_metas.extend(self.new_authorized.to_account_metas(is_signer)); - account_metas.extend(self.clock.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Withdraw<'info> { /// The stake account to be updated pub stake: AccountInfo<'info>, @@ -148,30 +128,7 @@ pub struct Withdraw<'info> { pub stake_history: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Withdraw<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.stake.to_owned(), - self.withdrawer.to_owned(), - self.to.to_owned(), - self.clock.to_owned(), - self.stake_history.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Withdraw<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.stake.to_account_metas(is_signer)); - account_metas.extend(self.withdrawer.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.clock.to_account_metas(is_signer)); - account_metas.extend(self.stake_history.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct DeactivateStake<'info> { /// The stake account to be deactivated pub stake: AccountInfo<'info>, @@ -183,26 +140,6 @@ pub struct DeactivateStake<'info> { pub clock: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for DeactivateStake<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.stake.to_owned(), - self.staker.to_owned(), - self.clock.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for DeactivateStake<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.stake.to_account_metas(is_signer)); - account_metas.extend(self.staker.to_account_metas(is_signer)); - account_metas.extend(self.clock.to_account_metas(is_signer)); - account_metas - } -} - // State /// A wrapper around the Solana StakeState to enable Anchor deserialization. diff --git a/spl/src/token.rs b/spl/src/token.rs index 7b1151968d..320589dfde 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, program_pack::Pack, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, std::ops::Deref, }; @@ -332,32 +332,14 @@ pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) .map_err(Into::into) } +#[derive(Accounts)] pub struct Transfer<'info> { pub from: AccountInfo<'info>, pub to: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Transfer<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Transfer<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct TransferChecked<'info> { pub from: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -365,106 +347,28 @@ pub struct TransferChecked<'info> { pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferChecked<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.mint.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TransferChecked<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct MintTo<'info> { pub mint: AccountInfo<'info>, pub to: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for MintTo<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.mint.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for MintTo<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Burn<'info> { pub mint: AccountInfo<'info>, pub from: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Burn<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.mint.to_owned(), - self.from.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Burn<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Approve<'info> { pub to: AccountInfo<'info>, pub delegate: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Approve<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.to.to_owned(), - self.delegate.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Approve<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.delegate.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct ApproveChecked<'info> { pub to: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -472,48 +376,13 @@ pub struct ApproveChecked<'info> { pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for ApproveChecked<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.to.to_owned(), - self.mint.to_owned(), - self.delegate.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ApproveChecked<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.delegate.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Revoke<'info> { pub source: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Revoke<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.source.to_owned(), self.authority.to_owned()] - } -} - -impl<'info> ToAccountMetas for Revoke<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.source.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -521,211 +390,56 @@ pub struct InitializeAccount<'info> { pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - self.rent.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for InitializeAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeAccount3<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeAccount3<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for InitializeAccount3<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct CloseAccount<'info> { pub account: AccountInfo<'info>, pub destination: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CloseAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.destination.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CloseAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.destination.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct FreezeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for FreezeAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for FreezeAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct ThawAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for ThawAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ThawAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeMint<'info> { pub mint: AccountInfo<'info>, pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeMint<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.mint.to_owned(), self.rent.to_owned()] - } -} - -impl<'info> ToAccountMetas for InitializeMint<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeMint2<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeMint2<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for InitializeMint2<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SetAuthority<'info> { pub current_authority: AccountInfo<'info>, pub account_or_mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SetAuthority<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.current_authority.to_owned(), - self.account_or_mint.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for SetAuthority<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.current_authority.to_account_metas(is_signer)); - account_metas.extend(self.account_or_mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SyncNative<'info> { pub account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SyncNative<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account.to_owned()] - } -} - -impl<'info> ToAccountMetas for SyncNative<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas - } -} - #[derive(Clone, Debug, Default, PartialEq, Copy)] pub struct TokenAccount(spl_token::state::Account); @@ -800,23 +514,23 @@ impl anchor_lang::Id for Token { // Field parsers to save compute. All account validation is assumed to be done // outside of these methods. pub mod accessor { - use {super::*, anchor_lang::prelude::UncheckedAccount}; + use super::*; - pub fn amount(account: &UncheckedAccount) -> Result { + pub fn amount(account: &AccountInfo) -> Result { let bytes = account.try_borrow_data()?; let mut amount_bytes = [0u8; 8]; amount_bytes.copy_from_slice(&bytes[64..72]); Ok(u64::from_le_bytes(amount_bytes)) } - pub fn mint(account: &UncheckedAccount) -> Result { + pub fn mint(account: &AccountInfo) -> Result { let bytes = account.try_borrow_data()?; let mut mint_bytes = [0u8; 32]; mint_bytes.copy_from_slice(&bytes[..32]); Ok(Pubkey::new_from_array(mint_bytes)) } - pub fn authority(account: &UncheckedAccount) -> Result { + pub fn authority(account: &AccountInfo) -> Result { let bytes = account.try_borrow_data()?; let mut owner_bytes = [0u8; 32]; owner_bytes.copy_from_slice(&bytes[32..64]); diff --git a/spl/src/token_2022.rs b/spl/src/token_2022.rs index 991ebece87..918d775da6 100644 --- a/spl/src/token_2022.rs +++ b/spl/src/token_2022.rs @@ -3,7 +3,7 @@ use anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }; pub use {spl_token_2022::ID, spl_token_2022_interface as spl_token_2022}; @@ -457,32 +457,14 @@ pub fn ui_amount_to_amount<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct Transfer<'info> { pub from: AccountInfo<'info>, pub to: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Transfer<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Transfer<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct TransferChecked<'info> { pub from: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -490,158 +472,42 @@ pub struct TransferChecked<'info> { pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferChecked<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.from.to_owned(), - self.mint.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TransferChecked<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct MintTo<'info> { pub mint: AccountInfo<'info>, pub to: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for MintTo<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.mint.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for MintTo<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct MintToChecked<'info> { pub mint: AccountInfo<'info>, pub to: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for MintToChecked<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.mint.to_owned(), - self.to.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for MintToChecked<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Burn<'info> { pub mint: AccountInfo<'info>, pub from: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Burn<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.mint.to_owned(), - self.from.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Burn<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct BurnChecked<'info> { pub mint: AccountInfo<'info>, pub from: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for BurnChecked<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.mint.to_owned(), - self.from.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for BurnChecked<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.from.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Approve<'info> { pub to: AccountInfo<'info>, pub delegate: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Approve<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.to.to_owned(), - self.delegate.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for Approve<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.delegate.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct ApproveChecked<'info> { pub to: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -649,48 +515,13 @@ pub struct ApproveChecked<'info> { pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for ApproveChecked<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.to.to_owned(), - self.mint.to_owned(), - self.delegate.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ApproveChecked<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.to.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.delegate.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct Revoke<'info> { pub source: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for Revoke<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.source.to_owned(), self.authority.to_owned()] - } -} - -impl<'info> ToAccountMetas for Revoke<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.source.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -698,301 +529,81 @@ pub struct InitializeAccount<'info> { pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - self.rent.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for InitializeAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeAccount3<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeAccount3<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for InitializeAccount3<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct CloseAccount<'info> { pub account: AccountInfo<'info>, pub destination: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for CloseAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.destination.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CloseAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.destination.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct FreezeAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for FreezeAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for FreezeAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct ThawAccount<'info> { pub account: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for ThawAccount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.account.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ThawAccount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeMint<'info> { pub mint: AccountInfo<'info>, pub rent: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeMint<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.mint.to_owned(), self.rent.to_owned()] - } -} - -impl<'info> ToAccountMetas for InitializeMint<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.rent.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeMint2<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeMint2<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for InitializeMint2<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SetAuthority<'info> { pub current_authority: AccountInfo<'info>, pub account_or_mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SetAuthority<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.current_authority.to_owned(), - self.account_or_mint.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for SetAuthority<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.current_authority.to_account_metas(is_signer)); - account_metas.extend(self.account_or_mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct SyncNative<'info> { pub account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for SyncNative<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account.to_owned()] - } -} - -impl<'info> ToAccountMetas for SyncNative<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct GetAccountDataSize<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for GetAccountDataSize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for GetAccountDataSize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeMintCloseAuthority<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeMintCloseAuthority<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for InitializeMintCloseAuthority<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct InitializeImmutableOwner<'info> { pub account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InitializeImmutableOwner<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account.to_owned()] - } -} - -impl<'info> ToAccountMetas for InitializeImmutableOwner<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct AmountToUiAmount<'info> { pub account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for AmountToUiAmount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account.to_owned()] - } -} - -impl<'info> ToAccountMetas for AmountToUiAmount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas - } -} - +#[derive(Accounts)] pub struct UiAmountToAmount<'info> { pub account: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for UiAmountToAmount<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.account.to_owned()] - } -} - -impl<'info> ToAccountMetas for UiAmountToAmount<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas - } -} - #[derive(Clone)] pub struct Token2022; diff --git a/spl/src/token_2022_extensions/cpi_guard.rs b/spl/src/token_2022_extensions/cpi_guard.rs index 375a5e6133..cce5c37f5b 100644 --- a/spl/src/token_2022_extensions/cpi_guard.rs +++ b/spl/src/token_2022_extensions/cpi_guard.rs @@ -2,8 +2,9 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, - ToAccountMetas, + context::CpiContext, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -64,28 +65,9 @@ pub fn cpi_guard_disable<'info>(ctx: CpiContext<'_, '_, '_, 'info, CpiGuard<'inf CpiGuardSettingsLocked). Kept only for the deprecated `cpi_guard_enable` / \ `cpi_guard_disable` wrappers; do not use in new code." )] +#[derive(Accounts)] pub struct CpiGuard<'info> { pub token_program_id: AccountInfo<'info>, pub account: AccountInfo<'info>, pub owner: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for CpiGuard<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.account.to_owned(), - self.owner.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for CpiGuard<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.owner.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/default_account_state.rs b/spl/src/token_2022_extensions/default_account_state.rs index 6fec3f6980..f1d030aee3 100644 --- a/spl/src/token_2022_extensions/default_account_state.rs +++ b/spl/src/token_2022_extensions/default_account_state.rs @@ -2,8 +2,9 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, - ToAccountMetas, + context::CpiContext, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, + Accounts, Result, }, spl_token_2022::state::AccountState, spl_token_2022_interface as spl_token_2022, @@ -26,26 +27,12 @@ pub fn default_account_state_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct DefaultAccountStateInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for DefaultAccountStateInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for DefaultAccountStateInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn default_account_state_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, DefaultAccountStateUpdate<'info>>, state: &AccountState, @@ -70,28 +57,9 @@ pub fn default_account_state_update<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct DefaultAccountStateUpdate<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub freeze_authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for DefaultAccountStateUpdate<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.freeze_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for DefaultAccountStateUpdate<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.freeze_authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/group_member_pointer.rs b/spl/src/token_2022_extensions/group_member_pointer.rs index 269e669382..24558307e4 100644 --- a/spl/src/token_2022_extensions/group_member_pointer.rs +++ b/spl/src/token_2022_extensions/group_member_pointer.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -28,26 +28,12 @@ pub fn group_member_pointer_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct GroupMemberPointerInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for GroupMemberPointerInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for GroupMemberPointerInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn group_member_pointer_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, GroupMemberPointerUpdate<'info>>, member_address: Option, @@ -71,28 +57,9 @@ pub fn group_member_pointer_update<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct GroupMemberPointerUpdate<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for GroupMemberPointerUpdate<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for GroupMemberPointerUpdate<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/group_pointer.rs b/spl/src/token_2022_extensions/group_pointer.rs index 5f1f4f45bb..d9e9ec2e3b 100644 --- a/spl/src/token_2022_extensions/group_pointer.rs +++ b/spl/src/token_2022_extensions/group_pointer.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -28,26 +28,12 @@ pub fn group_pointer_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct GroupPointerInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for GroupPointerInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for GroupPointerInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn group_pointer_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, GroupPointerUpdate<'info>>, group_address: Option, @@ -71,28 +57,9 @@ pub fn group_pointer_update<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct GroupPointerUpdate<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for GroupPointerUpdate<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for GroupPointerUpdate<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/immutable_owner.rs b/spl/src/token_2022_extensions/immutable_owner.rs index e6a9e0d667..49cd47cdee 100644 --- a/spl/src/token_2022_extensions/immutable_owner.rs +++ b/spl/src/token_2022_extensions/immutable_owner.rs @@ -2,8 +2,9 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, - ToAccountMetas, + context::CpiContext, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -23,25 +24,8 @@ pub fn immutable_owner_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct ImmutableOwnerInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub token_account: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for ImmutableOwnerInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.token_account.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for ImmutableOwnerInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.token_account.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/interest_bearing_mint.rs b/spl/src/token_2022_extensions/interest_bearing_mint.rs index 670ceab9d7..9709db1024 100644 --- a/spl/src/token_2022_extensions/interest_bearing_mint.rs +++ b/spl/src/token_2022_extensions/interest_bearing_mint.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -28,26 +28,12 @@ pub fn interest_bearing_mint_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct InterestBearingMintInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for InterestBearingMintInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for InterestBearingMintInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn interest_bearing_mint_update_rate<'info>( ctx: CpiContext<'_, '_, '_, 'info, InterestBearingMintUpdateRate<'info>>, rate: i16, @@ -71,28 +57,9 @@ pub fn interest_bearing_mint_update_rate<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct InterestBearingMintUpdateRate<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub rate_authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for InterestBearingMintUpdateRate<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.rate_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for InterestBearingMintUpdateRate<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.rate_authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/memo_transfer.rs b/spl/src/token_2022_extensions/memo_transfer.rs index dd11f35191..6dd817546e 100644 --- a/spl/src/token_2022_extensions/memo_transfer.rs +++ b/spl/src/token_2022_extensions/memo_transfer.rs @@ -2,8 +2,9 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, - ToAccountMetas, + context::CpiContext, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -51,28 +52,9 @@ pub fn memo_transfer_disable<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct MemoTransfer<'info> { pub token_program_id: AccountInfo<'info>, pub account: AccountInfo<'info>, pub owner: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for MemoTransfer<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.account.to_owned(), - self.owner.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for MemoTransfer<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.account.to_account_metas(is_signer)); - account_metas.extend(self.owner.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/metadata_pointer.rs b/spl/src/token_2022_extensions/metadata_pointer.rs index a7fbb305a4..8d15f37f3b 100644 --- a/spl/src/token_2022_extensions/metadata_pointer.rs +++ b/spl/src/token_2022_extensions/metadata_pointer.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -28,22 +28,8 @@ pub fn metadata_pointer_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct MetadataPointerInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for MetadataPointerInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for MetadataPointerInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/mint_close_authority.rs b/spl/src/token_2022_extensions/mint_close_authority.rs index f610cc3836..96a8e25dac 100644 --- a/spl/src/token_2022_extensions/mint_close_authority.rs +++ b/spl/src/token_2022_extensions/mint_close_authority.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -26,22 +26,8 @@ pub fn mint_close_authority_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct MintCloseAuthorityInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for MintCloseAuthorityInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for MintCloseAuthorityInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/non_transferable.rs b/spl/src/token_2022_extensions/non_transferable.rs index 063f4a9505..c29bbd6d96 100644 --- a/spl/src/token_2022_extensions/non_transferable.rs +++ b/spl/src/token_2022_extensions/non_transferable.rs @@ -2,8 +2,9 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, - ToAccountMetas, + context::CpiContext, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -23,22 +24,8 @@ pub fn non_transferable_mint_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct NonTransferableMintInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for NonTransferableMintInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for NonTransferableMintInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/pausable.rs b/spl/src/token_2022_extensions/pausable.rs index 88360d598b..f3dc817582 100644 --- a/spl/src/token_2022_extensions/pausable.rs +++ b/spl/src/token_2022_extensions/pausable.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -25,6 +25,7 @@ pub fn pausable_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct PausableInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -72,43 +73,9 @@ pub fn pausable_pause<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct PausableToggle<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for PausableInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for PausableInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - -impl<'info> ToAccountInfos<'info> for PausableToggle<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for PausableToggle<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/permanent_delegate.rs b/spl/src/token_2022_extensions/permanent_delegate.rs index 1eaeff2dd2..ea1ceaaecc 100644 --- a/spl/src/token_2022_extensions/permanent_delegate.rs +++ b/spl/src/token_2022_extensions/permanent_delegate.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -26,22 +26,8 @@ pub fn permanent_delegate_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct PermanentDelegateInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for PermanentDelegateInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for PermanentDelegateInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/token_group.rs b/spl/src/token_2022_extensions/token_group.rs index 5f81b8bbbf..520fa9bbe5 100644 --- a/spl/src/token_2022_extensions/token_group.rs +++ b/spl/src/token_2022_extensions/token_group.rs @@ -3,7 +3,7 @@ use anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }; pub fn token_group_initialize<'info>( @@ -32,6 +32,7 @@ pub fn token_group_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TokenGroupInitialize<'info> { pub program_id: AccountInfo<'info>, pub group: AccountInfo<'info>, @@ -39,28 +40,6 @@ pub struct TokenGroupInitialize<'info> { pub mint_authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TokenGroupInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.program_id.to_owned(), - self.group.to_owned(), - self.mint.to_owned(), - self.mint_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TokenGroupInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.program_id.to_account_metas(is_signer)); - account_metas.extend(self.group.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.mint_authority.to_account_metas(is_signer)); - account_metas - } -} - pub fn token_member_initialize<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMemberInitialize<'info>>, ) -> Result<()> { @@ -87,6 +66,7 @@ pub fn token_member_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TokenMemberInitialize<'info> { pub program_id: AccountInfo<'info>, pub member: AccountInfo<'info>, @@ -95,29 +75,3 @@ pub struct TokenMemberInitialize<'info> { pub group: AccountInfo<'info>, pub group_update_authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for TokenMemberInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.program_id.to_owned(), - self.member.to_owned(), - self.member_mint.to_owned(), - self.member_mint_authority.to_owned(), - self.group.to_owned(), - self.group_update_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TokenMemberInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.program_id.to_account_metas(is_signer)); - account_metas.extend(self.member.to_account_metas(is_signer)); - account_metas.extend(self.member_mint.to_account_metas(is_signer)); - account_metas.extend(self.member_mint_authority.to_account_metas(is_signer)); - account_metas.extend(self.group.to_account_metas(is_signer)); - account_metas.extend(self.group_update_authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/token_metadata.rs b/spl/src/token_2022_extensions/token_metadata.rs index f27fb03ebd..c632ec757a 100644 --- a/spl/src/token_2022_extensions/token_metadata.rs +++ b/spl/src/token_2022_extensions/token_metadata.rs @@ -2,8 +2,9 @@ #![allow(deprecated)] use { anchor_lang::{ - context::CpiContext, solana_program::account_info::AccountInfo, Result, ToAccountInfos, - ToAccountMetas, + context::CpiContext, + solana_program::{account_info::AccountInfo, pubkey::Pubkey}, + Accounts, Result, }, spl_pod::optional_keys::OptionalNonZeroPubkey, spl_token_metadata_interface::state::Field, @@ -39,6 +40,7 @@ pub fn token_metadata_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TokenMetadataInitialize<'info> { pub program_id: AccountInfo<'info>, pub metadata: AccountInfo<'info>, @@ -47,30 +49,6 @@ pub struct TokenMetadataInitialize<'info> { pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TokenMetadataInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.program_id.to_owned(), - self.metadata.to_owned(), - self.update_authority.to_owned(), - self.mint_authority.to_owned(), - self.mint.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TokenMetadataInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.program_id.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas.extend(self.mint_authority.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn token_metadata_update_authority<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMetadataUpdateAuthority<'info>>, new_authority: OptionalNonZeroPubkey, @@ -93,6 +71,7 @@ pub fn token_metadata_update_authority<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TokenMetadataUpdateAuthority<'info> { pub program_id: AccountInfo<'info>, pub metadata: AccountInfo<'info>, @@ -100,28 +79,6 @@ pub struct TokenMetadataUpdateAuthority<'info> { pub new_authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TokenMetadataUpdateAuthority<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.program_id.to_owned(), - self.metadata.to_owned(), - self.current_authority.to_owned(), - self.new_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TokenMetadataUpdateAuthority<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.program_id.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.current_authority.to_account_metas(is_signer)); - account_metas.extend(self.new_authority.to_account_metas(is_signer)); - account_metas - } -} - pub fn token_metadata_update_field<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMetadataUpdateField<'info>>, field: Field, @@ -146,32 +103,13 @@ pub fn token_metadata_update_field<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TokenMetadataUpdateField<'info> { pub program_id: AccountInfo<'info>, pub metadata: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TokenMetadataUpdateField<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.program_id.to_owned(), - self.metadata.to_owned(), - self.update_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TokenMetadataUpdateField<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.program_id.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas - } -} - pub fn token_metadata_remove_key<'info>( ctx: CpiContext<'_, '_, '_, 'info, TokenMetadataRemoveKey<'info>>, key: String, @@ -196,28 +134,9 @@ pub fn token_metadata_remove_key<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TokenMetadataRemoveKey<'info> { pub program_id: AccountInfo<'info>, pub metadata: AccountInfo<'info>, pub update_authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for TokenMetadataRemoveKey<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.program_id.to_owned(), - self.metadata.to_owned(), - self.update_authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TokenMetadataRemoveKey<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.program_id.to_account_metas(is_signer)); - account_metas.extend(self.metadata.to_account_metas(is_signer)); - account_metas.extend(self.update_authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/transfer_fee.rs b/spl/src/token_2022_extensions/transfer_fee.rs index fc68def98a..64eee6eba9 100644 --- a/spl/src/token_2022_extensions/transfer_fee.rs +++ b/spl/src/token_2022_extensions/transfer_fee.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -32,26 +32,12 @@ pub fn transfer_fee_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TransferFeeInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferFeeInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for TransferFeeInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn transfer_fee_set<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferFeeSetTransferFee<'info>>, transfer_fee_basis_points: u16, @@ -77,32 +63,13 @@ pub fn transfer_fee_set<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TransferFeeSetTransferFee<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferFeeSetTransferFee<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TransferFeeSetTransferFee<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - pub fn transfer_checked_with_fee<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferCheckedWithFee<'info>>, amount: u64, @@ -134,6 +101,7 @@ pub fn transfer_checked_with_fee<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TransferCheckedWithFee<'info> { pub token_program_id: AccountInfo<'info>, pub source: AccountInfo<'info>, @@ -142,30 +110,6 @@ pub struct TransferCheckedWithFee<'info> { pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferCheckedWithFee<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.source.to_owned(), - self.mint.to_owned(), - self.destination.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TransferCheckedWithFee<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.source.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.destination.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - pub fn harvest_withheld_tokens_to_mint<'info>( ctx: CpiContext<'_, '_, '_, 'info, HarvestWithheldTokensToMint<'info>>, sources: Vec>, @@ -183,26 +127,12 @@ pub fn harvest_withheld_tokens_to_mint<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct HarvestWithheldTokensToMint<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for HarvestWithheldTokensToMint<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for HarvestWithheldTokensToMint<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn withdraw_withheld_tokens_from_mint<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawWithheldTokensFromMint<'info>>, ) -> Result<()> { @@ -227,6 +157,7 @@ pub fn withdraw_withheld_tokens_from_mint<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct WithdrawWithheldTokensFromMint<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, @@ -234,28 +165,6 @@ pub struct WithdrawWithheldTokensFromMint<'info> { pub authority: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for WithdrawWithheldTokensFromMint<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.destination.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for WithdrawWithheldTokensFromMint<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.destination.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} - pub fn withdraw_withheld_tokens_from_accounts<'info>( ctx: CpiContext<'_, '_, '_, 'info, WithdrawWithheldTokensFromAccounts<'info>>, sources: Vec>, @@ -281,31 +190,10 @@ pub fn withdraw_withheld_tokens_from_accounts<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct WithdrawWithheldTokensFromAccounts<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub destination: AccountInfo<'info>, pub authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for WithdrawWithheldTokensFromAccounts<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.destination.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for WithdrawWithheldTokensFromAccounts<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.destination.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} diff --git a/spl/src/token_2022_extensions/transfer_hook.rs b/spl/src/token_2022_extensions/transfer_hook.rs index bf4cbcb963..45a5402a2c 100644 --- a/spl/src/token_2022_extensions/transfer_hook.rs +++ b/spl/src/token_2022_extensions/transfer_hook.rs @@ -4,7 +4,7 @@ use { anchor_lang::{ context::CpiContext, solana_program::{account_info::AccountInfo, pubkey::Pubkey}, - Result, ToAccountInfos, ToAccountMetas, + Accounts, Result, }, spl_token_2022_interface as spl_token_2022, }; @@ -28,26 +28,12 @@ pub fn transfer_hook_initialize<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TransferHookInitialize<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, } -impl<'info> ToAccountInfos<'info> for TransferHookInitialize<'info> { - fn to_account_infos(&self) -> Vec> { - vec![self.token_program_id.to_owned(), self.mint.to_owned()] - } -} - -impl<'info> ToAccountMetas for TransferHookInitialize<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas - } -} - pub fn transfer_hook_update<'info>( ctx: CpiContext<'_, '_, '_, 'info, TransferHookUpdate<'info>>, transfer_hook_program_id: Option, @@ -71,28 +57,9 @@ pub fn transfer_hook_update<'info>( .map_err(Into::into) } +#[derive(Accounts)] pub struct TransferHookUpdate<'info> { pub token_program_id: AccountInfo<'info>, pub mint: AccountInfo<'info>, pub authority: AccountInfo<'info>, } - -impl<'info> ToAccountInfos<'info> for TransferHookUpdate<'info> { - fn to_account_infos(&self) -> Vec> { - vec![ - self.token_program_id.to_owned(), - self.mint.to_owned(), - self.authority.to_owned(), - ] - } -} - -impl<'info> ToAccountMetas for TransferHookUpdate<'info> { - fn to_account_metas(&self, is_signer: Option) -> Vec { - let mut account_metas = vec![]; - account_metas.extend(self.token_program_id.to_account_metas(is_signer)); - account_metas.extend(self.mint.to_account_metas(is_signer)); - account_metas.extend(self.authority.to_account_metas(is_signer)); - account_metas - } -} From 3406570737be301de5950bea83ace59dadc40ebc Mon Sep 17 00:00:00 2001 From: Aursen <6496148+Aursen@users.noreply.github.com> Date: Fri, 5 Jun 2026 10:19:59 +0200 Subject: [PATCH 15/15] fix token2022 --- bench/BINARY_SIZE.md | 6 +- bench/COMPUTE_UNITS.md | 178 ++++++++++++++++++++--------------------- bench/STACK_MEMORY.md | 178 ++++++++++++++++++++--------------------- spl/src/token_2022.rs | 101 +++++++++++++++++++++++ tests/bench/bench.json | 100 +++++++++++++++++++++-- 5 files changed, 376 insertions(+), 187 deletions(-) diff --git a/bench/BINARY_SIZE.md b/bench/BINARY_SIZE.md index 56c4a70907..8e95217171 100644 --- a/bench/BINARY_SIZE.md +++ b/bench/BINARY_SIZE.md @@ -16,9 +16,9 @@ The programs and their tests are located in [/tests/bench](https://github.com/ot Solana version: 2.3.0 -| Program | Binary Size | - | -| ------- | ----------- | --- | -| bench | 932,992 | - | +| Program | Binary Size | - | +| ------- | ----------- | ---------------------- | +| bench | 917,416 | 🟢 **-15,576 (1.67%)** | ### Notable changes diff --git a/bench/COMPUTE_UNITS.md b/bench/COMPUTE_UNITS.md index 28a22ee360..6be90fe13f 100644 --- a/bench/COMPUTE_UNITS.md +++ b/bench/COMPUTE_UNITS.md @@ -16,95 +16,95 @@ The programs and their tests are located in [/tests/bench](https://github.com/ot Solana version: 2.3.0 -| Instruction | Compute Units | - | -| --------------------------- | ------------- | ------------------ | -| accountInfo1 | 702 | - | -| accountInfo2 | 1,115 | - | -| accountInfo4 | 1,921 | - | -| accountInfo8 | 3,480 | - | -| accountEmptyInit1 | 4,716 | - | -| accountEmpty1 | 738 | - | -| accountEmptyInit2 | 8,379 | - | -| accountEmpty2 | 1,138 | - | -| accountEmptyInit4 | 15,699 | - | -| accountEmpty4 | 1,923 | - | -| accountEmptyInit8 | 30,347 | - | -| accountEmpty8 | 3,500 | - | -| accountSizedInit1 | 4,810 | - | -| accountSized1 | 786 | - | -| accountSizedInit2 | 8,546 | - | -| accountSized2 | 1,198 | - | -| accountSizedInit4 | 16,020 | - | -| accountSized4 | 2,031 | - | -| accountSizedInit8 | 30,931 | - | -| accountSized8 | 3,694 | - | -| accountUnsizedInit1 | 4,913 | - | -| accountUnsized1 | 814 | - | -| accountUnsizedInit2 | 8,733 | - | -| accountUnsized2 | 1,240 | - | -| accountUnsizedInit4 | 16,343 | - | -| accountUnsized4 | 2,093 | - | -| accountUnsizedInit8 | 31,553 | - | -| accountUnsized8 | 3,797 | - | -| boxedAccountEmptyInit1 | 4,810 | - | -| boxedAccountEmpty1 | 831 | - | -| boxedAccountEmptyInit2 | 8,496 | - | -| boxedAccountEmpty2 | 1,253 | - | -| boxedAccountEmptyInit4 | 15,859 | - | -| boxedAccountEmpty4 | 2,077 | - | -| boxedAccountEmptyInit8 | 30,594 | - | -| boxedAccountEmpty8 | 3,797 | - | -| boxedAccountSizedInit1 | 4,898 | - | -| boxedAccountSized1 | 877 | - | -| boxedAccountSizedInit2 | 8,648 | - | -| boxedAccountSized2 | 1,318 | - | -| boxedAccountSizedInit4 | 16,139 | - | -| boxedAccountSized4 | 2,185 | - | -| boxedAccountSizedInit8 | 31,130 | - | -| boxedAccountSized8 | 3,984 | - | -| boxedAccountUnsizedInit1 | 4,990 | - | -| boxedAccountUnsized1 | 907 | - | -| boxedAccountUnsizedInit2 | 8,808 | - | -| boxedAccountUnsized2 | 1,352 | - | -| boxedAccountUnsizedInit4 | 16,435 | - | -| boxedAccountUnsized4 | 2,234 | - | -| boxedAccountUnsizedInit8 | 31,698 | - | -| boxedAccountUnsized8 | 4,063 | - | -| boxedInterfaceAccountMint1 | 1,090 | - | -| boxedInterfaceAccountMint2 | 1,486 | - | -| boxedInterfaceAccountMint4 | 2,268 | - | -| boxedInterfaceAccountMint8 | 3,907 | - | -| boxedInterfaceAccountToken1 | 1,217 | - | -| boxedInterfaceAccountToken2 | 1,728 | - | -| boxedInterfaceAccountToken4 | 2,740 | - | -| boxedInterfaceAccountToken8 | 4,839 | - | -| interfaceAccountMint1 | 1,105 | - | -| interfaceAccountMint2 | 1,490 | - | -| interfaceAccountMint4 | 2,268 | - | -| interfaceAccountMint8 | 3,835 | - | -| interfaceAccountToken1 | 1,237 | - | -| interfaceAccountToken2 | 1,749 | - | -| interfaceAccountToken4 | 2,775 | - | -| interface1 | 883 | - | -| interface2 | 1,029 | - | -| interface4 | 1,308 | - | -| interface8 | 1,873 | - | -| program1 | 899 | - | -| program2 | 1,035 | 🟢 **-14 (1.33%)** | -| program4 | 1,308 | 🟢 **-28 (2.10%)** | -| program8 | 1,861 | 🟢 **-56 (2.92%)** | -| signer1 | 888 | - | -| signer2 | 1,237 | - | -| signer4 | 1,920 | - | -| signer8 | 3,293 | - | -| systemAccount1 | 910 | - | -| systemAccount2 | 1,269 | - | -| systemAccount4 | 1,972 | - | -| systemAccount8 | 3,385 | - | -| uncheckedAccount1 | 896 | - | -| uncheckedAccount2 | 1,227 | - | -| uncheckedAccount4 | 1,875 | - | -| uncheckedAccount8 | 3,171 | - | +| Instruction | Compute Units | - | +| --------------------------- | ------------- | -------------------- | +| accountInfo1 | 647 | 🟢 **-55 (7.83%)** | +| accountInfo2 | 978 | 🟢 **-137 (12.29%)** | +| accountInfo4 | 1,626 | 🟢 **-295 (15.36%)** | +| accountInfo8 | 2,922 | 🟢 **-558 (16.03%)** | +| accountEmptyInit1 | 4,716 | - | +| accountEmpty1 | 738 | - | +| accountEmptyInit2 | 8,379 | - | +| accountEmpty2 | 1,138 | - | +| accountEmptyInit4 | 15,699 | - | +| accountEmpty4 | 1,923 | - | +| accountEmptyInit8 | 30,347 | - | +| accountEmpty8 | 3,500 | - | +| accountSizedInit1 | 4,810 | - | +| accountSized1 | 786 | - | +| accountSizedInit2 | 8,546 | - | +| accountSized2 | 1,198 | - | +| accountSizedInit4 | 16,020 | - | +| accountSized4 | 2,031 | - | +| accountSizedInit8 | 30,931 | - | +| accountSized8 | 3,694 | - | +| accountUnsizedInit1 | 4,913 | - | +| accountUnsized1 | 814 | - | +| accountUnsizedInit2 | 8,733 | - | +| accountUnsized2 | 1,240 | - | +| accountUnsizedInit4 | 16,343 | - | +| accountUnsized4 | 2,093 | - | +| accountUnsizedInit8 | 31,553 | - | +| accountUnsized8 | 3,797 | - | +| boxedAccountEmptyInit1 | 4,810 | - | +| boxedAccountEmpty1 | 831 | - | +| boxedAccountEmptyInit2 | 8,496 | - | +| boxedAccountEmpty2 | 1,253 | - | +| boxedAccountEmptyInit4 | 15,859 | - | +| boxedAccountEmpty4 | 2,077 | - | +| boxedAccountEmptyInit8 | 30,594 | - | +| boxedAccountEmpty8 | 3,797 | - | +| boxedAccountSizedInit1 | 4,898 | - | +| boxedAccountSized1 | 877 | - | +| boxedAccountSizedInit2 | 8,648 | - | +| boxedAccountSized2 | 1,318 | - | +| boxedAccountSizedInit4 | 16,139 | - | +| boxedAccountSized4 | 2,185 | - | +| boxedAccountSizedInit8 | 31,130 | - | +| boxedAccountSized8 | 3,984 | - | +| boxedAccountUnsizedInit1 | 4,990 | - | +| boxedAccountUnsized1 | 907 | - | +| boxedAccountUnsizedInit2 | 8,808 | - | +| boxedAccountUnsized2 | 1,352 | - | +| boxedAccountUnsizedInit4 | 16,435 | - | +| boxedAccountUnsized4 | 2,234 | - | +| boxedAccountUnsizedInit8 | 31,698 | - | +| boxedAccountUnsized8 | 4,063 | - | +| boxedInterfaceAccountMint1 | 1,090 | - | +| boxedInterfaceAccountMint2 | 1,486 | - | +| boxedInterfaceAccountMint4 | 2,268 | - | +| boxedInterfaceAccountMint8 | 3,907 | - | +| boxedInterfaceAccountToken1 | 1,217 | - | +| boxedInterfaceAccountToken2 | 1,728 | - | +| boxedInterfaceAccountToken4 | 2,740 | - | +| boxedInterfaceAccountToken8 | 4,839 | - | +| interfaceAccountMint1 | 1,105 | - | +| interfaceAccountMint2 | 1,490 | - | +| interfaceAccountMint4 | 2,268 | - | +| interfaceAccountMint8 | 3,835 | - | +| interfaceAccountToken1 | 1,237 | - | +| interfaceAccountToken2 | 1,749 | - | +| interfaceAccountToken4 | 2,775 | - | +| interface1 | 883 | - | +| interface2 | 1,029 | - | +| interface4 | 1,308 | - | +| interface8 | 1,873 | - | +| program1 | 899 | - | +| program2 | 1,035 | 🟢 **-14 (1.33%)** | +| program4 | 1,308 | 🟢 **-28 (2.10%)** | +| program8 | 1,861 | 🟢 **-56 (2.92%)** | +| signer1 | 888 | - | +| signer2 | 1,237 | - | +| signer4 | 1,920 | - | +| signer8 | 3,293 | - | +| systemAccount1 | 910 | - | +| systemAccount2 | 1,269 | - | +| systemAccount4 | 1,972 | - | +| systemAccount8 | 3,385 | - | +| uncheckedAccount1 | 896 | - | +| uncheckedAccount2 | 1,227 | - | +| uncheckedAccount4 | 1,875 | - | +| uncheckedAccount8 | 3,171 | - | ### Notable changes diff --git a/bench/STACK_MEMORY.md b/bench/STACK_MEMORY.md index 05c61c4d20..e033945693 100644 --- a/bench/STACK_MEMORY.md +++ b/bench/STACK_MEMORY.md @@ -16,95 +16,95 @@ The programs and their tests are located in [/tests/bench](https://github.com/ot Solana version: 2.3.0 -| Instruction | Stack Memory | - | -| ------------------------------ | ------------ | --- | -| account_info1 | 46 | - | -| account_info2 | 88 | - | -| account_info4 | 88 | - | -| account_info8 | 88 | - | -| account_empty_init1 | 88 | - | -| account_empty_init2 | 88 | - | -| account_empty_init4 | 88 | - | -| account_empty_init8 | 88 | - | -| account_empty1 | 88 | - | -| account_empty2 | 88 | - | -| account_empty4 | 88 | - | -| account_empty8 | 88 | - | -| account_sized_init1 | 88 | - | -| account_sized_init2 | 88 | - | -| account_sized_init4 | 88 | - | -| account_sized_init8 | 88 | - | -| account_sized1 | 88 | - | -| account_sized2 | 88 | - | -| account_sized4 | 88 | - | -| account_sized8 | 88 | - | -| account_unsized_init1 | 88 | - | -| account_unsized_init2 | 88 | - | -| account_unsized_init4 | 88 | - | -| account_unsized_init8 | 88 | - | -| account_unsized1 | 88 | - | -| account_unsized2 | 88 | - | -| account_unsized4 | 88 | - | -| account_unsized8 | 88 | - | -| boxed_account_empty_init1 | 88 | - | -| boxed_account_empty_init2 | 88 | - | -| boxed_account_empty_init4 | 88 | - | -| boxed_account_empty_init8 | 88 | - | -| boxed_account_empty1 | 88 | - | -| boxed_account_empty2 | 88 | - | -| boxed_account_empty4 | 88 | - | -| boxed_account_empty8 | 96 | - | -| boxed_account_sized_init1 | 88 | - | -| boxed_account_sized_init2 | 88 | - | -| boxed_account_sized_init4 | 88 | - | -| boxed_account_sized_init8 | 88 | - | -| boxed_account_sized1 | 88 | - | -| boxed_account_sized2 | 88 | - | -| boxed_account_sized4 | 88 | - | -| boxed_account_sized8 | 96 | - | -| boxed_account_unsized_init1 | 88 | - | -| boxed_account_unsized_init2 | 88 | - | -| boxed_account_unsized_init4 | 88 | - | -| boxed_account_unsized_init8 | 88 | - | -| boxed_account_unsized1 | 88 | - | -| boxed_account_unsized2 | 88 | - | -| boxed_account_unsized4 | 88 | - | -| boxed_account_unsized8 | 96 | - | -| boxed_interface_account_mint1 | 88 | - | -| boxed_interface_account_mint2 | 88 | - | -| boxed_interface_account_mint4 | 88 | - | -| boxed_interface_account_mint8 | 96 | - | -| boxed_interface_account_token1 | 88 | - | -| boxed_interface_account_token2 | 88 | - | -| boxed_interface_account_token4 | 88 | - | -| boxed_interface_account_token8 | 96 | - | -| interface_account_mint1 | 88 | - | -| interface_account_mint2 | 88 | - | -| interface_account_mint4 | 88 | - | -| interface_account_mint8 | 88 | - | -| interface_account_token1 | 104 | - | -| interface_account_token2 | 104 | - | -| interface_account_token4 | 104 | - | -| interface1 | 88 | - | -| interface2 | 88 | - | -| interface4 | 88 | - | -| interface8 | 88 | - | -| program1 | 88 | - | -| program2 | 88 | - | -| program4 | 88 | - | -| program8 | 88 | - | -| signer1 | 88 | - | -| signer2 | 88 | - | -| signer4 | 88 | - | -| signer8 | 88 | - | -| system_account1 | 88 | - | -| system_account2 | 88 | - | -| system_account4 | 88 | - | -| system_account8 | 88 | - | -| unchecked_account1 | 88 | - | -| unchecked_account2 | 88 | - | -| unchecked_account4 | 88 | - | -| unchecked_account8 | 88 | - | +| Instruction | Stack Memory | - | +| ------------------------------ | ------------ | ------------------- | +| account_info1 | 88 | 🔴 **+42 (91.30%)** | +| account_info2 | 88 | - | +| account_info4 | 88 | - | +| account_info8 | 88 | - | +| account_empty_init1 | 88 | - | +| account_empty_init2 | 88 | - | +| account_empty_init4 | 88 | - | +| account_empty_init8 | 88 | - | +| account_empty1 | 88 | - | +| account_empty2 | 88 | - | +| account_empty4 | 88 | - | +| account_empty8 | 88 | - | +| account_sized_init1 | 88 | - | +| account_sized_init2 | 88 | - | +| account_sized_init4 | 88 | - | +| account_sized_init8 | 88 | - | +| account_sized1 | 88 | - | +| account_sized2 | 88 | - | +| account_sized4 | 88 | - | +| account_sized8 | 88 | - | +| account_unsized_init1 | 88 | - | +| account_unsized_init2 | 88 | - | +| account_unsized_init4 | 88 | - | +| account_unsized_init8 | 88 | - | +| account_unsized1 | 88 | - | +| account_unsized2 | 88 | - | +| account_unsized4 | 88 | - | +| account_unsized8 | 88 | - | +| boxed_account_empty_init1 | 88 | - | +| boxed_account_empty_init2 | 88 | - | +| boxed_account_empty_init4 | 88 | - | +| boxed_account_empty_init8 | 88 | - | +| boxed_account_empty1 | 88 | - | +| boxed_account_empty2 | 88 | - | +| boxed_account_empty4 | 88 | - | +| boxed_account_empty8 | 96 | - | +| boxed_account_sized_init1 | 88 | - | +| boxed_account_sized_init2 | 88 | - | +| boxed_account_sized_init4 | 88 | - | +| boxed_account_sized_init8 | 88 | - | +| boxed_account_sized1 | 88 | - | +| boxed_account_sized2 | 88 | - | +| boxed_account_sized4 | 88 | - | +| boxed_account_sized8 | 96 | - | +| boxed_account_unsized_init1 | 88 | - | +| boxed_account_unsized_init2 | 88 | - | +| boxed_account_unsized_init4 | 88 | - | +| boxed_account_unsized_init8 | 88 | - | +| boxed_account_unsized1 | 88 | - | +| boxed_account_unsized2 | 88 | - | +| boxed_account_unsized4 | 88 | - | +| boxed_account_unsized8 | 96 | - | +| boxed_interface_account_mint1 | 88 | - | +| boxed_interface_account_mint2 | 88 | - | +| boxed_interface_account_mint4 | 88 | - | +| boxed_interface_account_mint8 | 96 | - | +| boxed_interface_account_token1 | 88 | - | +| boxed_interface_account_token2 | 88 | - | +| boxed_interface_account_token4 | 88 | - | +| boxed_interface_account_token8 | 96 | - | +| interface_account_mint1 | 88 | - | +| interface_account_mint2 | 88 | - | +| interface_account_mint4 | 88 | - | +| interface_account_mint8 | 88 | - | +| interface_account_token1 | 104 | - | +| interface_account_token2 | 104 | - | +| interface_account_token4 | 104 | - | +| interface1 | 88 | - | +| interface2 | 88 | - | +| interface4 | 88 | - | +| interface8 | 88 | - | +| program1 | 88 | - | +| program2 | 88 | - | +| program4 | 88 | - | +| program8 | 88 | - | +| signer1 | 88 | - | +| signer2 | 88 | - | +| signer4 | 88 | - | +| signer8 | 88 | - | +| system_account1 | 88 | - | +| system_account2 | 88 | - | +| system_account4 | 88 | - | +| system_account8 | 88 | - | +| unchecked_account1 | 88 | - | +| unchecked_account2 | 88 | - | +| unchecked_account4 | 88 | - | +| unchecked_account8 | 88 | - | ### Notable changes diff --git a/spl/src/token_2022.rs b/spl/src/token_2022.rs index 918d775da6..eb9da1d6ff 100644 --- a/spl/src/token_2022.rs +++ b/spl/src/token_2022.rs @@ -457,6 +457,80 @@ pub fn ui_amount_to_amount<'info>( .map_err(Into::into) } +pub fn reallocate<'info>( + ctx: CpiContext<'_, '_, '_, 'info, Reallocate<'info>>, + extension_types: &[spl_token_2022::extension::ExtensionType], +) -> Result<()> { + let ix = spl_token_2022::instruction::reallocate( + &ctx.program_id, + ctx.accounts.account.key, + ctx.accounts.payer.key, + ctx.accounts.authority.key, + &[], + extension_types, + )?; + anchor_lang::solana_program::program::invoke_signed( + &ix, + &[ + ctx.accounts.account, + ctx.accounts.payer, + ctx.accounts.system_program, + ctx.accounts.authority, + ], + ctx.signer_seeds, + ) + .map_err(Into::into) +} + +pub fn withdraw_excess_lamports<'info>( + ctx: CpiContext<'_, '_, '_, 'info, WithdrawExcessLamports<'info>>, +) -> Result<()> { + let ix = spl_token_2022::instruction::withdraw_excess_lamports( + &ctx.program_id, + ctx.accounts.source.key, + ctx.accounts.destination.key, + ctx.accounts.authority.key, + &[], + )?; + anchor_lang::solana_program::program::invoke_signed( + &ix, + &[ + ctx.accounts.source, + ctx.accounts.destination, + ctx.accounts.authority, + ], + ctx.signer_seeds, + ) + .map_err(Into::into) +} + +pub fn create_native_mint<'info>( + ctx: CpiContext<'_, '_, '_, 'info, CreateNativeMint<'info>>, +) -> Result<()> { + let ix = + spl_token_2022::instruction::create_native_mint(&ctx.program_id, ctx.accounts.payer.key)?; + anchor_lang::solana_program::program::invoke_signed( + &ix, + &[ + ctx.accounts.payer, + ctx.accounts.native_mint, + ctx.accounts.system_program, + ], + ctx.signer_seeds, + ) + .map_err(Into::into) +} + +pub fn initialize_non_transferable_mint<'info>( + ctx: CpiContext<'_, '_, '_, 'info, InitializeNonTransferableMint<'info>>, +) -> Result<()> { + let ix = spl_token_2022::instruction::initialize_non_transferable_mint( + &ctx.program_id, + ctx.accounts.mint.key, + )?; + anchor_lang::solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into) +} + #[derive(Accounts)] pub struct Transfer<'info> { pub from: AccountInfo<'info>, @@ -604,6 +678,33 @@ pub struct UiAmountToAmount<'info> { pub account: AccountInfo<'info>, } +#[derive(Accounts)] +pub struct Reallocate<'info> { + pub account: AccountInfo<'info>, + pub payer: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +#[derive(Accounts)] +pub struct WithdrawExcessLamports<'info> { + pub source: AccountInfo<'info>, + pub destination: AccountInfo<'info>, + pub authority: AccountInfo<'info>, +} + +#[derive(Accounts)] +pub struct CreateNativeMint<'info> { + pub payer: AccountInfo<'info>, + pub native_mint: AccountInfo<'info>, + pub system_program: AccountInfo<'info>, +} + +#[derive(Accounts)] +pub struct InitializeNonTransferableMint<'info> { + pub mint: AccountInfo<'info>, +} + #[derive(Clone)] pub struct Token2022; diff --git a/tests/bench/bench.json b/tests/bench/bench.json index f59fc7bf81..682061d4b2 100644 --- a/tests/bench/bench.json +++ b/tests/bench/bench.json @@ -2421,13 +2421,13 @@ "solanaVersion": "2.3.0", "result": { "binarySize": { - "bench": 932992 + "bench": 917416 }, "computeUnits": { - "accountInfo1": 702, - "accountInfo2": 1115, - "accountInfo4": 1921, - "accountInfo8": 3480, + "accountInfo1": 647, + "accountInfo2": 978, + "accountInfo4": 1626, + "accountInfo8": 2922, "accountEmptyInit1": 4716, "accountEmpty1": 738, "accountEmptyInit2": 8379, @@ -2512,7 +2512,95 @@ "uncheckedAccount4": 1875, "uncheckedAccount8": 3171 }, - "stackMemory": {} + "stackMemory": { + "account_info1": 88, + "account_info2": 88, + "account_info4": 88, + "account_info8": 88, + "account_empty_init1": 88, + "account_empty_init2": 88, + "account_empty_init4": 88, + "account_empty_init8": 88, + "account_empty1": 88, + "account_empty2": 88, + "account_empty4": 88, + "account_empty8": 88, + "account_sized_init1": 88, + "account_sized_init2": 88, + "account_sized_init4": 88, + "account_sized_init8": 88, + "account_sized1": 88, + "account_sized2": 88, + "account_sized4": 88, + "account_sized8": 88, + "account_unsized_init1": 88, + "account_unsized_init2": 88, + "account_unsized_init4": 88, + "account_unsized_init8": 88, + "account_unsized1": 88, + "account_unsized2": 88, + "account_unsized4": 88, + "account_unsized8": 88, + "boxed_account_empty_init1": 88, + "boxed_account_empty_init2": 88, + "boxed_account_empty_init4": 88, + "boxed_account_empty_init8": 88, + "boxed_account_empty1": 88, + "boxed_account_empty2": 88, + "boxed_account_empty4": 88, + "boxed_account_empty8": 96, + "boxed_account_sized_init1": 88, + "boxed_account_sized_init2": 88, + "boxed_account_sized_init4": 88, + "boxed_account_sized_init8": 88, + "boxed_account_sized1": 88, + "boxed_account_sized2": 88, + "boxed_account_sized4": 88, + "boxed_account_sized8": 96, + "boxed_account_unsized_init1": 88, + "boxed_account_unsized_init2": 88, + "boxed_account_unsized_init4": 88, + "boxed_account_unsized_init8": 88, + "boxed_account_unsized1": 88, + "boxed_account_unsized2": 88, + "boxed_account_unsized4": 88, + "boxed_account_unsized8": 96, + "boxed_interface_account_mint1": 88, + "boxed_interface_account_mint2": 88, + "boxed_interface_account_mint4": 88, + "boxed_interface_account_mint8": 96, + "boxed_interface_account_token1": 88, + "boxed_interface_account_token2": 88, + "boxed_interface_account_token4": 88, + "boxed_interface_account_token8": 96, + "interface_account_mint1": 88, + "interface_account_mint2": 88, + "interface_account_mint4": 88, + "interface_account_mint8": 88, + "interface_account_token1": 104, + "interface_account_token2": 104, + "interface_account_token4": 104, + "interface1": 88, + "interface2": 88, + "interface4": 88, + "interface8": 88, + "program1": 88, + "program2": 88, + "program4": 88, + "program8": 88, + "signer1": 88, + "signer2": 88, + "signer4": 88, + "signer8": 88, + "system_account1": 88, + "system_account2": 88, + "system_account4": 88, + "system_account8": 88, + "unchecked_account1": 88, + "unchecked_account2": 88, + "unchecked_account4": 88, + "unchecked_account8": 88 + } } } } \ No newline at end of file