Mensagens de Erro Personalizadas
Use #[msg("...")] em variantes de enum de erro para mensagens padrão. Clientes mapeiam códigos de erro para cópias localizadas usando o IDL.
Busque em todas as páginas da documentação
Use #[msg("...")] em variantes de enum de erro para mensagens padrão. Clientes mapeiam códigos de erro para cópias localizadas usando o IDL.
#[error_code]
pub enum SwapError {
#[msg("Slippage tolerance exceeded")]
SlippageExceeded,
#[msg("Pool is disabled")]
PoolDisabled,
}Quando usar isso: Você lança dApps voltados para o usuário que exibem falhas de programa.
#[error_code]
pub enum StakeError {
#[msg("Stake amount below minimum")]
BelowMinimum,
#[msg("Unlock period not elapsed")]
StillLocked,
}
// constraint errors
#[account(constraint = !pool.disabled @ SwapError::PoolDisabled)]
pub pool: Account<'info, Pool>,O que isso demonstra:
constraint @ mapeia para a varianteGere tabelas de lookup de erros a partir do IDL em TypeScript. Mostre error.errorCode + mensagem mapeada na UI.
Não renumerem variantes de erro levianamente; clientes armazenam mapeamentos em cache.
msg - Não suportado dinamicamente. Correção: Use eventos para detalhes.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Eventos para contexto de falha | Detalhes ricos | Mensagens simples para o usuário |
| Metadados de erro off-chain | Tabelas de localização | Códigos canônicos on-chain |
Códigos personalizados no IDL mais strings #[msg].
emit_cpi! custa mais CU, mas melhora a confiabilidade da captura.
Evite, exceto atrás de flags de funcionalidade.
Do IDL via Anchor ou codegen Codama.
Sim, tipos #[event] são listados.
Sim, com @ MyError::Variant.
Cada linha de log e string formatada.
anchor test esperando códigos de erro.
Sim, mas não um contrato de API; use eventos.
Veja Relacionados para mensagens de erro.
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: 19 de jul. de 2026