Wo werden Vertragsereignisprotokolle in der Ethereum-Architektur gespeichert?

Hintergrund zu Veranstaltungen: https://github.com/ethereum/wiki/wiki/Solidity-Features

Ereignisse ermöglichen die bequeme Nutzung der EVM-Protokollierungsfunktionen. Ereignisse sind vererbbare Mitglieder von Verträgen. Wenn sie aufgerufen werden, bewirken sie, dass die Argumente im Protokoll der Transaktion gespeichert werden. Bis zu drei Parameter können das Attribut indexed erhalten, was dazu führt, dass die jeweiligen Argumente als Protokollthemen statt als Daten behandelt werden. Der Hash der Signatur des Ereignisses ist immer eines der Themen. Alle nicht indizierten Argumente werden im Datenteil des Protokolls gespeichert.

Wenn nicht im Smart-Contract-Container, wo befinden sich die Protokolldaten?

Antworten (3)

Protokolle sind Teil der Transaktionsbelege. Sie werden von den Clients bei der Ausführung von Transaktionen generiert und neben der Blockchain gespeichert, um sie abrufen zu können.

Protokolle sind per se nicht Teil der Blockchain selbst, da sie nicht für den Konsens erforderlich sind (es handelt sich nur um historische Daten), sie werden jedoch von der Blockchain verifiziert, da die Hashes der Transaktionsbelege in den Blöcken gespeichert werden.

Protokolle werden in einem Knoten gespeichert? oder alle Knoten?, nur Client-Seite?
Alle Knoten derzeit (leichte Knoten werden sie wahrscheinlich nicht speichern, aber sie werden definitiv eine Möglichkeit haben, sie abzurufen). Es gibt keine Server/Client-Konzepte. Alle Knoten sind gleich.
Wenn Sie die Ereignisprotokolle von einem Knoten erhalten, ist dieser möglicherweise manipuliert. Wie stellen Sie sicher, dass Ereignisprotokolle korrekt sind?
Der Hash der Ereignisprotokolle wird im Blockheader aufgezeichnet. Wenn Sie den Header haben, können Sie einfach alle Protokolle aus diesem Block sammeln, hashen und mit dem im Header gespeicherten Wert vergleichen. Wenn sie übereinstimmen, hat keine Manipulation stattgefunden.
Wo finde ich die Protokolle in der Praxis?

Um bei der Antwort von @Peter zu helfen, hilft es zu erkennen, was Ereignisse und Protokolle sind. Ereignisse, Protokolle und Ereignisprotokolle sind normalerweise Ethereum-Begriffe, die austauschbar sind (in einigen Kontexten wird ein bestimmter Begriff bevorzugt, zum Beispiel Ereignisse in Solidity und web3.js und Protokolle wie in EVM und Yellow Paper).

Ereignisse/Protokolle sind das Ergebnis von LOG-Opcodes, die in der EVM ausgeführt werden. Sie sind Teil von "internen Transaktionen" , die durch die Ausführung von Transaktionsdaten durch die EVM abgeleitet werden.

Solange Sie also die Blockchain haben, haben Sie alle Ereignisse/Protokolle. Aus Effizienzgründen werden sie wie von @Peter beschrieben gespeichert, aber konzeptionell müssen sie nicht gespeichert werden, da sie aus der Blockchain (die per Definition aus allen Blöcken und Transaktionsdaten besteht) neu berechnet werden könnten.

Schließlich hat das Pruning keine Auswirkungen auf Ereignisse/Protokolle, da das Pruning auf den Zustand Trie angewendet wird und keine Blöcke verloren gehen.

Aus der offiziellen Dokumentation: https://solidity.readthedocs.io/en/v0.4.24/contracts.html#events

Ereignisse sind vererbbare Mitglieder von Verträgen. Wenn sie aufgerufen werden, bewirken sie, dass die Argumente im Protokoll der Transaktion gespeichert werden – einer speziellen Datenstruktur in der Blockchain. Diese Protokolle sind mit der Adresse des Vertrags verknüpft und werden in die Blockchain aufgenommen und bleiben dort, solange ein Block zugänglich ist (für immer von Frontier und Homestead, aber dies könnte sich mit Serenity ändern). Protokoll- und Ereignisdaten sind nicht innerhalb von Verträgen zugänglich (nicht einmal von dem Vertrag, der sie erstellt hat).