From 1bc80ae13ff48eb1c9c893f7c4a111cde920bec1 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Mon, 8 Jul 2024 14:12:04 +0400 Subject: [PATCH 01/13] extract associated-token-address crate --- Cargo.lock | 7 +++ Cargo.toml | 1 + associated-token-address/Cargo.toml | 14 ++++++ associated-token-address/src/lib.rs | 69 +++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 associated-token-address/Cargo.toml create mode 100644 associated-token-address/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 38d4357faf9..163a8095edc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6881,6 +6881,13 @@ dependencies = [ "spl-token-2022 4.0.1", ] +[[package]] +name = "spl-associated-token-address" +version = "1.0.0" +dependencies = [ + "solana-program", +] + [[package]] name = "spl-binary-oracle-pair" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index e2066ba4fc5..4cdfb7f40cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ split-debuginfo = "unpacked" members = [ "associated-token-account/program", "associated-token-account/program-test", + "associated-token-address", "binary-option/program", "binary-oracle-pair/program", "examples/rust/cross-program-invocation", diff --git a/associated-token-address/Cargo.toml b/associated-token-address/Cargo.toml new file mode 100644 index 00000000000..cf15cc7ead5 --- /dev/null +++ b/associated-token-address/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "spl-associated-token-address" +version = "1.0.0" +description = "Solana Program Library Associated Token Address" +authors = ["Solana Labs Maintainers "] +repository = "https://github.com/solana-labs/solana-program-library" +license = "Apache-2.0" +edition = "2021" + +[dependencies] +solana-program = "2.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/associated-token-address/src/lib.rs b/associated-token-address/src/lib.rs new file mode 100644 index 00000000000..4075887431e --- /dev/null +++ b/associated-token-address/src/lib.rs @@ -0,0 +1,69 @@ +//! Convention for associating token accounts with a user wallet +#![deny(missing_docs)] +#![forbid(unsafe_code)] + +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, + ) +} + +const TOKEN_PROGRAM: Pubkey = solana_program::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); +const ASSOCIATED_TOKEN_PROGRAM: Pubkey = solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); + +/// 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, + &TOKEN_PROGRAM, + ) +} + +/// 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, + &ASSOCIATED_TOKEN_PROGRAM, + 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, + ) +} From 5bbba83dd92e9e9174cc0cbdcd229fa9f504987b Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Mon, 8 Jul 2024 14:39:09 +0400 Subject: [PATCH 02/13] use spl_associated_token_address in spl crates --- Cargo.lock | 7 +- .../program-test/tests/create_idempotent.rs | 2 +- .../program-test/tests/extended_mint.rs | 5 +- ...process_create_associated_token_account.rs | 5 +- .../program-test/tests/recover_nested.rs | 3 +- .../program-test/tests/spl_token_create.rs | 5 +- associated-token-account/program/Cargo.toml | 1 + associated-token-account/program/src/lib.rs | 64 ++----------------- .../program/src/processor.rs | 2 +- associated-token-address/src/lib.rs | 14 ++-- managed-token/program/Cargo.toml | 1 + managed-token/program/src/accounts.rs | 3 +- managed-token/program/src/instruction.rs | 4 +- stake-pool/cli/Cargo.toml | 1 + stake-pool/cli/src/main.rs | 5 +- stateless-asks/program/Cargo.toml | 4 +- .../program/src/validation_utils.rs | 2 +- token-upgrade/cli/Cargo.toml | 1 + token-upgrade/cli/src/main.rs | 2 +- 19 files changed, 42 insertions(+), 89 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 163a8095edc..a513658b7e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6848,6 +6848,7 @@ dependencies = [ "num-derive", "num-traits", "solana-program", + "spl-associated-token-address", "spl-token 6.0.0", "spl-token-2022 4.0.1", "thiserror", @@ -7198,6 +7199,7 @@ dependencies = [ "solana-program-test", "solana-sdk", "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-token 6.0.0", "thiserror", ] @@ -7464,6 +7466,7 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-stake-pool", "spl-token 6.0.0", ] @@ -7925,7 +7928,7 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "solana-test-validator", - "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-token 6.0.0", "spl-token-2022 4.0.1", "spl-token-client", @@ -8070,7 +8073,7 @@ dependencies = [ "solana-program", "solana-program-test", "solana-sdk", - "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-token 6.0.0", "thiserror", ] diff --git a/associated-token-account/program-test/tests/create_idempotent.rs b/associated-token-account/program-test/tests/create_idempotent.rs index 2e54f1c3abe..6c6c9cc145b 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_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..d8f655f8e8a 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_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..cb6d3600f2a 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_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..fd266054b33 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_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..ffaa5b2665c 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_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..69894b9630b 100644 --- a/associated-token-account/program/Cargo.toml +++ b/associated-token-account/program/Cargo.toml @@ -17,6 +17,7 @@ borsh = "1.5.1" num-derive = "0.4" num-traits = "0.2" solana-program = "2.0.3" +spl-associated-token-address = { version = "1.0.0", path = "../../associated-token-address" } spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } diff --git a/associated-token-account/program/src/lib.rs b/associated-token-account/program/src/lib.rs index 927f9d48185..c97b564df67 100644 --- a/associated-token-account/program/src/lib.rs +++ b/associated-token-account/program/src/lib.rs @@ -17,66 +17,12 @@ use solana_program::{ 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, - ) -} +// Export current SDK types for downstream users building with a different SDK +// version +pub use {solana_program, spl_associated_token_address::{id, ID, check_id}}; +#[deprecated(since = "4.1.0", note = "Use `spl-associated-token-address` crate instead.")] +pub use spl_associated_token_address::{get_associated_token_address, get_associated_token_address_with_program_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..f8346a7b1c2 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_address::get_associated_token_address_and_bump_seed_internal, spl_token_2022::{ extension::{ExtensionType, StateWithExtensions}, state::{Account, Mint}, diff --git a/associated-token-address/src/lib.rs b/associated-token-address/src/lib.rs index 4075887431e..92ba1d8ad0a 100644 --- a/associated-token-address/src/lib.rs +++ b/associated-token-address/src/lib.rs @@ -4,6 +4,8 @@ use solana_program::pubkey::Pubkey; +solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); + /// 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( @@ -20,8 +22,9 @@ pub fn get_associated_token_address_and_bump_seed( ) } -const TOKEN_PROGRAM: Pubkey = solana_program::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); -const ASSOCIATED_TOKEN_PROGRAM: Pubkey = solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); +const TOKEN_PROGRAM_ID: Pubkey = solana_program::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); +/// Program ID for the Associated Token Program +pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey = solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); /// Derives the associated token account address for the given wallet address /// and token mint @@ -32,7 +35,7 @@ pub fn get_associated_token_address( get_associated_token_address_with_program_id( wallet_address, token_mint_address, - &TOKEN_PROGRAM, + &TOKEN_PROGRAM_ID, ) } @@ -46,13 +49,14 @@ pub fn get_associated_token_address_with_program_id( get_associated_token_address_and_bump_seed( wallet_address, token_mint_address, - &ASSOCIATED_TOKEN_PROGRAM, + &ASSOCIATED_TOKEN_PROGRAM_ID, token_program_id, ) .0 } -fn get_associated_token_address_and_bump_seed_internal( +/// For internal use only. +pub fn get_associated_token_address_and_bump_seed_internal( wallet_address: &Pubkey, token_mint_address: &Pubkey, program_id: &Pubkey, diff --git a/managed-token/program/Cargo.toml b/managed-token/program/Cargo.toml index c9acfeee90e..f485cc436d6 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-address = { version = "1.0.0", path = "../../associated-token-address" } 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..3dd25af8862 100644 --- a/managed-token/program/src/accounts.rs +++ b/managed-token/program/src/accounts.rs @@ -5,6 +5,7 @@ use { program_error::ProgramError, system_program, }, + spl_associated_token_address::ASSOCIATED_TOKEN_PROGRAM_ID, }; pub struct InitializeMint<'a, 'info> { @@ -116,7 +117,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 == &ASSOCIATED_TOKEN_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..26d400818d9 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_address::{get_associated_token_address, ASSOCIATED_TOKEN_PROGRAM_ID}, }; #[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(ASSOCIATED_TOKEN_PROGRAM_ID, false), AccountMeta::new_readonly(spl_token::id(), false), ], data: borsh::to_vec(&ManagedTokenInstruction::InitializeAccount)?, diff --git a/stake-pool/cli/Cargo.toml b/stake-pool/cli/Cargo.toml index f16adccdc28..6aa546af980 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-address = { version = "=1.0.0", path = "../../associated-token-address" } 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..e2f0aef163c 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_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..8fceed5fcf7 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-address = { version = "1.0.0", path = "../../associated-token-address" } 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..8819de544bf 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_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..484fd386a9d 100644 --- a/token-upgrade/cli/Cargo.toml +++ b/token-upgrade/cli/Cargo.toml @@ -20,6 +20,7 @@ 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-address = { version = "1.0.0", path = "../../associated-token-address" } 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..d5ab865062a 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_address::get_associated_token_address_with_program_id, spl_token_2022::{ extension::StateWithExtensions, state::{Account, Mint}, From 24f03807d59b321fc478f089f4bf8868374a0e54 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 10 Jul 2024 21:46:42 +0400 Subject: [PATCH 03/13] use spl-program-ids in associated-token-address crate --- Cargo.lock | 1 + associated-token-address/Cargo.toml | 1 + associated-token-address/src/lib.rs | 8 ++------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a513658b7e9..28dd623b58a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6887,6 +6887,7 @@ name = "spl-associated-token-address" version = "1.0.0" dependencies = [ "solana-program", + "spl-program-ids", ] [[package]] diff --git a/associated-token-address/Cargo.toml b/associated-token-address/Cargo.toml index cf15cc7ead5..06cf8ccba98 100644 --- a/associated-token-address/Cargo.toml +++ b/associated-token-address/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" [dependencies] solana-program = "2.0.0" +spl-program-ids = { path = "../program-ids", version = "1.0.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/associated-token-address/src/lib.rs b/associated-token-address/src/lib.rs index 92ba1d8ad0a..3c1b8bdfef1 100644 --- a/associated-token-address/src/lib.rs +++ b/associated-token-address/src/lib.rs @@ -22,10 +22,6 @@ pub fn get_associated_token_address_and_bump_seed( ) } -const TOKEN_PROGRAM_ID: Pubkey = solana_program::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); -/// Program ID for the Associated Token Program -pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey = solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); - /// Derives the associated token account address for the given wallet address /// and token mint pub fn get_associated_token_address( @@ -35,7 +31,7 @@ pub fn get_associated_token_address( get_associated_token_address_with_program_id( wallet_address, token_mint_address, - &TOKEN_PROGRAM_ID, + &spl_program_ids::spl_token::ID, ) } @@ -49,7 +45,7 @@ pub fn get_associated_token_address_with_program_id( get_associated_token_address_and_bump_seed( wallet_address, token_mint_address, - &ASSOCIATED_TOKEN_PROGRAM_ID, + &spl_program_ids::spl_associated_token_account::ID, token_program_id, ) .0 From b9cfae065f7213afbecb0b166270cdc2a4e2eea0 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 10 Jul 2024 22:08:18 +0400 Subject: [PATCH 04/13] update imports in repo --- Cargo.lock | 7 ++++--- associated-token-account/program/src/instruction.rs | 3 ++- managed-token/program/tests/test.rs | 5 ++--- single-pool/cli/Cargo.toml | 3 --- single-pool/program/Cargo.toml | 7 ++++--- single-pool/program/tests/deposit.rs | 2 +- single-pool/program/tests/helpers/mod.rs | 2 +- token/cli/Cargo.toml | 4 +--- token/cli/src/bench.rs | 2 +- token/cli/src/command.rs | 2 +- token/cli/src/config.rs | 2 +- token/cli/src/sort.rs | 2 +- token/cli/tests/command.rs | 4 ++-- token/client/Cargo.toml | 1 + token/client/src/token.rs | 6 ++---- 15 files changed, 24 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28dd623b58a..48ed9ad7375 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7380,6 +7380,7 @@ dependencies = [ "solana-security-txt", "solana-vote-program", "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-token 6.0.0", "test-case", "thiserror", @@ -7409,7 +7410,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", @@ -7607,7 +7607,6 @@ dependencies = [ "solana-program", "solana-program-test", "solana-sdk", - "spl-associated-token-account 4.0.0", "spl-instruction-padding", "spl-memo 5.0.0", "spl-pod 0.3.1", @@ -7648,8 +7647,9 @@ dependencies = [ "solana-sdk", "solana-test-validator", "solana-transaction-status", - "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-memo 5.0.0", + "spl-program-ids", "spl-token 6.0.0", "spl-token-2022 4.0.1", "spl-token-client", @@ -7679,6 +7679,7 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "spl-associated-token-account 4.0.0", + "spl-associated-token-address", "spl-memo 5.0.0", "spl-record", "spl-token 6.0.0", diff --git a/associated-token-account/program/src/instruction.rs b/associated-token-account/program/src/instruction.rs index 728d2abcf3a..87981b47b33 100644 --- a/associated-token-account/program/src/instruction.rs +++ b/associated-token-account/program/src/instruction.rs @@ -1,13 +1,14 @@ //! Program instructions use { - crate::{get_associated_token_address_with_program_id, id}, + crate::id, assert_matches::assert_matches, borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, solana_program::{ instruction::{AccountMeta, Instruction}, pubkey::Pubkey, }, + spl_associated_token_address::get_associated_token_address_with_program_id, }; /// Instructions supported by the AssociatedTokenAccount program diff --git a/managed-token/program/tests/test.rs b/managed-token/program/tests/test.rs index 7ddaf49ca09..456e1632714 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_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..2ecd936d348 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-address = { version = "1.0.0", path = "../../associated-token-address" } 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..42417522254 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_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..488f24b4048 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_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/token/cli/Cargo.toml b/token/cli/Cargo.toml index ccca7647891..522752f11ad 100644 --- a/token/cli/Cargo.toml +++ b/token/cli/Cargo.toml @@ -38,9 +38,7 @@ 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-associated-token-address = { version = "1.0.0", path = "../../associated-token-address" } 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..54af185f610 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_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..0b874ed60b4 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_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..079443fa492 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_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..5363c53bcc1 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_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..c5feeab4e4f 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_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_program_ids::spl_associated_token_account::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..1b897fbaef3 100644 --- a/token/client/Cargo.toml +++ b/token/client/Cargo.toml @@ -24,6 +24,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-address = { version = "1.0.0", path = "../../associated-token-address" } 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..e58de2ba720 100644 --- a/token/client/src/token.rs +++ b/token/client/src/token.rs @@ -21,12 +21,10 @@ use { system_instruction, transaction::Transaction, }, - spl_associated_token_account::{ - get_associated_token_address_with_program_id, - instruction::{ + spl_associated_token_account::instruction::{ create_associated_token_account, create_associated_token_account_idempotent, - }, }, + spl_associated_token_address::get_associated_token_address_with_program_id, spl_record::state::RecordData, spl_token_2022::{ extension::{ From a464e47d34dd0ac2ca2b0b6afc7566a9d5344efa Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 18 Jul 2024 23:20:39 +0400 Subject: [PATCH 05/13] use solana-inline-spl instead of spl-program-ids --- associated-token-address/Cargo.toml | 4 ++-- associated-token-address/src/lib.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/associated-token-address/Cargo.toml b/associated-token-address/Cargo.toml index 06cf8ccba98..b00d75ef006 100644 --- a/associated-token-address/Cargo.toml +++ b/associated-token-address/Cargo.toml @@ -8,8 +8,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program = "2.0.0" -spl-program-ids = { path = "../program-ids", version = "1.0.0" } +solana-inline-spl = "2.1.0" +solana-program = "2.1.0" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/associated-token-address/src/lib.rs b/associated-token-address/src/lib.rs index 3c1b8bdfef1..b7278dd41c8 100644 --- a/associated-token-address/src/lib.rs +++ b/associated-token-address/src/lib.rs @@ -31,7 +31,7 @@ pub fn get_associated_token_address( get_associated_token_address_with_program_id( wallet_address, token_mint_address, - &spl_program_ids::spl_token::ID, + &solana_inline_spl::spl_token::ID, ) } @@ -45,7 +45,7 @@ pub fn get_associated_token_address_with_program_id( get_associated_token_address_and_bump_seed( wallet_address, token_mint_address, - &spl_program_ids::spl_associated_token_account::ID, + &solana_inline_spl::spl_associated_token_account::ID, token_program_id, ) .0 From 4266e4f60a1517a34a2e4be52e59f85e0bc0d965 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 18 Jul 2024 23:44:27 +0400 Subject: [PATCH 06/13] remove remaining references to spl-program-ids --- Cargo.lock | 3 +-- token/cli/tests/command.rs | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 48ed9ad7375..898b0ccd8fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6886,8 +6886,8 @@ dependencies = [ name = "spl-associated-token-address" version = "1.0.0" dependencies = [ + "solana-inline-spl", "solana-program", - "spl-program-ids", ] [[package]] @@ -7649,7 +7649,6 @@ dependencies = [ "solana-transaction-status", "spl-associated-token-address", "spl-memo 5.0.0", - "spl-program-ids", "spl-token 6.0.0", "spl-token-2022 4.0.1", "spl-token-client", diff --git a/token/cli/tests/command.rs b/token/cli/tests/command.rs index c5feeab4e4f..366a90d6adc 100644 --- a/token/cli/tests/command.rs +++ b/token/cli/tests/command.rs @@ -167,7 +167,7 @@ async fn new_validator_for_test() -> (TestValidator, Keypair) { upgrade_authority: Pubkey::new_unique(), }, UpgradeableProgramInfo { - program_id: spl_program_ids::spl_associated_token_account::id(), + program_id: spl_associated_token_address::id(), loader: bpf_loader_upgradeable::id(), program_path: PathBuf::from("../../target/deploy/spl_associated_token_account.so"), upgrade_authority: Pubkey::new_unique(), From f817ceea9d7ff7c3e4a9c5abbd7496262cb5efe0 Mon Sep 17 00:00:00 2001 From: Jon C Date: Mon, 26 Aug 2024 23:38:12 +0200 Subject: [PATCH 07/13] Rename associated-token-address -> associated-token-account-client --- Cargo.toml | 2 +- .../client}/Cargo.toml | 8 +- .../client/src/address.rs | 10 +- .../client/src/instruction.rs | 106 ++++++++++++++++ associated-token-account/client/src/lib.rs | 8 ++ associated-token-account/program/Cargo.toml | 2 +- .../program/src/instruction.rs | 117 +----------------- associated-token-account/program/src/lib.rs | 7 +- 8 files changed, 129 insertions(+), 131 deletions(-) rename {associated-token-address => associated-token-account/client}/Cargo.toml (62%) rename associated-token-address/src/lib.rs => associated-token-account/client/src/address.rs (85%) create mode 100644 associated-token-account/client/src/instruction.rs create mode 100644 associated-token-account/client/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 4cdfb7f40cf..6646127b161 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,9 +3,9 @@ split-debuginfo = "unpacked" [workspace] members = [ + "associated-token-account/client", "associated-token-account/program", "associated-token-account/program-test", - "associated-token-address", "binary-option/program", "binary-oracle-pair/program", "examples/rust/cross-program-invocation", diff --git a/associated-token-address/Cargo.toml b/associated-token-account/client/Cargo.toml similarity index 62% rename from associated-token-address/Cargo.toml rename to associated-token-account/client/Cargo.toml index b00d75ef006..d1660600886 100644 --- a/associated-token-address/Cargo.toml +++ b/associated-token-account/client/Cargo.toml @@ -1,15 +1,15 @@ [package] -name = "spl-associated-token-address" +name = "spl-associated-token-account-client" version = "1.0.0" -description = "Solana Program Library Associated Token Address" +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-inline-spl = "2.1.0" -solana-program = "2.1.0" +solana-inline-spl = "2.0.3" +solana-program = "2.0.3" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/associated-token-address/src/lib.rs b/associated-token-account/client/src/address.rs similarity index 85% rename from associated-token-address/src/lib.rs rename to associated-token-account/client/src/address.rs index b7278dd41c8..51fdc1eca1f 100644 --- a/associated-token-address/src/lib.rs +++ b/associated-token-account/client/src/address.rs @@ -1,11 +1,7 @@ -//! Convention for associating token accounts with a user wallet -#![deny(missing_docs)] -#![forbid(unsafe_code)] +//! Address derivation functions use solana_program::pubkey::Pubkey; -solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); - /// 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( @@ -31,7 +27,7 @@ pub fn get_associated_token_address( get_associated_token_address_with_program_id( wallet_address, token_mint_address, - &solana_inline_spl::spl_token::ID, + &solana_inline_spl::token::ID, ) } @@ -45,7 +41,7 @@ pub fn get_associated_token_address_with_program_id( get_associated_token_address_and_bump_seed( wallet_address, token_mint_address, - &solana_inline_spl::spl_associated_token_account::ID, + &crate::id(), token_program_id, ) .0 diff --git a/associated-token-account/client/src/instruction.rs b/associated-token-account/client/src/instruction.rs new file mode 100644 index 00000000000..3850f18cd1c --- /dev/null +++ b/associated-token-account/client/src/instruction.rs @@ -0,0 +1,106 @@ +//! Instruction creators for the program +use { + crate::{id, address::get_associated_token_address_with_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..e500e564694 --- /dev/null +++ b/associated-token-account/client/src/lib.rs @@ -0,0 +1,8 @@ +//! Client crate for interacting with the spl-associated-token-account program +#![deny(missing_docs)] +#![forbid(unsafe_code)] + +pub mod address; +pub mod instruction; + +solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); diff --git a/associated-token-account/program/Cargo.toml b/associated-token-account/program/Cargo.toml index 69894b9630b..6a01715dddc 100644 --- a/associated-token-account/program/Cargo.toml +++ b/associated-token-account/program/Cargo.toml @@ -17,7 +17,7 @@ borsh = "1.5.1" num-derive = "0.4" num-traits = "0.2" solana-program = "2.0.3" -spl-associated-token-address = { version = "1.0.0", path = "../../associated-token-address" } +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 87981b47b33..2a81d78d469 100644 --- a/associated-token-account/program/src/instruction.rs +++ b/associated-token-account/program/src/instruction.rs @@ -1,17 +1,10 @@ //! Program instructions -use { - crate::id, - assert_matches::assert_matches, - borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, - solana_program::{ - instruction::{AccountMeta, Instruction}, - pubkey::Pubkey, - }, - spl_associated_token_address::get_associated_token_address_with_program_id, -}; +use borsh::{BorshDeserialize, BorshSchema, BorshSerialize}; +pub use spl_associated_token_account_client::intruction::*; /// Instructions supported by the AssociatedTokenAccount program +#[deprecated(since = "4.1.0", note = "Use instructions in `spl-associated-token-account-client` crate instead.")] #[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize, BorshSchema)] pub enum AssociatedTokenAccountInstruction { /// Creates an associated token account for the given wallet address and @@ -56,107 +49,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 c97b564df67..61f86c0c8a0 100644 --- a/associated-token-account/program/src/lib.rs +++ b/associated-token-account/program/src/lib.rs @@ -17,12 +17,11 @@ use solana_program::{ sysvar, }; - // Export current SDK types for downstream users building with a different SDK // version -pub use {solana_program, spl_associated_token_address::{id, ID, check_id}}; -#[deprecated(since = "4.1.0", note = "Use `spl-associated-token-address` crate instead.")] -pub use spl_associated_token_address::{get_associated_token_address, get_associated_token_address_with_program_id}; +pub use {solana_program, spl_associated_token_account_client::{id, ID, check_id}}; +#[deprecated(since = "4.1.0", note = "Use `spl-associated-token-account-client` crate instead.")] +pub use spl_associated_token_account_client::{get_associated_token_address, get_associated_token_address_with_program_id}; /// Create an associated token account for the given wallet address and token /// mint From 53b5574ffa74c1e2eecc3173a2fc2d753e2fb17d Mon Sep 17 00:00:00 2001 From: Jon C Date: Mon, 26 Aug 2024 23:53:14 +0200 Subject: [PATCH 08/13] Use the new package everywhere --- Cargo.lock | 35 ++++++++++--------- .../client/src/instruction.rs | 5 +-- .../program-test/Cargo.toml | 1 + .../program-test/tests/create_idempotent.rs | 2 +- .../program-test/tests/extended_mint.rs | 2 +- ...process_create_associated_token_account.rs | 2 +- .../program-test/tests/recover_nested.rs | 2 +- .../program-test/tests/spl_token_create.rs | 2 +- .../program/src/instruction.rs | 3 +- associated-token-account/program/src/lib.rs | 12 ++++--- .../program/src/processor.rs | 2 +- managed-token/program/Cargo.toml | 2 +- managed-token/program/src/accounts.rs | 3 +- managed-token/program/src/instruction.rs | 4 +-- managed-token/program/tests/test.rs | 2 +- single-pool/program/Cargo.toml | 2 +- single-pool/program/tests/deposit.rs | 2 +- single-pool/program/tests/helpers/mod.rs | 2 +- stake-pool/cli/Cargo.toml | 2 +- stake-pool/cli/src/main.rs | 2 +- stateless-asks/program/Cargo.toml | 2 +- .../program/src/validation_utils.rs | 2 +- token-upgrade/cli/Cargo.toml | 2 +- token-upgrade/cli/src/main.rs | 2 +- token/cli/Cargo.toml | 2 +- token/cli/src/bench.rs | 2 +- token/cli/src/command.rs | 2 +- token/cli/src/config.rs | 2 +- token/cli/src/sort.rs | 2 +- token/cli/tests/command.rs | 4 +-- token/client/Cargo.toml | 2 +- token/client/src/token.rs | 4 +-- 32 files changed, 62 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 898b0ccd8fe..e5bf1489939 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6848,7 +6848,7 @@ dependencies = [ "num-derive", "num-traits", "solana-program", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-token 6.0.0", "spl-token-2022 4.0.1", "thiserror", @@ -6870,6 +6870,14 @@ dependencies = [ "thiserror", ] +[[package]] +name = "spl-associated-token-account-client" +version = "1.0.0" +dependencies = [ + "solana-inline-spl", + "solana-program", +] + [[package]] name = "spl-associated-token-account-test" version = "0.0.1" @@ -6878,18 +6886,11 @@ 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", ] -[[package]] -name = "spl-associated-token-address" -version = "1.0.0" -dependencies = [ - "solana-inline-spl", - "solana-program", -] - [[package]] name = "spl-binary-oracle-pair" version = "0.1.0" @@ -7200,7 +7201,7 @@ dependencies = [ "solana-program-test", "solana-sdk", "spl-associated-token-account 4.0.0", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-token 6.0.0", "thiserror", ] @@ -7380,7 +7381,7 @@ dependencies = [ "solana-security-txt", "solana-vote-program", "spl-associated-token-account 4.0.0", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-token 6.0.0", "test-case", "thiserror", @@ -7467,7 +7468,7 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "spl-associated-token-account 4.0.0", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-stake-pool", "spl-token 6.0.0", ] @@ -7607,6 +7608,7 @@ dependencies = [ "solana-program", "solana-program-test", "solana-sdk", + "spl-associated-token-account 4.0.0", "spl-instruction-padding", "spl-memo 5.0.0", "spl-pod 0.3.1", @@ -7647,7 +7649,7 @@ dependencies = [ "solana-sdk", "solana-test-validator", "solana-transaction-status", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-memo 5.0.0", "spl-token 6.0.0", "spl-token-2022 4.0.1", @@ -7678,7 +7680,7 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "spl-associated-token-account 4.0.0", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-memo 5.0.0", "spl-record", "spl-token 6.0.0", @@ -7929,7 +7931,8 @@ dependencies = [ "solana-remote-wallet", "solana-sdk", "solana-test-validator", - "spl-associated-token-address", + "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", @@ -8074,7 +8077,7 @@ dependencies = [ "solana-program", "solana-program-test", "solana-sdk", - "spl-associated-token-address", + "spl-associated-token-account-client", "spl-token 6.0.0", "thiserror", ] diff --git a/associated-token-account/client/src/instruction.rs b/associated-token-account/client/src/instruction.rs index 3850f18cd1c..dbea1d9837c 100644 --- a/associated-token-account/client/src/instruction.rs +++ b/associated-token-account/client/src/instruction.rs @@ -1,9 +1,10 @@ //! Instruction creators for the program use { - crate::{id, address::get_associated_token_address_with_program_id}, + crate::{address::get_associated_token_address_with_program_id, id}, solana_program::{ instruction::{AccountMeta, Instruction}, - pubkey::Pubkey, system_program, + pubkey::Pubkey, + system_program, }, }; 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 6c6c9cc145b..8f89e856dd0 100644 --- a/associated-token-account/program-test/tests/create_idempotent.rs +++ b/associated-token-account/program-test/tests/create_idempotent.rs @@ -21,7 +21,7 @@ use { create_associated_token_account, create_associated_token_account_idempotent, }, }, - spl_associated_token_address::get_associated_token_address_with_program_id, + 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 d8f655f8e8a..1ee0b5513e5 100644 --- a/associated-token-account/program-test/tests/extended_mint.rs +++ b/associated-token-account/program-test/tests/extended_mint.rs @@ -14,7 +14,7 @@ use { transaction::{Transaction, TransactionError}, }, spl_associated_token_account::instruction::create_associated_token_account, - spl_associated_token_address::get_associated_token_address_with_program_id, + 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 cb6d3600f2a..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 @@ -13,7 +13,7 @@ use { transaction::{Transaction, TransactionError}, }, spl_associated_token_account::instruction::create_associated_token_account, - spl_associated_token_address::get_associated_token_address_with_program_id, + 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 fd266054b33..bd06ae529d6 100644 --- a/associated-token-account/program-test/tests/recover_nested.rs +++ b/associated-token-account/program-test/tests/recover_nested.rs @@ -15,7 +15,7 @@ use { transaction::{Transaction, TransactionError}, }, spl_associated_token_account::instruction, - spl_associated_token_address::get_associated_token_address_with_program_id, + 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 ffaa5b2665c..b95e0e67036 100644 --- a/associated-token-account/program-test/tests/spl_token_create.rs +++ b/associated-token-account/program-test/tests/spl_token_create.rs @@ -12,7 +12,7 @@ use { solana_program_test::*, solana_sdk::{program_pack::Pack, signature::Signer, transaction::Transaction}, spl_associated_token_account::instruction::create_associated_token_account, - spl_associated_token_address::get_associated_token_address, + spl_associated_token_account_client::address::get_associated_token_address, spl_token::state::Account, }; diff --git a/associated-token-account/program/src/instruction.rs b/associated-token-account/program/src/instruction.rs index 2a81d78d469..51453b9ae14 100644 --- a/associated-token-account/program/src/instruction.rs +++ b/associated-token-account/program/src/instruction.rs @@ -1,10 +1,9 @@ //! Program instructions use borsh::{BorshDeserialize, BorshSchema, BorshSerialize}; -pub use spl_associated_token_account_client::intruction::*; +pub use spl_associated_token_account_client::instruction::*; /// Instructions supported by the AssociatedTokenAccount program -#[deprecated(since = "4.1.0", note = "Use instructions in `spl-associated-token-account-client` crate instead.")] #[derive(Clone, Debug, PartialEq, BorshDeserialize, BorshSerialize, BorshSchema)] pub enum AssociatedTokenAccountInstruction { /// Creates an associated token account for the given wallet address and diff --git a/associated-token-account/program/src/lib.rs b/associated-token-account/program/src/lib.rs index 61f86c0c8a0..d62883dd212 100644 --- a/associated-token-account/program/src/lib.rs +++ b/associated-token-account/program/src/lib.rs @@ -16,12 +16,16 @@ use solana_program::{ pubkey::Pubkey, sysvar, }; - +#[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 {solana_program, spl_associated_token_account_client::{id, ID, check_id}}; -#[deprecated(since = "4.1.0", note = "Use `spl-associated-token-account-client` crate instead.")] -pub use spl_associated_token_account_client::{get_associated_token_address, get_associated_token_address_with_program_id}; +pub use spl_associated_token_account_client::{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 f8346a7b1c2..f0063908c78 100644 --- a/associated-token-account/program/src/processor.rs +++ b/associated-token-account/program/src/processor.rs @@ -18,7 +18,7 @@ use { system_program, sysvar::Sysvar, }, - spl_associated_token_address::get_associated_token_address_and_bump_seed_internal, + 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 f485cc436d6..9aaf9d19f2f 100644 --- a/managed-token/program/Cargo.toml +++ b/managed-token/program/Cargo.toml @@ -28,7 +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-address = { version = "1.0.0", path = "../../associated-token-address" } +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 3dd25af8862..f92b63f7876 100644 --- a/managed-token/program/src/accounts.rs +++ b/managed-token/program/src/accounts.rs @@ -5,7 +5,6 @@ use { program_error::ProgramError, system_program, }, - spl_associated_token_address::ASSOCIATED_TOKEN_PROGRAM_ID, }; pub struct InitializeMint<'a, 'info> { @@ -117,7 +116,7 @@ impl<'a, 'info> InitializeAccount<'a, 'info> { "Invalid key supplied for System Program", )?; assert_with_msg( - ctx.associated_token_program.key == &ASSOCIATED_TOKEN_PROGRAM_ID, + ctx.associated_token_program.key == &spl_associated_token_account_client::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 26d400818d9..ffc0d7e8e42 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_address::{get_associated_token_address, ASSOCIATED_TOKEN_PROGRAM_ID}, + 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(ASSOCIATED_TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(spl_associated_token_account_client::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 456e1632714..3d7600d0237 100644 --- a/managed-token/program/tests/test.rs +++ b/managed-token/program/tests/test.rs @@ -11,7 +11,7 @@ use { transaction::Transaction, }, spl_associated_token_account::instruction::create_associated_token_account, - spl_associated_token_address::get_associated_token_address, + 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/program/Cargo.toml b/single-pool/program/Cargo.toml index 2ecd936d348..d5ed3ee79db 100644 --- a/single-pool/program/Cargo.toml +++ b/single-pool/program/Cargo.toml @@ -31,7 +31,7 @@ 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-address = { version = "1.0.0", path = "../../associated-token-address" } +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 42417522254..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_address 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 488f24b4048..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_address 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 6aa546af980..22a9397fc5b 100644 --- a/stake-pool/cli/Cargo.toml +++ b/stake-pool/cli/Cargo.toml @@ -26,7 +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-address = { version = "=1.0.0", path = "../../associated-token-address" } +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 e2f0aef163c..e56990f1c9b 100644 --- a/stake-pool/cli/src/main.rs +++ b/stake-pool/cli/src/main.rs @@ -44,7 +44,7 @@ use { transaction::Transaction, }, spl_associated_token_account::instruction::create_associated_token_account, - spl_associated_token_address::get_associated_token_address, + 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 8fceed5fcf7..2529e378e03 100644 --- a/stateless-asks/program/Cargo.toml +++ b/stateless-asks/program/Cargo.toml @@ -16,7 +16,7 @@ solana-program = "2.0.3" spl-token = { version = "6.0", path = "../../token/program", features = [ "no-entrypoint", ] } -spl-associated-token-address = { version = "1.0.0", path = "../../associated-token-address" } +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 8819de544bf..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_address::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 484fd386a9d..18a7c927731 100644 --- a/token-upgrade/cli/Cargo.toml +++ b/token-upgrade/cli/Cargo.toml @@ -20,7 +20,7 @@ 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-address = { version = "1.0.0", path = "../../associated-token-address" } +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 d5ab865062a..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_address::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 522752f11ad..956dae8c0c1 100644 --- a/token/cli/Cargo.toml +++ b/token/cli/Cargo.toml @@ -38,7 +38,7 @@ 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-address = { version = "1.0.0", path = "../../associated-token-address" } +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/cli/src/bench.rs b/token/cli/src/bench.rs index 54af185f610..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_address::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, instruction, diff --git a/token/cli/src/command.rs b/token/cli/src/command.rs index 0b874ed60b4..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_address::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 079443fa492..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_address::get_associated_token_address_with_program_id, + 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 5363c53bcc1..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_address::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 366a90d6adc..e60ec9da2ac 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_address::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_address::id(), + program_id: spl_associated_token_account_client::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 1b897fbaef3..400e2d4b872 100644 --- a/token/client/Cargo.toml +++ b/token/client/Cargo.toml @@ -24,7 +24,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-address = { version = "1.0.0", path = "../../associated-token-address" } +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 e58de2ba720..7561b4f239c 100644 --- a/token/client/src/token.rs +++ b/token/client/src/token.rs @@ -22,9 +22,9 @@ use { transaction::Transaction, }, spl_associated_token_account::instruction::{ - create_associated_token_account, create_associated_token_account_idempotent, + create_associated_token_account, create_associated_token_account_idempotent, }, - spl_associated_token_address::get_associated_token_address_with_program_id, + spl_associated_token_account_client::address::get_associated_token_address_with_program_id, spl_record::state::RecordData, spl_token_2022::{ extension::{ From f6ac427da1559dadbd0db444e34d8bda36dc9364 Mon Sep 17 00:00:00 2001 From: Jon C Date: Tue, 27 Aug 2024 00:06:32 +0200 Subject: [PATCH 09/13] Remove solana-inline-spl dependency --- Cargo.lock | 2 -- associated-token-account/client/Cargo.toml | 1 - associated-token-account/client/src/address.rs | 6 +++++- associated-token-account/program/Cargo.toml | 1 - 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e5bf1489939..6f15309baeb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6843,7 +6843,6 @@ checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" name = "spl-associated-token-account" version = "4.0.0" dependencies = [ - "assert_matches", "borsh 1.5.1", "num-derive", "num-traits", @@ -6874,7 +6873,6 @@ dependencies = [ name = "spl-associated-token-account-client" version = "1.0.0" dependencies = [ - "solana-inline-spl", "solana-program", ] diff --git a/associated-token-account/client/Cargo.toml b/associated-token-account/client/Cargo.toml index d1660600886..6308d571173 100644 --- a/associated-token-account/client/Cargo.toml +++ b/associated-token-account/client/Cargo.toml @@ -8,7 +8,6 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-inline-spl = "2.0.3" solana-program = "2.0.3" [package.metadata.docs.rs] diff --git a/associated-token-account/client/src/address.rs b/associated-token-account/client/src/address.rs index 51fdc1eca1f..d7351b441db 100644 --- a/associated-token-account/client/src/address.rs +++ b/associated-token-account/client/src/address.rs @@ -18,6 +18,10 @@ pub fn get_associated_token_address_and_bump_seed( ) } +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( @@ -27,7 +31,7 @@ pub fn get_associated_token_address( get_associated_token_address_with_program_id( wallet_address, token_mint_address, - &solana_inline_spl::token::ID, + &inline_spl_token::ID, ) } diff --git a/associated-token-account/program/Cargo.toml b/associated-token-account/program/Cargo.toml index 6a01715dddc..7cc693cb8ff 100644 --- a/associated-token-account/program/Cargo.toml +++ b/associated-token-account/program/Cargo.toml @@ -12,7 +12,6 @@ no-entrypoint = [] test-sbf = [] [dependencies] -assert_matches = "1.5.0" borsh = "1.5.1" num-derive = "0.4" num-traits = "0.2" From 52fc28e07e423f962e1b079def442bc530bb33f0 Mon Sep 17 00:00:00 2001 From: Jon C Date: Tue, 27 Aug 2024 00:20:56 +0200 Subject: [PATCH 10/13] Remove dependency on ata program from token-client --- Cargo.lock | 1 - token/cli/Cargo.toml | 2 +- token/client/Cargo.toml | 5 ----- token/client/src/token.rs | 8 +++++--- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f15309baeb..3236ef94df7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7677,7 +7677,6 @@ 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", diff --git a/token/cli/Cargo.toml b/token/cli/Cargo.toml index 956dae8c0c1..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,7 +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-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/Cargo.toml b/token/client/Cargo.toml index 400e2d4b872..305fbc67450 100644 --- a/token/client/Cargo.toml +++ b/token/client/Cargo.toml @@ -19,11 +19,6 @@ 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 7561b4f239c..33352f62c27 100644 --- a/token/client/src/token.rs +++ b/token/client/src/token.rs @@ -21,10 +21,12 @@ use { system_instruction, transaction::Transaction, }, - spl_associated_token_account::instruction::{ - create_associated_token_account, create_associated_token_account_idempotent, + spl_associated_token_account_client::{ + address::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_record::state::RecordData, spl_token_2022::{ extension::{ From e302226ce109ea276ca6dc03765bd83c47abe645 Mon Sep 17 00:00:00 2001 From: Jon C Date: Tue, 27 Aug 2024 00:42:21 +0200 Subject: [PATCH 11/13] Add #[doc(hidden)] attribute to internal function --- associated-token-account/client/src/address.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/associated-token-account/client/src/address.rs b/associated-token-account/client/src/address.rs index d7351b441db..c5c30dc5fda 100644 --- a/associated-token-account/client/src/address.rs +++ b/associated-token-account/client/src/address.rs @@ -52,6 +52,7 @@ pub fn get_associated_token_address_with_program_id( } /// For internal use only. +#[doc(hidden)] pub fn get_associated_token_address_and_bump_seed_internal( wallet_address: &Pubkey, token_mint_address: &Pubkey, From 3d275cefa168d26e3b1201fd127b3c1993970ef9 Mon Sep 17 00:00:00 2001 From: Jon C Date: Tue, 27 Aug 2024 14:57:54 +0200 Subject: [PATCH 12/13] Remove ATA from token upgrade CLI --- Cargo.lock | 1 - token-upgrade/cli/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3236ef94df7..55dd73d92a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7928,7 +7928,6 @@ 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", diff --git a/token-upgrade/cli/Cargo.toml b/token-upgrade/cli/Cargo.toml index 18a7c927731..86e2e29db99 100644 --- a/token-upgrade/cli/Cargo.toml +++ b/token-upgrade/cli/Cargo.toml @@ -19,7 +19,6 @@ 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"] } From 50b7023c5f0b7180f945d28073552ee23e278075 Mon Sep 17 00:00:00 2001 From: Jon C Date: Tue, 27 Aug 2024 15:01:44 +0200 Subject: [PATCH 13/13] Add program module for program id --- associated-token-account/client/src/address.rs | 2 +- associated-token-account/client/src/instruction.rs | 2 +- associated-token-account/client/src/lib.rs | 5 ++++- associated-token-account/program/src/lib.rs | 2 +- managed-token/program/src/accounts.rs | 2 +- managed-token/program/src/instruction.rs | 2 +- token/cli/tests/command.rs | 2 +- 7 files changed, 10 insertions(+), 7 deletions(-) diff --git a/associated-token-account/client/src/address.rs b/associated-token-account/client/src/address.rs index c5c30dc5fda..9bb3db719ec 100644 --- a/associated-token-account/client/src/address.rs +++ b/associated-token-account/client/src/address.rs @@ -45,7 +45,7 @@ pub fn get_associated_token_address_with_program_id( get_associated_token_address_and_bump_seed( wallet_address, token_mint_address, - &crate::id(), + &crate::program::id(), token_program_id, ) .0 diff --git a/associated-token-account/client/src/instruction.rs b/associated-token-account/client/src/instruction.rs index dbea1d9837c..6cad63d9306 100644 --- a/associated-token-account/client/src/instruction.rs +++ b/associated-token-account/client/src/instruction.rs @@ -1,6 +1,6 @@ //! Instruction creators for the program use { - crate::{address::get_associated_token_address_with_program_id, id}, + crate::{address::get_associated_token_address_with_program_id, program::id}, solana_program::{ instruction::{AccountMeta, Instruction}, pubkey::Pubkey, diff --git a/associated-token-account/client/src/lib.rs b/associated-token-account/client/src/lib.rs index e500e564694..6a40abf2ed0 100644 --- a/associated-token-account/client/src/lib.rs +++ b/associated-token-account/client/src/lib.rs @@ -5,4 +5,7 @@ pub mod address; pub mod instruction; -solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); +/// Module defining the program id +pub mod program { + solana_program::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); +} diff --git a/associated-token-account/program/src/lib.rs b/associated-token-account/program/src/lib.rs index d62883dd212..5778456aa27 100644 --- a/associated-token-account/program/src/lib.rs +++ b/associated-token-account/program/src/lib.rs @@ -25,7 +25,7 @@ pub use spl_associated_token_account_client::address::{ }; // Export current SDK types for downstream users building with a different SDK // version -pub use spl_associated_token_account_client::{check_id, id, ID}; +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/managed-token/program/src/accounts.rs b/managed-token/program/src/accounts.rs index f92b63f7876..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_client::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 ffc0d7e8e42..bf22c82c817 100644 --- a/managed-token/program/src/instruction.rs +++ b/managed-token/program/src/instruction.rs @@ -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_client::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/token/cli/tests/command.rs b/token/cli/tests/command.rs index e60ec9da2ac..e13ce549c09 100644 --- a/token/cli/tests/command.rs +++ b/token/cli/tests/command.rs @@ -167,7 +167,7 @@ async fn new_validator_for_test() -> (TestValidator, Keypair) { upgrade_authority: Pubkey::new_unique(), }, UpgradeableProgramInfo { - program_id: spl_associated_token_account_client::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(),