En este breve tutorial, me gustaría mostrarle los conceptos básicos de los eventos en Solidity. Específicamente, explicaré qué son los eventos en solidez y cómo usarlos en nuestro contrato inteligente.
Siguiendo la documentación de Solidity:
Los eventos son miembros hereditarios de los contratos. Cuando los llama, hacen que los argumentos se almacenen en el registro de transacciones, una estructura de datos especial en la cadena de bloques. Estos registros están asociados con la dirección del contrato, se incorporan a la cadena de bloques y permanecen allí mientras se pueda acceder a un bloque ”
Los eventos se utilizan para informar a los usuarios externos que algo sucedió en la cadena de bloques. Los contratos inteligentes en sí mismos no pueden escuchar ningún evento.
Toda la información en la cadena de bloques es pública y cualquier acción se puede encontrar examinando las transacciones lo suficientemente cerca, pero los eventos son un atajo para facilitar el desarrollo de sistemas externos en cooperación con contratos inteligentes.
Solidity define eventos con la palabra clave event. Después de llamar a los eventos, sus argumentos se colocan en la cadena de bloques. Para usar eventos primero, debe declararlos de la siguiente manera:
event moneySent(address _from, address _to, uint _amount);
La definición del evento contiene el nombre del evento y los parámetros que desea guardar cuando activa el evento.
Entonces necesitas emitir tu evento dentro de la función:
emit money Sent( msg . sender , _to , _amount ) ;
Los eventos de solidez son interfaces con Funcionalidad de registro de la máquina virtual de Ethereum. Puede agregar un atributo indexado hasta en tres parámetros. Cuando los parámetros no tienen el atributo indexado , se codifican con ABI en la parte de datos del registro.
Para comprender mejor el evento, veamos el código completo.
//SPDX-License-Identifier: MIT pragma solidity ^ 0.8 . 4 ; contract MyContract{ mapping(address => uint) public Balance; event moneySent(address _from , address _to , uint _amount ); constructor public { owner = msg.sender; moneyBalance[msg.sender] = 50 ; } function sendMoney(address _to , uint _amount ) public returns(bool) { require(msg.sender = owner ; "You are not allowe" ); require(Balance[msg.sender] >= _amount ; "Not enough money" ); moneyBalance[msg.sender] -= _amount ; moneyBalance[ _to ] += _amount ; emit moneySent(msg.sender, _to , _amount ); return true ; }