Skip to main content

clone_spl_associated_token_account/
lib.rs

1//! Convention for associating token accounts with a user wallet
2#![deny(missing_docs)]
3#![forbid(unsafe_code)]
4
5mod entrypoint;
6pub mod error;
7pub mod instruction;
8pub mod processor;
9pub mod tools;
10
11// Export current SDK types for downstream users building with a different SDK
12// version
13pub use clone_solana_program;
14use clone_solana_program::{
15    instruction::{AccountMeta, Instruction},
16    pubkey::Pubkey,
17    sysvar,
18};
19#[deprecated(
20    since = "4.1.0",
21    note = "Use `spl-associated-token-account-client` crate instead."
22)]
23pub use clone_spl_associated_token_account_client::address::{
24    get_associated_token_address, get_associated_token_address_with_program_id,
25};
26// Export current SDK types for downstream users building with a different SDK
27// version
28pub use clone_spl_associated_token_account_client::program::{check_id, id, ID};
29
30/// Create an associated token account for the given wallet address and token
31/// mint
32///
33/// Accounts expected by this instruction:
34///
35///   0. `[writeable,signer]` Funding account (must be a system account)
36///   1. `[writeable]` Associated token account address to be created
37///   2. `[]` Wallet address for the new associated token account
38///   3. `[]` The token mint for the new associated token account
39///   4. `[]` System program
40///   5. `[]` SPL Token program
41#[deprecated(
42    since = "1.0.5",
43    note = "please use `instruction::create_associated_token_account` instead"
44)]
45pub fn create_associated_token_account(
46    funding_address: &Pubkey,
47    wallet_address: &Pubkey,
48    token_mint_address: &Pubkey,
49) -> Instruction {
50    let associated_account_address =
51        get_associated_token_address(wallet_address, token_mint_address);
52
53    Instruction {
54        program_id: id(),
55        accounts: vec![
56            AccountMeta::new(*funding_address, true),
57            AccountMeta::new(associated_account_address, false),
58            AccountMeta::new_readonly(*wallet_address, false),
59            AccountMeta::new_readonly(*token_mint_address, false),
60            AccountMeta::new_readonly(clone_solana_program::system_program::id(), false),
61            AccountMeta::new_readonly(clone_spl_token::id(), false),
62            AccountMeta::new_readonly(sysvar::rent::id(), false),
63        ],
64        data: vec![],
65    }
66}