Kurz erklärt:
Ein Event-Log ist ein von einem Smart Contract erzeugter Protokolleintrag, mit dem der Contract über ein eingetretenes Ereignis informiert. Event-Logs werden in den Transaktionsbelegen (Receipts) gespeichert, verändern aber nicht den persistenten Zustand des Contracts und dienen vor allem der effizienten Beobachtung außerhalb der Blockchain.
Zweck und Einordnung
Smart Contracts können mit dem Solidity-Schlüsselwort event Ereignisse definieren und mit emit auslösen. Solche Events entstanden aus dem Bedürfnis, Zustandsänderungen eines Smart Contracts für externe Anwendungen sichtbar zu machen, ohne den teuren persistenten Storage abzufragen. Typische Anwendungsfälle sind Übertragungen von Token, etwa das Transfer-Event im ERC-20-Standard, oder Statusmeldungen dezentraler Anwendungen. Die Logs sind nicht aus einem Contract heraus lesbar, sondern ausschließlich für Beobachter außerhalb der Kette bestimmt.
Technischer Aufbau
Ein Event-Log besteht aus der Adresse des auslösenden Contracts, bis zu vier sogenannten Topics und einem Datenbereich. Das erste Topic ist üblicherweise der Keccak-256-Hash der Event-Signatur und identifiziert den Event-Typ. Als indexed markierte Parameter werden als weitere Topics abgelegt und ermöglichen ein effizientes Filtern, während nicht indizierte Parameter im Datenbereich stehen. Erzeugt werden Logs durch die Opcodes der LOG-Familie (LOG0 bis LOG4), abhängig von der Anzahl der Topics.
Speicherung und Gaskosten
Event-Logs werden nicht im globalen State, sondern in den Transaktions-Receipts und in einem sogenannten Bloom-Filter je Block gespeichert. Der Bloom-Filter erlaubt es Beobachtern, schnell zu prüfen, ob ein Block potenziell relevante Logs enthält. Das Schreiben von Logs kostet Gas, ist aber deutlich günstiger als das dauerhafte Speichern derselben Daten im Storage. Dieser Kostenvorteil ist ein wesentlicher Grund, warum Events für die reine Protokollierung bevorzugt eingesetzt werden.
Bedeutung für Analyse und Anwendungen
Für dezentrale Anwendungen sind Event-Logs die zentrale Quelle, um auf Zustandsänderungen zu reagieren und Benutzeroberflächen zu aktualisieren. Bibliotheken und Knoten stellen dafür Abonnement- und Abfragefunktionen bereit. In der Blockchain-Analyse und bei forensischen Untersuchungen sind Logs besonders wertvoll, weil sich über sie Geld- und Token-Flüsse rekonstruieren lassen, etwa durch Auswertung aller Transfer-Events eines Token-Contracts. Blockchain-Explorer zeigen die dekodierten Logs an, sofern das passende ABI vorliegt.
Häufige Fragen
Verändert ein Event-Log den Zustand eines Contracts?
Nein. Event-Logs werden in den Transaktions-Receipts gespeichert und beeinflussen den persistenten Zustand des Contracts nicht. Sie dienen ausschließlich der Beobachtung außerhalb der Blockchain.
Kann ein Smart Contract seine eigenen Logs auslesen?
Nein. Logs sind aus der EVM heraus nicht lesbar. Sie sind ausschließlich für externe Beobachter wie Anwendungen, Explorer oder Analysewerkzeuge bestimmt.
Was bedeutet indexed bei Event-Parametern?
Als indexed markierte Parameter werden als eigene Topics gespeichert und lassen sich dadurch effizient filtern. Nicht indizierte Parameter landen im Datenbereich und sind nicht direkt durchsuchbar.
Warum sind Events günstiger als Storage?
Events werden nicht im globalen State abgelegt, den alle Knoten dauerhaft vorhalten müssen, sondern in Receipts. Deshalb ist das Schreiben von Logs deutlich weniger gasintensiv als das Beschreiben von Storage-Slots.
Wofür sind Event-Logs in der Analyse nützlich?
Über standardisierte Events wie Transfer lassen sich Token- und Werteflüsse zuverlässig rekonstruieren. Damit sind Logs eine zentrale Datenquelle für Blockchain-Analyse und forensische Nachverfolgung.
Zusammenfassung
Ein Event-Log ist ein protokolliertes Ereignis eines Smart Contracts, das in den Transaktions-Receipts gespeichert wird, ohne den Contract-Zustand zu verändern. Logs bestehen aus Topics und einem Datenbereich, sind gasgünstiger als Storage und bilden eine wichtige Grundlage für Anwendungen sowie für die Blockchain-Analyse.
Weiterführende Quellen
- Solidity-Dokumentation – Events: docs.soliditylang.org
- Ethereum.org – Logging data from smart contracts with events: ethereum.org