Solidität - Ereignisse

Event ist ein vererbbares Vertragsmitglied. Wenn ein Ereignis ausgegeben wird, werden die in Transaktionsprotokollen übergebenen Argumente gespeichert. Diese Protokolle werden in der Blockchain gespeichert und sind über die Adresse des Vertrags zugänglich, bis der Vertrag in der Blockchain vorhanden ist. Auf ein generiertes Ereignis kann nicht innerhalb von Verträgen zugegriffen werden, auch nicht innerhalb desjenigen, der sie erstellt und ausgegeben hat.

Ein Ereignis kann mit dem Schlüsselwort event deklariert werden.

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

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

Beispiel

Versuchen Sie den folgenden Code, um zu verstehen, wie ein Ereignis in Solidity funktioniert.

Erstellen Sie zuerst einen Vertrag und senden Sie ein Ereignis aus.

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

Greifen Sie dann im JavaScript-Code auf das Ereignis des Vertrags zu.

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

Es sollte Details ähnlich wie folgt drucken:

Ausgabe

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