#[error_code] & require!
Enums #[error_code] mapeiam para códigos de erro estáveis no IDL. require! e similares afirmam condições com esses erros.
Busque em todas as páginas da documentação
Enums #[error_code] mapeiam para códigos de erro estáveis no IDL. require! e similares afirmam condições com esses erros.
#[error_code]
pub enum MyError {
#[msg("Amount must be positive")]
InvalidAmount,
}
require!(amount > 0, MyError::InvalidAmount);
require_eq!(owner, ctx.accounts.authority.key(), MyError::Unauthorized);Quando usar isso: Você precisa de falhas tipadas e decodificáveis pelo cliente.
#[error_code]
pub enum VaultError {
#[msg("Vault is paused")]
Paused,
#[msg("Insufficient balance")]
InsufficientFunds,
#[msg("Math overflow")]
Overflow,
}
pub fn withdraw(ctx: Context<Withdraw>, amount: u64) -> Result<()> {
require!(!ctx.accounts.vault.paused, VaultError::Paused);
require!(ctx.accounts.vault.balance >= amount, VaultError::InsufficientFunds);
ctx.accounts.vault.balance = ctx.accounts.vault.balance
.checked_sub(amount)
.ok_or(VaultError::Overflow)?;
Ok(())
}O que isso demonstra:
| Macro | Uso |
|---|---|
require! | Condição booleana |
require_eq! / require_ne! | Verificações de igualdade |
require_keys_eq! | Comparações de Pubkey |
Anchor atribui códigos de erro começando em um offset personalizado; clientes decodificam via IDL.
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| constraint @ Error | Tempo de validação da conta | Regras de negócios do manipulador |
| Erros customizados nativos | Não-Anchor | Clientes com integração IDL |
Códigos customizados no IDL mais strings #[msg].
emit_cpi! custa mais CU, mas melhora a confiabilidade da captura.
Evite, exceto atrás de flags de feature.
Do IDL via Anchor ou geração de código 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 erros.
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