Anchor
SPL Token com Anchor

SPL Token com Anchor

Instrução de Burn

Destrói tokens permanentemente removendo-os da circulação. Isso reduz a oferta total do token.

Antes de podermos fazer burn de qualquer token, precisaremos já ter:

  • Inicializado uma conta Mint.

  • Uma conta Token ou conta Associated Token que já tenha pelo menos a quantidade que desejamos fazer burn.

Instrução com Anchor

Com o Anchor, podemos usar os métodos burn e burn_checked do programa Token para queimar tokens.

rust
use anchor_spl::token::{self, Burn, BurnChecked};

// Burn sem verificação de decimais
token::burn(ctx.accounts.burn_ctx(), amount)?;

// Burn com verificação de decimais
token::burn_checked(ctx.accounts.burn_checked_ctx(), amount, decimals)?;

A instrução burn_checked é recomendada pois verifica se os decimais correspondem aos decimais do mint.

Contexto da Instrução

Aqui está como definir as estruturas de contexto para as instruções de burn:

rust
#[derive(Accounts)]
pub struct BurnTokens<'info> {
    pub owner: Signer<'info>,
    #[account(mut)]
    pub token_account: Account<'info, TokenAccount>,
    #[account(mut)]
    pub mint: Account<'info, Mint>,
    pub token_program: Program<'info, Token>,
}

impl<'info> BurnTokens<'info> {
    pub fn burn_ctx(&self) -> CpiContext<'_, '_, '_, 'info, Burn<'info>> {
        let cpi_program = self.token_program.to_account_info();
        let cpi_accounts = Burn {
            mint: self.mint.to_account_info(),
            from: self.token_account.to_account_info(),
            authority: self.owner.to_account_info(),
        };
        CpiContext::new(cpi_program, cpi_accounts)
    }
}
Blueshift © 2026Commit: 1b88646