Discriminadores de Conta
Discriminadores identificam qual tipo de struct possui o layout de bytes de uma conta. Eles bloqueiam ataques de confusão de tipo onde uma conta maliciosa é interpretada como o tipo errado.
Busque em todas as páginas da documentação
Discriminadores identificam qual tipo de struct possui o layout de bytes de uma conta. Eles bloqueiam ataques de confusão de tipo onde uma conta maliciosa é interpretada como o tipo errado.
if data[..8] != Account::DISCRIMINATOR { return Err(ProgramError::InvalidAccountData); }Quando usar isso:
pub const VAULT_DISC: [u8; 8] = *b"vault___";
pub fn load_vault(data: &[u8]) -> Result<Vault, ProgramError> {
if data.len() < 8 || data[..8] != VAULT_DISC { return Err(ProgramError::InvalidAccountData); }
Vault::deserialize(&mut &data[8..]).map_err(|_| ProgramError::InvalidAccountData)
}O que isso demonstra:
SHA256("account:TypeName")[:8] em 0.32.1.
Escolha constantes únicas; documente no IDL.
// Incluir disc em ESPAÇO: 8 + corpo| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Digitação apenas do proprietário | Tipo de conta única por programa | Programas multitarefa |
| Byte de versão apenas | Mais simples | Segurança de tipo mais fraca |
| Disco automático do Anchor | Padrão | Manual nativo |
Convenção do Anchor; nativo pode diferir se for consistente.
Geralmente antecipado manualmente ou wrapper Anchor.
Sim, primeira escrita.
Zera todos os dados.
Anchor inclui nomes de conta.
Não é um limite de segurança - a correspondência do layout é importante.
O programa de token tem seu próprio layout - diferente.
Use o campo de versão após o disco.
Teste negativo LiteSVM.
Interno do Anchor - reproduzível.
Exporte constantes para clientes.
Bytes válidos, mas evite ambiguidade de todos os zeros.
Versões da Pilha: 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