Ir al contenido principal

Registrar datos de contratos inteligentes con eventos

contratos Inteligentes
remix
Solidity
eventos
Intermedio
jdourlens
3 de abril de 2020
2 minuto leído

En Solidity, los eventos son señales que los contratos inteligentes pueden emitir. Las dapps, o cualquier elemento conectado a la API JSON-RPC de Ethereum, pueden escuchar estos eventos y actuar en consecuencia. Un evento también se puede indexar para que el historial de eventos se pueda buscar más adelante.

Eventos

El evento más común en la blockchain de Ethereum en el momento de escribir este artículo es el evento Transfer que emiten los tokens ERC20 cuando alguien transfiere tokens.

1event Transfer(address indexed from, address indexed to, uint256 value);

La firma del evento se declara dentro del código del contrato y se puede emitir con la palabra clave emit. Por ejemplo, el evento de transferencia registra quién envió la transferencia (from), a quién (to) y cuántos tokens se transfirieron (value).

Si volvemos a nuestro contrato inteligente Counter y decidimos registrar cada vez que se cambia el valor. Como este contrato no está destinado a ser desplegado, sino a servir de base para construir otro contrato extendiéndolo, se le llama contrato abstracto. En el caso de nuestro ejemplo de contador, se vería así:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Variable privada de tipo entero sin signo para mantener el número de cuentas
8 uint256 private count = 0;
9
10 // Función que incrementa nuestro contador
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter para obtener el valor del contador
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Mostrar todo

Tenga en cuenta que:

  • Línea 5: declaramos nuestro evento y lo que contiene: el valor antiguo y el valor nuevo.

  • Línea 13: cuando incrementamos nuestra variable de conteo, emitimos el evento.

Si ahora desplegamos el contrato y llamamos a la función de incremento, veremos que Remix lo mostrará automáticamente si hace clic en la nueva transacción dentro de un array llamado logs.

Captura de pantalla de Remix

Los logs son muy útiles para depurar sus contratos inteligentes, pero también son importantes si crea aplicaciones para distintas personas, ya que facilitan el análisis para rastrear y comprender cómo se utiliza su contrato inteligente. Los logs generados por las transacciones se muestran en los exploradores de bloques populares y también puede, por ejemplo, utilizarlos para crear scripts fuera de la cadena para escuchar eventos específicos y emprender acciones cuando ocurran.

Última actualización de la página: 12 de febrero de 2025

¿Le ha resultado útil este tutorial?