anchor_spl/
associated_token.rs1#![allow(deprecated)]
3pub use ::spl_associated_token_account_interface::{
4 self as spl_associated_token_account,
5 address::{get_associated_token_address, get_associated_token_address_with_program_id},
6 program::ID,
7};
8use anchor_lang::{
9 context::CpiContext,
10 solana_program::{account_info::AccountInfo, pubkey::Pubkey},
11 Accounts, Result,
12};
13
14pub fn create<'info>(ctx: CpiContext<'_, '_, '_, 'info, Create<'info>>) -> Result<()> {
15 let ix = spl_associated_token_account::instruction::create_associated_token_account(
16 ctx.accounts.payer.key,
17 ctx.accounts.authority.key,
18 ctx.accounts.mint.key,
19 ctx.accounts.token_program.key,
20 );
21 anchor_lang::solana_program::program::invoke_signed(
22 &ix,
23 &[
24 ctx.accounts.payer,
25 ctx.accounts.associated_token,
26 ctx.accounts.authority,
27 ctx.accounts.mint,
28 ctx.accounts.system_program,
29 ctx.accounts.token_program,
30 ],
31 ctx.signer_seeds,
32 )
33 .map_err(Into::into)
34}
35
36pub fn create_idempotent<'info>(
37 ctx: CpiContext<'_, '_, '_, 'info, CreateIdempotent<'info>>,
38) -> Result<()> {
39 let ix = spl_associated_token_account::instruction::create_associated_token_account_idempotent(
40 ctx.accounts.payer.key,
41 ctx.accounts.authority.key,
42 ctx.accounts.mint.key,
43 ctx.accounts.token_program.key,
44 );
45 anchor_lang::solana_program::program::invoke_signed(
46 &ix,
47 &[
48 ctx.accounts.payer,
49 ctx.accounts.associated_token,
50 ctx.accounts.authority,
51 ctx.accounts.mint,
52 ctx.accounts.system_program,
53 ctx.accounts.token_program,
54 ],
55 ctx.signer_seeds,
56 )
57 .map_err(Into::into)
58}
59
60#[derive(Accounts)]
61pub struct Create<'info> {
62 pub payer: AccountInfo<'info>,
63 pub associated_token: AccountInfo<'info>,
64 pub authority: AccountInfo<'info>,
65 pub mint: AccountInfo<'info>,
66 pub system_program: AccountInfo<'info>,
67 pub token_program: AccountInfo<'info>,
68}
69
70type CreateIdempotent<'info> = Create<'info>;
71
72#[derive(Clone)]
73pub struct AssociatedToken;
74
75impl anchor_lang::Id for AssociatedToken {
76 fn id() -> Pubkey {
77 ID
78 }
79}