The System & Token Programs
Include Program<'info, System>, Program<'info, Token>, and related program accounts in every instruction that CPIs to them. Anchor pins IDs to prevent program substitution.
Search across all documentation pages
Include Program<'info, System>, Program<'info, Token>, and related program accounts in every instruction that CPIs to them. Anchor pins IDs to prevent program substitution.
pub system_program: Program<'info, System>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,When to reach for this: Instructions create accounts, transfer SOL, or move SPL tokens.
#[derive(Accounts)]
pub struct CreateAta<'info> {
#[account(mut)]
pub payer: Signer<'info>,
pub mint: Account<'info, Mint>,
#[account(
init,
payer = payer,
associated_token::mint = mint,
associated_token::authority = owner,
)]
pub ata: Account<'info, TokenAccount>,
pub owner: SystemAccount<'info>,
pub system_program: Program<'info, System>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,
}What this demonstrates:
| Program | Anchor type |
|---|---|
| System | Program<'info, System> |
| SPL Token | Program<'info, Token> |
| Associated Token | Program<'info, AssociatedToken> |
| Token-2022 | Interface<'info, TokenInterface> |
Import from anchor_lang::system_program and anchor_spl::token.
| Alternative | Use When | Don't Use When |
|---|---|---|
| CpiContext with program account | Same requirement | Unchecked program AccountInfo |
| Native invoke with hardcoded IDs | Non-Anchor | Anchor Program<T> safety |
0.32.1 throughout this section.
No. Use seeds constraints and CPI signing.
In your account struct field, set at initialization.
Use @solana/kit 7.0.0 with matching seed bytes.
Your Anchor program's declare_id address.
Not in seeds array; bump is separate parameter to find_program_address.
Compare logged keys; verify seeds and program id client-side.
Yes when holding data; fund with payer on init.
Yes with same signer seeds for each CPI.
See Related links for deeper system token topics.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026