Weiter zum Hauptinhalt

Protokollierung von Daten aus Smart Contracts mit Ereignissen

smart contracts
remix
solidity
events
Fortgeschritten
jdourlens
3. April 2020
2 Minuten Lesedauer

In Solidity sind Ereignisse Signale, die von Smart Contracts ausgegeben werden können. Dapps oder alles, was mit der JSON-RPC-API von Ethereum verbunden ist, können auf diese Ereignisse lauschen und entsprechend reagieren. Ein Ereignis kann auch indiziert werden, sodass der Ereignisverlauf später durchsuchbar ist.

Ereignisse

Das häufigste Ereignis auf der Ethereum-Blockchain ist zum Zeitpunkt der Erstellung dieses Artikels das Transfer-Ereignis, das von ERC20-Tokens ausgegeben wird, wenn jemand Token überträgt.

1event Transfer(address indexed from, address indexed to, uint256 value);

Die Ereignissignatur wird innerhalb des Vertragscodes deklariert und kann mit dem Schlüsselwort emit ausgegeben werden. Zum Beispiel protokolliert das Transfer-Ereignis, wer die Übertragung gesendet hat (from), an wen (to) und wie viele Token übertragen wurden (value).

Wenn wir zu unserem Counter-Smart-Contract zurückkehren und beschließen, jedes Mal zu protokollieren, wenn der Wert geändert wird. Da dieser Vertrag nicht zur Bereitstellung gedacht ist, sondern als Grundlage für die Erstellung eines anderen Vertrags durch Erweiterung dient, wird er als abstrakter Vertrag bezeichnet. Im Fall unseres Counter-Beispiels würde es so aussehen:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Private Variable vom Typ unsigned int zur Speicherung der Anzahl der Zählungen
8 uint256 private count = 0;
9
10 // Funktion, die unseren Zähler inkrementiert
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter zum Abrufen des Zählwerts
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Alles anzeigen

Beachten Sie Folgendes:

  • Zeile 5: Wir deklarieren unser Ereignis und was es enthält: den alten Wert und den neuen Wert.

  • Zeile 13: Wenn wir unsere Zählvariable inkrementieren, geben wir das Ereignis aus.

Wenn wir nun den Vertrag bereitstellen und die increment-Funktion aufrufen, sehen wir, dass Remix es automatisch anzeigt, wenn Sie auf die neue Transaktion in einem Array namens logs klicken.

Remix-Screenshot

Logs sind sehr nützlich für das Debugging Ihrer Smart Contracts, aber sie sind auch wichtig, wenn Sie Anwendungen erstellen, die von verschiedenen Personen genutzt werden. Sie erleichtern die Analyse, um zu verfolgen und zu verstehen, wie Ihr Smart Contract genutzt wird. Die durch Transaktionen erzeugten Logs werden in gängigen Block-Explorern angezeigt und Sie können sie beispielsweise auch verwenden, um Off-Chain-Skripte zu erstellen, die auf bestimmte Ereignisse lauschen und bei deren Auftreten Maßnahmen ergreifen.

Seite zuletzt aktualisiert: 16. Februar 2026

War dieses Tutorial hilfreich?