Was ist ein Ereignis ?
Werden sie nur in Solidity verwendet?
Wie werden Ereignisse definiert?
Wie werden Events initiiert?
Gibt es einen Standardbegriff für den Aufruf eines Ereignisses (sagen Sie, ein Ereignis ist „passiert“, „wurde aufgerufen“, „wurde aufgerufen“, „ausgelöst“)?
Wo im Blockheader landet ein Event?
Relevant:
Wie man Ereignisse in Solidität umsetzt
Wo werden Vertragsereignisprotokolle in der Ethereum-Architektur gespeichert?
Die Blockchain ist eine Liste von Blöcken, die im Grunde Listen von Transaktionen sind. Jede Transaktion hat eine beigefügte Quittung, die null oder mehr Protokolleinträge enthält. Protokolleinträge stellen das Ergebnis von Ereignissen dar, die von einem Smart Contract ausgelöst wurden.
Um ein Ereignis im Solidity-Quellcode zu definieren, markieren Sie es auf diese Weise, indem Sie ihm das event
Schlüsselwort voranstellen (ähnlich in der Verwendung wie das function
Schlüsselwort). Anschließend rufen oder feuern Sie das Ereignis im Hauptteil der Funktion ab, die Sie veranlassen möchten, das Ereignis zu generieren. (Ich bezweifle, dass es dafür eine Standardformulierung gibt). Sie können Ereignisse von jeder Funktion mit dem emit
Schlüsselwort auslösen.
Jemand kann wahrscheinlich Informationen darüber hinzufügen, wie Sie Ereignisse in Ihrem DAPP „abhören“ können. Es verwendet die Filterfunktionalität von Web 3.0 .
Schauen Sie sich die Ethereum-Ontologie an, die kürzlich von Johannes Pfeffer veröffentlicht wurde, um eine sehr gründliche Erklärung vieler Ethereum-Konzepte zu erhalten.
console.log
. Das ist es, nicht mehr und nicht weniger. In Solidity hat es keinen anderen Zweck als das Protokollieren des Ereignisses in der Blockchain. Sie können Ereignisse jedoch in Echtzeit von außerhalb des Codes abhören, sodass Sie Ereignisse als eine Art Push-Benachrichtigung verwenden können.Ereignisse sind gesendete Signale, die die Smart Contracts auslösen können. DApps oder alles, was mit der Ethereum JSON-RPC-API verbunden ist, kann diese Ereignisse abhören und entsprechend handeln. Ereignis kann indiziert werden, sodass die Ereignishistorie später durchsucht werden kann.
Ein Beispielereignis aus einem Wallet-Vertrag ist:
event Deposit(address from, uint value);
Die Anwendung (dapp, Webanwendung, andere), die an Einzahlungen in einen Wallet-Vertrag interessiert ist, würde auf dieses Ereignis lauschen. Die Anwendung würde sich über JSON-RPC mit dem Ethereum-Knoten verbinden und entweder auf das Eintreten des Ereignisses warten (warten) oder alle vergangenen Ereignisse lesen, um den internen Status der Anwendung mit der Ethereum-Blockchain zu synchronisieren.
revert()
es verwende, werden Ereignisse wie Transfer()
richtig zurückgesetzt?Das Yellowpaper (Version 7e819ec - 2019-10-20) Abschnitt 6.1 Substate enthält eine Beschreibung von:
indexierbare „Checkpoints“ in der Ausführung des VM-Codes, die es ermöglichen, dass Vertragsanrufe von Außenstehenden außerhalb der Ethereum-Welt (z. B. dezentrale Anwendungs-Front-Ends) leicht verfolgt werden können.
Das Yellowpaper ging der Ereignisterminologie voraus, aber ein Ereignis ist eine Möglichkeit, mit der DApps Informationen an einem bestimmten Punkt während der Codeausführung von Smart Contracts (EVM) abrufen können. Immer wenn die EVM auf einen LOG-Opcode trifft, geben Ethereum-Knoten ein Ereignis aus, über das DApps und externe Prozesse benachrichtigt werden und auf das sie zugreifen können.
In Solidity wird ein emit
von an event
zu LOG-Opcodes kompiliert.
Lee
Lee
Lee