Solidité - Evénements

L'événement est un membre héréditaire d'un contrat. Un événement est émis, il stocke les arguments passés dans les journaux de transactions. Ces journaux sont stockés sur la blockchain et sont accessibles à l'aide de l'adresse du contrat jusqu'à ce que le contrat soit présent sur la blockchain. Un événement généré n'est pas accessible depuis l'intérieur des contrats, pas même celui qui les a créés et émis.

Un événement peut être déclaré à l'aide du mot-clé event.

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

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

Exemple

Essayez le code suivant pour comprendre le fonctionnement d'un événement dans Solidity.

Créez d'abord un contrat et émettez un événement.

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);
   }
}

Accédez ensuite à l'événement du contrat en code 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);
});

Il doit imprimer des détails similaires à ce qui suit -

Production

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