Eventos
📚¿Qué son los Eventos?
Los eventos en Soroban son como notificaciones que tu contrato inteligente envía al mundo exterior. Imagínate que tu contrato es como una caja negra 📦, y los eventos son como notas que saca por una ranura para contarte qué está pasando adentro.
🎯 ¿Para qué sirven?
Transparencia: Permiten que aplicaciones externas sepan qué ha ocurrido
Debugging: Te ayudan a rastrear qué hace tu contrato
Integración: Otras apps pueden "escuchar" estos eventos y reaccionar
Auditoría: Crean un registro inmutable de las acciones
🔍 Tipos de Eventos
System Events 🔧: Generados automáticamente por Soroban
Contract Events 📝: Los que tú defines en tu contrato
Código en Soroban
Nos vamos a una ruta donde queramos crear nuestro proyecto y ponemos el siguiente comando:
stellar contract init events --name eventsBorramos el contrato generado en lib.rs y ponemos el siguiente código
📌 Código del contrato: lib.rs
lib.rs🎯 Explicación Detallada de los Conceptos
📢 ¿Cómo Funcionan los Eventos?
Los eventos en Soroban funcionan como un sistema de notificaciones:
Topics 🏷️: Son como "etiquetas" que permiten filtrar eventos
Primer topic: Identifica el contrato
Segundo topic: Identifica el tipo de evento
Data 📦: La información específica del evento
Puede ser un struct, tupla, o valor simple
Se serializa automáticamente
🔧 Componentes Clave
🛠 Explicación de la función initialize
initialize🔍 Descripción: Inicializa el valor del contador y emite un evento indicando su creación.
📌 Mecanismo:
env.storage().instance().set(...)→ Guarda el valor inicial del contador en el almacenamiento persistente del contrato.env.events().publish(...)→ Publica un evento del tipoCounterCreated, que incluye el valor inicial y el símbolo del creador.(symbol_short!("counter"), symbol_short!("created"))→ Define los topics del evento, útiles para filtrarlo desde herramientas de análisis.
🧠 Importante: Este evento puede ser consultado luego en herramientas como el explorador de eventos de Soroban para auditar quién creó el contador y con qué valor.
🛠 Explicación de la función increment
increment🔍 Descripción: Incrementa el valor del contador en 1 y emite un evento con los detalles del cambio.
📌 Mecanismo:
Obtiene el valor actual del contador, lo incrementa, lo guarda nuevamente y emite un evento
CounterUpdatedcon:old_value: valor antes del incremento.new_value: valor luego del incremento.operation: símbolo"increment".
🧠 Importante: Este evento permite rastrear cada operación que afectó el estado del contador.
🛠 Explicación de la función decrement
decrement🔍 Descripción: Disminuye el valor del contador (si es mayor a cero) y registra el cambio con un evento.
📌 Mecanismo:
Se protege contra valores negativos con una verificación.
El evento publicado incluye la operación
"decrement".
🧠 Importante: El estado nunca bajará de 0, manteniéndose válido en todo momento.
🛠 Explicación de la función reset
reset🔍 Descripción: Establece el contador en cero y emite un evento indicando quién lo reseteó.
📌 Mecanismo:
Guarda el valor anterior para registrarlo en el evento
CounterReset.reset_bypermite rastrear al responsable del reinicio.
🧠 Importante: Este evento es útil para auditoría o lógica de negocio que responda a resets.
🛠 Explicación de la función get_counter
get_counter🔍 Descripción: Consulta el valor actual del contador sin modificar el estado del contrato.
📌 Mecanismo:
Solo lectura: no genera logs ni eventos.
Devuelve 0 si el contador nunca fue inicializado.
🧠 Importante: Función ideal para mostrar el estado actual en una interfaz de usuario o al cliente.
🛠 Explicación de la función log_milestone
log_milestone🔍 Descripción: Permite emitir un evento especial para marcar hitos del contador.
📌 Mecanismo:
El evento contiene una tupla con el valor actual, el hito alcanzado, y un mensaje descriptivo.
No altera el estado del contrato.
🧠 Importante: Útil para casos de uso como alcanzar un récord, pasar un umbral o anunciar logros.
Compilación del contrarto:

Despliegue del contrato
Mac/Linux
Windows

Pruebas de ejecución y visualización de los eventos
Para Linux y Mac el salto de línea de la instrucción es con el carácter " \ " para Windows con el carácter " ` "
Empezando en valores iniciales el contrato stellar contract invoke * --id <CONTRACT_ID> * --source * --network testnet * -- * initialize * --initial_value 42 * --creator "developer"

Podemos ver algo nuevo en el resultado
Se ve lo generado por el siguiente código de la función initialize
Si nos vamos al explorador y miramos la última transacción
podemos ver lo siguiente:

Vemos que función se llamó y con que parámetros
También observamos evento en la parte de "raised event" con el contenido que le hemos pasado.
Otra opción de ver el evento por el cliente de Stellar
1 por lumenscan sacamos el ledger donde está la operación:, esto lo obtenemos por el historial de operacione del contrato y con que billetera interactuó. En esta caso la billetera "developer"

2 en la consola ejecutamos:

Si vemos la parte Value vemos ambos valores del evento el 42 y el valor developer.
Last updated
Was this helpful?

