Datenprotokollierung von Smart Contracts mit Ereignissen
In Solidity sind Ereignisse ausgesendete Signale, die Smart Contracts auslösen können. Dapps oder alles, was mit der Ethereum-JSON-RPC-API verbunden ist, können auf diese Ereignisse hören und entsprechend handeln. Ein Ereignis kann auch indiziert werden, sodass der Ereignisverlauf später durchsuchbar ist.
Ereignisse
Das häufigste Ereignis auf der Ethereum-Blockchain zum Zeitpunkt des Verfassens dieses Artikels ist das Transfer-Ereignis, das von ERC20-Token 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 ausgelöst werden. Zum Beispiel protokolliert das Transfer-Ereignis, wer die Überweisung gesendet hat (from), an wen (to) und wie viele Token übertragen wurden (value).
Kehren wir zu unserem Counter-Smart-Contract zurück und beschließen, jede Wertänderung zu protokollieren. Da dieser Vertrag nicht bereitgestellt werden soll, sondern als Basis für den Aufbau eines anderen Vertrags durch Erweiterung dient, wird er als abstrakter Vertrag bezeichnet. Im Fall unseres Zählerbeispiels würde das 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, um die Anzahl der Zählungen zu speichern8 uint256 private count = 0;9
10 // Funktion, die unseren Zähler inkrementiert11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }15
16 // Getter, um den Zählwert abzurufen17 function getCount() public view returns (uint256) {18 return count;19 }20
21}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ählervariable inkrementieren, lösen wir das Ereignis aus.
Wenn wir nun den Vertrag bereitstellen und die Inkrementierungsfunktion aufrufen, werden wir sehen, dass Remix dies automatisch anzeigt, wenn Sie auf die neue Transaktion innerhalb eines Arrays namens logs klicken.
Protokolle (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 verwendet werden. Sie erleichtern die Analyse, um zu verfolgen und zu verstehen, wie Ihr Smart Contract verwendet wird. Die durch Transaktionen generierten Protokolle werden in beliebten Blocksuchmaschinen angezeigt, und Sie können sie beispielsweise auch verwenden, um Off-Chain-Skripte zu erstellen, die auf bestimmte Ereignisse hören und bei deren Eintreten Maßnahmen ergreifen.
Letzte Aktualisierung der Seite: 3. März 2026
