Autoridades
Mints SPL carregam duas autoridades opcionais: mint authority (inflar supply) e freeze authority (congelar contas de token). Revogar autoridades é um sinal comum de imutabilidade e confiança para tokens lançados.
Receita
spl-token display <MINT>
spl-token authorize <MINT> mint --disable
spl-token authorize <MINT> freeze --disableuse anchor_spl::token::{self, SetAuthority};
token::set_authority(
cpi_ctx,
spl_token::instruction::AuthorityType::MintTokens,
None,
)?;Quando usar isso:
- Travar supply fixo após mint inicial
- Remover poder de freeze antes do lançamento comunitário
- Transferir autoridade para multisig ou PDA de DAO
- Auditar suposições de confiança de tokens de terceiros
Exemplo de Trabalho
MINT=<YOUR_MINT>
# Inspecionar autoridades atuais
spl-token display "$MINT"
# Revogar mint authority permanentemente
spl-token authorize "$MINT" mint --disable
# Revogar freeze authority (usuários não podem ser congelados)
spl-token authorize "$MINT" freeze --disable
spl-token display "$MINT"use anchor_lang::prelude::*;
use anchor_spl::token::{self, Mint, Token, SetAuthority};
#[derive(Accounts)]
pub struct RevokeMintAuthority<'info> {
#[account(mut)]
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<()> {
require!(
ctx.accounts.mint.mint_authority == 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,
spl_token::instruction::AuthorityType::MintTokens,
None,
)?;
Ok(())
}
#[error_code]
pub enum ErrorCode {
NotMintAuthority,
}O que isso demonstra:
authorize --disabledefine campo de autoridade paraNone- Revogação é irreversível para aquele tipo de autoridade
- Programas on-chain usam CPI
set_authoritycom signer da autoridade atual
Deep Dive
Como Funciona
- Conta mint armazena
mint_authority: COption<Pubkey>efreeze_authority: COption<Pubkey> - Mint authority é necessária para
MintTo; freeze authority paraFreezeAccount/ThawAccount - Close authority em contas de token (separada do mint) controla quem pode fechar contas vazias
- Owner da conta de token é distinto das autoridades do mint
Tipos de Autoridade
| Autoridade | Escopo | Revogado significa |
|---|---|---|
| Mint tokens | Conta mint | Sem inflação nunca |
| Freeze account | Conta mint | Não pode congelar contas de holders |
| Account owner | Conta de token | Não pode transferir (N/A - transferência de ownership é diferente) |
| Close account | Conta de token | Não pode fechar para recuperar rent |
Notas Rust
// Sempre registre mudanças de autoridade para indexadores
emit!(AuthorityRevoked { mint: mint.key(), kind: "mint" });Armadilhas
- Revogar mint antes de terminar distribuição - não pode mintar alocação restante. Correção: complete mints primeiro, depois revogue.
- Deixar freeze authority com equipe anônima - holders podem ser congelados. Correção: revogue freeze ou transfira para multisig transparente.
- Assumir que revogar mint revoga freeze - campos independentes. Correção: revogue ambos explicitamente.
- Transferir autoridade para pubkey errada - perda irreversível de controle. Correção: verifique pubkey em dry-run devnet.
- UI ocultando estado de autoridade - usuários confiam em tokens scam. Correção: exiba campos de
spl-token displayem explorers.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Multisig mint authority | Inflação controlada por DAO | Lançamento simples de supply fixo |
| PDA mint authority | Emissões programáticas | Apenas tesouraria humana |
| Delegate permanente Token-2022 | Enforcement de política forçada | Token fungível padrão |
FAQs
O que é mint authority?
Pubkey permitida a inflar supply via MintTo até ser definida como None.
O que é freeze authority?
Pubkey permitida a congelar/descongelar contas de token daquele mint, bloqueando transferências enquanto congeladas.
Autoridade revogada pode ser restaurada?
Não. Definir None é permanente para aquele slot de autoridade.
Devo revogar freeze authority?
Sim para a maioria dos tokens comunitários, a menos que freeze seja recurso de compliance documentado.
Mint authority pode ser PDA?
Sim. Programa assina emissões com seeds PDA.
Quem pode mudar autoridades?
Apenas signer da autoridade atual para aquele tipo.
Fechar mint recupera rent?
Caminho de instrução separado - contas mint persistem até fechadas explicitamente onde suportado.
Como auditores verificam autoridades?
Leiam conta mint on-chain ou spl-token display - nunca confiem apenas em labels de UI.
Freeze authority pode congelar todos os holders?
Sim, por chamadas de freeze por conta - razão pela qual muitos projetos revogam freeze authority.
E autoridades Token-2022?
Mesmo modelo mint/freeze mais autoridades específicas de extensão (ex.: config de taxa de transferência).
Mint authority é obrigatória na criação?
Pode ser None na init para supply pré-fixo mintado no mesmo lote de transação.
Como transferir autoridade para multisig?
set_authority para pubkey multisig enquanto autoridade atual assina.
Relacionado
- Minting e Burning - usa mint authority
- Boas Práticas de SPL Token - checklist de autoridades no lançamento
- Transferências e Delegates - impacto de freeze
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.