Fundamentos del manejo de errores
10 ejemplos para empezar con Errores y Registros: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con Errores y Registros: 7 básicos y 3 intermedios.
ProgramResult de Rust para Solana.Las instrucciones devuelven Result<(), ProgramError>.
use solana_program::entrypoint::ProgramResult;
pub fn handler() -> ProgramResult { Ok(()) }Err falla toda la transacción.Ok confirma el estado atómicamente con otras instrucciones.? en ayudantes.El runtime proporciona códigos de error estándar.
return Err(ProgramError::InvalidArgument);Códigos u32 específicos del dominio.
return Err(ProgramError::Custom(6001));Implementación From estilo thiserror.
impl From<MyError> for ProgramError {
fn from(e: MyError) -> Self { ProgramError::Custom(e as u32) }
}?.panicNunca uses unwrap en rutas de entrada del usuario.
// MAL: data[0]; // BIEN: data.get(0).ok_or(...)?Panic aborta la instrucción.Propaga los fallos del llamado.
invoke(&ix, accounts)?;? propaga ProgramError.Transacción fallida con código en metadatos.
// fuera de cadena: parsear registros + código de errorAtributo error_code en 0.32.1.
#[error_code]
pub enum Error { InsufficientFunds }@solana/kit.Relacionado: Enums de error personalizados
Mensaje corto para depuración - ten en cuenta las CU.
solana_program::msg!("reject: insufficient");Relacionado: Registro con msg!
Emparejar código personalizado con enum.
// TS: parsear error de simulaciónRelacionado: Decodificación de errores fuera de cadena
Versiones de la pila: Esta página se escribió 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.
Revisado por Chris St. John·Última actualización: 16 jul 2026