diff --git a/Cargo.lock b/Cargo.lock index 38d4357faf9..55dd73d92a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6843,11 +6843,11 @@ checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" name = "spl-associated-token-account" version = "4.0.0" dependencies = [ - "assert_matches", "borsh 1.5.1", "num-derive", "num-traits", "solana-program", + "spl-associated-token-account-client", "spl-token 6.0.0", "spl-token-2022 4.0.1", "thiserror", @@ -6869,6 +6869,13 @@ dependencies = [ "thiserror", ] +[[package]] +name = "spl-associated-token-account-client" +version = "1.0.0" +dependencies = [ + "solana-program", +] + [[package]] name = "spl-associated-token-account-test" version = "0.0.1" @@ -6877,6 +6884,7 @@ dependencies = [ "solana-program-test", "solana-sdk", "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-token 6.0.0", "spl-token-2022 4.0.1", ] @@ -7191,6 +7199,7 @@ dependencies = [ "solana-program-test", "solana-sdk", "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-token 6.0.0", "thiserror", ] @@ -7370,6 +7379,7 @@ dependencies = [ "solana-security-txt", "solana-vote-program", "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-token 6.0.0", "test-case", "thiserror", @@ -7399,7 +7409,6 @@ dependencies = [ "solana-test-validator", "solana-transaction-status", "solana-vote-program", - "spl-associated-token-account 4.0.0", "spl-single-pool", "spl-token 6.0.0", "spl-token-client", @@ -7457,6 +7466,7 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-stake-pool", "spl-token 6.0.0", ] @@ -7637,7 +7647,7 @@ dependencies = [ "solana-sdk", "solana-test-validator", "solana-transaction-status", - "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-memo 5.0.0", "spl-token 6.0.0", "spl-token-2022 4.0.1", @@ -7667,7 +7677,7 @@ dependencies = [ "solana-rpc-client", "solana-rpc-client-api", "solana-sdk", - "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-memo 5.0.0", "spl-record", "spl-token 6.0.0", @@ -7918,7 +7928,7 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "solana-test-validator", - "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-token 6.0.0", "spl-token-2022 4.0.1", "spl-token-client", @@ -8063,7 +8073,7 @@ dependencies = [ "solana-program", "solana-program-test", "solana-sdk", - "spl-associated-token-account 4.0.0", + "spl-associated-token-account-client", "spl-token 6.0.0", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index e2066ba4fc5..6646127b161 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ split-debuginfo = "unpacked" [workspace] members = [ + "associated-token-account/client", "associated-token-account/program", "associated-token-account/program-test", "binary-option/program", diff --git a/associated-token-account/client/Cargo.toml b/associated-token-account/client/Cargo.toml new file mode 100644 index 00000000000..6308d571173 --- /dev/null +++ b/associated-token-account/client/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "spl-associated-token-account-client" +version = "1.0.0" +description = "Solana Program Library Associated Token Account Client" +authors = ["Solana Labs Maintainers "] +repository = "https://github.com/solana-labs/solana-program-library" +license = "Apache-2.0" +edition = "2021" + +[dependencies] +solana-program = "2.0.3" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/associated-token-account/client/src/address.rs b/associated-token-account/client/src/address.rs new file mode 100644 index 00000000000..9bb3db719ec --- /dev/null +++ b/associated-token-account/client/src/address.rs @@ -0,0 +1,70 @@ +//! Address derivation functions + +use solana_program::pubkey::Pubkey; + +/// Derives the associated token account address and bump seed +/// for the given wallet address, token mint and token program id +pub fn get_associated_token_address_and_bump_seed( + wallet_address: &Pubkey, + token_mint_address: &Pubkey, + program_id: &Pubkey, + token_program_id: &Pubkey, +) -> (Pubkey, u8) { + get_associated_token_address_and_bump_seed_internal( + wallet_address, + token_mint_address, + program_id, + token_program_id, + ) +} + +mod inline_spl_token { + solana_program::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); +} + +/// Derives the associated token account address for the given wallet address +/// and token mint +pub fn get_associated_token_address( + wallet_address: &Pubkey, + token_mint_address: &Pubkey, +) -> Pubkey { + get_associated_token_address_with_program_id( + wallet_address, + token_mint_address, + &inline_spl_token::ID, + ) +} + +/// Derives the associated token account address for the given wallet address, +/// token mint and token program id +pub fn get_associated_token_address_with_program_id( + wallet_address: &Pubkey, + token_mint_address: &Pubkey, + token_program_id: &Pubkey, +) -> Pubkey { + get_associated_token_address_and_bump_seed( + wallet_address, + token_mint_address, + &crate::program::id(), + token_program_id, + ) + .0 +} + +/// For internal use only. +#[doc(hidden)] +pub fn get_associated_token_address_and_bump_seed_internal( + wallet_address: &Pubkey, + token_mint_address: &Pubkey, + program_id: &Pubkey, + token_program_id: &Pubkey, +) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[ + &wallet_address.to_bytes(), + &token_program_id.to_bytes(), + &token_mint_address.to_bytes(), + ], + program_id, + ) +} diff --git a/associated-token-account/client/src/instruction.rs b/associated-token-account/client/src/instruction.rs new file mode 100644 index 00000000000..6cad63d9306 --- /dev/null +++ b/associated-token-account/client/src/instruction.rs @@ -0,0 +1,107 @@ +//! Instruction creators for the program +use { + crate::{address::get_associated_token_address_with_program_id, program::id}, + solana_program::{ + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, + system_program, + }, +}; + +fn build_associated_token_account_instruction( + funding_address: &Pubkey, + wallet_address: &Pubkey, + token_mint_address: &Pubkey, + token_program_id: &Pubkey, + instruction: u8, +) -> Instruction { + let associated_account_address = get_associated_token_address_with_program_id( + wallet_address, + token_mint_address, + token_program_id, + ); + // safety check, assert if not a creation instruction, which is only 0 or 1 + assert!(instruction <= 1); + Instruction { + program_id: id(), + accounts: vec![ + AccountMeta::new(*funding_address, true), + AccountMeta::new(associated_account_address, false), + AccountMeta::new_readonly(*wallet_address, false), + AccountMeta::new_readonly(*token_mint_address, false), + AccountMeta::new_readonly(system_program::id(), false), + AccountMeta::new_readonly(*token_program_id, false), + ], + data: vec![instruction], + } +} + +/// Creates Create instruction +pub fn create_associated_token_account( + funding_address: &Pubkey, + wallet_address: &Pubkey, + token_mint_address: &Pubkey, + token_program_id: &Pubkey, +) -> Instruction { + build_associated_token_account_instruction( + funding_address, + wallet_address, + token_mint_address, + token_program_id, + 0, // AssociatedTokenAccountInstruction::Create + ) +} + +/// Creates CreateIdempotent instruction +pub fn create_associated_token_account_idempotent( + funding_address: &Pubkey, + wallet_address: &Pubkey, + token_mint_address: &Pubkey, + token_program_id: &Pubkey, +) -> Instruction { + build_associated_token_account_instruction( + funding_address, + wallet_address, + token_mint_address, + token_program_id, + 1, // AssociatedTokenAccountInstruction::CreateIdempotent + ) +} + +/// Creates a `RecoverNested` instruction +pub fn recover_nested( + wallet_address: &Pubkey, + owner_token_mint_address: &Pubkey, + nested_token_mint_address: &Pubkey, + token_program_id: &Pubkey, +) -> Instruction { + let owner_associated_account_address = get_associated_token_address_with_program_id( + wallet_address, + owner_token_mint_address, + token_program_id, + ); + let destination_associated_account_address = get_associated_token_address_with_program_id( + wallet_address, + nested_token_mint_address, + token_program_id, + ); + let nested_associated_account_address = get_associated_token_address_with_program_id( + &owner_associated_account_address, // ATA is wrongly used as a wallet_address + nested_token_mint_address, + token_program_id, + ); + + Instruction { + program_id: id(), + accounts: vec![ + AccountMeta::new(nested_associated_account_address, false), + AccountMeta::new_readonly(*nested_token_mint_address, false), + AccountMeta::new(destination_associated_account_address, false), + AccountMeta::new_readonly(owner_associated_account_address, false), + AccountMeta::new_readonly(*owner_token_mint_address, false), + AccountMeta::new(*wallet_address, true), + AccountMeta::new_readonly(*token_program_id, false), + ], + data: vec![2], // AssociatedTokenAccountInstruction::RecoverNested + } +} diff --git a/associated-token-account/client/src/lib.rs b/associated-token-account/client/src/lib.rs new file mode 100644 index 00000000000..6a40abf2ed0 --- /dev/null +++ b/associated-token-account/client/src/lib.rs @@ -0,0 +1,11 @@ +//! Client crate for interacting with the spl-associated-token-account program +#![deny(missing_docs)] +#![forbid(unsafe_code)] + +pub mod address; +pub mod instruction; + +/// Module defining the program id +pub mod program { + solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); +} diff --git a/associated-token-account/program-test/Cargo.toml b/associated-token-account/program-test/Cargo.toml index be9069b8c90..cd597607eec 100644 --- a/associated-token-account/program-test/Cargo.toml +++ b/associated-token-account/program-test/Cargo.toml @@ -15,5 +15,6 @@ solana-program = "2.0.3" solana-program-test = "2.0.3" solana-sdk = "2.0.3" spl-associated-token-account = { version = "4.0.0", path = "../program", features = ["no-entrypoint"] } +spl-associated-token-account-client = { version = "1.0.0", path = "../client" } spl-token = { version = "6.0", path = "../../token/program", features = ["no-entrypoint"] } spl-token-2022 = { version = "4.0.0", path = "../../token/program-2022", features = ["no-entrypoint"] } diff --git a/associated-token-account/program-test/tests/create_idempotent.rs b/associated-token-account/program-test/tests/create_idempotent.rs index 2e54f1c3abe..8f89e856dd0 100644 --- a/associated-token-account/program-test/tests/create_idempotent.rs +++ b/associated-token-account/program-test/tests/create_idempotent.rs @@ -17,11 +17,11 @@ use { }, spl_associated_token_account::{ error::AssociatedTokenAccountError, - get_associated_token_address_with_program_id, instruction::{ create_associated_token_account, create_associated_token_account_idempotent, }, }, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::ExtensionType, instruction::initialize_account, diff --git a/associated-token-account/program-test/tests/extended_mint.rs b/associated-token-account/program-test/tests/extended_mint.rs index 747644814b9..1ee0b5513e5 100644 --- a/associated-token-account/program-test/tests/extended_mint.rs +++ b/associated-token-account/program-test/tests/extended_mint.rs @@ -13,9 +13,8 @@ use { signer::keypair::Keypair, transaction::{Transaction, TransactionError}, }, - spl_associated_token_account::{ - get_associated_token_address_with_program_id, instruction::create_associated_token_account, - }, + spl_associated_token_account::instruction::create_associated_token_account, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ error::TokenError, extension::{ diff --git a/associated-token-account/program-test/tests/process_create_associated_token_account.rs b/associated-token-account/program-test/tests/process_create_associated_token_account.rs index f535d661c1f..071604ba2e3 100644 --- a/associated-token-account/program-test/tests/process_create_associated_token_account.rs +++ b/associated-token-account/program-test/tests/process_create_associated_token_account.rs @@ -12,9 +12,8 @@ use { signature::Signer, transaction::{Transaction, TransactionError}, }, - spl_associated_token_account::{ - get_associated_token_address_with_program_id, instruction::create_associated_token_account, - }, + spl_associated_token_account::instruction::create_associated_token_account, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{extension::ExtensionType, state::Account}, }; diff --git a/associated-token-account/program-test/tests/recover_nested.rs b/associated-token-account/program-test/tests/recover_nested.rs index 86374a2eacc..bd06ae529d6 100644 --- a/associated-token-account/program-test/tests/recover_nested.rs +++ b/associated-token-account/program-test/tests/recover_nested.rs @@ -14,7 +14,8 @@ use { signer::keypair::Keypair, transaction::{Transaction, TransactionError}, }, - spl_associated_token_account::{get_associated_token_address_with_program_id, instruction}, + spl_associated_token_account::instruction, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::{ExtensionType, StateWithExtensionsOwned}, state::{Account, Mint}, diff --git a/associated-token-account/program-test/tests/spl_token_create.rs b/associated-token-account/program-test/tests/spl_token_create.rs index 903d12fb4d2..b95e0e67036 100644 --- a/associated-token-account/program-test/tests/spl_token_create.rs +++ b/associated-token-account/program-test/tests/spl_token_create.rs @@ -11,9 +11,8 @@ use { solana_program::pubkey::Pubkey, solana_program_test::*, solana_sdk::{program_pack::Pack, signature::Signer, transaction::Transaction}, - spl_associated_token_account::{ - get_associated_token_address, instruction::create_associated_token_account, - }, + spl_associated_token_account::instruction::create_associated_token_account, + spl_associated_token_account_client::address::get_associated_token_address, spl_token::state::Account, }; diff --git a/associated-token-account/program/Cargo.toml b/associated-token-account/program/Cargo.toml index a8cb53b1f3c..7cc693cb8ff 100644 --- a/associated-token-account/program/Cargo.toml +++ b/associated-token-account/program/Cargo.toml @@ -12,11 +12,11 @@ no-entrypoint = [] test-sbf = [] [dependencies] -assert_matches = "1.5.0" borsh = "1.5.1" num-derive = "0.4" num-traits = "0.2" solana-program = "2.0.3" +spl-associated-token-account-client = { version = "1.0.0", path = "../client" } spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } diff --git a/associated-token-account/program/src/instruction.rs b/associated-token-account/program/src/instruction.rs index 728d2abcf3a..51453b9ae14 100644 --- a/associated-token-account/program/src/instruction.rs +++ b/associated-token-account/program/src/instruction.rs @@ -1,14 +1,7 @@ //! Program instructions -use { - crate::{get_associated_token_address_with_program_id, id}, - assert_matches::assert_matches, - borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, - solana_program::{ - instruction::{AccountMeta, Instruction}, - pubkey::Pubkey, - }, -}; +use borsh::{BorshDeserialize, BorshSchema, BorshSerialize}; +pub use spl_associated_token_account_client::instruction::*; /// Instructions supported by the AssociatedTokenAccount program #[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize, BorshSchema)] @@ -55,107 +48,3 @@ pub enum AssociatedTokenAccountInstruction { /// 6. `[]` SPL Token program RecoverNested, } - -fn build_associated_token_account_instruction( - funding_address: &Pubkey, - wallet_address: &Pubkey, - token_mint_address: &Pubkey, - token_program_id: &Pubkey, - instruction: AssociatedTokenAccountInstruction, -) -> Instruction { - let associated_account_address = get_associated_token_address_with_program_id( - wallet_address, - token_mint_address, - token_program_id, - ); - // safety check, assert if not a creation instruction - assert_matches!( - instruction, - AssociatedTokenAccountInstruction::Create - | AssociatedTokenAccountInstruction::CreateIdempotent - ); - Instruction { - program_id: id(), - accounts: vec![ - AccountMeta::new(*funding_address, true), - AccountMeta::new(associated_account_address, false), - AccountMeta::new_readonly(*wallet_address, false), - AccountMeta::new_readonly(*token_mint_address, false), - AccountMeta::new_readonly(solana_program::system_program::id(), false), - AccountMeta::new_readonly(*token_program_id, false), - ], - data: borsh::to_vec(&instruction).unwrap(), - } -} - -/// Creates Create instruction -pub fn create_associated_token_account( - funding_address: &Pubkey, - wallet_address: &Pubkey, - token_mint_address: &Pubkey, - token_program_id: &Pubkey, -) -> Instruction { - build_associated_token_account_instruction( - funding_address, - wallet_address, - token_mint_address, - token_program_id, - AssociatedTokenAccountInstruction::Create, - ) -} - -/// Creates CreateIdempotent instruction -pub fn create_associated_token_account_idempotent( - funding_address: &Pubkey, - wallet_address: &Pubkey, - token_mint_address: &Pubkey, - token_program_id: &Pubkey, -) -> Instruction { - build_associated_token_account_instruction( - funding_address, - wallet_address, - token_mint_address, - token_program_id, - AssociatedTokenAccountInstruction::CreateIdempotent, - ) -} - -/// Creates a `RecoverNested` instruction -pub fn recover_nested( - wallet_address: &Pubkey, - owner_token_mint_address: &Pubkey, - nested_token_mint_address: &Pubkey, - token_program_id: &Pubkey, -) -> Instruction { - let owner_associated_account_address = get_associated_token_address_with_program_id( - wallet_address, - owner_token_mint_address, - token_program_id, - ); - let destination_associated_account_address = get_associated_token_address_with_program_id( - wallet_address, - nested_token_mint_address, - token_program_id, - ); - let nested_associated_account_address = get_associated_token_address_with_program_id( - &owner_associated_account_address, // ATA is wrongly used as a wallet_address - nested_token_mint_address, - token_program_id, - ); - - let instruction_data = AssociatedTokenAccountInstruction::RecoverNested; - - Instruction { - program_id: id(), - accounts: vec![ - AccountMeta::new(nested_associated_account_address, false), - AccountMeta::new_readonly(*nested_token_mint_address, false), - AccountMeta::new(destination_associated_account_address, false), - AccountMeta::new_readonly(owner_associated_account_address, false), - AccountMeta::new_readonly(*owner_token_mint_address, false), - AccountMeta::new(*wallet_address, true), - AccountMeta::new_readonly(*token_program_id, false), - ], - data: borsh::to_vec(&instruction_data).unwrap(), - } -} diff --git a/associated-token-account/program/src/lib.rs b/associated-token-account/program/src/lib.rs index 927f9d48185..5778456aa27 100644 --- a/associated-token-account/program/src/lib.rs +++ b/associated-token-account/program/src/lib.rs @@ -16,67 +16,16 @@ use solana_program::{ pubkey::Pubkey, sysvar, }; - -solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); - -pub(crate) fn get_associated_token_address_and_bump_seed( - wallet_address: &Pubkey, - token_mint_address: &Pubkey, - program_id: &Pubkey, - token_program_id: &Pubkey, -) -> (Pubkey, u8) { - get_associated_token_address_and_bump_seed_internal( - wallet_address, - token_mint_address, - program_id, - token_program_id, - ) -} - -/// Derives the associated token account address for the given wallet address -/// and token mint -pub fn get_associated_token_address( - wallet_address: &Pubkey, - token_mint_address: &Pubkey, -) -> Pubkey { - get_associated_token_address_with_program_id( - wallet_address, - token_mint_address, - &spl_token::id(), - ) -} - -/// Derives the associated token account address for the given wallet address, -/// token mint and token program id -pub fn get_associated_token_address_with_program_id( - wallet_address: &Pubkey, - token_mint_address: &Pubkey, - token_program_id: &Pubkey, -) -> Pubkey { - get_associated_token_address_and_bump_seed( - wallet_address, - token_mint_address, - &id(), - token_program_id, - ) - .0 -} - -fn get_associated_token_address_and_bump_seed_internal( - wallet_address: &Pubkey, - token_mint_address: &Pubkey, - program_id: &Pubkey, - token_program_id: &Pubkey, -) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - &wallet_address.to_bytes(), - &token_program_id.to_bytes(), - &token_mint_address.to_bytes(), - ], - program_id, - ) -} +#[deprecated( + since = "4.1.0", + note = "Use `spl-associated-token-account-client` crate instead." +)] +pub use spl_associated_token_account_client::address::{ + get_associated_token_address, get_associated_token_address_with_program_id, +}; +// Export current SDK types for downstream users building with a different SDK +// version +pub use spl_associated_token_account_client::program::{check_id, id, ID}; /// Create an associated token account for the given wallet address and token /// mint diff --git a/associated-token-account/program/src/processor.rs b/associated-token-account/program/src/processor.rs index 20767a247d1..f0063908c78 100644 --- a/associated-token-account/program/src/processor.rs +++ b/associated-token-account/program/src/processor.rs @@ -5,7 +5,6 @@ use { error::AssociatedTokenAccountError, instruction::AssociatedTokenAccountInstruction, tools::account::{create_pda_account, get_account_len}, - *, }, borsh::BorshDeserialize, solana_program::{ @@ -19,6 +18,7 @@ use { system_program, sysvar::Sysvar, }, + spl_associated_token_account_client::address::get_associated_token_address_and_bump_seed_internal, spl_token_2022::{ extension::{ExtensionType, StateWithExtensions}, state::{Account, Mint}, diff --git a/managed-token/program/Cargo.toml b/managed-token/program/Cargo.toml index c9acfeee90e..9aaf9d19f2f 100644 --- a/managed-token/program/Cargo.toml +++ b/managed-token/program/Cargo.toml @@ -28,6 +28,7 @@ solana-program = "2.0.3" spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ "no-entrypoint", ] } +spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } diff --git a/managed-token/program/src/accounts.rs b/managed-token/program/src/accounts.rs index 01bc6b44f7f..94f980aa6ef 100644 --- a/managed-token/program/src/accounts.rs +++ b/managed-token/program/src/accounts.rs @@ -116,7 +116,7 @@ impl<'a, 'info> InitializeAccount<'a, 'info> { "Invalid key supplied for System Program", )?; assert_with_msg( - ctx.associated_token_program.key == &spl_associated_token_account::id(), + ctx.associated_token_program.key == &spl_associated_token_account_client::program::id(), ProgramError::InvalidInstructionData, "Invalid key supplied for Associataed Token Program", )?; diff --git a/managed-token/program/src/instruction.rs b/managed-token/program/src/instruction.rs index d6dd8e46e76..bf22c82c817 100644 --- a/managed-token/program/src/instruction.rs +++ b/managed-token/program/src/instruction.rs @@ -8,7 +8,7 @@ use { pubkey::Pubkey, system_program, }, - spl_associated_token_account::get_associated_token_address, + spl_associated_token_account_client::address::get_associated_token_address, }; #[derive(Debug, Clone, ShankInstruction, BorshSerialize, BorshDeserialize)] @@ -127,7 +127,7 @@ pub fn create_initialize_account_instruction( AccountMeta::new_readonly(freeze_authority, false), AccountMeta::new_readonly(*mint, false), AccountMeta::new_readonly(system_program::id(), false), - AccountMeta::new_readonly(spl_associated_token_account::id(), false), + AccountMeta::new_readonly(spl_associated_token_account_client::program::id(), false), AccountMeta::new_readonly(spl_token::id(), false), ], data: borsh::to_vec(&ManagedTokenInstruction::InitializeAccount)?, diff --git a/managed-token/program/tests/test.rs b/managed-token/program/tests/test.rs index 7ddaf49ca09..3d7600d0237 100644 --- a/managed-token/program/tests/test.rs +++ b/managed-token/program/tests/test.rs @@ -10,9 +10,8 @@ use { system_instruction, transaction::Transaction, }, - spl_associated_token_account::{ - get_associated_token_address, instruction::create_associated_token_account, - }, + spl_associated_token_account::instruction::create_associated_token_account, + spl_associated_token_account_client::address::get_associated_token_address, spl_managed_token::instruction::*, spl_token::state::Account as TokenAccount, }; diff --git a/single-pool/cli/Cargo.toml b/single-pool/cli/Cargo.toml index 5b578619d3b..7917b875b49 100644 --- a/single-pool/cli/Cargo.toml +++ b/single-pool/cli/Cargo.toml @@ -31,9 +31,6 @@ spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } spl-token-client = { version = "0.11.0", path = "../../token/client" } -spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ - "no-entrypoint", -] } spl-single-pool = { version = "1.0.0", path = "../program", features = [ "no-entrypoint", ] } diff --git a/single-pool/program/Cargo.toml b/single-pool/program/Cargo.toml index 86f22f4a71d..d5ed3ee79db 100644 --- a/single-pool/program/Cargo.toml +++ b/single-pool/program/Cargo.toml @@ -22,15 +22,16 @@ solana-security-txt = "1.1.1" spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } -spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ - "no-entrypoint", -] } thiserror = "1.0" [dev-dependencies] solana-program-test = "2.0.3" solana-sdk = "2.0.3" solana-vote-program = "2.0.3" +spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ + "no-entrypoint", +] } +spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } test-case = "3.3" bincode = "1.3.1" rand = "0.8.5" diff --git a/single-pool/program/tests/deposit.rs b/single-pool/program/tests/deposit.rs index 6fe15a2cc48..1fcc0523d81 100644 --- a/single-pool/program/tests/deposit.rs +++ b/single-pool/program/tests/deposit.rs @@ -12,7 +12,7 @@ use { stake::state::{Authorized, Lockup}, transaction::Transaction, }, - spl_associated_token_account as atoken, + spl_associated_token_account_client::address as atoken, spl_single_pool::{ error::SinglePoolError, find_default_deposit_account_address, id, instruction, }, diff --git a/single-pool/program/tests/helpers/mod.rs b/single-pool/program/tests/helpers/mod.rs index a884750886e..29dd1e178fd 100644 --- a/single-pool/program/tests/helpers/mod.rs +++ b/single-pool/program/tests/helpers/mod.rs @@ -17,7 +17,7 @@ use { self, vote_instruction, vote_state::{VoteInit, VoteState}, }, - spl_associated_token_account as atoken, + spl_associated_token_account_client::address as atoken, spl_single_pool::{ find_pool_address, find_pool_mint_address, find_pool_mint_authority_address, find_pool_mpl_authority_address, find_pool_stake_address, diff --git a/stake-pool/cli/Cargo.toml b/stake-pool/cli/Cargo.toml index f16adccdc28..22a9397fc5b 100644 --- a/stake-pool/cli/Cargo.toml +++ b/stake-pool/cli/Cargo.toml @@ -26,6 +26,7 @@ solana-sdk = "2.0.3" spl-associated-token-account = { version = "=4.0.0", path = "../../associated-token-account/program", features = [ "no-entrypoint", ] } +spl-associated-token-account-client = { version = "=1.0.0", path = "../../associated-token-account/client" } spl-stake-pool = { version = "=2.0.0", path = "../program", features = [ "no-entrypoint", ] } diff --git a/stake-pool/cli/src/main.rs b/stake-pool/cli/src/main.rs index a777d8f6ee0..e56990f1c9b 100644 --- a/stake-pool/cli/src/main.rs +++ b/stake-pool/cli/src/main.rs @@ -43,9 +43,8 @@ use { system_instruction, transaction::Transaction, }, - spl_associated_token_account::{ - get_associated_token_address, instruction::create_associated_token_account, - }, + spl_associated_token_account::instruction::create_associated_token_account, + spl_associated_token_account_client::address::get_associated_token_address, spl_stake_pool::{ self, find_stake_program_address, find_transient_stake_program_address, find_withdraw_authority_program_address, diff --git a/stateless-asks/program/Cargo.toml b/stateless-asks/program/Cargo.toml index 58e1146ea47..2529e378e03 100644 --- a/stateless-asks/program/Cargo.toml +++ b/stateless-asks/program/Cargo.toml @@ -16,9 +16,7 @@ solana-program = "2.0.3" spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } -spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ - "no-entrypoint", -] } +spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } thiserror = "1.0" [dev-dependencies] diff --git a/stateless-asks/program/src/validation_utils.rs b/stateless-asks/program/src/validation_utils.rs index 6014693672d..6e61b0d43f2 100644 --- a/stateless-asks/program/src/validation_utils.rs +++ b/stateless-asks/program/src/validation_utils.rs @@ -7,7 +7,7 @@ use { program_pack::{IsInitialized, Pack}, pubkey::Pubkey, }, - spl_associated_token_account::get_associated_token_address, + spl_associated_token_account_client::address::get_associated_token_address, spl_token::{self, state::Account}, }; diff --git a/token-upgrade/cli/Cargo.toml b/token-upgrade/cli/Cargo.toml index 27452d782ee..86e2e29db99 100644 --- a/token-upgrade/cli/Cargo.toml +++ b/token-upgrade/cli/Cargo.toml @@ -19,7 +19,7 @@ solana-client = "2.0.3" solana-logger = "2.0.3" solana-remote-wallet = "2.0.3" solana-sdk = "2.0.3" -spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = ["no-entrypoint"] } +spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } spl-token = { version = "6.0", path = "../../token/program", features = ["no-entrypoint"] } spl-token-2022 = { version = "4.0.0", path = "../../token/program-2022", features = ["no-entrypoint"] } spl-token-client = { version = "0.11.0", path = "../../token/client" } diff --git a/token-upgrade/cli/src/main.rs b/token-upgrade/cli/src/main.rs index 92453f25762..852418d7d4c 100644 --- a/token-upgrade/cli/src/main.rs +++ b/token-upgrade/cli/src/main.rs @@ -18,7 +18,7 @@ use { signature::{Signature, Signer}, transaction::Transaction, }, - spl_associated_token_account::get_associated_token_address_with_program_id, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::StateWithExtensions, state::{Account, Mint}, diff --git a/token/cli/Cargo.toml b/token/cli/Cargo.toml index ccca7647891..a3c7daa9d41 100644 --- a/token/cli/Cargo.toml +++ b/token/cli/Cargo.toml @@ -28,6 +28,7 @@ solana-logger = "2.0.3" solana-remote-wallet = "2.0.3" solana-sdk = "2.0.3" solana-transaction-status = "2.0.3" +spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } spl-token = { version = "6.0", path = "../program", features = [ "no-entrypoint", ] } @@ -38,9 +39,6 @@ spl-token-client = { version = "0.11.0", path = "../client" } spl-token-confidential-transfer-proof-generation = { version = "0.1.0", path = "../confidential-transfer/proof-generation" } spl-token-metadata-interface = { version = "0.4.0", path = "../../token-metadata/interface" } spl-token-group-interface = { version = "0.3.0", path = "../../token-group/interface" } -spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ - "no-entrypoint", -] } spl-memo = { version = "5.0", path = "../../memo/program", features = [ "no-entrypoint", ] } diff --git a/token/cli/src/bench.rs b/token/cli/src/bench.rs index 644cdc55333..e6e04ebe241 100644 --- a/token/cli/src/bench.rs +++ b/token/cli/src/bench.rs @@ -12,7 +12,7 @@ use { message::Message, native_token::lamports_to_sol, native_token::Sol, program_pack::Pack, pubkey::Pubkey, signature::Signer, system_instruction, }, - spl_associated_token_account::*, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::StateWithExtensions, instruction, diff --git a/token/cli/src/command.rs b/token/cli/src/command.rs index 567b5792853..cd9c9f12252 100644 --- a/token/cli/src/command.rs +++ b/token/cli/src/command.rs @@ -34,7 +34,7 @@ use { signature::{Keypair, Signer}, system_program, }, - spl_associated_token_account::get_associated_token_address_with_program_id, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::{ confidential_transfer::{ diff --git a/token/cli/src/config.rs b/token/cli/src/config.rs index c1aa6c53c08..8157551d74b 100644 --- a/token/cli/src/config.rs +++ b/token/cli/src/config.rs @@ -15,7 +15,7 @@ use { account::Account as RawAccount, commitment_config::CommitmentConfig, hash::Hash, pubkey::Pubkey, signature::Signer, }, - spl_associated_token_account::*, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::StateWithExtensionsOwned, state::{Account, Mint}, diff --git a/token/cli/src/sort.rs b/token/cli/src/sort.rs index 09423694519..b82dbe41711 100644 --- a/token/cli/src/sort.rs +++ b/token/cli/src/sort.rs @@ -8,7 +8,7 @@ use { solana_account_decoder::{parse_token::TokenAccountType, UiAccountData}, solana_client::rpc_response::RpcKeyedAccount, solana_sdk::pubkey::Pubkey, - spl_associated_token_account::get_associated_token_address_with_program_id, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, std::{ collections::{btree_map::Entry, BTreeMap}, str::FromStr, diff --git a/token/cli/tests/command.rs b/token/cli/tests/command.rs index 02add5913c2..e13ce549c09 100644 --- a/token/cli/tests/command.rs +++ b/token/cli/tests/command.rs @@ -14,7 +14,7 @@ use { transaction::Transaction, }, solana_test_validator::{TestValidator, TestValidatorGenesis, UpgradeableProgramInfo}, - spl_associated_token_account::get_associated_token_address_with_program_id, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::{ confidential_transfer::{ConfidentialTransferAccount, ConfidentialTransferMint}, @@ -167,7 +167,7 @@ async fn new_validator_for_test() -> (TestValidator, Keypair) { upgrade_authority: Pubkey::new_unique(), }, UpgradeableProgramInfo { - program_id: spl_associated_token_account::id(), + program_id: spl_associated_token_account_client::program::id(), loader: bpf_loader_upgradeable::id(), program_path: PathBuf::from("../../target/deploy/spl_associated_token_account.so"), upgrade_authority: Pubkey::new_unique(), diff --git a/token/client/Cargo.toml b/token/client/Cargo.toml index 882a9340f00..305fbc67450 100644 --- a/token/client/Cargo.toml +++ b/token/client/Cargo.toml @@ -19,11 +19,7 @@ solana-program-test = "2.0.3" solana-rpc-client = "2.0.3" solana-rpc-client-api = "2.0.3" solana-sdk = "2.0.3" -# We never want the entrypoint for ATA, but we want the entrypoint for token when -# testing token -spl-associated-token-account = { version = "4.0.0", path = "../../associated-token-account/program", features = [ - "no-entrypoint", -] } +spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } spl-memo = { version = "5.0", path = "../../memo/program", features = [ "no-entrypoint", ] } diff --git a/token/client/src/token.rs b/token/client/src/token.rs index d23bf5b8ded..33352f62c27 100644 --- a/token/client/src/token.rs +++ b/token/client/src/token.rs @@ -21,8 +21,8 @@ use { system_instruction, transaction::Transaction, }, - spl_associated_token_account::{ - get_associated_token_address_with_program_id, + spl_associated_token_account_client::{ + address::get_associated_token_address_with_program_id, instruction::{ create_associated_token_account, create_associated_token_account_idempotent, },