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

  1. System Events 🔧: Generados automáticamente por Soroban

  2. 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 events

Borramos el contrato generado en lib.rs y ponemos el siguiente código

📌 Código del contrato: lib.rs

🎯 Explicación Detallada de los Conceptos

📢 ¿Cómo Funcionan los Eventos?

Los eventos en Soroban funcionan como un sistema de notificaciones:

  1. Topics 🏷️: Son como "etiquetas" que permiten filtrar eventos

    • Primer topic: Identifica el contrato

    • Segundo topic: Identifica el tipo de evento

  2. 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

🔍 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 tipo CounterCreated, 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

🔍 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 CounterUpdated con:

    • 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

🔍 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

🔍 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_by permite 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

🔍 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

🔍 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:

Resultado de la compilación

Despliegue del contrato

Mac/Linux

Windows

Contrato desplegado

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"

Resultado de la ejecución

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ónarrow-up-right

podemos ver lo siguiente:

Visualización en el explorador

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 lumenscanarrow-up-right 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:

Resultados de la operación

Si vemos la parte Value vemos ambos valores del evento el 42 y el valor developer.

Last updated

Was this helpful?