Mejores prácticas para errores y eventos
Los programas de Anchor observables y depurables utilizan errores tipados, eventos estructurados y un registro mínimo.
Cómo usar esta lista
- Aplica en cada instrucción pública antes de mainnet.
- Verifica que el indexador analice el estilo de emisión elegido.
- Fija la tabla de errores de IDL en los repositorios del cliente.
A - Errores
- Usa #[error_code] para todos los fallos dirigidos al usuario códigos estables en IDL.
- Añade nuevas variantes; no las reordenes preserva las asignaciones del cliente.
- Mapea fallos de restricciones con @ Variant mensajes específicos.
- Simula transacciones en clientes antes de enviarlas decodifica errores temprano.
B - Eventos y registros
- Emite eventos para cambios de estado indexables no
msg!en producción. - Elige
emitvsemit_cpiconsistentemente documenta para el equipo de indexación. - Cierra los registros de depuración detrás de las características ahorra CU en mainnet.
- Mantén las cargas útiles de eventos pequeñas evita la truncación de registros.
Preguntas frecuentes
¿Formato de error de Anchor 0.32.1?
Códigos personalizados en IDL más cadenas #[msg].
¿emit! vs emit_cpi!?
emit_cpi! cuesta más CU pero mejora la fiabilidad de la captura.
¿Debo usar msg! en mainnet?
Evita excepto detrás de indicadores de características.
¿Cómo obtienen los clientes los códigos de error?
Desde IDL a través de la generación de código de Anchor o Codama.
¿Aparecen los eventos en IDL?
Sí, los tipos #[event] están listados.
¿Pueden las restricciones devolver errores personalizados?
Sí, con @ MyError::Variant.
¿Qué usa CU en el registro?
Cada línea de registro y cadena formateada.
¿Cómo probar los errores?
anchor test esperando códigos de error.
¿Son los registros datos de consenso?
Sí, pero no un contrato de API; usa eventos.
¿Próxima lectura?
Ver Relacionados para errores y eventos bp.
Relacionados
- Eventos con emit! - eventos
- #[error_code] & require! - errores
- Mejores prácticas de generación de código - sincronización de IDL
Versiones de la pila: Esta página fue 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, y LiteSVM 0.6.x.