anchor_spl/token_2022_extensions/
immutable_owner.rs

1use anchor_lang::solana_program::account_info::AccountInfo;
2use anchor_lang::solana_program::pubkey::Pubkey;
3use anchor_lang::Result;
4use anchor_lang::{context::CpiContext, Accounts};
5
6pub fn immutable_owner_initialize<'info>(
7    ctx: CpiContext<'_, '_, '_, 'info, ImmutableOwnerInitialize<'info>>,
8) -> Result<()> {
9    let ix = spl_token_2022::instruction::initialize_immutable_owner(
10        ctx.accounts.token_program_id.key,
11        ctx.accounts.token_account.key,
12    )?;
13    anchor_lang::solana_program::program::invoke_signed(
14        &ix,
15        &[ctx.accounts.token_program_id, ctx.accounts.token_account],
16        ctx.signer_seeds,
17    )
18    .map_err(Into::into)
19}
20
21#[derive(Accounts)]
22pub struct ImmutableOwnerInitialize<'info> {
23    pub token_program_id: AccountInfo<'info>,
24    pub token_account: AccountInfo<'info>,
25}