Anchor
Token2022 di Anchor

Token2022 di Anchor

Ekstensi Mint Close Authority

Ekstensi MintCloseAuthority adalah ekstensi Mint yang memungkinkan otoritas untuk menutup dan mengambil kembali rent dari akun Mint yang memiliki suplai saat ini sebesar 0.

Ekstensi ini berguna untuk membersihkan mint yang tidak digunakan dan mengklaim kembali SOL yang digunakan untuk membayar rent exemption akun. Mint hanya dapat ditutup ketika tidak ada token yang beredar.

Menginisialisasi Akun Mint

Untuk menginisialisasi ekstensi MintCloseAuthority pada akun Mint kita dapat menggunakan makro yang dibuat oleh Anchor untuk kita.

Berikut cara membuat mint dengan ekstensi Mint Close:

rust
#[derive(Accounts)]
pub struct CreateMint<'info> {
    #[account(mut)]
    pub signer: Signer<'info>,
    #[account(
        init,
        payer = signer,
        mint::decimals = 6,
        mint::authority = signer.key(),
        mint::token_program = token_program
        extensions::close_authority::authority = signer,
    )]
    pub mint: InterfaceAccount<'info, Mint>,
    pub system_program: Program<'info, System>,
    pub token_program: Interface<'info, TokenInterface>,
}

Menutup Akun Mint

Jika akun Mint memiliki suplai nol, CloseMint Authority dapat mengklaim kembali rent pada akun tersebut dengan menggunakan instruksi close_account() seperti ini:

rust
use anchor_lang::prelude::*;
use anchor_lang::system_program::{create_account, CreateAccount};
use anchor_spl::{
    token_2022::{close_account, CloseAccount},
    token_interface::{
        spl_token_2022::{
            extension::{
                mint_close_authority::MintCloseAuthority
            },
        },
        Mint, Token2022,
    },
};
 
#[derive(Accounts)]
pub struct Close<'info> {
    #[account(mut)]
    pub authority: Signer<'info>,
 
    #[account(
        mut,
        extensions::close_authority::authority = authority,
    )]
    pub mint_account: InterfaceAccount<'info, Mint>,
    pub token_program: Program<'info, Token2022>,
}
 
pub fn close(ctx: Context<Close>) -> Result<()> {
    // cpi to token extensions programs to close mint account
    // alternatively, this can also be done in the client
    close_account(CpiContext::new(
        ctx.accounts.token_program.to_account_info(),
        CloseAccount {
            account: ctx.accounts.mint_account.to_account_info(),
            destination: ctx.accounts.authority.to_account_info(),
            authority: ctx.accounts.authority.to_account_info(),
        },
    ))?;
    Ok(())
}
Daftar Isi
Lihat Sumber
Blueshift © 2025Commit: 96f50c6