Autoridades
Mints SPL carregam duas autoridades opcionais: autoridade de mint (inflar o suprimento) e autoridade de freeze (congelar contas de token). Revogar autoridades é um sinal comum de imutabilidade e confiança para tokens lançados.
Busque em todas as páginas da documentação
Mints SPL carregam duas autoridades opcionais: autoridade de mint (inflar o suprimento) e autoridade de freeze (congelar contas de token). Revogar autoridades é um sinal comum de imutabilidade e confiança para tokens lançados.
spl-token display <MINT>
spl-token authorize <MINT> mint --disable
spl-token authorize <MINT> freeze --disableuse anchor_spl::token::spl_token::instruction::AuthorityType;
use anchor_spl::token::{self, SetAuthority};
token::set_authority(cpi_ctx, AuthorityType::MintTokens, None)?;Quando usar isso:
MINT=<YOUR_MINT>
# Inspecionar autoridades atuais
spl-token display "$MINT"
# Revogar autoridade de mint permanentemente
spl-token authorize "$MINT" mint --disable
# Revogar autoridade de freeze (usuários não podem ser congelados)
spl-token authorize "$MINT" freeze --disable
spl-token display "$MINT"use anchor_lang::prelude::*;
use anchor_lang::solana_program::program_option::COption;
use anchor_spl::token::spl_token::instruction::AuthorityType;
use anchor_spl::token::{self, Mint, SetAuthority, Token};
#[derive(Accounts)]
pub struct RevokeMintAuthority<'info> {
#[account(mut, mint::authority = current_authority)]
pub mint: Account<'info, Mint>,
pub current_authority: Signer<'info>,
pub token_program: Program<'info, Token>,
}
pub fn revoke_mint_authority(ctx: Context<RevokeMintAuthority>) -> Result<()> {
// `mint_authority` é um COption, não um Option - compare com COption::Some.
require!(
ctx.accounts.mint.mint_authority == COption::Some(ctx.accounts.current_authority.key()),
ErrorCode::NotMintAuthority
);
let cpi = CpiContext::new(
ctx.accounts.token_program.to_account_info(),
SetAuthority {
current_authority: ctx.accounts.current_authority.to_account_info(),
account_or_mint: ctx.accounts.mint.to_account_info(),
},
);
token::set_authority(cpi, AuthorityType::MintTokens, None)?;
Ok(())
}
#[error_code]
pub enum ErrorCode {
NotMintAuthority,
}O que isso demonstra:
authorize --disable define o campo de autoridade para Noneset_authority com o signer da autoridade atualmint_authority: COption<Pubkey> e freeze_authority: COption<Pubkey>MintTo; a autoridade de freeze para FreezeAccount / ThawAccount| Autoridade | Escopo | Revogado significa |
|---|---|---|
| Mint tokens | Conta mint | Nunca haverá inflação |
| Freeze account | Conta mint | Não é possível congelar contas de detentores |
| Account owner | Conta de token | Não é possível transferir (N/A - transferência de propriedade é diferente) |
| Close account | Conta de token | Não é possível fechar para recuperar rent |
// Sempre registre mudanças de autoridade para indexadores
emit!(AuthorityRevoked { mint: mint.key(), kind: "mint" });spl-token display em exploradores.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Multisig como autoridade de mint | Inflação controlada por DAO | Lançamento simples de suprimento fixo |
| PDA como autoridade de mint | Emissões programáticas | Apenas tesouraria operada por humanos |
| Delegado permanente Token-2022 | Aplicação forçada de políticas | Token fungível padrão |
Pubkey permitida a inflar o suprimento via MintTo até que seja definida como None.
Pubkey permitida a congelar/descongelar contas de token para aquele mint, bloqueando transferências enquanto congeladas.
Não. Definir como None é permanente para aquele slot de autoridade.
Sim, para a maioria dos tokens comunitários, a menos que o freeze seja um recurso de conformidade documentado.
Sim. O programa assina as emissões com seeds do PDA.
Apenas o signer da autoridade atual para aquele tipo de autoridade.
Caminho de instrução separado - contas mint persistem até serem explicitamente fechadas onde suportado.
Leem a conta mint on-chain ou usam spl-token display - nunca confie apenas nos rótulos da UI.
Sim, através de chamadas de freeze por conta - razão pela qual muitos projetos revogam a autoridade de freeze.
Mesmo modelo de mint/freeze, mais autoridades específicas de extensão (ex.: configuração de taxa de transferência).
Pode ser definida como None na inicialização para suprimento pré-fixado mintado no mesmo lote de transações.
Use set_authority para a pubkey do multisig enquanto a autoridade atual assina.
Versões da stack: Esta página foi escrita para 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 e LiteSVM 0.6.x.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026