Solidez - Eventos
Event es un miembro heredable de un contrato. Se emite un evento, almacena los argumentos pasados en los registros de transacciones. Estos registros se almacenan en blockchain y se puede acceder a ellos mediante la dirección del contrato hasta que el contrato esté presente en blockchain. Un evento generado no es accesible desde dentro de los contratos, ni siquiera el que los ha creado y emitido.
Un evento se puede declarar usando la palabra clave event.
//Declare an Event
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
//Emit an event
emit Deposit(msg.sender, _id, msg.value);
Ejemplo
Pruebe el siguiente código para comprender cómo funciona un evento en Solidity.
Primero cree un contrato y emita un evento.
pragma solidity ^0.5.0;
contract Test {
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
function deposit(bytes32 _id) public payable {
emit Deposit(msg.sender, _id, msg.value);
}
}
Luego acceda al evento del contrato en código JavaScript.
var abi = /* abi as generated using compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceiptContract = ClientReceipt.at("0x1234...ab67" /* address */);
var event = clientReceiptContract.Deposit(function(error, result) {
if (!error)console.log(result);
});
Debería imprimir detalles similares a los siguientes:
Salida
{
"returnValues": {
"_from": "0x1111...FFFFCCCC",
"_id": "0x50...sd5adb20",
"_value": "0x420042"
},
"raw": {
"data": "0x7f...91385",
"topics": ["0xfd4...b4ead7", "0x7f...1a91385"]
}
}