Ir al contenido principal

Registrar datos de contratos inteligentes con eventos

contratos inteligentesremixsolidityeventos
Intermedio
jdourlens
EthereumDev(opens in a new tab)
3 de abril de 2020
2 minuto leído minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

En Solidity, los contratos inteligentes pueden envíar eventos. Las DApps o cualquier aplicación conectada a la API JSON-RPC de Ethereum, puede escuchar estos eventos y obrar según corresponda. El evento también puede indexarse, para que el historial de eventos se pueda buscar más adelante.

Events

El evento más común en la cadena de bloques de Ethereum en el cierre de redacción de este artículo es el evento de transferencia que emiten los tókenes ERC20 cuando alguien transfiere tókenes.

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

La firma del evento se declara dentro del código del contrato y se puede emitir con la palabra clave emitida. Por ejemplo, el evento de transferencia registra quién envió la transferencia (de), a quién (para) y cuántos tókenes se transfirieron (valor).

Si regresamos a nuestro programa contador del contrato inteligente y decidimos registrar el valor cada vez que cambie. Dado que este contrato no pretende ejecutarse, sino que sirve de base para construir otro contrato ampliándolo, se le llama contrato abstracto. En el caso de nuestro ejemplo de contador, sería de la manera siguiente:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Private variable of type unsigned int to keep the number of counts
8 uint256 private count = 0;
9
10 // Function that increments our counter
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter to get the count value
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Mostrar todo
Copiar

Tenga en cuenta que:

  • Línea 5: declaramos nuestro evento y su contenido, el valor antiguo y el nuevo.

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

Si ahora desplegamos el contrato y seleccionamos la función de incremento, veremos que Remix lo mostrará automáticamente, si hace clic en la nueva transacción dentro de los registros con nombre.

Captura de pantalla de Remix

Los registros son realmente útiles a la hora de depurar sus contratos inteligentes, pero también son importantes si construye aplicaciones utilizadas por diferentes personas. También facilitan los análisis para averiguar y entender cómo se utiliza su contrato inteligente. Los registros generados por transacciones se muestran en exploradores de bloques populares y también puede utilizarlos, por ejemplo, para crear scripts fuera de la cadena para escuchar eventos específicos y emprender acciones cuando ocurran.

Última edición: @nhsz(opens in a new tab), 15 de agosto de 2023

¿Le ha resultado útil este tutorial?