Organizar errores de contrato con un tipo de enumeración de errores
Una manera conveniente de gestionar y comunicar de manera significativa los errores de contrato es recopilarlos en una estructura de enum. Estos errores son un tipo especial de tipo entero de enumeración que se almacenan en el ledger como valores de Estado que contienen un código u32. Primero, crea la estructura Error en tu contrato inteligente.
#[contracterror]
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
#[repr(u32)]
pub enum Error {
FirstError = 1,
AnotherError = 2,
YetAnotherError = 3,
GenericError = 4
}
Luego, causa un pánico con un error cuando se cumplan las condiciones. Este ejemplo causará un pánico con el error especificado.
#[contractimpl]
impl Contract {
pub fn causeerror(env: Env, error_code: u32) -> Result<(), Error> {
match error_code {
1 => Err(Error::FirstError),
2 => Err(Error::AnotherError),
3 => Err(Error::YetAnotherError),
_ => Err(Error::GenericError),
}
}
}
Cuando se convierte a XDR, el valor se convierte en un ScVal, que contiene un ScError, que contiene el valor entero del error como error de contrato.
{ "error": { "contractError": 1 } }
Guías en esta categoría:
📄️ Hacer llamadas entre contratos
Llamar a un contrato inteligente desde otro contrato inteligente
📄️ Desplegar un contrato a partir de bytecode Wasm instalado usando un contrato desplegador
Desplegar un contrato a partir de bytecode Wasm instalado usando un contrato desplegador
📄️ Desplegar un SAC para un activo Stellar utilizando código
Desplegar un SAC para un activo Stellar utilizando el SDK de Javascript
📄️ Organizar errores de contrato con un tipo de enumeración de errores
Gestionar y comunicar errores de contrato utilizando una estructura de enumeración almacenada como valores de Estado
📄️ Extender el TTL de un contrato desplegado con código
Cómo extender el TTL del código Wasm de un contrato desplegado
📄️ Actualizando el bytecode de Wasm para un contrato desplegado
Actualizar el bytecode de Wasm para un contrato desplegado
📄️ Escribir metadatos para tu contrato
Usa el contractmeta! macro en Rust SDK para escribir metadatos en contratos Wasm
📄️ Espacios de trabajo
Organizar contratos usando espacios de trabajo de Cargo