Solidità - Eventi

Event è un membro ereditabile di un contratto. Viene emesso un evento, memorizza gli argomenti passati nei log delle transazioni. Questi log sono archiviati su blockchain e sono accessibili utilizzando l'indirizzo del contratto fino a quando il contratto è presente sulla blockchain. Un evento generato non è accessibile dall'interno dei contratti, nemmeno quello che li ha creati ed emessi.

Un evento può essere dichiarato utilizzando la parola chiave evento.

//Declare an Event
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);

//Emit an event
emit Deposit(msg.sender, _id, msg.value);

Esempio

Prova il codice seguente per capire come funziona un evento in Solidity.

Per prima cosa crea un contratto ed emetti 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);
   }
}

Quindi accedi all'evento del contratto nel codice 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);
});

Dovrebbe stampare dettagli simili a quelli seguenti:

Produzione

{
   "returnValues": {
      "_from": "0x1111...FFFFCCCC",
      "_id": "0x50...sd5adb20",
      "_value": "0x420042"
   },
   "raw": {
      "data": "0x7f...91385",
      "topics": ["0xfd4...b4ead7", "0x7f...1a91385"]
   }
}