Anchor
SPL Token com Anchor

SPL Token com Anchor

Instruções de Approve e Revoke

Approve concede a um delegate a autoridade para transferir uma quantidade específica de tokens em nome do proprietário da conta. Isso permite transferências programáticas de tokens sem dar controle total da conta.

Definimos um valor "aprovado", e o delegate pode transferir apenas até esse valor

Revoke remove a autoridade do delegate atual sobre a conta, devolvendo o controle total ao proprietário da conta.

Cancela imediatamente qualquer delegação existente e apenas o proprietário da conta pode revogar a delegação (não o próprio delegate)

Antes de podermos delegar ou revogar qualquer conta de token, precisaremos já ter:

  • Inicializado uma conta Mint.

  • Inicializado uma conta Token ou Associated Token da qual vamos assumir o controle

A quantidade de tokens que fazemos mint são "normalizadas" para decimais. Isso significa que se quisermos mintar 1 token que tem 6 decimais, precisaremos colocar 1_000_000 como quantidade

Veja como fica a CPI para a instrução approve():

rust
approve(
    CpiContext::new(
        ctx.accounts.token_program.to_account_info(),
        Approve {
            to: ctx.accounts.token_account.to_account_info(),
            delegate: ctx.accounts.delegate.to_account_info(),
            authority: ctx.accounts.authority.to_account_info(),
        },
    ),
    &1_000_000,
)?;

E veja como fica a CPI para a instrução revoke():

rust
revoke(
    CpiContext::new(
        ctx.accounts.token_program.to_account_info(),
        Revoke {
            pub source: ctx.accounts.token_account.to_account_info(),
            authority: ctx.accounts.authority.to_account_info(),
        },
    ),
)?;
Blueshift © 2026Commit: 1b88646